'From etoys2.1 of 26 July 2007 [latest update: #1651] on 16 September 2007 at 2:25:27 pm'! "Change Set: gettextSorted-tak Date: 16 September 2007 Author: Takashi Yamamiya Sort keyword entry in gettext files, and misc utility method for update process. - Sort keyword in gettext file. - Add X-Etoys-Category: header. "! !GetTextExporter2 commentStamp: 'tak 9/16/2007 01:12' prior: 0! Export translations to gettext format divided into categories. "Export gettext template files" GetTextExporter2 new exportTemplate. "Export translation files for current locale" GetTextExporter2 new exportTranslator: (NaturalLanguageTranslator availableForLocaleID: LocaleID current). "Export all gettext template and po files." GetTextExporter2 exportAll. ! !GetTextExporter2 methodsFor: 'exporting' stamp: 'tak 9/16/2007 12:43'! exportTranslator: translator "Export translation files. the file extention is 'po', or 'pot' if translator is nil " "GetTextExporter2 new exportTranslator: NaturalLanguageTranslator current " | categories | categories := Dictionary new. self appendTranslations: categories. categories keysAndValuesDo: [:categoryName :value | self export: value translator: translator category: categoryName]! ! !GetTextExporter2 methodsFor: 'private' stamp: 'tak 9/16/2007 13:06'! exportHeader: categoryName | headers | self exportTag: 'msgid' msg: ''. self exportTag: 'msgstr' msg: ''. headers := self createHeaders. headers add: 'X-Etoys-Category' -> categoryName. headers do: [:each | self exportHeaderLineKey: each key value: each value]. stream cr; cr! ! !GetTextExporter2 methodsFor: 'private' stamp: 'tak 9/16/2007 13:07'! export: literals translator: translator category: categoryName | occurs fileName | "Export a gettext file in a category. literals is a dictionary of keyword -> #(MethodReference...) in the category." fileName := self dirNameCategory: categoryName translator: translator. [stream := FileStream forceNewFileNamed: fileName. stream wantsLineEndConversion: true. stream lineEndConvention: #lf. stream converter: UTF8TextConverter new. self exportHeader: categoryName. literals keys asArray sort do: [:literal | occurs := literals at: literal. "(occurs size > 2) ifTrue: [Transcript show: literal; show: '='; show: occurs size; cr]." occurs do: [:occur | self exportRecordHeader: occur classSymbol asString , '>>' , occur methodSymbol asString]. self exportPhrase: literal translation: (translator ifNil: [''] ifNotNil: [translator translations at: literal ifAbsent: ''])]] ensure: [stream close]! ! !GetTextExporter2 class methodsFor: 'utilities' stamp: 'tak 9/16/2007 14:04'! exportTemplate "GetTextExporter2 exportTemplate" self new exportTemplate.! ! !GetTextImporter class methodsFor: 'utilities' stamp: 'tak 9/16/2007 13:24'! importAll "GetTextImporter importAll" "Import all gettext files on po/. Only registered language is imported" NaturalLanguageTranslator cachedTranslations do: [:translator | self import: translator allDirectory: FileDirectory default]! ! !ReleaseBuilderSqueakland methodsFor: 'olpc' stamp: 'tak 9/16/2007 14:16'! prepareReleaseImageForOLPC "ReleaseBuilderSqueakland new prepareReleaseImageForOLPC" self testPrerequired. self updateGettext. self updateAll. self cleanupForOLPC. self buildInitialScreenForOLPC. ! ! !ReleaseBuilderSqueakland methodsFor: 'olpc' stamp: 'tak 9/16/2007 14:05'! updateGettext "ReleaseBuilderSqueakland new updateGettext" "Export gettext template and import all translation in po/" GetTextExporter2 exportTemplate. GetTextImporter importAll.! ! GetTextExporter2 removeSelector: #exportHeader!