lists.squeakfoundation.org
Sign In
Sign Up
Sign In
Sign Up
Manage this list
×
Keyboard Shortcuts
Thread View
j
: Next unread message
k
: Previous unread message
j a
: Jump to all threads
j l
: Jump to MailingList overview
2024
May
April
March
February
January
2023
December
November
October
September
August
July
June
May
April
March
February
January
2022
December
November
October
September
August
July
June
May
April
March
February
January
2021
December
November
October
September
August
July
June
May
April
March
February
January
2020
December
November
October
September
August
July
June
May
April
March
February
January
2019
December
November
October
September
August
July
June
May
April
March
February
January
2018
December
November
October
September
August
July
June
May
April
March
February
January
2017
December
November
October
September
August
July
June
May
April
March
February
January
2016
December
November
October
September
August
July
June
May
April
March
February
January
2015
December
November
October
September
August
July
June
May
April
March
February
January
2014
December
November
October
September
August
July
June
May
April
March
February
January
2013
December
November
October
September
August
July
June
May
April
March
February
January
2012
December
November
October
September
August
July
June
May
April
March
February
January
2011
December
November
October
September
August
July
June
May
April
March
February
January
2010
December
November
October
September
August
July
June
May
April
March
February
January
2009
December
November
October
September
August
July
June
May
April
March
February
January
2008
December
November
October
September
August
July
June
May
April
March
February
January
2007
December
November
October
September
August
July
June
May
April
March
February
January
2006
December
November
October
September
August
July
June
May
April
March
February
January
2005
December
November
October
September
August
July
June
May
April
March
February
List overview
Download
Packages
March 2012
----- 2024 -----
May 2024
April 2024
March 2024
February 2024
January 2024
----- 2023 -----
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
----- 2022 -----
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
----- 2021 -----
December 2021
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
May 2021
April 2021
March 2021
February 2021
January 2021
----- 2020 -----
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
----- 2019 -----
December 2019
November 2019
October 2019
September 2019
August 2019
July 2019
June 2019
May 2019
April 2019
March 2019
February 2019
January 2019
----- 2018 -----
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
May 2018
April 2018
March 2018
February 2018
January 2018
----- 2017 -----
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
February 2017
January 2017
----- 2016 -----
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
----- 2015 -----
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
----- 2014 -----
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
----- 2013 -----
December 2013
November 2013
October 2013
September 2013
August 2013
July 2013
June 2013
May 2013
April 2013
March 2013
February 2013
January 2013
----- 2012 -----
December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
May 2012
April 2012
March 2012
February 2012
January 2012
----- 2011 -----
December 2011
November 2011
October 2011
September 2011
August 2011
July 2011
June 2011
May 2011
April 2011
March 2011
February 2011
January 2011
----- 2010 -----
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
----- 2009 -----
December 2009
November 2009
October 2009
September 2009
August 2009
July 2009
June 2009
May 2009
April 2009
March 2009
February 2009
January 2009
----- 2008 -----
December 2008
November 2008
October 2008
September 2008
August 2008
July 2008
June 2008
May 2008
April 2008
March 2008
February 2008
January 2008
----- 2007 -----
December 2007
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
February 2007
January 2007
----- 2006 -----
December 2006
November 2006
October 2006
September 2006
August 2006
July 2006
June 2006
May 2006
April 2006
March 2006
February 2006
January 2006
----- 2005 -----
December 2005
November 2005
October 2005
September 2005
August 2005
July 2005
June 2005
May 2005
April 2005
March 2005
February 2005
packages@lists.squeakfoundation.org
1 participants
189 discussions
Start a n
N
ew thread
The Trunk: GetText-edc.21.mcz
by commits@source.squeak.org
29 Mar '12
29 Mar '12
Edgar J. De Cleene uploaded a new version of GetText to project The Trunk:
http://source.squeak.org/trunk/GetText-edc.21.mcz
==================== Summary ==================== Name: GetText-edc.21 Author: edc Time: 29 March 2012, 8:48:03.631 am UUID: b6d73dcd-1e45-4ceb-b1ed-98caccac3efa Ancestors: GetText-edc.18, GetText-edc.20 More cleanup following Nico suggestions. Can't delete bad versions of trunk... =============== Diff against GetText-edc.18 =============== Item was removed: - ----- Method: GetTextExporter>>export: (in category 'exporting') ----- - export: aLanguage - language := aLanguage. - [stream := FileStream forceNewFileNamed: self defaultFileName. - stream lineEndConvention: #lf. - stream converter: UTF8TextConverter new. - self exportHeader. - self exportTranslations. - self exportUntranslated] - ensure: [stream close]! Item was removed: - ----- Method: GetTextExporter>>exportTranslations (in category 'private-translations') ----- - exportTranslations - | keys size | - keys := language translations keys asArray sort. - size := keys size. - ProgressInitiationException - display: 'Exporting translated phrases as a gettext file.' - during: [:bar | 1 - to: size - do: [:index | - self - exportPhrase: (keys at: index) - translation: (language translations - at: (keys at: index)). - bar value: index / size]]! Item was removed: - ----- Method: GetTextExporter>>exportUntranslated (in category 'private-translations') ----- - exportUntranslated - | keys | - keys := language untranslated keys asArray sort. - ProgressInitiationException - display: 'Exporting untranslated phrases as a gettext file.' - at: Sensor cursorPoint - from: 1 - to: keys size - during: [:bar | 1 - to: keys size - do: [:index | - self - exportPhrase: (keys at: index) - translation: ''. - bar value: index]]! Item was removed: - Object subclass: #GetTextExporter2 - instanceVariableNames: 'stream' - classVariableNames: '' - poolDictionaries: '' - category: 'GetText-Editor'! - - !GetTextExporter2 commentStamp: '<historical>' 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: (InternalTranslator newLocaleID: LocaleID current). - - "Export all gettext template and po files." - GetTextExporter2 exportAll. - - "To register a class category as a new domain" - TextDomainManager registerClassCategory: 'Morphic-Books' domain: 'Book'. - "Remove a class category" - TextDomainManager unregisterClassCategory: 'Morphic-Books'.! Item was removed: - ----- Method: GetTextExporter2 class>>coverageStatus (in category 'utilities') ----- - coverageStatus - "self coverageStatus" - | keys diff | - keys := self keys. - diff := InternalTranslator allKnownPhrases keys difference: keys. - Transcript cr; show: 'Detected keywords by GetTextExporter2: ' , keys size printString. - Transcript cr; show: 'All known phrases in InternalTranslator: ' , InternalTranslator allKnownPhrases size printString. - Transcript cr; show: 'Coverage: ' , (keys size / InternalTranslator allKnownPhrases size * 100.0) printString , '%'. - diff inspect! Item was removed: - ----- Method: GetTextExporter2 class>>exportAll (in category 'utilities') ----- - exportAll - "GetTextExporter2 exportAll" - self new exportTemplate. - InternalTranslator availableLanguageLocaleIDs - do: [:each | self new exportTranslator: each translator]! Item was removed: - ----- Method: GetTextExporter2 class>>exportTemplate (in category 'utilities') ----- - exportTemplate - "GetTextExporter2 exportTemplate" - self new exportTemplate.! Item was removed: - ----- Method: GetTextExporter2 class>>keys (in category 'utilities') ----- - keys - | categories | - categories := Dictionary new. - GetTextExporter2 new appendTranslations: categories. - ^ categories values - inject: Set new - into: [:set :next | set addAll: next keys; - yourself]! Item was removed: - ----- Method: GetTextExporter2 class>>listAllHelp (in category 'utilities') ----- - listAllHelp - "self listAllHelp" - | spec specs oCatalog flap flapSelectors allKeys oCatalogHelp flapHelp | - oCatalog := Dictionary new. - Morph withAllSubclasses - do: [:aClass | (aClass class includesSelector: #descriptionForPartsBin) - ifTrue: [spec := aClass descriptionForPartsBin. - oCatalog at: spec formalName put: spec documentation]]. - Morph withAllSubclasses - do: [:aClass | (aClass class includesSelector: #supplementaryPartsDescriptions) - ifTrue: [specs := aClass supplementaryPartsDescriptions. - specs - do: [:each | oCatalog at: each formalName put: each documentation]]]. - flap := Dictionary new. - flapSelectors := #(#defaultsQuadsDefiningPlugInSuppliesFlap #defaultsQuadsDefiningStackToolsFlap #defaultsQuadsDefiningSuppliesFlap #defaultsQuadsDefiningToolsFlap #defaultsQuadsDefiningWidgetsFlap #defaultsQuadsDefiningScriptingFlap ). - flapSelectors - do: [:selector | - specs := Flaps perform: selector. - specs - do: [:each | flap at: each third put: each fourth]]. - allKeys := oCatalog keys intersection: flap keys. - allKeys asArray sort - do: [:each | - oCatalogHelp := oCatalog - at: each - ifAbsent: ['']. - flapHelp := flap - at: each - ifAbsent: ['']. - oCatalogHelp = flapHelp - ifFalse: [Transcript cr; show: 'Name: ' , each. - Transcript cr; show: 'O: ' , oCatalogHelp. - Transcript cr; show: 'F: ' , flapHelp. - Transcript cr. - - ]]! Item was removed: - ----- Method: GetTextExporter2 class>>verifyExport (in category 'utilities') ----- - verifyExport - "Same as #verifyMsgID: but it writes / reads .po files actually" - "GetTextExporter2 verifyExport" - "InternalTranslator removeLocaleID: (LocaleID isoString: 'test-US')" - | src dst localeID | - localeID := LocaleID isoString: 'test-US'. - self verifyMsgID: localeID. - src := localeID translator. - GetTextExporter2 new exportTranslator: src. - InternalTranslator removeLocaleID: localeID. - dst := localeID translator. - GetTextImporter import: dst allDirectory: FileDirectory default! Item was removed: - ----- Method: GetTextExporter2 class>>verifyMsgID: (in category 'utilities') ----- - verifyMsgID: localeID - "GetTextExporter2 verifyMsgID: (LocaleID isoString: 'test-US')" - "InternalTranslator removeLocaleID: (LocaleID isoString: 'test-US')" - "Test gettext keyword extract function without file I/O. - A language named <langName> will be made. And - all possible translated words are shown with extra X charactor like - 'XwordX' in the language." - | src | - InternalTranslator removeLocaleID: localeID. - src := localeID translator. - self keys - do: [:key | src generics at: key put: 'X' , key , 'X']! Item was removed: - ----- Method: GetTextExporter2>>appendStringReceivers:into: (in category 'private') ----- - appendStringReceivers: aSymbol into: domains - | literals references domainName methodReference keywords found | - - found := TranslatedReceiverFinder new stringReceiversWithContext: aSymbol. - found do: [ :assoc | - methodReference := assoc key. - keywords := assoc value. - domainName := self getTextDomainForPackage: - (PackageOrganizer default packageOfMethod: methodReference ifNone: [TextDomainManager defaultDomain]). - literals := domains at: domainName ifAbsentPut: [Dictionary new]. - keywords do: [ :literal | - references := literals at: literal ifAbsentPut: [OrderedCollection new]. - references add: methodReference. - ]. - ]. - ! Item was removed: - ----- Method: GetTextExporter2>>appendTranslations: (in category 'exporting') ----- - appendTranslations: domains - self appendStringReceivers: #translated into: domains. - self appendStringReceivers: #translatedNoop into: domains. - self appendVocabularies: domains. - ! Item was removed: - ----- Method: GetTextExporter2>>appendVocabularies: (in category 'private') ----- - appendVocabularies: domains - | literalsForDomain references domainName methodReference | - - EToyVocabulary allPhrasesWithContextToTranslate do: [ :r | - methodReference := (MethodReference new setStandardClass: (r second) methodSymbol: (r third)). - "domainName := self getTextDomainForPackage: (PackageOrganizer default packageOfMethod: methodReference)". - domainName := 'Etoys-Tiles'. - literalsForDomain := domains at: domainName ifAbsentPut: [Dictionary new]. - r fourth do: [ :literal | - references := literalsForDomain at: literal ifAbsentPut: [OrderedCollection new]. - references add: methodReference. - ]. - ]. - ! Item was removed: - ----- Method: GetTextExporter2>>createExtraInformation (in category 'private') ----- - createExtraInformation - | extras | - extras := OrderedCollection new. - #( - 'Language name as you''d like it to appear in the Languages menu' 'Language-Name' - 'Scale to apply to font size (2 for twice as large)' 'Font-Scale' - 'Directionality of language' 'Language-Direction' - 'Use this if you do not want any of the text to be bolded, for legibility' 'Suppress-Bold' - 'Font to use on a Windows system' 'Win-Font' - 'Font to use on a Mac system' 'Mac-Font' - 'Font to use on a Linux system' 'Linux-Font') pairsDo: [:first :second | - extras add: (Array with: '' with: first with: second). - ]. - ^ extras! Item was removed: - ----- Method: GetTextExporter2>>createHeaders (in category 'private') ----- - createHeaders - | headers | - headers := OrderedCollection new. - headers add: 'Project-Id-Version' -> 'eToys'. - headers add: 'POT-Creation-Date' -> self currentDateAndTime. - headers add: 'PO-Revision-Date' -> self currentDateAndTime. - headers add: 'Last-Translator' -> ''. - headers add: 'Language-Team' -> ''. - headers add: 'MIME-Version' -> '1.0'. - headers add: 'Content-Type' -> ('text/plain; charset=', stream converter class encodingNames first). - headers add: 'Content-Transfer-Encoding' -> '8bit'. - headers add: 'X-Etoys-SystemVersion' -> (SystemVersion current asString). - ^ headers! Item was removed: - ----- Method: GetTextExporter2>>currentDateAndTime (in category 'private') ----- - currentDateAndTime - ^ String - streamContents: [:aStream | - aStream nextPutAll: Date today yyyymmdd; - space. - Time now - print24: true - showSeconds: false - on: aStream. - aStream nextPutAll: '-0000']! Item was removed: - ----- Method: GetTextExporter2>>dirNameCategory:translator: (in category 'exporting') ----- - dirNameCategory: category translator: translator - "Answer a file name for the category. Make one if it is not exist yet. - Make template file name if translator is nil" - "self new dirNameCategory: 'Morphic-Scripting Support' translator: - NaturalLanguageTranslator current" - "self new dirNameCategory: 'Morphic-Scripting Support' translator: nil" - | safeCategory fileName dirName pathName | - safeCategory := category copyReplaceAll: ' ' with: ':='. - fileName := translator - ifNil: [safeCategory , '.pot'] - ifNotNil: [translator localeID posixName , '.po']. - dirName := (safeCategory findTokens: '-') - inject: 'po' - into: [:aString :next | aString , FileDirectory slash , next]. - pathName := dirName , FileDirectory slash , fileName. - (FileDirectory default directoryNamed: dirName) assureExistence. - ^ pathName! Item was removed: - ----- Method: GetTextExporter2>>dirNameDomain:translator: (in category 'exporting') ----- - dirNameDomain: domain translator: translator - "Answer a file name for the domain. Make one if it is not exist yet. - Make template file name if translator is nil" - "self new dirNameDomain: 'etoys' translator: - NaturalLanguageTranslator current" - "self new dirNameDomain: 'etoys' translator: nil" - | fileName dirName pathName | - "safeCategory := category copyReplaceAll: ' ' with: ':='." - fileName := translator - ifNil: [domain , '.pot'] - ifNotNil: [translator localeID posixName , '.po']. - dirName := 'po', FileDirectory slash, domain. - pathName := dirName , FileDirectory slash , fileName. - (FileDirectory default directoryNamed: dirName) assureExistence. - ^ pathName! Item was removed: - ----- Method: GetTextExporter2>>export:translator:domain: (in category 'private') ----- - export: literals translator: translator domain: domainName - | fileName | - "Export a gettext file in a category. literals is a dictionary of keyword -> #(MethodReference...) in the textDomain." - fileName := self dirNameDomain: domainName translator: translator. - [stream := FileStream forceNewFileNamed: fileName. - stream lineEndConvention: #lf. - stream converter: UTF8TextConverter new. - self exportHeader: domainName. - self exportInformation: self createExtraInformation. - self exportBody: literals translator: translator] - ensure: [stream close]! Item was removed: - ----- Method: GetTextExporter2>>exportBody:translator: (in category 'file out') ----- - exportBody: literals translator: translator - "Export a gettext file body. literals is a dictionary of keyword -> - #(MethodReference...) in the textDomain." - "Build {sortKey. comment. msgid } to optimize sorting (getting category is - too slow). - If there are two or more methods for a mgsid, only first method - (alphabetical) is used for sorting." - | sorted msgid sortedMethods category sortKey comment triplets commentUnderLined | - triplets := literals associations - collect: [:assoc | - msgid := assoc key. - sortedMethods := assoc value asArray sort. - category := (Smalltalk at: sortedMethods first classSymbol) category asString. - sortKey := category , ',' , sortedMethods first printString , ',' , msgid. - comment := (sortedMethods - collect: [:each | each actualClass asString , '>>' , each methodSymbol asString]) - inject: category - into: [:result :methodName | result , ',' , methodName]. - "Replace white spaces to := because gettext tool might - replace a space to a new line some times, and it makes - difficult to take a diff." - commentUnderLined := comment copyReplaceAll: ' ' with: ':='. - Array - with: sortKey - with: commentUnderLined - with: msgid]. - "Sort and output the words" - sorted := triplets - sort: [:a :b | a first <= b first]. - sorted - do: [:triplet | - comment := triplet second. - msgid := triplet third. - self exportRecordHeader: comment. - self - exportPhrase: msgid - translation: (self translationFor: msgid in: translator)]! Item was removed: - ----- Method: GetTextExporter2>>exportHeader: (in category 'private') ----- - exportHeader: domainName - | headers | - self exportTag: 'msgid' msg: ''. - self exportTag: 'msgstr' msg: ''. - headers := self createHeaders. - headers add: 'X-Etoys-Domain' -> domainName. - headers do: [:each | self exportHeaderLineKey: each key value: each value]. - stream cr; cr! Item was removed: - ----- Method: GetTextExporter2>>exportHeaderLineKey:value: (in category 'private') ----- - exportHeaderLineKey: keyString value: valueString - stream nextPut: $"; - nextPutAll: keyString; - nextPut: $:; - space; - nextPutAll: valueString; - nextPutAll: '\n'; - nextPut: $"; - cr.! Item was removed: - ----- Method: GetTextExporter2>>exportInformation: (in category 'private') ----- - exportInformation: anOrderedCollection - anOrderedCollection do: [:each | - self exportRecordHeader: each second. - self exportPhrase: each third translation: '']. - stream cr.! Item was removed: - ----- Method: GetTextExporter2>>exportPhrase:translation: (in category 'private') ----- - exportPhrase: phraseString translation: translationString - | normalizedTrans tmp transStartsWithCR transEndsWithCR| - phraseString isEmpty - ifTrue: [^ self]. - self exportTag: 'msgid' msg: phraseString. - translationString size = 0 ifTrue: [ - normalizedTrans := '' - ] ifFalse: [ - transEndsWithCR := translationString last = (Character cr). - phraseString last = (Character cr) ifTrue: [ - transEndsWithCR ifTrue: [ - normalizedTrans := translationString - ] ifFalse: [ - normalizedTrans := translationString , String cr - ] - ] ifFalse: [ - transEndsWithCR ifTrue: [ - normalizedTrans := translationString allButLast - ] ifFalse: [ - normalizedTrans := translationString - ] - ]. - transStartsWithCR := normalizedTrans first = (Character cr). - phraseString first = (Character cr) ifTrue: [ - transStartsWithCR ifFalse: [ - tmp := (Character cr asString) , normalizedTrans. - normalizedTrans := tmp. - ] - ] ifFalse: [ - transStartsWithCR ifTrue: [ - normalizedTrans := normalizedTrans allButFirst - ] - ] - ]. - self exportTag: 'msgstr' msg: normalizedTrans. - stream cr! Item was removed: - ----- Method: GetTextExporter2>>exportRecordHeader: (in category 'private') ----- - exportRecordHeader: context - stream - nextPutAll: '#: '; - nextPutAll: context; - cr.! Item was removed: - ----- Method: GetTextExporter2>>exportTag:msg: (in category 'private') ----- - exportTag: tag msg: aString - | pos end line | - (aString indexOf: Character cr) - = 0 - ifTrue: [self exportTag: tag singleLine: aString] - ifFalse: [self exportTag: tag singleLine: ''. - pos := 1. - end := 0. - [end < aString size] - whileTrue: [end := aString indexOf: Character cr startingAt: pos. - end = 0 - ifTrue: [end := aString size]. - line := aString copyFrom: pos to: end. - stream nextPut: $"; - - nextPutAll: (self formatString: line); - nextPut: $"; - cr. - pos := end + 1]]! Item was removed: - ----- Method: GetTextExporter2>>exportTag:singleLine: (in category 'private') ----- - exportTag: tag singleLine: aString - stream nextPutAll: tag. - stream space. - stream nextPut: $". - stream - nextPutAll: (self formatString: aString). - stream nextPut: $". - stream cr! Item was removed: - ----- Method: GetTextExporter2>>exportTemplate (in category 'exporting') ----- - exportTemplate - "GetTextExporter2 new exportTemplate" - self exportTranslator: nil! Item was removed: - ----- Method: GetTextExporter2>>exportTranslator: (in category 'exporting') ----- - exportTranslator: translator - "Export translation files. the file extention is 'po', or 'pot' if translator is nil " - "GetTextExporter2 new exportTranslator: NaturalLanguageTranslator current " - | domains | - domains := Dictionary new. - self appendTranslations: domains. - domains - keysAndValuesDo: [:domainName :value | - self - export: value - translator: translator - domain: domainName]! Item was removed: - ----- Method: GetTextExporter2>>formatReplacements (in category 'private') ----- - formatReplacements - | replacements | - replacements := OrderedCollection new. - replacements add: '\' -> '\\'. - replacements add: String cr -> '\n'. - replacements add: String tab -> '\t'. - replacements add: '"' -> '\"'. - ^ replacements! Item was removed: - ----- Method: GetTextExporter2>>formatString: (in category 'private') ----- - formatString: aString - | result | - result := aString. - self formatReplacements - do: [:each | result := result copyReplaceAll: each key with: each value]. - ^ result! Item was removed: - ----- Method: GetTextExporter2>>getTextDomainForPackage: (in category 'as yet unclassified') ----- - getTextDomainForPackage: aPackageInfo - ^TextDomainManager domainForPackage: aPackageInfo! Item was removed: - ----- Method: GetTextExporter2>>stream (in category 'accessing') ----- - stream - ^ stream! Item was removed: - ----- Method: GetTextExporter2>>stream: (in category 'accessing') ----- - stream: aStream - stream := aStream! Item was removed: - ----- Method: GetTextExporter2>>translationFor:in: (in category 'private') ----- - translationFor: aKey in: translator - translator ifNil: [^'']. - translator translations at: aKey ifPresent: [:s | ^s]. - "If we have old camelCase translations, make space-separated words" - translator translations at: aKey toCamelCase ifPresent: [:s | - (s includes: Character space) ifTrue: [^s]. - ^s fromCamelCase]. - ^''! Item was removed: - Object subclass: #ISOLanguageDefinition - instanceVariableNames: 'iso3 iso2 iso3Alternate language' - classVariableNames: 'ISO2Countries ISO2Table ISO3Countries ISO3Table' - poolDictionaries: '' - category: 'GetText-Localization'! Item was removed: - ----- Method: ISOLanguageDefinition class>>buildIso3166CodesTables (in category 'private') ----- - buildIso3166CodesTables - "ISOLanguageDefinition buildIso3166CodesTables" - | rawdata stream country isoa2 isoa3 unNumeric macName macCode windowsName windowsCode empty table | - rawdata := self iso3166Codes. - table := OrderedCollection new: 200. - stream := rawdata readStream. - empty := 160 asCharacter asString. - [stream atEnd] whileFalse: - [country := stream nextLine. - isoa2 := stream nextLine. - isoa3 := stream nextLine. - unNumeric := stream nextLine. - windowsName := stream nextLine. - windowsName = empty ifTrue: [windowsName := nil]. - windowsCode := stream nextLine. - windowsCode = empty ifTrue: [windowsCode := nil]. - macName := stream nextLine. - macName = empty ifTrue: [macName := nil]. - macCode := stream nextLine. - macCode = empty ifTrue: [macCode := nil]. - table add: { country. isoa2. isoa3. unNumeric. windowsName. windowsCode. macName. macCode. }]. - ^table! Item was removed: - ----- Method: ISOLanguageDefinition class>>extraCountryDefinitions (in category 'private') ----- - extraCountryDefinitions - ^{ - {'Kids'. 'KIDS'. 'KIDS'.}. - }! Item was removed: - ----- Method: ISOLanguageDefinition class>>extraISO3Definitions (in category 'private') ----- - extraISO3Definitions - - ^self readISOLanguagesFrom: 'jpk Japanese (Kids) - ' readStream! Item was removed: - ----- Method: ISOLanguageDefinition class>>initISO3LanguageTable (in category 'private') ----- - initISO3LanguageTable - "ISOLanguageDefinition initIso3LanguageTable" - - | table | - table := ISOLanguageDefinition readISOLanguagesFrom: ISOLanguageDefinition isoLanguages readStream. - table addAll: self extraISO3Definitions. - ^table! Item was removed: - ----- Method: ISOLanguageDefinition class>>initISOCountries (in category 'private') ----- - initISOCountries - "ISOLanguageDefinition initISOCountries" - | iso3166Table | - iso3166Table := ISOLanguageDefinition buildIso3166CodesTables. - ISO2Countries := Dictionary new. - ISO3Countries := Dictionary new. - iso3166Table do: [:entry | - ISO2Countries at: (entry at: 2) put: (entry at: 1). - ISO3Countries at: (entry at: 3) put: (entry at: 1)]. - self extraCountryDefinitions do: [:entry | - ISO2Countries at: (entry at: 2) put: (entry at: 1). - ISO3Countries at: (entry at: 3) put: (entry at: 1)]! Item was removed: - ----- Method: ISOLanguageDefinition class>>initialize (in category 'class initialization') ----- - initialize - "ISOLanguageDefinition initialize" - - ISO3Table := nil. - ISO2Table := nil! Item was removed: - ----- Method: ISOLanguageDefinition class>>iso2Countries (in category 'private') ----- - iso2Countries - "ISOLanguageDefinition iso2Countries" - "ISO2Countries := nil. ISO3Countries := nil" - - ISO2Countries ifNil: [self initISOCountries]. - ^ISO2Countries! Item was removed: - ----- Method: ISOLanguageDefinition class>>iso2LanguageDefinition: (in category 'accessing') ----- - iso2LanguageDefinition: aString - ^self iso2LanguageTable at: aString! Item was removed: - ----- Method: ISOLanguageDefinition class>>iso2LanguageTable (in category 'private') ----- - iso2LanguageTable - "ISOLanguageDefinition iso2LanguageTable" - - ISO2Table ifNotNil: [^ISO2Table]. - ISO2Table := Dictionary new: self iso3LanguageTable basicSize. - self iso3LanguageTable do: [:entry | - ISO2Table at: entry iso2 put: entry]. - ^ISO2Table! Item was removed: - ----- Method: ISOLanguageDefinition class>>iso3166Codes (in category 'private') ----- - iso3166Codes - "
http://www.unicode.org/onlinedat/countries.html
" - - ^'LAND ISLANDS - AX - - - - - - - AFGHANISTAN - AF - AFG - 004 - - - - - ALBANIA - AL - ALB - 008 - CTRY_ALBANIA - 355 - - - ALGERIA - DZ - DZA - 012 - CTRY_ALGERIA - 213 - verArabic - 16 - AMERICAN SAMOA - AS - ASM - 016 - - - - - ANDORRA - AD - AND - 020 - - - - - ANGOLA - AO - AGO - 024 - - - - - ANGUILLA - AI - AIA - 660 - - - - - ANTARCTICA - AQ - ATA - 010 - - - - - ANTIGUA AND BARBUDA - AG - ATG - 028 - - - - - ARGENTINA - AR - ARG - 032 - CTRY_ARGENTINA - 54 - - - ARMENIA - AM - ARM - 051 - CTRY_ARMENIA - 374 - verArmenian - 84 - ARUBA - AW - ABW - 533 - - - - - AUSTRALIA - AU - AUS - 036 - CTRY_AUSTRALIA - 61 - verAustralia - 15 - AUSTRIA - AT - AUT - 040 - CTRY_AUSTRIA - 43 - verAustria - 92 - AZERBAIJAN - AZ - AZE - 031 - CTRY_AZERBAIJAN - 994 - - - BAHAMAS - BS - BHS - 044 - - - - - BAHRAIN - BH - BHR - 048 - CTRY_BAHRAIN - 973 - - - BANGLADESH - BD - BGD - 050 - - - verBengali - 60 - BARBADOS - BB - BRB - 052 - - - - - BELARUS - BY - BLR - 112 - CTRY_BELARUS - 375 - - - BELGIUM - BE - BEL - 056 - CTRY_BELGIUM - 32 - verFrBelgium, verFlemish - 98 - BELIZE - BZ - BLZ - 084 - CTRY_BELIZE - 501 - - - BENIN - BJ - BEN - 204 - - - - - BERMUDA - BM - BMU - 060 - - - - - BHUTAN - BT - BTN - 064 - - - verBhutan - 83 - BOLIVIA - BO - BOL - 068 - CTRY_BOLIVIA - 591 - - - BOSNIA AND HERZEGOVINA - BA - BIH - 070 - - - - - BOTSWANA - BW - BWA - 072 - - - - - BOUVET ISLAND - BV - BVT - 074 - - - - - BRAZIL - BR - BRA - 076 - CTRY_BRAZIL - 55 - verBrazil - 71 - BRITISH INDIAN OCEAN TERRITORY - IO - IOT - 086 - - - - - BRUNEI DARUSSALAM - BN - BRN - 096 - CTRY_BRUNEI_DARUSSALAM - 673 - - - BULGARIA - BG - BGR - 100 - CTRY_BULGARIA - 359 - verBulgaria - 72 - BURKINA FASO - BF - BFA - 854 - - - - - BURUNDI - BI - BDI - 108 - - - - - CAMBODIA - KH - KHM - 116 - - - - - CAMEROON - CM - CMR - 120 - - - - - CANADA - CA - CAN - 124 - CTRY_CANADA - 2 - verFrCanada, verEndCanada - 82 - CAPE VERDE - CV - CPV - 132 - - - - - CAYMAN ISLANDS - KY - CYM - 136 - - - - - CENTRAL AFRICAN REPUBLIC - CF - CAF - 140 - - - - - CHAD - TD - TCD - 148 - - - - - CHILE - CL - CHL - 152 - CTRY_CHILE - 56 - - - CHINA - CN - CHN - 156 - CTRY_PRCHINA - 86 - verChina - 52 - CHRISTMAS ISLAND - CX - CXR - 162 - - - - - COCOS (KEELING) ISLANDS - CC - CCK - 166 - - - - - COLOMBIA - CO - COL - 170 - CTRY_COLOMBIA - 57 - - - COMOROS - KM - COM - 174 - - - - - CONGO - CG - COG - 178 - - - - - CONGO, THE DEMOCRATIC REPUBLIC OF THE - CD - - - - - - - COOK ISLANDS - CK - COK - 184 - - - - - COSTA RICA - CR - CRI - 188 - CTRY_COSTA_RICA - 506 - - - COTE D''IVOIRE - CI - CIV - 384 - - - - - CROATIA (local name: Hrvatska) - HR - HRV - 191 - CTRY_CROATIA - 385 - verCroatia, verYugoCroatian - 68 (c), 25 (y) - CUBA - CU - CUB - 192 - - - - - CYPRUS - CY - CYP - 196 - - - verCyprus - 23 - CZECH REPUBLIC - CZ - CZE - 203 - CTRY_CZECH - 420 - verCzech - 56 - DENMARK - DK - DNK - 208 - CTRY_DENMARK - 45 - verDenmark(da), verFaeroeIsl(fo) - 9(da), 47(fo) - DJIBOUTI - DJ - DJI - 262 - - - - - DOMINICA - DM - DMA - 212 - - - - - DOMINICAN REPUBLIC - DO - DOM - 214 - CTRY_DOMINICAN_REPUBLIC - 1 - - - EAST TIMOR - TL - TLS - 626 - - - - - ECUADOR - EC - ECU - 218 - CTRY_ECUADOR - 593 - - - EGYPT - EG - EGY - 818 - CTRY_EGYPT - 20 - verArabic - 16 - EL SALVADOR - SV - SLV - 222 - CTRY_EL_SALVADOR - 503 - - - EQUATORIAL GUINEA - GQ - GNQ - 226 - - - - - ERITREA - ER - ERI - 232 - - - - - ESTONIA - EE - EST - 233 - CTRY_ESTONIA - 372 - verEstonia - 44 - ETHIOPIA - ET - ETH - 210 - - - - - FALKLAND ISLANDS (MALVINAS) - FK - FLK - 238 - - - - - FAROE ISLANDS - FO - FRO - 234 - CTRY_FAEROE_ISLANDS - 298 - - - FIJI - FJ - FJI - 242 - - - - - FINLAND - FI - FIN - 246 - CTRY_FINLAND - 358 - verFinland - 17 - FRANCE - FR - FRA - 250 - CTRY_FRANCE - 33 - verFrance - 1 - FRANCE, METROPOLITAN - FX - FXX - 249 - - - - - FRENCH GUIANA - GF - GUF - 254 - - - - - FRENCH POLYNESIA - PF - PYF - 258 - - - - - FRENCH SOUTHERN TERRITORIES - TF - ATF - 260 - - - - - GABON - GA - GAB - 266 - - - - - GAMBIA - GM - GMB - 270 - - - - - GEORGIA - GE - GEO - 268 - CTRY_GEORGIA - 995 - verGeorgian - 85 - GERMANY - DE - DEU - 276 - CTRY_GERMANY - 49 - verGermany - 3 - GHANA - GH - GHA - 288 - - - - - GIBRALTAR - GI - GIB - 292 - - - - - GREECE - GR - GRC - 300 - CTRY_GREECE - 30 - verGreece, verGreecePoly - 20, 40 - GREENLAND - GL - GRL - 304 - - - verGreenland - 107 - GRENADA - GD - GRD - 308 - - - - - GUADELOUPE - GP - GLP - 312 - - - - - GUAM - GU - GUM - 316 - - - - - GUATEMALA - GT - GTM - 320 - CTRY_GUATEMALA - 502 - - - GUINEA - GN - GIN - 324 - - - - - GUINEA-BISSAU - GW - GNB - 624 - - - - - GUYANA - GY - GUY - 328 - - - - - HAITI - HT - HTI - 332 - - - - - HEARD ISLAND & MCDONALD ISLANDS - HM - HMD - 334 - - - - - HONDURAS - HN - HND - 340 - CTRY_HONDURAS - 504 - - - HONG KONG - HK - HKG - 344 - CTRY_HONG_KONG - 852 - - - HUNGARY - HU - HUN - 348 - CTRY_HUNGARY - 36 - verHungary - 43 - ICELAND - IS - ISL - 352 - CTRY_ICELAND - 354 - verIceland - 21 - INDIA - IN - IND - 356 - CTRY_INDIA - 91 - verIndiaHindi(hi) - 33 - INDONESIA - ID - IDN - 360 - CTRY_INDONESIA - 62 - - - IRAN, ISLAMIC REPUBLIC OF - IR - IRN - 364 - CTRY_IRAN - 981 - verIran - 48 - IRAQ - IQ - IRQ - 368 - CTRY_IRAQ - 964 - verArabic - 16 - IRELAND - IE - IRL - 372 - CTRY_IRELAND - 353 - verIreland - 50 - ISRAEL - IL - ISR - 376 - CTRY_ISRAEL - 972 - verIsrael - 13 - ITALY - IT - ITA - 380 - CTRY_ITALY - 39 - verItaly - 4 - JAMAICA - JM - JAM - 388 - CTRY_JAMAICA - 1 - - - JAPAN - JP - JPN - 392 - CTRY_JAPAN - 81 - verJapan - 14 - JORDAN - JO - JOR - 400 - CTRY_JORDAN - 962 - - - KAZAKHSTAN - KZ - KAZ - 398 - CTRY_KAZAKSTAN - 7 - - - KENYA - KE - KEN - 404 - CTRY_KENYA - 254 - - - KIRIBATI - KI - KIR - 296 - - - - - KOREA, DEMOCRATIC PEOPLE''S REPUBLIC OF - KP - PRK - 408 - - - verKorea - 51 - KOREA, REPUBLIC OF - KR - KOR - 410 - CTRY_SOUTH_KOREA - 82 - verKorea - - KUWAIT - KW - KWT - 414 - CTRY_KUWAIT - 965 - - - KYRGYZSTAN - KG - KGZ - 417 - CTRY_KYRGYZSTAN - 996 - - - LAO PEOPLE''S DEMOCRATIC REPUBLIC - LA - LAO - 418 - - - - - LATVIA - LV - LVA - 428 - CTRY_LATVIA - 371 - verLatvia - 45 - LEBANON - LB - LBN - 422 - CTRY_LEBANON - 961 - - - LESOTHO - LS - LSO - 426 - - - - - LIBERIA - LR - LBR - 430 - - - - - LIBYAN ARAB JAMAHIRIYA - LY - LBY - 434 - CTRY_LIBYA - 218 - verArabic - 16 - LIECHTENSTEIN - LI - LIE - 438 - CTRY_LIECHTENSTEIN - 41 - - - LITHUANIA - LT - LTU - 440 - CTRY_LITHUANIA - 370 - verLithuania - 41 - LUXEMBOURG - LU - LUX - 442 - CTRY_LUXEMBOURG - 352 - verFrBelgiumLux - 6 - MACAU - MO - MAC - 446 - CTRY_MACAU - 853 - - - MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF - MK - MKD - 807 - CTRY_MACEDONIA - 389 - verMacedonian - - MADAGASCAR - MG - MDG - 450 - - - - - MALAWI - MW - MWI - 454 - - - - - MALAYSIA - MY - MYS - 458 - CTRY_MALAYSIA - 60 - - - MALDIVES - MV - MDV - 462 - CTRY_MALDIVES - 960 - - - MALI - ML - MLI - 466 - - - - - MALTA - MT - MLT - 470 - - - verMalta - 22 - MARSHALL ISLANDS - MH - MHL - 584 - - - - - MARTINIQUE - MQ - MTQ - 474 - - - - - MAURITANIA - MR - MRT - 478 - - - - - MAURITIUS - MU - MUS - 480 - - - - - MAYOTTE - YT - MYT - 175 - - - - - MEXICO - MX - MEX - 484 - CTRY_MEXICO - 52 - - - MICRONESIA, FEDERATED STATES OF - FM - FSM - 583 - - - - - MOLDOVA, REPUBLIC OF - MD - MDA - 498 - - - - - MONACO - MC - MCO - 492 - CTRY_MONACO - 33 - - - MONGOLIA - MN - MNG - 496 - CTRY_MONGOLIA - 976 - - - MONTSERRAT - MS - MSR - 500 - - - - - MOROCCO - MA - MAR - 504 - CTRY_MOROCCO - 212 - verArabic - 16 - MOZAMBIQUE - MZ - MOZ - 508 - - - - - MYANMAR - MM - MMR - 104 - - - - - NAMIBIA - NA - NAM - 516 - - - - - NAURU - NR - NRU - 520 - - - - - NEPAL - NP - NPL - 524 - - - verNepal - 106 - NETHERLANDS - NL - NLD - 528 - CTRY_NETHERLANDS - 31 - verNetherlands - 5 - NETHERLANDS ANTILLES - AN - ANT - 530 - - - - - NEW CALEDONIA - NC - NCL - 540 - - - - - NEW ZEALAND - NZ - NZL - 554 - CTRY_NEW_ZEALAND - 64 - - - NICARAGUA - NI - NIC - 558 - CTRY_NICARAGUA - 505 - - - NIGER - NE - NER - 562 - - - - - NIGERIA - NG - NGA - 566 - - - - - NIUE - NU - NIU - 570 - - - - - NORFOLK ISLAND - NF - NFK - 574 - - - - - NORTHERN MARIANA ISLANDS - MP - MNP - 580 - - - - - NORWAY - NO - NOR - 578 - CTRY_NORWAY - 47 - verNorway - 12 - OMAN - OM - OMN - 512 - CTRY_OMAN - 968 - - - PAKISTAN - PK - PAK - 586 - CTRY_PAKISTAN - 92 - verPakistanUrdu, verPunjabi - 34 (U), 95 (P) - PALAU - PW - PLW - 585 - - - - - PANAMA - PA - PAN - 591 - CTRY_PANAMA - 507 - - - PALESTINIAN TERRITORY, OCCUPIED - PS - - - - - - - PAPUA NEW GUINEA - PG - PNG - 598 - - - - - PARAGUAY - PY - PRY - 600 - CTRY_PARAGUAY - 595 - - - PERU - PE - PER - 604 - CTRY_PERU - 51 - - - PHILIPPINES - PH - PHL - 608 - CTRY_PHILIPPINES - 63 - - - PITCAIRN - PN - PCN - 612 - - - - - POLAND - PL - POL - 616 - CTRY_POLAND - 48 - verPoland - 42 - PORTUGAL - PT - PRT - 620 - CTRY_PORTUGAL - 351 - verPortugal - 10 - PUERTO RICO - PR - PRI - 630 - CTRY_PUERTO_RICO - 1 - - - QATAR - QA - QAT - 634 - CTRY_QATAR - 974 - - - REUNION - RE - REU - 638 - - - - - ROMANIA - RO - ROU* - 642 - CTRY_ROMANIA - 40 - verRomania - 39 - RUSSIAN FEDERATION - RU - RUS - 643 - CTRY_RUSSIA - 7 - verRussia - 49 - RWANDA - RW - RWA - 646 - - - - - SAINT KITTS AND NEVIS - KN - KNA - 659 - - - - - SAINT LUCIA - LC - LCA - 662 - - - - - SAINT VINCENT AND THE GRENADINES - VC - VCT - 670 - - - - - SAMOA - WS - WSM - 882 - - - - - SAN MARINO - SM - SMR - 674 - - - - - SAO TOME AND PRINCIPE - ST - STP - 678 - - - - - SAUDI ARABIA - SA - SAU - 682 - CTRY_SAUDI_ARABIA - 966 - verArabic - 16 - SENEGAL - SN - SEN - 686 - - - - - SERBIA AND MONTENEGRO - CS - - - CTRY_SERBIA - 381 - - - SEYCHELLES - SC - SYC - 690 - - - - - SIERRA LEONE - SL - SLE - 694 - - - - - SINGAPORE - SG - SGP - 702 - CTRY_SINGAPORE - 65 - verSingapore - 100 - SLOVAKIA (Slovak Republic) - SK - SVK - 703 - CTRY_SLOVAK - 421 - verSlovak - 57 - SLOVENIA - SI - SVN - 705 - CTRY_SLOVENIA - 386 - verSlovenian - 66 - SOLOMON ISLANDS - SB - SLB - 90 - - - - - SOMALIA - SO - SOM - 706 - - - - - SOUTH AFRICA - ZA - ZAF - 710 - CTRY_SOUTH_AFRICA - 27 - - - SOUTH GEORGIA AND THE SOUTH SANDWICH ISLANDS - GS - - - - - - - SPAIN - ES - ESP - 724 - CTRY_SPAIN - 34 - verSpain - 8 - SRI LANKA - LK - LKA - 144 - - - - - SAINT HELENA - SH - SHN - 654 - - - - - SAINT PIERRE AND MIQUELON - PM - SPM - 666 - - - - - SUDAN - SD - SDN - 736 - - - - - SURINAME - SR - SUR - 740 - - - - - SVALBARD AND JAN MAYEN ISLANDS - SJ - SJM - 744 - - - - - SWAZILAND - SZ - SWZ - 748 - - - - - SWEDEN - SE - SWE - 752 - CTRY_SWEDEN - 46 - verSweden - 7 - SWITZERLAND - CH - CHE - 756 - CTRY_SWITZERLAND - 41 - verFrSwiss(fr), verGrSwiss(de) - 18(fr), 19(de) - SYRIAN ARAB REPUBLIC - SY - SYR - 760 - CTRY_SYRIA - 963 - - - TAIWAN, PROVINCE OF CHINA - TW - TWN - 158 - CTRY_TAIWAN - 886 - verTaiwan - 53 - TAJIKISTAN - TJ - TJK - 762 - - - - - TANZANIA, UNITED REPUBLIC OF - TZ - TZA - 834 - - - - - TATARSTAN - - - - CTRY_TATARSTAN - 7 - - - THAILAND - TH - THA - 764 - CTRY_THAILAND - 66 - verThailand - 54 - TIMOR-LESTE - TL - - - - - - - TOGO - TG - TGO - 768 - - - - - TOKELAU - TK - TKL - 772 - - - - - TONGA - TO - TON - 776 - - - verTonga - 88 - TRINIDAD AND TOBAGO - TT - TTO - 780 - CTRY_TRINIDAD_Y_TOBAGO - 1 - - - TUNISIA - TN - TUN - 788 - CTRY_TUNISIA - 216 - verArabic - 16 - TURKEY - TR - TUR - 792 - CTRY_TURKEY - 90 - verTurkey - 24 - TURKMENISTAN - TM - TKM - 795 - - - - - TURKS AND CAICOS ISLANDS - TC - TCA - 796 - - - - - TUVALU - TV - TUV - 798 - - - - - UGANDA - UG - UGA - 800 - - - - - UKRAINE - UA - UKR - 804 - CTRY_UKRAINE - 380 - verUkraine - 62 - UNITED ARAB EMIRATES - AE - ARE - 784 - CTRY_UAE - 971 - - - UNITED KINGDOM - GB - GBR - 826 - CTRY_UNITED_KINGDOM - 44 - verBritain - 2 - UNITED STATES - US - USA - 840 - CTRY_UNITED_STATES - 1 - verUS - 0 - UNITED STATES MINOR OUTLYING ISLANDS - UM - UMI - 581 - - - - - URUGUAY - UY - URY - 858 - CTRY_URUGUAY - 598 - - - UZBEKISTAN - UZ - UZB - 860 - CTRY_UZBEKISTAN - 7 - - - VANUATU - VU - VUT - 548 - - - - - VATICAN CITY STATE (HOLY SEE) - VA - VAT - 336 - - - - - VENEZUELA - VE - VEN - 862 - CTRY_VENEZUELA - 58 - - - VIET NAM - VN - VNM - 704 - CTRY_VIET_NAM - 84 - verVietnam - - VIRGIN ISLANDS (BRITISH) - VG - VGB - 92 - - - - - VIRGIN ISLANDS (U.S.) - VI - VIR - 850 - - - - - WALLIS AND FUTUNA ISLANDS - WF - WLF - 876 - - - - - WESTERN SAHARA - EH - ESH - 732 - - - - - YEMEN - YE - YEM - 887 - CTRY_YEMEN - 967 - - - YUGOSLAVIA - YU - YUG - 891 - - - - - ZAIRE - ZR - ZAR - 180 - - - - - ZAMBIA - ZM - ZMB - 894 - - - - - ZIMBABWE - ZW - ZWE - 716 - CTRY_ZIMBABWE - 263 - - - '! Item was removed: - ----- Method: ISOLanguageDefinition class>>iso3Countries (in category 'private') ----- - iso3Countries - "ISOLanguageDefinition iso3Countries" - "ISO2Countries := nil. ISO3Countries := nil" - - ISO3Countries ifNil: [self initISOCountries]. - ^ISO3Countries! Item was removed: - ----- Method: ISOLanguageDefinition class>>iso3LanguageDefinition: (in category 'accessing') ----- - iso3LanguageDefinition: aString - ^self iso3LanguageTable at: aString! Item was removed: - ----- Method: ISOLanguageDefinition class>>iso3LanguageTable (in category 'private') ----- - iso3LanguageTable - "ISOLanguageDefinition iso3LanguageTable" - - ^ISO3Table ifNil: [ISO3Table := self initISO3LanguageTable]! Item was removed: - ----- Method: ISOLanguageDefinition class>>isoLanguages (in category 'private') ----- - isoLanguages - "ISO 639: 3-letter codes" - ^'aar aa Afar - abk ab Abkhazian - ace Achinese - ach Acoli - ada Adangme - ady Adyghe; Adygei - afa Afro-Asiatic languages - afh Afrihili - afr af Afrikaans - ain Ainu - aka ak Akan - akk Akkadian - alb/sqi sq Albanian - ale Aleut - alg Algonquian languages - alt Southern Altai - amh am Amharic - ang English, Old (ca.450-1100) - anp Angika - apa Apache languages - ara ar Arabic - arc Official Aramaic (700-300 BCE); Imperial Aramaic (700-300 BCE) - arg an Aragonese - arm/hye hy Armenian - arn Mapudungun; Mapuche - arp Arapaho - art Artificial languages - arw Arawak - asm as Assamese - ast Asturian; Bable; Leonese; Asturleonese - ath Athapascan languages - aus Australian languages - ava av Avaric - ave ae Avestan - awa Awadhi - aym ay Aymara - aze az Azerbaijani - bad Banda languages - bai Bamileke languages - bak ba Bashkir - bal Baluchi - bam bm Bambara - ban Balinese - baq/eus eu Basque - bas Basa - bat Baltic languages - bej Beja; Bedawiyet - bel be Belarusian - bem Bemba - ben bn Bengali - ber Berber languages) - bho Bhojpuri - bih bh Bihari - bik Bikol - bin Bini; Edo - bis bi Bislama - bla Siksika - bnt Bantu languages - bos bs Bosnian - bra Braj - bre br Breton - btk Batak languages - bua Buriat - bug Buginese - bul bg Bulgarian - bur/mya my Burmese - byn Blin; Bilin - cad Caddo - cai Central American Indian languages - car Galibi Carib - cat ca Catalan; Valencian - cau Caucasian languages - ceb Cebuano - cel Celtic languages - cha ch Chamorro - chb Chibcha - che ce Chechen - chg Chagatai - chi/zho zh Chinese - chk Chuukese - chm Mari - chn Chinook jargon - cho Choctaw - chp Chipewyan; Dene Suline - chr Cherokee - chu cu Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic - chv cv Chuvash - chy Cheyenne - cmc Chamic languages - cop Coptic - cor kw Cornish - cos co Corsican - cpe Creoles and pidgins, English based - cpf Creoles and pidgins, French-based - cpp Creoles and pidgins, Portuguese-based - cre cr Cree - crh Crimean Tatar; Crimean Turkish - crp Creoles and pidgins - csb Kashubian - cus Cushitic languages - cze/ces cs Czech - dak Dakota - dan da Danish - dar Dargwa - day Land Dayak languages - del Delaware - den Slave (Athapascan) - dgr Dogrib - din Dinka - div dv Divehi; Dhivehi; Maldivian - doi Dogri - dra Dravidian languages - dsb Lower Sorbian - dua Duala - dum Dutch, Middle (ca.1050-1350) - dut/nld nl Dutch; Flemish - dyu Dyula - dzo dz Dzongkha - efi Efik - egy Egyptian (Ancient) - eka Ekajuk - elx Elamite - eng en English - enm English, Middle (1100-1500) - epo eo Esperanto - est et Estonian - ewe ee Ewe - ewo Ewondo - fan Fang - fao fo Faroese - fat Fanti - fij fj Fijian - fil Filipino; Pilipino - fin fi Finnish - fiu Finno-Ugrian languages) - fon Fon - fre/fra fr French - frm French, Middle (ca.1400-1600) - fro French, Old (842-ca.1400) - frr Northern Frisian - frs Eastern Frisian - fry fy Western Frisian - ful ff Fulah - fur Friulian - gaa Ga - gay Gayo - gba Gbaya - gem Germanic languages - geo/kat ka Georgian - ger/deu de German - gez Geez - gil Gilbertese - gla gd Gaelic; Scottish Gaelic - gle ga Irish - glg gl Galician - glv gv Manx - gmh German, Middle High (ca.1050-1500) - goh German, Old High (ca.750-1050) - gon Gondi - gor Gorontalo - got Gothic - grb Grebo - grc Greek, Ancient (to 1453) - gre/ell el Greek, Modern (1453-) - grn gn Guarani - gsw Swiss German; Alemannic; Alsatian - guj gu Gujarati - gwi Gwich''in - hai Haida - hat ht Haitian; Haitian Creole - hau ha Hausa - haw Hawaiian - heb he Hebrew - her hz Herero - hil Hiligaynon - him Himachali - hin hi Hindi - hit Hittite - hmn Hmong - hmo ho Hiri Motu - hrv hr Croatian - hsb Upper Sorbian - hun hu Hungarian - hup Hupa - iba Iban - ibo ig Igbo - ice/isl is Icelandic - ido io Ido - iii ii Sichuan Yi; Nuosu - ijo Ijo languages - iku iu Inuktitut - ile ie Interlingue; Occidental - ilo Iloko - ina ia Interlingua (International Auxiliary Language Association) - inc Indic languages - ind id Indonesian - ine Indo-European languages - inh Ingush - ipk ik Inupiaq - ira Iranian languages - iro Iroquoian languages - ita it Italian - jav jv Javanese - jbo Lojban - jpn ja Japanese - jpr Judeo-Persian - jrb Judeo-Arabic - kaa Kara-Kalpak - kab Kabyle - kac Kachin; Jingpho - kal kl Kalaallisut; Greenlandic - kam Kamba - kan kn Kannada - kar Karen languages - kas ks Kashmiri - kau kr Kanuri - kaw Kawi - kaz kk Kazakh - kbd Kabardian - kha Khasi - khi Khoisan languages - khm km Central Khmer - kho Khotanese; Sakan - kik ki Kikuyu; Gikuyu - kin rw Kinyarwanda - kir ky Kirghiz; Kyrgyz - kmb Kimbundu - kok Konkani - kom kv Komi - kon kg Kongo - kor ko Korean - kos Kosraean - kpe Kpelle - krc Karachay-Balkar - krl Karelian - kro Kru languages - kru Kurukh - kua kj Kuanyama; Kwanyama - kum Kumyk - kur ku Kurdish - kut Kutenai - lad Ladino - lah Lahnda - lam Lamba - lao lo Lao - lat la Latin - lav lv Latvian - lez Lezghian - lim li Limburgan; Limburger; Limburgish - lin ln Lingala - lit lt Lithuanian - lol Mongo - loz Lozi - ltz lb Luxembourgish; Letzeburgesch - lua Luba-Lulua - lub lu Luba-Katanga - lug lg Ganda - lui Luiseno - lun Lunda - luo Luo (Kenya and Tanzania) - lus Lushai - mac/mkd mk Macedonian - mad Madurese - mag Magahi - mah mh Marshallese - mai Maithili - mak Makasar - mal ml Malayalam - man Mandingo - mao/mri mi Maori - map Austronesian languages - mar mr Marathi - mas Masai - may/msa ms Malay - mdf Moksha - mdr Mandar - men Mende - mga Irish, Middle (900-1200) - mic Mi''kmaq; Micmac - min Minangkabau - mis Uncoded languages - mkh Mon-Khmer languages - mlg mg Malagasy - mlt mt Maltese - mnc Manchu - mni Manipuri - mno Manobo languages - moh Mohawk - mon mn Mongolian - mos Mossi - mul Multiple languages - mun Munda languages - mus Creek - mwl Mirandese - mwr Marwari - myn Mayan languages - myv Erzya - nah Nahuatl languages - nai North American Indian languages - nap Neapolitan - nau na Nauru - nav nv Navajo; Navaho - nbl nr Ndebele, South; South Ndebele - nde nd Ndebele, North; North Ndebele - ndo ng Ndonga - nds Low German; Low Saxon; German, Low; Saxon, Low - nep ne Nepali - new Nepal Bhasa; Newari - nia Nias - nic Niger-Kordofanian languages - niu Niuean - nno nn Norwegian Nynorsk; Nynorsk, Norwegian - nob nb Bokmal, Norwegian; Norwegian Bokmal - nog Nogai - non Norse, Old - nor no Norwegian - nqo N''Ko - nso Pedi; Sepedi; Northern Sotho - nub Nubian languages - nwc Classical Newari; Old Newari; Classical Nepal Bhasa - nya ny Chichewa; Chewa; Nyanja - nym Nyamwezi - nyn Nyankole - nyo Nyoro - nzi Nzima - oci oc Occitan (post 1500) - oji oj Ojibwa - ori or Oriya - orm om Oromo - osa Osage - oss os Ossetian; Ossetic - ota Turkish, Ottoman (1500-1928) - oto Otomian languages - paa Papuan languages - pag Pangasinan - pal Pahlavi - pam Pampanga; Kapampangan - pan pa Panjabi; Punjabi - pap Papiamento - pau Palauan - peo Persian, Old (ca.600-400 B.C.) - per/fas fa Persian - phi Philippine languages) - phn Phoenician - pli pi Pali - pol pl Polish - pon Pohnpeian - por pt Portuguese - pra Prakrit languages - pro Provencal, Old (to 1500);Occitan, Old (to 1500) - pus ps Pushto; Pashto - qaa-qtz Reserved for local use - que qu Quechua - raj Rajasthani - rap Rapanui - rar Rarotongan; Cook Islands Maori - roa Romance languages - roh rm Romansh - rom Romany - rum/ron ro Romanian; Moldavian; Moldovan - run rn Rundi - rup Aromanian; Arumanian; Macedo-Romanian - rus ru Russian - sad Sandawe - sag sg Sango - sah Yakut - sai South American Indian languages - sal Salishan languages - sam Samaritan Aramaic - san sa Sanskrit - sas Sasak - sat Santali - scn Sicilian - sco Scots - sel Selkup - sem Semitic languages - sga Irish, Old (to 900) - sgn Sign Languages - shn Shan - sid Sidamo - sin si Sinhala; Sinhalese - sio Siouan languages - sit Sino-Tibetan languages - sla Slavic languages - slo/slk sk Slovak - slv sl Slovenian - sma Southern Sami - sme se Northern Sami - smi Sami languages - smj Lule Sami - smn Inari Sami - smo sm Samoan - sms Skolt Sami - sna sn Shona - snd sd Sindhi - snk Soninke - sog Sogdian - som so Somali - son Songhai languages - sot st Sotho, Southern - spa es Spanish; Castilian - srd sc Sardinian - srn Sranan Tongo - srp sr Serbian - srr Serer - ssa Nilo-Saharan languages - ssw ss Swati - suk Sukuma - sun su Sundanese - sus Susu - sux Sumerian - swa sw Swahili - swe sv Swedish - syc Classical Syriac - syr Syriac - tah ty Tahitian - tai Tai languages - tam ta Tamil - tat tt Tatar - tel te Telugu - tem Timne - ter Tereno - tet Tetum - tgk tg Tajik - tgl tl Tagalog - tha th Thai - tib/bod bo Tibetan - tig Tigre - tir ti Tigrinya - tiv Tiv - tkl Tokelau - tlh Klingon; tlhIngan-Hol - tli Tlingit - tmh Tamashek - tog Tonga (Nyasa) - ton to Tonga (Tonga Islands) - tpi Tok Pisin - tsi Tsimshian - tsn tn Tswana - tso ts Tsonga - tuk tk Turkmen - tum Tumbuka - tup Tupi languages - tur tr Turkish - tut Altaic languages - tvl Tuvalu - twi tw Twi - tyv Tuvinian - udm Udmurt - uga Ugaritic - uig ug Uighur; Uyghur - ukr uk Ukrainian - umb Umbundu - und Undetermined - urd ur Urdu - uzb uz Uzbek - vai Vai - ven ve Venda - vie vi Vietnamese - vol vo Volapuk - vot Votic - wak Wakashan languages - wal Wolaitta; Wolaytta - war Waray - was Washo - wel/cym cy Welsh - wen Sorbian languages - wln wa Walloon - wol wo Wolof - xal Kalmyk; Oirat - xho xh Xhosa - yao Yao - yap Yapese - yid yi Yiddish - yor yo Yoruba - ypk Yupik languages - zap Zapotec - zbl Blissymbols; Blissymbolics; Bliss - zen Zenaga - zha za Zhuang; Chuang - znd Zande languages - zul zu Zulu - zun Zuni - zxx No linguistic content; Not applicable - zza Zaza; Dimili; Dimli; Kirdki; Kirmanjki; Zazaki'! Item was removed: - ----- Method: ISOLanguageDefinition class>>readISOLanguagesFrom: (in category 'private') ----- - readISOLanguagesFrom: stream - "ISOLanguageDefinition readISOLanguagesFrom: ISOLanguageDefinition isoLanguages readStream " - | languages language code3 index line | - languages := Dictionary new. - [stream atEnd - or: [(line := stream nextLine readStream) atEnd]] - whileFalse: [ - language := ISOLanguageDefinition new. - code3 := line upTo: Character tab. - (index := code3 indexOf: $/) > 0 - ifTrue: [ - language iso3: (code3 copyFrom: 1 to: index-1). - language iso3Alternate: (code3 copyFrom: index+1 to: code3 size)] - ifFalse: [language iso3: code3]. - language - iso2: (line upTo: Character tab); - language: line upToEnd. - languages at: language iso3 put: language]. - ^languages! Item was removed: - ----- Method: ISOLanguageDefinition>>iso2 (in category 'accessing') ----- - iso2 - ^iso2 ifNil: [self iso3]! Item was removed: - ----- Method: ISOLanguageDefinition>>iso2: (in category 'initialize') ----- - iso2: aString - iso2 := aString ifEmpty: [nil] ifNotEmpty: [aString]! Item was removed: - ----- Method: ISOLanguageDefinition>>iso3 (in category 'accessing') ----- - iso3 - ^iso3 ifNil: ['']! Item was removed: - ----- Method: ISOLanguageDefinition>>iso3: (in category 'initialize') ----- - iso3: aString - iso3 := aString ifEmpty: [nil] ifNotEmpty: [aString]! Item was removed: - ----- Method: ISOLanguageDefinition>>iso3Alternate (in category 'accessing') ----- - iso3Alternate - ^iso3Alternate ifNil: ['']! Item was removed: - ----- Method: ISOLanguageDefinition>>iso3Alternate: (in category 'initialize') ----- - iso3Alternate: aString - iso3Alternate := aString ifEmpty: [nil] ifNotEmpty: [aString]! Item was removed: - ----- Method: ISOLanguageDefinition>>language (in category 'accessing') ----- - language - ^language! Item was removed: - ----- Method: ISOLanguageDefinition>>language: (in category 'initialize') ----- - language: aString - language := aString! Item was removed: - NaturalLanguageTranslator subclass: #InternalTranslator - instanceVariableNames: 'generics' - classVariableNames: 'AllKnownPhrases CachedTranslations' - poolDictionaries: '' - category: 'GetText-Localization'! - - !InternalTranslator commentStamp: 'tak 10/19/2007 11:12' prior: 0! - An InternalTranslator is used a translation dictionary in a image. - You can use it without any external translation file. - - Structure: - generics Dictionary -- msgid -> msgstr - ! Item was removed: - ----- Method: InternalTranslator class>>allKnownPhrases (in category 'private') ----- - allKnownPhrases - ^AllKnownPhrases ifNil: [AllKnownPhrases := Dictionary new: 2051]! Item was removed: - ----- Method: InternalTranslator class>>availableLanguageLocaleIDs (in category 'accessing') ----- - availableLanguageLocaleIDs - "Return locale ids for the internal translation dictionary." - "InternalTranslator availableLanguageLocaleIDs" - ^ self cachedTranslations values collect:[:each | each localeID]! Item was removed: - ----- Method: InternalTranslator class>>cachedTranslations (in category 'private') ----- - cachedTranslations - "CachedTranslations := nil" - ^CachedTranslations ifNil: [CachedTranslations := Dictionary new]! Item was removed: - ----- Method: InternalTranslator class>>directoryForLanguage:country:create: (in category 'private loading') ----- - directoryForLanguage: isoLanguage country: isoCountry create: createDir - "Try to locate the <prefs>/locale/<language>{/<country>} folder. - If createDir is set, create the path down to country or language, depending on wether it's specified.. - Return the directory for country or language depending on specification. - If neither exists, nil" - - "NaturalLanguageTranslator directoryForLanguage: 'es' country: nil create: true" - "NaturalLanguageTranslator directoryForLanguage: 'de' country: 'DE' create: true" - "NaturalLanguageTranslator directoryForLanguage: 'en' country: 'US' create: false" - "NaturalLanguageTranslator directoryForLanguage: 'en' country: nil create: true" - - "If this fails, there is nothing we can do about it here" - | localeDir countryDir languageDir | - localeDir := self localeDirCreate: createDir. - localeDir ifNil: [^nil]. - - isoCountry ifNil: [ - languageDir := localeDir directoryNamed: isoLanguage. - createDir - ifTrue: [languageDir assureExistence]. - ^languageDir exists - ifTrue: [languageDir] - ifFalse: [nil]]. - - countryDir := languageDir directoryNamed: isoCountry. - createDir - ifTrue: [countryDir assureExistence]. - - ^countryDir exists - ifTrue: [countryDir] - ifFalse: [nil]! Item was removed: - ----- Method: InternalTranslator class>>directoryForLocaleID:create: (in category 'private loading') ----- - directoryForLocaleID: localeID create: createDir - "Try to locate the <prefs>/locale/<language>{/<country>} folder. - If createDir is set, create the path down to country or language, depending on locale. - Return the directory for country or language depending on locale. - If neither exists, nil" - - "NaturalLanguageTranslator directoryForLanguage: 'de' country: nil readOnly: true" - "NaturalLanguageTranslator directoryForLanguage: 'de' country: 'DE' readOnly: true" - "NaturalLanguageTranslator directoryForLanguage: 'en' country: 'US' readOnly: false" - "NaturalLanguageTranslator directoryForLanguage: 'en' country: nil readOnly: true" - - ^self directoryForLanguage: localeID isoLanguage country: localeID isoCountry create: createDir! Item was removed: - ----- Method: InternalTranslator class>>discardAllTranslations (in category 'class initialization') ----- - discardAllTranslations - AllKnownPhrases := nil. - self resetCaches.! Item was removed: - ----- Method: InternalTranslator class>>fileReaderServicesForFile:suffix: (in category 'file-services') ----- - fileReaderServicesForFile: fullName suffix: suffix - "Answer the file services associated with given file" - ^ (suffix = self translationSuffix) | (suffix = '*') - ifTrue: [{self serviceMergeLanguageTranslations}] - ifFalse: [#()]! Item was removed: - ----- Method: InternalTranslator class>>loadAvailableExternalLocales (in category 'private loading') ----- - loadAvailableExternalLocales - "private - register locales IDs based on the content of the <prefs>/locale/ directory" - | localeDir | - localeDir := self localeDirCreate: false. - localeDir ifNil: [^ #()]. - - localeDir directoryNames - do: [:langDirName | - | langDir | - langDir := localeDir directoryNamed: langDirName. - - (langDir fileNamesMatching: '*.' , self translationSuffix) - ifNotEmpty: [self loadTranslatorForIsoLanguage: langDirName isoCountry: nil]. - - langDir directoryNames - do: [:countryDirName | - | countryDir | - countryDir := langDirName directoryNamed: countryDirName. - (countryDir fileNamesMatching: '*.' , self translationSuffix) - ifNotEmpty: [self loadTranslatorForIsoLanguage: langDirName isoCountry: countryDirName] - ] - ]. - ! Item was removed: - ----- Method: InternalTranslator class>>loadExternalTranslationsFor: (in category 'private loading') ----- - loadExternalTranslationsFor: translator - "Try to load translations from external external files. - The files are located in the <prefs>/locale/<language>{/<country>} folder. - There can be more than one file for each location, so applications can install their own partial translation tables. All files in the specific folder are loaded." - - | translationDir | - translationDir := self directoryForLocaleID: translator localeID create: false. - translationDir ifNil: [ ^nil ]. - (translationDir fileNamesMatching: '*.' , self translationSuffix) - do: [:fileName | translator loadFromFileNamed: (translationDir fullNameFor: fileName)]! Item was removed: - ----- Method: InternalTranslator class>>loadForLocaleIsoString:fromGzippedMimeLiteral: (in category 'file-services') ----- - loadForLocaleIsoString: localeString fromGzippedMimeLiteral: mimeString - "merge the translation from the mime literal." - | stream localeID translator gs rbStream s currentPlatform | - s := Base64MimeConverter mimeDecodeToBytes: mimeString readStream. - s reset. - gs := GZipReadStream on: s. - rbStream := MultiByteBinaryOrTextStream with: gs contents asString. - rbStream converter: UTF8TextConverter new. - rbStream reset. - localeID := LocaleID isoString: localeString. - currentPlatform := Locale currentPlatform. - [Locale - currentPlatform: (Locale localeID: localeID). - stream := ReadStream on: rbStream contents] - ensure: [Locale currentPlatform: currentPlatform]. - translator := self localeID: localeID. - translator loadFromStream: stream. - LanguageEnvironment resetKnownEnvironments! Item was removed: - ----- Method: InternalTranslator class>>loadTranslatorForIsoLanguage:isoCountry: (in category 'private loading') ----- - loadTranslatorForIsoLanguage: isoLanguage isoCountry: isoCountry - "private - load the translations from <prefs>/locale/ directory - the procedure is to assure the existence of a translator for the - given language/country and then load the external translations for this translator" - - | translator | - translator := self newLocaleID: (LocaleID isoLanguage: isoLanguage isoCountry: isoCountry). - - self loadExternalTranslationsFor: translator! Item was removed: - ----- Method: InternalTranslator class>>localeDirCreate: (in category 'private loading') ----- - localeDirCreate: createDir - "Try to locate the <prefs>/locale/ folder. - If createDir is set, try to create the path. - If it doesn't exist, return nil" - - "If this fails, there is nothing we can do about it here" - | prefDir localeDir | - (createDir not - and: [ExternalSettings preferenceDirectory isNil]) - ifTrue: [^ nil]. - - prefDir := ExternalSettings assuredPreferenceDirectory. - prefDir exists - ifFalse: [^nil]. - - - localeDir := prefDir directoryNamed: 'locale'. - createDir - ifTrue: [localeDir assureExistence]. - ^localeDir exists - ifTrue: [localeDir] - ifFalse: [nil]! Item was removed: - ----- Method: InternalTranslator class>>localeID: (in category 'accessing') ----- - localeID: localeID - "For backward compatibility, see NaturalLanguageTranslator >> fileOutHeaderOn:." - ^ self newLocaleID: localeID! Item was removed: - ----- Method: InternalTranslator class>>mergeLegacyTranslators (in category 'accessing') ----- - mergeLegacyTranslators - self availableLanguageLocaleIDs - do: [:localeID | (NaturalLanguageTranslator translators includesKey: localeID) - ifFalse: [NaturalLanguageTranslator translators - at: localeID - put: (self newLocaleID: localeID)]]! Item was removed: - ----- Method: InternalTranslator class>>mergeTranslationFileNamed: (in category 'file-services') ----- - mergeTranslationFileNamed: fileFullNameString - "merge the translation in the file named fileFullNameString" - - | stream localeID translator | - stream := FileStream readOnlyFileNamed: fileFullNameString. - [localeID := LocaleID isoString: stream localName sansPeriodSuffix. - translator := self localeID: localeID. - translator loadFromStream: stream] - ensure: [stream close]. - LanguageEnvironment resetKnownEnvironments. - - ! Item was removed: - ----- Method: InternalTranslator class>>newLocaleID: (in category 'accessing') ----- - newLocaleID: localeID - ^ self cachedTranslations - at: localeID - ifAbsentPut: [self new localeID: localeID]! Item was removed: - ----- Method: InternalTranslator class>>privateStartUp (in category 'class initialization') ----- - privateStartUp - self loadAvailableExternalLocales. - self mergeLegacyTranslators. - ! Item was removed: - ----- Method: InternalTranslator class>>registerPhrase: (in category 'private') ----- - registerPhrase: phrase - "Using a Dictionary so we can lookup existing string instead of creating needless copies when loading a translation." - self allKnownPhrases at: phrase put: phrase! Item was removed: - ----- Method: InternalTranslator class>>registeredPhraseFor: (in category 'private') ----- - registeredPhraseFor: phrase - "Using a Dictionary so we can lookup existing string instead of creating needless copies when loading a translation." - ^self allKnownPhrases at: phrase ifAbsentPut: [phrase]! Item was removed: - ----- Method: InternalTranslator class>>removeLocaleID: (in category 'accessing') ----- - removeLocaleID: localeID - "self removeLocaleID: (LocaleID isoString: 'ja-kids')" - self cachedTranslations - removeKey: localeID - ifAbsent: []. - NaturalLanguageTranslator privateStartUp! Item was removed: - ----- Method: InternalTranslator class>>resetCaches (in category 'class initialization') ----- - resetCaches - CachedTranslations := nil. - ! Item was removed: - ----- Method: InternalTranslator class>>serviceMergeLanguageTranslations (in category 'file-services') ----- - serviceMergeLanguageTranslations - "Answer a service for merging of translation files" - ^ SimpleServiceEntry - provider: self - label: 'merge the translation file' translatedNoop - selector: #mergeTranslationFileNamed: - description: 'merge the translation file into the language named like the file' translatedNoop - buttonLabel: 'merge' translatedNoop! Item was removed: - ----- Method: InternalTranslator class>>services (in category 'file-services') ----- - services - "Answer potential file services associated with this class" - ^ {self serviceMergeLanguageTranslations}! Item was removed: - ----- Method: InternalTranslator class>>translationSuffix (in category 'private') ----- - translationSuffix - ^'translation'! Item was removed: - ----- Method: InternalTranslator>>atRandom (in category 'accessing') ----- - atRandom - - ^ generics atRandom value. - ! Item was removed: - ----- Method: InternalTranslator>>checkPhrase:translation: (in category 'translation') ----- - checkPhrase: phrase translation: translation! Item was removed: - ----- Method: InternalTranslator>>defaultBackgroundColor (in category 'user interface') ----- - defaultBackgroundColor - "answer the receiver's defaultBackgroundColor for views" - ^ Color cyan! Item was removed: - ----- Method: InternalTranslator>>fileOutHeader (in category 'fileIn/fileOut') ----- - fileOutHeader - ^ '''Translation dictionary'''! Item was removed: - ----- Method: InternalTranslator>>fileOutHeaderOn: (in category 'user interface') ----- - fileOutHeaderOn: aStream - aStream binary. - UTF8TextConverter writeBOMOn: aStream. - aStream text. - aStream nextChunkPut: self fileOutHeader; - cr. - aStream timeStamp; cr. - aStream nextPut: $!!. - aStream nextChunkPut: '(' , self class name , ' localeID: ' , id storeString , ')'. - aStream cr! Item was removed: - ----- Method: InternalTranslator>>fileOutHeaderOn:withBOM: (in category 'user interface') ----- - fileOutHeaderOn: aStream withBOM: bomFlag - bomFlag ifTrue: [ - aStream binary. - UTF8TextConverter writeBOMOn: aStream. - aStream text. - ]. - aStream nextChunkPut: self fileOutHeader; - cr. - aStream timeStamp; cr. - aStream nextPut: $!!. - aStream nextChunkPut: '(' , self class name , ' localeID: ' , id storeString , ')'. - aStream cr! Item was removed: - ----- Method: InternalTranslator>>fileOutOn: (in category 'fileIn/fileOut') ----- - fileOutOn: aStream - "self current fileOutOn: Transcript. Transcript endEntry" - self fileOutOn: aStream keys: nil withBOM: true. - ! Item was removed: - ----- Method: InternalTranslator>>fileOutOn:keys:withBOM: (in category 'fileIn/fileOut') ----- - fileOutOn: aStream keys: keys withBOM: bomFlag - "self current fileOutOn: Transcript. Transcript endEntry" - self fileOutHeaderOn: aStream withBOM: bomFlag. - (keys - ifNil: [generics keys asSortedCollection]) - do: [:key | self - nextChunkPut: (generics associationAt: key) - on: aStream]. - keys - ifNil: [self untranslated - do: [:each | self nextChunkPut: each -> '' on: aStream]]. - aStream nextPut: $!!; - cr! Item was removed: - ----- Method: InternalTranslator>>generics (in category 'private') ----- - generics - ^generics ifNil: [generics := Dictionary new]! Item was removed: - ----- Method: InternalTranslator>>isDomainLoaded: (in category 'accessing') ----- - isDomainLoaded: aDomainName - ^true - ! Item was removed: - ----- Method: InternalTranslator>>loadFromFileNamed: (in category 'private store-retrieve') ----- - loadFromFileNamed: fileNameString - "Load translations from an external file" - - | stream | - [stream := FileStream readOnlyFileNamed: fileNameString. - self loadFromStream: stream] - ensure: [stream close]. - self changed: #translations. - self changed: #untranslated. - ! Item was removed: - ----- Method: InternalTranslator>>loadFromRefStream: (in category 'private store-retrieve') ----- - loadFromRefStream: stream - "Load translations from an external file" - | loadedArray refStream | - refStream := ReferenceStream on: stream. - [loadedArray := refStream next] - ensure: [refStream close]. - self processExternalObject: loadedArray ! Item was removed: - ----- Method: InternalTranslator>>loadFromStream: (in category 'private store-retrieve') ----- - loadFromStream: stream - "Load translations from an external file" - | header isFileIn | - header := '''Translation dictionary'''. - isFileIn := (stream next: header size) - = header. - stream reset. - isFileIn - ifTrue: [stream fileInAnnouncing: 'Loading ' translated, stream localName] - ifFalse: [self loadFromRefStream: stream]! Item was removed: - ----- Method: InternalTranslator>>mergeTranslations: (in category 'private store-retrieve') ----- - mergeTranslations: newTranslations - "Merge a new set of translations into the exiting table. - Overwrites existing entries." - - newTranslations keysAndValuesDo: [:key :value | - self rawPhrase: (self class registeredPhraseFor: key) translation: value]. - self changed: #translations. - self changed: #untranslated.! Item was removed: - ----- Method: InternalTranslator>>nextChunkPut:on: (in category 'fileIn/fileOut') ----- - nextChunkPut: anObject on: aStream - | i remainder terminator | - terminator := $!!. - remainder := anObject storeString. - [(i := remainder indexOf: terminator) = 0] - whileFalse: [aStream - nextPutAll: (remainder copyFrom: 1 to: i). - aStream nextPut: terminator. - "double imbedded terminators" - remainder := remainder copyFrom: i + 1 to: remainder size]. - aStream nextPutAll: remainder. - aStream nextPut: terminator; cr.! Item was removed: - ----- Method: InternalTranslator>>phrase:translation: (in category 'translation') ----- - phrase: phraseString translation: translationString - self generics at: phraseString put: translationString asString. - self changed: #translations. - self changed: #untranslated.! Item was removed: - ----- Method: InternalTranslator>>processExternalObject: (in category 'private store-retrieve') ----- - processExternalObject: anArray - "pivate - process the external object" - - "new format -> {translations. untranslated}" - - anArray second do: [:each | self class registerPhrase: each]. - - self mergeTranslations: anArray first! Item was removed: - ----- Method: InternalTranslator>>rawPhrase:translation: (in category 'translation') ----- - rawPhrase: phraseString translation: translationString - self generics at: phraseString put: translationString asString. - ! Item was removed: - ----- Method: InternalTranslator>>rawRemoveUntranslated: (in category 'translation') ----- - rawRemoveUntranslated: untranslated - - self class allKnownPhrases removeKey: untranslated ifAbsent: []. - self changed: #untranslated.! Item was removed: - ----- Method: InternalTranslator>>removeTranslationFor: (in category 'translation') ----- - removeTranslationFor: phraseString - self generics removeKey: phraseString ifAbsent: []. - self changed: #translations. - self changed: #untranslated.! Item was removed: - ----- Method: InternalTranslator>>removeUntranslated: (in category 'translation') ----- - removeUntranslated: untranslated - - self class allKnownPhrases removeKey: untranslated ifAbsent: []. - ! Item was removed: - ----- Method: InternalTranslator>>saveToFileNamed: (in category 'private store-retrieve') ----- - saveToFileNamed: fileNameString - "save the receiver's translations to a file named fileNameString" - | stream | - "Set true if you need to save as binary" - false - ifTrue: [stream := ReferenceStream fileNamed: fileNameString. - stream nextPut: {self translations. self untranslated}. - stream close. - ^ self]. - stream := FileStream fileNamed: fileNameString. - [self fileOutOn: stream] - ensure: [stream close]! Item was removed: - ----- Method: InternalTranslator>>scanFrom: (in category 'fileIn/fileOut') ----- - scanFrom: aStream - "Read a definition of dictionary. - Make sure current locale corresponds my locale id" - | aString newTranslations assoc currentPlatform | - newTranslations := Dictionary new. - currentPlatform := Locale currentPlatform. - [Locale - currentPlatform: (Locale localeID: id). - [aString := aStream nextChunk withSqueakLineEndings. - aString size > 0] - whileTrue: [assoc := Compiler evaluate: aString. - assoc value = '' - ifTrue: [self class registerPhrase: assoc key] - ifFalse: [newTranslations add: assoc]]] - ensure: [Locale currentPlatform: currentPlatform]. - self mergeTranslations: newTranslations! Item was removed: - ----- Method: InternalTranslator>>translate:inDomain: (in category 'translation') ----- - translate: aString inDomain: aDomainName - | translator | - ^ self generics - at: aString - ifAbsent: [self localeID hasParent - ifTrue: [translator := self class cachedTranslations - at: self localeID parent - ifAbsent: [^ aString]. - translator translate: aString inDomain: aDomainName] - ifFalse: [aString]]! Item was removed: - ----- Method: InternalTranslator>>translations (in category 'accessing') ----- - translations - ^self generics! Item was removed: - ----- Method: InternalTranslator>>untranslated (in category 'accessing') ----- - untranslated - | translations | - translations := self translations. - ^self class allKnownPhrases reject: [:each | translations includesKey: each]! Item was changed: ----- Method: LanguageEditor>>getTextExport (in category 'gui methods') ----- getTextExport Cursor wait + showWhile: [GetTextExporter new exportTranslator: self model]! - showWhile: [GetTextExporter2 new exportTranslator: self model]! Item was changed: ----- Method: LanguageEditor>>getTextExportTemplate (in category 'gui methods') ----- getTextExportTemplate Cursor wait + showWhile: [GetTextExporter new exportTemplate] ! - showWhile: [GetTextExporter2 new exportTemplate] ! Item was removed: - Object subclass: #Locale - instanceVariableNames: 'id shortDate longDate time decimalSymbol digitGrouping currencySymbol currencyNotation measurement offsetLocalToUTC offsetVMToUTC dstActive' - classVariableNames: 'Current CurrentPlatform KnownLocales LanguageSymbols LocaleChangeListeners PlatformEncodings Previous' - poolDictionaries: '' - category: 'GetText-Localization'! - - !Locale commentStamp: '<historical>' prior: 0! - Main comment stating the purpose of this class and relevant relationship to other classes. - - - -
http://www.w3.org/WAI/ER/IG/ert/iso639.htm
-
http://www.oasis-open.org/cover/iso639a.html
- See also -
http://oss.software.ibm.com/cvs/icu/~checkout~/icuhtml/design/language_code…
-
http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.10
- - ISO 3166 -
http://mitglied.lycos.de/buran/knowhow/codes/locales/
- ! Item was removed: - ----- Method: Locale class>>addLocalChangedListener: (in category 'notification') ----- - addLocalChangedListener: anObjectOrClass - self localeChangedListeners add: anObjectOrClass! Item was removed: - ----- Method: Locale class>>clipboadInterpreter (in category 'accessing') ----- - clipboadInterpreter - ^NoConversionClipboardInterpreter new! Item was removed: - ----- Method: Locale class>>current (in category 'accessing') ----- - current - "Current := nil" - Current ifNil: [ - Current := self determineCurrentLocale. - "Transcript show: 'Current locale: ' , Current localeID asString; cr"]. - ^Current! Item was removed: - ----- Method: Locale class>>currentPlatform (in category 'accessing') ----- - currentPlatform - "CurrentPlatform := nil" - CurrentPlatform ifNil: [CurrentPlatform := self determineCurrentLocale]. - ^CurrentPlatform! Item was removed: - ----- Method: Locale class>>currentPlatform: (in category 'accessing') ----- - currentPlatform: locale - CurrentPlatform := locale. - LanguageEnvironment startUp. - ! Item was removed: - ----- Method: Locale class>>currentPlatform:during: (in category 'accessing') ----- - currentPlatform: locale during: aBlock - "Alter current language platform during a block" - | backupPlatform | - backupPlatform := self currentPlatform. - [self currentPlatform: locale. - aBlock value] - ensure: [self currentPlatform: backupPlatform]! Item was removed: - ----- Method: Locale class>>defaultEncodingName: (in category 'platform specific') ----- - defaultEncodingName: languageSymbol - | encodings platformName osVersion | - platformName := SmalltalkImage current platformName. - osVersion := SmalltalkImage current getSystemAttribute: 1002. - encodings := self platformEncodings at: languageSymbol - ifAbsent: [self platformEncodings at: #default]. - encodings at: platformName ifPresent: [:encoding | ^encoding]. - encodings at: platformName , ' ' , osVersion - ifPresent: [:encoding | ^encoding]. - ^encodings at: #default! Item was removed: - ----- Method: Locale class>>defaultInputInterpreter (in category 'platform specific') ----- - defaultInputInterpreter - | platformName osVersion | - platformName := SmalltalkImage current platformName. - osVersion := SmalltalkImage current getSystemAttribute: 1002. - (platformName = 'Win32' and: [osVersion = 'CE']) - ifTrue: [^NoInputInterpreter new]. - platformName = 'Win32' ifTrue: [^MacRomanInputInterpreter new]. - ^NoInputInterpreter new! Item was removed: - ----- Method: Locale class>>determineCurrentLocale (in category 'private') ----- - determineCurrentLocale - "For now just return the default locale. - A smarter way would be to determine the current platforms default locale." - "Locale determineCurrentLocale" - - ^self new determineLocale! Item was removed: - ----- Method: Locale class>>initKnownLocales (in category 'private') ----- - initKnownLocales - | locales | - locales := Dictionary new. - - "Init the locales for which we have translations" - InternalTranslator availableLanguageLocaleIDs do: [:id | - locales at: id put: (Locale new localeID: id)]. - ^locales! Item was removed: - ----- Method: Locale class>>initialize (in category 'class initialization') ----- - initialize - "Locale initialize" - - Smalltalk addToStartUpList: Locale. - Preferences addPreference: #useLocale - categories: #('general') default: false - balloonHelp: 'Use the system locale to set the system language etc at startup'.! Item was removed: - ----- Method: Locale class>>initializePlatformEncodings (in category 'class initialization') ----- - initializePlatformEncodings - "Locale initializePlatformEncodings" - - | platform | - PlatformEncodings isNil ifTrue: [ PlatformEncodings := Dictionary new ]. - - platform := PlatformEncodings at: 'default' ifAbsentPut: Dictionary new. - platform - at: 'default' put: 'iso8859-1'; - at: 'Win32 CE' put: 'utf-8'; - yourself. - - platform := PlatformEncodings at: 'ja' ifAbsentPut: Dictionary new. - platform - at: 'default' put: 'shift-jis'; - at: 'unix' put: 'euc-jp'; - at: 'Win32 CE' put: 'utf-8'; - yourself. - - platform := PlatformEncodings at: 'ko' ifAbsentPut: Dictionary new. - platform - at: 'default' put: 'euc-kr'; - at: 'Win32 CE' put: 'utf-8'; - yourself. - - platform := PlatformEncodings at: 'zh' ifAbsentPut: Dictionary new. - platform - at: 'default' put: 'gb2312'; - at: 'unix' put: 'euc-cn'; - at: 'Win32 CE' put: 'utf-8'; - yourself. - ! Item was removed: - ----- Method: Locale class>>isoLanguage: (in category 'accessing') ----- - isoLanguage: isoLanguage - ^self isoLanguage: isoLanguage isoCountry: nil! Item was removed: - ----- Method: Locale class>>isoLanguage:isoCountry: (in category 'accessing') ----- - isoLanguage: isoLanguage isoCountry: isoCountry - ^self localeID: (LocaleID isoLanguage: isoLanguage isoCountry: isoCountry)! Item was removed: - ----- Method: Locale class>>isoLocale: (in category 'accessing') ----- - isoLocale: aString - ! Item was removed: - ----- Method: Locale class>>knownLocales (in category 'private') ----- - knownLocales - "KnownLocales := nil" - ^KnownLocales ifNil: [KnownLocales := self initKnownLocales]! Item was removed: - ----- Method: Locale class>>languageSymbol: (in category 'accessing') ----- - languageSymbol: languageSymbol - "Locale languageSymbol: #Deutsch" - - ^self isoLanguage: (LanguageSymbols at: languageSymbol)! Item was removed: - ----- Method: Locale class>>localeChanged (in category 'notification') ----- - localeChanged - - #(#ParagraphEditor #BitEditor #FormEditor #StandardSystemController ) - do: [:key | Smalltalk - at: key - ifPresent: [:class | class initialize]]. - PartsBin localeChanged. - Project localeChanged. - PaintBoxMorph localeChanged. - ColorPickerMorph localeChanged. - Preferences localeChanged! Item was removed: - ----- Method: Locale class>>localeChangedGently (in category 'notification') ----- - localeChangedGently - - #(#ParagraphEditor #BitEditor #FormEditor #StandardSystemController ) - do: [:key | Smalltalk - at: key - ifPresent: [:class | class initialize]]. - PartsBin localeChangedGently. - Project localeChangedGently. - PaintBoxMorph localeChangedGently. - ColorPickerMorph localeChangedGently. - Preferences localeChangedGently. - ! Item was removed: - ----- Method: Locale class>>localeChangedListeners (in category 'notification') ----- - localeChangedListeners - ^LocaleChangeListeners ifNil: [LocaleChangeListeners := OrderedCollection new]! Item was removed: - ----- Method: Locale class>>localeID: (in category 'accessing') ----- - localeID: id - ^self knownLocales at: id ifAbsentPut: [Locale new localeID: id]! Item was removed: - ----- Method: Locale class>>migrateSystem (in category 'private') ----- - migrateSystem - "Locale migrateSystem" - "Do all the necessary operations to switch to the new Locale environment." - - LocaleChangeListeners := nil. - self - addLocalChangedListener: HandMorph; - addLocalChangedListener: Clipboard; - addLocalChangedListener: Vocabulary; - addLocalChangedListener: PartsBin; - addLocalChangedListener: Project; - addLocalChangedListener: PaintBoxMorph; - yourself! Item was removed: - ----- Method: Locale class>>platformEncodings (in category 'class initialization') ----- - platformEncodings - PlatformEncodings isEmptyOrNil ifTrue: [ self initializePlatformEncodings ]. - ^PlatformEncodings - ! Item was removed: - ----- Method: Locale class>>previous (in category 'accessing') ----- - previous - - ^ Previous - ! Item was removed: - ----- Method: Locale class>>resetKnownLocales (in category 'private') ----- - resetKnownLocales - - KnownLocales := nil - ! Item was removed: - ----- Method: Locale class>>startUp: (in category 'system startUp') ----- - startUp: resuming - | newID | - resuming ifFalse: [^self]. - (Preferences valueOfFlag: #useLocale) - ifTrue: [ - DateAndTime localTimeZone: (TimeZone - offset: (Duration minutes: Locale current offsetLocalToUTC) - name: 'Local Time' - abbreviation: 'LT'). - newID := self current determineLocaleID. - newID ~= LocaleID current - ifTrue: [self switchAndInstallFontToID: newID gently: true]]! Item was removed: - ----- Method: Locale class>>stringForLanguageNameIs: (in category 'accessing') ----- - stringForLanguageNameIs: localeID - "Answer a string for a menu determining whether the given - symbol is the project's natural language" - ^ (self current localeID = localeID - ifTrue: ['<yes>'] - ifFalse: ['<no>']) - , localeID displayName! Item was removed: - ----- Method: Locale class>>switchAndInstallFontToID: (in category 'accessing') ----- - switchAndInstallFontToID: localeID - "Locale switchAndInstallFontToID: (LocaleID isoLanguage: 'de')" - | locale | - locale := Locale localeID: localeID. - locale languageEnvironment isFontAvailable - ifFalse: [(self confirm: 'This language needs additional fonts. - Do you want to install the fonts?' translated) - ifTrue: [locale languageEnvironment installFont] - ifFalse: [^ self]]. - self - switchTo: locale! Item was removed: - ----- Method: Locale class>>switchAndInstallFontToID:gently: (in category 'accessing') ----- - switchAndInstallFontToID: localeID gently: gentlyFlag - - | locale result env envFound ret fontInImage menu | - "Assumption: Rainbow => can try Pango" - "Logic: - - in Sugar, we don't bother asking any questions, and we don't bother automatically loading fonts. - in Sugar, and if the font is available, use the font. - in Sugar, and if the font is not in the image, try to enable Pango. - - if the previous step fails, notify the user that you cannot switch to the language. - - not in Rainbow, - - if the font is in the image, use the font. - - if the font is not in the image, - - ask to choose: - - load font - - try to enable pango, if pango is available - - or cancel. - - if the previous step fails, notify the user that you cannot switch to the language. - Details: - - how to check non-pango font is available: - - if the language environment for the locale doesn't exist, the font is not available. - - if font loading fails, it is not available. - - how to check if the language environment doesn't exist: - - if the locales languageEnvironment is Latin1 but the locale isn't it is not available. - " - locale := Locale localeID: localeID. - env := locale languageEnvironment. - result := true. - envFound := (Latin1Environment supportedLanguages includes: locale isoLanguage) or: [(env isMemberOf: Latin1Environment) not]. - fontInImage := envFound and: [env isFontAvailable]. - SugarLauncher isRunningInSugar ifTrue: [ - fontInImage ifFalse: [ - "font is not available in the image. Even don't ask for font installation." - Cursor wait showWhile: [ - Preferences setPreference: #usePangoRenderer toValue: true. - TextMorph usePango: true]]. - ] ifFalse: [ - fontInImage ifFalse: [ - menu := MenuMorph new. - menu defaultTarget: menu. - envFound ifTrue: [menu add: 'load font' translated selector: #modalSelection: argument: #loadFont]. - RomePluginCanvas pangoIsAvailable ifTrue: [menu add: 'enable Pango' translated selector: #modalSelection: argument: #enablePango]. - menu add: 'cancel' translated selector: #modalSelection: argument: #cancel. - menu addTitle: 'This language needs additional fonts. - Do you want to install the fonts?' translated. - ret := menu invokeModal. - ret = #loadFont ifTrue: [result := env installFont. result ifTrue: [StrikeFont setupDefaultFallbackTextStyle]]. - ret = #enablePango ifTrue: [ - (result := RomePluginCanvas pangoIsAvailable) ifTrue: [ - Cursor wait showWhile: [ - Preferences setPreference: #usePangoRenderer toValue: true. - TextMorph usePango: true]]]. - (ret ~~ #loadFont and: [ret ~~ #enablePango]) ifTrue: [result := false]]]. - - result ifFalse: [self inform: 'Cannot load additional fonts' translated] ifTrue: [self switchTo: locale gently: gentlyFlag]. - ! Item was removed: - ----- Method: Locale class>>switchTo: (in category 'accessing') ----- - switchTo: locale - self switchTo: locale gently: false. - ! Item was removed: - ----- Method: Locale class>>switchTo:gently: (in category 'accessing') ----- - switchTo: locale gently: gentlyFlag - "Locale switchTo: (Locale isoLanguage: 'de')" - | availableID | - availableID := (NaturalLanguageTranslator availableForLocaleID: locale localeID) localeID. - Current localeID = availableID - ifFalse: [Previous := Current. - CurrentPlatform := Current := Locale localeID: availableID. - NaturalLanguageTranslator localeChanged. - gentlyFlag ifTrue: [self localeChangedGently] ifFalse: [self localeChanged]]! Item was removed: - ----- Method: Locale class>>switchToID: (in category 'accessing') ----- - switchToID: localeID - "Locale switchToID: (LocaleID isoLanguage: 'de') " - - self switchTo: (Locale localeID: localeID)! Item was removed: - ----- Method: Locale>>determineLocale (in category 'accessing') ----- - determineLocale - self localeID: self determineLocaleID! Item was removed: - ----- Method: Locale>>determineLocaleID (in category 'accessing') ----- - determineLocaleID - "Locale current determineLocaleID" - | isoLang isoCountry | - isoLang := self fetchISO2Language - ifNil: [^ self localeID]. - isoCountry := self fetchISOCountry - ifNil: [^ LocaleID isoLanguage: isoLang]. - ^ LocaleID isoLanguage: isoLang isoCountry: isoCountry! Item was removed: - ----- Method: Locale>>fetchISO2Language (in category 'private') ----- - fetchISO2Language - "Locale current fetchISO2Language" - | lang isoLang | - lang := self primLanguage. - lang ifNil: [^nil]. - lang := lang copyUpTo: 0 asCharacter. - lang size == 2 - ifTrue: [^lang]. - isoLang := ISOLanguageDefinition iso3LanguageDefinition: lang. - ^isoLang - ifNil: [nil] - ifNotNil: [isoLang iso2]! Item was removed: - ----- Method: Locale>>fetchISOCountry (in category 'private') ----- - fetchISOCountry - "Locale current fetchISOCountry" - | countryCode | - countryCode := self primCountry - ifNil: [^ nil]. - ^ countryCode copyUpTo: 0 asCharacter! Item was removed: - ----- Method: Locale>>iconForNativeLanguage (in category 'accessing') ----- - iconForNativeLanguage - - ^ (NaturalLanguageFormTranslator localeID: self localeID) translate: 'LanguageNameInNativeLanguage'. - ! Item was removed: - ----- Method: Locale>>isoCountry (in category 'accessing') ----- - isoCountry - ^self localeID isoCountry! Item was removed: - ----- Method: Locale>>isoLanguage (in category 'accessing') ----- - isoLanguage - ^self localeID isoLanguage! Item was removed: - ----- Method: Locale>>isoLocale (in category 'accessing') ----- - isoLocale - "<language>-<country>" - ^self isoCountry - ifNil: [self isoLanguage] - ifNotNil: [self isoLanguage , '-' , self isoCountry]! Item was removed: - ----- Method: Locale>>languageEnvironment (in category 'accessing') ----- - languageEnvironment - ^LanguageEnvironment localeID: self localeID! Item was removed: - ----- Method: Locale>>localeID (in category 'accessing') ----- - localeID - ^id! Item was removed: - ----- Method: Locale>>localeID: (in category 'accessing') ----- - localeID: anID - id := anID! Item was removed: - ----- Method: Locale>>offsetLocalToUTC (in category 'accessing') ----- - offsetLocalToUTC - ^self primTimezone! Item was removed: - ----- Method: Locale>>primCountry (in category 'system primitives') ----- - primCountry - "Returns string with country tag according to ISO 639" - <primitive: 'primitiveCountry' module: 'LocalePlugin'> - ^'US'! Item was removed: - ----- Method: Locale>>primCurrencyNotation (in category 'system primitives') ----- - primCurrencyNotation - "Returns boolean if symbol is pre- (true) or post-fix (false)" - <primitive: 'primitiveCurrencyNotation' module: 'LocalePlugin'> - ^true! Item was removed: - ----- Method: Locale>>primCurrencySymbol (in category 'system primitives') ----- - primCurrencySymbol - "Returns string with currency symbol" - <primitive: 'primitiveCurrencySymbol' module:'LocalePlugin'> - ^'$'! Item was removed: - ----- Method: Locale>>primDST (in category 'system primitives') ----- - primDST - "Returns boolean if DST (daylight saving time) is active or not" - <primitive:'primitiveDaylightSavings' module: 'LocalePlugin'> - ^false! Item was removed: - ----- Method: Locale>>primDecimalSymbol (in category 'system primitives') ----- - primDecimalSymbol - "Returns string with e.g. '.' or ','" - <primitive:'primitiveDecimalSymbol' module: 'LocalePlugin'> - ^'.'! Item was removed: - ----- Method: Locale>>primDigitGrouping (in category 'system primitives') ----- - primDigitGrouping - "Returns string with e.g. '.' or ',' (thousands etc)" - <primitive:'primitiveDigitGroupingSymbol' module: 'LocalePlugin'> - ^','! Item was removed: - ----- Method: Locale>>primLanguage (in category 'system primitives') ----- - primLanguage - "returns string with language tag according to ISO 639" - <primitive:'primitiveLanguage' module: 'LocalePlugin'> - ^'en' - - ! Item was removed: - ----- Method: Locale>>primLongDateFormat (in category 'system primitives') ----- - primLongDateFormat - "Returns the long date format - d day, m month, y year, - double symbol is null padded, single not padded (m=6, mm=06) - dddd weekday - mmmm month name" - <primitive:'primitiveLongDateFormat' module: 'LocalePlugin'> - ^'dddd, mmmm d, yyyy'! Item was removed: - ----- Method: Locale>>primMeasurement (in category 'system primitives') ----- - primMeasurement - "Returns boolean denoting metric(true) or imperial(false)." - <primitive:'primitiveMeasurementMetric' module: 'LocalePlugin'> - ^true - ! Item was removed: - ----- Method: Locale>>primShortDateFormat (in category 'system primitives') ----- - primShortDateFormat - "Returns the short date format - d day, m month, y year, - double symbol is null padded, single not padded (m=6, mm=06) - dddd weekday - mmmm month name" - <primitive:'primitiveShortDateFormat' module: 'LocalePlugin'> - ^'m/d/yy'! Item was removed: - ----- Method: Locale>>primTimeFormat (in category 'system primitives') ----- - primTimeFormat - "Returns string time format - Format is made up of - h hour (h 12, H 24), m minute, s seconds, x (am/pm String) - double symbol is null padded, single not padded (h=6, hh=06)" - <primitive:'primitiveTimeFormat' module: 'LocalePlugin'> - ^'h:mmx'! Item was removed: - ----- Method: Locale>>primTimezone (in category 'system primitives') ----- - primTimezone - "The offset from UTC in minutes, with positive offsets being towards the east. - (San Francisco is in UTC -07*60 and Paris is in UTC +02*60 when daylight savings is in effect)." - <primitive:'primitiveTimezoneOffset' module: 'LocalePlugin'> - ^0! Item was removed: - ----- Method: Locale>>primVMOffsetToUTC (in category 'system primitives') ----- - primVMOffsetToUTC - "Returns the offset in minutes between the VM and UTC. - If the VM does not support UTC times, this is 0. - Also gives us backward compatibility with old VMs as the primitive will fail and we then can return 0." - <primitive:'primitiveVMOffsetToUTC' module: 'LocalePlugin'> - ^0! Item was removed: - ----- Method: Locale>>printOn: (in category 'accessing') ----- - printOn: aStream - super printOn: aStream. - aStream nextPutAll: '(' , id printString , ')'! Item was removed: - Object subclass: #LocaleID - instanceVariableNames: 'isoLanguage isoCountry' - classVariableNames: '' - poolDictionaries: '' - category: 'GetText-Localization'! Item was removed: - ----- Method: LocaleID class>>current (in category 'accessing') ----- - current - ^Locale current localeID! Item was removed: - ----- Method: LocaleID class>>isoLanguage: (in category 'instance creation') ----- - isoLanguage: langString - ^self isoLanguage: langString isoCountry: nil! Item was removed: - ----- Method: LocaleID class>>isoLanguage:isoCountry: (in category 'instance creation') ----- - isoLanguage: langString isoCountry: countryStringOrNil - ^self new isoLanguage: langString isoCountry: countryStringOrNil! Item was removed: - ----- Method: LocaleID class>>isoString: (in category 'instance creation') ----- - isoString: isoString - "Parse the isoString (<language>-<country>) into its components and return the matching LocaleID" - "LocaleID isoString: 'en' " - "LocaleID isoString: 'en-us' " - - | parts language country | - parts := isoString findTokens: #($- ). - language := parts first. - parts size > 1 - ifTrue: [country := parts second]. - ^self isoLanguage: language isoCountry: country! Item was removed: - ----- Method: LocaleID class>>posixName: (in category 'instance creation') ----- - posixName: aString - ^ self - isoString: (aString copyReplaceAll: ':=' with: '-')! Item was removed: - ----- Method: LocaleID class>>previous (in category 'accessing') ----- - previous - ^Locale previous localeID! Item was removed: - ----- Method: LocaleID>>= (in category 'comparing') ----- - = anotherObject - self class == anotherObject class - ifFalse: [^false]. - ^self isoLanguage = anotherObject isoLanguage - and: [self isoCountry = anotherObject isoCountry]! Item was removed: - ----- Method: LocaleID>>displayCountry (in category 'accessing') ----- - displayCountry - ^(ISOLanguageDefinition iso2Countries at: self isoCountry asUppercase ifAbsent: [ self isoCountry ]) ! Item was removed: - ----- Method: LocaleID>>displayLanguage (in category 'accessing') ----- - displayLanguage - | language | - language := (ISOLanguageDefinition iso2LanguageTable - at: self isoLanguage - ifAbsent: [^ self isoLanguage]) language. - ^ self isoCountry - ifNil: [language] - ifNotNil: [language , ' (' , self displayCountry , ')']! Item was removed: - ----- Method: LocaleID>>displayName (in category 'accessing') ----- - displayName - "Answer a proper name to represent the receiver in GUI. - - The wording is provided by translations of the magic value - '<language display name>'. - - 'English' -> 'English' - 'German' -> 'Deutsch' - " - | magicPhrase translatedMagicPhrase | - magicPhrase := '<language display name>'. - translatedMagicPhrase := GetTextTranslator translateWithoutLoading: magicPhrase toLocaleID: self. - ^ translatedMagicPhrase = magicPhrase - ifTrue: [self displayLanguage] - ifFalse: [translatedMagicPhrase]! Item was removed: - ----- Method: LocaleID>>hasParent (in category 'testing') ----- - hasParent - ^self isoCountry notNil! Item was removed: - ----- Method: LocaleID>>hash (in category 'comparing') ----- - hash - ^self isoLanguage hash bitXor: self isoCountry hash! Item was removed: - ----- Method: LocaleID>>isoCountry (in category 'accessing') ----- - isoCountry - ^isoCountry! Item was removed: - ----- Method: LocaleID>>isoLanguage (in category 'accessing') ----- - isoLanguage - ^isoLanguage! Item was removed: - ----- Method: LocaleID>>isoLanguage:isoCountry: (in category 'initialize') ----- - isoLanguage: langString isoCountry: countryStringOrNil - isoLanguage := langString. - isoCountry := countryStringOrNil! Item was removed: - ----- Method: LocaleID>>isoString (in category 'accessing') ----- - isoString - ^self asString! Item was removed: - ----- Method: LocaleID>>parent (in category 'accessing') ----- - parent - ^self class isoLanguage: self isoLanguage! Item was removed: - ----- Method: LocaleID>>posixName (in category 'printing') ----- - posixName - "(LocaleID isoString: 'es-MX') posixName" - "(LocaleID isoString: 'es') posixName" - "language[_territory]" - ^ self isoCountry - ifNil: [self isoLanguage] - ifNotNil: [self isoLanguage , ':=' , self isoCountry]! Item was removed: - ----- Method: LocaleID>>printOn: (in category 'printing') ----- - printOn: stream - "<language>-<country>" - stream nextPutAll: self isoLanguage. - self isoCountry - ifNotNil: [stream nextPut: $-; nextPutAll: self isoCountry]! Item was removed: - ----- Method: LocaleID>>storeOn: (in category 'printing') ----- - storeOn: aStream - aStream nextPut: $(. - aStream nextPutAll: self class name. - aStream nextPutAll: ' isoString: '. - aStream nextPutAll: '''' , self printString , ''''. - aStream nextPut: $). - ! Item was removed: - ----- Method: LocaleID>>translator (in category 'accessing') ----- - translator - ^ InternalTranslator localeID: self ! Item was removed: - Object subclass: #NaturalLanguageFormTranslator - instanceVariableNames: 'id generics' - classVariableNames: 'CachedTranslations' - poolDictionaries: '' - category: 'GetText-Localization'! Item was removed: - ----- Method: NaturalLanguageFormTranslator class>>bitmapForJapanese (in category 'as yet unclassified') ----- - bitmapForJapanese - - ^ (Form - extent: 54@17 - depth: 16 - fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65536 0 1 65537 65537 65537 65537 0 0 0 0 1 0 0 0 0 65537 65537 1 65537 65537 65536 1 0 0 0 1 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 65536 0 0 65536 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 1 65537 65537 65536 1 0 0 0 1 0 0 65536 0 0 1 0 0 0 1 0 1 65537 65537 65537 65537 65537 65537 0 0 0 1 65537 65537 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 65537 65536 0 0 0 65537 65537 0 65536 1 0 0 0 65536 1 0 0 0 1 65537 65537 65537 65537 0 0 0 1 1 1 0 0 0 0 0 0 65536 1 0 0 0 65536 1 0 0 0 1 0 0 0 1 0 0 0 1 1 1 0 0 0 65537 65537 65537 65537 65537 65537 0 0 65536 1 0 0 0 1 0 0 0 1 0 0 0 65536 1 0 65536 0 0 0 0 0 0 0 0 0 0 65536 1 0 0 0 1 0 0 0 1 0 0 1 0 1 0 1 0 0 65537 65537 1 65537 65537 65536 0 0 65536 1 0 0 0 1 0 0 0 1 0 0 65536 65537 65537 65537 65536 65536 0 65536 1 1 0 0 65536 0 0 65536 0 65536 0 0 1 0 0 0 1 0 1 0 0 1 0 0 1 0 65536 1 1 0 0 65536 0 1 0 0 65536 0 0 1 65537 65537 65537 65537 0 0 0 0 1 0 0 0 0 65537 65537 1 65537 65537 65536 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 65536 0 0 0 65536 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0) - offset: 0@0)! Item was removed: - ----- Method: NaturalLanguageFormTranslator class>>cachedTranslations (in category 'accessing') ----- - cachedTranslations - "CachedTranslations := nil" - ^CachedTranslations ifNil: [CachedTranslations := Dictionary new]! Item was removed: - ----- Method: NaturalLanguageFormTranslator class>>cleanUp (in category 'class initialization') ----- - cleanUp - "Flush caches" - - CachedTranslations := nil! Item was removed: - ----- Method: NaturalLanguageFormTranslator class>>initializeJapaneseBitmap (in category 'as yet unclassified') ----- - initializeJapaneseBitmap - - (self localeID: (LocaleID isoString: 'ja')) name: 'LanguageNameInNativeLanguage' form: self bitmapForJapanese. - ! Item was removed: - ----- Method: NaturalLanguageFormTranslator class>>isoLanguage: (in category 'accessing') ----- - isoLanguage: isoLanguage - "Return the generic language translator as there is no information about the country code" - - ^self isoLanguage: isoLanguage isoCountry: nil! Item was removed: - ----- Method: NaturalLanguageFormTranslator class>>isoLanguage:isoCountry: (in category 'accessing') ----- - isoLanguage: isoLanguage isoCountry: isoCountry - ^self localeID: (LocaleID isoLanguage: isoLanguage isoCountry: isoCountry)! Item was removed: - ----- Method: NaturalLanguageFormTranslator class>>loadFormsFrom: (in category 'i/o') ----- - loadFormsFrom: aStream - - | rr pair inst | - rr := ReferenceStream on: aStream. - pair := rr next. - inst := self localeID: (LocaleID isoString: pair first). - pair second associationsDo: [:assoc | - inst name: assoc key form: assoc value. - ]. - ^ inst. - ! Item was removed: - ----- Method: NaturalLanguageFormTranslator class>>localeID: (in category 'accessing') ----- - localeID: localeID - ^ self cachedTranslations - at: localeID - ifAbsentPut: [self new localeID: localeID]! Item was removed: - ----- Method: NaturalLanguageFormTranslator>>generics (in category 'accessing') ----- - generics - ^generics ifNil: [generics := Dictionary new]! Item was removed: - ----- Method: NaturalLanguageFormTranslator>>localeID (in category 'accessing') ----- - localeID - ^id! Item was removed: - ----- Method: NaturalLanguageFormTranslator>>localeID: (in category 'accessing') ----- - localeID: anID - id := anID! Item was removed: - ----- Method: NaturalLanguageFormTranslator>>name:form: (in category 'accessing') ----- - name: formName form: translatedForm - self generics at: formName put: translatedForm. - ! Item was removed: - ----- Method: NaturalLanguageFormTranslator>>saveFormsOn: (in category 'i/o') ----- - saveFormsOn: aStream - - | rr | - rr := ReferenceStream on: aStream. - rr nextPut: {id isoString. generics}. - rr close. - ! Item was removed: - ----- Method: NaturalLanguageFormTranslator>>translate: (in category 'utilities') ----- - translate: aString - - ^ (self generics - at: aString ifAbsent: [nil]) deepCopy. - - "Do you like to write 'form ifNotNil: [form deepCopy]'?" - ! Item was removed: - Object subclass: #NaturalLanguageTranslator - instanceVariableNames: 'id' - classVariableNames: 'Translators' - poolDictionaries: '' - category: 'GetText-Localization'! - - !NaturalLanguageTranslator commentStamp: '<historical>' prior: 0! - abstract class of natural language translator. - Class side manages and holds loaded instances of concrete classes.! Item was removed: - ----- Method: NaturalLanguageTranslator class>>availableForLocaleID: (in category 'accessing') ----- - availableForLocaleID: localeID - "Answer available locale ID. - If translator is not found for correct locale ID, then isoLanguage is - attempted for the key." - ^ self translators - at: localeID - ifAbsent: [localeID hasParent - ifTrue: [self translators - at: localeID parent - ifAbsent: [self default]] - ifFalse: [self default]]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>availableLanguageLocaleIDs (in category 'accessing') ----- - availableLanguageLocaleIDs - "Return the locale ids for the currently available languages. - Meaning those which either internally or externally have - translations available." - "NaturalLanguageTranslator availableLanguageLocaleIDs" - ^ self translators values collect:[:each | each localeID]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>cleanUpCache (in category 'private') ----- - cleanUpCache - "NaturalLanguageTranslator cleanUpCache" - - self cachedTranslations keys do: [:key | - key isoLanguage size > 2 ifTrue: [self cachedTranslations removeKey: key]]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>current (in category 'accessing') ----- - current - ^ self availableForLocaleID: LocaleID current! Item was removed: - ----- Method: NaturalLanguageTranslator class>>default (in category 'accessing') ----- - default - "Answer translator for backstop" - "self default translate: 'test'" - ^ self new - localeID: (LocaleID isoLanguage: 'en')! Item was removed: - ----- Method: NaturalLanguageTranslator class>>directoryForLanguage:country:create: (in category 'private loading') ----- - directoryForLanguage: isoLanguage country: isoCountry create: createDir - "Try to locate the <prefs>/locale/<language>{/<country>} folder. - If createDir is set, create the path down to country or language, depending on wether it's specified.. - Return the directory for country or language depending on specification. - If neither exists, nil" - - "NaturalLanguageTranslator directoryForLanguage: 'es' country: nil create: true" - "NaturalLanguageTranslator directoryForLanguage: 'de' country: 'DE' create: true" - "NaturalLanguageTranslator directoryForLanguage: 'en' country: 'US' create: false" - "NaturalLanguageTranslator directoryForLanguage: 'en' country: nil create: true" - - "If this fails, there is nothing we can do about it here" - | localeDir countryDir languageDir | - localeDir := self localeDirCreate: createDir. - localeDir ifNil: [^nil]. - - isoCountry ifNil: [ - languageDir := localeDir directoryNamed: isoLanguage. - createDir - ifTrue: [languageDir assureExistence]. - ^languageDir exists - ifTrue: [languageDir] - ifFalse: [nil]]. - - countryDir := languageDir directoryNamed: isoCountry. - createDir - ifTrue: [countryDir assureExistence]. - - ^countryDir exists - ifTrue: [countryDir] - ifFalse: [nil]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>directoryForLocaleID:create: (in category 'private loading') ----- - directoryForLocaleID: localeID create: createDir - "Try to locate the <prefs>/locale/<language>{/<country>} folder. - If createDir is set, create the path down to country or language, depending on locale. - Return the directory for country or language depending on locale. - If neither exists, nil" - - "NaturalLanguageTranslator directoryForLanguage: 'de' country: nil readOnly: true" - "NaturalLanguageTranslator directoryForLanguage: 'de' country: 'DE' readOnly: true" - "NaturalLanguageTranslator directoryForLanguage: 'en' country: 'US' readOnly: false" - "NaturalLanguageTranslator directoryForLanguage: 'en' country: nil readOnly: true" - - ^self directoryForLanguage: localeID isoLanguage country: localeID isoCountry create: createDir! Item was removed: - ----- Method: NaturalLanguageTranslator class>>domainRegistered: (in category 'accessing') ----- - domainRegistered: aDomainName - "notify that new TextDomain is registered" - self translators do: [:each | each domainRegistered: aDomainName]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>domainUnregistered: (in category 'accessing') ----- - domainUnregistered: aDomainName - "notify that new TextDomain is unregistered" - self translators do: [:each | each domainUnregistered: aDomainName]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>fileReaderServicesForFile:suffix: (in category 'file-services') ----- - fileReaderServicesForFile: fullName suffix: suffix - "Answer the file services associated with given file" - ^ (suffix = self translationSuffix) | (suffix = '*') - ifTrue: [{self serviceMergeLanguageTranslations}] - ifFalse: [#()]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>initialize (in category 'class initialization') ----- - initialize - Smalltalk addToStartUpList: NaturalLanguageTranslator after: FileDirectory. - ! Item was removed: - ----- Method: NaturalLanguageTranslator class>>isoLanguage: (in category 'accessing') ----- - isoLanguage: isoLanguage - "Return the generic language translator as there is no information about the country code" - - ^self isoLanguage: isoLanguage isoCountry: nil! Item was removed: - ----- Method: NaturalLanguageTranslator class>>isoLanguage:isoCountry: (in category 'accessing') ----- - isoLanguage: isoLanguage isoCountry: isoCountry - ^self localeID: (LocaleID isoLanguage: isoLanguage isoCountry: isoCountry)! Item was removed: - ----- Method: NaturalLanguageTranslator class>>loadAvailableExternalLocales (in category 'private loading') ----- - loadAvailableExternalLocales - "private - register locales IDs based on the content of the <prefs>/locale/ directory" - | localeDir | - localeDir := self localeDirCreate: false. - localeDir ifNil: [^ #()]. - localeDir directoryNames - do: [:langDirName | - | langDir | - langDir := localeDir directoryNamed: langDirName. - (langDir fileNamesMatching: '*.' , self translationSuffix) - ifNotEmpty: [self loadTranslatorForIsoLanguage: langDirName isoCountry: nil]. - langDir directoryNames - do: [:countryDirName | - | countryDir | - countryDir := langDir directoryNamed: countryDirName. - (countryDir fileNamesMatching: '*.' , self translationSuffix) - ifNotEmpty: [self loadTranslatorForIsoLanguage: langDirName isoCountry: countryDirName] - ] - ]. - ! Item was removed: - ----- Method: NaturalLanguageTranslator class>>loadAvailableLocales (in category 'private loading') ----- - loadAvailableLocales - "This loads the default locale and all external locales" - - | defaultID | - defaultID := LocaleID current. - self cachedTranslations at: defaultID ifAbsent: [self localeID: defaultID]. - self loadAvailableExternalLocales.! Item was removed: - ----- Method: NaturalLanguageTranslator class>>loadExternalTranslationsFor: (in category 'private loading') ----- - loadExternalTranslationsFor: translator - "Try to load translations from external external files. - The files are located in the <prefs>/locale/<language>{/<country>} folder. - There can be more than one file for each location, so applications can install their own partial translation tables. All files in the specific folder are loaded." - - | translationDir | - translationDir := self directoryForLocaleID: translator localeID create: false. - translationDir ifNil: [ ^nil ]. - (translationDir fileNamesMatching: '*.' , self translationSuffix) - do: [:fileName | translator loadFromFileNamed: (translationDir fullNameFor: fileName)]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>loadForLocaleIsoString:fromGzippedMimeLiteral: (in category 'file-services') ----- - loadForLocaleIsoString: localeString fromGzippedMimeLiteral: mimeString - "merge the translation from the mime literal." - | stream localeID translator gs rbStream s currentPlatform | - s := Base64MimeConverter mimeDecodeToBytes: mimeString readStream. - s reset. - gs := GZipReadStream on: s. - rbStream := MultiByteBinaryOrTextStream with: gs contents asString. - rbStream converter: UTF8TextConverter new. - rbStream reset. - localeID := LocaleID isoString: localeString. - currentPlatform := Locale currentPlatform. - [Locale - currentPlatform: (Locale localeID: localeID). - stream := ReadStream on: rbStream contents] - ensure: [Locale currentPlatform: currentPlatform]. - translator := self localeID: localeID. - translator loadFromStream: stream. - LanguageEnvironment resetKnownEnvironments! Item was removed: - ----- Method: NaturalLanguageTranslator class>>loadTranslatorForIsoLanguage:isoCountry: (in category 'private loading') ----- - loadTranslatorForIsoLanguage: isoLanguage isoCountry: isoCountry - "private - load the translations from <prefs>/locale/ directory - the procedure is to assure the existence of a translator for the - given language/country and then load the external translations for this translator" - - | translator | - translator := self localeID: (LocaleID isoLanguage: isoLanguage isoCountry: isoCountry). - - self loadExternalTranslationsFor: translator! Item was removed: - ----- Method: NaturalLanguageTranslator class>>localeChanged (in category 'accessing') ----- - localeChanged - "notify some project starts to use this locale. - this facility may use the event to load translation data dynamically" - self current setCurrent - ! Item was removed: - ----- Method: NaturalLanguageTranslator class>>localeDirCreate: (in category 'private loading') ----- - localeDirCreate: createDir - "Try to locate the <prefs>/locale/ folder. - If createDir is set, try to create the path. - If it doesn't exist, return nil" - - "If this fails, there is nothing we can do about it here" - | prefDir localeDir | - (createDir not - and: [ExternalSettings preferenceDirectory isNil]) - ifTrue: [^ nil]. - - prefDir := ExternalSettings assuredPreferenceDirectory. - prefDir exists - ifFalse: [^nil]. - - - localeDir := prefDir directoryNamed: 'locale'. - createDir - ifTrue: [localeDir assureExistence]. - ^localeDir exists - ifTrue: [localeDir] - ifFalse: [nil]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>localeID: (in category 'accessing') ----- - localeID: localeID - ^ self cachedTranslations - at: localeID - ifAbsentPut: [self new localeID: localeID]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>mergeTranslationFileNamed: (in category 'file-services') ----- - mergeTranslationFileNamed: fileFullNameString - "merge the translation in the file named fileFullNameString" - - FileStream readOnlyFileNamed: fileFullNameString do: [:stream | - | localeID translator | - localeID := LocaleID isoString: stream localName sansPeriodSuffix. - translator := self localeID: localeID. - translator loadFromStream: stream]. - LanguageEnvironment resetKnownEnvironments. - - ! Item was removed: - ----- Method: NaturalLanguageTranslator class>>privateStartUp (in category 'class initialization') ----- - privateStartUp - self resetCaches. - GetTextTranslator privateStartUp. - InternalTranslator privateStartUp. - self localeChanged.! Item was removed: - ----- Method: NaturalLanguageTranslator class>>registerPhrase: (in category 'private') ----- - registerPhrase: phrase - "Using a Dictionary so we can lookup existing string instead of creating needless copies when loading a translation." - self allKnownPhrases at: phrase put: phrase! Item was removed: - ----- Method: NaturalLanguageTranslator class>>registeredPhraseFor: (in category 'private') ----- - registeredPhraseFor: phrase - "Using a Dictionary so we can lookup existing string instead of creating needless copies when loading a translation." - ^self allKnownPhrases at: phrase ifAbsentPut: [phrase]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>removeLocaleID: (in category 'accessing') ----- - removeLocaleID: localeID - "self removeLocaleID: (LocaleID isoString: 'ja-kids')" - ^ self translators - removeKey: localeID - ifAbsent: []! Item was removed: - ----- Method: NaturalLanguageTranslator class>>resetCaches (in category 'class initialization') ----- - resetCaches - Translators := nil.! Item was removed: - ----- Method: NaturalLanguageTranslator class>>serviceMergeLanguageTranslations (in category 'file-services') ----- - serviceMergeLanguageTranslations - "Answer a service for merging of translation files" - ^ SimpleServiceEntry - provider: self - label: 'merge the translation file' - selector: #mergeTranslationFileNamed: - description: 'merge the translation file into the language named like the file' - buttonLabel: 'merge'! Item was removed: - ----- Method: NaturalLanguageTranslator class>>services (in category 'file-services') ----- - services - "Answer potential file services associated with this class" - ^ {self serviceMergeLanguageTranslations}! Item was removed: - ----- Method: NaturalLanguageTranslator class>>startUp: (in category 'class initialization') ----- - startUp: resuming - resuming - ifFalse: [^ self]. - self privateStartUp.! Item was removed: - ----- Method: NaturalLanguageTranslator class>>translate:toLocaleID: (in category 'translation') ----- - translate: aString toLocaleID: localeID - "translate for default domain" - ^ (self availableForLocaleID: localeID) - translate: aString! Item was removed: - ----- Method: NaturalLanguageTranslator class>>translate:toLocaleID:inDomain: (in category 'translation') ----- - translate: aString toLocaleID: localeID inDomain: aDomainName - ^ (self availableForLocaleID: localeID) - translate: aString inDomain: aDomainName! Item was removed: - ----- Method: NaturalLanguageTranslator class>>translateWithoutLoading:toLocaleID: (in category 'translation') ----- - translateWithoutLoading: aString toLocaleID: localeID - "translate for default domain" - ^self translateWithoutLoading: aString toLocaleID: localeID inDomain: TextDomainManager defaultDomain. - ! Item was removed: - ----- Method: NaturalLanguageTranslator class>>translateWithoutLoading:toLocaleID:inDomain: (in category 'translation') ----- - translateWithoutLoading: aString toLocaleID: localeID inDomain: aDomainName - "try to translate with small footprint: - if GetTextTranslator hasn't loaded MO, try to use InternalTranslator. - if InternalTranslator isn't available, then actually load MO and use it" - | translator | - translator := self availableForLocaleID: localeID. - (translator isDomainLoaded: aDomainName) ifFalse: [ - (InternalTranslator availableLanguageLocaleIDs includes: localeID) - ifTrue: [translator := InternalTranslator localeID: localeID]. - ]. - ^translator translate: aString inDomain: aDomainName! Item was removed: - ----- Method: NaturalLanguageTranslator class>>translationSuffix (in category 'private') ----- - translationSuffix - ^'translation'! Item was removed: - ----- Method: NaturalLanguageTranslator class>>translators (in category 'accessing') ----- - translators - ^ Translators ifNil: [Translators := Dictionary new] ! Item was removed: - ----- Method: NaturalLanguageTranslator>>atRandom (in category 'accessing') ----- - atRandom - - self subclassResponsibility. - ! Item was removed: - ----- Method: NaturalLanguageTranslator>>checkPhrase:translation: (in category 'translation') ----- - checkPhrase: phrase translation: translation! Item was removed: - ----- Method: NaturalLanguageTranslator>>defaultBackgroundColor (in category 'user interface') ----- - defaultBackgroundColor - "answer the receiver's defaultBackgroundColor for views" - ^ Color cyan! Item was removed: - ----- Method: NaturalLanguageTranslator>>displayLanguage (in category 'accessing') ----- - displayLanguage - ^ id displayLanguage! Item was removed: - ----- Method: NaturalLanguageTranslator>>displayName (in category 'accessing') ----- - displayName - ^ id displayName! Item was removed: - ----- Method: NaturalLanguageTranslator>>domainRegistered: (in category 'accessing') ----- - domainRegistered: aDomainName - "notify that new TextDomain is registered. Concrete subclass can responds to this event if needed"! Item was removed: - ----- Method: NaturalLanguageTranslator>>domainUnregistered: (in category 'accessing') ----- - domainUnregistered: aDomainName - "notify that new TextDomain is unregistered. Concrete subclass can responds to this event if needed"! Item was removed: - ----- Method: NaturalLanguageTranslator>>fileOutHeader (in category 'fileIn/fileOut') ----- - fileOutHeader - ^ '''Translation dictionary'''! Item was removed: - ----- Method: NaturalLanguageTranslator>>fileOutHeaderOn: (in category 'fileIn/fileOut') ----- - fileOutHeaderOn: aStream - aStream nextChunkPut: self fileOutHeader; - cr. - aStream timeStamp; cr. - aStream nextPut: $!!. - aStream nextChunkPut: '(' , self class name , ' localeID: ' , id storeString , ')'. - aStream cr! Item was removed: - ----- Method: NaturalLanguageTranslator>>fileOutOn: (in category 'fileIn/fileOut') ----- - fileOutOn: aStream - "self current fileOutOn: Transcript. Transcript endEntry" - self fileOutHeaderOn: aStream. - self fileOutOn: aStream keys: nil! Item was removed: - ----- Method: NaturalLanguageTranslator>>fileOutOn:keys: (in category 'fileIn/fileOut') ----- - fileOutOn: aStream keys: keys - "self current fileOutOn: Transcript. Transcript endEntry" - (keys - ifNil: [generics keys asArray sort]) - do: [:key | self - nextChunkPut: (generics associationAt: key) - on: aStream]. - keys - ifNil: [self untranslated - do: [:each | self nextChunkPut: each -> '' on: aStream]]. - aStream nextPut: $!!; - cr! Item was removed: - ----- Method: NaturalLanguageTranslator>>generics (in category 'private') ----- - generics - ^generics ifNil: [generics := Dictionary new]! Item was removed: - ----- Method: NaturalLanguageTranslator>>isDomainLoaded: (in category 'accessing') ----- - isDomainLoaded: aDomainName - "ask if translation dictionary for the domain has been loaded and available now for use" - self subclassResponsibility.! Item was removed: - ----- Method: NaturalLanguageTranslator>>isoCountry (in category 'accessing') ----- - isoCountry - ^self localeID isoCountry! Item was removed: - ----- Method: NaturalLanguageTranslator>>isoLanguage (in category 'accessing') ----- - isoLanguage - ^self localeID isoLanguage! Item was removed: - ----- Method: NaturalLanguageTranslator>>loadFromFileNamed: (in category 'private store-retrieve') ----- - loadFromFileNamed: fileNameString - "Load translations from an external file" - - FileStream readOnlyFileNamed: fileNameString do: [ :file | - self loadFromStream: file ]. - self changed: #translations. - self changed: #untranslated. - ! Item was removed: - ----- Method: NaturalLanguageTranslator>>loadFromRefStream: (in category 'private store-retrieve') ----- - loadFromRefStream: stream - "Load translations from an external file" - | loadedArray refStream | - refStream := ReferenceStream on: stream. - [loadedArray := refStream next] - ensure: [refStream close]. - self processExternalObject: loadedArray ! Item was removed: - ----- Method: NaturalLanguageTranslator>>loadFromStream: (in category 'private store-retrieve') ----- - loadFromStream: stream - "Load translations from an external file" - | header isFileIn | - header := '''Translation dictionary'''. - isFileIn := (stream next: header size) - = header. - stream reset. - isFileIn - ifTrue: [stream fileInAnnouncing: 'Loading ' translated, stream localName] - ifFalse: [self loadFromRefStream: stream]! Item was removed: - ----- Method: NaturalLanguageTranslator>>localeID (in category 'accessing') ----- - localeID - ^id! Item was removed: - ----- Method: NaturalLanguageTranslator>>localeID: (in category 'initialize-release') ----- - localeID: anID - id := anID! Item was removed: - ----- Method: NaturalLanguageTranslator>>mergeTranslations: (in category 'private store-retrieve') ----- - mergeTranslations: newTranslations - "Merge a new set of translations into the exiting table. - Overwrites existing entries." - - newTranslations keysAndValuesDo: [:key :value | - self rawPhrase: (self class registeredPhraseFor: key) translation: value]. - self changed: #translations. - self changed: #untranslated.! Item was removed: - ----- Method: NaturalLanguageTranslator>>nextChunkPut:on: (in category 'fileIn/fileOut') ----- - nextChunkPut: anObject on: aStream - | i remainder terminator | - terminator := $!!. - remainder := anObject storeString. - [(i := remainder indexOf: terminator) = 0] - whileFalse: [aStream - nextPutAll: (remainder copyFrom: 1 to: i). - aStream nextPut: terminator. - "double imbedded terminators" - remainder := remainder copyFrom: i + 1 to: remainder size]. - aStream nextPutAll: remainder. - aStream nextPut: terminator; cr.! Item was removed: - ----- Method: NaturalLanguageTranslator>>phrase:translation: (in category 'translation') ----- - phrase: phraseString translation: translationString - self generics at: phraseString put: translationString asString. - self changed: #translations. - self changed: #untranslated.! Item was removed: - ----- Method: NaturalLanguageTranslator>>printOn: (in category 'printing') ----- - printOn: aStream - aStream nextPutAll: self class name; nextPut: $(; print: self localeID; nextPut: $)! Item was removed: - ----- Method: NaturalLanguageTranslator>>processExternalObject: (in category 'private store-retrieve') ----- - processExternalObject: anArray - "pivate - process the external object" - - "new format -> {translations. untranslated}" - - anArray second do: [:each | self class registerPhrase: each]. - - self mergeTranslations: anArray first! Item was removed: - ----- Method: NaturalLanguageTranslator>>rawPhrase:translation: (in category 'translation') ----- - rawPhrase: phraseString translation: translationString - self generics at: phraseString put: translationString asString. - ! Item was removed: - ----- Method: NaturalLanguageTranslator>>rawRemoveUntranslated: (in category 'translation') ----- - rawRemoveUntranslated: untranslated - - self class allKnownPhrases removeKey: untranslated ifAbsent: []. - self changed: #untranslated.! Item was removed: - ----- Method: NaturalLanguageTranslator>>removeTranslationFor: (in category 'translation') ----- - removeTranslationFor: phraseString - self generics removeKey: phraseString ifAbsent: []. - self changed: #translations. - self changed: #untranslated.! Item was removed: - ----- Method: NaturalLanguageTranslator>>removeUntranslated: (in category 'translation') ----- - removeUntranslated: untranslated - - self class allKnownPhrases removeKey: untranslated ifAbsent: []. - ! Item was removed: - ----- Method: NaturalLanguageTranslator>>saveToFileNamed: (in category 'private store-retrieve') ----- - saveToFileNamed: fileNameString - "save the receiver's translations to a file named fileNameString" - | stream | - "Set true if you need to save as binary" - false - ifTrue: [stream := ReferenceStream fileNamed: fileNameString. - stream nextPut: {self translations. self untranslated}. - stream close. - ^ self]. - stream := FileStream fileNamed: fileNameString. - [self fileOutOn: stream] - ensure: [stream close]! Item was removed: - ----- Method: NaturalLanguageTranslator>>scanFrom: (in category 'fileIn/fileOut') ----- - scanFrom: aStream - "Read a definition of dictionary. - Make sure current locale corresponds my locale id" - | newTranslations currentPlatform | - newTranslations := Dictionary new. - currentPlatform := Locale currentPlatform. - [ | aString assoc | - Locale - currentPlatform: (Locale localeID: id). - [aString := aStream nextChunk withSqueakLineEndings. - aString size > 0] - whileTrue: [assoc := Compiler evaluate: aString. - assoc value = '' - ifTrue: [self class registerPhrase: assoc key] - ifFalse: [newTranslations add: assoc]]] - ensure: [Locale currentPlatform: currentPlatform]. - self mergeTranslations: newTranslations! Item was removed: - ----- Method: NaturalLanguageTranslator>>setCurrent (in category 'language switching') ----- - setCurrent - "notify locale of the translator become current" - ! Item was removed: - ----- Method: NaturalLanguageTranslator>>translate: (in category 'translation') ----- - translate: aString - ^self translate: aString - inDomain: TextDomainManager defaultDomain! Item was removed: - ----- Method: NaturalLanguageTranslator>>translate:in: (in category 'translation') ----- - translate: aString in: aContext! Item was removed: - ----- Method: NaturalLanguageTranslator>>translate:inDomain: (in category 'translation') ----- - translate: aString inDomain: aDomainName - ^ aString! Item was removed: - ----- Method: NaturalLanguageTranslator>>translationFor: (in category 'translation') ----- - translationFor: aString - ^self translate: aString! Item was removed: - ----- Method: NaturalLanguageTranslator>>translations (in category 'accessing') ----- - translations - ^self generics! Item was removed: - ----- Method: NaturalLanguageTranslator>>untranslated (in category 'accessing') ----- - untranslated - | translations | - translations := self translations. - ^self class allKnownPhrases reject: [:each | translations includesKey: each]! Item was removed: - ----- Method: NaturalLanguageTranslator>>writeAsMimeString (in category 'fileIn/fileOut') ----- - writeAsMimeString - - | fileName fileStream tmpStream s2 gzs | - tmpStream := MultiByteBinaryOrTextStream on: ''. - tmpStream converter: UTF8TextConverter new. - self fileOutOn: tmpStream. - s2 := RWBinaryOrTextStream on: ''. - gzs := GZipWriteStream on: s2. - tmpStream reset. - gzs nextPutAll: (tmpStream binary contentsOfEntireFile asString) contents. - gzs close. - s2 reset. - - fileName := id isoString, '.translation.gz.mime'. - fileStream := FileStream newFileNamed: fileName. - fileStream nextPutAll: (Base64MimeConverter mimeEncode: s2) contents. - fileStream close. - !
1
0
0
0
The Trunk: GetText-edc.21.mcz
by commits@source.squeak.org
29 Mar '12
29 Mar '12
Edgar J. De Cleene uploaded a new version of GetText to project The Trunk:
http://source.squeak.org/trunk/GetText-edc.21.mcz
==================== Summary ==================== Name: GetText-edc.21 Author: edc Time: 29 March 2012, 8:48:03.631 am UUID: b6d73dcd-1e45-4ceb-b1ed-98caccac3efa Ancestors: GetText-edc.18, GetText-edc.20 More cleanup following Nico suggestions. Can't delete bad versions of trunk... =============== Diff against GetText-edc.18 =============== Item was removed: - ----- Method: GetTextExporter>>export: (in category 'exporting') ----- - export: aLanguage - language := aLanguage. - [stream := FileStream forceNewFileNamed: self defaultFileName. - stream lineEndConvention: #lf. - stream converter: UTF8TextConverter new. - self exportHeader. - self exportTranslations. - self exportUntranslated] - ensure: [stream close]! Item was removed: - ----- Method: GetTextExporter>>exportTranslations (in category 'private-translations') ----- - exportTranslations - | keys size | - keys := language translations keys asArray sort. - size := keys size. - ProgressInitiationException - display: 'Exporting translated phrases as a gettext file.' - during: [:bar | 1 - to: size - do: [:index | - self - exportPhrase: (keys at: index) - translation: (language translations - at: (keys at: index)). - bar value: index / size]]! Item was removed: - ----- Method: GetTextExporter>>exportUntranslated (in category 'private-translations') ----- - exportUntranslated - | keys | - keys := language untranslated keys asArray sort. - ProgressInitiationException - display: 'Exporting untranslated phrases as a gettext file.' - at: Sensor cursorPoint - from: 1 - to: keys size - during: [:bar | 1 - to: keys size - do: [:index | - self - exportPhrase: (keys at: index) - translation: ''. - bar value: index]]! Item was removed: - Object subclass: #GetTextExporter2 - instanceVariableNames: 'stream' - classVariableNames: '' - poolDictionaries: '' - category: 'GetText-Editor'! - - !GetTextExporter2 commentStamp: '<historical>' 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: (InternalTranslator newLocaleID: LocaleID current). - - "Export all gettext template and po files." - GetTextExporter2 exportAll. - - "To register a class category as a new domain" - TextDomainManager registerClassCategory: 'Morphic-Books' domain: 'Book'. - "Remove a class category" - TextDomainManager unregisterClassCategory: 'Morphic-Books'.! Item was removed: - ----- Method: GetTextExporter2 class>>coverageStatus (in category 'utilities') ----- - coverageStatus - "self coverageStatus" - | keys diff | - keys := self keys. - diff := InternalTranslator allKnownPhrases keys difference: keys. - Transcript cr; show: 'Detected keywords by GetTextExporter2: ' , keys size printString. - Transcript cr; show: 'All known phrases in InternalTranslator: ' , InternalTranslator allKnownPhrases size printString. - Transcript cr; show: 'Coverage: ' , (keys size / InternalTranslator allKnownPhrases size * 100.0) printString , '%'. - diff inspect! Item was removed: - ----- Method: GetTextExporter2 class>>exportAll (in category 'utilities') ----- - exportAll - "GetTextExporter2 exportAll" - self new exportTemplate. - InternalTranslator availableLanguageLocaleIDs - do: [:each | self new exportTranslator: each translator]! Item was removed: - ----- Method: GetTextExporter2 class>>exportTemplate (in category 'utilities') ----- - exportTemplate - "GetTextExporter2 exportTemplate" - self new exportTemplate.! Item was removed: - ----- Method: GetTextExporter2 class>>keys (in category 'utilities') ----- - keys - | categories | - categories := Dictionary new. - GetTextExporter2 new appendTranslations: categories. - ^ categories values - inject: Set new - into: [:set :next | set addAll: next keys; - yourself]! Item was removed: - ----- Method: GetTextExporter2 class>>listAllHelp (in category 'utilities') ----- - listAllHelp - "self listAllHelp" - | spec specs oCatalog flap flapSelectors allKeys oCatalogHelp flapHelp | - oCatalog := Dictionary new. - Morph withAllSubclasses - do: [:aClass | (aClass class includesSelector: #descriptionForPartsBin) - ifTrue: [spec := aClass descriptionForPartsBin. - oCatalog at: spec formalName put: spec documentation]]. - Morph withAllSubclasses - do: [:aClass | (aClass class includesSelector: #supplementaryPartsDescriptions) - ifTrue: [specs := aClass supplementaryPartsDescriptions. - specs - do: [:each | oCatalog at: each formalName put: each documentation]]]. - flap := Dictionary new. - flapSelectors := #(#defaultsQuadsDefiningPlugInSuppliesFlap #defaultsQuadsDefiningStackToolsFlap #defaultsQuadsDefiningSuppliesFlap #defaultsQuadsDefiningToolsFlap #defaultsQuadsDefiningWidgetsFlap #defaultsQuadsDefiningScriptingFlap ). - flapSelectors - do: [:selector | - specs := Flaps perform: selector. - specs - do: [:each | flap at: each third put: each fourth]]. - allKeys := oCatalog keys intersection: flap keys. - allKeys asArray sort - do: [:each | - oCatalogHelp := oCatalog - at: each - ifAbsent: ['']. - flapHelp := flap - at: each - ifAbsent: ['']. - oCatalogHelp = flapHelp - ifFalse: [Transcript cr; show: 'Name: ' , each. - Transcript cr; show: 'O: ' , oCatalogHelp. - Transcript cr; show: 'F: ' , flapHelp. - Transcript cr. - - ]]! Item was removed: - ----- Method: GetTextExporter2 class>>verifyExport (in category 'utilities') ----- - verifyExport - "Same as #verifyMsgID: but it writes / reads .po files actually" - "GetTextExporter2 verifyExport" - "InternalTranslator removeLocaleID: (LocaleID isoString: 'test-US')" - | src dst localeID | - localeID := LocaleID isoString: 'test-US'. - self verifyMsgID: localeID. - src := localeID translator. - GetTextExporter2 new exportTranslator: src. - InternalTranslator removeLocaleID: localeID. - dst := localeID translator. - GetTextImporter import: dst allDirectory: FileDirectory default! Item was removed: - ----- Method: GetTextExporter2 class>>verifyMsgID: (in category 'utilities') ----- - verifyMsgID: localeID - "GetTextExporter2 verifyMsgID: (LocaleID isoString: 'test-US')" - "InternalTranslator removeLocaleID: (LocaleID isoString: 'test-US')" - "Test gettext keyword extract function without file I/O. - A language named <langName> will be made. And - all possible translated words are shown with extra X charactor like - 'XwordX' in the language." - | src | - InternalTranslator removeLocaleID: localeID. - src := localeID translator. - self keys - do: [:key | src generics at: key put: 'X' , key , 'X']! Item was removed: - ----- Method: GetTextExporter2>>appendStringReceivers:into: (in category 'private') ----- - appendStringReceivers: aSymbol into: domains - | literals references domainName methodReference keywords found | - - found := TranslatedReceiverFinder new stringReceiversWithContext: aSymbol. - found do: [ :assoc | - methodReference := assoc key. - keywords := assoc value. - domainName := self getTextDomainForPackage: - (PackageOrganizer default packageOfMethod: methodReference ifNone: [TextDomainManager defaultDomain]). - literals := domains at: domainName ifAbsentPut: [Dictionary new]. - keywords do: [ :literal | - references := literals at: literal ifAbsentPut: [OrderedCollection new]. - references add: methodReference. - ]. - ]. - ! Item was removed: - ----- Method: GetTextExporter2>>appendTranslations: (in category 'exporting') ----- - appendTranslations: domains - self appendStringReceivers: #translated into: domains. - self appendStringReceivers: #translatedNoop into: domains. - self appendVocabularies: domains. - ! Item was removed: - ----- Method: GetTextExporter2>>appendVocabularies: (in category 'private') ----- - appendVocabularies: domains - | literalsForDomain references domainName methodReference | - - EToyVocabulary allPhrasesWithContextToTranslate do: [ :r | - methodReference := (MethodReference new setStandardClass: (r second) methodSymbol: (r third)). - "domainName := self getTextDomainForPackage: (PackageOrganizer default packageOfMethod: methodReference)". - domainName := 'Etoys-Tiles'. - literalsForDomain := domains at: domainName ifAbsentPut: [Dictionary new]. - r fourth do: [ :literal | - references := literalsForDomain at: literal ifAbsentPut: [OrderedCollection new]. - references add: methodReference. - ]. - ]. - ! Item was removed: - ----- Method: GetTextExporter2>>createExtraInformation (in category 'private') ----- - createExtraInformation - | extras | - extras := OrderedCollection new. - #( - 'Language name as you''d like it to appear in the Languages menu' 'Language-Name' - 'Scale to apply to font size (2 for twice as large)' 'Font-Scale' - 'Directionality of language' 'Language-Direction' - 'Use this if you do not want any of the text to be bolded, for legibility' 'Suppress-Bold' - 'Font to use on a Windows system' 'Win-Font' - 'Font to use on a Mac system' 'Mac-Font' - 'Font to use on a Linux system' 'Linux-Font') pairsDo: [:first :second | - extras add: (Array with: '' with: first with: second). - ]. - ^ extras! Item was removed: - ----- Method: GetTextExporter2>>createHeaders (in category 'private') ----- - createHeaders - | headers | - headers := OrderedCollection new. - headers add: 'Project-Id-Version' -> 'eToys'. - headers add: 'POT-Creation-Date' -> self currentDateAndTime. - headers add: 'PO-Revision-Date' -> self currentDateAndTime. - headers add: 'Last-Translator' -> ''. - headers add: 'Language-Team' -> ''. - headers add: 'MIME-Version' -> '1.0'. - headers add: 'Content-Type' -> ('text/plain; charset=', stream converter class encodingNames first). - headers add: 'Content-Transfer-Encoding' -> '8bit'. - headers add: 'X-Etoys-SystemVersion' -> (SystemVersion current asString). - ^ headers! Item was removed: - ----- Method: GetTextExporter2>>currentDateAndTime (in category 'private') ----- - currentDateAndTime - ^ String - streamContents: [:aStream | - aStream nextPutAll: Date today yyyymmdd; - space. - Time now - print24: true - showSeconds: false - on: aStream. - aStream nextPutAll: '-0000']! Item was removed: - ----- Method: GetTextExporter2>>dirNameCategory:translator: (in category 'exporting') ----- - dirNameCategory: category translator: translator - "Answer a file name for the category. Make one if it is not exist yet. - Make template file name if translator is nil" - "self new dirNameCategory: 'Morphic-Scripting Support' translator: - NaturalLanguageTranslator current" - "self new dirNameCategory: 'Morphic-Scripting Support' translator: nil" - | safeCategory fileName dirName pathName | - safeCategory := category copyReplaceAll: ' ' with: ':='. - fileName := translator - ifNil: [safeCategory , '.pot'] - ifNotNil: [translator localeID posixName , '.po']. - dirName := (safeCategory findTokens: '-') - inject: 'po' - into: [:aString :next | aString , FileDirectory slash , next]. - pathName := dirName , FileDirectory slash , fileName. - (FileDirectory default directoryNamed: dirName) assureExistence. - ^ pathName! Item was removed: - ----- Method: GetTextExporter2>>dirNameDomain:translator: (in category 'exporting') ----- - dirNameDomain: domain translator: translator - "Answer a file name for the domain. Make one if it is not exist yet. - Make template file name if translator is nil" - "self new dirNameDomain: 'etoys' translator: - NaturalLanguageTranslator current" - "self new dirNameDomain: 'etoys' translator: nil" - | fileName dirName pathName | - "safeCategory := category copyReplaceAll: ' ' with: ':='." - fileName := translator - ifNil: [domain , '.pot'] - ifNotNil: [translator localeID posixName , '.po']. - dirName := 'po', FileDirectory slash, domain. - pathName := dirName , FileDirectory slash , fileName. - (FileDirectory default directoryNamed: dirName) assureExistence. - ^ pathName! Item was removed: - ----- Method: GetTextExporter2>>export:translator:domain: (in category 'private') ----- - export: literals translator: translator domain: domainName - | fileName | - "Export a gettext file in a category. literals is a dictionary of keyword -> #(MethodReference...) in the textDomain." - fileName := self dirNameDomain: domainName translator: translator. - [stream := FileStream forceNewFileNamed: fileName. - stream lineEndConvention: #lf. - stream converter: UTF8TextConverter new. - self exportHeader: domainName. - self exportInformation: self createExtraInformation. - self exportBody: literals translator: translator] - ensure: [stream close]! Item was removed: - ----- Method: GetTextExporter2>>exportBody:translator: (in category 'file out') ----- - exportBody: literals translator: translator - "Export a gettext file body. literals is a dictionary of keyword -> - #(MethodReference...) in the textDomain." - "Build {sortKey. comment. msgid } to optimize sorting (getting category is - too slow). - If there are two or more methods for a mgsid, only first method - (alphabetical) is used for sorting." - | sorted msgid sortedMethods category sortKey comment triplets commentUnderLined | - triplets := literals associations - collect: [:assoc | - msgid := assoc key. - sortedMethods := assoc value asArray sort. - category := (Smalltalk at: sortedMethods first classSymbol) category asString. - sortKey := category , ',' , sortedMethods first printString , ',' , msgid. - comment := (sortedMethods - collect: [:each | each actualClass asString , '>>' , each methodSymbol asString]) - inject: category - into: [:result :methodName | result , ',' , methodName]. - "Replace white spaces to := because gettext tool might - replace a space to a new line some times, and it makes - difficult to take a diff." - commentUnderLined := comment copyReplaceAll: ' ' with: ':='. - Array - with: sortKey - with: commentUnderLined - with: msgid]. - "Sort and output the words" - sorted := triplets - sort: [:a :b | a first <= b first]. - sorted - do: [:triplet | - comment := triplet second. - msgid := triplet third. - self exportRecordHeader: comment. - self - exportPhrase: msgid - translation: (self translationFor: msgid in: translator)]! Item was removed: - ----- Method: GetTextExporter2>>exportHeader: (in category 'private') ----- - exportHeader: domainName - | headers | - self exportTag: 'msgid' msg: ''. - self exportTag: 'msgstr' msg: ''. - headers := self createHeaders. - headers add: 'X-Etoys-Domain' -> domainName. - headers do: [:each | self exportHeaderLineKey: each key value: each value]. - stream cr; cr! Item was removed: - ----- Method: GetTextExporter2>>exportHeaderLineKey:value: (in category 'private') ----- - exportHeaderLineKey: keyString value: valueString - stream nextPut: $"; - nextPutAll: keyString; - nextPut: $:; - space; - nextPutAll: valueString; - nextPutAll: '\n'; - nextPut: $"; - cr.! Item was removed: - ----- Method: GetTextExporter2>>exportInformation: (in category 'private') ----- - exportInformation: anOrderedCollection - anOrderedCollection do: [:each | - self exportRecordHeader: each second. - self exportPhrase: each third translation: '']. - stream cr.! Item was removed: - ----- Method: GetTextExporter2>>exportPhrase:translation: (in category 'private') ----- - exportPhrase: phraseString translation: translationString - | normalizedTrans tmp transStartsWithCR transEndsWithCR| - phraseString isEmpty - ifTrue: [^ self]. - self exportTag: 'msgid' msg: phraseString. - translationString size = 0 ifTrue: [ - normalizedTrans := '' - ] ifFalse: [ - transEndsWithCR := translationString last = (Character cr). - phraseString last = (Character cr) ifTrue: [ - transEndsWithCR ifTrue: [ - normalizedTrans := translationString - ] ifFalse: [ - normalizedTrans := translationString , String cr - ] - ] ifFalse: [ - transEndsWithCR ifTrue: [ - normalizedTrans := translationString allButLast - ] ifFalse: [ - normalizedTrans := translationString - ] - ]. - transStartsWithCR := normalizedTrans first = (Character cr). - phraseString first = (Character cr) ifTrue: [ - transStartsWithCR ifFalse: [ - tmp := (Character cr asString) , normalizedTrans. - normalizedTrans := tmp. - ] - ] ifFalse: [ - transStartsWithCR ifTrue: [ - normalizedTrans := normalizedTrans allButFirst - ] - ] - ]. - self exportTag: 'msgstr' msg: normalizedTrans. - stream cr! Item was removed: - ----- Method: GetTextExporter2>>exportRecordHeader: (in category 'private') ----- - exportRecordHeader: context - stream - nextPutAll: '#: '; - nextPutAll: context; - cr.! Item was removed: - ----- Method: GetTextExporter2>>exportTag:msg: (in category 'private') ----- - exportTag: tag msg: aString - | pos end line | - (aString indexOf: Character cr) - = 0 - ifTrue: [self exportTag: tag singleLine: aString] - ifFalse: [self exportTag: tag singleLine: ''. - pos := 1. - end := 0. - [end < aString size] - whileTrue: [end := aString indexOf: Character cr startingAt: pos. - end = 0 - ifTrue: [end := aString size]. - line := aString copyFrom: pos to: end. - stream nextPut: $"; - - nextPutAll: (self formatString: line); - nextPut: $"; - cr. - pos := end + 1]]! Item was removed: - ----- Method: GetTextExporter2>>exportTag:singleLine: (in category 'private') ----- - exportTag: tag singleLine: aString - stream nextPutAll: tag. - stream space. - stream nextPut: $". - stream - nextPutAll: (self formatString: aString). - stream nextPut: $". - stream cr! Item was removed: - ----- Method: GetTextExporter2>>exportTemplate (in category 'exporting') ----- - exportTemplate - "GetTextExporter2 new exportTemplate" - self exportTranslator: nil! Item was removed: - ----- Method: GetTextExporter2>>exportTranslator: (in category 'exporting') ----- - exportTranslator: translator - "Export translation files. the file extention is 'po', or 'pot' if translator is nil " - "GetTextExporter2 new exportTranslator: NaturalLanguageTranslator current " - | domains | - domains := Dictionary new. - self appendTranslations: domains. - domains - keysAndValuesDo: [:domainName :value | - self - export: value - translator: translator - domain: domainName]! Item was removed: - ----- Method: GetTextExporter2>>formatReplacements (in category 'private') ----- - formatReplacements - | replacements | - replacements := OrderedCollection new. - replacements add: '\' -> '\\'. - replacements add: String cr -> '\n'. - replacements add: String tab -> '\t'. - replacements add: '"' -> '\"'. - ^ replacements! Item was removed: - ----- Method: GetTextExporter2>>formatString: (in category 'private') ----- - formatString: aString - | result | - result := aString. - self formatReplacements - do: [:each | result := result copyReplaceAll: each key with: each value]. - ^ result! Item was removed: - ----- Method: GetTextExporter2>>getTextDomainForPackage: (in category 'as yet unclassified') ----- - getTextDomainForPackage: aPackageInfo - ^TextDomainManager domainForPackage: aPackageInfo! Item was removed: - ----- Method: GetTextExporter2>>stream (in category 'accessing') ----- - stream - ^ stream! Item was removed: - ----- Method: GetTextExporter2>>stream: (in category 'accessing') ----- - stream: aStream - stream := aStream! Item was removed: - ----- Method: GetTextExporter2>>translationFor:in: (in category 'private') ----- - translationFor: aKey in: translator - translator ifNil: [^'']. - translator translations at: aKey ifPresent: [:s | ^s]. - "If we have old camelCase translations, make space-separated words" - translator translations at: aKey toCamelCase ifPresent: [:s | - (s includes: Character space) ifTrue: [^s]. - ^s fromCamelCase]. - ^''! Item was removed: - Object subclass: #ISOLanguageDefinition - instanceVariableNames: 'iso3 iso2 iso3Alternate language' - classVariableNames: 'ISO2Countries ISO2Table ISO3Countries ISO3Table' - poolDictionaries: '' - category: 'GetText-Localization'! Item was removed: - ----- Method: ISOLanguageDefinition class>>buildIso3166CodesTables (in category 'private') ----- - buildIso3166CodesTables - "ISOLanguageDefinition buildIso3166CodesTables" - | rawdata stream country isoa2 isoa3 unNumeric macName macCode windowsName windowsCode empty table | - rawdata := self iso3166Codes. - table := OrderedCollection new: 200. - stream := rawdata readStream. - empty := 160 asCharacter asString. - [stream atEnd] whileFalse: - [country := stream nextLine. - isoa2 := stream nextLine. - isoa3 := stream nextLine. - unNumeric := stream nextLine. - windowsName := stream nextLine. - windowsName = empty ifTrue: [windowsName := nil]. - windowsCode := stream nextLine. - windowsCode = empty ifTrue: [windowsCode := nil]. - macName := stream nextLine. - macName = empty ifTrue: [macName := nil]. - macCode := stream nextLine. - macCode = empty ifTrue: [macCode := nil]. - table add: { country. isoa2. isoa3. unNumeric. windowsName. windowsCode. macName. macCode. }]. - ^table! Item was removed: - ----- Method: ISOLanguageDefinition class>>extraCountryDefinitions (in category 'private') ----- - extraCountryDefinitions - ^{ - {'Kids'. 'KIDS'. 'KIDS'.}. - }! Item was removed: - ----- Method: ISOLanguageDefinition class>>extraISO3Definitions (in category 'private') ----- - extraISO3Definitions - - ^self readISOLanguagesFrom: 'jpk Japanese (Kids) - ' readStream! Item was removed: - ----- Method: ISOLanguageDefinition class>>initISO3LanguageTable (in category 'private') ----- - initISO3LanguageTable - "ISOLanguageDefinition initIso3LanguageTable" - - | table | - table := ISOLanguageDefinition readISOLanguagesFrom: ISOLanguageDefinition isoLanguages readStream. - table addAll: self extraISO3Definitions. - ^table! Item was removed: - ----- Method: ISOLanguageDefinition class>>initISOCountries (in category 'private') ----- - initISOCountries - "ISOLanguageDefinition initISOCountries" - | iso3166Table | - iso3166Table := ISOLanguageDefinition buildIso3166CodesTables. - ISO2Countries := Dictionary new. - ISO3Countries := Dictionary new. - iso3166Table do: [:entry | - ISO2Countries at: (entry at: 2) put: (entry at: 1). - ISO3Countries at: (entry at: 3) put: (entry at: 1)]. - self extraCountryDefinitions do: [:entry | - ISO2Countries at: (entry at: 2) put: (entry at: 1). - ISO3Countries at: (entry at: 3) put: (entry at: 1)]! Item was removed: - ----- Method: ISOLanguageDefinition class>>initialize (in category 'class initialization') ----- - initialize - "ISOLanguageDefinition initialize" - - ISO3Table := nil. - ISO2Table := nil! Item was removed: - ----- Method: ISOLanguageDefinition class>>iso2Countries (in category 'private') ----- - iso2Countries - "ISOLanguageDefinition iso2Countries" - "ISO2Countries := nil. ISO3Countries := nil" - - ISO2Countries ifNil: [self initISOCountries]. - ^ISO2Countries! Item was removed: - ----- Method: ISOLanguageDefinition class>>iso2LanguageDefinition: (in category 'accessing') ----- - iso2LanguageDefinition: aString - ^self iso2LanguageTable at: aString! Item was removed: - ----- Method: ISOLanguageDefinition class>>iso2LanguageTable (in category 'private') ----- - iso2LanguageTable - "ISOLanguageDefinition iso2LanguageTable" - - ISO2Table ifNotNil: [^ISO2Table]. - ISO2Table := Dictionary new: self iso3LanguageTable basicSize. - self iso3LanguageTable do: [:entry | - ISO2Table at: entry iso2 put: entry]. - ^ISO2Table! Item was removed: - ----- Method: ISOLanguageDefinition class>>iso3166Codes (in category 'private') ----- - iso3166Codes - "
http://www.unicode.org/onlinedat/countries.html
" - - ^'LAND ISLANDS - AX - - - - - - - AFGHANISTAN - AF - AFG - 004 - - - - - ALBANIA - AL - ALB - 008 - CTRY_ALBANIA - 355 - - - ALGERIA - DZ - DZA - 012 - CTRY_ALGERIA - 213 - verArabic - 16 - AMERICAN SAMOA - AS - ASM - 016 - - - - - ANDORRA - AD - AND - 020 - - - - - ANGOLA - AO - AGO - 024 - - - - - ANGUILLA - AI - AIA - 660 - - - - - ANTARCTICA - AQ - ATA - 010 - - - - - ANTIGUA AND BARBUDA - AG - ATG - 028 - - - - - ARGENTINA - AR - ARG - 032 - CTRY_ARGENTINA - 54 - - - ARMENIA - AM - ARM - 051 - CTRY_ARMENIA - 374 - verArmenian - 84 - ARUBA - AW - ABW - 533 - - - - - AUSTRALIA - AU - AUS - 036 - CTRY_AUSTRALIA - 61 - verAustralia - 15 - AUSTRIA - AT - AUT - 040 - CTRY_AUSTRIA - 43 - verAustria - 92 - AZERBAIJAN - AZ - AZE - 031 - CTRY_AZERBAIJAN - 994 - - - BAHAMAS - BS - BHS - 044 - - - - - BAHRAIN - BH - BHR - 048 - CTRY_BAHRAIN - 973 - - - BANGLADESH - BD - BGD - 050 - - - verBengali - 60 - BARBADOS - BB - BRB - 052 - - - - - BELARUS - BY - BLR - 112 - CTRY_BELARUS - 375 - - - BELGIUM - BE - BEL - 056 - CTRY_BELGIUM - 32 - verFrBelgium, verFlemish - 98 - BELIZE - BZ - BLZ - 084 - CTRY_BELIZE - 501 - - - BENIN - BJ - BEN - 204 - - - - - BERMUDA - BM - BMU - 060 - - - - - BHUTAN - BT - BTN - 064 - - - verBhutan - 83 - BOLIVIA - BO - BOL - 068 - CTRY_BOLIVIA - 591 - - - BOSNIA AND HERZEGOVINA - BA - BIH - 070 - - - - - BOTSWANA - BW - BWA - 072 - - - - - BOUVET ISLAND - BV - BVT - 074 - - - - - BRAZIL - BR - BRA - 076 - CTRY_BRAZIL - 55 - verBrazil - 71 - BRITISH INDIAN OCEAN TERRITORY - IO - IOT - 086 - - - - - BRUNEI DARUSSALAM - BN - BRN - 096 - CTRY_BRUNEI_DARUSSALAM - 673 - - - BULGARIA - BG - BGR - 100 - CTRY_BULGARIA - 359 - verBulgaria - 72 - BURKINA FASO - BF - BFA - 854 - - - - - BURUNDI - BI - BDI - 108 - - - - - CAMBODIA - KH - KHM - 116 - - - - - CAMEROON - CM - CMR - 120 - - - - - CANADA - CA - CAN - 124 - CTRY_CANADA - 2 - verFrCanada, verEndCanada - 82 - CAPE VERDE - CV - CPV - 132 - - - - - CAYMAN ISLANDS - KY - CYM - 136 - - - - - CENTRAL AFRICAN REPUBLIC - CF - CAF - 140 - - - - - CHAD - TD - TCD - 148 - - - - - CHILE - CL - CHL - 152 - CTRY_CHILE - 56 - - - CHINA - CN - CHN - 156 - CTRY_PRCHINA - 86 - verChina - 52 - CHRISTMAS ISLAND - CX - CXR - 162 - - - - - COCOS (KEELING) ISLANDS - CC - CCK - 166 - - - - - COLOMBIA - CO - COL - 170 - CTRY_COLOMBIA - 57 - - - COMOROS - KM - COM - 174 - - - - - CONGO - CG - COG - 178 - - - - - CONGO, THE DEMOCRATIC REPUBLIC OF THE - CD - - - - - - - COOK ISLANDS - CK - COK - 184 - - - - - COSTA RICA - CR - CRI - 188 - CTRY_COSTA_RICA - 506 - - - COTE D''IVOIRE - CI - CIV - 384 - - - - - CROATIA (local name: Hrvatska) - HR - HRV - 191 - CTRY_CROATIA - 385 - verCroatia, verYugoCroatian - 68 (c), 25 (y) - CUBA - CU - CUB - 192 - - - - - CYPRUS - CY - CYP - 196 - - - verCyprus - 23 - CZECH REPUBLIC - CZ - CZE - 203 - CTRY_CZECH - 420 - verCzech - 56 - DENMARK - DK - DNK - 208 - CTRY_DENMARK - 45 - verDenmark(da), verFaeroeIsl(fo) - 9(da), 47(fo) - DJIBOUTI - DJ - DJI - 262 - - - - - DOMINICA - DM - DMA - 212 - - - - - DOMINICAN REPUBLIC - DO - DOM - 214 - CTRY_DOMINICAN_REPUBLIC - 1 - - - EAST TIMOR - TL - TLS - 626 - - - - - ECUADOR - EC - ECU - 218 - CTRY_ECUADOR - 593 - - - EGYPT - EG - EGY - 818 - CTRY_EGYPT - 20 - verArabic - 16 - EL SALVADOR - SV - SLV - 222 - CTRY_EL_SALVADOR - 503 - - - EQUATORIAL GUINEA - GQ - GNQ - 226 - - - - - ERITREA - ER - ERI - 232 - - - - - ESTONIA - EE - EST - 233 - CTRY_ESTONIA - 372 - verEstonia - 44 - ETHIOPIA - ET - ETH - 210 - - - - - FALKLAND ISLANDS (MALVINAS) - FK - FLK - 238 - - - - - FAROE ISLANDS - FO - FRO - 234 - CTRY_FAEROE_ISLANDS - 298 - - - FIJI - FJ - FJI - 242 - - - - - FINLAND - FI - FIN - 246 - CTRY_FINLAND - 358 - verFinland - 17 - FRANCE - FR - FRA - 250 - CTRY_FRANCE - 33 - verFrance - 1 - FRANCE, METROPOLITAN - FX - FXX - 249 - - - - - FRENCH GUIANA - GF - GUF - 254 - - - - - FRENCH POLYNESIA - PF - PYF - 258 - - - - - FRENCH SOUTHERN TERRITORIES - TF - ATF - 260 - - - - - GABON - GA - GAB - 266 - - - - - GAMBIA - GM - GMB - 270 - - - - - GEORGIA - GE - GEO - 268 - CTRY_GEORGIA - 995 - verGeorgian - 85 - GERMANY - DE - DEU - 276 - CTRY_GERMANY - 49 - verGermany - 3 - GHANA - GH - GHA - 288 - - - - - GIBRALTAR - GI - GIB - 292 - - - - - GREECE - GR - GRC - 300 - CTRY_GREECE - 30 - verGreece, verGreecePoly - 20, 40 - GREENLAND - GL - GRL - 304 - - - verGreenland - 107 - GRENADA - GD - GRD - 308 - - - - - GUADELOUPE - GP - GLP - 312 - - - - - GUAM - GU - GUM - 316 - - - - - GUATEMALA - GT - GTM - 320 - CTRY_GUATEMALA - 502 - - - GUINEA - GN - GIN - 324 - - - - - GUINEA-BISSAU - GW - GNB - 624 - - - - - GUYANA - GY - GUY - 328 - - - - - HAITI - HT - HTI - 332 - - - - - HEARD ISLAND & MCDONALD ISLANDS - HM - HMD - 334 - - - - - HONDURAS - HN - HND - 340 - CTRY_HONDURAS - 504 - - - HONG KONG - HK - HKG - 344 - CTRY_HONG_KONG - 852 - - - HUNGARY - HU - HUN - 348 - CTRY_HUNGARY - 36 - verHungary - 43 - ICELAND - IS - ISL - 352 - CTRY_ICELAND - 354 - verIceland - 21 - INDIA - IN - IND - 356 - CTRY_INDIA - 91 - verIndiaHindi(hi) - 33 - INDONESIA - ID - IDN - 360 - CTRY_INDONESIA - 62 - - - IRAN, ISLAMIC REPUBLIC OF - IR - IRN - 364 - CTRY_IRAN - 981 - verIran - 48 - IRAQ - IQ - IRQ - 368 - CTRY_IRAQ - 964 - verArabic - 16 - IRELAND - IE - IRL - 372 - CTRY_IRELAND - 353 - verIreland - 50 - ISRAEL - IL - ISR - 376 - CTRY_ISRAEL - 972 - verIsrael - 13 - ITALY - IT - ITA - 380 - CTRY_ITALY - 39 - verItaly - 4 - JAMAICA - JM - JAM - 388 - CTRY_JAMAICA - 1 - - - JAPAN - JP - JPN - 392 - CTRY_JAPAN - 81 - verJapan - 14 - JORDAN - JO - JOR - 400 - CTRY_JORDAN - 962 - - - KAZAKHSTAN - KZ - KAZ - 398 - CTRY_KAZAKSTAN - 7 - - - KENYA - KE - KEN - 404 - CTRY_KENYA - 254 - - - KIRIBATI - KI - KIR - 296 - - - - - KOREA, DEMOCRATIC PEOPLE''S REPUBLIC OF - KP - PRK - 408 - - - verKorea - 51 - KOREA, REPUBLIC OF - KR - KOR - 410 - CTRY_SOUTH_KOREA - 82 - verKorea - - KUWAIT - KW - KWT - 414 - CTRY_KUWAIT - 965 - - - KYRGYZSTAN - KG - KGZ - 417 - CTRY_KYRGYZSTAN - 996 - - - LAO PEOPLE''S DEMOCRATIC REPUBLIC - LA - LAO - 418 - - - - - LATVIA - LV - LVA - 428 - CTRY_LATVIA - 371 - verLatvia - 45 - LEBANON - LB - LBN - 422 - CTRY_LEBANON - 961 - - - LESOTHO - LS - LSO - 426 - - - - - LIBERIA - LR - LBR - 430 - - - - - LIBYAN ARAB JAMAHIRIYA - LY - LBY - 434 - CTRY_LIBYA - 218 - verArabic - 16 - LIECHTENSTEIN - LI - LIE - 438 - CTRY_LIECHTENSTEIN - 41 - - - LITHUANIA - LT - LTU - 440 - CTRY_LITHUANIA - 370 - verLithuania - 41 - LUXEMBOURG - LU - LUX - 442 - CTRY_LUXEMBOURG - 352 - verFrBelgiumLux - 6 - MACAU - MO - MAC - 446 - CTRY_MACAU - 853 - - - MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF - MK - MKD - 807 - CTRY_MACEDONIA - 389 - verMacedonian - - MADAGASCAR - MG - MDG - 450 - - - - - MALAWI - MW - MWI - 454 - - - - - MALAYSIA - MY - MYS - 458 - CTRY_MALAYSIA - 60 - - - MALDIVES - MV - MDV - 462 - CTRY_MALDIVES - 960 - - - MALI - ML - MLI - 466 - - - - - MALTA - MT - MLT - 470 - - - verMalta - 22 - MARSHALL ISLANDS - MH - MHL - 584 - - - - - MARTINIQUE - MQ - MTQ - 474 - - - - - MAURITANIA - MR - MRT - 478 - - - - - MAURITIUS - MU - MUS - 480 - - - - - MAYOTTE - YT - MYT - 175 - - - - - MEXICO - MX - MEX - 484 - CTRY_MEXICO - 52 - - - MICRONESIA, FEDERATED STATES OF - FM - FSM - 583 - - - - - MOLDOVA, REPUBLIC OF - MD - MDA - 498 - - - - - MONACO - MC - MCO - 492 - CTRY_MONACO - 33 - - - MONGOLIA - MN - MNG - 496 - CTRY_MONGOLIA - 976 - - - MONTSERRAT - MS - MSR - 500 - - - - - MOROCCO - MA - MAR - 504 - CTRY_MOROCCO - 212 - verArabic - 16 - MOZAMBIQUE - MZ - MOZ - 508 - - - - - MYANMAR - MM - MMR - 104 - - - - - NAMIBIA - NA - NAM - 516 - - - - - NAURU - NR - NRU - 520 - - - - - NEPAL - NP - NPL - 524 - - - verNepal - 106 - NETHERLANDS - NL - NLD - 528 - CTRY_NETHERLANDS - 31 - verNetherlands - 5 - NETHERLANDS ANTILLES - AN - ANT - 530 - - - - - NEW CALEDONIA - NC - NCL - 540 - - - - - NEW ZEALAND - NZ - NZL - 554 - CTRY_NEW_ZEALAND - 64 - - - NICARAGUA - NI - NIC - 558 - CTRY_NICARAGUA - 505 - - - NIGER - NE - NER - 562 - - - - - NIGERIA - NG - NGA - 566 - - - - - NIUE - NU - NIU - 570 - - - - - NORFOLK ISLAND - NF - NFK - 574 - - - - - NORTHERN MARIANA ISLANDS - MP - MNP - 580 - - - - - NORWAY - NO - NOR - 578 - CTRY_NORWAY - 47 - verNorway - 12 - OMAN - OM - OMN - 512 - CTRY_OMAN - 968 - - - PAKISTAN - PK - PAK - 586 - CTRY_PAKISTAN - 92 - verPakistanUrdu, verPunjabi - 34 (U), 95 (P) - PALAU - PW - PLW - 585 - - - - - PANAMA - PA - PAN - 591 - CTRY_PANAMA - 507 - - - PALESTINIAN TERRITORY, OCCUPIED - PS - - - - - - - PAPUA NEW GUINEA - PG - PNG - 598 - - - - - PARAGUAY - PY - PRY - 600 - CTRY_PARAGUAY - 595 - - - PERU - PE - PER - 604 - CTRY_PERU - 51 - - - PHILIPPINES - PH - PHL - 608 - CTRY_PHILIPPINES - 63 - - - PITCAIRN - PN - PCN - 612 - - - - - POLAND - PL - POL - 616 - CTRY_POLAND - 48 - verPoland - 42 - PORTUGAL - PT - PRT - 620 - CTRY_PORTUGAL - 351 - verPortugal - 10 - PUERTO RICO - PR - PRI - 630 - CTRY_PUERTO_RICO - 1 - - - QATAR - QA - QAT - 634 - CTRY_QATAR - 974 - - - REUNION - RE - REU - 638 - - - - - ROMANIA - RO - ROU* - 642 - CTRY_ROMANIA - 40 - verRomania - 39 - RUSSIAN FEDERATION - RU - RUS - 643 - CTRY_RUSSIA - 7 - verRussia - 49 - RWANDA - RW - RWA - 646 - - - - - SAINT KITTS AND NEVIS - KN - KNA - 659 - - - - - SAINT LUCIA - LC - LCA - 662 - - - - - SAINT VINCENT AND THE GRENADINES - VC - VCT - 670 - - - - - SAMOA - WS - WSM - 882 - - - - - SAN MARINO - SM - SMR - 674 - - - - - SAO TOME AND PRINCIPE - ST - STP - 678 - - - - - SAUDI ARABIA - SA - SAU - 682 - CTRY_SAUDI_ARABIA - 966 - verArabic - 16 - SENEGAL - SN - SEN - 686 - - - - - SERBIA AND MONTENEGRO - CS - - - CTRY_SERBIA - 381 - - - SEYCHELLES - SC - SYC - 690 - - - - - SIERRA LEONE - SL - SLE - 694 - - - - - SINGAPORE - SG - SGP - 702 - CTRY_SINGAPORE - 65 - verSingapore - 100 - SLOVAKIA (Slovak Republic) - SK - SVK - 703 - CTRY_SLOVAK - 421 - verSlovak - 57 - SLOVENIA - SI - SVN - 705 - CTRY_SLOVENIA - 386 - verSlovenian - 66 - SOLOMON ISLANDS - SB - SLB - 90 - - - - - SOMALIA - SO - SOM - 706 - - - - - SOUTH AFRICA - ZA - ZAF - 710 - CTRY_SOUTH_AFRICA - 27 - - - SOUTH GEORGIA AND THE SOUTH SANDWICH ISLANDS - GS - - - - - - - SPAIN - ES - ESP - 724 - CTRY_SPAIN - 34 - verSpain - 8 - SRI LANKA - LK - LKA - 144 - - - - - SAINT HELENA - SH - SHN - 654 - - - - - SAINT PIERRE AND MIQUELON - PM - SPM - 666 - - - - - SUDAN - SD - SDN - 736 - - - - - SURINAME - SR - SUR - 740 - - - - - SVALBARD AND JAN MAYEN ISLANDS - SJ - SJM - 744 - - - - - SWAZILAND - SZ - SWZ - 748 - - - - - SWEDEN - SE - SWE - 752 - CTRY_SWEDEN - 46 - verSweden - 7 - SWITZERLAND - CH - CHE - 756 - CTRY_SWITZERLAND - 41 - verFrSwiss(fr), verGrSwiss(de) - 18(fr), 19(de) - SYRIAN ARAB REPUBLIC - SY - SYR - 760 - CTRY_SYRIA - 963 - - - TAIWAN, PROVINCE OF CHINA - TW - TWN - 158 - CTRY_TAIWAN - 886 - verTaiwan - 53 - TAJIKISTAN - TJ - TJK - 762 - - - - - TANZANIA, UNITED REPUBLIC OF - TZ - TZA - 834 - - - - - TATARSTAN - - - - CTRY_TATARSTAN - 7 - - - THAILAND - TH - THA - 764 - CTRY_THAILAND - 66 - verThailand - 54 - TIMOR-LESTE - TL - - - - - - - TOGO - TG - TGO - 768 - - - - - TOKELAU - TK - TKL - 772 - - - - - TONGA - TO - TON - 776 - - - verTonga - 88 - TRINIDAD AND TOBAGO - TT - TTO - 780 - CTRY_TRINIDAD_Y_TOBAGO - 1 - - - TUNISIA - TN - TUN - 788 - CTRY_TUNISIA - 216 - verArabic - 16 - TURKEY - TR - TUR - 792 - CTRY_TURKEY - 90 - verTurkey - 24 - TURKMENISTAN - TM - TKM - 795 - - - - - TURKS AND CAICOS ISLANDS - TC - TCA - 796 - - - - - TUVALU - TV - TUV - 798 - - - - - UGANDA - UG - UGA - 800 - - - - - UKRAINE - UA - UKR - 804 - CTRY_UKRAINE - 380 - verUkraine - 62 - UNITED ARAB EMIRATES - AE - ARE - 784 - CTRY_UAE - 971 - - - UNITED KINGDOM - GB - GBR - 826 - CTRY_UNITED_KINGDOM - 44 - verBritain - 2 - UNITED STATES - US - USA - 840 - CTRY_UNITED_STATES - 1 - verUS - 0 - UNITED STATES MINOR OUTLYING ISLANDS - UM - UMI - 581 - - - - - URUGUAY - UY - URY - 858 - CTRY_URUGUAY - 598 - - - UZBEKISTAN - UZ - UZB - 860 - CTRY_UZBEKISTAN - 7 - - - VANUATU - VU - VUT - 548 - - - - - VATICAN CITY STATE (HOLY SEE) - VA - VAT - 336 - - - - - VENEZUELA - VE - VEN - 862 - CTRY_VENEZUELA - 58 - - - VIET NAM - VN - VNM - 704 - CTRY_VIET_NAM - 84 - verVietnam - - VIRGIN ISLANDS (BRITISH) - VG - VGB - 92 - - - - - VIRGIN ISLANDS (U.S.) - VI - VIR - 850 - - - - - WALLIS AND FUTUNA ISLANDS - WF - WLF - 876 - - - - - WESTERN SAHARA - EH - ESH - 732 - - - - - YEMEN - YE - YEM - 887 - CTRY_YEMEN - 967 - - - YUGOSLAVIA - YU - YUG - 891 - - - - - ZAIRE - ZR - ZAR - 180 - - - - - ZAMBIA - ZM - ZMB - 894 - - - - - ZIMBABWE - ZW - ZWE - 716 - CTRY_ZIMBABWE - 263 - - - '! Item was removed: - ----- Method: ISOLanguageDefinition class>>iso3Countries (in category 'private') ----- - iso3Countries - "ISOLanguageDefinition iso3Countries" - "ISO2Countries := nil. ISO3Countries := nil" - - ISO3Countries ifNil: [self initISOCountries]. - ^ISO3Countries! Item was removed: - ----- Method: ISOLanguageDefinition class>>iso3LanguageDefinition: (in category 'accessing') ----- - iso3LanguageDefinition: aString - ^self iso3LanguageTable at: aString! Item was removed: - ----- Method: ISOLanguageDefinition class>>iso3LanguageTable (in category 'private') ----- - iso3LanguageTable - "ISOLanguageDefinition iso3LanguageTable" - - ^ISO3Table ifNil: [ISO3Table := self initISO3LanguageTable]! Item was removed: - ----- Method: ISOLanguageDefinition class>>isoLanguages (in category 'private') ----- - isoLanguages - "ISO 639: 3-letter codes" - ^'aar aa Afar - abk ab Abkhazian - ace Achinese - ach Acoli - ada Adangme - ady Adyghe; Adygei - afa Afro-Asiatic languages - afh Afrihili - afr af Afrikaans - ain Ainu - aka ak Akan - akk Akkadian - alb/sqi sq Albanian - ale Aleut - alg Algonquian languages - alt Southern Altai - amh am Amharic - ang English, Old (ca.450-1100) - anp Angika - apa Apache languages - ara ar Arabic - arc Official Aramaic (700-300 BCE); Imperial Aramaic (700-300 BCE) - arg an Aragonese - arm/hye hy Armenian - arn Mapudungun; Mapuche - arp Arapaho - art Artificial languages - arw Arawak - asm as Assamese - ast Asturian; Bable; Leonese; Asturleonese - ath Athapascan languages - aus Australian languages - ava av Avaric - ave ae Avestan - awa Awadhi - aym ay Aymara - aze az Azerbaijani - bad Banda languages - bai Bamileke languages - bak ba Bashkir - bal Baluchi - bam bm Bambara - ban Balinese - baq/eus eu Basque - bas Basa - bat Baltic languages - bej Beja; Bedawiyet - bel be Belarusian - bem Bemba - ben bn Bengali - ber Berber languages) - bho Bhojpuri - bih bh Bihari - bik Bikol - bin Bini; Edo - bis bi Bislama - bla Siksika - bnt Bantu languages - bos bs Bosnian - bra Braj - bre br Breton - btk Batak languages - bua Buriat - bug Buginese - bul bg Bulgarian - bur/mya my Burmese - byn Blin; Bilin - cad Caddo - cai Central American Indian languages - car Galibi Carib - cat ca Catalan; Valencian - cau Caucasian languages - ceb Cebuano - cel Celtic languages - cha ch Chamorro - chb Chibcha - che ce Chechen - chg Chagatai - chi/zho zh Chinese - chk Chuukese - chm Mari - chn Chinook jargon - cho Choctaw - chp Chipewyan; Dene Suline - chr Cherokee - chu cu Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic - chv cv Chuvash - chy Cheyenne - cmc Chamic languages - cop Coptic - cor kw Cornish - cos co Corsican - cpe Creoles and pidgins, English based - cpf Creoles and pidgins, French-based - cpp Creoles and pidgins, Portuguese-based - cre cr Cree - crh Crimean Tatar; Crimean Turkish - crp Creoles and pidgins - csb Kashubian - cus Cushitic languages - cze/ces cs Czech - dak Dakota - dan da Danish - dar Dargwa - day Land Dayak languages - del Delaware - den Slave (Athapascan) - dgr Dogrib - din Dinka - div dv Divehi; Dhivehi; Maldivian - doi Dogri - dra Dravidian languages - dsb Lower Sorbian - dua Duala - dum Dutch, Middle (ca.1050-1350) - dut/nld nl Dutch; Flemish - dyu Dyula - dzo dz Dzongkha - efi Efik - egy Egyptian (Ancient) - eka Ekajuk - elx Elamite - eng en English - enm English, Middle (1100-1500) - epo eo Esperanto - est et Estonian - ewe ee Ewe - ewo Ewondo - fan Fang - fao fo Faroese - fat Fanti - fij fj Fijian - fil Filipino; Pilipino - fin fi Finnish - fiu Finno-Ugrian languages) - fon Fon - fre/fra fr French - frm French, Middle (ca.1400-1600) - fro French, Old (842-ca.1400) - frr Northern Frisian - frs Eastern Frisian - fry fy Western Frisian - ful ff Fulah - fur Friulian - gaa Ga - gay Gayo - gba Gbaya - gem Germanic languages - geo/kat ka Georgian - ger/deu de German - gez Geez - gil Gilbertese - gla gd Gaelic; Scottish Gaelic - gle ga Irish - glg gl Galician - glv gv Manx - gmh German, Middle High (ca.1050-1500) - goh German, Old High (ca.750-1050) - gon Gondi - gor Gorontalo - got Gothic - grb Grebo - grc Greek, Ancient (to 1453) - gre/ell el Greek, Modern (1453-) - grn gn Guarani - gsw Swiss German; Alemannic; Alsatian - guj gu Gujarati - gwi Gwich''in - hai Haida - hat ht Haitian; Haitian Creole - hau ha Hausa - haw Hawaiian - heb he Hebrew - her hz Herero - hil Hiligaynon - him Himachali - hin hi Hindi - hit Hittite - hmn Hmong - hmo ho Hiri Motu - hrv hr Croatian - hsb Upper Sorbian - hun hu Hungarian - hup Hupa - iba Iban - ibo ig Igbo - ice/isl is Icelandic - ido io Ido - iii ii Sichuan Yi; Nuosu - ijo Ijo languages - iku iu Inuktitut - ile ie Interlingue; Occidental - ilo Iloko - ina ia Interlingua (International Auxiliary Language Association) - inc Indic languages - ind id Indonesian - ine Indo-European languages - inh Ingush - ipk ik Inupiaq - ira Iranian languages - iro Iroquoian languages - ita it Italian - jav jv Javanese - jbo Lojban - jpn ja Japanese - jpr Judeo-Persian - jrb Judeo-Arabic - kaa Kara-Kalpak - kab Kabyle - kac Kachin; Jingpho - kal kl Kalaallisut; Greenlandic - kam Kamba - kan kn Kannada - kar Karen languages - kas ks Kashmiri - kau kr Kanuri - kaw Kawi - kaz kk Kazakh - kbd Kabardian - kha Khasi - khi Khoisan languages - khm km Central Khmer - kho Khotanese; Sakan - kik ki Kikuyu; Gikuyu - kin rw Kinyarwanda - kir ky Kirghiz; Kyrgyz - kmb Kimbundu - kok Konkani - kom kv Komi - kon kg Kongo - kor ko Korean - kos Kosraean - kpe Kpelle - krc Karachay-Balkar - krl Karelian - kro Kru languages - kru Kurukh - kua kj Kuanyama; Kwanyama - kum Kumyk - kur ku Kurdish - kut Kutenai - lad Ladino - lah Lahnda - lam Lamba - lao lo Lao - lat la Latin - lav lv Latvian - lez Lezghian - lim li Limburgan; Limburger; Limburgish - lin ln Lingala - lit lt Lithuanian - lol Mongo - loz Lozi - ltz lb Luxembourgish; Letzeburgesch - lua Luba-Lulua - lub lu Luba-Katanga - lug lg Ganda - lui Luiseno - lun Lunda - luo Luo (Kenya and Tanzania) - lus Lushai - mac/mkd mk Macedonian - mad Madurese - mag Magahi - mah mh Marshallese - mai Maithili - mak Makasar - mal ml Malayalam - man Mandingo - mao/mri mi Maori - map Austronesian languages - mar mr Marathi - mas Masai - may/msa ms Malay - mdf Moksha - mdr Mandar - men Mende - mga Irish, Middle (900-1200) - mic Mi''kmaq; Micmac - min Minangkabau - mis Uncoded languages - mkh Mon-Khmer languages - mlg mg Malagasy - mlt mt Maltese - mnc Manchu - mni Manipuri - mno Manobo languages - moh Mohawk - mon mn Mongolian - mos Mossi - mul Multiple languages - mun Munda languages - mus Creek - mwl Mirandese - mwr Marwari - myn Mayan languages - myv Erzya - nah Nahuatl languages - nai North American Indian languages - nap Neapolitan - nau na Nauru - nav nv Navajo; Navaho - nbl nr Ndebele, South; South Ndebele - nde nd Ndebele, North; North Ndebele - ndo ng Ndonga - nds Low German; Low Saxon; German, Low; Saxon, Low - nep ne Nepali - new Nepal Bhasa; Newari - nia Nias - nic Niger-Kordofanian languages - niu Niuean - nno nn Norwegian Nynorsk; Nynorsk, Norwegian - nob nb Bokmal, Norwegian; Norwegian Bokmal - nog Nogai - non Norse, Old - nor no Norwegian - nqo N''Ko - nso Pedi; Sepedi; Northern Sotho - nub Nubian languages - nwc Classical Newari; Old Newari; Classical Nepal Bhasa - nya ny Chichewa; Chewa; Nyanja - nym Nyamwezi - nyn Nyankole - nyo Nyoro - nzi Nzima - oci oc Occitan (post 1500) - oji oj Ojibwa - ori or Oriya - orm om Oromo - osa Osage - oss os Ossetian; Ossetic - ota Turkish, Ottoman (1500-1928) - oto Otomian languages - paa Papuan languages - pag Pangasinan - pal Pahlavi - pam Pampanga; Kapampangan - pan pa Panjabi; Punjabi - pap Papiamento - pau Palauan - peo Persian, Old (ca.600-400 B.C.) - per/fas fa Persian - phi Philippine languages) - phn Phoenician - pli pi Pali - pol pl Polish - pon Pohnpeian - por pt Portuguese - pra Prakrit languages - pro Provencal, Old (to 1500);Occitan, Old (to 1500) - pus ps Pushto; Pashto - qaa-qtz Reserved for local use - que qu Quechua - raj Rajasthani - rap Rapanui - rar Rarotongan; Cook Islands Maori - roa Romance languages - roh rm Romansh - rom Romany - rum/ron ro Romanian; Moldavian; Moldovan - run rn Rundi - rup Aromanian; Arumanian; Macedo-Romanian - rus ru Russian - sad Sandawe - sag sg Sango - sah Yakut - sai South American Indian languages - sal Salishan languages - sam Samaritan Aramaic - san sa Sanskrit - sas Sasak - sat Santali - scn Sicilian - sco Scots - sel Selkup - sem Semitic languages - sga Irish, Old (to 900) - sgn Sign Languages - shn Shan - sid Sidamo - sin si Sinhala; Sinhalese - sio Siouan languages - sit Sino-Tibetan languages - sla Slavic languages - slo/slk sk Slovak - slv sl Slovenian - sma Southern Sami - sme se Northern Sami - smi Sami languages - smj Lule Sami - smn Inari Sami - smo sm Samoan - sms Skolt Sami - sna sn Shona - snd sd Sindhi - snk Soninke - sog Sogdian - som so Somali - son Songhai languages - sot st Sotho, Southern - spa es Spanish; Castilian - srd sc Sardinian - srn Sranan Tongo - srp sr Serbian - srr Serer - ssa Nilo-Saharan languages - ssw ss Swati - suk Sukuma - sun su Sundanese - sus Susu - sux Sumerian - swa sw Swahili - swe sv Swedish - syc Classical Syriac - syr Syriac - tah ty Tahitian - tai Tai languages - tam ta Tamil - tat tt Tatar - tel te Telugu - tem Timne - ter Tereno - tet Tetum - tgk tg Tajik - tgl tl Tagalog - tha th Thai - tib/bod bo Tibetan - tig Tigre - tir ti Tigrinya - tiv Tiv - tkl Tokelau - tlh Klingon; tlhIngan-Hol - tli Tlingit - tmh Tamashek - tog Tonga (Nyasa) - ton to Tonga (Tonga Islands) - tpi Tok Pisin - tsi Tsimshian - tsn tn Tswana - tso ts Tsonga - tuk tk Turkmen - tum Tumbuka - tup Tupi languages - tur tr Turkish - tut Altaic languages - tvl Tuvalu - twi tw Twi - tyv Tuvinian - udm Udmurt - uga Ugaritic - uig ug Uighur; Uyghur - ukr uk Ukrainian - umb Umbundu - und Undetermined - urd ur Urdu - uzb uz Uzbek - vai Vai - ven ve Venda - vie vi Vietnamese - vol vo Volapuk - vot Votic - wak Wakashan languages - wal Wolaitta; Wolaytta - war Waray - was Washo - wel/cym cy Welsh - wen Sorbian languages - wln wa Walloon - wol wo Wolof - xal Kalmyk; Oirat - xho xh Xhosa - yao Yao - yap Yapese - yid yi Yiddish - yor yo Yoruba - ypk Yupik languages - zap Zapotec - zbl Blissymbols; Blissymbolics; Bliss - zen Zenaga - zha za Zhuang; Chuang - znd Zande languages - zul zu Zulu - zun Zuni - zxx No linguistic content; Not applicable - zza Zaza; Dimili; Dimli; Kirdki; Kirmanjki; Zazaki'! Item was removed: - ----- Method: ISOLanguageDefinition class>>readISOLanguagesFrom: (in category 'private') ----- - readISOLanguagesFrom: stream - "ISOLanguageDefinition readISOLanguagesFrom: ISOLanguageDefinition isoLanguages readStream " - | languages language code3 index line | - languages := Dictionary new. - [stream atEnd - or: [(line := stream nextLine readStream) atEnd]] - whileFalse: [ - language := ISOLanguageDefinition new. - code3 := line upTo: Character tab. - (index := code3 indexOf: $/) > 0 - ifTrue: [ - language iso3: (code3 copyFrom: 1 to: index-1). - language iso3Alternate: (code3 copyFrom: index+1 to: code3 size)] - ifFalse: [language iso3: code3]. - language - iso2: (line upTo: Character tab); - language: line upToEnd. - languages at: language iso3 put: language]. - ^languages! Item was removed: - ----- Method: ISOLanguageDefinition>>iso2 (in category 'accessing') ----- - iso2 - ^iso2 ifNil: [self iso3]! Item was removed: - ----- Method: ISOLanguageDefinition>>iso2: (in category 'initialize') ----- - iso2: aString - iso2 := aString ifEmpty: [nil] ifNotEmpty: [aString]! Item was removed: - ----- Method: ISOLanguageDefinition>>iso3 (in category 'accessing') ----- - iso3 - ^iso3 ifNil: ['']! Item was removed: - ----- Method: ISOLanguageDefinition>>iso3: (in category 'initialize') ----- - iso3: aString - iso3 := aString ifEmpty: [nil] ifNotEmpty: [aString]! Item was removed: - ----- Method: ISOLanguageDefinition>>iso3Alternate (in category 'accessing') ----- - iso3Alternate - ^iso3Alternate ifNil: ['']! Item was removed: - ----- Method: ISOLanguageDefinition>>iso3Alternate: (in category 'initialize') ----- - iso3Alternate: aString - iso3Alternate := aString ifEmpty: [nil] ifNotEmpty: [aString]! Item was removed: - ----- Method: ISOLanguageDefinition>>language (in category 'accessing') ----- - language - ^language! Item was removed: - ----- Method: ISOLanguageDefinition>>language: (in category 'initialize') ----- - language: aString - language := aString! Item was removed: - NaturalLanguageTranslator subclass: #InternalTranslator - instanceVariableNames: 'generics' - classVariableNames: 'AllKnownPhrases CachedTranslations' - poolDictionaries: '' - category: 'GetText-Localization'! - - !InternalTranslator commentStamp: 'tak 10/19/2007 11:12' prior: 0! - An InternalTranslator is used a translation dictionary in a image. - You can use it without any external translation file. - - Structure: - generics Dictionary -- msgid -> msgstr - ! Item was removed: - ----- Method: InternalTranslator class>>allKnownPhrases (in category 'private') ----- - allKnownPhrases - ^AllKnownPhrases ifNil: [AllKnownPhrases := Dictionary new: 2051]! Item was removed: - ----- Method: InternalTranslator class>>availableLanguageLocaleIDs (in category 'accessing') ----- - availableLanguageLocaleIDs - "Return locale ids for the internal translation dictionary." - "InternalTranslator availableLanguageLocaleIDs" - ^ self cachedTranslations values collect:[:each | each localeID]! Item was removed: - ----- Method: InternalTranslator class>>cachedTranslations (in category 'private') ----- - cachedTranslations - "CachedTranslations := nil" - ^CachedTranslations ifNil: [CachedTranslations := Dictionary new]! Item was removed: - ----- Method: InternalTranslator class>>directoryForLanguage:country:create: (in category 'private loading') ----- - directoryForLanguage: isoLanguage country: isoCountry create: createDir - "Try to locate the <prefs>/locale/<language>{/<country>} folder. - If createDir is set, create the path down to country or language, depending on wether it's specified.. - Return the directory for country or language depending on specification. - If neither exists, nil" - - "NaturalLanguageTranslator directoryForLanguage: 'es' country: nil create: true" - "NaturalLanguageTranslator directoryForLanguage: 'de' country: 'DE' create: true" - "NaturalLanguageTranslator directoryForLanguage: 'en' country: 'US' create: false" - "NaturalLanguageTranslator directoryForLanguage: 'en' country: nil create: true" - - "If this fails, there is nothing we can do about it here" - | localeDir countryDir languageDir | - localeDir := self localeDirCreate: createDir. - localeDir ifNil: [^nil]. - - isoCountry ifNil: [ - languageDir := localeDir directoryNamed: isoLanguage. - createDir - ifTrue: [languageDir assureExistence]. - ^languageDir exists - ifTrue: [languageDir] - ifFalse: [nil]]. - - countryDir := languageDir directoryNamed: isoCountry. - createDir - ifTrue: [countryDir assureExistence]. - - ^countryDir exists - ifTrue: [countryDir] - ifFalse: [nil]! Item was removed: - ----- Method: InternalTranslator class>>directoryForLocaleID:create: (in category 'private loading') ----- - directoryForLocaleID: localeID create: createDir - "Try to locate the <prefs>/locale/<language>{/<country>} folder. - If createDir is set, create the path down to country or language, depending on locale. - Return the directory for country or language depending on locale. - If neither exists, nil" - - "NaturalLanguageTranslator directoryForLanguage: 'de' country: nil readOnly: true" - "NaturalLanguageTranslator directoryForLanguage: 'de' country: 'DE' readOnly: true" - "NaturalLanguageTranslator directoryForLanguage: 'en' country: 'US' readOnly: false" - "NaturalLanguageTranslator directoryForLanguage: 'en' country: nil readOnly: true" - - ^self directoryForLanguage: localeID isoLanguage country: localeID isoCountry create: createDir! Item was removed: - ----- Method: InternalTranslator class>>discardAllTranslations (in category 'class initialization') ----- - discardAllTranslations - AllKnownPhrases := nil. - self resetCaches.! Item was removed: - ----- Method: InternalTranslator class>>fileReaderServicesForFile:suffix: (in category 'file-services') ----- - fileReaderServicesForFile: fullName suffix: suffix - "Answer the file services associated with given file" - ^ (suffix = self translationSuffix) | (suffix = '*') - ifTrue: [{self serviceMergeLanguageTranslations}] - ifFalse: [#()]! Item was removed: - ----- Method: InternalTranslator class>>loadAvailableExternalLocales (in category 'private loading') ----- - loadAvailableExternalLocales - "private - register locales IDs based on the content of the <prefs>/locale/ directory" - | localeDir | - localeDir := self localeDirCreate: false. - localeDir ifNil: [^ #()]. - - localeDir directoryNames - do: [:langDirName | - | langDir | - langDir := localeDir directoryNamed: langDirName. - - (langDir fileNamesMatching: '*.' , self translationSuffix) - ifNotEmpty: [self loadTranslatorForIsoLanguage: langDirName isoCountry: nil]. - - langDir directoryNames - do: [:countryDirName | - | countryDir | - countryDir := langDirName directoryNamed: countryDirName. - (countryDir fileNamesMatching: '*.' , self translationSuffix) - ifNotEmpty: [self loadTranslatorForIsoLanguage: langDirName isoCountry: countryDirName] - ] - ]. - ! Item was removed: - ----- Method: InternalTranslator class>>loadExternalTranslationsFor: (in category 'private loading') ----- - loadExternalTranslationsFor: translator - "Try to load translations from external external files. - The files are located in the <prefs>/locale/<language>{/<country>} folder. - There can be more than one file for each location, so applications can install their own partial translation tables. All files in the specific folder are loaded." - - | translationDir | - translationDir := self directoryForLocaleID: translator localeID create: false. - translationDir ifNil: [ ^nil ]. - (translationDir fileNamesMatching: '*.' , self translationSuffix) - do: [:fileName | translator loadFromFileNamed: (translationDir fullNameFor: fileName)]! Item was removed: - ----- Method: InternalTranslator class>>loadForLocaleIsoString:fromGzippedMimeLiteral: (in category 'file-services') ----- - loadForLocaleIsoString: localeString fromGzippedMimeLiteral: mimeString - "merge the translation from the mime literal." - | stream localeID translator gs rbStream s currentPlatform | - s := Base64MimeConverter mimeDecodeToBytes: mimeString readStream. - s reset. - gs := GZipReadStream on: s. - rbStream := MultiByteBinaryOrTextStream with: gs contents asString. - rbStream converter: UTF8TextConverter new. - rbStream reset. - localeID := LocaleID isoString: localeString. - currentPlatform := Locale currentPlatform. - [Locale - currentPlatform: (Locale localeID: localeID). - stream := ReadStream on: rbStream contents] - ensure: [Locale currentPlatform: currentPlatform]. - translator := self localeID: localeID. - translator loadFromStream: stream. - LanguageEnvironment resetKnownEnvironments! Item was removed: - ----- Method: InternalTranslator class>>loadTranslatorForIsoLanguage:isoCountry: (in category 'private loading') ----- - loadTranslatorForIsoLanguage: isoLanguage isoCountry: isoCountry - "private - load the translations from <prefs>/locale/ directory - the procedure is to assure the existence of a translator for the - given language/country and then load the external translations for this translator" - - | translator | - translator := self newLocaleID: (LocaleID isoLanguage: isoLanguage isoCountry: isoCountry). - - self loadExternalTranslationsFor: translator! Item was removed: - ----- Method: InternalTranslator class>>localeDirCreate: (in category 'private loading') ----- - localeDirCreate: createDir - "Try to locate the <prefs>/locale/ folder. - If createDir is set, try to create the path. - If it doesn't exist, return nil" - - "If this fails, there is nothing we can do about it here" - | prefDir localeDir | - (createDir not - and: [ExternalSettings preferenceDirectory isNil]) - ifTrue: [^ nil]. - - prefDir := ExternalSettings assuredPreferenceDirectory. - prefDir exists - ifFalse: [^nil]. - - - localeDir := prefDir directoryNamed: 'locale'. - createDir - ifTrue: [localeDir assureExistence]. - ^localeDir exists - ifTrue: [localeDir] - ifFalse: [nil]! Item was removed: - ----- Method: InternalTranslator class>>localeID: (in category 'accessing') ----- - localeID: localeID - "For backward compatibility, see NaturalLanguageTranslator >> fileOutHeaderOn:." - ^ self newLocaleID: localeID! Item was removed: - ----- Method: InternalTranslator class>>mergeLegacyTranslators (in category 'accessing') ----- - mergeLegacyTranslators - self availableLanguageLocaleIDs - do: [:localeID | (NaturalLanguageTranslator translators includesKey: localeID) - ifFalse: [NaturalLanguageTranslator translators - at: localeID - put: (self newLocaleID: localeID)]]! Item was removed: - ----- Method: InternalTranslator class>>mergeTranslationFileNamed: (in category 'file-services') ----- - mergeTranslationFileNamed: fileFullNameString - "merge the translation in the file named fileFullNameString" - - | stream localeID translator | - stream := FileStream readOnlyFileNamed: fileFullNameString. - [localeID := LocaleID isoString: stream localName sansPeriodSuffix. - translator := self localeID: localeID. - translator loadFromStream: stream] - ensure: [stream close]. - LanguageEnvironment resetKnownEnvironments. - - ! Item was removed: - ----- Method: InternalTranslator class>>newLocaleID: (in category 'accessing') ----- - newLocaleID: localeID - ^ self cachedTranslations - at: localeID - ifAbsentPut: [self new localeID: localeID]! Item was removed: - ----- Method: InternalTranslator class>>privateStartUp (in category 'class initialization') ----- - privateStartUp - self loadAvailableExternalLocales. - self mergeLegacyTranslators. - ! Item was removed: - ----- Method: InternalTranslator class>>registerPhrase: (in category 'private') ----- - registerPhrase: phrase - "Using a Dictionary so we can lookup existing string instead of creating needless copies when loading a translation." - self allKnownPhrases at: phrase put: phrase! Item was removed: - ----- Method: InternalTranslator class>>registeredPhraseFor: (in category 'private') ----- - registeredPhraseFor: phrase - "Using a Dictionary so we can lookup existing string instead of creating needless copies when loading a translation." - ^self allKnownPhrases at: phrase ifAbsentPut: [phrase]! Item was removed: - ----- Method: InternalTranslator class>>removeLocaleID: (in category 'accessing') ----- - removeLocaleID: localeID - "self removeLocaleID: (LocaleID isoString: 'ja-kids')" - self cachedTranslations - removeKey: localeID - ifAbsent: []. - NaturalLanguageTranslator privateStartUp! Item was removed: - ----- Method: InternalTranslator class>>resetCaches (in category 'class initialization') ----- - resetCaches - CachedTranslations := nil. - ! Item was removed: - ----- Method: InternalTranslator class>>serviceMergeLanguageTranslations (in category 'file-services') ----- - serviceMergeLanguageTranslations - "Answer a service for merging of translation files" - ^ SimpleServiceEntry - provider: self - label: 'merge the translation file' translatedNoop - selector: #mergeTranslationFileNamed: - description: 'merge the translation file into the language named like the file' translatedNoop - buttonLabel: 'merge' translatedNoop! Item was removed: - ----- Method: InternalTranslator class>>services (in category 'file-services') ----- - services - "Answer potential file services associated with this class" - ^ {self serviceMergeLanguageTranslations}! Item was removed: - ----- Method: InternalTranslator class>>translationSuffix (in category 'private') ----- - translationSuffix - ^'translation'! Item was removed: - ----- Method: InternalTranslator>>atRandom (in category 'accessing') ----- - atRandom - - ^ generics atRandom value. - ! Item was removed: - ----- Method: InternalTranslator>>checkPhrase:translation: (in category 'translation') ----- - checkPhrase: phrase translation: translation! Item was removed: - ----- Method: InternalTranslator>>defaultBackgroundColor (in category 'user interface') ----- - defaultBackgroundColor - "answer the receiver's defaultBackgroundColor for views" - ^ Color cyan! Item was removed: - ----- Method: InternalTranslator>>fileOutHeader (in category 'fileIn/fileOut') ----- - fileOutHeader - ^ '''Translation dictionary'''! Item was removed: - ----- Method: InternalTranslator>>fileOutHeaderOn: (in category 'user interface') ----- - fileOutHeaderOn: aStream - aStream binary. - UTF8TextConverter writeBOMOn: aStream. - aStream text. - aStream nextChunkPut: self fileOutHeader; - cr. - aStream timeStamp; cr. - aStream nextPut: $!!. - aStream nextChunkPut: '(' , self class name , ' localeID: ' , id storeString , ')'. - aStream cr! Item was removed: - ----- Method: InternalTranslator>>fileOutHeaderOn:withBOM: (in category 'user interface') ----- - fileOutHeaderOn: aStream withBOM: bomFlag - bomFlag ifTrue: [ - aStream binary. - UTF8TextConverter writeBOMOn: aStream. - aStream text. - ]. - aStream nextChunkPut: self fileOutHeader; - cr. - aStream timeStamp; cr. - aStream nextPut: $!!. - aStream nextChunkPut: '(' , self class name , ' localeID: ' , id storeString , ')'. - aStream cr! Item was removed: - ----- Method: InternalTranslator>>fileOutOn: (in category 'fileIn/fileOut') ----- - fileOutOn: aStream - "self current fileOutOn: Transcript. Transcript endEntry" - self fileOutOn: aStream keys: nil withBOM: true. - ! Item was removed: - ----- Method: InternalTranslator>>fileOutOn:keys:withBOM: (in category 'fileIn/fileOut') ----- - fileOutOn: aStream keys: keys withBOM: bomFlag - "self current fileOutOn: Transcript. Transcript endEntry" - self fileOutHeaderOn: aStream withBOM: bomFlag. - (keys - ifNil: [generics keys asSortedCollection]) - do: [:key | self - nextChunkPut: (generics associationAt: key) - on: aStream]. - keys - ifNil: [self untranslated - do: [:each | self nextChunkPut: each -> '' on: aStream]]. - aStream nextPut: $!!; - cr! Item was removed: - ----- Method: InternalTranslator>>generics (in category 'private') ----- - generics - ^generics ifNil: [generics := Dictionary new]! Item was removed: - ----- Method: InternalTranslator>>isDomainLoaded: (in category 'accessing') ----- - isDomainLoaded: aDomainName - ^true - ! Item was removed: - ----- Method: InternalTranslator>>loadFromFileNamed: (in category 'private store-retrieve') ----- - loadFromFileNamed: fileNameString - "Load translations from an external file" - - | stream | - [stream := FileStream readOnlyFileNamed: fileNameString. - self loadFromStream: stream] - ensure: [stream close]. - self changed: #translations. - self changed: #untranslated. - ! Item was removed: - ----- Method: InternalTranslator>>loadFromRefStream: (in category 'private store-retrieve') ----- - loadFromRefStream: stream - "Load translations from an external file" - | loadedArray refStream | - refStream := ReferenceStream on: stream. - [loadedArray := refStream next] - ensure: [refStream close]. - self processExternalObject: loadedArray ! Item was removed: - ----- Method: InternalTranslator>>loadFromStream: (in category 'private store-retrieve') ----- - loadFromStream: stream - "Load translations from an external file" - | header isFileIn | - header := '''Translation dictionary'''. - isFileIn := (stream next: header size) - = header. - stream reset. - isFileIn - ifTrue: [stream fileInAnnouncing: 'Loading ' translated, stream localName] - ifFalse: [self loadFromRefStream: stream]! Item was removed: - ----- Method: InternalTranslator>>mergeTranslations: (in category 'private store-retrieve') ----- - mergeTranslations: newTranslations - "Merge a new set of translations into the exiting table. - Overwrites existing entries." - - newTranslations keysAndValuesDo: [:key :value | - self rawPhrase: (self class registeredPhraseFor: key) translation: value]. - self changed: #translations. - self changed: #untranslated.! Item was removed: - ----- Method: InternalTranslator>>nextChunkPut:on: (in category 'fileIn/fileOut') ----- - nextChunkPut: anObject on: aStream - | i remainder terminator | - terminator := $!!. - remainder := anObject storeString. - [(i := remainder indexOf: terminator) = 0] - whileFalse: [aStream - nextPutAll: (remainder copyFrom: 1 to: i). - aStream nextPut: terminator. - "double imbedded terminators" - remainder := remainder copyFrom: i + 1 to: remainder size]. - aStream nextPutAll: remainder. - aStream nextPut: terminator; cr.! Item was removed: - ----- Method: InternalTranslator>>phrase:translation: (in category 'translation') ----- - phrase: phraseString translation: translationString - self generics at: phraseString put: translationString asString. - self changed: #translations. - self changed: #untranslated.! Item was removed: - ----- Method: InternalTranslator>>processExternalObject: (in category 'private store-retrieve') ----- - processExternalObject: anArray - "pivate - process the external object" - - "new format -> {translations. untranslated}" - - anArray second do: [:each | self class registerPhrase: each]. - - self mergeTranslations: anArray first! Item was removed: - ----- Method: InternalTranslator>>rawPhrase:translation: (in category 'translation') ----- - rawPhrase: phraseString translation: translationString - self generics at: phraseString put: translationString asString. - ! Item was removed: - ----- Method: InternalTranslator>>rawRemoveUntranslated: (in category 'translation') ----- - rawRemoveUntranslated: untranslated - - self class allKnownPhrases removeKey: untranslated ifAbsent: []. - self changed: #untranslated.! Item was removed: - ----- Method: InternalTranslator>>removeTranslationFor: (in category 'translation') ----- - removeTranslationFor: phraseString - self generics removeKey: phraseString ifAbsent: []. - self changed: #translations. - self changed: #untranslated.! Item was removed: - ----- Method: InternalTranslator>>removeUntranslated: (in category 'translation') ----- - removeUntranslated: untranslated - - self class allKnownPhrases removeKey: untranslated ifAbsent: []. - ! Item was removed: - ----- Method: InternalTranslator>>saveToFileNamed: (in category 'private store-retrieve') ----- - saveToFileNamed: fileNameString - "save the receiver's translations to a file named fileNameString" - | stream | - "Set true if you need to save as binary" - false - ifTrue: [stream := ReferenceStream fileNamed: fileNameString. - stream nextPut: {self translations. self untranslated}. - stream close. - ^ self]. - stream := FileStream fileNamed: fileNameString. - [self fileOutOn: stream] - ensure: [stream close]! Item was removed: - ----- Method: InternalTranslator>>scanFrom: (in category 'fileIn/fileOut') ----- - scanFrom: aStream - "Read a definition of dictionary. - Make sure current locale corresponds my locale id" - | aString newTranslations assoc currentPlatform | - newTranslations := Dictionary new. - currentPlatform := Locale currentPlatform. - [Locale - currentPlatform: (Locale localeID: id). - [aString := aStream nextChunk withSqueakLineEndings. - aString size > 0] - whileTrue: [assoc := Compiler evaluate: aString. - assoc value = '' - ifTrue: [self class registerPhrase: assoc key] - ifFalse: [newTranslations add: assoc]]] - ensure: [Locale currentPlatform: currentPlatform]. - self mergeTranslations: newTranslations! Item was removed: - ----- Method: InternalTranslator>>translate:inDomain: (in category 'translation') ----- - translate: aString inDomain: aDomainName - | translator | - ^ self generics - at: aString - ifAbsent: [self localeID hasParent - ifTrue: [translator := self class cachedTranslations - at: self localeID parent - ifAbsent: [^ aString]. - translator translate: aString inDomain: aDomainName] - ifFalse: [aString]]! Item was removed: - ----- Method: InternalTranslator>>translations (in category 'accessing') ----- - translations - ^self generics! Item was removed: - ----- Method: InternalTranslator>>untranslated (in category 'accessing') ----- - untranslated - | translations | - translations := self translations. - ^self class allKnownPhrases reject: [:each | translations includesKey: each]! Item was changed: ----- Method: LanguageEditor>>getTextExport (in category 'gui methods') ----- getTextExport Cursor wait + showWhile: [GetTextExporter new exportTranslator: self model]! - showWhile: [GetTextExporter2 new exportTranslator: self model]! Item was changed: ----- Method: LanguageEditor>>getTextExportTemplate (in category 'gui methods') ----- getTextExportTemplate Cursor wait + showWhile: [GetTextExporter new exportTemplate] ! - showWhile: [GetTextExporter2 new exportTemplate] ! Item was removed: - Object subclass: #Locale - instanceVariableNames: 'id shortDate longDate time decimalSymbol digitGrouping currencySymbol currencyNotation measurement offsetLocalToUTC offsetVMToUTC dstActive' - classVariableNames: 'Current CurrentPlatform KnownLocales LanguageSymbols LocaleChangeListeners PlatformEncodings Previous' - poolDictionaries: '' - category: 'GetText-Localization'! - - !Locale commentStamp: '<historical>' prior: 0! - Main comment stating the purpose of this class and relevant relationship to other classes. - - - -
http://www.w3.org/WAI/ER/IG/ert/iso639.htm
-
http://www.oasis-open.org/cover/iso639a.html
- See also -
http://oss.software.ibm.com/cvs/icu/~checkout~/icuhtml/design/language_code…
-
http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.10
- - ISO 3166 -
http://mitglied.lycos.de/buran/knowhow/codes/locales/
- ! Item was removed: - ----- Method: Locale class>>addLocalChangedListener: (in category 'notification') ----- - addLocalChangedListener: anObjectOrClass - self localeChangedListeners add: anObjectOrClass! Item was removed: - ----- Method: Locale class>>clipboadInterpreter (in category 'accessing') ----- - clipboadInterpreter - ^NoConversionClipboardInterpreter new! Item was removed: - ----- Method: Locale class>>current (in category 'accessing') ----- - current - "Current := nil" - Current ifNil: [ - Current := self determineCurrentLocale. - "Transcript show: 'Current locale: ' , Current localeID asString; cr"]. - ^Current! Item was removed: - ----- Method: Locale class>>currentPlatform (in category 'accessing') ----- - currentPlatform - "CurrentPlatform := nil" - CurrentPlatform ifNil: [CurrentPlatform := self determineCurrentLocale]. - ^CurrentPlatform! Item was removed: - ----- Method: Locale class>>currentPlatform: (in category 'accessing') ----- - currentPlatform: locale - CurrentPlatform := locale. - LanguageEnvironment startUp. - ! Item was removed: - ----- Method: Locale class>>currentPlatform:during: (in category 'accessing') ----- - currentPlatform: locale during: aBlock - "Alter current language platform during a block" - | backupPlatform | - backupPlatform := self currentPlatform. - [self currentPlatform: locale. - aBlock value] - ensure: [self currentPlatform: backupPlatform]! Item was removed: - ----- Method: Locale class>>defaultEncodingName: (in category 'platform specific') ----- - defaultEncodingName: languageSymbol - | encodings platformName osVersion | - platformName := SmalltalkImage current platformName. - osVersion := SmalltalkImage current getSystemAttribute: 1002. - encodings := self platformEncodings at: languageSymbol - ifAbsent: [self platformEncodings at: #default]. - encodings at: platformName ifPresent: [:encoding | ^encoding]. - encodings at: platformName , ' ' , osVersion - ifPresent: [:encoding | ^encoding]. - ^encodings at: #default! Item was removed: - ----- Method: Locale class>>defaultInputInterpreter (in category 'platform specific') ----- - defaultInputInterpreter - | platformName osVersion | - platformName := SmalltalkImage current platformName. - osVersion := SmalltalkImage current getSystemAttribute: 1002. - (platformName = 'Win32' and: [osVersion = 'CE']) - ifTrue: [^NoInputInterpreter new]. - platformName = 'Win32' ifTrue: [^MacRomanInputInterpreter new]. - ^NoInputInterpreter new! Item was removed: - ----- Method: Locale class>>determineCurrentLocale (in category 'private') ----- - determineCurrentLocale - "For now just return the default locale. - A smarter way would be to determine the current platforms default locale." - "Locale determineCurrentLocale" - - ^self new determineLocale! Item was removed: - ----- Method: Locale class>>initKnownLocales (in category 'private') ----- - initKnownLocales - | locales | - locales := Dictionary new. - - "Init the locales for which we have translations" - InternalTranslator availableLanguageLocaleIDs do: [:id | - locales at: id put: (Locale new localeID: id)]. - ^locales! Item was removed: - ----- Method: Locale class>>initialize (in category 'class initialization') ----- - initialize - "Locale initialize" - - Smalltalk addToStartUpList: Locale. - Preferences addPreference: #useLocale - categories: #('general') default: false - balloonHelp: 'Use the system locale to set the system language etc at startup'.! Item was removed: - ----- Method: Locale class>>initializePlatformEncodings (in category 'class initialization') ----- - initializePlatformEncodings - "Locale initializePlatformEncodings" - - | platform | - PlatformEncodings isNil ifTrue: [ PlatformEncodings := Dictionary new ]. - - platform := PlatformEncodings at: 'default' ifAbsentPut: Dictionary new. - platform - at: 'default' put: 'iso8859-1'; - at: 'Win32 CE' put: 'utf-8'; - yourself. - - platform := PlatformEncodings at: 'ja' ifAbsentPut: Dictionary new. - platform - at: 'default' put: 'shift-jis'; - at: 'unix' put: 'euc-jp'; - at: 'Win32 CE' put: 'utf-8'; - yourself. - - platform := PlatformEncodings at: 'ko' ifAbsentPut: Dictionary new. - platform - at: 'default' put: 'euc-kr'; - at: 'Win32 CE' put: 'utf-8'; - yourself. - - platform := PlatformEncodings at: 'zh' ifAbsentPut: Dictionary new. - platform - at: 'default' put: 'gb2312'; - at: 'unix' put: 'euc-cn'; - at: 'Win32 CE' put: 'utf-8'; - yourself. - ! Item was removed: - ----- Method: Locale class>>isoLanguage: (in category 'accessing') ----- - isoLanguage: isoLanguage - ^self isoLanguage: isoLanguage isoCountry: nil! Item was removed: - ----- Method: Locale class>>isoLanguage:isoCountry: (in category 'accessing') ----- - isoLanguage: isoLanguage isoCountry: isoCountry - ^self localeID: (LocaleID isoLanguage: isoLanguage isoCountry: isoCountry)! Item was removed: - ----- Method: Locale class>>isoLocale: (in category 'accessing') ----- - isoLocale: aString - ! Item was removed: - ----- Method: Locale class>>knownLocales (in category 'private') ----- - knownLocales - "KnownLocales := nil" - ^KnownLocales ifNil: [KnownLocales := self initKnownLocales]! Item was removed: - ----- Method: Locale class>>languageSymbol: (in category 'accessing') ----- - languageSymbol: languageSymbol - "Locale languageSymbol: #Deutsch" - - ^self isoLanguage: (LanguageSymbols at: languageSymbol)! Item was removed: - ----- Method: Locale class>>localeChanged (in category 'notification') ----- - localeChanged - - #(#ParagraphEditor #BitEditor #FormEditor #StandardSystemController ) - do: [:key | Smalltalk - at: key - ifPresent: [:class | class initialize]]. - PartsBin localeChanged. - Project localeChanged. - PaintBoxMorph localeChanged. - ColorPickerMorph localeChanged. - Preferences localeChanged! Item was removed: - ----- Method: Locale class>>localeChangedGently (in category 'notification') ----- - localeChangedGently - - #(#ParagraphEditor #BitEditor #FormEditor #StandardSystemController ) - do: [:key | Smalltalk - at: key - ifPresent: [:class | class initialize]]. - PartsBin localeChangedGently. - Project localeChangedGently. - PaintBoxMorph localeChangedGently. - ColorPickerMorph localeChangedGently. - Preferences localeChangedGently. - ! Item was removed: - ----- Method: Locale class>>localeChangedListeners (in category 'notification') ----- - localeChangedListeners - ^LocaleChangeListeners ifNil: [LocaleChangeListeners := OrderedCollection new]! Item was removed: - ----- Method: Locale class>>localeID: (in category 'accessing') ----- - localeID: id - ^self knownLocales at: id ifAbsentPut: [Locale new localeID: id]! Item was removed: - ----- Method: Locale class>>migrateSystem (in category 'private') ----- - migrateSystem - "Locale migrateSystem" - "Do all the necessary operations to switch to the new Locale environment." - - LocaleChangeListeners := nil. - self - addLocalChangedListener: HandMorph; - addLocalChangedListener: Clipboard; - addLocalChangedListener: Vocabulary; - addLocalChangedListener: PartsBin; - addLocalChangedListener: Project; - addLocalChangedListener: PaintBoxMorph; - yourself! Item was removed: - ----- Method: Locale class>>platformEncodings (in category 'class initialization') ----- - platformEncodings - PlatformEncodings isEmptyOrNil ifTrue: [ self initializePlatformEncodings ]. - ^PlatformEncodings - ! Item was removed: - ----- Method: Locale class>>previous (in category 'accessing') ----- - previous - - ^ Previous - ! Item was removed: - ----- Method: Locale class>>resetKnownLocales (in category 'private') ----- - resetKnownLocales - - KnownLocales := nil - ! Item was removed: - ----- Method: Locale class>>startUp: (in category 'system startUp') ----- - startUp: resuming - | newID | - resuming ifFalse: [^self]. - (Preferences valueOfFlag: #useLocale) - ifTrue: [ - DateAndTime localTimeZone: (TimeZone - offset: (Duration minutes: Locale current offsetLocalToUTC) - name: 'Local Time' - abbreviation: 'LT'). - newID := self current determineLocaleID. - newID ~= LocaleID current - ifTrue: [self switchAndInstallFontToID: newID gently: true]]! Item was removed: - ----- Method: Locale class>>stringForLanguageNameIs: (in category 'accessing') ----- - stringForLanguageNameIs: localeID - "Answer a string for a menu determining whether the given - symbol is the project's natural language" - ^ (self current localeID = localeID - ifTrue: ['<yes>'] - ifFalse: ['<no>']) - , localeID displayName! Item was removed: - ----- Method: Locale class>>switchAndInstallFontToID: (in category 'accessing') ----- - switchAndInstallFontToID: localeID - "Locale switchAndInstallFontToID: (LocaleID isoLanguage: 'de')" - | locale | - locale := Locale localeID: localeID. - locale languageEnvironment isFontAvailable - ifFalse: [(self confirm: 'This language needs additional fonts. - Do you want to install the fonts?' translated) - ifTrue: [locale languageEnvironment installFont] - ifFalse: [^ self]]. - self - switchTo: locale! Item was removed: - ----- Method: Locale class>>switchAndInstallFontToID:gently: (in category 'accessing') ----- - switchAndInstallFontToID: localeID gently: gentlyFlag - - | locale result env envFound ret fontInImage menu | - "Assumption: Rainbow => can try Pango" - "Logic: - - in Sugar, we don't bother asking any questions, and we don't bother automatically loading fonts. - in Sugar, and if the font is available, use the font. - in Sugar, and if the font is not in the image, try to enable Pango. - - if the previous step fails, notify the user that you cannot switch to the language. - - not in Rainbow, - - if the font is in the image, use the font. - - if the font is not in the image, - - ask to choose: - - load font - - try to enable pango, if pango is available - - or cancel. - - if the previous step fails, notify the user that you cannot switch to the language. - Details: - - how to check non-pango font is available: - - if the language environment for the locale doesn't exist, the font is not available. - - if font loading fails, it is not available. - - how to check if the language environment doesn't exist: - - if the locales languageEnvironment is Latin1 but the locale isn't it is not available. - " - locale := Locale localeID: localeID. - env := locale languageEnvironment. - result := true. - envFound := (Latin1Environment supportedLanguages includes: locale isoLanguage) or: [(env isMemberOf: Latin1Environment) not]. - fontInImage := envFound and: [env isFontAvailable]. - SugarLauncher isRunningInSugar ifTrue: [ - fontInImage ifFalse: [ - "font is not available in the image. Even don't ask for font installation." - Cursor wait showWhile: [ - Preferences setPreference: #usePangoRenderer toValue: true. - TextMorph usePango: true]]. - ] ifFalse: [ - fontInImage ifFalse: [ - menu := MenuMorph new. - menu defaultTarget: menu. - envFound ifTrue: [menu add: 'load font' translated selector: #modalSelection: argument: #loadFont]. - RomePluginCanvas pangoIsAvailable ifTrue: [menu add: 'enable Pango' translated selector: #modalSelection: argument: #enablePango]. - menu add: 'cancel' translated selector: #modalSelection: argument: #cancel. - menu addTitle: 'This language needs additional fonts. - Do you want to install the fonts?' translated. - ret := menu invokeModal. - ret = #loadFont ifTrue: [result := env installFont. result ifTrue: [StrikeFont setupDefaultFallbackTextStyle]]. - ret = #enablePango ifTrue: [ - (result := RomePluginCanvas pangoIsAvailable) ifTrue: [ - Cursor wait showWhile: [ - Preferences setPreference: #usePangoRenderer toValue: true. - TextMorph usePango: true]]]. - (ret ~~ #loadFont and: [ret ~~ #enablePango]) ifTrue: [result := false]]]. - - result ifFalse: [self inform: 'Cannot load additional fonts' translated] ifTrue: [self switchTo: locale gently: gentlyFlag]. - ! Item was removed: - ----- Method: Locale class>>switchTo: (in category 'accessing') ----- - switchTo: locale - self switchTo: locale gently: false. - ! Item was removed: - ----- Method: Locale class>>switchTo:gently: (in category 'accessing') ----- - switchTo: locale gently: gentlyFlag - "Locale switchTo: (Locale isoLanguage: 'de')" - | availableID | - availableID := (NaturalLanguageTranslator availableForLocaleID: locale localeID) localeID. - Current localeID = availableID - ifFalse: [Previous := Current. - CurrentPlatform := Current := Locale localeID: availableID. - NaturalLanguageTranslator localeChanged. - gentlyFlag ifTrue: [self localeChangedGently] ifFalse: [self localeChanged]]! Item was removed: - ----- Method: Locale class>>switchToID: (in category 'accessing') ----- - switchToID: localeID - "Locale switchToID: (LocaleID isoLanguage: 'de') " - - self switchTo: (Locale localeID: localeID)! Item was removed: - ----- Method: Locale>>determineLocale (in category 'accessing') ----- - determineLocale - self localeID: self determineLocaleID! Item was removed: - ----- Method: Locale>>determineLocaleID (in category 'accessing') ----- - determineLocaleID - "Locale current determineLocaleID" - | isoLang isoCountry | - isoLang := self fetchISO2Language - ifNil: [^ self localeID]. - isoCountry := self fetchISOCountry - ifNil: [^ LocaleID isoLanguage: isoLang]. - ^ LocaleID isoLanguage: isoLang isoCountry: isoCountry! Item was removed: - ----- Method: Locale>>fetchISO2Language (in category 'private') ----- - fetchISO2Language - "Locale current fetchISO2Language" - | lang isoLang | - lang := self primLanguage. - lang ifNil: [^nil]. - lang := lang copyUpTo: 0 asCharacter. - lang size == 2 - ifTrue: [^lang]. - isoLang := ISOLanguageDefinition iso3LanguageDefinition: lang. - ^isoLang - ifNil: [nil] - ifNotNil: [isoLang iso2]! Item was removed: - ----- Method: Locale>>fetchISOCountry (in category 'private') ----- - fetchISOCountry - "Locale current fetchISOCountry" - | countryCode | - countryCode := self primCountry - ifNil: [^ nil]. - ^ countryCode copyUpTo: 0 asCharacter! Item was removed: - ----- Method: Locale>>iconForNativeLanguage (in category 'accessing') ----- - iconForNativeLanguage - - ^ (NaturalLanguageFormTranslator localeID: self localeID) translate: 'LanguageNameInNativeLanguage'. - ! Item was removed: - ----- Method: Locale>>isoCountry (in category 'accessing') ----- - isoCountry - ^self localeID isoCountry! Item was removed: - ----- Method: Locale>>isoLanguage (in category 'accessing') ----- - isoLanguage - ^self localeID isoLanguage! Item was removed: - ----- Method: Locale>>isoLocale (in category 'accessing') ----- - isoLocale - "<language>-<country>" - ^self isoCountry - ifNil: [self isoLanguage] - ifNotNil: [self isoLanguage , '-' , self isoCountry]! Item was removed: - ----- Method: Locale>>languageEnvironment (in category 'accessing') ----- - languageEnvironment - ^LanguageEnvironment localeID: self localeID! Item was removed: - ----- Method: Locale>>localeID (in category 'accessing') ----- - localeID - ^id! Item was removed: - ----- Method: Locale>>localeID: (in category 'accessing') ----- - localeID: anID - id := anID! Item was removed: - ----- Method: Locale>>offsetLocalToUTC (in category 'accessing') ----- - offsetLocalToUTC - ^self primTimezone! Item was removed: - ----- Method: Locale>>primCountry (in category 'system primitives') ----- - primCountry - "Returns string with country tag according to ISO 639" - <primitive: 'primitiveCountry' module: 'LocalePlugin'> - ^'US'! Item was removed: - ----- Method: Locale>>primCurrencyNotation (in category 'system primitives') ----- - primCurrencyNotation - "Returns boolean if symbol is pre- (true) or post-fix (false)" - <primitive: 'primitiveCurrencyNotation' module: 'LocalePlugin'> - ^true! Item was removed: - ----- Method: Locale>>primCurrencySymbol (in category 'system primitives') ----- - primCurrencySymbol - "Returns string with currency symbol" - <primitive: 'primitiveCurrencySymbol' module:'LocalePlugin'> - ^'$'! Item was removed: - ----- Method: Locale>>primDST (in category 'system primitives') ----- - primDST - "Returns boolean if DST (daylight saving time) is active or not" - <primitive:'primitiveDaylightSavings' module: 'LocalePlugin'> - ^false! Item was removed: - ----- Method: Locale>>primDecimalSymbol (in category 'system primitives') ----- - primDecimalSymbol - "Returns string with e.g. '.' or ','" - <primitive:'primitiveDecimalSymbol' module: 'LocalePlugin'> - ^'.'! Item was removed: - ----- Method: Locale>>primDigitGrouping (in category 'system primitives') ----- - primDigitGrouping - "Returns string with e.g. '.' or ',' (thousands etc)" - <primitive:'primitiveDigitGroupingSymbol' module: 'LocalePlugin'> - ^','! Item was removed: - ----- Method: Locale>>primLanguage (in category 'system primitives') ----- - primLanguage - "returns string with language tag according to ISO 639" - <primitive:'primitiveLanguage' module: 'LocalePlugin'> - ^'en' - - ! Item was removed: - ----- Method: Locale>>primLongDateFormat (in category 'system primitives') ----- - primLongDateFormat - "Returns the long date format - d day, m month, y year, - double symbol is null padded, single not padded (m=6, mm=06) - dddd weekday - mmmm month name" - <primitive:'primitiveLongDateFormat' module: 'LocalePlugin'> - ^'dddd, mmmm d, yyyy'! Item was removed: - ----- Method: Locale>>primMeasurement (in category 'system primitives') ----- - primMeasurement - "Returns boolean denoting metric(true) or imperial(false)." - <primitive:'primitiveMeasurementMetric' module: 'LocalePlugin'> - ^true - ! Item was removed: - ----- Method: Locale>>primShortDateFormat (in category 'system primitives') ----- - primShortDateFormat - "Returns the short date format - d day, m month, y year, - double symbol is null padded, single not padded (m=6, mm=06) - dddd weekday - mmmm month name" - <primitive:'primitiveShortDateFormat' module: 'LocalePlugin'> - ^'m/d/yy'! Item was removed: - ----- Method: Locale>>primTimeFormat (in category 'system primitives') ----- - primTimeFormat - "Returns string time format - Format is made up of - h hour (h 12, H 24), m minute, s seconds, x (am/pm String) - double symbol is null padded, single not padded (h=6, hh=06)" - <primitive:'primitiveTimeFormat' module: 'LocalePlugin'> - ^'h:mmx'! Item was removed: - ----- Method: Locale>>primTimezone (in category 'system primitives') ----- - primTimezone - "The offset from UTC in minutes, with positive offsets being towards the east. - (San Francisco is in UTC -07*60 and Paris is in UTC +02*60 when daylight savings is in effect)." - <primitive:'primitiveTimezoneOffset' module: 'LocalePlugin'> - ^0! Item was removed: - ----- Method: Locale>>primVMOffsetToUTC (in category 'system primitives') ----- - primVMOffsetToUTC - "Returns the offset in minutes between the VM and UTC. - If the VM does not support UTC times, this is 0. - Also gives us backward compatibility with old VMs as the primitive will fail and we then can return 0." - <primitive:'primitiveVMOffsetToUTC' module: 'LocalePlugin'> - ^0! Item was removed: - ----- Method: Locale>>printOn: (in category 'accessing') ----- - printOn: aStream - super printOn: aStream. - aStream nextPutAll: '(' , id printString , ')'! Item was removed: - Object subclass: #LocaleID - instanceVariableNames: 'isoLanguage isoCountry' - classVariableNames: '' - poolDictionaries: '' - category: 'GetText-Localization'! Item was removed: - ----- Method: LocaleID class>>current (in category 'accessing') ----- - current - ^Locale current localeID! Item was removed: - ----- Method: LocaleID class>>isoLanguage: (in category 'instance creation') ----- - isoLanguage: langString - ^self isoLanguage: langString isoCountry: nil! Item was removed: - ----- Method: LocaleID class>>isoLanguage:isoCountry: (in category 'instance creation') ----- - isoLanguage: langString isoCountry: countryStringOrNil - ^self new isoLanguage: langString isoCountry: countryStringOrNil! Item was removed: - ----- Method: LocaleID class>>isoString: (in category 'instance creation') ----- - isoString: isoString - "Parse the isoString (<language>-<country>) into its components and return the matching LocaleID" - "LocaleID isoString: 'en' " - "LocaleID isoString: 'en-us' " - - | parts language country | - parts := isoString findTokens: #($- ). - language := parts first. - parts size > 1 - ifTrue: [country := parts second]. - ^self isoLanguage: language isoCountry: country! Item was removed: - ----- Method: LocaleID class>>posixName: (in category 'instance creation') ----- - posixName: aString - ^ self - isoString: (aString copyReplaceAll: ':=' with: '-')! Item was removed: - ----- Method: LocaleID class>>previous (in category 'accessing') ----- - previous - ^Locale previous localeID! Item was removed: - ----- Method: LocaleID>>= (in category 'comparing') ----- - = anotherObject - self class == anotherObject class - ifFalse: [^false]. - ^self isoLanguage = anotherObject isoLanguage - and: [self isoCountry = anotherObject isoCountry]! Item was removed: - ----- Method: LocaleID>>displayCountry (in category 'accessing') ----- - displayCountry - ^(ISOLanguageDefinition iso2Countries at: self isoCountry asUppercase ifAbsent: [ self isoCountry ]) ! Item was removed: - ----- Method: LocaleID>>displayLanguage (in category 'accessing') ----- - displayLanguage - | language | - language := (ISOLanguageDefinition iso2LanguageTable - at: self isoLanguage - ifAbsent: [^ self isoLanguage]) language. - ^ self isoCountry - ifNil: [language] - ifNotNil: [language , ' (' , self displayCountry , ')']! Item was removed: - ----- Method: LocaleID>>displayName (in category 'accessing') ----- - displayName - "Answer a proper name to represent the receiver in GUI. - - The wording is provided by translations of the magic value - '<language display name>'. - - 'English' -> 'English' - 'German' -> 'Deutsch' - " - | magicPhrase translatedMagicPhrase | - magicPhrase := '<language display name>'. - translatedMagicPhrase := GetTextTranslator translateWithoutLoading: magicPhrase toLocaleID: self. - ^ translatedMagicPhrase = magicPhrase - ifTrue: [self displayLanguage] - ifFalse: [translatedMagicPhrase]! Item was removed: - ----- Method: LocaleID>>hasParent (in category 'testing') ----- - hasParent - ^self isoCountry notNil! Item was removed: - ----- Method: LocaleID>>hash (in category 'comparing') ----- - hash - ^self isoLanguage hash bitXor: self isoCountry hash! Item was removed: - ----- Method: LocaleID>>isoCountry (in category 'accessing') ----- - isoCountry - ^isoCountry! Item was removed: - ----- Method: LocaleID>>isoLanguage (in category 'accessing') ----- - isoLanguage - ^isoLanguage! Item was removed: - ----- Method: LocaleID>>isoLanguage:isoCountry: (in category 'initialize') ----- - isoLanguage: langString isoCountry: countryStringOrNil - isoLanguage := langString. - isoCountry := countryStringOrNil! Item was removed: - ----- Method: LocaleID>>isoString (in category 'accessing') ----- - isoString - ^self asString! Item was removed: - ----- Method: LocaleID>>parent (in category 'accessing') ----- - parent - ^self class isoLanguage: self isoLanguage! Item was removed: - ----- Method: LocaleID>>posixName (in category 'printing') ----- - posixName - "(LocaleID isoString: 'es-MX') posixName" - "(LocaleID isoString: 'es') posixName" - "language[_territory]" - ^ self isoCountry - ifNil: [self isoLanguage] - ifNotNil: [self isoLanguage , ':=' , self isoCountry]! Item was removed: - ----- Method: LocaleID>>printOn: (in category 'printing') ----- - printOn: stream - "<language>-<country>" - stream nextPutAll: self isoLanguage. - self isoCountry - ifNotNil: [stream nextPut: $-; nextPutAll: self isoCountry]! Item was removed: - ----- Method: LocaleID>>storeOn: (in category 'printing') ----- - storeOn: aStream - aStream nextPut: $(. - aStream nextPutAll: self class name. - aStream nextPutAll: ' isoString: '. - aStream nextPutAll: '''' , self printString , ''''. - aStream nextPut: $). - ! Item was removed: - ----- Method: LocaleID>>translator (in category 'accessing') ----- - translator - ^ InternalTranslator localeID: self ! Item was removed: - Object subclass: #NaturalLanguageFormTranslator - instanceVariableNames: 'id generics' - classVariableNames: 'CachedTranslations' - poolDictionaries: '' - category: 'GetText-Localization'! Item was removed: - ----- Method: NaturalLanguageFormTranslator class>>bitmapForJapanese (in category 'as yet unclassified') ----- - bitmapForJapanese - - ^ (Form - extent: 54@17 - depth: 16 - fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65536 0 1 65537 65537 65537 65537 0 0 0 0 1 0 0 0 0 65537 65537 1 65537 65537 65536 1 0 0 0 1 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 65536 0 0 65536 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 1 65537 65537 65536 1 0 0 0 1 0 0 65536 0 0 1 0 0 0 1 0 1 65537 65537 65537 65537 65537 65537 0 0 0 1 65537 65537 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 65537 65536 0 0 0 65537 65537 0 65536 1 0 0 0 65536 1 0 0 0 1 65537 65537 65537 65537 0 0 0 1 1 1 0 0 0 0 0 0 65536 1 0 0 0 65536 1 0 0 0 1 0 0 0 1 0 0 0 1 1 1 0 0 0 65537 65537 65537 65537 65537 65537 0 0 65536 1 0 0 0 1 0 0 0 1 0 0 0 65536 1 0 65536 0 0 0 0 0 0 0 0 0 0 65536 1 0 0 0 1 0 0 0 1 0 0 1 0 1 0 1 0 0 65537 65537 1 65537 65537 65536 0 0 65536 1 0 0 0 1 0 0 0 1 0 0 65536 65537 65537 65537 65536 65536 0 65536 1 1 0 0 65536 0 0 65536 0 65536 0 0 1 0 0 0 1 0 1 0 0 1 0 0 1 0 65536 1 1 0 0 65536 0 1 0 0 65536 0 0 1 65537 65537 65537 65537 0 0 0 0 1 0 0 0 0 65537 65537 1 65537 65537 65536 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 65536 0 0 0 65536 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0) - offset: 0@0)! Item was removed: - ----- Method: NaturalLanguageFormTranslator class>>cachedTranslations (in category 'accessing') ----- - cachedTranslations - "CachedTranslations := nil" - ^CachedTranslations ifNil: [CachedTranslations := Dictionary new]! Item was removed: - ----- Method: NaturalLanguageFormTranslator class>>cleanUp (in category 'class initialization') ----- - cleanUp - "Flush caches" - - CachedTranslations := nil! Item was removed: - ----- Method: NaturalLanguageFormTranslator class>>initializeJapaneseBitmap (in category 'as yet unclassified') ----- - initializeJapaneseBitmap - - (self localeID: (LocaleID isoString: 'ja')) name: 'LanguageNameInNativeLanguage' form: self bitmapForJapanese. - ! Item was removed: - ----- Method: NaturalLanguageFormTranslator class>>isoLanguage: (in category 'accessing') ----- - isoLanguage: isoLanguage - "Return the generic language translator as there is no information about the country code" - - ^self isoLanguage: isoLanguage isoCountry: nil! Item was removed: - ----- Method: NaturalLanguageFormTranslator class>>isoLanguage:isoCountry: (in category 'accessing') ----- - isoLanguage: isoLanguage isoCountry: isoCountry - ^self localeID: (LocaleID isoLanguage: isoLanguage isoCountry: isoCountry)! Item was removed: - ----- Method: NaturalLanguageFormTranslator class>>loadFormsFrom: (in category 'i/o') ----- - loadFormsFrom: aStream - - | rr pair inst | - rr := ReferenceStream on: aStream. - pair := rr next. - inst := self localeID: (LocaleID isoString: pair first). - pair second associationsDo: [:assoc | - inst name: assoc key form: assoc value. - ]. - ^ inst. - ! Item was removed: - ----- Method: NaturalLanguageFormTranslator class>>localeID: (in category 'accessing') ----- - localeID: localeID - ^ self cachedTranslations - at: localeID - ifAbsentPut: [self new localeID: localeID]! Item was removed: - ----- Method: NaturalLanguageFormTranslator>>generics (in category 'accessing') ----- - generics - ^generics ifNil: [generics := Dictionary new]! Item was removed: - ----- Method: NaturalLanguageFormTranslator>>localeID (in category 'accessing') ----- - localeID - ^id! Item was removed: - ----- Method: NaturalLanguageFormTranslator>>localeID: (in category 'accessing') ----- - localeID: anID - id := anID! Item was removed: - ----- Method: NaturalLanguageFormTranslator>>name:form: (in category 'accessing') ----- - name: formName form: translatedForm - self generics at: formName put: translatedForm. - ! Item was removed: - ----- Method: NaturalLanguageFormTranslator>>saveFormsOn: (in category 'i/o') ----- - saveFormsOn: aStream - - | rr | - rr := ReferenceStream on: aStream. - rr nextPut: {id isoString. generics}. - rr close. - ! Item was removed: - ----- Method: NaturalLanguageFormTranslator>>translate: (in category 'utilities') ----- - translate: aString - - ^ (self generics - at: aString ifAbsent: [nil]) deepCopy. - - "Do you like to write 'form ifNotNil: [form deepCopy]'?" - ! Item was removed: - Object subclass: #NaturalLanguageTranslator - instanceVariableNames: 'id' - classVariableNames: 'Translators' - poolDictionaries: '' - category: 'GetText-Localization'! - - !NaturalLanguageTranslator commentStamp: '<historical>' prior: 0! - abstract class of natural language translator. - Class side manages and holds loaded instances of concrete classes.! Item was removed: - ----- Method: NaturalLanguageTranslator class>>availableForLocaleID: (in category 'accessing') ----- - availableForLocaleID: localeID - "Answer available locale ID. - If translator is not found for correct locale ID, then isoLanguage is - attempted for the key." - ^ self translators - at: localeID - ifAbsent: [localeID hasParent - ifTrue: [self translators - at: localeID parent - ifAbsent: [self default]] - ifFalse: [self default]]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>availableLanguageLocaleIDs (in category 'accessing') ----- - availableLanguageLocaleIDs - "Return the locale ids for the currently available languages. - Meaning those which either internally or externally have - translations available." - "NaturalLanguageTranslator availableLanguageLocaleIDs" - ^ self translators values collect:[:each | each localeID]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>cleanUpCache (in category 'private') ----- - cleanUpCache - "NaturalLanguageTranslator cleanUpCache" - - self cachedTranslations keys do: [:key | - key isoLanguage size > 2 ifTrue: [self cachedTranslations removeKey: key]]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>current (in category 'accessing') ----- - current - ^ self availableForLocaleID: LocaleID current! Item was removed: - ----- Method: NaturalLanguageTranslator class>>default (in category 'accessing') ----- - default - "Answer translator for backstop" - "self default translate: 'test'" - ^ self new - localeID: (LocaleID isoLanguage: 'en')! Item was removed: - ----- Method: NaturalLanguageTranslator class>>directoryForLanguage:country:create: (in category 'private loading') ----- - directoryForLanguage: isoLanguage country: isoCountry create: createDir - "Try to locate the <prefs>/locale/<language>{/<country>} folder. - If createDir is set, create the path down to country or language, depending on wether it's specified.. - Return the directory for country or language depending on specification. - If neither exists, nil" - - "NaturalLanguageTranslator directoryForLanguage: 'es' country: nil create: true" - "NaturalLanguageTranslator directoryForLanguage: 'de' country: 'DE' create: true" - "NaturalLanguageTranslator directoryForLanguage: 'en' country: 'US' create: false" - "NaturalLanguageTranslator directoryForLanguage: 'en' country: nil create: true" - - "If this fails, there is nothing we can do about it here" - | localeDir countryDir languageDir | - localeDir := self localeDirCreate: createDir. - localeDir ifNil: [^nil]. - - isoCountry ifNil: [ - languageDir := localeDir directoryNamed: isoLanguage. - createDir - ifTrue: [languageDir assureExistence]. - ^languageDir exists - ifTrue: [languageDir] - ifFalse: [nil]]. - - countryDir := languageDir directoryNamed: isoCountry. - createDir - ifTrue: [countryDir assureExistence]. - - ^countryDir exists - ifTrue: [countryDir] - ifFalse: [nil]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>directoryForLocaleID:create: (in category 'private loading') ----- - directoryForLocaleID: localeID create: createDir - "Try to locate the <prefs>/locale/<language>{/<country>} folder. - If createDir is set, create the path down to country or language, depending on locale. - Return the directory for country or language depending on locale. - If neither exists, nil" - - "NaturalLanguageTranslator directoryForLanguage: 'de' country: nil readOnly: true" - "NaturalLanguageTranslator directoryForLanguage: 'de' country: 'DE' readOnly: true" - "NaturalLanguageTranslator directoryForLanguage: 'en' country: 'US' readOnly: false" - "NaturalLanguageTranslator directoryForLanguage: 'en' country: nil readOnly: true" - - ^self directoryForLanguage: localeID isoLanguage country: localeID isoCountry create: createDir! Item was removed: - ----- Method: NaturalLanguageTranslator class>>domainRegistered: (in category 'accessing') ----- - domainRegistered: aDomainName - "notify that new TextDomain is registered" - self translators do: [:each | each domainRegistered: aDomainName]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>domainUnregistered: (in category 'accessing') ----- - domainUnregistered: aDomainName - "notify that new TextDomain is unregistered" - self translators do: [:each | each domainUnregistered: aDomainName]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>fileReaderServicesForFile:suffix: (in category 'file-services') ----- - fileReaderServicesForFile: fullName suffix: suffix - "Answer the file services associated with given file" - ^ (suffix = self translationSuffix) | (suffix = '*') - ifTrue: [{self serviceMergeLanguageTranslations}] - ifFalse: [#()]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>initialize (in category 'class initialization') ----- - initialize - Smalltalk addToStartUpList: NaturalLanguageTranslator after: FileDirectory. - ! Item was removed: - ----- Method: NaturalLanguageTranslator class>>isoLanguage: (in category 'accessing') ----- - isoLanguage: isoLanguage - "Return the generic language translator as there is no information about the country code" - - ^self isoLanguage: isoLanguage isoCountry: nil! Item was removed: - ----- Method: NaturalLanguageTranslator class>>isoLanguage:isoCountry: (in category 'accessing') ----- - isoLanguage: isoLanguage isoCountry: isoCountry - ^self localeID: (LocaleID isoLanguage: isoLanguage isoCountry: isoCountry)! Item was removed: - ----- Method: NaturalLanguageTranslator class>>loadAvailableExternalLocales (in category 'private loading') ----- - loadAvailableExternalLocales - "private - register locales IDs based on the content of the <prefs>/locale/ directory" - | localeDir | - localeDir := self localeDirCreate: false. - localeDir ifNil: [^ #()]. - localeDir directoryNames - do: [:langDirName | - | langDir | - langDir := localeDir directoryNamed: langDirName. - (langDir fileNamesMatching: '*.' , self translationSuffix) - ifNotEmpty: [self loadTranslatorForIsoLanguage: langDirName isoCountry: nil]. - langDir directoryNames - do: [:countryDirName | - | countryDir | - countryDir := langDir directoryNamed: countryDirName. - (countryDir fileNamesMatching: '*.' , self translationSuffix) - ifNotEmpty: [self loadTranslatorForIsoLanguage: langDirName isoCountry: countryDirName] - ] - ]. - ! Item was removed: - ----- Method: NaturalLanguageTranslator class>>loadAvailableLocales (in category 'private loading') ----- - loadAvailableLocales - "This loads the default locale and all external locales" - - | defaultID | - defaultID := LocaleID current. - self cachedTranslations at: defaultID ifAbsent: [self localeID: defaultID]. - self loadAvailableExternalLocales.! Item was removed: - ----- Method: NaturalLanguageTranslator class>>loadExternalTranslationsFor: (in category 'private loading') ----- - loadExternalTranslationsFor: translator - "Try to load translations from external external files. - The files are located in the <prefs>/locale/<language>{/<country>} folder. - There can be more than one file for each location, so applications can install their own partial translation tables. All files in the specific folder are loaded." - - | translationDir | - translationDir := self directoryForLocaleID: translator localeID create: false. - translationDir ifNil: [ ^nil ]. - (translationDir fileNamesMatching: '*.' , self translationSuffix) - do: [:fileName | translator loadFromFileNamed: (translationDir fullNameFor: fileName)]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>loadForLocaleIsoString:fromGzippedMimeLiteral: (in category 'file-services') ----- - loadForLocaleIsoString: localeString fromGzippedMimeLiteral: mimeString - "merge the translation from the mime literal." - | stream localeID translator gs rbStream s currentPlatform | - s := Base64MimeConverter mimeDecodeToBytes: mimeString readStream. - s reset. - gs := GZipReadStream on: s. - rbStream := MultiByteBinaryOrTextStream with: gs contents asString. - rbStream converter: UTF8TextConverter new. - rbStream reset. - localeID := LocaleID isoString: localeString. - currentPlatform := Locale currentPlatform. - [Locale - currentPlatform: (Locale localeID: localeID). - stream := ReadStream on: rbStream contents] - ensure: [Locale currentPlatform: currentPlatform]. - translator := self localeID: localeID. - translator loadFromStream: stream. - LanguageEnvironment resetKnownEnvironments! Item was removed: - ----- Method: NaturalLanguageTranslator class>>loadTranslatorForIsoLanguage:isoCountry: (in category 'private loading') ----- - loadTranslatorForIsoLanguage: isoLanguage isoCountry: isoCountry - "private - load the translations from <prefs>/locale/ directory - the procedure is to assure the existence of a translator for the - given language/country and then load the external translations for this translator" - - | translator | - translator := self localeID: (LocaleID isoLanguage: isoLanguage isoCountry: isoCountry). - - self loadExternalTranslationsFor: translator! Item was removed: - ----- Method: NaturalLanguageTranslator class>>localeChanged (in category 'accessing') ----- - localeChanged - "notify some project starts to use this locale. - this facility may use the event to load translation data dynamically" - self current setCurrent - ! Item was removed: - ----- Method: NaturalLanguageTranslator class>>localeDirCreate: (in category 'private loading') ----- - localeDirCreate: createDir - "Try to locate the <prefs>/locale/ folder. - If createDir is set, try to create the path. - If it doesn't exist, return nil" - - "If this fails, there is nothing we can do about it here" - | prefDir localeDir | - (createDir not - and: [ExternalSettings preferenceDirectory isNil]) - ifTrue: [^ nil]. - - prefDir := ExternalSettings assuredPreferenceDirectory. - prefDir exists - ifFalse: [^nil]. - - - localeDir := prefDir directoryNamed: 'locale'. - createDir - ifTrue: [localeDir assureExistence]. - ^localeDir exists - ifTrue: [localeDir] - ifFalse: [nil]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>localeID: (in category 'accessing') ----- - localeID: localeID - ^ self cachedTranslations - at: localeID - ifAbsentPut: [self new localeID: localeID]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>mergeTranslationFileNamed: (in category 'file-services') ----- - mergeTranslationFileNamed: fileFullNameString - "merge the translation in the file named fileFullNameString" - - FileStream readOnlyFileNamed: fileFullNameString do: [:stream | - | localeID translator | - localeID := LocaleID isoString: stream localName sansPeriodSuffix. - translator := self localeID: localeID. - translator loadFromStream: stream]. - LanguageEnvironment resetKnownEnvironments. - - ! Item was removed: - ----- Method: NaturalLanguageTranslator class>>privateStartUp (in category 'class initialization') ----- - privateStartUp - self resetCaches. - GetTextTranslator privateStartUp. - InternalTranslator privateStartUp. - self localeChanged.! Item was removed: - ----- Method: NaturalLanguageTranslator class>>registerPhrase: (in category 'private') ----- - registerPhrase: phrase - "Using a Dictionary so we can lookup existing string instead of creating needless copies when loading a translation." - self allKnownPhrases at: phrase put: phrase! Item was removed: - ----- Method: NaturalLanguageTranslator class>>registeredPhraseFor: (in category 'private') ----- - registeredPhraseFor: phrase - "Using a Dictionary so we can lookup existing string instead of creating needless copies when loading a translation." - ^self allKnownPhrases at: phrase ifAbsentPut: [phrase]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>removeLocaleID: (in category 'accessing') ----- - removeLocaleID: localeID - "self removeLocaleID: (LocaleID isoString: 'ja-kids')" - ^ self translators - removeKey: localeID - ifAbsent: []! Item was removed: - ----- Method: NaturalLanguageTranslator class>>resetCaches (in category 'class initialization') ----- - resetCaches - Translators := nil.! Item was removed: - ----- Method: NaturalLanguageTranslator class>>serviceMergeLanguageTranslations (in category 'file-services') ----- - serviceMergeLanguageTranslations - "Answer a service for merging of translation files" - ^ SimpleServiceEntry - provider: self - label: 'merge the translation file' - selector: #mergeTranslationFileNamed: - description: 'merge the translation file into the language named like the file' - buttonLabel: 'merge'! Item was removed: - ----- Method: NaturalLanguageTranslator class>>services (in category 'file-services') ----- - services - "Answer potential file services associated with this class" - ^ {self serviceMergeLanguageTranslations}! Item was removed: - ----- Method: NaturalLanguageTranslator class>>startUp: (in category 'class initialization') ----- - startUp: resuming - resuming - ifFalse: [^ self]. - self privateStartUp.! Item was removed: - ----- Method: NaturalLanguageTranslator class>>translate:toLocaleID: (in category 'translation') ----- - translate: aString toLocaleID: localeID - "translate for default domain" - ^ (self availableForLocaleID: localeID) - translate: aString! Item was removed: - ----- Method: NaturalLanguageTranslator class>>translate:toLocaleID:inDomain: (in category 'translation') ----- - translate: aString toLocaleID: localeID inDomain: aDomainName - ^ (self availableForLocaleID: localeID) - translate: aString inDomain: aDomainName! Item was removed: - ----- Method: NaturalLanguageTranslator class>>translateWithoutLoading:toLocaleID: (in category 'translation') ----- - translateWithoutLoading: aString toLocaleID: localeID - "translate for default domain" - ^self translateWithoutLoading: aString toLocaleID: localeID inDomain: TextDomainManager defaultDomain. - ! Item was removed: - ----- Method: NaturalLanguageTranslator class>>translateWithoutLoading:toLocaleID:inDomain: (in category 'translation') ----- - translateWithoutLoading: aString toLocaleID: localeID inDomain: aDomainName - "try to translate with small footprint: - if GetTextTranslator hasn't loaded MO, try to use InternalTranslator. - if InternalTranslator isn't available, then actually load MO and use it" - | translator | - translator := self availableForLocaleID: localeID. - (translator isDomainLoaded: aDomainName) ifFalse: [ - (InternalTranslator availableLanguageLocaleIDs includes: localeID) - ifTrue: [translator := InternalTranslator localeID: localeID]. - ]. - ^translator translate: aString inDomain: aDomainName! Item was removed: - ----- Method: NaturalLanguageTranslator class>>translationSuffix (in category 'private') ----- - translationSuffix - ^'translation'! Item was removed: - ----- Method: NaturalLanguageTranslator class>>translators (in category 'accessing') ----- - translators - ^ Translators ifNil: [Translators := Dictionary new] ! Item was removed: - ----- Method: NaturalLanguageTranslator>>atRandom (in category 'accessing') ----- - atRandom - - self subclassResponsibility. - ! Item was removed: - ----- Method: NaturalLanguageTranslator>>checkPhrase:translation: (in category 'translation') ----- - checkPhrase: phrase translation: translation! Item was removed: - ----- Method: NaturalLanguageTranslator>>defaultBackgroundColor (in category 'user interface') ----- - defaultBackgroundColor - "answer the receiver's defaultBackgroundColor for views" - ^ Color cyan! Item was removed: - ----- Method: NaturalLanguageTranslator>>displayLanguage (in category 'accessing') ----- - displayLanguage - ^ id displayLanguage! Item was removed: - ----- Method: NaturalLanguageTranslator>>displayName (in category 'accessing') ----- - displayName - ^ id displayName! Item was removed: - ----- Method: NaturalLanguageTranslator>>domainRegistered: (in category 'accessing') ----- - domainRegistered: aDomainName - "notify that new TextDomain is registered. Concrete subclass can responds to this event if needed"! Item was removed: - ----- Method: NaturalLanguageTranslator>>domainUnregistered: (in category 'accessing') ----- - domainUnregistered: aDomainName - "notify that new TextDomain is unregistered. Concrete subclass can responds to this event if needed"! Item was removed: - ----- Method: NaturalLanguageTranslator>>fileOutHeader (in category 'fileIn/fileOut') ----- - fileOutHeader - ^ '''Translation dictionary'''! Item was removed: - ----- Method: NaturalLanguageTranslator>>fileOutHeaderOn: (in category 'fileIn/fileOut') ----- - fileOutHeaderOn: aStream - aStream nextChunkPut: self fileOutHeader; - cr. - aStream timeStamp; cr. - aStream nextPut: $!!. - aStream nextChunkPut: '(' , self class name , ' localeID: ' , id storeString , ')'. - aStream cr! Item was removed: - ----- Method: NaturalLanguageTranslator>>fileOutOn: (in category 'fileIn/fileOut') ----- - fileOutOn: aStream - "self current fileOutOn: Transcript. Transcript endEntry" - self fileOutHeaderOn: aStream. - self fileOutOn: aStream keys: nil! Item was removed: - ----- Method: NaturalLanguageTranslator>>fileOutOn:keys: (in category 'fileIn/fileOut') ----- - fileOutOn: aStream keys: keys - "self current fileOutOn: Transcript. Transcript endEntry" - (keys - ifNil: [generics keys asArray sort]) - do: [:key | self - nextChunkPut: (generics associationAt: key) - on: aStream]. - keys - ifNil: [self untranslated - do: [:each | self nextChunkPut: each -> '' on: aStream]]. - aStream nextPut: $!!; - cr! Item was removed: - ----- Method: NaturalLanguageTranslator>>generics (in category 'private') ----- - generics - ^generics ifNil: [generics := Dictionary new]! Item was removed: - ----- Method: NaturalLanguageTranslator>>isDomainLoaded: (in category 'accessing') ----- - isDomainLoaded: aDomainName - "ask if translation dictionary for the domain has been loaded and available now for use" - self subclassResponsibility.! Item was removed: - ----- Method: NaturalLanguageTranslator>>isoCountry (in category 'accessing') ----- - isoCountry - ^self localeID isoCountry! Item was removed: - ----- Method: NaturalLanguageTranslator>>isoLanguage (in category 'accessing') ----- - isoLanguage - ^self localeID isoLanguage! Item was removed: - ----- Method: NaturalLanguageTranslator>>loadFromFileNamed: (in category 'private store-retrieve') ----- - loadFromFileNamed: fileNameString - "Load translations from an external file" - - FileStream readOnlyFileNamed: fileNameString do: [ :file | - self loadFromStream: file ]. - self changed: #translations. - self changed: #untranslated. - ! Item was removed: - ----- Method: NaturalLanguageTranslator>>loadFromRefStream: (in category 'private store-retrieve') ----- - loadFromRefStream: stream - "Load translations from an external file" - | loadedArray refStream | - refStream := ReferenceStream on: stream. - [loadedArray := refStream next] - ensure: [refStream close]. - self processExternalObject: loadedArray ! Item was removed: - ----- Method: NaturalLanguageTranslator>>loadFromStream: (in category 'private store-retrieve') ----- - loadFromStream: stream - "Load translations from an external file" - | header isFileIn | - header := '''Translation dictionary'''. - isFileIn := (stream next: header size) - = header. - stream reset. - isFileIn - ifTrue: [stream fileInAnnouncing: 'Loading ' translated, stream localName] - ifFalse: [self loadFromRefStream: stream]! Item was removed: - ----- Method: NaturalLanguageTranslator>>localeID (in category 'accessing') ----- - localeID - ^id! Item was removed: - ----- Method: NaturalLanguageTranslator>>localeID: (in category 'initialize-release') ----- - localeID: anID - id := anID! Item was removed: - ----- Method: NaturalLanguageTranslator>>mergeTranslations: (in category 'private store-retrieve') ----- - mergeTranslations: newTranslations - "Merge a new set of translations into the exiting table. - Overwrites existing entries." - - newTranslations keysAndValuesDo: [:key :value | - self rawPhrase: (self class registeredPhraseFor: key) translation: value]. - self changed: #translations. - self changed: #untranslated.! Item was removed: - ----- Method: NaturalLanguageTranslator>>nextChunkPut:on: (in category 'fileIn/fileOut') ----- - nextChunkPut: anObject on: aStream - | i remainder terminator | - terminator := $!!. - remainder := anObject storeString. - [(i := remainder indexOf: terminator) = 0] - whileFalse: [aStream - nextPutAll: (remainder copyFrom: 1 to: i). - aStream nextPut: terminator. - "double imbedded terminators" - remainder := remainder copyFrom: i + 1 to: remainder size]. - aStream nextPutAll: remainder. - aStream nextPut: terminator; cr.! Item was removed: - ----- Method: NaturalLanguageTranslator>>phrase:translation: (in category 'translation') ----- - phrase: phraseString translation: translationString - self generics at: phraseString put: translationString asString. - self changed: #translations. - self changed: #untranslated.! Item was removed: - ----- Method: NaturalLanguageTranslator>>printOn: (in category 'printing') ----- - printOn: aStream - aStream nextPutAll: self class name; nextPut: $(; print: self localeID; nextPut: $)! Item was removed: - ----- Method: NaturalLanguageTranslator>>processExternalObject: (in category 'private store-retrieve') ----- - processExternalObject: anArray - "pivate - process the external object" - - "new format -> {translations. untranslated}" - - anArray second do: [:each | self class registerPhrase: each]. - - self mergeTranslations: anArray first! Item was removed: - ----- Method: NaturalLanguageTranslator>>rawPhrase:translation: (in category 'translation') ----- - rawPhrase: phraseString translation: translationString - self generics at: phraseString put: translationString asString. - ! Item was removed: - ----- Method: NaturalLanguageTranslator>>rawRemoveUntranslated: (in category 'translation') ----- - rawRemoveUntranslated: untranslated - - self class allKnownPhrases removeKey: untranslated ifAbsent: []. - self changed: #untranslated.! Item was removed: - ----- Method: NaturalLanguageTranslator>>removeTranslationFor: (in category 'translation') ----- - removeTranslationFor: phraseString - self generics removeKey: phraseString ifAbsent: []. - self changed: #translations. - self changed: #untranslated.! Item was removed: - ----- Method: NaturalLanguageTranslator>>removeUntranslated: (in category 'translation') ----- - removeUntranslated: untranslated - - self class allKnownPhrases removeKey: untranslated ifAbsent: []. - ! Item was removed: - ----- Method: NaturalLanguageTranslator>>saveToFileNamed: (in category 'private store-retrieve') ----- - saveToFileNamed: fileNameString - "save the receiver's translations to a file named fileNameString" - | stream | - "Set true if you need to save as binary" - false - ifTrue: [stream := ReferenceStream fileNamed: fileNameString. - stream nextPut: {self translations. self untranslated}. - stream close. - ^ self]. - stream := FileStream fileNamed: fileNameString. - [self fileOutOn: stream] - ensure: [stream close]! Item was removed: - ----- Method: NaturalLanguageTranslator>>scanFrom: (in category 'fileIn/fileOut') ----- - scanFrom: aStream - "Read a definition of dictionary. - Make sure current locale corresponds my locale id" - | newTranslations currentPlatform | - newTranslations := Dictionary new. - currentPlatform := Locale currentPlatform. - [ | aString assoc | - Locale - currentPlatform: (Locale localeID: id). - [aString := aStream nextChunk withSqueakLineEndings. - aString size > 0] - whileTrue: [assoc := Compiler evaluate: aString. - assoc value = '' - ifTrue: [self class registerPhrase: assoc key] - ifFalse: [newTranslations add: assoc]]] - ensure: [Locale currentPlatform: currentPlatform]. - self mergeTranslations: newTranslations! Item was removed: - ----- Method: NaturalLanguageTranslator>>setCurrent (in category 'language switching') ----- - setCurrent - "notify locale of the translator become current" - ! Item was removed: - ----- Method: NaturalLanguageTranslator>>translate: (in category 'translation') ----- - translate: aString - ^self translate: aString - inDomain: TextDomainManager defaultDomain! Item was removed: - ----- Method: NaturalLanguageTranslator>>translate:in: (in category 'translation') ----- - translate: aString in: aContext! Item was removed: - ----- Method: NaturalLanguageTranslator>>translate:inDomain: (in category 'translation') ----- - translate: aString inDomain: aDomainName - ^ aString! Item was removed: - ----- Method: NaturalLanguageTranslator>>translationFor: (in category 'translation') ----- - translationFor: aString - ^self translate: aString! Item was removed: - ----- Method: NaturalLanguageTranslator>>translations (in category 'accessing') ----- - translations - ^self generics! Item was removed: - ----- Method: NaturalLanguageTranslator>>untranslated (in category 'accessing') ----- - untranslated - | translations | - translations := self translations. - ^self class allKnownPhrases reject: [:each | translations includesKey: each]! Item was removed: - ----- Method: NaturalLanguageTranslator>>writeAsMimeString (in category 'fileIn/fileOut') ----- - writeAsMimeString - - | fileName fileStream tmpStream s2 gzs | - tmpStream := MultiByteBinaryOrTextStream on: ''. - tmpStream converter: UTF8TextConverter new. - self fileOutOn: tmpStream. - s2 := RWBinaryOrTextStream on: ''. - gzs := GZipWriteStream on: s2. - tmpStream reset. - gzs nextPutAll: (tmpStream binary contentsOfEntireFile asString) contents. - gzs close. - s2 reset. - - fileName := id isoString, '.translation.gz.mime'. - fileStream := FileStream newFileNamed: fileName. - fileStream nextPutAll: (Base64MimeConverter mimeEncode: s2) contents. - fileStream close. - !
1
0
0
0
The Trunk: GetText-edc.21.mcz
by commits@source.squeak.org
29 Mar '12
29 Mar '12
Edgar J. De Cleene uploaded a new version of GetText to project The Trunk:
http://source.squeak.org/trunk/GetText-edc.21.mcz
==================== Summary ==================== Name: GetText-edc.21 Author: edc Time: 29 March 2012, 8:48:03.631 am UUID: b6d73dcd-1e45-4ceb-b1ed-98caccac3efa Ancestors: GetText-edc.18, GetText-edc.20 More cleanup following Nico suggestions. Can't delete bad versions of trunk... =============== Diff against GetText-edc.18 =============== Item was removed: - ----- Method: GetTextExporter>>export: (in category 'exporting') ----- - export: aLanguage - language := aLanguage. - [stream := FileStream forceNewFileNamed: self defaultFileName. - stream lineEndConvention: #lf. - stream converter: UTF8TextConverter new. - self exportHeader. - self exportTranslations. - self exportUntranslated] - ensure: [stream close]! Item was removed: - ----- Method: GetTextExporter>>exportTranslations (in category 'private-translations') ----- - exportTranslations - | keys size | - keys := language translations keys asArray sort. - size := keys size. - ProgressInitiationException - display: 'Exporting translated phrases as a gettext file.' - during: [:bar | 1 - to: size - do: [:index | - self - exportPhrase: (keys at: index) - translation: (language translations - at: (keys at: index)). - bar value: index / size]]! Item was removed: - ----- Method: GetTextExporter>>exportUntranslated (in category 'private-translations') ----- - exportUntranslated - | keys | - keys := language untranslated keys asArray sort. - ProgressInitiationException - display: 'Exporting untranslated phrases as a gettext file.' - at: Sensor cursorPoint - from: 1 - to: keys size - during: [:bar | 1 - to: keys size - do: [:index | - self - exportPhrase: (keys at: index) - translation: ''. - bar value: index]]! Item was removed: - Object subclass: #GetTextExporter2 - instanceVariableNames: 'stream' - classVariableNames: '' - poolDictionaries: '' - category: 'GetText-Editor'! - - !GetTextExporter2 commentStamp: '<historical>' 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: (InternalTranslator newLocaleID: LocaleID current). - - "Export all gettext template and po files." - GetTextExporter2 exportAll. - - "To register a class category as a new domain" - TextDomainManager registerClassCategory: 'Morphic-Books' domain: 'Book'. - "Remove a class category" - TextDomainManager unregisterClassCategory: 'Morphic-Books'.! Item was removed: - ----- Method: GetTextExporter2 class>>coverageStatus (in category 'utilities') ----- - coverageStatus - "self coverageStatus" - | keys diff | - keys := self keys. - diff := InternalTranslator allKnownPhrases keys difference: keys. - Transcript cr; show: 'Detected keywords by GetTextExporter2: ' , keys size printString. - Transcript cr; show: 'All known phrases in InternalTranslator: ' , InternalTranslator allKnownPhrases size printString. - Transcript cr; show: 'Coverage: ' , (keys size / InternalTranslator allKnownPhrases size * 100.0) printString , '%'. - diff inspect! Item was removed: - ----- Method: GetTextExporter2 class>>exportAll (in category 'utilities') ----- - exportAll - "GetTextExporter2 exportAll" - self new exportTemplate. - InternalTranslator availableLanguageLocaleIDs - do: [:each | self new exportTranslator: each translator]! Item was removed: - ----- Method: GetTextExporter2 class>>exportTemplate (in category 'utilities') ----- - exportTemplate - "GetTextExporter2 exportTemplate" - self new exportTemplate.! Item was removed: - ----- Method: GetTextExporter2 class>>keys (in category 'utilities') ----- - keys - | categories | - categories := Dictionary new. - GetTextExporter2 new appendTranslations: categories. - ^ categories values - inject: Set new - into: [:set :next | set addAll: next keys; - yourself]! Item was removed: - ----- Method: GetTextExporter2 class>>listAllHelp (in category 'utilities') ----- - listAllHelp - "self listAllHelp" - | spec specs oCatalog flap flapSelectors allKeys oCatalogHelp flapHelp | - oCatalog := Dictionary new. - Morph withAllSubclasses - do: [:aClass | (aClass class includesSelector: #descriptionForPartsBin) - ifTrue: [spec := aClass descriptionForPartsBin. - oCatalog at: spec formalName put: spec documentation]]. - Morph withAllSubclasses - do: [:aClass | (aClass class includesSelector: #supplementaryPartsDescriptions) - ifTrue: [specs := aClass supplementaryPartsDescriptions. - specs - do: [:each | oCatalog at: each formalName put: each documentation]]]. - flap := Dictionary new. - flapSelectors := #(#defaultsQuadsDefiningPlugInSuppliesFlap #defaultsQuadsDefiningStackToolsFlap #defaultsQuadsDefiningSuppliesFlap #defaultsQuadsDefiningToolsFlap #defaultsQuadsDefiningWidgetsFlap #defaultsQuadsDefiningScriptingFlap ). - flapSelectors - do: [:selector | - specs := Flaps perform: selector. - specs - do: [:each | flap at: each third put: each fourth]]. - allKeys := oCatalog keys intersection: flap keys. - allKeys asArray sort - do: [:each | - oCatalogHelp := oCatalog - at: each - ifAbsent: ['']. - flapHelp := flap - at: each - ifAbsent: ['']. - oCatalogHelp = flapHelp - ifFalse: [Transcript cr; show: 'Name: ' , each. - Transcript cr; show: 'O: ' , oCatalogHelp. - Transcript cr; show: 'F: ' , flapHelp. - Transcript cr. - - ]]! Item was removed: - ----- Method: GetTextExporter2 class>>verifyExport (in category 'utilities') ----- - verifyExport - "Same as #verifyMsgID: but it writes / reads .po files actually" - "GetTextExporter2 verifyExport" - "InternalTranslator removeLocaleID: (LocaleID isoString: 'test-US')" - | src dst localeID | - localeID := LocaleID isoString: 'test-US'. - self verifyMsgID: localeID. - src := localeID translator. - GetTextExporter2 new exportTranslator: src. - InternalTranslator removeLocaleID: localeID. - dst := localeID translator. - GetTextImporter import: dst allDirectory: FileDirectory default! Item was removed: - ----- Method: GetTextExporter2 class>>verifyMsgID: (in category 'utilities') ----- - verifyMsgID: localeID - "GetTextExporter2 verifyMsgID: (LocaleID isoString: 'test-US')" - "InternalTranslator removeLocaleID: (LocaleID isoString: 'test-US')" - "Test gettext keyword extract function without file I/O. - A language named <langName> will be made. And - all possible translated words are shown with extra X charactor like - 'XwordX' in the language." - | src | - InternalTranslator removeLocaleID: localeID. - src := localeID translator. - self keys - do: [:key | src generics at: key put: 'X' , key , 'X']! Item was removed: - ----- Method: GetTextExporter2>>appendStringReceivers:into: (in category 'private') ----- - appendStringReceivers: aSymbol into: domains - | literals references domainName methodReference keywords found | - - found := TranslatedReceiverFinder new stringReceiversWithContext: aSymbol. - found do: [ :assoc | - methodReference := assoc key. - keywords := assoc value. - domainName := self getTextDomainForPackage: - (PackageOrganizer default packageOfMethod: methodReference ifNone: [TextDomainManager defaultDomain]). - literals := domains at: domainName ifAbsentPut: [Dictionary new]. - keywords do: [ :literal | - references := literals at: literal ifAbsentPut: [OrderedCollection new]. - references add: methodReference. - ]. - ]. - ! Item was removed: - ----- Method: GetTextExporter2>>appendTranslations: (in category 'exporting') ----- - appendTranslations: domains - self appendStringReceivers: #translated into: domains. - self appendStringReceivers: #translatedNoop into: domains. - self appendVocabularies: domains. - ! Item was removed: - ----- Method: GetTextExporter2>>appendVocabularies: (in category 'private') ----- - appendVocabularies: domains - | literalsForDomain references domainName methodReference | - - EToyVocabulary allPhrasesWithContextToTranslate do: [ :r | - methodReference := (MethodReference new setStandardClass: (r second) methodSymbol: (r third)). - "domainName := self getTextDomainForPackage: (PackageOrganizer default packageOfMethod: methodReference)". - domainName := 'Etoys-Tiles'. - literalsForDomain := domains at: domainName ifAbsentPut: [Dictionary new]. - r fourth do: [ :literal | - references := literalsForDomain at: literal ifAbsentPut: [OrderedCollection new]. - references add: methodReference. - ]. - ]. - ! Item was removed: - ----- Method: GetTextExporter2>>createExtraInformation (in category 'private') ----- - createExtraInformation - | extras | - extras := OrderedCollection new. - #( - 'Language name as you''d like it to appear in the Languages menu' 'Language-Name' - 'Scale to apply to font size (2 for twice as large)' 'Font-Scale' - 'Directionality of language' 'Language-Direction' - 'Use this if you do not want any of the text to be bolded, for legibility' 'Suppress-Bold' - 'Font to use on a Windows system' 'Win-Font' - 'Font to use on a Mac system' 'Mac-Font' - 'Font to use on a Linux system' 'Linux-Font') pairsDo: [:first :second | - extras add: (Array with: '' with: first with: second). - ]. - ^ extras! Item was removed: - ----- Method: GetTextExporter2>>createHeaders (in category 'private') ----- - createHeaders - | headers | - headers := OrderedCollection new. - headers add: 'Project-Id-Version' -> 'eToys'. - headers add: 'POT-Creation-Date' -> self currentDateAndTime. - headers add: 'PO-Revision-Date' -> self currentDateAndTime. - headers add: 'Last-Translator' -> ''. - headers add: 'Language-Team' -> ''. - headers add: 'MIME-Version' -> '1.0'. - headers add: 'Content-Type' -> ('text/plain; charset=', stream converter class encodingNames first). - headers add: 'Content-Transfer-Encoding' -> '8bit'. - headers add: 'X-Etoys-SystemVersion' -> (SystemVersion current asString). - ^ headers! Item was removed: - ----- Method: GetTextExporter2>>currentDateAndTime (in category 'private') ----- - currentDateAndTime - ^ String - streamContents: [:aStream | - aStream nextPutAll: Date today yyyymmdd; - space. - Time now - print24: true - showSeconds: false - on: aStream. - aStream nextPutAll: '-0000']! Item was removed: - ----- Method: GetTextExporter2>>dirNameCategory:translator: (in category 'exporting') ----- - dirNameCategory: category translator: translator - "Answer a file name for the category. Make one if it is not exist yet. - Make template file name if translator is nil" - "self new dirNameCategory: 'Morphic-Scripting Support' translator: - NaturalLanguageTranslator current" - "self new dirNameCategory: 'Morphic-Scripting Support' translator: nil" - | safeCategory fileName dirName pathName | - safeCategory := category copyReplaceAll: ' ' with: ':='. - fileName := translator - ifNil: [safeCategory , '.pot'] - ifNotNil: [translator localeID posixName , '.po']. - dirName := (safeCategory findTokens: '-') - inject: 'po' - into: [:aString :next | aString , FileDirectory slash , next]. - pathName := dirName , FileDirectory slash , fileName. - (FileDirectory default directoryNamed: dirName) assureExistence. - ^ pathName! Item was removed: - ----- Method: GetTextExporter2>>dirNameDomain:translator: (in category 'exporting') ----- - dirNameDomain: domain translator: translator - "Answer a file name for the domain. Make one if it is not exist yet. - Make template file name if translator is nil" - "self new dirNameDomain: 'etoys' translator: - NaturalLanguageTranslator current" - "self new dirNameDomain: 'etoys' translator: nil" - | fileName dirName pathName | - "safeCategory := category copyReplaceAll: ' ' with: ':='." - fileName := translator - ifNil: [domain , '.pot'] - ifNotNil: [translator localeID posixName , '.po']. - dirName := 'po', FileDirectory slash, domain. - pathName := dirName , FileDirectory slash , fileName. - (FileDirectory default directoryNamed: dirName) assureExistence. - ^ pathName! Item was removed: - ----- Method: GetTextExporter2>>export:translator:domain: (in category 'private') ----- - export: literals translator: translator domain: domainName - | fileName | - "Export a gettext file in a category. literals is a dictionary of keyword -> #(MethodReference...) in the textDomain." - fileName := self dirNameDomain: domainName translator: translator. - [stream := FileStream forceNewFileNamed: fileName. - stream lineEndConvention: #lf. - stream converter: UTF8TextConverter new. - self exportHeader: domainName. - self exportInformation: self createExtraInformation. - self exportBody: literals translator: translator] - ensure: [stream close]! Item was removed: - ----- Method: GetTextExporter2>>exportBody:translator: (in category 'file out') ----- - exportBody: literals translator: translator - "Export a gettext file body. literals is a dictionary of keyword -> - #(MethodReference...) in the textDomain." - "Build {sortKey. comment. msgid } to optimize sorting (getting category is - too slow). - If there are two or more methods for a mgsid, only first method - (alphabetical) is used for sorting." - | sorted msgid sortedMethods category sortKey comment triplets commentUnderLined | - triplets := literals associations - collect: [:assoc | - msgid := assoc key. - sortedMethods := assoc value asArray sort. - category := (Smalltalk at: sortedMethods first classSymbol) category asString. - sortKey := category , ',' , sortedMethods first printString , ',' , msgid. - comment := (sortedMethods - collect: [:each | each actualClass asString , '>>' , each methodSymbol asString]) - inject: category - into: [:result :methodName | result , ',' , methodName]. - "Replace white spaces to := because gettext tool might - replace a space to a new line some times, and it makes - difficult to take a diff." - commentUnderLined := comment copyReplaceAll: ' ' with: ':='. - Array - with: sortKey - with: commentUnderLined - with: msgid]. - "Sort and output the words" - sorted := triplets - sort: [:a :b | a first <= b first]. - sorted - do: [:triplet | - comment := triplet second. - msgid := triplet third. - self exportRecordHeader: comment. - self - exportPhrase: msgid - translation: (self translationFor: msgid in: translator)]! Item was removed: - ----- Method: GetTextExporter2>>exportHeader: (in category 'private') ----- - exportHeader: domainName - | headers | - self exportTag: 'msgid' msg: ''. - self exportTag: 'msgstr' msg: ''. - headers := self createHeaders. - headers add: 'X-Etoys-Domain' -> domainName. - headers do: [:each | self exportHeaderLineKey: each key value: each value]. - stream cr; cr! Item was removed: - ----- Method: GetTextExporter2>>exportHeaderLineKey:value: (in category 'private') ----- - exportHeaderLineKey: keyString value: valueString - stream nextPut: $"; - nextPutAll: keyString; - nextPut: $:; - space; - nextPutAll: valueString; - nextPutAll: '\n'; - nextPut: $"; - cr.! Item was removed: - ----- Method: GetTextExporter2>>exportInformation: (in category 'private') ----- - exportInformation: anOrderedCollection - anOrderedCollection do: [:each | - self exportRecordHeader: each second. - self exportPhrase: each third translation: '']. - stream cr.! Item was removed: - ----- Method: GetTextExporter2>>exportPhrase:translation: (in category 'private') ----- - exportPhrase: phraseString translation: translationString - | normalizedTrans tmp transStartsWithCR transEndsWithCR| - phraseString isEmpty - ifTrue: [^ self]. - self exportTag: 'msgid' msg: phraseString. - translationString size = 0 ifTrue: [ - normalizedTrans := '' - ] ifFalse: [ - transEndsWithCR := translationString last = (Character cr). - phraseString last = (Character cr) ifTrue: [ - transEndsWithCR ifTrue: [ - normalizedTrans := translationString - ] ifFalse: [ - normalizedTrans := translationString , String cr - ] - ] ifFalse: [ - transEndsWithCR ifTrue: [ - normalizedTrans := translationString allButLast - ] ifFalse: [ - normalizedTrans := translationString - ] - ]. - transStartsWithCR := normalizedTrans first = (Character cr). - phraseString first = (Character cr) ifTrue: [ - transStartsWithCR ifFalse: [ - tmp := (Character cr asString) , normalizedTrans. - normalizedTrans := tmp. - ] - ] ifFalse: [ - transStartsWithCR ifTrue: [ - normalizedTrans := normalizedTrans allButFirst - ] - ] - ]. - self exportTag: 'msgstr' msg: normalizedTrans. - stream cr! Item was removed: - ----- Method: GetTextExporter2>>exportRecordHeader: (in category 'private') ----- - exportRecordHeader: context - stream - nextPutAll: '#: '; - nextPutAll: context; - cr.! Item was removed: - ----- Method: GetTextExporter2>>exportTag:msg: (in category 'private') ----- - exportTag: tag msg: aString - | pos end line | - (aString indexOf: Character cr) - = 0 - ifTrue: [self exportTag: tag singleLine: aString] - ifFalse: [self exportTag: tag singleLine: ''. - pos := 1. - end := 0. - [end < aString size] - whileTrue: [end := aString indexOf: Character cr startingAt: pos. - end = 0 - ifTrue: [end := aString size]. - line := aString copyFrom: pos to: end. - stream nextPut: $"; - - nextPutAll: (self formatString: line); - nextPut: $"; - cr. - pos := end + 1]]! Item was removed: - ----- Method: GetTextExporter2>>exportTag:singleLine: (in category 'private') ----- - exportTag: tag singleLine: aString - stream nextPutAll: tag. - stream space. - stream nextPut: $". - stream - nextPutAll: (self formatString: aString). - stream nextPut: $". - stream cr! Item was removed: - ----- Method: GetTextExporter2>>exportTemplate (in category 'exporting') ----- - exportTemplate - "GetTextExporter2 new exportTemplate" - self exportTranslator: nil! Item was removed: - ----- Method: GetTextExporter2>>exportTranslator: (in category 'exporting') ----- - exportTranslator: translator - "Export translation files. the file extention is 'po', or 'pot' if translator is nil " - "GetTextExporter2 new exportTranslator: NaturalLanguageTranslator current " - | domains | - domains := Dictionary new. - self appendTranslations: domains. - domains - keysAndValuesDo: [:domainName :value | - self - export: value - translator: translator - domain: domainName]! Item was removed: - ----- Method: GetTextExporter2>>formatReplacements (in category 'private') ----- - formatReplacements - | replacements | - replacements := OrderedCollection new. - replacements add: '\' -> '\\'. - replacements add: String cr -> '\n'. - replacements add: String tab -> '\t'. - replacements add: '"' -> '\"'. - ^ replacements! Item was removed: - ----- Method: GetTextExporter2>>formatString: (in category 'private') ----- - formatString: aString - | result | - result := aString. - self formatReplacements - do: [:each | result := result copyReplaceAll: each key with: each value]. - ^ result! Item was removed: - ----- Method: GetTextExporter2>>getTextDomainForPackage: (in category 'as yet unclassified') ----- - getTextDomainForPackage: aPackageInfo - ^TextDomainManager domainForPackage: aPackageInfo! Item was removed: - ----- Method: GetTextExporter2>>stream (in category 'accessing') ----- - stream - ^ stream! Item was removed: - ----- Method: GetTextExporter2>>stream: (in category 'accessing') ----- - stream: aStream - stream := aStream! Item was removed: - ----- Method: GetTextExporter2>>translationFor:in: (in category 'private') ----- - translationFor: aKey in: translator - translator ifNil: [^'']. - translator translations at: aKey ifPresent: [:s | ^s]. - "If we have old camelCase translations, make space-separated words" - translator translations at: aKey toCamelCase ifPresent: [:s | - (s includes: Character space) ifTrue: [^s]. - ^s fromCamelCase]. - ^''! Item was removed: - Object subclass: #ISOLanguageDefinition - instanceVariableNames: 'iso3 iso2 iso3Alternate language' - classVariableNames: 'ISO2Countries ISO2Table ISO3Countries ISO3Table' - poolDictionaries: '' - category: 'GetText-Localization'! Item was removed: - ----- Method: ISOLanguageDefinition class>>buildIso3166CodesTables (in category 'private') ----- - buildIso3166CodesTables - "ISOLanguageDefinition buildIso3166CodesTables" - | rawdata stream country isoa2 isoa3 unNumeric macName macCode windowsName windowsCode empty table | - rawdata := self iso3166Codes. - table := OrderedCollection new: 200. - stream := rawdata readStream. - empty := 160 asCharacter asString. - [stream atEnd] whileFalse: - [country := stream nextLine. - isoa2 := stream nextLine. - isoa3 := stream nextLine. - unNumeric := stream nextLine. - windowsName := stream nextLine. - windowsName = empty ifTrue: [windowsName := nil]. - windowsCode := stream nextLine. - windowsCode = empty ifTrue: [windowsCode := nil]. - macName := stream nextLine. - macName = empty ifTrue: [macName := nil]. - macCode := stream nextLine. - macCode = empty ifTrue: [macCode := nil]. - table add: { country. isoa2. isoa3. unNumeric. windowsName. windowsCode. macName. macCode. }]. - ^table! Item was removed: - ----- Method: ISOLanguageDefinition class>>extraCountryDefinitions (in category 'private') ----- - extraCountryDefinitions - ^{ - {'Kids'. 'KIDS'. 'KIDS'.}. - }! Item was removed: - ----- Method: ISOLanguageDefinition class>>extraISO3Definitions (in category 'private') ----- - extraISO3Definitions - - ^self readISOLanguagesFrom: 'jpk Japanese (Kids) - ' readStream! Item was removed: - ----- Method: ISOLanguageDefinition class>>initISO3LanguageTable (in category 'private') ----- - initISO3LanguageTable - "ISOLanguageDefinition initIso3LanguageTable" - - | table | - table := ISOLanguageDefinition readISOLanguagesFrom: ISOLanguageDefinition isoLanguages readStream. - table addAll: self extraISO3Definitions. - ^table! Item was removed: - ----- Method: ISOLanguageDefinition class>>initISOCountries (in category 'private') ----- - initISOCountries - "ISOLanguageDefinition initISOCountries" - | iso3166Table | - iso3166Table := ISOLanguageDefinition buildIso3166CodesTables. - ISO2Countries := Dictionary new. - ISO3Countries := Dictionary new. - iso3166Table do: [:entry | - ISO2Countries at: (entry at: 2) put: (entry at: 1). - ISO3Countries at: (entry at: 3) put: (entry at: 1)]. - self extraCountryDefinitions do: [:entry | - ISO2Countries at: (entry at: 2) put: (entry at: 1). - ISO3Countries at: (entry at: 3) put: (entry at: 1)]! Item was removed: - ----- Method: ISOLanguageDefinition class>>initialize (in category 'class initialization') ----- - initialize - "ISOLanguageDefinition initialize" - - ISO3Table := nil. - ISO2Table := nil! Item was removed: - ----- Method: ISOLanguageDefinition class>>iso2Countries (in category 'private') ----- - iso2Countries - "ISOLanguageDefinition iso2Countries" - "ISO2Countries := nil. ISO3Countries := nil" - - ISO2Countries ifNil: [self initISOCountries]. - ^ISO2Countries! Item was removed: - ----- Method: ISOLanguageDefinition class>>iso2LanguageDefinition: (in category 'accessing') ----- - iso2LanguageDefinition: aString - ^self iso2LanguageTable at: aString! Item was removed: - ----- Method: ISOLanguageDefinition class>>iso2LanguageTable (in category 'private') ----- - iso2LanguageTable - "ISOLanguageDefinition iso2LanguageTable" - - ISO2Table ifNotNil: [^ISO2Table]. - ISO2Table := Dictionary new: self iso3LanguageTable basicSize. - self iso3LanguageTable do: [:entry | - ISO2Table at: entry iso2 put: entry]. - ^ISO2Table! Item was removed: - ----- Method: ISOLanguageDefinition class>>iso3166Codes (in category 'private') ----- - iso3166Codes - "
http://www.unicode.org/onlinedat/countries.html
" - - ^'LAND ISLANDS - AX - - - - - - - AFGHANISTAN - AF - AFG - 004 - - - - - ALBANIA - AL - ALB - 008 - CTRY_ALBANIA - 355 - - - ALGERIA - DZ - DZA - 012 - CTRY_ALGERIA - 213 - verArabic - 16 - AMERICAN SAMOA - AS - ASM - 016 - - - - - ANDORRA - AD - AND - 020 - - - - - ANGOLA - AO - AGO - 024 - - - - - ANGUILLA - AI - AIA - 660 - - - - - ANTARCTICA - AQ - ATA - 010 - - - - - ANTIGUA AND BARBUDA - AG - ATG - 028 - - - - - ARGENTINA - AR - ARG - 032 - CTRY_ARGENTINA - 54 - - - ARMENIA - AM - ARM - 051 - CTRY_ARMENIA - 374 - verArmenian - 84 - ARUBA - AW - ABW - 533 - - - - - AUSTRALIA - AU - AUS - 036 - CTRY_AUSTRALIA - 61 - verAustralia - 15 - AUSTRIA - AT - AUT - 040 - CTRY_AUSTRIA - 43 - verAustria - 92 - AZERBAIJAN - AZ - AZE - 031 - CTRY_AZERBAIJAN - 994 - - - BAHAMAS - BS - BHS - 044 - - - - - BAHRAIN - BH - BHR - 048 - CTRY_BAHRAIN - 973 - - - BANGLADESH - BD - BGD - 050 - - - verBengali - 60 - BARBADOS - BB - BRB - 052 - - - - - BELARUS - BY - BLR - 112 - CTRY_BELARUS - 375 - - - BELGIUM - BE - BEL - 056 - CTRY_BELGIUM - 32 - verFrBelgium, verFlemish - 98 - BELIZE - BZ - BLZ - 084 - CTRY_BELIZE - 501 - - - BENIN - BJ - BEN - 204 - - - - - BERMUDA - BM - BMU - 060 - - - - - BHUTAN - BT - BTN - 064 - - - verBhutan - 83 - BOLIVIA - BO - BOL - 068 - CTRY_BOLIVIA - 591 - - - BOSNIA AND HERZEGOVINA - BA - BIH - 070 - - - - - BOTSWANA - BW - BWA - 072 - - - - - BOUVET ISLAND - BV - BVT - 074 - - - - - BRAZIL - BR - BRA - 076 - CTRY_BRAZIL - 55 - verBrazil - 71 - BRITISH INDIAN OCEAN TERRITORY - IO - IOT - 086 - - - - - BRUNEI DARUSSALAM - BN - BRN - 096 - CTRY_BRUNEI_DARUSSALAM - 673 - - - BULGARIA - BG - BGR - 100 - CTRY_BULGARIA - 359 - verBulgaria - 72 - BURKINA FASO - BF - BFA - 854 - - - - - BURUNDI - BI - BDI - 108 - - - - - CAMBODIA - KH - KHM - 116 - - - - - CAMEROON - CM - CMR - 120 - - - - - CANADA - CA - CAN - 124 - CTRY_CANADA - 2 - verFrCanada, verEndCanada - 82 - CAPE VERDE - CV - CPV - 132 - - - - - CAYMAN ISLANDS - KY - CYM - 136 - - - - - CENTRAL AFRICAN REPUBLIC - CF - CAF - 140 - - - - - CHAD - TD - TCD - 148 - - - - - CHILE - CL - CHL - 152 - CTRY_CHILE - 56 - - - CHINA - CN - CHN - 156 - CTRY_PRCHINA - 86 - verChina - 52 - CHRISTMAS ISLAND - CX - CXR - 162 - - - - - COCOS (KEELING) ISLANDS - CC - CCK - 166 - - - - - COLOMBIA - CO - COL - 170 - CTRY_COLOMBIA - 57 - - - COMOROS - KM - COM - 174 - - - - - CONGO - CG - COG - 178 - - - - - CONGO, THE DEMOCRATIC REPUBLIC OF THE - CD - - - - - - - COOK ISLANDS - CK - COK - 184 - - - - - COSTA RICA - CR - CRI - 188 - CTRY_COSTA_RICA - 506 - - - COTE D''IVOIRE - CI - CIV - 384 - - - - - CROATIA (local name: Hrvatska) - HR - HRV - 191 - CTRY_CROATIA - 385 - verCroatia, verYugoCroatian - 68 (c), 25 (y) - CUBA - CU - CUB - 192 - - - - - CYPRUS - CY - CYP - 196 - - - verCyprus - 23 - CZECH REPUBLIC - CZ - CZE - 203 - CTRY_CZECH - 420 - verCzech - 56 - DENMARK - DK - DNK - 208 - CTRY_DENMARK - 45 - verDenmark(da), verFaeroeIsl(fo) - 9(da), 47(fo) - DJIBOUTI - DJ - DJI - 262 - - - - - DOMINICA - DM - DMA - 212 - - - - - DOMINICAN REPUBLIC - DO - DOM - 214 - CTRY_DOMINICAN_REPUBLIC - 1 - - - EAST TIMOR - TL - TLS - 626 - - - - - ECUADOR - EC - ECU - 218 - CTRY_ECUADOR - 593 - - - EGYPT - EG - EGY - 818 - CTRY_EGYPT - 20 - verArabic - 16 - EL SALVADOR - SV - SLV - 222 - CTRY_EL_SALVADOR - 503 - - - EQUATORIAL GUINEA - GQ - GNQ - 226 - - - - - ERITREA - ER - ERI - 232 - - - - - ESTONIA - EE - EST - 233 - CTRY_ESTONIA - 372 - verEstonia - 44 - ETHIOPIA - ET - ETH - 210 - - - - - FALKLAND ISLANDS (MALVINAS) - FK - FLK - 238 - - - - - FAROE ISLANDS - FO - FRO - 234 - CTRY_FAEROE_ISLANDS - 298 - - - FIJI - FJ - FJI - 242 - - - - - FINLAND - FI - FIN - 246 - CTRY_FINLAND - 358 - verFinland - 17 - FRANCE - FR - FRA - 250 - CTRY_FRANCE - 33 - verFrance - 1 - FRANCE, METROPOLITAN - FX - FXX - 249 - - - - - FRENCH GUIANA - GF - GUF - 254 - - - - - FRENCH POLYNESIA - PF - PYF - 258 - - - - - FRENCH SOUTHERN TERRITORIES - TF - ATF - 260 - - - - - GABON - GA - GAB - 266 - - - - - GAMBIA - GM - GMB - 270 - - - - - GEORGIA - GE - GEO - 268 - CTRY_GEORGIA - 995 - verGeorgian - 85 - GERMANY - DE - DEU - 276 - CTRY_GERMANY - 49 - verGermany - 3 - GHANA - GH - GHA - 288 - - - - - GIBRALTAR - GI - GIB - 292 - - - - - GREECE - GR - GRC - 300 - CTRY_GREECE - 30 - verGreece, verGreecePoly - 20, 40 - GREENLAND - GL - GRL - 304 - - - verGreenland - 107 - GRENADA - GD - GRD - 308 - - - - - GUADELOUPE - GP - GLP - 312 - - - - - GUAM - GU - GUM - 316 - - - - - GUATEMALA - GT - GTM - 320 - CTRY_GUATEMALA - 502 - - - GUINEA - GN - GIN - 324 - - - - - GUINEA-BISSAU - GW - GNB - 624 - - - - - GUYANA - GY - GUY - 328 - - - - - HAITI - HT - HTI - 332 - - - - - HEARD ISLAND & MCDONALD ISLANDS - HM - HMD - 334 - - - - - HONDURAS - HN - HND - 340 - CTRY_HONDURAS - 504 - - - HONG KONG - HK - HKG - 344 - CTRY_HONG_KONG - 852 - - - HUNGARY - HU - HUN - 348 - CTRY_HUNGARY - 36 - verHungary - 43 - ICELAND - IS - ISL - 352 - CTRY_ICELAND - 354 - verIceland - 21 - INDIA - IN - IND - 356 - CTRY_INDIA - 91 - verIndiaHindi(hi) - 33 - INDONESIA - ID - IDN - 360 - CTRY_INDONESIA - 62 - - - IRAN, ISLAMIC REPUBLIC OF - IR - IRN - 364 - CTRY_IRAN - 981 - verIran - 48 - IRAQ - IQ - IRQ - 368 - CTRY_IRAQ - 964 - verArabic - 16 - IRELAND - IE - IRL - 372 - CTRY_IRELAND - 353 - verIreland - 50 - ISRAEL - IL - ISR - 376 - CTRY_ISRAEL - 972 - verIsrael - 13 - ITALY - IT - ITA - 380 - CTRY_ITALY - 39 - verItaly - 4 - JAMAICA - JM - JAM - 388 - CTRY_JAMAICA - 1 - - - JAPAN - JP - JPN - 392 - CTRY_JAPAN - 81 - verJapan - 14 - JORDAN - JO - JOR - 400 - CTRY_JORDAN - 962 - - - KAZAKHSTAN - KZ - KAZ - 398 - CTRY_KAZAKSTAN - 7 - - - KENYA - KE - KEN - 404 - CTRY_KENYA - 254 - - - KIRIBATI - KI - KIR - 296 - - - - - KOREA, DEMOCRATIC PEOPLE''S REPUBLIC OF - KP - PRK - 408 - - - verKorea - 51 - KOREA, REPUBLIC OF - KR - KOR - 410 - CTRY_SOUTH_KOREA - 82 - verKorea - - KUWAIT - KW - KWT - 414 - CTRY_KUWAIT - 965 - - - KYRGYZSTAN - KG - KGZ - 417 - CTRY_KYRGYZSTAN - 996 - - - LAO PEOPLE''S DEMOCRATIC REPUBLIC - LA - LAO - 418 - - - - - LATVIA - LV - LVA - 428 - CTRY_LATVIA - 371 - verLatvia - 45 - LEBANON - LB - LBN - 422 - CTRY_LEBANON - 961 - - - LESOTHO - LS - LSO - 426 - - - - - LIBERIA - LR - LBR - 430 - - - - - LIBYAN ARAB JAMAHIRIYA - LY - LBY - 434 - CTRY_LIBYA - 218 - verArabic - 16 - LIECHTENSTEIN - LI - LIE - 438 - CTRY_LIECHTENSTEIN - 41 - - - LITHUANIA - LT - LTU - 440 - CTRY_LITHUANIA - 370 - verLithuania - 41 - LUXEMBOURG - LU - LUX - 442 - CTRY_LUXEMBOURG - 352 - verFrBelgiumLux - 6 - MACAU - MO - MAC - 446 - CTRY_MACAU - 853 - - - MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF - MK - MKD - 807 - CTRY_MACEDONIA - 389 - verMacedonian - - MADAGASCAR - MG - MDG - 450 - - - - - MALAWI - MW - MWI - 454 - - - - - MALAYSIA - MY - MYS - 458 - CTRY_MALAYSIA - 60 - - - MALDIVES - MV - MDV - 462 - CTRY_MALDIVES - 960 - - - MALI - ML - MLI - 466 - - - - - MALTA - MT - MLT - 470 - - - verMalta - 22 - MARSHALL ISLANDS - MH - MHL - 584 - - - - - MARTINIQUE - MQ - MTQ - 474 - - - - - MAURITANIA - MR - MRT - 478 - - - - - MAURITIUS - MU - MUS - 480 - - - - - MAYOTTE - YT - MYT - 175 - - - - - MEXICO - MX - MEX - 484 - CTRY_MEXICO - 52 - - - MICRONESIA, FEDERATED STATES OF - FM - FSM - 583 - - - - - MOLDOVA, REPUBLIC OF - MD - MDA - 498 - - - - - MONACO - MC - MCO - 492 - CTRY_MONACO - 33 - - - MONGOLIA - MN - MNG - 496 - CTRY_MONGOLIA - 976 - - - MONTSERRAT - MS - MSR - 500 - - - - - MOROCCO - MA - MAR - 504 - CTRY_MOROCCO - 212 - verArabic - 16 - MOZAMBIQUE - MZ - MOZ - 508 - - - - - MYANMAR - MM - MMR - 104 - - - - - NAMIBIA - NA - NAM - 516 - - - - - NAURU - NR - NRU - 520 - - - - - NEPAL - NP - NPL - 524 - - - verNepal - 106 - NETHERLANDS - NL - NLD - 528 - CTRY_NETHERLANDS - 31 - verNetherlands - 5 - NETHERLANDS ANTILLES - AN - ANT - 530 - - - - - NEW CALEDONIA - NC - NCL - 540 - - - - - NEW ZEALAND - NZ - NZL - 554 - CTRY_NEW_ZEALAND - 64 - - - NICARAGUA - NI - NIC - 558 - CTRY_NICARAGUA - 505 - - - NIGER - NE - NER - 562 - - - - - NIGERIA - NG - NGA - 566 - - - - - NIUE - NU - NIU - 570 - - - - - NORFOLK ISLAND - NF - NFK - 574 - - - - - NORTHERN MARIANA ISLANDS - MP - MNP - 580 - - - - - NORWAY - NO - NOR - 578 - CTRY_NORWAY - 47 - verNorway - 12 - OMAN - OM - OMN - 512 - CTRY_OMAN - 968 - - - PAKISTAN - PK - PAK - 586 - CTRY_PAKISTAN - 92 - verPakistanUrdu, verPunjabi - 34 (U), 95 (P) - PALAU - PW - PLW - 585 - - - - - PANAMA - PA - PAN - 591 - CTRY_PANAMA - 507 - - - PALESTINIAN TERRITORY, OCCUPIED - PS - - - - - - - PAPUA NEW GUINEA - PG - PNG - 598 - - - - - PARAGUAY - PY - PRY - 600 - CTRY_PARAGUAY - 595 - - - PERU - PE - PER - 604 - CTRY_PERU - 51 - - - PHILIPPINES - PH - PHL - 608 - CTRY_PHILIPPINES - 63 - - - PITCAIRN - PN - PCN - 612 - - - - - POLAND - PL - POL - 616 - CTRY_POLAND - 48 - verPoland - 42 - PORTUGAL - PT - PRT - 620 - CTRY_PORTUGAL - 351 - verPortugal - 10 - PUERTO RICO - PR - PRI - 630 - CTRY_PUERTO_RICO - 1 - - - QATAR - QA - QAT - 634 - CTRY_QATAR - 974 - - - REUNION - RE - REU - 638 - - - - - ROMANIA - RO - ROU* - 642 - CTRY_ROMANIA - 40 - verRomania - 39 - RUSSIAN FEDERATION - RU - RUS - 643 - CTRY_RUSSIA - 7 - verRussia - 49 - RWANDA - RW - RWA - 646 - - - - - SAINT KITTS AND NEVIS - KN - KNA - 659 - - - - - SAINT LUCIA - LC - LCA - 662 - - - - - SAINT VINCENT AND THE GRENADINES - VC - VCT - 670 - - - - - SAMOA - WS - WSM - 882 - - - - - SAN MARINO - SM - SMR - 674 - - - - - SAO TOME AND PRINCIPE - ST - STP - 678 - - - - - SAUDI ARABIA - SA - SAU - 682 - CTRY_SAUDI_ARABIA - 966 - verArabic - 16 - SENEGAL - SN - SEN - 686 - - - - - SERBIA AND MONTENEGRO - CS - - - CTRY_SERBIA - 381 - - - SEYCHELLES - SC - SYC - 690 - - - - - SIERRA LEONE - SL - SLE - 694 - - - - - SINGAPORE - SG - SGP - 702 - CTRY_SINGAPORE - 65 - verSingapore - 100 - SLOVAKIA (Slovak Republic) - SK - SVK - 703 - CTRY_SLOVAK - 421 - verSlovak - 57 - SLOVENIA - SI - SVN - 705 - CTRY_SLOVENIA - 386 - verSlovenian - 66 - SOLOMON ISLANDS - SB - SLB - 90 - - - - - SOMALIA - SO - SOM - 706 - - - - - SOUTH AFRICA - ZA - ZAF - 710 - CTRY_SOUTH_AFRICA - 27 - - - SOUTH GEORGIA AND THE SOUTH SANDWICH ISLANDS - GS - - - - - - - SPAIN - ES - ESP - 724 - CTRY_SPAIN - 34 - verSpain - 8 - SRI LANKA - LK - LKA - 144 - - - - - SAINT HELENA - SH - SHN - 654 - - - - - SAINT PIERRE AND MIQUELON - PM - SPM - 666 - - - - - SUDAN - SD - SDN - 736 - - - - - SURINAME - SR - SUR - 740 - - - - - SVALBARD AND JAN MAYEN ISLANDS - SJ - SJM - 744 - - - - - SWAZILAND - SZ - SWZ - 748 - - - - - SWEDEN - SE - SWE - 752 - CTRY_SWEDEN - 46 - verSweden - 7 - SWITZERLAND - CH - CHE - 756 - CTRY_SWITZERLAND - 41 - verFrSwiss(fr), verGrSwiss(de) - 18(fr), 19(de) - SYRIAN ARAB REPUBLIC - SY - SYR - 760 - CTRY_SYRIA - 963 - - - TAIWAN, PROVINCE OF CHINA - TW - TWN - 158 - CTRY_TAIWAN - 886 - verTaiwan - 53 - TAJIKISTAN - TJ - TJK - 762 - - - - - TANZANIA, UNITED REPUBLIC OF - TZ - TZA - 834 - - - - - TATARSTAN - - - - CTRY_TATARSTAN - 7 - - - THAILAND - TH - THA - 764 - CTRY_THAILAND - 66 - verThailand - 54 - TIMOR-LESTE - TL - - - - - - - TOGO - TG - TGO - 768 - - - - - TOKELAU - TK - TKL - 772 - - - - - TONGA - TO - TON - 776 - - - verTonga - 88 - TRINIDAD AND TOBAGO - TT - TTO - 780 - CTRY_TRINIDAD_Y_TOBAGO - 1 - - - TUNISIA - TN - TUN - 788 - CTRY_TUNISIA - 216 - verArabic - 16 - TURKEY - TR - TUR - 792 - CTRY_TURKEY - 90 - verTurkey - 24 - TURKMENISTAN - TM - TKM - 795 - - - - - TURKS AND CAICOS ISLANDS - TC - TCA - 796 - - - - - TUVALU - TV - TUV - 798 - - - - - UGANDA - UG - UGA - 800 - - - - - UKRAINE - UA - UKR - 804 - CTRY_UKRAINE - 380 - verUkraine - 62 - UNITED ARAB EMIRATES - AE - ARE - 784 - CTRY_UAE - 971 - - - UNITED KINGDOM - GB - GBR - 826 - CTRY_UNITED_KINGDOM - 44 - verBritain - 2 - UNITED STATES - US - USA - 840 - CTRY_UNITED_STATES - 1 - verUS - 0 - UNITED STATES MINOR OUTLYING ISLANDS - UM - UMI - 581 - - - - - URUGUAY - UY - URY - 858 - CTRY_URUGUAY - 598 - - - UZBEKISTAN - UZ - UZB - 860 - CTRY_UZBEKISTAN - 7 - - - VANUATU - VU - VUT - 548 - - - - - VATICAN CITY STATE (HOLY SEE) - VA - VAT - 336 - - - - - VENEZUELA - VE - VEN - 862 - CTRY_VENEZUELA - 58 - - - VIET NAM - VN - VNM - 704 - CTRY_VIET_NAM - 84 - verVietnam - - VIRGIN ISLANDS (BRITISH) - VG - VGB - 92 - - - - - VIRGIN ISLANDS (U.S.) - VI - VIR - 850 - - - - - WALLIS AND FUTUNA ISLANDS - WF - WLF - 876 - - - - - WESTERN SAHARA - EH - ESH - 732 - - - - - YEMEN - YE - YEM - 887 - CTRY_YEMEN - 967 - - - YUGOSLAVIA - YU - YUG - 891 - - - - - ZAIRE - ZR - ZAR - 180 - - - - - ZAMBIA - ZM - ZMB - 894 - - - - - ZIMBABWE - ZW - ZWE - 716 - CTRY_ZIMBABWE - 263 - - - '! Item was removed: - ----- Method: ISOLanguageDefinition class>>iso3Countries (in category 'private') ----- - iso3Countries - "ISOLanguageDefinition iso3Countries" - "ISO2Countries := nil. ISO3Countries := nil" - - ISO3Countries ifNil: [self initISOCountries]. - ^ISO3Countries! Item was removed: - ----- Method: ISOLanguageDefinition class>>iso3LanguageDefinition: (in category 'accessing') ----- - iso3LanguageDefinition: aString - ^self iso3LanguageTable at: aString! Item was removed: - ----- Method: ISOLanguageDefinition class>>iso3LanguageTable (in category 'private') ----- - iso3LanguageTable - "ISOLanguageDefinition iso3LanguageTable" - - ^ISO3Table ifNil: [ISO3Table := self initISO3LanguageTable]! Item was removed: - ----- Method: ISOLanguageDefinition class>>isoLanguages (in category 'private') ----- - isoLanguages - "ISO 639: 3-letter codes" - ^'aar aa Afar - abk ab Abkhazian - ace Achinese - ach Acoli - ada Adangme - ady Adyghe; Adygei - afa Afro-Asiatic languages - afh Afrihili - afr af Afrikaans - ain Ainu - aka ak Akan - akk Akkadian - alb/sqi sq Albanian - ale Aleut - alg Algonquian languages - alt Southern Altai - amh am Amharic - ang English, Old (ca.450-1100) - anp Angika - apa Apache languages - ara ar Arabic - arc Official Aramaic (700-300 BCE); Imperial Aramaic (700-300 BCE) - arg an Aragonese - arm/hye hy Armenian - arn Mapudungun; Mapuche - arp Arapaho - art Artificial languages - arw Arawak - asm as Assamese - ast Asturian; Bable; Leonese; Asturleonese - ath Athapascan languages - aus Australian languages - ava av Avaric - ave ae Avestan - awa Awadhi - aym ay Aymara - aze az Azerbaijani - bad Banda languages - bai Bamileke languages - bak ba Bashkir - bal Baluchi - bam bm Bambara - ban Balinese - baq/eus eu Basque - bas Basa - bat Baltic languages - bej Beja; Bedawiyet - bel be Belarusian - bem Bemba - ben bn Bengali - ber Berber languages) - bho Bhojpuri - bih bh Bihari - bik Bikol - bin Bini; Edo - bis bi Bislama - bla Siksika - bnt Bantu languages - bos bs Bosnian - bra Braj - bre br Breton - btk Batak languages - bua Buriat - bug Buginese - bul bg Bulgarian - bur/mya my Burmese - byn Blin; Bilin - cad Caddo - cai Central American Indian languages - car Galibi Carib - cat ca Catalan; Valencian - cau Caucasian languages - ceb Cebuano - cel Celtic languages - cha ch Chamorro - chb Chibcha - che ce Chechen - chg Chagatai - chi/zho zh Chinese - chk Chuukese - chm Mari - chn Chinook jargon - cho Choctaw - chp Chipewyan; Dene Suline - chr Cherokee - chu cu Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic - chv cv Chuvash - chy Cheyenne - cmc Chamic languages - cop Coptic - cor kw Cornish - cos co Corsican - cpe Creoles and pidgins, English based - cpf Creoles and pidgins, French-based - cpp Creoles and pidgins, Portuguese-based - cre cr Cree - crh Crimean Tatar; Crimean Turkish - crp Creoles and pidgins - csb Kashubian - cus Cushitic languages - cze/ces cs Czech - dak Dakota - dan da Danish - dar Dargwa - day Land Dayak languages - del Delaware - den Slave (Athapascan) - dgr Dogrib - din Dinka - div dv Divehi; Dhivehi; Maldivian - doi Dogri - dra Dravidian languages - dsb Lower Sorbian - dua Duala - dum Dutch, Middle (ca.1050-1350) - dut/nld nl Dutch; Flemish - dyu Dyula - dzo dz Dzongkha - efi Efik - egy Egyptian (Ancient) - eka Ekajuk - elx Elamite - eng en English - enm English, Middle (1100-1500) - epo eo Esperanto - est et Estonian - ewe ee Ewe - ewo Ewondo - fan Fang - fao fo Faroese - fat Fanti - fij fj Fijian - fil Filipino; Pilipino - fin fi Finnish - fiu Finno-Ugrian languages) - fon Fon - fre/fra fr French - frm French, Middle (ca.1400-1600) - fro French, Old (842-ca.1400) - frr Northern Frisian - frs Eastern Frisian - fry fy Western Frisian - ful ff Fulah - fur Friulian - gaa Ga - gay Gayo - gba Gbaya - gem Germanic languages - geo/kat ka Georgian - ger/deu de German - gez Geez - gil Gilbertese - gla gd Gaelic; Scottish Gaelic - gle ga Irish - glg gl Galician - glv gv Manx - gmh German, Middle High (ca.1050-1500) - goh German, Old High (ca.750-1050) - gon Gondi - gor Gorontalo - got Gothic - grb Grebo - grc Greek, Ancient (to 1453) - gre/ell el Greek, Modern (1453-) - grn gn Guarani - gsw Swiss German; Alemannic; Alsatian - guj gu Gujarati - gwi Gwich''in - hai Haida - hat ht Haitian; Haitian Creole - hau ha Hausa - haw Hawaiian - heb he Hebrew - her hz Herero - hil Hiligaynon - him Himachali - hin hi Hindi - hit Hittite - hmn Hmong - hmo ho Hiri Motu - hrv hr Croatian - hsb Upper Sorbian - hun hu Hungarian - hup Hupa - iba Iban - ibo ig Igbo - ice/isl is Icelandic - ido io Ido - iii ii Sichuan Yi; Nuosu - ijo Ijo languages - iku iu Inuktitut - ile ie Interlingue; Occidental - ilo Iloko - ina ia Interlingua (International Auxiliary Language Association) - inc Indic languages - ind id Indonesian - ine Indo-European languages - inh Ingush - ipk ik Inupiaq - ira Iranian languages - iro Iroquoian languages - ita it Italian - jav jv Javanese - jbo Lojban - jpn ja Japanese - jpr Judeo-Persian - jrb Judeo-Arabic - kaa Kara-Kalpak - kab Kabyle - kac Kachin; Jingpho - kal kl Kalaallisut; Greenlandic - kam Kamba - kan kn Kannada - kar Karen languages - kas ks Kashmiri - kau kr Kanuri - kaw Kawi - kaz kk Kazakh - kbd Kabardian - kha Khasi - khi Khoisan languages - khm km Central Khmer - kho Khotanese; Sakan - kik ki Kikuyu; Gikuyu - kin rw Kinyarwanda - kir ky Kirghiz; Kyrgyz - kmb Kimbundu - kok Konkani - kom kv Komi - kon kg Kongo - kor ko Korean - kos Kosraean - kpe Kpelle - krc Karachay-Balkar - krl Karelian - kro Kru languages - kru Kurukh - kua kj Kuanyama; Kwanyama - kum Kumyk - kur ku Kurdish - kut Kutenai - lad Ladino - lah Lahnda - lam Lamba - lao lo Lao - lat la Latin - lav lv Latvian - lez Lezghian - lim li Limburgan; Limburger; Limburgish - lin ln Lingala - lit lt Lithuanian - lol Mongo - loz Lozi - ltz lb Luxembourgish; Letzeburgesch - lua Luba-Lulua - lub lu Luba-Katanga - lug lg Ganda - lui Luiseno - lun Lunda - luo Luo (Kenya and Tanzania) - lus Lushai - mac/mkd mk Macedonian - mad Madurese - mag Magahi - mah mh Marshallese - mai Maithili - mak Makasar - mal ml Malayalam - man Mandingo - mao/mri mi Maori - map Austronesian languages - mar mr Marathi - mas Masai - may/msa ms Malay - mdf Moksha - mdr Mandar - men Mende - mga Irish, Middle (900-1200) - mic Mi''kmaq; Micmac - min Minangkabau - mis Uncoded languages - mkh Mon-Khmer languages - mlg mg Malagasy - mlt mt Maltese - mnc Manchu - mni Manipuri - mno Manobo languages - moh Mohawk - mon mn Mongolian - mos Mossi - mul Multiple languages - mun Munda languages - mus Creek - mwl Mirandese - mwr Marwari - myn Mayan languages - myv Erzya - nah Nahuatl languages - nai North American Indian languages - nap Neapolitan - nau na Nauru - nav nv Navajo; Navaho - nbl nr Ndebele, South; South Ndebele - nde nd Ndebele, North; North Ndebele - ndo ng Ndonga - nds Low German; Low Saxon; German, Low; Saxon, Low - nep ne Nepali - new Nepal Bhasa; Newari - nia Nias - nic Niger-Kordofanian languages - niu Niuean - nno nn Norwegian Nynorsk; Nynorsk, Norwegian - nob nb Bokmal, Norwegian; Norwegian Bokmal - nog Nogai - non Norse, Old - nor no Norwegian - nqo N''Ko - nso Pedi; Sepedi; Northern Sotho - nub Nubian languages - nwc Classical Newari; Old Newari; Classical Nepal Bhasa - nya ny Chichewa; Chewa; Nyanja - nym Nyamwezi - nyn Nyankole - nyo Nyoro - nzi Nzima - oci oc Occitan (post 1500) - oji oj Ojibwa - ori or Oriya - orm om Oromo - osa Osage - oss os Ossetian; Ossetic - ota Turkish, Ottoman (1500-1928) - oto Otomian languages - paa Papuan languages - pag Pangasinan - pal Pahlavi - pam Pampanga; Kapampangan - pan pa Panjabi; Punjabi - pap Papiamento - pau Palauan - peo Persian, Old (ca.600-400 B.C.) - per/fas fa Persian - phi Philippine languages) - phn Phoenician - pli pi Pali - pol pl Polish - pon Pohnpeian - por pt Portuguese - pra Prakrit languages - pro Provencal, Old (to 1500);Occitan, Old (to 1500) - pus ps Pushto; Pashto - qaa-qtz Reserved for local use - que qu Quechua - raj Rajasthani - rap Rapanui - rar Rarotongan; Cook Islands Maori - roa Romance languages - roh rm Romansh - rom Romany - rum/ron ro Romanian; Moldavian; Moldovan - run rn Rundi - rup Aromanian; Arumanian; Macedo-Romanian - rus ru Russian - sad Sandawe - sag sg Sango - sah Yakut - sai South American Indian languages - sal Salishan languages - sam Samaritan Aramaic - san sa Sanskrit - sas Sasak - sat Santali - scn Sicilian - sco Scots - sel Selkup - sem Semitic languages - sga Irish, Old (to 900) - sgn Sign Languages - shn Shan - sid Sidamo - sin si Sinhala; Sinhalese - sio Siouan languages - sit Sino-Tibetan languages - sla Slavic languages - slo/slk sk Slovak - slv sl Slovenian - sma Southern Sami - sme se Northern Sami - smi Sami languages - smj Lule Sami - smn Inari Sami - smo sm Samoan - sms Skolt Sami - sna sn Shona - snd sd Sindhi - snk Soninke - sog Sogdian - som so Somali - son Songhai languages - sot st Sotho, Southern - spa es Spanish; Castilian - srd sc Sardinian - srn Sranan Tongo - srp sr Serbian - srr Serer - ssa Nilo-Saharan languages - ssw ss Swati - suk Sukuma - sun su Sundanese - sus Susu - sux Sumerian - swa sw Swahili - swe sv Swedish - syc Classical Syriac - syr Syriac - tah ty Tahitian - tai Tai languages - tam ta Tamil - tat tt Tatar - tel te Telugu - tem Timne - ter Tereno - tet Tetum - tgk tg Tajik - tgl tl Tagalog - tha th Thai - tib/bod bo Tibetan - tig Tigre - tir ti Tigrinya - tiv Tiv - tkl Tokelau - tlh Klingon; tlhIngan-Hol - tli Tlingit - tmh Tamashek - tog Tonga (Nyasa) - ton to Tonga (Tonga Islands) - tpi Tok Pisin - tsi Tsimshian - tsn tn Tswana - tso ts Tsonga - tuk tk Turkmen - tum Tumbuka - tup Tupi languages - tur tr Turkish - tut Altaic languages - tvl Tuvalu - twi tw Twi - tyv Tuvinian - udm Udmurt - uga Ugaritic - uig ug Uighur; Uyghur - ukr uk Ukrainian - umb Umbundu - und Undetermined - urd ur Urdu - uzb uz Uzbek - vai Vai - ven ve Venda - vie vi Vietnamese - vol vo Volapuk - vot Votic - wak Wakashan languages - wal Wolaitta; Wolaytta - war Waray - was Washo - wel/cym cy Welsh - wen Sorbian languages - wln wa Walloon - wol wo Wolof - xal Kalmyk; Oirat - xho xh Xhosa - yao Yao - yap Yapese - yid yi Yiddish - yor yo Yoruba - ypk Yupik languages - zap Zapotec - zbl Blissymbols; Blissymbolics; Bliss - zen Zenaga - zha za Zhuang; Chuang - znd Zande languages - zul zu Zulu - zun Zuni - zxx No linguistic content; Not applicable - zza Zaza; Dimili; Dimli; Kirdki; Kirmanjki; Zazaki'! Item was removed: - ----- Method: ISOLanguageDefinition class>>readISOLanguagesFrom: (in category 'private') ----- - readISOLanguagesFrom: stream - "ISOLanguageDefinition readISOLanguagesFrom: ISOLanguageDefinition isoLanguages readStream " - | languages language code3 index line | - languages := Dictionary new. - [stream atEnd - or: [(line := stream nextLine readStream) atEnd]] - whileFalse: [ - language := ISOLanguageDefinition new. - code3 := line upTo: Character tab. - (index := code3 indexOf: $/) > 0 - ifTrue: [ - language iso3: (code3 copyFrom: 1 to: index-1). - language iso3Alternate: (code3 copyFrom: index+1 to: code3 size)] - ifFalse: [language iso3: code3]. - language - iso2: (line upTo: Character tab); - language: line upToEnd. - languages at: language iso3 put: language]. - ^languages! Item was removed: - ----- Method: ISOLanguageDefinition>>iso2 (in category 'accessing') ----- - iso2 - ^iso2 ifNil: [self iso3]! Item was removed: - ----- Method: ISOLanguageDefinition>>iso2: (in category 'initialize') ----- - iso2: aString - iso2 := aString ifEmpty: [nil] ifNotEmpty: [aString]! Item was removed: - ----- Method: ISOLanguageDefinition>>iso3 (in category 'accessing') ----- - iso3 - ^iso3 ifNil: ['']! Item was removed: - ----- Method: ISOLanguageDefinition>>iso3: (in category 'initialize') ----- - iso3: aString - iso3 := aString ifEmpty: [nil] ifNotEmpty: [aString]! Item was removed: - ----- Method: ISOLanguageDefinition>>iso3Alternate (in category 'accessing') ----- - iso3Alternate - ^iso3Alternate ifNil: ['']! Item was removed: - ----- Method: ISOLanguageDefinition>>iso3Alternate: (in category 'initialize') ----- - iso3Alternate: aString - iso3Alternate := aString ifEmpty: [nil] ifNotEmpty: [aString]! Item was removed: - ----- Method: ISOLanguageDefinition>>language (in category 'accessing') ----- - language - ^language! Item was removed: - ----- Method: ISOLanguageDefinition>>language: (in category 'initialize') ----- - language: aString - language := aString! Item was removed: - NaturalLanguageTranslator subclass: #InternalTranslator - instanceVariableNames: 'generics' - classVariableNames: 'AllKnownPhrases CachedTranslations' - poolDictionaries: '' - category: 'GetText-Localization'! - - !InternalTranslator commentStamp: 'tak 10/19/2007 11:12' prior: 0! - An InternalTranslator is used a translation dictionary in a image. - You can use it without any external translation file. - - Structure: - generics Dictionary -- msgid -> msgstr - ! Item was removed: - ----- Method: InternalTranslator class>>allKnownPhrases (in category 'private') ----- - allKnownPhrases - ^AllKnownPhrases ifNil: [AllKnownPhrases := Dictionary new: 2051]! Item was removed: - ----- Method: InternalTranslator class>>availableLanguageLocaleIDs (in category 'accessing') ----- - availableLanguageLocaleIDs - "Return locale ids for the internal translation dictionary." - "InternalTranslator availableLanguageLocaleIDs" - ^ self cachedTranslations values collect:[:each | each localeID]! Item was removed: - ----- Method: InternalTranslator class>>cachedTranslations (in category 'private') ----- - cachedTranslations - "CachedTranslations := nil" - ^CachedTranslations ifNil: [CachedTranslations := Dictionary new]! Item was removed: - ----- Method: InternalTranslator class>>directoryForLanguage:country:create: (in category 'private loading') ----- - directoryForLanguage: isoLanguage country: isoCountry create: createDir - "Try to locate the <prefs>/locale/<language>{/<country>} folder. - If createDir is set, create the path down to country or language, depending on wether it's specified.. - Return the directory for country or language depending on specification. - If neither exists, nil" - - "NaturalLanguageTranslator directoryForLanguage: 'es' country: nil create: true" - "NaturalLanguageTranslator directoryForLanguage: 'de' country: 'DE' create: true" - "NaturalLanguageTranslator directoryForLanguage: 'en' country: 'US' create: false" - "NaturalLanguageTranslator directoryForLanguage: 'en' country: nil create: true" - - "If this fails, there is nothing we can do about it here" - | localeDir countryDir languageDir | - localeDir := self localeDirCreate: createDir. - localeDir ifNil: [^nil]. - - isoCountry ifNil: [ - languageDir := localeDir directoryNamed: isoLanguage. - createDir - ifTrue: [languageDir assureExistence]. - ^languageDir exists - ifTrue: [languageDir] - ifFalse: [nil]]. - - countryDir := languageDir directoryNamed: isoCountry. - createDir - ifTrue: [countryDir assureExistence]. - - ^countryDir exists - ifTrue: [countryDir] - ifFalse: [nil]! Item was removed: - ----- Method: InternalTranslator class>>directoryForLocaleID:create: (in category 'private loading') ----- - directoryForLocaleID: localeID create: createDir - "Try to locate the <prefs>/locale/<language>{/<country>} folder. - If createDir is set, create the path down to country or language, depending on locale. - Return the directory for country or language depending on locale. - If neither exists, nil" - - "NaturalLanguageTranslator directoryForLanguage: 'de' country: nil readOnly: true" - "NaturalLanguageTranslator directoryForLanguage: 'de' country: 'DE' readOnly: true" - "NaturalLanguageTranslator directoryForLanguage: 'en' country: 'US' readOnly: false" - "NaturalLanguageTranslator directoryForLanguage: 'en' country: nil readOnly: true" - - ^self directoryForLanguage: localeID isoLanguage country: localeID isoCountry create: createDir! Item was removed: - ----- Method: InternalTranslator class>>discardAllTranslations (in category 'class initialization') ----- - discardAllTranslations - AllKnownPhrases := nil. - self resetCaches.! Item was removed: - ----- Method: InternalTranslator class>>fileReaderServicesForFile:suffix: (in category 'file-services') ----- - fileReaderServicesForFile: fullName suffix: suffix - "Answer the file services associated with given file" - ^ (suffix = self translationSuffix) | (suffix = '*') - ifTrue: [{self serviceMergeLanguageTranslations}] - ifFalse: [#()]! Item was removed: - ----- Method: InternalTranslator class>>loadAvailableExternalLocales (in category 'private loading') ----- - loadAvailableExternalLocales - "private - register locales IDs based on the content of the <prefs>/locale/ directory" - | localeDir | - localeDir := self localeDirCreate: false. - localeDir ifNil: [^ #()]. - - localeDir directoryNames - do: [:langDirName | - | langDir | - langDir := localeDir directoryNamed: langDirName. - - (langDir fileNamesMatching: '*.' , self translationSuffix) - ifNotEmpty: [self loadTranslatorForIsoLanguage: langDirName isoCountry: nil]. - - langDir directoryNames - do: [:countryDirName | - | countryDir | - countryDir := langDirName directoryNamed: countryDirName. - (countryDir fileNamesMatching: '*.' , self translationSuffix) - ifNotEmpty: [self loadTranslatorForIsoLanguage: langDirName isoCountry: countryDirName] - ] - ]. - ! Item was removed: - ----- Method: InternalTranslator class>>loadExternalTranslationsFor: (in category 'private loading') ----- - loadExternalTranslationsFor: translator - "Try to load translations from external external files. - The files are located in the <prefs>/locale/<language>{/<country>} folder. - There can be more than one file for each location, so applications can install their own partial translation tables. All files in the specific folder are loaded." - - | translationDir | - translationDir := self directoryForLocaleID: translator localeID create: false. - translationDir ifNil: [ ^nil ]. - (translationDir fileNamesMatching: '*.' , self translationSuffix) - do: [:fileName | translator loadFromFileNamed: (translationDir fullNameFor: fileName)]! Item was removed: - ----- Method: InternalTranslator class>>loadForLocaleIsoString:fromGzippedMimeLiteral: (in category 'file-services') ----- - loadForLocaleIsoString: localeString fromGzippedMimeLiteral: mimeString - "merge the translation from the mime literal." - | stream localeID translator gs rbStream s currentPlatform | - s := Base64MimeConverter mimeDecodeToBytes: mimeString readStream. - s reset. - gs := GZipReadStream on: s. - rbStream := MultiByteBinaryOrTextStream with: gs contents asString. - rbStream converter: UTF8TextConverter new. - rbStream reset. - localeID := LocaleID isoString: localeString. - currentPlatform := Locale currentPlatform. - [Locale - currentPlatform: (Locale localeID: localeID). - stream := ReadStream on: rbStream contents] - ensure: [Locale currentPlatform: currentPlatform]. - translator := self localeID: localeID. - translator loadFromStream: stream. - LanguageEnvironment resetKnownEnvironments! Item was removed: - ----- Method: InternalTranslator class>>loadTranslatorForIsoLanguage:isoCountry: (in category 'private loading') ----- - loadTranslatorForIsoLanguage: isoLanguage isoCountry: isoCountry - "private - load the translations from <prefs>/locale/ directory - the procedure is to assure the existence of a translator for the - given language/country and then load the external translations for this translator" - - | translator | - translator := self newLocaleID: (LocaleID isoLanguage: isoLanguage isoCountry: isoCountry). - - self loadExternalTranslationsFor: translator! Item was removed: - ----- Method: InternalTranslator class>>localeDirCreate: (in category 'private loading') ----- - localeDirCreate: createDir - "Try to locate the <prefs>/locale/ folder. - If createDir is set, try to create the path. - If it doesn't exist, return nil" - - "If this fails, there is nothing we can do about it here" - | prefDir localeDir | - (createDir not - and: [ExternalSettings preferenceDirectory isNil]) - ifTrue: [^ nil]. - - prefDir := ExternalSettings assuredPreferenceDirectory. - prefDir exists - ifFalse: [^nil]. - - - localeDir := prefDir directoryNamed: 'locale'. - createDir - ifTrue: [localeDir assureExistence]. - ^localeDir exists - ifTrue: [localeDir] - ifFalse: [nil]! Item was removed: - ----- Method: InternalTranslator class>>localeID: (in category 'accessing') ----- - localeID: localeID - "For backward compatibility, see NaturalLanguageTranslator >> fileOutHeaderOn:." - ^ self newLocaleID: localeID! Item was removed: - ----- Method: InternalTranslator class>>mergeLegacyTranslators (in category 'accessing') ----- - mergeLegacyTranslators - self availableLanguageLocaleIDs - do: [:localeID | (NaturalLanguageTranslator translators includesKey: localeID) - ifFalse: [NaturalLanguageTranslator translators - at: localeID - put: (self newLocaleID: localeID)]]! Item was removed: - ----- Method: InternalTranslator class>>mergeTranslationFileNamed: (in category 'file-services') ----- - mergeTranslationFileNamed: fileFullNameString - "merge the translation in the file named fileFullNameString" - - | stream localeID translator | - stream := FileStream readOnlyFileNamed: fileFullNameString. - [localeID := LocaleID isoString: stream localName sansPeriodSuffix. - translator := self localeID: localeID. - translator loadFromStream: stream] - ensure: [stream close]. - LanguageEnvironment resetKnownEnvironments. - - ! Item was removed: - ----- Method: InternalTranslator class>>newLocaleID: (in category 'accessing') ----- - newLocaleID: localeID - ^ self cachedTranslations - at: localeID - ifAbsentPut: [self new localeID: localeID]! Item was removed: - ----- Method: InternalTranslator class>>privateStartUp (in category 'class initialization') ----- - privateStartUp - self loadAvailableExternalLocales. - self mergeLegacyTranslators. - ! Item was removed: - ----- Method: InternalTranslator class>>registerPhrase: (in category 'private') ----- - registerPhrase: phrase - "Using a Dictionary so we can lookup existing string instead of creating needless copies when loading a translation." - self allKnownPhrases at: phrase put: phrase! Item was removed: - ----- Method: InternalTranslator class>>registeredPhraseFor: (in category 'private') ----- - registeredPhraseFor: phrase - "Using a Dictionary so we can lookup existing string instead of creating needless copies when loading a translation." - ^self allKnownPhrases at: phrase ifAbsentPut: [phrase]! Item was removed: - ----- Method: InternalTranslator class>>removeLocaleID: (in category 'accessing') ----- - removeLocaleID: localeID - "self removeLocaleID: (LocaleID isoString: 'ja-kids')" - self cachedTranslations - removeKey: localeID - ifAbsent: []. - NaturalLanguageTranslator privateStartUp! Item was removed: - ----- Method: InternalTranslator class>>resetCaches (in category 'class initialization') ----- - resetCaches - CachedTranslations := nil. - ! Item was removed: - ----- Method: InternalTranslator class>>serviceMergeLanguageTranslations (in category 'file-services') ----- - serviceMergeLanguageTranslations - "Answer a service for merging of translation files" - ^ SimpleServiceEntry - provider: self - label: 'merge the translation file' translatedNoop - selector: #mergeTranslationFileNamed: - description: 'merge the translation file into the language named like the file' translatedNoop - buttonLabel: 'merge' translatedNoop! Item was removed: - ----- Method: InternalTranslator class>>services (in category 'file-services') ----- - services - "Answer potential file services associated with this class" - ^ {self serviceMergeLanguageTranslations}! Item was removed: - ----- Method: InternalTranslator class>>translationSuffix (in category 'private') ----- - translationSuffix - ^'translation'! Item was removed: - ----- Method: InternalTranslator>>atRandom (in category 'accessing') ----- - atRandom - - ^ generics atRandom value. - ! Item was removed: - ----- Method: InternalTranslator>>checkPhrase:translation: (in category 'translation') ----- - checkPhrase: phrase translation: translation! Item was removed: - ----- Method: InternalTranslator>>defaultBackgroundColor (in category 'user interface') ----- - defaultBackgroundColor - "answer the receiver's defaultBackgroundColor for views" - ^ Color cyan! Item was removed: - ----- Method: InternalTranslator>>fileOutHeader (in category 'fileIn/fileOut') ----- - fileOutHeader - ^ '''Translation dictionary'''! Item was removed: - ----- Method: InternalTranslator>>fileOutHeaderOn: (in category 'user interface') ----- - fileOutHeaderOn: aStream - aStream binary. - UTF8TextConverter writeBOMOn: aStream. - aStream text. - aStream nextChunkPut: self fileOutHeader; - cr. - aStream timeStamp; cr. - aStream nextPut: $!!. - aStream nextChunkPut: '(' , self class name , ' localeID: ' , id storeString , ')'. - aStream cr! Item was removed: - ----- Method: InternalTranslator>>fileOutHeaderOn:withBOM: (in category 'user interface') ----- - fileOutHeaderOn: aStream withBOM: bomFlag - bomFlag ifTrue: [ - aStream binary. - UTF8TextConverter writeBOMOn: aStream. - aStream text. - ]. - aStream nextChunkPut: self fileOutHeader; - cr. - aStream timeStamp; cr. - aStream nextPut: $!!. - aStream nextChunkPut: '(' , self class name , ' localeID: ' , id storeString , ')'. - aStream cr! Item was removed: - ----- Method: InternalTranslator>>fileOutOn: (in category 'fileIn/fileOut') ----- - fileOutOn: aStream - "self current fileOutOn: Transcript. Transcript endEntry" - self fileOutOn: aStream keys: nil withBOM: true. - ! Item was removed: - ----- Method: InternalTranslator>>fileOutOn:keys:withBOM: (in category 'fileIn/fileOut') ----- - fileOutOn: aStream keys: keys withBOM: bomFlag - "self current fileOutOn: Transcript. Transcript endEntry" - self fileOutHeaderOn: aStream withBOM: bomFlag. - (keys - ifNil: [generics keys asSortedCollection]) - do: [:key | self - nextChunkPut: (generics associationAt: key) - on: aStream]. - keys - ifNil: [self untranslated - do: [:each | self nextChunkPut: each -> '' on: aStream]]. - aStream nextPut: $!!; - cr! Item was removed: - ----- Method: InternalTranslator>>generics (in category 'private') ----- - generics - ^generics ifNil: [generics := Dictionary new]! Item was removed: - ----- Method: InternalTranslator>>isDomainLoaded: (in category 'accessing') ----- - isDomainLoaded: aDomainName - ^true - ! Item was removed: - ----- Method: InternalTranslator>>loadFromFileNamed: (in category 'private store-retrieve') ----- - loadFromFileNamed: fileNameString - "Load translations from an external file" - - | stream | - [stream := FileStream readOnlyFileNamed: fileNameString. - self loadFromStream: stream] - ensure: [stream close]. - self changed: #translations. - self changed: #untranslated. - ! Item was removed: - ----- Method: InternalTranslator>>loadFromRefStream: (in category 'private store-retrieve') ----- - loadFromRefStream: stream - "Load translations from an external file" - | loadedArray refStream | - refStream := ReferenceStream on: stream. - [loadedArray := refStream next] - ensure: [refStream close]. - self processExternalObject: loadedArray ! Item was removed: - ----- Method: InternalTranslator>>loadFromStream: (in category 'private store-retrieve') ----- - loadFromStream: stream - "Load translations from an external file" - | header isFileIn | - header := '''Translation dictionary'''. - isFileIn := (stream next: header size) - = header. - stream reset. - isFileIn - ifTrue: [stream fileInAnnouncing: 'Loading ' translated, stream localName] - ifFalse: [self loadFromRefStream: stream]! Item was removed: - ----- Method: InternalTranslator>>mergeTranslations: (in category 'private store-retrieve') ----- - mergeTranslations: newTranslations - "Merge a new set of translations into the exiting table. - Overwrites existing entries." - - newTranslations keysAndValuesDo: [:key :value | - self rawPhrase: (self class registeredPhraseFor: key) translation: value]. - self changed: #translations. - self changed: #untranslated.! Item was removed: - ----- Method: InternalTranslator>>nextChunkPut:on: (in category 'fileIn/fileOut') ----- - nextChunkPut: anObject on: aStream - | i remainder terminator | - terminator := $!!. - remainder := anObject storeString. - [(i := remainder indexOf: terminator) = 0] - whileFalse: [aStream - nextPutAll: (remainder copyFrom: 1 to: i). - aStream nextPut: terminator. - "double imbedded terminators" - remainder := remainder copyFrom: i + 1 to: remainder size]. - aStream nextPutAll: remainder. - aStream nextPut: terminator; cr.! Item was removed: - ----- Method: InternalTranslator>>phrase:translation: (in category 'translation') ----- - phrase: phraseString translation: translationString - self generics at: phraseString put: translationString asString. - self changed: #translations. - self changed: #untranslated.! Item was removed: - ----- Method: InternalTranslator>>processExternalObject: (in category 'private store-retrieve') ----- - processExternalObject: anArray - "pivate - process the external object" - - "new format -> {translations. untranslated}" - - anArray second do: [:each | self class registerPhrase: each]. - - self mergeTranslations: anArray first! Item was removed: - ----- Method: InternalTranslator>>rawPhrase:translation: (in category 'translation') ----- - rawPhrase: phraseString translation: translationString - self generics at: phraseString put: translationString asString. - ! Item was removed: - ----- Method: InternalTranslator>>rawRemoveUntranslated: (in category 'translation') ----- - rawRemoveUntranslated: untranslated - - self class allKnownPhrases removeKey: untranslated ifAbsent: []. - self changed: #untranslated.! Item was removed: - ----- Method: InternalTranslator>>removeTranslationFor: (in category 'translation') ----- - removeTranslationFor: phraseString - self generics removeKey: phraseString ifAbsent: []. - self changed: #translations. - self changed: #untranslated.! Item was removed: - ----- Method: InternalTranslator>>removeUntranslated: (in category 'translation') ----- - removeUntranslated: untranslated - - self class allKnownPhrases removeKey: untranslated ifAbsent: []. - ! Item was removed: - ----- Method: InternalTranslator>>saveToFileNamed: (in category 'private store-retrieve') ----- - saveToFileNamed: fileNameString - "save the receiver's translations to a file named fileNameString" - | stream | - "Set true if you need to save as binary" - false - ifTrue: [stream := ReferenceStream fileNamed: fileNameString. - stream nextPut: {self translations. self untranslated}. - stream close. - ^ self]. - stream := FileStream fileNamed: fileNameString. - [self fileOutOn: stream] - ensure: [stream close]! Item was removed: - ----- Method: InternalTranslator>>scanFrom: (in category 'fileIn/fileOut') ----- - scanFrom: aStream - "Read a definition of dictionary. - Make sure current locale corresponds my locale id" - | aString newTranslations assoc currentPlatform | - newTranslations := Dictionary new. - currentPlatform := Locale currentPlatform. - [Locale - currentPlatform: (Locale localeID: id). - [aString := aStream nextChunk withSqueakLineEndings. - aString size > 0] - whileTrue: [assoc := Compiler evaluate: aString. - assoc value = '' - ifTrue: [self class registerPhrase: assoc key] - ifFalse: [newTranslations add: assoc]]] - ensure: [Locale currentPlatform: currentPlatform]. - self mergeTranslations: newTranslations! Item was removed: - ----- Method: InternalTranslator>>translate:inDomain: (in category 'translation') ----- - translate: aString inDomain: aDomainName - | translator | - ^ self generics - at: aString - ifAbsent: [self localeID hasParent - ifTrue: [translator := self class cachedTranslations - at: self localeID parent - ifAbsent: [^ aString]. - translator translate: aString inDomain: aDomainName] - ifFalse: [aString]]! Item was removed: - ----- Method: InternalTranslator>>translations (in category 'accessing') ----- - translations - ^self generics! Item was removed: - ----- Method: InternalTranslator>>untranslated (in category 'accessing') ----- - untranslated - | translations | - translations := self translations. - ^self class allKnownPhrases reject: [:each | translations includesKey: each]! Item was changed: ----- Method: LanguageEditor>>getTextExport (in category 'gui methods') ----- getTextExport Cursor wait + showWhile: [GetTextExporter new exportTranslator: self model]! - showWhile: [GetTextExporter2 new exportTranslator: self model]! Item was changed: ----- Method: LanguageEditor>>getTextExportTemplate (in category 'gui methods') ----- getTextExportTemplate Cursor wait + showWhile: [GetTextExporter new exportTemplate] ! - showWhile: [GetTextExporter2 new exportTemplate] ! Item was removed: - Object subclass: #Locale - instanceVariableNames: 'id shortDate longDate time decimalSymbol digitGrouping currencySymbol currencyNotation measurement offsetLocalToUTC offsetVMToUTC dstActive' - classVariableNames: 'Current CurrentPlatform KnownLocales LanguageSymbols LocaleChangeListeners PlatformEncodings Previous' - poolDictionaries: '' - category: 'GetText-Localization'! - - !Locale commentStamp: '<historical>' prior: 0! - Main comment stating the purpose of this class and relevant relationship to other classes. - - - -
http://www.w3.org/WAI/ER/IG/ert/iso639.htm
-
http://www.oasis-open.org/cover/iso639a.html
- See also -
http://oss.software.ibm.com/cvs/icu/~checkout~/icuhtml/design/language_code…
-
http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.10
- - ISO 3166 -
http://mitglied.lycos.de/buran/knowhow/codes/locales/
- ! Item was removed: - ----- Method: Locale class>>addLocalChangedListener: (in category 'notification') ----- - addLocalChangedListener: anObjectOrClass - self localeChangedListeners add: anObjectOrClass! Item was removed: - ----- Method: Locale class>>clipboadInterpreter (in category 'accessing') ----- - clipboadInterpreter - ^NoConversionClipboardInterpreter new! Item was removed: - ----- Method: Locale class>>current (in category 'accessing') ----- - current - "Current := nil" - Current ifNil: [ - Current := self determineCurrentLocale. - "Transcript show: 'Current locale: ' , Current localeID asString; cr"]. - ^Current! Item was removed: - ----- Method: Locale class>>currentPlatform (in category 'accessing') ----- - currentPlatform - "CurrentPlatform := nil" - CurrentPlatform ifNil: [CurrentPlatform := self determineCurrentLocale]. - ^CurrentPlatform! Item was removed: - ----- Method: Locale class>>currentPlatform: (in category 'accessing') ----- - currentPlatform: locale - CurrentPlatform := locale. - LanguageEnvironment startUp. - ! Item was removed: - ----- Method: Locale class>>currentPlatform:during: (in category 'accessing') ----- - currentPlatform: locale during: aBlock - "Alter current language platform during a block" - | backupPlatform | - backupPlatform := self currentPlatform. - [self currentPlatform: locale. - aBlock value] - ensure: [self currentPlatform: backupPlatform]! Item was removed: - ----- Method: Locale class>>defaultEncodingName: (in category 'platform specific') ----- - defaultEncodingName: languageSymbol - | encodings platformName osVersion | - platformName := SmalltalkImage current platformName. - osVersion := SmalltalkImage current getSystemAttribute: 1002. - encodings := self platformEncodings at: languageSymbol - ifAbsent: [self platformEncodings at: #default]. - encodings at: platformName ifPresent: [:encoding | ^encoding]. - encodings at: platformName , ' ' , osVersion - ifPresent: [:encoding | ^encoding]. - ^encodings at: #default! Item was removed: - ----- Method: Locale class>>defaultInputInterpreter (in category 'platform specific') ----- - defaultInputInterpreter - | platformName osVersion | - platformName := SmalltalkImage current platformName. - osVersion := SmalltalkImage current getSystemAttribute: 1002. - (platformName = 'Win32' and: [osVersion = 'CE']) - ifTrue: [^NoInputInterpreter new]. - platformName = 'Win32' ifTrue: [^MacRomanInputInterpreter new]. - ^NoInputInterpreter new! Item was removed: - ----- Method: Locale class>>determineCurrentLocale (in category 'private') ----- - determineCurrentLocale - "For now just return the default locale. - A smarter way would be to determine the current platforms default locale." - "Locale determineCurrentLocale" - - ^self new determineLocale! Item was removed: - ----- Method: Locale class>>initKnownLocales (in category 'private') ----- - initKnownLocales - | locales | - locales := Dictionary new. - - "Init the locales for which we have translations" - InternalTranslator availableLanguageLocaleIDs do: [:id | - locales at: id put: (Locale new localeID: id)]. - ^locales! Item was removed: - ----- Method: Locale class>>initialize (in category 'class initialization') ----- - initialize - "Locale initialize" - - Smalltalk addToStartUpList: Locale. - Preferences addPreference: #useLocale - categories: #('general') default: false - balloonHelp: 'Use the system locale to set the system language etc at startup'.! Item was removed: - ----- Method: Locale class>>initializePlatformEncodings (in category 'class initialization') ----- - initializePlatformEncodings - "Locale initializePlatformEncodings" - - | platform | - PlatformEncodings isNil ifTrue: [ PlatformEncodings := Dictionary new ]. - - platform := PlatformEncodings at: 'default' ifAbsentPut: Dictionary new. - platform - at: 'default' put: 'iso8859-1'; - at: 'Win32 CE' put: 'utf-8'; - yourself. - - platform := PlatformEncodings at: 'ja' ifAbsentPut: Dictionary new. - platform - at: 'default' put: 'shift-jis'; - at: 'unix' put: 'euc-jp'; - at: 'Win32 CE' put: 'utf-8'; - yourself. - - platform := PlatformEncodings at: 'ko' ifAbsentPut: Dictionary new. - platform - at: 'default' put: 'euc-kr'; - at: 'Win32 CE' put: 'utf-8'; - yourself. - - platform := PlatformEncodings at: 'zh' ifAbsentPut: Dictionary new. - platform - at: 'default' put: 'gb2312'; - at: 'unix' put: 'euc-cn'; - at: 'Win32 CE' put: 'utf-8'; - yourself. - ! Item was removed: - ----- Method: Locale class>>isoLanguage: (in category 'accessing') ----- - isoLanguage: isoLanguage - ^self isoLanguage: isoLanguage isoCountry: nil! Item was removed: - ----- Method: Locale class>>isoLanguage:isoCountry: (in category 'accessing') ----- - isoLanguage: isoLanguage isoCountry: isoCountry - ^self localeID: (LocaleID isoLanguage: isoLanguage isoCountry: isoCountry)! Item was removed: - ----- Method: Locale class>>isoLocale: (in category 'accessing') ----- - isoLocale: aString - ! Item was removed: - ----- Method: Locale class>>knownLocales (in category 'private') ----- - knownLocales - "KnownLocales := nil" - ^KnownLocales ifNil: [KnownLocales := self initKnownLocales]! Item was removed: - ----- Method: Locale class>>languageSymbol: (in category 'accessing') ----- - languageSymbol: languageSymbol - "Locale languageSymbol: #Deutsch" - - ^self isoLanguage: (LanguageSymbols at: languageSymbol)! Item was removed: - ----- Method: Locale class>>localeChanged (in category 'notification') ----- - localeChanged - - #(#ParagraphEditor #BitEditor #FormEditor #StandardSystemController ) - do: [:key | Smalltalk - at: key - ifPresent: [:class | class initialize]]. - PartsBin localeChanged. - Project localeChanged. - PaintBoxMorph localeChanged. - ColorPickerMorph localeChanged. - Preferences localeChanged! Item was removed: - ----- Method: Locale class>>localeChangedGently (in category 'notification') ----- - localeChangedGently - - #(#ParagraphEditor #BitEditor #FormEditor #StandardSystemController ) - do: [:key | Smalltalk - at: key - ifPresent: [:class | class initialize]]. - PartsBin localeChangedGently. - Project localeChangedGently. - PaintBoxMorph localeChangedGently. - ColorPickerMorph localeChangedGently. - Preferences localeChangedGently. - ! Item was removed: - ----- Method: Locale class>>localeChangedListeners (in category 'notification') ----- - localeChangedListeners - ^LocaleChangeListeners ifNil: [LocaleChangeListeners := OrderedCollection new]! Item was removed: - ----- Method: Locale class>>localeID: (in category 'accessing') ----- - localeID: id - ^self knownLocales at: id ifAbsentPut: [Locale new localeID: id]! Item was removed: - ----- Method: Locale class>>migrateSystem (in category 'private') ----- - migrateSystem - "Locale migrateSystem" - "Do all the necessary operations to switch to the new Locale environment." - - LocaleChangeListeners := nil. - self - addLocalChangedListener: HandMorph; - addLocalChangedListener: Clipboard; - addLocalChangedListener: Vocabulary; - addLocalChangedListener: PartsBin; - addLocalChangedListener: Project; - addLocalChangedListener: PaintBoxMorph; - yourself! Item was removed: - ----- Method: Locale class>>platformEncodings (in category 'class initialization') ----- - platformEncodings - PlatformEncodings isEmptyOrNil ifTrue: [ self initializePlatformEncodings ]. - ^PlatformEncodings - ! Item was removed: - ----- Method: Locale class>>previous (in category 'accessing') ----- - previous - - ^ Previous - ! Item was removed: - ----- Method: Locale class>>resetKnownLocales (in category 'private') ----- - resetKnownLocales - - KnownLocales := nil - ! Item was removed: - ----- Method: Locale class>>startUp: (in category 'system startUp') ----- - startUp: resuming - | newID | - resuming ifFalse: [^self]. - (Preferences valueOfFlag: #useLocale) - ifTrue: [ - DateAndTime localTimeZone: (TimeZone - offset: (Duration minutes: Locale current offsetLocalToUTC) - name: 'Local Time' - abbreviation: 'LT'). - newID := self current determineLocaleID. - newID ~= LocaleID current - ifTrue: [self switchAndInstallFontToID: newID gently: true]]! Item was removed: - ----- Method: Locale class>>stringForLanguageNameIs: (in category 'accessing') ----- - stringForLanguageNameIs: localeID - "Answer a string for a menu determining whether the given - symbol is the project's natural language" - ^ (self current localeID = localeID - ifTrue: ['<yes>'] - ifFalse: ['<no>']) - , localeID displayName! Item was removed: - ----- Method: Locale class>>switchAndInstallFontToID: (in category 'accessing') ----- - switchAndInstallFontToID: localeID - "Locale switchAndInstallFontToID: (LocaleID isoLanguage: 'de')" - | locale | - locale := Locale localeID: localeID. - locale languageEnvironment isFontAvailable - ifFalse: [(self confirm: 'This language needs additional fonts. - Do you want to install the fonts?' translated) - ifTrue: [locale languageEnvironment installFont] - ifFalse: [^ self]]. - self - switchTo: locale! Item was removed: - ----- Method: Locale class>>switchAndInstallFontToID:gently: (in category 'accessing') ----- - switchAndInstallFontToID: localeID gently: gentlyFlag - - | locale result env envFound ret fontInImage menu | - "Assumption: Rainbow => can try Pango" - "Logic: - - in Sugar, we don't bother asking any questions, and we don't bother automatically loading fonts. - in Sugar, and if the font is available, use the font. - in Sugar, and if the font is not in the image, try to enable Pango. - - if the previous step fails, notify the user that you cannot switch to the language. - - not in Rainbow, - - if the font is in the image, use the font. - - if the font is not in the image, - - ask to choose: - - load font - - try to enable pango, if pango is available - - or cancel. - - if the previous step fails, notify the user that you cannot switch to the language. - Details: - - how to check non-pango font is available: - - if the language environment for the locale doesn't exist, the font is not available. - - if font loading fails, it is not available. - - how to check if the language environment doesn't exist: - - if the locales languageEnvironment is Latin1 but the locale isn't it is not available. - " - locale := Locale localeID: localeID. - env := locale languageEnvironment. - result := true. - envFound := (Latin1Environment supportedLanguages includes: locale isoLanguage) or: [(env isMemberOf: Latin1Environment) not]. - fontInImage := envFound and: [env isFontAvailable]. - SugarLauncher isRunningInSugar ifTrue: [ - fontInImage ifFalse: [ - "font is not available in the image. Even don't ask for font installation." - Cursor wait showWhile: [ - Preferences setPreference: #usePangoRenderer toValue: true. - TextMorph usePango: true]]. - ] ifFalse: [ - fontInImage ifFalse: [ - menu := MenuMorph new. - menu defaultTarget: menu. - envFound ifTrue: [menu add: 'load font' translated selector: #modalSelection: argument: #loadFont]. - RomePluginCanvas pangoIsAvailable ifTrue: [menu add: 'enable Pango' translated selector: #modalSelection: argument: #enablePango]. - menu add: 'cancel' translated selector: #modalSelection: argument: #cancel. - menu addTitle: 'This language needs additional fonts. - Do you want to install the fonts?' translated. - ret := menu invokeModal. - ret = #loadFont ifTrue: [result := env installFont. result ifTrue: [StrikeFont setupDefaultFallbackTextStyle]]. - ret = #enablePango ifTrue: [ - (result := RomePluginCanvas pangoIsAvailable) ifTrue: [ - Cursor wait showWhile: [ - Preferences setPreference: #usePangoRenderer toValue: true. - TextMorph usePango: true]]]. - (ret ~~ #loadFont and: [ret ~~ #enablePango]) ifTrue: [result := false]]]. - - result ifFalse: [self inform: 'Cannot load additional fonts' translated] ifTrue: [self switchTo: locale gently: gentlyFlag]. - ! Item was removed: - ----- Method: Locale class>>switchTo: (in category 'accessing') ----- - switchTo: locale - self switchTo: locale gently: false. - ! Item was removed: - ----- Method: Locale class>>switchTo:gently: (in category 'accessing') ----- - switchTo: locale gently: gentlyFlag - "Locale switchTo: (Locale isoLanguage: 'de')" - | availableID | - availableID := (NaturalLanguageTranslator availableForLocaleID: locale localeID) localeID. - Current localeID = availableID - ifFalse: [Previous := Current. - CurrentPlatform := Current := Locale localeID: availableID. - NaturalLanguageTranslator localeChanged. - gentlyFlag ifTrue: [self localeChangedGently] ifFalse: [self localeChanged]]! Item was removed: - ----- Method: Locale class>>switchToID: (in category 'accessing') ----- - switchToID: localeID - "Locale switchToID: (LocaleID isoLanguage: 'de') " - - self switchTo: (Locale localeID: localeID)! Item was removed: - ----- Method: Locale>>determineLocale (in category 'accessing') ----- - determineLocale - self localeID: self determineLocaleID! Item was removed: - ----- Method: Locale>>determineLocaleID (in category 'accessing') ----- - determineLocaleID - "Locale current determineLocaleID" - | isoLang isoCountry | - isoLang := self fetchISO2Language - ifNil: [^ self localeID]. - isoCountry := self fetchISOCountry - ifNil: [^ LocaleID isoLanguage: isoLang]. - ^ LocaleID isoLanguage: isoLang isoCountry: isoCountry! Item was removed: - ----- Method: Locale>>fetchISO2Language (in category 'private') ----- - fetchISO2Language - "Locale current fetchISO2Language" - | lang isoLang | - lang := self primLanguage. - lang ifNil: [^nil]. - lang := lang copyUpTo: 0 asCharacter. - lang size == 2 - ifTrue: [^lang]. - isoLang := ISOLanguageDefinition iso3LanguageDefinition: lang. - ^isoLang - ifNil: [nil] - ifNotNil: [isoLang iso2]! Item was removed: - ----- Method: Locale>>fetchISOCountry (in category 'private') ----- - fetchISOCountry - "Locale current fetchISOCountry" - | countryCode | - countryCode := self primCountry - ifNil: [^ nil]. - ^ countryCode copyUpTo: 0 asCharacter! Item was removed: - ----- Method: Locale>>iconForNativeLanguage (in category 'accessing') ----- - iconForNativeLanguage - - ^ (NaturalLanguageFormTranslator localeID: self localeID) translate: 'LanguageNameInNativeLanguage'. - ! Item was removed: - ----- Method: Locale>>isoCountry (in category 'accessing') ----- - isoCountry - ^self localeID isoCountry! Item was removed: - ----- Method: Locale>>isoLanguage (in category 'accessing') ----- - isoLanguage - ^self localeID isoLanguage! Item was removed: - ----- Method: Locale>>isoLocale (in category 'accessing') ----- - isoLocale - "<language>-<country>" - ^self isoCountry - ifNil: [self isoLanguage] - ifNotNil: [self isoLanguage , '-' , self isoCountry]! Item was removed: - ----- Method: Locale>>languageEnvironment (in category 'accessing') ----- - languageEnvironment - ^LanguageEnvironment localeID: self localeID! Item was removed: - ----- Method: Locale>>localeID (in category 'accessing') ----- - localeID - ^id! Item was removed: - ----- Method: Locale>>localeID: (in category 'accessing') ----- - localeID: anID - id := anID! Item was removed: - ----- Method: Locale>>offsetLocalToUTC (in category 'accessing') ----- - offsetLocalToUTC - ^self primTimezone! Item was removed: - ----- Method: Locale>>primCountry (in category 'system primitives') ----- - primCountry - "Returns string with country tag according to ISO 639" - <primitive: 'primitiveCountry' module: 'LocalePlugin'> - ^'US'! Item was removed: - ----- Method: Locale>>primCurrencyNotation (in category 'system primitives') ----- - primCurrencyNotation - "Returns boolean if symbol is pre- (true) or post-fix (false)" - <primitive: 'primitiveCurrencyNotation' module: 'LocalePlugin'> - ^true! Item was removed: - ----- Method: Locale>>primCurrencySymbol (in category 'system primitives') ----- - primCurrencySymbol - "Returns string with currency symbol" - <primitive: 'primitiveCurrencySymbol' module:'LocalePlugin'> - ^'$'! Item was removed: - ----- Method: Locale>>primDST (in category 'system primitives') ----- - primDST - "Returns boolean if DST (daylight saving time) is active or not" - <primitive:'primitiveDaylightSavings' module: 'LocalePlugin'> - ^false! Item was removed: - ----- Method: Locale>>primDecimalSymbol (in category 'system primitives') ----- - primDecimalSymbol - "Returns string with e.g. '.' or ','" - <primitive:'primitiveDecimalSymbol' module: 'LocalePlugin'> - ^'.'! Item was removed: - ----- Method: Locale>>primDigitGrouping (in category 'system primitives') ----- - primDigitGrouping - "Returns string with e.g. '.' or ',' (thousands etc)" - <primitive:'primitiveDigitGroupingSymbol' module: 'LocalePlugin'> - ^','! Item was removed: - ----- Method: Locale>>primLanguage (in category 'system primitives') ----- - primLanguage - "returns string with language tag according to ISO 639" - <primitive:'primitiveLanguage' module: 'LocalePlugin'> - ^'en' - - ! Item was removed: - ----- Method: Locale>>primLongDateFormat (in category 'system primitives') ----- - primLongDateFormat - "Returns the long date format - d day, m month, y year, - double symbol is null padded, single not padded (m=6, mm=06) - dddd weekday - mmmm month name" - <primitive:'primitiveLongDateFormat' module: 'LocalePlugin'> - ^'dddd, mmmm d, yyyy'! Item was removed: - ----- Method: Locale>>primMeasurement (in category 'system primitives') ----- - primMeasurement - "Returns boolean denoting metric(true) or imperial(false)." - <primitive:'primitiveMeasurementMetric' module: 'LocalePlugin'> - ^true - ! Item was removed: - ----- Method: Locale>>primShortDateFormat (in category 'system primitives') ----- - primShortDateFormat - "Returns the short date format - d day, m month, y year, - double symbol is null padded, single not padded (m=6, mm=06) - dddd weekday - mmmm month name" - <primitive:'primitiveShortDateFormat' module: 'LocalePlugin'> - ^'m/d/yy'! Item was removed: - ----- Method: Locale>>primTimeFormat (in category 'system primitives') ----- - primTimeFormat - "Returns string time format - Format is made up of - h hour (h 12, H 24), m minute, s seconds, x (am/pm String) - double symbol is null padded, single not padded (h=6, hh=06)" - <primitive:'primitiveTimeFormat' module: 'LocalePlugin'> - ^'h:mmx'! Item was removed: - ----- Method: Locale>>primTimezone (in category 'system primitives') ----- - primTimezone - "The offset from UTC in minutes, with positive offsets being towards the east. - (San Francisco is in UTC -07*60 and Paris is in UTC +02*60 when daylight savings is in effect)." - <primitive:'primitiveTimezoneOffset' module: 'LocalePlugin'> - ^0! Item was removed: - ----- Method: Locale>>primVMOffsetToUTC (in category 'system primitives') ----- - primVMOffsetToUTC - "Returns the offset in minutes between the VM and UTC. - If the VM does not support UTC times, this is 0. - Also gives us backward compatibility with old VMs as the primitive will fail and we then can return 0." - <primitive:'primitiveVMOffsetToUTC' module: 'LocalePlugin'> - ^0! Item was removed: - ----- Method: Locale>>printOn: (in category 'accessing') ----- - printOn: aStream - super printOn: aStream. - aStream nextPutAll: '(' , id printString , ')'! Item was removed: - Object subclass: #LocaleID - instanceVariableNames: 'isoLanguage isoCountry' - classVariableNames: '' - poolDictionaries: '' - category: 'GetText-Localization'! Item was removed: - ----- Method: LocaleID class>>current (in category 'accessing') ----- - current - ^Locale current localeID! Item was removed: - ----- Method: LocaleID class>>isoLanguage: (in category 'instance creation') ----- - isoLanguage: langString - ^self isoLanguage: langString isoCountry: nil! Item was removed: - ----- Method: LocaleID class>>isoLanguage:isoCountry: (in category 'instance creation') ----- - isoLanguage: langString isoCountry: countryStringOrNil - ^self new isoLanguage: langString isoCountry: countryStringOrNil! Item was removed: - ----- Method: LocaleID class>>isoString: (in category 'instance creation') ----- - isoString: isoString - "Parse the isoString (<language>-<country>) into its components and return the matching LocaleID" - "LocaleID isoString: 'en' " - "LocaleID isoString: 'en-us' " - - | parts language country | - parts := isoString findTokens: #($- ). - language := parts first. - parts size > 1 - ifTrue: [country := parts second]. - ^self isoLanguage: language isoCountry: country! Item was removed: - ----- Method: LocaleID class>>posixName: (in category 'instance creation') ----- - posixName: aString - ^ self - isoString: (aString copyReplaceAll: ':=' with: '-')! Item was removed: - ----- Method: LocaleID class>>previous (in category 'accessing') ----- - previous - ^Locale previous localeID! Item was removed: - ----- Method: LocaleID>>= (in category 'comparing') ----- - = anotherObject - self class == anotherObject class - ifFalse: [^false]. - ^self isoLanguage = anotherObject isoLanguage - and: [self isoCountry = anotherObject isoCountry]! Item was removed: - ----- Method: LocaleID>>displayCountry (in category 'accessing') ----- - displayCountry - ^(ISOLanguageDefinition iso2Countries at: self isoCountry asUppercase ifAbsent: [ self isoCountry ]) ! Item was removed: - ----- Method: LocaleID>>displayLanguage (in category 'accessing') ----- - displayLanguage - | language | - language := (ISOLanguageDefinition iso2LanguageTable - at: self isoLanguage - ifAbsent: [^ self isoLanguage]) language. - ^ self isoCountry - ifNil: [language] - ifNotNil: [language , ' (' , self displayCountry , ')']! Item was removed: - ----- Method: LocaleID>>displayName (in category 'accessing') ----- - displayName - "Answer a proper name to represent the receiver in GUI. - - The wording is provided by translations of the magic value - '<language display name>'. - - 'English' -> 'English' - 'German' -> 'Deutsch' - " - | magicPhrase translatedMagicPhrase | - magicPhrase := '<language display name>'. - translatedMagicPhrase := GetTextTranslator translateWithoutLoading: magicPhrase toLocaleID: self. - ^ translatedMagicPhrase = magicPhrase - ifTrue: [self displayLanguage] - ifFalse: [translatedMagicPhrase]! Item was removed: - ----- Method: LocaleID>>hasParent (in category 'testing') ----- - hasParent - ^self isoCountry notNil! Item was removed: - ----- Method: LocaleID>>hash (in category 'comparing') ----- - hash - ^self isoLanguage hash bitXor: self isoCountry hash! Item was removed: - ----- Method: LocaleID>>isoCountry (in category 'accessing') ----- - isoCountry - ^isoCountry! Item was removed: - ----- Method: LocaleID>>isoLanguage (in category 'accessing') ----- - isoLanguage - ^isoLanguage! Item was removed: - ----- Method: LocaleID>>isoLanguage:isoCountry: (in category 'initialize') ----- - isoLanguage: langString isoCountry: countryStringOrNil - isoLanguage := langString. - isoCountry := countryStringOrNil! Item was removed: - ----- Method: LocaleID>>isoString (in category 'accessing') ----- - isoString - ^self asString! Item was removed: - ----- Method: LocaleID>>parent (in category 'accessing') ----- - parent - ^self class isoLanguage: self isoLanguage! Item was removed: - ----- Method: LocaleID>>posixName (in category 'printing') ----- - posixName - "(LocaleID isoString: 'es-MX') posixName" - "(LocaleID isoString: 'es') posixName" - "language[_territory]" - ^ self isoCountry - ifNil: [self isoLanguage] - ifNotNil: [self isoLanguage , ':=' , self isoCountry]! Item was removed: - ----- Method: LocaleID>>printOn: (in category 'printing') ----- - printOn: stream - "<language>-<country>" - stream nextPutAll: self isoLanguage. - self isoCountry - ifNotNil: [stream nextPut: $-; nextPutAll: self isoCountry]! Item was removed: - ----- Method: LocaleID>>storeOn: (in category 'printing') ----- - storeOn: aStream - aStream nextPut: $(. - aStream nextPutAll: self class name. - aStream nextPutAll: ' isoString: '. - aStream nextPutAll: '''' , self printString , ''''. - aStream nextPut: $). - ! Item was removed: - ----- Method: LocaleID>>translator (in category 'accessing') ----- - translator - ^ InternalTranslator localeID: self ! Item was removed: - Object subclass: #NaturalLanguageFormTranslator - instanceVariableNames: 'id generics' - classVariableNames: 'CachedTranslations' - poolDictionaries: '' - category: 'GetText-Localization'! Item was removed: - ----- Method: NaturalLanguageFormTranslator class>>bitmapForJapanese (in category 'as yet unclassified') ----- - bitmapForJapanese - - ^ (Form - extent: 54@17 - depth: 16 - fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65536 0 1 65537 65537 65537 65537 0 0 0 0 1 0 0 0 0 65537 65537 1 65537 65537 65536 1 0 0 0 1 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 65536 0 0 65536 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 1 65537 65537 65536 1 0 0 0 1 0 0 65536 0 0 1 0 0 0 1 0 1 65537 65537 65537 65537 65537 65537 0 0 0 1 65537 65537 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 65537 65536 0 0 0 65537 65537 0 65536 1 0 0 0 65536 1 0 0 0 1 65537 65537 65537 65537 0 0 0 1 1 1 0 0 0 0 0 0 65536 1 0 0 0 65536 1 0 0 0 1 0 0 0 1 0 0 0 1 1 1 0 0 0 65537 65537 65537 65537 65537 65537 0 0 65536 1 0 0 0 1 0 0 0 1 0 0 0 65536 1 0 65536 0 0 0 0 0 0 0 0 0 0 65536 1 0 0 0 1 0 0 0 1 0 0 1 0 1 0 1 0 0 65537 65537 1 65537 65537 65536 0 0 65536 1 0 0 0 1 0 0 0 1 0 0 65536 65537 65537 65537 65536 65536 0 65536 1 1 0 0 65536 0 0 65536 0 65536 0 0 1 0 0 0 1 0 1 0 0 1 0 0 1 0 65536 1 1 0 0 65536 0 1 0 0 65536 0 0 1 65537 65537 65537 65537 0 0 0 0 1 0 0 0 0 65537 65537 1 65537 65537 65536 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 65536 0 0 0 65536 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0) - offset: 0@0)! Item was removed: - ----- Method: NaturalLanguageFormTranslator class>>cachedTranslations (in category 'accessing') ----- - cachedTranslations - "CachedTranslations := nil" - ^CachedTranslations ifNil: [CachedTranslations := Dictionary new]! Item was removed: - ----- Method: NaturalLanguageFormTranslator class>>cleanUp (in category 'class initialization') ----- - cleanUp - "Flush caches" - - CachedTranslations := nil! Item was removed: - ----- Method: NaturalLanguageFormTranslator class>>initializeJapaneseBitmap (in category 'as yet unclassified') ----- - initializeJapaneseBitmap - - (self localeID: (LocaleID isoString: 'ja')) name: 'LanguageNameInNativeLanguage' form: self bitmapForJapanese. - ! Item was removed: - ----- Method: NaturalLanguageFormTranslator class>>isoLanguage: (in category 'accessing') ----- - isoLanguage: isoLanguage - "Return the generic language translator as there is no information about the country code" - - ^self isoLanguage: isoLanguage isoCountry: nil! Item was removed: - ----- Method: NaturalLanguageFormTranslator class>>isoLanguage:isoCountry: (in category 'accessing') ----- - isoLanguage: isoLanguage isoCountry: isoCountry - ^self localeID: (LocaleID isoLanguage: isoLanguage isoCountry: isoCountry)! Item was removed: - ----- Method: NaturalLanguageFormTranslator class>>loadFormsFrom: (in category 'i/o') ----- - loadFormsFrom: aStream - - | rr pair inst | - rr := ReferenceStream on: aStream. - pair := rr next. - inst := self localeID: (LocaleID isoString: pair first). - pair second associationsDo: [:assoc | - inst name: assoc key form: assoc value. - ]. - ^ inst. - ! Item was removed: - ----- Method: NaturalLanguageFormTranslator class>>localeID: (in category 'accessing') ----- - localeID: localeID - ^ self cachedTranslations - at: localeID - ifAbsentPut: [self new localeID: localeID]! Item was removed: - ----- Method: NaturalLanguageFormTranslator>>generics (in category 'accessing') ----- - generics - ^generics ifNil: [generics := Dictionary new]! Item was removed: - ----- Method: NaturalLanguageFormTranslator>>localeID (in category 'accessing') ----- - localeID - ^id! Item was removed: - ----- Method: NaturalLanguageFormTranslator>>localeID: (in category 'accessing') ----- - localeID: anID - id := anID! Item was removed: - ----- Method: NaturalLanguageFormTranslator>>name:form: (in category 'accessing') ----- - name: formName form: translatedForm - self generics at: formName put: translatedForm. - ! Item was removed: - ----- Method: NaturalLanguageFormTranslator>>saveFormsOn: (in category 'i/o') ----- - saveFormsOn: aStream - - | rr | - rr := ReferenceStream on: aStream. - rr nextPut: {id isoString. generics}. - rr close. - ! Item was removed: - ----- Method: NaturalLanguageFormTranslator>>translate: (in category 'utilities') ----- - translate: aString - - ^ (self generics - at: aString ifAbsent: [nil]) deepCopy. - - "Do you like to write 'form ifNotNil: [form deepCopy]'?" - ! Item was removed: - Object subclass: #NaturalLanguageTranslator - instanceVariableNames: 'id' - classVariableNames: 'Translators' - poolDictionaries: '' - category: 'GetText-Localization'! - - !NaturalLanguageTranslator commentStamp: '<historical>' prior: 0! - abstract class of natural language translator. - Class side manages and holds loaded instances of concrete classes.! Item was removed: - ----- Method: NaturalLanguageTranslator class>>availableForLocaleID: (in category 'accessing') ----- - availableForLocaleID: localeID - "Answer available locale ID. - If translator is not found for correct locale ID, then isoLanguage is - attempted for the key." - ^ self translators - at: localeID - ifAbsent: [localeID hasParent - ifTrue: [self translators - at: localeID parent - ifAbsent: [self default]] - ifFalse: [self default]]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>availableLanguageLocaleIDs (in category 'accessing') ----- - availableLanguageLocaleIDs - "Return the locale ids for the currently available languages. - Meaning those which either internally or externally have - translations available." - "NaturalLanguageTranslator availableLanguageLocaleIDs" - ^ self translators values collect:[:each | each localeID]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>cleanUpCache (in category 'private') ----- - cleanUpCache - "NaturalLanguageTranslator cleanUpCache" - - self cachedTranslations keys do: [:key | - key isoLanguage size > 2 ifTrue: [self cachedTranslations removeKey: key]]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>current (in category 'accessing') ----- - current - ^ self availableForLocaleID: LocaleID current! Item was removed: - ----- Method: NaturalLanguageTranslator class>>default (in category 'accessing') ----- - default - "Answer translator for backstop" - "self default translate: 'test'" - ^ self new - localeID: (LocaleID isoLanguage: 'en')! Item was removed: - ----- Method: NaturalLanguageTranslator class>>directoryForLanguage:country:create: (in category 'private loading') ----- - directoryForLanguage: isoLanguage country: isoCountry create: createDir - "Try to locate the <prefs>/locale/<language>{/<country>} folder. - If createDir is set, create the path down to country or language, depending on wether it's specified.. - Return the directory for country or language depending on specification. - If neither exists, nil" - - "NaturalLanguageTranslator directoryForLanguage: 'es' country: nil create: true" - "NaturalLanguageTranslator directoryForLanguage: 'de' country: 'DE' create: true" - "NaturalLanguageTranslator directoryForLanguage: 'en' country: 'US' create: false" - "NaturalLanguageTranslator directoryForLanguage: 'en' country: nil create: true" - - "If this fails, there is nothing we can do about it here" - | localeDir countryDir languageDir | - localeDir := self localeDirCreate: createDir. - localeDir ifNil: [^nil]. - - isoCountry ifNil: [ - languageDir := localeDir directoryNamed: isoLanguage. - createDir - ifTrue: [languageDir assureExistence]. - ^languageDir exists - ifTrue: [languageDir] - ifFalse: [nil]]. - - countryDir := languageDir directoryNamed: isoCountry. - createDir - ifTrue: [countryDir assureExistence]. - - ^countryDir exists - ifTrue: [countryDir] - ifFalse: [nil]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>directoryForLocaleID:create: (in category 'private loading') ----- - directoryForLocaleID: localeID create: createDir - "Try to locate the <prefs>/locale/<language>{/<country>} folder. - If createDir is set, create the path down to country or language, depending on locale. - Return the directory for country or language depending on locale. - If neither exists, nil" - - "NaturalLanguageTranslator directoryForLanguage: 'de' country: nil readOnly: true" - "NaturalLanguageTranslator directoryForLanguage: 'de' country: 'DE' readOnly: true" - "NaturalLanguageTranslator directoryForLanguage: 'en' country: 'US' readOnly: false" - "NaturalLanguageTranslator directoryForLanguage: 'en' country: nil readOnly: true" - - ^self directoryForLanguage: localeID isoLanguage country: localeID isoCountry create: createDir! Item was removed: - ----- Method: NaturalLanguageTranslator class>>domainRegistered: (in category 'accessing') ----- - domainRegistered: aDomainName - "notify that new TextDomain is registered" - self translators do: [:each | each domainRegistered: aDomainName]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>domainUnregistered: (in category 'accessing') ----- - domainUnregistered: aDomainName - "notify that new TextDomain is unregistered" - self translators do: [:each | each domainUnregistered: aDomainName]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>fileReaderServicesForFile:suffix: (in category 'file-services') ----- - fileReaderServicesForFile: fullName suffix: suffix - "Answer the file services associated with given file" - ^ (suffix = self translationSuffix) | (suffix = '*') - ifTrue: [{self serviceMergeLanguageTranslations}] - ifFalse: [#()]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>initialize (in category 'class initialization') ----- - initialize - Smalltalk addToStartUpList: NaturalLanguageTranslator after: FileDirectory. - ! Item was removed: - ----- Method: NaturalLanguageTranslator class>>isoLanguage: (in category 'accessing') ----- - isoLanguage: isoLanguage - "Return the generic language translator as there is no information about the country code" - - ^self isoLanguage: isoLanguage isoCountry: nil! Item was removed: - ----- Method: NaturalLanguageTranslator class>>isoLanguage:isoCountry: (in category 'accessing') ----- - isoLanguage: isoLanguage isoCountry: isoCountry - ^self localeID: (LocaleID isoLanguage: isoLanguage isoCountry: isoCountry)! Item was removed: - ----- Method: NaturalLanguageTranslator class>>loadAvailableExternalLocales (in category 'private loading') ----- - loadAvailableExternalLocales - "private - register locales IDs based on the content of the <prefs>/locale/ directory" - | localeDir | - localeDir := self localeDirCreate: false. - localeDir ifNil: [^ #()]. - localeDir directoryNames - do: [:langDirName | - | langDir | - langDir := localeDir directoryNamed: langDirName. - (langDir fileNamesMatching: '*.' , self translationSuffix) - ifNotEmpty: [self loadTranslatorForIsoLanguage: langDirName isoCountry: nil]. - langDir directoryNames - do: [:countryDirName | - | countryDir | - countryDir := langDir directoryNamed: countryDirName. - (countryDir fileNamesMatching: '*.' , self translationSuffix) - ifNotEmpty: [self loadTranslatorForIsoLanguage: langDirName isoCountry: countryDirName] - ] - ]. - ! Item was removed: - ----- Method: NaturalLanguageTranslator class>>loadAvailableLocales (in category 'private loading') ----- - loadAvailableLocales - "This loads the default locale and all external locales" - - | defaultID | - defaultID := LocaleID current. - self cachedTranslations at: defaultID ifAbsent: [self localeID: defaultID]. - self loadAvailableExternalLocales.! Item was removed: - ----- Method: NaturalLanguageTranslator class>>loadExternalTranslationsFor: (in category 'private loading') ----- - loadExternalTranslationsFor: translator - "Try to load translations from external external files. - The files are located in the <prefs>/locale/<language>{/<country>} folder. - There can be more than one file for each location, so applications can install their own partial translation tables. All files in the specific folder are loaded." - - | translationDir | - translationDir := self directoryForLocaleID: translator localeID create: false. - translationDir ifNil: [ ^nil ]. - (translationDir fileNamesMatching: '*.' , self translationSuffix) - do: [:fileName | translator loadFromFileNamed: (translationDir fullNameFor: fileName)]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>loadForLocaleIsoString:fromGzippedMimeLiteral: (in category 'file-services') ----- - loadForLocaleIsoString: localeString fromGzippedMimeLiteral: mimeString - "merge the translation from the mime literal." - | stream localeID translator gs rbStream s currentPlatform | - s := Base64MimeConverter mimeDecodeToBytes: mimeString readStream. - s reset. - gs := GZipReadStream on: s. - rbStream := MultiByteBinaryOrTextStream with: gs contents asString. - rbStream converter: UTF8TextConverter new. - rbStream reset. - localeID := LocaleID isoString: localeString. - currentPlatform := Locale currentPlatform. - [Locale - currentPlatform: (Locale localeID: localeID). - stream := ReadStream on: rbStream contents] - ensure: [Locale currentPlatform: currentPlatform]. - translator := self localeID: localeID. - translator loadFromStream: stream. - LanguageEnvironment resetKnownEnvironments! Item was removed: - ----- Method: NaturalLanguageTranslator class>>loadTranslatorForIsoLanguage:isoCountry: (in category 'private loading') ----- - loadTranslatorForIsoLanguage: isoLanguage isoCountry: isoCountry - "private - load the translations from <prefs>/locale/ directory - the procedure is to assure the existence of a translator for the - given language/country and then load the external translations for this translator" - - | translator | - translator := self localeID: (LocaleID isoLanguage: isoLanguage isoCountry: isoCountry). - - self loadExternalTranslationsFor: translator! Item was removed: - ----- Method: NaturalLanguageTranslator class>>localeChanged (in category 'accessing') ----- - localeChanged - "notify some project starts to use this locale. - this facility may use the event to load translation data dynamically" - self current setCurrent - ! Item was removed: - ----- Method: NaturalLanguageTranslator class>>localeDirCreate: (in category 'private loading') ----- - localeDirCreate: createDir - "Try to locate the <prefs>/locale/ folder. - If createDir is set, try to create the path. - If it doesn't exist, return nil" - - "If this fails, there is nothing we can do about it here" - | prefDir localeDir | - (createDir not - and: [ExternalSettings preferenceDirectory isNil]) - ifTrue: [^ nil]. - - prefDir := ExternalSettings assuredPreferenceDirectory. - prefDir exists - ifFalse: [^nil]. - - - localeDir := prefDir directoryNamed: 'locale'. - createDir - ifTrue: [localeDir assureExistence]. - ^localeDir exists - ifTrue: [localeDir] - ifFalse: [nil]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>localeID: (in category 'accessing') ----- - localeID: localeID - ^ self cachedTranslations - at: localeID - ifAbsentPut: [self new localeID: localeID]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>mergeTranslationFileNamed: (in category 'file-services') ----- - mergeTranslationFileNamed: fileFullNameString - "merge the translation in the file named fileFullNameString" - - FileStream readOnlyFileNamed: fileFullNameString do: [:stream | - | localeID translator | - localeID := LocaleID isoString: stream localName sansPeriodSuffix. - translator := self localeID: localeID. - translator loadFromStream: stream]. - LanguageEnvironment resetKnownEnvironments. - - ! Item was removed: - ----- Method: NaturalLanguageTranslator class>>privateStartUp (in category 'class initialization') ----- - privateStartUp - self resetCaches. - GetTextTranslator privateStartUp. - InternalTranslator privateStartUp. - self localeChanged.! Item was removed: - ----- Method: NaturalLanguageTranslator class>>registerPhrase: (in category 'private') ----- - registerPhrase: phrase - "Using a Dictionary so we can lookup existing string instead of creating needless copies when loading a translation." - self allKnownPhrases at: phrase put: phrase! Item was removed: - ----- Method: NaturalLanguageTranslator class>>registeredPhraseFor: (in category 'private') ----- - registeredPhraseFor: phrase - "Using a Dictionary so we can lookup existing string instead of creating needless copies when loading a translation." - ^self allKnownPhrases at: phrase ifAbsentPut: [phrase]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>removeLocaleID: (in category 'accessing') ----- - removeLocaleID: localeID - "self removeLocaleID: (LocaleID isoString: 'ja-kids')" - ^ self translators - removeKey: localeID - ifAbsent: []! Item was removed: - ----- Method: NaturalLanguageTranslator class>>resetCaches (in category 'class initialization') ----- - resetCaches - Translators := nil.! Item was removed: - ----- Method: NaturalLanguageTranslator class>>serviceMergeLanguageTranslations (in category 'file-services') ----- - serviceMergeLanguageTranslations - "Answer a service for merging of translation files" - ^ SimpleServiceEntry - provider: self - label: 'merge the translation file' - selector: #mergeTranslationFileNamed: - description: 'merge the translation file into the language named like the file' - buttonLabel: 'merge'! Item was removed: - ----- Method: NaturalLanguageTranslator class>>services (in category 'file-services') ----- - services - "Answer potential file services associated with this class" - ^ {self serviceMergeLanguageTranslations}! Item was removed: - ----- Method: NaturalLanguageTranslator class>>startUp: (in category 'class initialization') ----- - startUp: resuming - resuming - ifFalse: [^ self]. - self privateStartUp.! Item was removed: - ----- Method: NaturalLanguageTranslator class>>translate:toLocaleID: (in category 'translation') ----- - translate: aString toLocaleID: localeID - "translate for default domain" - ^ (self availableForLocaleID: localeID) - translate: aString! Item was removed: - ----- Method: NaturalLanguageTranslator class>>translate:toLocaleID:inDomain: (in category 'translation') ----- - translate: aString toLocaleID: localeID inDomain: aDomainName - ^ (self availableForLocaleID: localeID) - translate: aString inDomain: aDomainName! Item was removed: - ----- Method: NaturalLanguageTranslator class>>translateWithoutLoading:toLocaleID: (in category 'translation') ----- - translateWithoutLoading: aString toLocaleID: localeID - "translate for default domain" - ^self translateWithoutLoading: aString toLocaleID: localeID inDomain: TextDomainManager defaultDomain. - ! Item was removed: - ----- Method: NaturalLanguageTranslator class>>translateWithoutLoading:toLocaleID:inDomain: (in category 'translation') ----- - translateWithoutLoading: aString toLocaleID: localeID inDomain: aDomainName - "try to translate with small footprint: - if GetTextTranslator hasn't loaded MO, try to use InternalTranslator. - if InternalTranslator isn't available, then actually load MO and use it" - | translator | - translator := self availableForLocaleID: localeID. - (translator isDomainLoaded: aDomainName) ifFalse: [ - (InternalTranslator availableLanguageLocaleIDs includes: localeID) - ifTrue: [translator := InternalTranslator localeID: localeID]. - ]. - ^translator translate: aString inDomain: aDomainName! Item was removed: - ----- Method: NaturalLanguageTranslator class>>translationSuffix (in category 'private') ----- - translationSuffix - ^'translation'! Item was removed: - ----- Method: NaturalLanguageTranslator class>>translators (in category 'accessing') ----- - translators - ^ Translators ifNil: [Translators := Dictionary new] ! Item was removed: - ----- Method: NaturalLanguageTranslator>>atRandom (in category 'accessing') ----- - atRandom - - self subclassResponsibility. - ! Item was removed: - ----- Method: NaturalLanguageTranslator>>checkPhrase:translation: (in category 'translation') ----- - checkPhrase: phrase translation: translation! Item was removed: - ----- Method: NaturalLanguageTranslator>>defaultBackgroundColor (in category 'user interface') ----- - defaultBackgroundColor - "answer the receiver's defaultBackgroundColor for views" - ^ Color cyan! Item was removed: - ----- Method: NaturalLanguageTranslator>>displayLanguage (in category 'accessing') ----- - displayLanguage - ^ id displayLanguage! Item was removed: - ----- Method: NaturalLanguageTranslator>>displayName (in category 'accessing') ----- - displayName - ^ id displayName! Item was removed: - ----- Method: NaturalLanguageTranslator>>domainRegistered: (in category 'accessing') ----- - domainRegistered: aDomainName - "notify that new TextDomain is registered. Concrete subclass can responds to this event if needed"! Item was removed: - ----- Method: NaturalLanguageTranslator>>domainUnregistered: (in category 'accessing') ----- - domainUnregistered: aDomainName - "notify that new TextDomain is unregistered. Concrete subclass can responds to this event if needed"! Item was removed: - ----- Method: NaturalLanguageTranslator>>fileOutHeader (in category 'fileIn/fileOut') ----- - fileOutHeader - ^ '''Translation dictionary'''! Item was removed: - ----- Method: NaturalLanguageTranslator>>fileOutHeaderOn: (in category 'fileIn/fileOut') ----- - fileOutHeaderOn: aStream - aStream nextChunkPut: self fileOutHeader; - cr. - aStream timeStamp; cr. - aStream nextPut: $!!. - aStream nextChunkPut: '(' , self class name , ' localeID: ' , id storeString , ')'. - aStream cr! Item was removed: - ----- Method: NaturalLanguageTranslator>>fileOutOn: (in category 'fileIn/fileOut') ----- - fileOutOn: aStream - "self current fileOutOn: Transcript. Transcript endEntry" - self fileOutHeaderOn: aStream. - self fileOutOn: aStream keys: nil! Item was removed: - ----- Method: NaturalLanguageTranslator>>fileOutOn:keys: (in category 'fileIn/fileOut') ----- - fileOutOn: aStream keys: keys - "self current fileOutOn: Transcript. Transcript endEntry" - (keys - ifNil: [generics keys asArray sort]) - do: [:key | self - nextChunkPut: (generics associationAt: key) - on: aStream]. - keys - ifNil: [self untranslated - do: [:each | self nextChunkPut: each -> '' on: aStream]]. - aStream nextPut: $!!; - cr! Item was removed: - ----- Method: NaturalLanguageTranslator>>generics (in category 'private') ----- - generics - ^generics ifNil: [generics := Dictionary new]! Item was removed: - ----- Method: NaturalLanguageTranslator>>isDomainLoaded: (in category 'accessing') ----- - isDomainLoaded: aDomainName - "ask if translation dictionary for the domain has been loaded and available now for use" - self subclassResponsibility.! Item was removed: - ----- Method: NaturalLanguageTranslator>>isoCountry (in category 'accessing') ----- - isoCountry - ^self localeID isoCountry! Item was removed: - ----- Method: NaturalLanguageTranslator>>isoLanguage (in category 'accessing') ----- - isoLanguage - ^self localeID isoLanguage! Item was removed: - ----- Method: NaturalLanguageTranslator>>loadFromFileNamed: (in category 'private store-retrieve') ----- - loadFromFileNamed: fileNameString - "Load translations from an external file" - - FileStream readOnlyFileNamed: fileNameString do: [ :file | - self loadFromStream: file ]. - self changed: #translations. - self changed: #untranslated. - ! Item was removed: - ----- Method: NaturalLanguageTranslator>>loadFromRefStream: (in category 'private store-retrieve') ----- - loadFromRefStream: stream - "Load translations from an external file" - | loadedArray refStream | - refStream := ReferenceStream on: stream. - [loadedArray := refStream next] - ensure: [refStream close]. - self processExternalObject: loadedArray ! Item was removed: - ----- Method: NaturalLanguageTranslator>>loadFromStream: (in category 'private store-retrieve') ----- - loadFromStream: stream - "Load translations from an external file" - | header isFileIn | - header := '''Translation dictionary'''. - isFileIn := (stream next: header size) - = header. - stream reset. - isFileIn - ifTrue: [stream fileInAnnouncing: 'Loading ' translated, stream localName] - ifFalse: [self loadFromRefStream: stream]! Item was removed: - ----- Method: NaturalLanguageTranslator>>localeID (in category 'accessing') ----- - localeID - ^id! Item was removed: - ----- Method: NaturalLanguageTranslator>>localeID: (in category 'initialize-release') ----- - localeID: anID - id := anID! Item was removed: - ----- Method: NaturalLanguageTranslator>>mergeTranslations: (in category 'private store-retrieve') ----- - mergeTranslations: newTranslations - "Merge a new set of translations into the exiting table. - Overwrites existing entries." - - newTranslations keysAndValuesDo: [:key :value | - self rawPhrase: (self class registeredPhraseFor: key) translation: value]. - self changed: #translations. - self changed: #untranslated.! Item was removed: - ----- Method: NaturalLanguageTranslator>>nextChunkPut:on: (in category 'fileIn/fileOut') ----- - nextChunkPut: anObject on: aStream - | i remainder terminator | - terminator := $!!. - remainder := anObject storeString. - [(i := remainder indexOf: terminator) = 0] - whileFalse: [aStream - nextPutAll: (remainder copyFrom: 1 to: i). - aStream nextPut: terminator. - "double imbedded terminators" - remainder := remainder copyFrom: i + 1 to: remainder size]. - aStream nextPutAll: remainder. - aStream nextPut: terminator; cr.! Item was removed: - ----- Method: NaturalLanguageTranslator>>phrase:translation: (in category 'translation') ----- - phrase: phraseString translation: translationString - self generics at: phraseString put: translationString asString. - self changed: #translations. - self changed: #untranslated.! Item was removed: - ----- Method: NaturalLanguageTranslator>>printOn: (in category 'printing') ----- - printOn: aStream - aStream nextPutAll: self class name; nextPut: $(; print: self localeID; nextPut: $)! Item was removed: - ----- Method: NaturalLanguageTranslator>>processExternalObject: (in category 'private store-retrieve') ----- - processExternalObject: anArray - "pivate - process the external object" - - "new format -> {translations. untranslated}" - - anArray second do: [:each | self class registerPhrase: each]. - - self mergeTranslations: anArray first! Item was removed: - ----- Method: NaturalLanguageTranslator>>rawPhrase:translation: (in category 'translation') ----- - rawPhrase: phraseString translation: translationString - self generics at: phraseString put: translationString asString. - ! Item was removed: - ----- Method: NaturalLanguageTranslator>>rawRemoveUntranslated: (in category 'translation') ----- - rawRemoveUntranslated: untranslated - - self class allKnownPhrases removeKey: untranslated ifAbsent: []. - self changed: #untranslated.! Item was removed: - ----- Method: NaturalLanguageTranslator>>removeTranslationFor: (in category 'translation') ----- - removeTranslationFor: phraseString - self generics removeKey: phraseString ifAbsent: []. - self changed: #translations. - self changed: #untranslated.! Item was removed: - ----- Method: NaturalLanguageTranslator>>removeUntranslated: (in category 'translation') ----- - removeUntranslated: untranslated - - self class allKnownPhrases removeKey: untranslated ifAbsent: []. - ! Item was removed: - ----- Method: NaturalLanguageTranslator>>saveToFileNamed: (in category 'private store-retrieve') ----- - saveToFileNamed: fileNameString - "save the receiver's translations to a file named fileNameString" - | stream | - "Set true if you need to save as binary" - false - ifTrue: [stream := ReferenceStream fileNamed: fileNameString. - stream nextPut: {self translations. self untranslated}. - stream close. - ^ self]. - stream := FileStream fileNamed: fileNameString. - [self fileOutOn: stream] - ensure: [stream close]! Item was removed: - ----- Method: NaturalLanguageTranslator>>scanFrom: (in category 'fileIn/fileOut') ----- - scanFrom: aStream - "Read a definition of dictionary. - Make sure current locale corresponds my locale id" - | newTranslations currentPlatform | - newTranslations := Dictionary new. - currentPlatform := Locale currentPlatform. - [ | aString assoc | - Locale - currentPlatform: (Locale localeID: id). - [aString := aStream nextChunk withSqueakLineEndings. - aString size > 0] - whileTrue: [assoc := Compiler evaluate: aString. - assoc value = '' - ifTrue: [self class registerPhrase: assoc key] - ifFalse: [newTranslations add: assoc]]] - ensure: [Locale currentPlatform: currentPlatform]. - self mergeTranslations: newTranslations! Item was removed: - ----- Method: NaturalLanguageTranslator>>setCurrent (in category 'language switching') ----- - setCurrent - "notify locale of the translator become current" - ! Item was removed: - ----- Method: NaturalLanguageTranslator>>translate: (in category 'translation') ----- - translate: aString - ^self translate: aString - inDomain: TextDomainManager defaultDomain! Item was removed: - ----- Method: NaturalLanguageTranslator>>translate:in: (in category 'translation') ----- - translate: aString in: aContext! Item was removed: - ----- Method: NaturalLanguageTranslator>>translate:inDomain: (in category 'translation') ----- - translate: aString inDomain: aDomainName - ^ aString! Item was removed: - ----- Method: NaturalLanguageTranslator>>translationFor: (in category 'translation') ----- - translationFor: aString - ^self translate: aString! Item was removed: - ----- Method: NaturalLanguageTranslator>>translations (in category 'accessing') ----- - translations - ^self generics! Item was removed: - ----- Method: NaturalLanguageTranslator>>untranslated (in category 'accessing') ----- - untranslated - | translations | - translations := self translations. - ^self class allKnownPhrases reject: [:each | translations includesKey: each]! Item was removed: - ----- Method: NaturalLanguageTranslator>>writeAsMimeString (in category 'fileIn/fileOut') ----- - writeAsMimeString - - | fileName fileStream tmpStream s2 gzs | - tmpStream := MultiByteBinaryOrTextStream on: ''. - tmpStream converter: UTF8TextConverter new. - self fileOutOn: tmpStream. - s2 := RWBinaryOrTextStream on: ''. - gzs := GZipWriteStream on: s2. - tmpStream reset. - gzs nextPutAll: (tmpStream binary contentsOfEntireFile asString) contents. - gzs close. - s2 reset. - - fileName := id isoString, '.translation.gz.mime'. - fileStream := FileStream newFileNamed: fileName. - fileStream nextPutAll: (Base64MimeConverter mimeEncode: s2) contents. - fileStream close. - !
1
0
0
0
The Trunk: GetText-edc.20.mcz
by commits@source.squeak.org
29 Mar '12
29 Mar '12
Edgar J. De Cleene uploaded a new version of GetText to project The Trunk:
http://source.squeak.org/trunk/GetText-edc.20.mcz
==================== Summary ==================== Name: GetText-edc.20 Author: edc Time: 29 March 2012, 7:32:49.142 am UUID: 958a59da-4fce-4c70-a776-166b3c8237a8 Ancestors: GetText-edc.17 Clean Undeclared. {InternalTranslator ISOLanguageDefinition Locale LocaleID NaturalLanguageFormTranslator NaturalLanguageTranslator} Moved back to System-Localization =============== Diff against GetText-edc.17 =============== Item was changed: ----- Method: GetTextExporter>>appendStringReceivers:into: (in category 'private') ----- appendStringReceivers: aSymbol into: domains | literals references domainName methodReference keywords found | found := TranslatedReceiverFinder new stringReceiversWithContext: aSymbol. found do: [ :assoc | methodReference := assoc key. keywords := assoc value. domainName := (PackageOrganizer default packageOfMethod: methodReference ifNone: [nil]). domainName := domainName isNil ifTrue: [TextDomainManager defaultDomain] ifFalse: [domainName name]. + literals := domains at: domainName ifAbsentPut: [Dictionary new]. - literals _ domains at: domainName ifAbsentPut: [Dictionary new]. keywords do: [ :literal | + references := literals at: literal ifAbsentPut: [OrderedCollection new]. - references _ literals at: literal ifAbsentPut: [OrderedCollection new]. references add: methodReference. ]. ]. ! Item was changed: ----- Method: GetTextExporter>>appendVocabularies: (in category 'private') ----- appendVocabularies: domains | literalsForDomain references domainName methodReference | EToyVocabulary allPhrasesWithContextToTranslate do: [ :r | methodReference := (MethodReference new setStandardClass: (r second) methodSymbol: (r third)). + "domainName := self getTextDomainForPackage: (PackageOrganizer default packageOfMethod: methodReference)". - "domainName _ self getTextDomainForPackage: (PackageOrganizer default packageOfMethod: methodReference)". domainName := 'Etoys-Tiles'. + literalsForDomain := domains at: domainName ifAbsentPut: [Dictionary new]. - literalsForDomain _ domains at: domainName ifAbsentPut: [Dictionary new]. r fourth do: [ :literal | + references := literalsForDomain at: literal ifAbsentPut: [OrderedCollection new]. - references _ literalsForDomain at: literal ifAbsentPut: [OrderedCollection new]. references add: methodReference. ]. ]. ! Item was changed: ----- Method: GetTextExporter>>dirNameCategory:translator: (in category 'exporting') ----- dirNameCategory: category translator: translator "Answer a file name for the category. Make one if it is not exist yet. Make template file name if translator is nil" "self new dirNameCategory: 'Morphic-Scripting Support' translator: NaturalLanguageTranslator current" "self new dirNameCategory: 'Morphic-Scripting Support' translator: nil" | safeCategory fileName dirName pathName | + safeCategory := category copyReplaceAll: ' ' with: ':='. - safeCategory := category copyReplaceAll: ' ' with: '_'. fileName := translator ifNil: [safeCategory , '.pot'] ifNotNil: [translator localeID posixName , '.po']. dirName := (safeCategory findTokens: '-') inject: 'po' into: [:aString :next | aString , FileDirectory slash , next]. pathName := dirName , FileDirectory slash , fileName. (FileDirectory default directoryNamed: dirName) assureExistence. ^ pathName! Item was changed: ----- Method: GetTextExporter>>dirNameDomain:translator: (in category 'exporting') ----- dirNameDomain: domain translator: translator "Answer a file name for the domain. Make one if it is not exist yet. Make template file name if translator is nil" "self new dirNameDomain: 'etoys' translator: NaturalLanguageTranslator current" "self new dirNameDomain: 'etoys' translator: nil" | fileName dirName pathName | + "safeCategory := category copyReplaceAll: ' ' with: ':='." - "safeCategory := category copyReplaceAll: ' ' with: '_'." fileName := domain, (translator ifNil: ['.pot'] ifNotNil: ['.po']). dirName := 'po', FileDirectory slash, (translator ifNil: ['templates'] ifNotNil: [translator localeID posixName]). pathName := dirName , FileDirectory slash , fileName. (FileDirectory default directoryNamed: dirName) assureExistence. ^ pathName! Item was changed: ----- Method: GetTextExporter>>exportBody:translator: (in category 'file out') ----- exportBody: literals translator: translator "Export a gettext file body. literals is a dictionary of keyword -> #(MethodReference...) in the textDomain." "Build {sortKey. comment. msgid } to optimize sorting (getting category is too slow). If there are two or more methods for a mgsid, only first method (alphabetical) is used for sorting." | sorted msgid sortedMethods category sortKey comment triplets commentUnderLined | triplets := literals associations collect: [:assoc | msgid := assoc key. sortedMethods := assoc value asArray sort. category := (Smalltalk at: sortedMethods first classSymbol) category asString. sortKey := category , ',' , sortedMethods first printString , ',' , msgid. comment := (sortedMethods collect: [:each | each actualClass asString , '>>' , each methodSymbol asString]) inject: category into: [:result :methodName | result , ',' , methodName]. + "Replace white spaces to := because gettext tool might - "Replace white spaces to _ because gettext tool might replace a space to a new line some times, and it makes difficult to take a diff." + commentUnderLined := comment copyReplaceAll: ' ' with: ':='. - commentUnderLined := comment copyReplaceAll: ' ' with: '_'. Array with: sortKey with: commentUnderLined with: msgid]. "Sort and output the words" sorted := triplets sort: [:a :b | a first <= b first]. sorted do: [:triplet | comment := triplet second. msgid := triplet third. self exportRecordHeader: comment. self exportPhrase: msgid translation: (self translationFor: msgid in: translator)]! Item was changed: ----- Method: GetTextExporter>>exportPhrase:translation: (in category 'private') ----- exportPhrase: phraseString translation: translationString | normalizedTrans tmp transStartsWithCR transEndsWithCR| phraseString isEmpty ifTrue: [^ self]. self exportTag: 'msgid' msg: phraseString. translationString size = 0 ifTrue: [ + normalizedTrans := '' - normalizedTrans _ '' ] ifFalse: [ + transEndsWithCR := translationString last = (Character cr). - transEndsWithCR _ translationString last = (Character cr). phraseString last = (Character cr) ifTrue: [ transEndsWithCR ifTrue: [ + normalizedTrans := translationString - normalizedTrans _ translationString ] ifFalse: [ + normalizedTrans := translationString , String cr - normalizedTrans _ translationString , String cr ] ] ifFalse: [ transEndsWithCR ifTrue: [ + normalizedTrans := translationString allButLast - normalizedTrans _ translationString allButLast ] ifFalse: [ + normalizedTrans := translationString - normalizedTrans _ translationString ] ]. + transStartsWithCR := normalizedTrans first = (Character cr). - transStartsWithCR _ normalizedTrans first = (Character cr). phraseString first = (Character cr) ifTrue: [ transStartsWithCR ifFalse: [ + tmp := (Character cr asString) , normalizedTrans. + normalizedTrans := tmp. - tmp _ (Character cr asString) , normalizedTrans. - normalizedTrans _ tmp. ] ] ifFalse: [ transStartsWithCR ifTrue: [ + normalizedTrans := normalizedTrans allButFirst - normalizedTrans _ normalizedTrans allButFirst ] ] ]. self exportTag: 'msgstr' msg: normalizedTrans. stream cr! Item was changed: ----- Method: GetTextInterchange>>language: (in category 'accessing') ----- language: translator + language := translator! - language _ translator! Item was changed: ----- Method: GetTextInterchange>>stream: (in category 'accessing') ----- stream: aStream + stream := aStream! - stream _ aStream! Item was changed: ----- Method: GetTextTranslator class>>defaultLocaleDirs (in category 'translation data layout') ----- defaultLocaleDirs | dirs | + dirs := OrderedCollection new. - dirs _ OrderedCollection new. UserDefaultLocaleDirs ifNotNil: [dirs addAll: UserDefaultLocaleDirs]. dirs addAll: self systemDefaultLocaleDirs. ^dirs ! Item was changed: ----- Method: GetTextTranslator class>>findMOForLocaleID:domain: (in category 'private') ----- findMOForLocaleID: id domain: aDomainName | sepa langSubDir path | + sepa := FileDirectory slash. + langSubDir := self langDirNameForLocaleID: id. - sepa _ FileDirectory slash. - langSubDir _ self langDirNameForLocaleID: id. (self localeDirsForDomain: aDomainName) do: [:each | + path := each , sepa , langSubDir, sepa , (self moNameForDomain: aDomainName). - path _ each , sepa , langSubDir, sepa , (self moNameForDomain: aDomainName). [(FileDirectory default fileExists: path) ifTrue: [^path]] on: InvalidDirectoryError do: [:e | ^nil]]. ^nil.! Item was changed: ----- Method: GetTextTranslator class>>initialize (in category 'class initialization') ----- initialize + SystemDefaultLocaleDirs := OrderedCollection new. + UserDefaultLocaleDirs := OrderedCollection new. + LocaleDirsForDomain := Dictionary new.! - SystemDefaultLocaleDirs _ OrderedCollection new. - UserDefaultLocaleDirs _ OrderedCollection new. - LocaleDirsForDomain _ Dictionary new.! Item was changed: ----- Method: GetTextTranslator class>>localeDirsForDomain (in category 'private') ----- localeDirsForDomain + ^LocaleDirsForDomain ifNil: [LocaleDirsForDomain := Dictionary new]! - ^LocaleDirsForDomain ifNil: [LocaleDirsForDomain _ Dictionary new]! Item was changed: ----- Method: GetTextTranslator class>>localeDirsForDomain: (in category 'translation data layout') ----- localeDirsForDomain: aDomainName "returns collection of locale directories for text domain. This includes user defined one for the domain, user defaults and system defaults" | dirs dir | + dirs := OrderedCollection new. + dir := self localeDirForDomain: aDomainName. - dirs _ OrderedCollection new. - dir _ self localeDirForDomain: aDomainName. dir ifNotNil: [dirs add: dir]. dirs addAll: self defaultLocaleDirs. ^dirs! Item was changed: ----- Method: GetTextTranslator>>initialize (in category 'initialize-release') ----- initialize + moFiles := Dictionary new.! - moFiles _ Dictionary new.! Item was changed: ----- Method: GetTextTranslator>>isDomainLoaded: (in category 'accessing') ----- isDomainLoaded: aDomainName | mo | + mo := moFiles at: aDomainName ifAbsent: [nil]. - mo _ moFiles at: aDomainName ifAbsent: [nil]. ^mo isNil not. ! Item was changed: ----- Method: GetTextTranslator>>loadMOFileForDomain: (in category 'private') ----- loadMOFileForDomain: aDomainName | moName | + moName := self class findMOForLocaleID: self localeID - moName _ self class findMOForLocaleID: self localeID domain: aDomainName. moName notNil ifTrue: [^MOFile new load: moName localeID: self localeID] ifFalse: [^nil] ! Item was changed: ----- Method: GetTextTranslator>>reloadMOFiles (in category 'accessing') ----- reloadMOFiles + moFiles := Dictionary new. - moFiles _ Dictionary new. self loadMOFiles.! Item was changed: ----- Method: GetTextTranslator>>translate:inDomain: (in category 'translation') ----- translate: aString inDomain: aDomainName | mo | + mo := self moFileForDomain: aDomainName. - mo _ self moFileForDomain: aDomainName. ^mo isNil ifTrue: [aString] ifFalse: [mo translationFor: aString] ! Item was removed: - Object subclass: #ISOLanguageDefinition - instanceVariableNames: 'iso3 iso2 iso3Alternate language' - classVariableNames: 'ISO2Countries ISO2Table ISO3Countries ISO3Table' - poolDictionaries: '' - category: 'GetText-Localization'! Item was removed: - ----- Method: ISOLanguageDefinition class>>buildIso3166CodesTables (in category 'private') ----- - buildIso3166CodesTables - "ISOLanguageDefinition buildIso3166CodesTables" - | rawdata stream country isoa2 isoa3 unNumeric macName macCode windowsName windowsCode empty table | - rawdata := self iso3166Codes. - table := OrderedCollection new: 200. - stream := rawdata readStream. - empty := 160 asCharacter asString. - [stream atEnd] whileFalse: - [country := stream nextLine. - isoa2 := stream nextLine. - isoa3 := stream nextLine. - unNumeric := stream nextLine. - windowsName := stream nextLine. - windowsName = empty ifTrue: [windowsName := nil]. - windowsCode := stream nextLine. - windowsCode = empty ifTrue: [windowsCode := nil]. - macName := stream nextLine. - macName = empty ifTrue: [macName := nil]. - macCode := stream nextLine. - macCode = empty ifTrue: [macCode := nil]. - table add: { country. isoa2. isoa3. unNumeric. windowsName. windowsCode. macName. macCode. }]. - ^table! Item was removed: - ----- Method: ISOLanguageDefinition class>>extraCountryDefinitions (in category 'private') ----- - extraCountryDefinitions - ^{ - {'Kids'. 'KIDS'. 'KIDS'.}. - }! Item was removed: - ----- Method: ISOLanguageDefinition class>>extraISO3Definitions (in category 'private') ----- - extraISO3Definitions - - ^self readISOLanguagesFrom: 'jpk Japanese (Kids) - ' readStream! Item was removed: - ----- Method: ISOLanguageDefinition class>>initISO3LanguageTable (in category 'private') ----- - initISO3LanguageTable - "ISOLanguageDefinition initIso3LanguageTable" - - | table | - table := ISOLanguageDefinition readISOLanguagesFrom: ISOLanguageDefinition isoLanguages readStream. - table addAll: self extraISO3Definitions. - ^table! Item was removed: - ----- Method: ISOLanguageDefinition class>>initISOCountries (in category 'private') ----- - initISOCountries - "ISOLanguageDefinition initISOCountries" - | iso3166Table | - iso3166Table := ISOLanguageDefinition buildIso3166CodesTables. - ISO2Countries := Dictionary new. - ISO3Countries := Dictionary new. - iso3166Table do: [:entry | - ISO2Countries at: (entry at: 2) put: (entry at: 1). - ISO3Countries at: (entry at: 3) put: (entry at: 1)]. - self extraCountryDefinitions do: [:entry | - ISO2Countries at: (entry at: 2) put: (entry at: 1). - ISO3Countries at: (entry at: 3) put: (entry at: 1)]! Item was removed: - ----- Method: ISOLanguageDefinition class>>initialize (in category 'class initialization') ----- - initialize - "ISOLanguageDefinition initialize" - - ISO3Table := nil. - ISO2Table := nil! Item was removed: - ----- Method: ISOLanguageDefinition class>>iso2Countries (in category 'private') ----- - iso2Countries - "ISOLanguageDefinition iso2Countries" - "ISO2Countries := nil. ISO3Countries := nil" - - ISO2Countries ifNil: [self initISOCountries]. - ^ISO2Countries! Item was removed: - ----- Method: ISOLanguageDefinition class>>iso2LanguageDefinition: (in category 'accessing') ----- - iso2LanguageDefinition: aString - ^self iso2LanguageTable at: aString! Item was removed: - ----- Method: ISOLanguageDefinition class>>iso2LanguageTable (in category 'private') ----- - iso2LanguageTable - "ISOLanguageDefinition iso2LanguageTable" - - ISO2Table ifNotNil: [^ISO2Table]. - ISO2Table := Dictionary new: self iso3LanguageTable basicSize. - self iso3LanguageTable do: [:entry | - ISO2Table at: entry iso2 put: entry]. - ^ISO2Table! Item was removed: - ----- Method: ISOLanguageDefinition class>>iso3166Codes (in category 'private') ----- - iso3166Codes - "
http://www.unicode.org/onlinedat/countries.html
" - - ^'ÅLAND ISLANDS - AX - - - - - - - AFGHANISTAN - AF - AFG - 004 - - - - - ALBANIA - AL - ALB - 008 - CTRY_ALBANIA - 355 - - - ALGERIA - DZ - DZA - 012 - CTRY_ALGERIA - 213 - verArabic - 16 - AMERICAN SAMOA - AS - ASM - 016 - - - - - ANDORRA - AD - AND - 020 - - - - - ANGOLA - AO - AGO - 024 - - - - - ANGUILLA - AI - AIA - 660 - - - - - ANTARCTICA - AQ - ATA - 010 - - - - - ANTIGUA AND BARBUDA - AG - ATG - 028 - - - - - ARGENTINA - AR - ARG - 032 - CTRY_ARGENTINA - 54 - - - ARMENIA - AM - ARM - 051 - CTRY_ARMENIA - 374 - verArmenian - 84 - ARUBA - AW - ABW - 533 - - - - - AUSTRALIA - AU - AUS - 036 - CTRY_AUSTRALIA - 61 - verAustralia - 15 - AUSTRIA - AT - AUT - 040 - CTRY_AUSTRIA - 43 - verAustria - 92 - AZERBAIJAN - AZ - AZE - 031 - CTRY_AZERBAIJAN - 994 - - - BAHAMAS - BS - BHS - 044 - - - - - BAHRAIN - BH - BHR - 048 - CTRY_BAHRAIN - 973 - - - BANGLADESH - BD - BGD - 050 - - - verBengali - 60 - BARBADOS - BB - BRB - 052 - - - - - BELARUS - BY - BLR - 112 - CTRY_BELARUS - 375 - - - BELGIUM - BE - BEL - 056 - CTRY_BELGIUM - 32 - verFrBelgium, verFlemish - 98 - BELIZE - BZ - BLZ - 084 - CTRY_BELIZE - 501 - - - BENIN - BJ - BEN - 204 - - - - - BERMUDA - BM - BMU - 060 - - - - - BHUTAN - BT - BTN - 064 - - - verBhutan - 83 - BOLIVIA - BO - BOL - 068 - CTRY_BOLIVIA - 591 - - - BOSNIA AND HERZEGOVINA - BA - BIH - 070 - - - - - BOTSWANA - BW - BWA - 072 - - - - - BOUVET ISLAND - BV - BVT - 074 - - - - - BRAZIL - BR - BRA - 076 - CTRY_BRAZIL - 55 - verBrazil - 71 - BRITISH INDIAN OCEAN TERRITORY - IO - IOT - 086 - - - - - BRUNEI DARUSSALAM - BN - BRN - 096 - CTRY_BRUNEI_DARUSSALAM - 673 - - - BULGARIA - BG - BGR - 100 - CTRY_BULGARIA - 359 - verBulgaria - 72 - BURKINA FASO - BF - BFA - 854 - - - - - BURUNDI - BI - BDI - 108 - - - - - CAMBODIA - KH - KHM - 116 - - - - - CAMEROON - CM - CMR - 120 - - - - - CANADA - CA - CAN - 124 - CTRY_CANADA - 2 - verFrCanada, verEndCanada - 82 - CAPE VERDE - CV - CPV - 132 - - - - - CAYMAN ISLANDS - KY - CYM - 136 - - - - - CENTRAL AFRICAN REPUBLIC - CF - CAF - 140 - - - - - CHAD - TD - TCD - 148 - - - - - CHILE - CL - CHL - 152 - CTRY_CHILE - 56 - - - CHINA - CN - CHN - 156 - CTRY_PRCHINA - 86 - verChina - 52 - CHRISTMAS ISLAND - CX - CXR - 162 - - - - - COCOS (KEELING) ISLANDS - CC - CCK - 166 - - - - - COLOMBIA - CO - COL - 170 - CTRY_COLOMBIA - 57 - - - COMOROS - KM - COM - 174 - - - - - CONGO - CG - COG - 178 - - - - - CONGO, THE DEMOCRATIC REPUBLIC OF THE - CD - - - - - - - COOK ISLANDS - CK - COK - 184 - - - - - COSTA RICA - CR - CRI - 188 - CTRY_COSTA_RICA - 506 - - - COTE D''IVOIRE - CI - CIV - 384 - - - - - CROATIA (local name: Hrvatska) - HR - HRV - 191 - CTRY_CROATIA - 385 - verCroatia, verYugoCroatian - 68 (c), 25 (y) - CUBA - CU - CUB - 192 - - - - - CYPRUS - CY - CYP - 196 - - - verCyprus - 23 - CZECH REPUBLIC - CZ - CZE - 203 - CTRY_CZECH - 420 - verCzech - 56 - DENMARK - DK - DNK - 208 - CTRY_DENMARK - 45 - verDenmark(da), verFaeroeIsl(fo) - 9(da), 47(fo) - DJIBOUTI - DJ - DJI - 262 - - - - - DOMINICA - DM - DMA - 212 - - - - - DOMINICAN REPUBLIC - DO - DOM - 214 - CTRY_DOMINICAN_REPUBLIC - 1 - - - EAST TIMOR - TL - TLS - 626 - - - - - ECUADOR - EC - ECU - 218 - CTRY_ECUADOR - 593 - - - EGYPT - EG - EGY - 818 - CTRY_EGYPT - 20 - verArabic - 16 - EL SALVADOR - SV - SLV - 222 - CTRY_EL_SALVADOR - 503 - - - EQUATORIAL GUINEA - GQ - GNQ - 226 - - - - - ERITREA - ER - ERI - 232 - - - - - ESTONIA - EE - EST - 233 - CTRY_ESTONIA - 372 - verEstonia - 44 - ETHIOPIA - ET - ETH - 210 - - - - - FALKLAND ISLANDS (MALVINAS) - FK - FLK - 238 - - - - - FAROE ISLANDS - FO - FRO - 234 - CTRY_FAEROE_ISLANDS - 298 - - - FIJI - FJ - FJI - 242 - - - - - FINLAND - FI - FIN - 246 - CTRY_FINLAND - 358 - verFinland - 17 - FRANCE - FR - FRA - 250 - CTRY_FRANCE - 33 - verFrance - 1 - FRANCE, METROPOLITAN - FX - FXX - 249 - - - - - FRENCH GUIANA - GF - GUF - 254 - - - - - FRENCH POLYNESIA - PF - PYF - 258 - - - - - FRENCH SOUTHERN TERRITORIES - TF - ATF - 260 - - - - - GABON - GA - GAB - 266 - - - - - GAMBIA - GM - GMB - 270 - - - - - GEORGIA - GE - GEO - 268 - CTRY_GEORGIA - 995 - verGeorgian - 85 - GERMANY - DE - DEU - 276 - CTRY_GERMANY - 49 - verGermany - 3 - GHANA - GH - GHA - 288 - - - - - GIBRALTAR - GI - GIB - 292 - - - - - GREECE - GR - GRC - 300 - CTRY_GREECE - 30 - verGreece, verGreecePoly - 20, 40 - GREENLAND - GL - GRL - 304 - - - verGreenland - 107 - GRENADA - GD - GRD - 308 - - - - - GUADELOUPE - GP - GLP - 312 - - - - - GUAM - GU - GUM - 316 - - - - - GUATEMALA - GT - GTM - 320 - CTRY_GUATEMALA - 502 - - - GUINEA - GN - GIN - 324 - - - - - GUINEA-BISSAU - GW - GNB - 624 - - - - - GUYANA - GY - GUY - 328 - - - - - HAITI - HT - HTI - 332 - - - - - HEARD ISLAND & MCDONALD ISLANDS - HM - HMD - 334 - - - - - HONDURAS - HN - HND - 340 - CTRY_HONDURAS - 504 - - - HONG KONG - HK - HKG - 344 - CTRY_HONG_KONG - 852 - - - HUNGARY - HU - HUN - 348 - CTRY_HUNGARY - 36 - verHungary - 43 - ICELAND - IS - ISL - 352 - CTRY_ICELAND - 354 - verIceland - 21 - INDIA - IN - IND - 356 - CTRY_INDIA - 91 - verIndiaHindi(hi) - 33 - INDONESIA - ID - IDN - 360 - CTRY_INDONESIA - 62 - - - IRAN, ISLAMIC REPUBLIC OF - IR - IRN - 364 - CTRY_IRAN - 981 - verIran - 48 - IRAQ - IQ - IRQ - 368 - CTRY_IRAQ - 964 - verArabic - 16 - IRELAND - IE - IRL - 372 - CTRY_IRELAND - 353 - verIreland - 50 - ISRAEL - IL - ISR - 376 - CTRY_ISRAEL - 972 - verIsrael - 13 - ITALY - IT - ITA - 380 - CTRY_ITALY - 39 - verItaly - 4 - JAMAICA - JM - JAM - 388 - CTRY_JAMAICA - 1 - - - JAPAN - JP - JPN - 392 - CTRY_JAPAN - 81 - verJapan - 14 - JORDAN - JO - JOR - 400 - CTRY_JORDAN - 962 - - - KAZAKHSTAN - KZ - KAZ - 398 - CTRY_KAZAKSTAN - 7 - - - KENYA - KE - KEN - 404 - CTRY_KENYA - 254 - - - KIRIBATI - KI - KIR - 296 - - - - - KOREA, DEMOCRATIC PEOPLE''S REPUBLIC OF - KP - PRK - 408 - - - verKorea - 51 - KOREA, REPUBLIC OF - KR - KOR - 410 - CTRY_SOUTH_KOREA - 82 - verKorea - - KUWAIT - KW - KWT - 414 - CTRY_KUWAIT - 965 - - - KYRGYZSTAN - KG - KGZ - 417 - CTRY_KYRGYZSTAN - 996 - - - LAO PEOPLE''S DEMOCRATIC REPUBLIC - LA - LAO - 418 - - - - - LATVIA - LV - LVA - 428 - CTRY_LATVIA - 371 - verLatvia - 45 - LEBANON - LB - LBN - 422 - CTRY_LEBANON - 961 - - - LESOTHO - LS - LSO - 426 - - - - - LIBERIA - LR - LBR - 430 - - - - - LIBYAN ARAB JAMAHIRIYA - LY - LBY - 434 - CTRY_LIBYA - 218 - verArabic - 16 - LIECHTENSTEIN - LI - LIE - 438 - CTRY_LIECHTENSTEIN - 41 - - - LITHUANIA - LT - LTU - 440 - CTRY_LITHUANIA - 370 - verLithuania - 41 - LUXEMBOURG - LU - LUX - 442 - CTRY_LUXEMBOURG - 352 - verFrBelgiumLux - 6 - MACAU - MO - MAC - 446 - CTRY_MACAU - 853 - - - MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF - MK - MKD - 807 - CTRY_MACEDONIA - 389 - verMacedonian - - MADAGASCAR - MG - MDG - 450 - - - - - MALAWI - MW - MWI - 454 - - - - - MALAYSIA - MY - MYS - 458 - CTRY_MALAYSIA - 60 - - - MALDIVES - MV - MDV - 462 - CTRY_MALDIVES - 960 - - - MALI - ML - MLI - 466 - - - - - MALTA - MT - MLT - 470 - - - verMalta - 22 - MARSHALL ISLANDS - MH - MHL - 584 - - - - - MARTINIQUE - MQ - MTQ - 474 - - - - - MAURITANIA - MR - MRT - 478 - - - - - MAURITIUS - MU - MUS - 480 - - - - - MAYOTTE - YT - MYT - 175 - - - - - MEXICO - MX - MEX - 484 - CTRY_MEXICO - 52 - - - MICRONESIA, FEDERATED STATES OF - FM - FSM - 583 - - - - - MOLDOVA, REPUBLIC OF - MD - MDA - 498 - - - - - MONACO - MC - MCO - 492 - CTRY_MONACO - 33 - - - MONGOLIA - MN - MNG - 496 - CTRY_MONGOLIA - 976 - - - MONTSERRAT - MS - MSR - 500 - - - - - MOROCCO - MA - MAR - 504 - CTRY_MOROCCO - 212 - verArabic - 16 - MOZAMBIQUE - MZ - MOZ - 508 - - - - - MYANMAR - MM - MMR - 104 - - - - - NAMIBIA - NA - NAM - 516 - - - - - NAURU - NR - NRU - 520 - - - - - NEPAL - NP - NPL - 524 - - - verNepal - 106 - NETHERLANDS - NL - NLD - 528 - CTRY_NETHERLANDS - 31 - verNetherlands - 5 - NETHERLANDS ANTILLES - AN - ANT - 530 - - - - - NEW CALEDONIA - NC - NCL - 540 - - - - - NEW ZEALAND - NZ - NZL - 554 - CTRY_NEW_ZEALAND - 64 - - - NICARAGUA - NI - NIC - 558 - CTRY_NICARAGUA - 505 - - - NIGER - NE - NER - 562 - - - - - NIGERIA - NG - NGA - 566 - - - - - NIUE - NU - NIU - 570 - - - - - NORFOLK ISLAND - NF - NFK - 574 - - - - - NORTHERN MARIANA ISLANDS - MP - MNP - 580 - - - - - NORWAY - NO - NOR - 578 - CTRY_NORWAY - 47 - verNorway - 12 - OMAN - OM - OMN - 512 - CTRY_OMAN - 968 - - - PAKISTAN - PK - PAK - 586 - CTRY_PAKISTAN - 92 - verPakistanUrdu, verPunjabi - 34 (U), 95 (P) - PALAU - PW - PLW - 585 - - - - - PANAMA - PA - PAN - 591 - CTRY_PANAMA - 507 - - - PALESTINIAN TERRITORY, OCCUPIED - PS - - - - - - - PAPUA NEW GUINEA - PG - PNG - 598 - - - - - PARAGUAY - PY - PRY - 600 - CTRY_PARAGUAY - 595 - - - PERU - PE - PER - 604 - CTRY_PERU - 51 - - - PHILIPPINES - PH - PHL - 608 - CTRY_PHILIPPINES - 63 - - - PITCAIRN - PN - PCN - 612 - - - - - POLAND - PL - POL - 616 - CTRY_POLAND - 48 - verPoland - 42 - PORTUGAL - PT - PRT - 620 - CTRY_PORTUGAL - 351 - verPortugal - 10 - PUERTO RICO - PR - PRI - 630 - CTRY_PUERTO_RICO - 1 - - - QATAR - QA - QAT - 634 - CTRY_QATAR - 974 - - - REUNION - RE - REU - 638 - - - - - ROMANIA - RO - ROU* - 642 - CTRY_ROMANIA - 40 - verRomania - 39 - RUSSIAN FEDERATION - RU - RUS - 643 - CTRY_RUSSIA - 7 - verRussia - 49 - RWANDA - RW - RWA - 646 - - - - - SAINT KITTS AND NEVIS - KN - KNA - 659 - - - - - SAINT LUCIA - LC - LCA - 662 - - - - - SAINT VINCENT AND THE GRENADINES - VC - VCT - 670 - - - - - SAMOA - WS - WSM - 882 - - - - - SAN MARINO - SM - SMR - 674 - - - - - SAO TOME AND PRINCIPE - ST - STP - 678 - - - - - SAUDI ARABIA - SA - SAU - 682 - CTRY_SAUDI_ARABIA - 966 - verArabic - 16 - SENEGAL - SN - SEN - 686 - - - - - SERBIA AND MONTENEGRO - CS - - - CTRY_SERBIA - 381 - - - SEYCHELLES - SC - SYC - 690 - - - - - SIERRA LEONE - SL - SLE - 694 - - - - - SINGAPORE - SG - SGP - 702 - CTRY_SINGAPORE - 65 - verSingapore - 100 - SLOVAKIA (Slovak Republic) - SK - SVK - 703 - CTRY_SLOVAK - 421 - verSlovak - 57 - SLOVENIA - SI - SVN - 705 - CTRY_SLOVENIA - 386 - verSlovenian - 66 - SOLOMON ISLANDS - SB - SLB - 90 - - - - - SOMALIA - SO - SOM - 706 - - - - - SOUTH AFRICA - ZA - ZAF - 710 - CTRY_SOUTH_AFRICA - 27 - - - SOUTH GEORGIA AND THE SOUTH SANDWICH ISLANDS - GS - - - - - - - SPAIN - ES - ESP - 724 - CTRY_SPAIN - 34 - verSpain - 8 - SRI LANKA - LK - LKA - 144 - - - - - SAINT HELENA - SH - SHN - 654 - - - - - SAINT PIERRE AND MIQUELON - PM - SPM - 666 - - - - - SUDAN - SD - SDN - 736 - - - - - SURINAME - SR - SUR - 740 - - - - - SVALBARD AND JAN MAYEN ISLANDS - SJ - SJM - 744 - - - - - SWAZILAND - SZ - SWZ - 748 - - - - - SWEDEN - SE - SWE - 752 - CTRY_SWEDEN - 46 - verSweden - 7 - SWITZERLAND - CH - CHE - 756 - CTRY_SWITZERLAND - 41 - verFrSwiss(fr), verGrSwiss(de) - 18(fr), 19(de) - SYRIAN ARAB REPUBLIC - SY - SYR - 760 - CTRY_SYRIA - 963 - - - TAIWAN, PROVINCE OF CHINA - TW - TWN - 158 - CTRY_TAIWAN - 886 - verTaiwan - 53 - TAJIKISTAN - TJ - TJK - 762 - - - - - TANZANIA, UNITED REPUBLIC OF - TZ - TZA - 834 - - - - - TATARSTAN - - - - CTRY_TATARSTAN - 7 - - - THAILAND - TH - THA - 764 - CTRY_THAILAND - 66 - verThailand - 54 - TIMOR-LESTE - TL - - - - - - - TOGO - TG - TGO - 768 - - - - - TOKELAU - TK - TKL - 772 - - - - - TONGA - TO - TON - 776 - - - verTonga - 88 - TRINIDAD AND TOBAGO - TT - TTO - 780 - CTRY_TRINIDAD_Y_TOBAGO - 1 - - - TUNISIA - TN - TUN - 788 - CTRY_TUNISIA - 216 - verArabic - 16 - TURKEY - TR - TUR - 792 - CTRY_TURKEY - 90 - verTurkey - 24 - TURKMENISTAN - TM - TKM - 795 - - - - - TURKS AND CAICOS ISLANDS - TC - TCA - 796 - - - - - TUVALU - TV - TUV - 798 - - - - - UGANDA - UG - UGA - 800 - - - - - UKRAINE - UA - UKR - 804 - CTRY_UKRAINE - 380 - verUkraine - 62 - UNITED ARAB EMIRATES - AE - ARE - 784 - CTRY_UAE - 971 - - - UNITED KINGDOM - GB - GBR - 826 - CTRY_UNITED_KINGDOM - 44 - verBritain - 2 - UNITED STATES - US - USA - 840 - CTRY_UNITED_STATES - 1 - verUS - 0 - UNITED STATES MINOR OUTLYING ISLANDS - UM - UMI - 581 - - - - - URUGUAY - UY - URY - 858 - CTRY_URUGUAY - 598 - - - UZBEKISTAN - UZ - UZB - 860 - CTRY_UZBEKISTAN - 7 - - - VANUATU - VU - VUT - 548 - - - - - VATICAN CITY STATE (HOLY SEE) - VA - VAT - 336 - - - - - VENEZUELA - VE - VEN - 862 - CTRY_VENEZUELA - 58 - - - VIET NAM - VN - VNM - 704 - CTRY_VIET_NAM - 84 - verVietnam - - VIRGIN ISLANDS (BRITISH) - VG - VGB - 92 - - - - - VIRGIN ISLANDS (U.S.) - VI - VIR - 850 - - - - - WALLIS AND FUTUNA ISLANDS - WF - WLF - 876 - - - - - WESTERN SAHARA - EH - ESH - 732 - - - - - YEMEN - YE - YEM - 887 - CTRY_YEMEN - 967 - - - YUGOSLAVIA - YU - YUG - 891 - - - - - ZAIRE - ZR - ZAR - 180 - - - - - ZAMBIA - ZM - ZMB - 894 - - - - - ZIMBABWE - ZW - ZWE - 716 - CTRY_ZIMBABWE - 263 - - - '! Item was removed: - ----- Method: ISOLanguageDefinition class>>iso3Countries (in category 'private') ----- - iso3Countries - "ISOLanguageDefinition iso3Countries" - "ISO2Countries := nil. ISO3Countries := nil" - - ISO3Countries ifNil: [self initISOCountries]. - ^ISO3Countries! Item was removed: - ----- Method: ISOLanguageDefinition class>>iso3LanguageDefinition: (in category 'accessing') ----- - iso3LanguageDefinition: aString - ^self iso3LanguageTable at: aString! Item was removed: - ----- Method: ISOLanguageDefinition class>>iso3LanguageTable (in category 'private') ----- - iso3LanguageTable - "ISOLanguageDefinition iso3LanguageTable" - - ^ISO3Table ifNil: [ISO3Table := self initISO3LanguageTable]! Item was removed: - ----- Method: ISOLanguageDefinition class>>isoLanguages (in category 'private') ----- - isoLanguages - "ISO 639: 3-letter codes" - ^'aar aa Afar - abk ab Abkhazian - ace Achinese - ach Acoli - ada Adangme - ady Adyghe; Adygei - afa Afro-Asiatic languages - afh Afrihili - afr af Afrikaans - ain Ainu - aka ak Akan - akk Akkadian - alb/sqi sq Albanian - ale Aleut - alg Algonquian languages - alt Southern Altai - amh am Amharic - ang English, Old (ca.450-1100) - anp Angika - apa Apache languages - ara ar Arabic - arc Official Aramaic (700-300 BCE); Imperial Aramaic (700-300 BCE) - arg an Aragonese - arm/hye hy Armenian - arn Mapudungun; Mapuche - arp Arapaho - art Artificial languages - arw Arawak - asm as Assamese - ast Asturian; Bable; Leonese; Asturleonese - ath Athapascan languages - aus Australian languages - ava av Avaric - ave ae Avestan - awa Awadhi - aym ay Aymara - aze az Azerbaijani - bad Banda languages - bai Bamileke languages - bak ba Bashkir - bal Baluchi - bam bm Bambara - ban Balinese - baq/eus eu Basque - bas Basa - bat Baltic languages - bej Beja; Bedawiyet - bel be Belarusian - bem Bemba - ben bn Bengali - ber Berber languages) - bho Bhojpuri - bih bh Bihari - bik Bikol - bin Bini; Edo - bis bi Bislama - bla Siksika - bnt Bantu languages - bos bs Bosnian - bra Braj - bre br Breton - btk Batak languages - bua Buriat - bug Buginese - bul bg Bulgarian - bur/mya my Burmese - byn Blin; Bilin - cad Caddo - cai Central American Indian languages - car Galibi Carib - cat ca Catalan; Valencian - cau Caucasian languages - ceb Cebuano - cel Celtic languages - cha ch Chamorro - chb Chibcha - che ce Chechen - chg Chagatai - chi/zho zh Chinese - chk Chuukese - chm Mari - chn Chinook jargon - cho Choctaw - chp Chipewyan; Dene Suline - chr Cherokee - chu cu Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic - chv cv Chuvash - chy Cheyenne - cmc Chamic languages - cop Coptic - cor kw Cornish - cos co Corsican - cpe Creoles and pidgins, English based - cpf Creoles and pidgins, French-based - cpp Creoles and pidgins, Portuguese-based - cre cr Cree - crh Crimean Tatar; Crimean Turkish - crp Creoles and pidgins - csb Kashubian - cus Cushitic languages - cze/ces cs Czech - dak Dakota - dan da Danish - dar Dargwa - day Land Dayak languages - del Delaware - den Slave (Athapascan) - dgr Dogrib - din Dinka - div dv Divehi; Dhivehi; Maldivian - doi Dogri - dra Dravidian languages - dsb Lower Sorbian - dua Duala - dum Dutch, Middle (ca.1050-1350) - dut/nld nl Dutch; Flemish - dyu Dyula - dzo dz Dzongkha - efi Efik - egy Egyptian (Ancient) - eka Ekajuk - elx Elamite - eng en English - enm English, Middle (1100-1500) - epo eo Esperanto - est et Estonian - ewe ee Ewe - ewo Ewondo - fan Fang - fao fo Faroese - fat Fanti - fij fj Fijian - fil Filipino; Pilipino - fin fi Finnish - fiu Finno-Ugrian languages) - fon Fon - fre/fra fr French - frm French, Middle (ca.1400-1600) - fro French, Old (842-ca.1400) - frr Northern Frisian - frs Eastern Frisian - fry fy Western Frisian - ful ff Fulah - fur Friulian - gaa Ga - gay Gayo - gba Gbaya - gem Germanic languages - geo/kat ka Georgian - ger/deu de German - gez Geez - gil Gilbertese - gla gd Gaelic; Scottish Gaelic - gle ga Irish - glg gl Galician - glv gv Manx - gmh German, Middle High (ca.1050-1500) - goh German, Old High (ca.750-1050) - gon Gondi - gor Gorontalo - got Gothic - grb Grebo - grc Greek, Ancient (to 1453) - gre/ell el Greek, Modern (1453-) - grn gn Guarani - gsw Swiss German; Alemannic; Alsatian - guj gu Gujarati - gwi Gwich''in - hai Haida - hat ht Haitian; Haitian Creole - hau ha Hausa - haw Hawaiian - heb he Hebrew - her hz Herero - hil Hiligaynon - him Himachali - hin hi Hindi - hit Hittite - hmn Hmong - hmo ho Hiri Motu - hrv hr Croatian - hsb Upper Sorbian - hun hu Hungarian - hup Hupa - iba Iban - ibo ig Igbo - ice/isl is Icelandic - ido io Ido - iii ii Sichuan Yi; Nuosu - ijo Ijo languages - iku iu Inuktitut - ile ie Interlingue; Occidental - ilo Iloko - ina ia Interlingua (International Auxiliary Language Association) - inc Indic languages - ind id Indonesian - ine Indo-European languages - inh Ingush - ipk ik Inupiaq - ira Iranian languages - iro Iroquoian languages - ita it Italian - jav jv Javanese - jbo Lojban - jpn ja Japanese - jpr Judeo-Persian - jrb Judeo-Arabic - kaa Kara-Kalpak - kab Kabyle - kac Kachin; Jingpho - kal kl Kalaallisut; Greenlandic - kam Kamba - kan kn Kannada - kar Karen languages - kas ks Kashmiri - kau kr Kanuri - kaw Kawi - kaz kk Kazakh - kbd Kabardian - kha Khasi - khi Khoisan languages - khm km Central Khmer - kho Khotanese; Sakan - kik ki Kikuyu; Gikuyu - kin rw Kinyarwanda - kir ky Kirghiz; Kyrgyz - kmb Kimbundu - kok Konkani - kom kv Komi - kon kg Kongo - kor ko Korean - kos Kosraean - kpe Kpelle - krc Karachay-Balkar - krl Karelian - kro Kru languages - kru Kurukh - kua kj Kuanyama; Kwanyama - kum Kumyk - kur ku Kurdish - kut Kutenai - lad Ladino - lah Lahnda - lam Lamba - lao lo Lao - lat la Latin - lav lv Latvian - lez Lezghian - lim li Limburgan; Limburger; Limburgish - lin ln Lingala - lit lt Lithuanian - lol Mongo - loz Lozi - ltz lb Luxembourgish; Letzeburgesch - lua Luba-Lulua - lub lu Luba-Katanga - lug lg Ganda - lui Luiseno - lun Lunda - luo Luo (Kenya and Tanzania) - lus Lushai - mac/mkd mk Macedonian - mad Madurese - mag Magahi - mah mh Marshallese - mai Maithili - mak Makasar - mal ml Malayalam - man Mandingo - mao/mri mi Maori - map Austronesian languages - mar mr Marathi - mas Masai - may/msa ms Malay - mdf Moksha - mdr Mandar - men Mende - mga Irish, Middle (900-1200) - mic Mi''kmaq; Micmac - min Minangkabau - mis Uncoded languages - mkh Mon-Khmer languages - mlg mg Malagasy - mlt mt Maltese - mnc Manchu - mni Manipuri - mno Manobo languages - moh Mohawk - mon mn Mongolian - mos Mossi - mul Multiple languages - mun Munda languages - mus Creek - mwl Mirandese - mwr Marwari - myn Mayan languages - myv Erzya - nah Nahuatl languages - nai North American Indian languages - nap Neapolitan - nau na Nauru - nav nv Navajo; Navaho - nbl nr Ndebele, South; South Ndebele - nde nd Ndebele, North; North Ndebele - ndo ng Ndonga - nds Low German; Low Saxon; German, Low; Saxon, Low - nep ne Nepali - new Nepal Bhasa; Newari - nia Nias - nic Niger-Kordofanian languages - niu Niuean - nno nn Norwegian Nynorsk; Nynorsk, Norwegian - nob nb Bokmal, Norwegian; Norwegian Bokmal - nog Nogai - non Norse, Old - nor no Norwegian - nqo N''Ko - nso Pedi; Sepedi; Northern Sotho - nub Nubian languages - nwc Classical Newari; Old Newari; Classical Nepal Bhasa - nya ny Chichewa; Chewa; Nyanja - nym Nyamwezi - nyn Nyankole - nyo Nyoro - nzi Nzima - oci oc Occitan (post 1500) - oji oj Ojibwa - ori or Oriya - orm om Oromo - osa Osage - oss os Ossetian; Ossetic - ota Turkish, Ottoman (1500-1928) - oto Otomian languages - paa Papuan languages - pag Pangasinan - pal Pahlavi - pam Pampanga; Kapampangan - pan pa Panjabi; Punjabi - pap Papiamento - pau Palauan - peo Persian, Old (ca.600-400 B.C.) - per/fas fa Persian - phi Philippine languages) - phn Phoenician - pli pi Pali - pol pl Polish - pon Pohnpeian - por pt Portuguese - pra Prakrit languages - pro Provencal, Old (to 1500);Occitan, Old (to 1500) - pus ps Pushto; Pashto - qaa-qtz Reserved for local use - que qu Quechua - raj Rajasthani - rap Rapanui - rar Rarotongan; Cook Islands Maori - roa Romance languages - roh rm Romansh - rom Romany - rum/ron ro Romanian; Moldavian; Moldovan - run rn Rundi - rup Aromanian; Arumanian; Macedo-Romanian - rus ru Russian - sad Sandawe - sag sg Sango - sah Yakut - sai South American Indian languages - sal Salishan languages - sam Samaritan Aramaic - san sa Sanskrit - sas Sasak - sat Santali - scn Sicilian - sco Scots - sel Selkup - sem Semitic languages - sga Irish, Old (to 900) - sgn Sign Languages - shn Shan - sid Sidamo - sin si Sinhala; Sinhalese - sio Siouan languages - sit Sino-Tibetan languages - sla Slavic languages - slo/slk sk Slovak - slv sl Slovenian - sma Southern Sami - sme se Northern Sami - smi Sami languages - smj Lule Sami - smn Inari Sami - smo sm Samoan - sms Skolt Sami - sna sn Shona - snd sd Sindhi - snk Soninke - sog Sogdian - som so Somali - son Songhai languages - sot st Sotho, Southern - spa es Spanish; Castilian - srd sc Sardinian - srn Sranan Tongo - srp sr Serbian - srr Serer - ssa Nilo-Saharan languages - ssw ss Swati - suk Sukuma - sun su Sundanese - sus Susu - sux Sumerian - swa sw Swahili - swe sv Swedish - syc Classical Syriac - syr Syriac - tah ty Tahitian - tai Tai languages - tam ta Tamil - tat tt Tatar - tel te Telugu - tem Timne - ter Tereno - tet Tetum - tgk tg Tajik - tgl tl Tagalog - tha th Thai - tib/bod bo Tibetan - tig Tigre - tir ti Tigrinya - tiv Tiv - tkl Tokelau - tlh Klingon; tlhIngan-Hol - tli Tlingit - tmh Tamashek - tog Tonga (Nyasa) - ton to Tonga (Tonga Islands) - tpi Tok Pisin - tsi Tsimshian - tsn tn Tswana - tso ts Tsonga - tuk tk Turkmen - tum Tumbuka - tup Tupi languages - tur tr Turkish - tut Altaic languages - tvl Tuvalu - twi tw Twi - tyv Tuvinian - udm Udmurt - uga Ugaritic - uig ug Uighur; Uyghur - ukr uk Ukrainian - umb Umbundu - und Undetermined - urd ur Urdu - uzb uz Uzbek - vai Vai - ven ve Venda - vie vi Vietnamese - vol vo Volapuk - vot Votic - wak Wakashan languages - wal Wolaitta; Wolaytta - war Waray - was Washo - wel/cym cy Welsh - wen Sorbian languages - wln wa Walloon - wol wo Wolof - xal Kalmyk; Oirat - xho xh Xhosa - yao Yao - yap Yapese - yid yi Yiddish - yor yo Yoruba - ypk Yupik languages - zap Zapotec - zbl Blissymbols; Blissymbolics; Bliss - zen Zenaga - zha za Zhuang; Chuang - znd Zande languages - zul zu Zulu - zun Zuni - zxx No linguistic content; Not applicable - zza Zaza; Dimili; Dimli; Kirdki; Kirmanjki; Zazaki'! Item was removed: - ----- Method: ISOLanguageDefinition class>>readISOLanguagesFrom: (in category 'private') ----- - readISOLanguagesFrom: stream - "ISOLanguageDefinition readISOLanguagesFrom: ISOLanguageDefinition isoLanguages readStream " - | languages language code3 index line | - languages := Dictionary new. - [stream atEnd - or: [(line := stream nextLine readStream) atEnd]] - whileFalse: [ - language := ISOLanguageDefinition new. - code3 := line upTo: Character tab. - (index := code3 indexOf: $/) > 0 - ifTrue: [ - language iso3: (code3 copyFrom: 1 to: index-1). - language iso3Alternate: (code3 copyFrom: index+1 to: code3 size)] - ifFalse: [language iso3: code3]. - language - iso2: (line upTo: Character tab); - language: line upToEnd. - languages at: language iso3 put: language]. - ^languages! Item was removed: - ----- Method: ISOLanguageDefinition>>iso2 (in category 'accessing') ----- - iso2 - ^iso2 ifNil: [self iso3]! Item was removed: - ----- Method: ISOLanguageDefinition>>iso2: (in category 'initialize') ----- - iso2: aString - iso2 := aString ifEmpty: [nil] ifNotEmpty: [aString]! Item was removed: - ----- Method: ISOLanguageDefinition>>iso3 (in category 'accessing') ----- - iso3 - ^iso3 ifNil: ['']! Item was removed: - ----- Method: ISOLanguageDefinition>>iso3: (in category 'initialize') ----- - iso3: aString - iso3 := aString ifEmpty: [nil] ifNotEmpty: [aString]! Item was removed: - ----- Method: ISOLanguageDefinition>>iso3Alternate (in category 'accessing') ----- - iso3Alternate - ^iso3Alternate ifNil: ['']! Item was removed: - ----- Method: ISOLanguageDefinition>>iso3Alternate: (in category 'initialize') ----- - iso3Alternate: aString - iso3Alternate := aString ifEmpty: [nil] ifNotEmpty: [aString]! Item was removed: - ----- Method: ISOLanguageDefinition>>language (in category 'accessing') ----- - language - ^language! Item was removed: - ----- Method: ISOLanguageDefinition>>language: (in category 'initialize') ----- - language: aString - language := aString! Item was removed: - NaturalLanguageTranslator subclass: #InternalTranslator - instanceVariableNames: 'generics' - classVariableNames: 'AllKnownPhrases CachedTranslations' - poolDictionaries: '' - category: 'GetText-Localization'! - - !InternalTranslator commentStamp: 'tak 10/19/2007 11:12' prior: 0! - An InternalTranslator is used a translation dictionary in a image. - You can use it without any external translation file. - - Structure: - generics Dictionary -- msgid -> msgstr - ! Item was removed: - ----- Method: InternalTranslator class>>allKnownPhrases (in category 'private') ----- - allKnownPhrases - ^AllKnownPhrases ifNil: [AllKnownPhrases := Dictionary new: 2051]! Item was removed: - ----- Method: InternalTranslator class>>availableLanguageLocaleIDs (in category 'accessing') ----- - availableLanguageLocaleIDs - "Return locale ids for the internal translation dictionary." - "InternalTranslator availableLanguageLocaleIDs" - ^ self cachedTranslations values collect:[:each | each localeID]! Item was removed: - ----- Method: InternalTranslator class>>cachedTranslations (in category 'private') ----- - cachedTranslations - "CachedTranslations := nil" - ^CachedTranslations ifNil: [CachedTranslations := Dictionary new]! Item was removed: - ----- Method: InternalTranslator class>>directoryForLanguage:country:create: (in category 'private loading') ----- - directoryForLanguage: isoLanguage country: isoCountry create: createDir - "Try to locate the <prefs>/locale/<language>{/<country>} folder. - If createDir is set, create the path down to country or language, depending on wether it's specified.. - Return the directory for country or language depending on specification. - If neither exists, nil" - - "NaturalLanguageTranslator directoryForLanguage: 'es' country: nil create: true" - "NaturalLanguageTranslator directoryForLanguage: 'de' country: 'DE' create: true" - "NaturalLanguageTranslator directoryForLanguage: 'en' country: 'US' create: false" - "NaturalLanguageTranslator directoryForLanguage: 'en' country: nil create: true" - - "If this fails, there is nothing we can do about it here" - | localeDir countryDir languageDir | - localeDir := self localeDirCreate: createDir. - localeDir ifNil: [^nil]. - - isoCountry ifNil: [ - languageDir := localeDir directoryNamed: isoLanguage. - createDir - ifTrue: [languageDir assureExistence]. - ^languageDir exists - ifTrue: [languageDir] - ifFalse: [nil]]. - - countryDir := languageDir directoryNamed: isoCountry. - createDir - ifTrue: [countryDir assureExistence]. - - ^countryDir exists - ifTrue: [countryDir] - ifFalse: [nil]! Item was removed: - ----- Method: InternalTranslator class>>directoryForLocaleID:create: (in category 'private loading') ----- - directoryForLocaleID: localeID create: createDir - "Try to locate the <prefs>/locale/<language>{/<country>} folder. - If createDir is set, create the path down to country or language, depending on locale. - Return the directory for country or language depending on locale. - If neither exists, nil" - - "NaturalLanguageTranslator directoryForLanguage: 'de' country: nil readOnly: true" - "NaturalLanguageTranslator directoryForLanguage: 'de' country: 'DE' readOnly: true" - "NaturalLanguageTranslator directoryForLanguage: 'en' country: 'US' readOnly: false" - "NaturalLanguageTranslator directoryForLanguage: 'en' country: nil readOnly: true" - - ^self directoryForLanguage: localeID isoLanguage country: localeID isoCountry create: createDir! Item was removed: - ----- Method: InternalTranslator class>>discardAllTranslations (in category 'class initialization') ----- - discardAllTranslations - AllKnownPhrases := nil. - self resetCaches.! Item was removed: - ----- Method: InternalTranslator class>>fileReaderServicesForFile:suffix: (in category 'file-services') ----- - fileReaderServicesForFile: fullName suffix: suffix - "Answer the file services associated with given file" - ^ (suffix = self translationSuffix) | (suffix = '*') - ifTrue: [{self serviceMergeLanguageTranslations}] - ifFalse: [#()]! Item was removed: - ----- Method: InternalTranslator class>>loadAvailableExternalLocales (in category 'private loading') ----- - loadAvailableExternalLocales - "private - register locales IDs based on the content of the <prefs>/locale/ directory" - | localeDir | - localeDir := self localeDirCreate: false. - localeDir ifNil: [^ #()]. - - localeDir directoryNames - do: [:langDirName | - | langDir | - langDir := localeDir directoryNamed: langDirName. - - (langDir fileNamesMatching: '*.' , self translationSuffix) - ifNotEmpty: [self loadTranslatorForIsoLanguage: langDirName isoCountry: nil]. - - langDir directoryNames - do: [:countryDirName | - | countryDir | - countryDir := langDirName directoryNamed: countryDirName. - (countryDir fileNamesMatching: '*.' , self translationSuffix) - ifNotEmpty: [self loadTranslatorForIsoLanguage: langDirName isoCountry: countryDirName] - ] - ]. - ! Item was removed: - ----- Method: InternalTranslator class>>loadExternalTranslationsFor: (in category 'private loading') ----- - loadExternalTranslationsFor: translator - "Try to load translations from external external files. - The files are located in the <prefs>/locale/<language>{/<country>} folder. - There can be more than one file for each location, so applications can install their own partial translation tables. All files in the specific folder are loaded." - - | translationDir | - translationDir := self directoryForLocaleID: translator localeID create: false. - translationDir ifNil: [ ^nil ]. - (translationDir fileNamesMatching: '*.' , self translationSuffix) - do: [:fileName | translator loadFromFileNamed: (translationDir fullNameFor: fileName)]! Item was removed: - ----- Method: InternalTranslator class>>loadForLocaleIsoString:fromGzippedMimeLiteral: (in category 'file-services') ----- - loadForLocaleIsoString: localeString fromGzippedMimeLiteral: mimeString - "merge the translation from the mime literal." - | stream localeID translator gs rbStream s currentPlatform | - s := Base64MimeConverter mimeDecodeToBytes: mimeString readStream. - s reset. - gs := GZipReadStream on: s. - rbStream := MultiByteBinaryOrTextStream with: gs contents asString. - rbStream converter: UTF8TextConverter new. - rbStream reset. - localeID := LocaleID isoString: localeString. - currentPlatform := Locale currentPlatform. - [Locale - currentPlatform: (Locale localeID: localeID). - stream := ReadStream on: rbStream contents] - ensure: [Locale currentPlatform: currentPlatform]. - translator := self localeID: localeID. - translator loadFromStream: stream. - LanguageEnvironment resetKnownEnvironments! Item was removed: - ----- Method: InternalTranslator class>>loadTranslatorForIsoLanguage:isoCountry: (in category 'private loading') ----- - loadTranslatorForIsoLanguage: isoLanguage isoCountry: isoCountry - "private - load the translations from <prefs>/locale/ directory - the procedure is to assure the existence of a translator for the - given language/country and then load the external translations for this translator" - - | translator | - translator := self newLocaleID: (LocaleID isoLanguage: isoLanguage isoCountry: isoCountry). - - self loadExternalTranslationsFor: translator! Item was removed: - ----- Method: InternalTranslator class>>localeDirCreate: (in category 'private loading') ----- - localeDirCreate: createDir - "Try to locate the <prefs>/locale/ folder. - If createDir is set, try to create the path. - If it doesn't exist, return nil" - - "If this fails, there is nothing we can do about it here" - | prefDir localeDir | - (createDir not - and: [ExternalSettings preferenceDirectory isNil]) - ifTrue: [^ nil]. - - prefDir := ExternalSettings assuredPreferenceDirectory. - prefDir exists - ifFalse: [^nil]. - - - localeDir := prefDir directoryNamed: 'locale'. - createDir - ifTrue: [localeDir assureExistence]. - ^localeDir exists - ifTrue: [localeDir] - ifFalse: [nil]! Item was removed: - ----- Method: InternalTranslator class>>localeID: (in category 'accessing') ----- - localeID: localeID - "For backward compatibility, see NaturalLanguageTranslator >> fileOutHeaderOn:." - ^ self newLocaleID: localeID! Item was removed: - ----- Method: InternalTranslator class>>mergeLegacyTranslators (in category 'accessing') ----- - mergeLegacyTranslators - self availableLanguageLocaleIDs - do: [:localeID | (NaturalLanguageTranslator translators includesKey: localeID) - ifFalse: [NaturalLanguageTranslator translators - at: localeID - put: (self newLocaleID: localeID)]]! Item was removed: - ----- Method: InternalTranslator class>>mergeTranslationFileNamed: (in category 'file-services') ----- - mergeTranslationFileNamed: fileFullNameString - "merge the translation in the file named fileFullNameString" - - | stream localeID translator | - stream := FileStream readOnlyFileNamed: fileFullNameString. - [localeID := LocaleID isoString: stream localName sansPeriodSuffix. - translator := self localeID: localeID. - translator loadFromStream: stream] - ensure: [stream close]. - LanguageEnvironment resetKnownEnvironments. - - ! Item was removed: - ----- Method: InternalTranslator class>>newLocaleID: (in category 'accessing') ----- - newLocaleID: localeID - ^ self cachedTranslations - at: localeID - ifAbsentPut: [self new localeID: localeID]! Item was removed: - ----- Method: InternalTranslator class>>privateStartUp (in category 'class initialization') ----- - privateStartUp - self loadAvailableExternalLocales. - self mergeLegacyTranslators. - ! Item was removed: - ----- Method: InternalTranslator class>>registerPhrase: (in category 'private') ----- - registerPhrase: phrase - "Using a Dictionary so we can lookup existing string instead of creating needless copies when loading a translation." - self allKnownPhrases at: phrase put: phrase! Item was removed: - ----- Method: InternalTranslator class>>registeredPhraseFor: (in category 'private') ----- - registeredPhraseFor: phrase - "Using a Dictionary so we can lookup existing string instead of creating needless copies when loading a translation." - ^self allKnownPhrases at: phrase ifAbsentPut: [phrase]! Item was removed: - ----- Method: InternalTranslator class>>removeLocaleID: (in category 'accessing') ----- - removeLocaleID: localeID - "self removeLocaleID: (LocaleID isoString: 'ja-kids')" - self cachedTranslations - removeKey: localeID - ifAbsent: []. - NaturalLanguageTranslator privateStartUp! Item was removed: - ----- Method: InternalTranslator class>>resetCaches (in category 'class initialization') ----- - resetCaches - CachedTranslations := nil. - ! Item was removed: - ----- Method: InternalTranslator class>>serviceMergeLanguageTranslations (in category 'file-services') ----- - serviceMergeLanguageTranslations - "Answer a service for merging of translation files" - ^ SimpleServiceEntry - provider: self - label: 'merge the translation file' translatedNoop - selector: #mergeTranslationFileNamed: - description: 'merge the translation file into the language named like the file' translatedNoop - buttonLabel: 'merge' translatedNoop! Item was removed: - ----- Method: InternalTranslator class>>services (in category 'file-services') ----- - services - "Answer potential file services associated with this class" - ^ {self serviceMergeLanguageTranslations}! Item was removed: - ----- Method: InternalTranslator class>>translationSuffix (in category 'private') ----- - translationSuffix - ^'translation'! Item was removed: - ----- Method: InternalTranslator>>atRandom (in category 'accessing') ----- - atRandom - - ^ generics atRandom value. - ! Item was removed: - ----- Method: InternalTranslator>>checkPhrase:translation: (in category 'translation') ----- - checkPhrase: phrase translation: translation! Item was removed: - ----- Method: InternalTranslator>>defaultBackgroundColor (in category 'user interface') ----- - defaultBackgroundColor - "answer the receiver's defaultBackgroundColor for views" - ^ Color cyan! Item was removed: - ----- Method: InternalTranslator>>fileOutHeader (in category 'fileIn/fileOut') ----- - fileOutHeader - ^ '''Translation dictionary'''! Item was removed: - ----- Method: InternalTranslator>>fileOutHeaderOn: (in category 'user interface') ----- - fileOutHeaderOn: aStream - aStream binary. - UTF8TextConverter writeBOMOn: aStream. - aStream text. - aStream nextChunkPut: self fileOutHeader; - cr. - aStream timeStamp; cr. - aStream nextPut: $!!. - aStream nextChunkPut: '(' , self class name , ' localeID: ' , id storeString , ')'. - aStream cr! Item was removed: - ----- Method: InternalTranslator>>fileOutHeaderOn:withBOM: (in category 'user interface') ----- - fileOutHeaderOn: aStream withBOM: bomFlag - bomFlag ifTrue: [ - aStream binary. - UTF8TextConverter writeBOMOn: aStream. - aStream text. - ]. - aStream nextChunkPut: self fileOutHeader; - cr. - aStream timeStamp; cr. - aStream nextPut: $!!. - aStream nextChunkPut: '(' , self class name , ' localeID: ' , id storeString , ')'. - aStream cr! Item was removed: - ----- Method: InternalTranslator>>fileOutOn: (in category 'fileIn/fileOut') ----- - fileOutOn: aStream - "self current fileOutOn: Transcript. Transcript endEntry" - self fileOutOn: aStream keys: nil withBOM: true. - ! Item was removed: - ----- Method: InternalTranslator>>fileOutOn:keys:withBOM: (in category 'fileIn/fileOut') ----- - fileOutOn: aStream keys: keys withBOM: bomFlag - "self current fileOutOn: Transcript. Transcript endEntry" - self fileOutHeaderOn: aStream withBOM: bomFlag. - (keys - ifNil: [generics keys asSortedCollection]) - do: [:key | self - nextChunkPut: (generics associationAt: key) - on: aStream]. - keys - ifNil: [self untranslated - do: [:each | self nextChunkPut: each -> '' on: aStream]]. - aStream nextPut: $!!; - cr! Item was removed: - ----- Method: InternalTranslator>>generics (in category 'private') ----- - generics - ^generics ifNil: [generics := Dictionary new]! Item was removed: - ----- Method: InternalTranslator>>isDomainLoaded: (in category 'accessing') ----- - isDomainLoaded: aDomainName - ^true - ! Item was removed: - ----- Method: InternalTranslator>>loadFromFileNamed: (in category 'private store-retrieve') ----- - loadFromFileNamed: fileNameString - "Load translations from an external file" - - | stream | - [stream := FileStream readOnlyFileNamed: fileNameString. - self loadFromStream: stream] - ensure: [stream close]. - self changed: #translations. - self changed: #untranslated. - ! Item was removed: - ----- Method: InternalTranslator>>loadFromRefStream: (in category 'private store-retrieve') ----- - loadFromRefStream: stream - "Load translations from an external file" - | loadedArray refStream | - refStream := ReferenceStream on: stream. - [loadedArray := refStream next] - ensure: [refStream close]. - self processExternalObject: loadedArray ! Item was removed: - ----- Method: InternalTranslator>>loadFromStream: (in category 'private store-retrieve') ----- - loadFromStream: stream - "Load translations from an external file" - | header isFileIn | - header := '''Translation dictionary'''. - isFileIn := (stream next: header size) - = header. - stream reset. - isFileIn - ifTrue: [stream fileInAnnouncing: 'Loading ' translated, stream localName] - ifFalse: [self loadFromRefStream: stream]! Item was removed: - ----- Method: InternalTranslator>>mergeTranslations: (in category 'private store-retrieve') ----- - mergeTranslations: newTranslations - "Merge a new set of translations into the exiting table. - Overwrites existing entries." - - newTranslations keysAndValuesDo: [:key :value | - self rawPhrase: (self class registeredPhraseFor: key) translation: value]. - self changed: #translations. - self changed: #untranslated.! Item was removed: - ----- Method: InternalTranslator>>nextChunkPut:on: (in category 'fileIn/fileOut') ----- - nextChunkPut: anObject on: aStream - | i remainder terminator | - terminator := $!!. - remainder := anObject storeString. - [(i := remainder indexOf: terminator) = 0] - whileFalse: [aStream - nextPutAll: (remainder copyFrom: 1 to: i). - aStream nextPut: terminator. - "double imbedded terminators" - remainder := remainder copyFrom: i + 1 to: remainder size]. - aStream nextPutAll: remainder. - aStream nextPut: terminator; cr.! Item was removed: - ----- Method: InternalTranslator>>phrase:translation: (in category 'translation') ----- - phrase: phraseString translation: translationString - self generics at: phraseString put: translationString asString. - self changed: #translations. - self changed: #untranslated.! Item was removed: - ----- Method: InternalTranslator>>processExternalObject: (in category 'private store-retrieve') ----- - processExternalObject: anArray - "pivate - process the external object" - - "new format -> {translations. untranslated}" - - anArray second do: [:each | self class registerPhrase: each]. - - self mergeTranslations: anArray first! Item was removed: - ----- Method: InternalTranslator>>rawPhrase:translation: (in category 'translation') ----- - rawPhrase: phraseString translation: translationString - self generics at: phraseString put: translationString asString. - ! Item was removed: - ----- Method: InternalTranslator>>rawRemoveUntranslated: (in category 'translation') ----- - rawRemoveUntranslated: untranslated - - self class allKnownPhrases removeKey: untranslated ifAbsent: []. - self changed: #untranslated.! Item was removed: - ----- Method: InternalTranslator>>removeTranslationFor: (in category 'translation') ----- - removeTranslationFor: phraseString - self generics removeKey: phraseString ifAbsent: []. - self changed: #translations. - self changed: #untranslated.! Item was removed: - ----- Method: InternalTranslator>>removeUntranslated: (in category 'translation') ----- - removeUntranslated: untranslated - - self class allKnownPhrases removeKey: untranslated ifAbsent: []. - ! Item was removed: - ----- Method: InternalTranslator>>saveToFileNamed: (in category 'private store-retrieve') ----- - saveToFileNamed: fileNameString - "save the receiver's translations to a file named fileNameString" - | stream | - "Set true if you need to save as binary" - false - ifTrue: [stream := ReferenceStream fileNamed: fileNameString. - stream nextPut: {self translations. self untranslated}. - stream close. - ^ self]. - stream := FileStream fileNamed: fileNameString. - [self fileOutOn: stream] - ensure: [stream close]! Item was removed: - ----- Method: InternalTranslator>>scanFrom: (in category 'fileIn/fileOut') ----- - scanFrom: aStream - "Read a definition of dictionary. - Make sure current locale corresponds my locale id" - | aString newTranslations assoc currentPlatform | - newTranslations := Dictionary new. - currentPlatform := Locale currentPlatform. - [Locale - currentPlatform: (Locale localeID: id). - [aString := aStream nextChunk withSqueakLineEndings. - aString size > 0] - whileTrue: [assoc := Compiler evaluate: aString. - assoc value = '' - ifTrue: [self class registerPhrase: assoc key] - ifFalse: [newTranslations add: assoc]]] - ensure: [Locale currentPlatform: currentPlatform]. - self mergeTranslations: newTranslations! Item was removed: - ----- Method: InternalTranslator>>translate:inDomain: (in category 'translation') ----- - translate: aString inDomain: aDomainName - | translator | - ^ self generics - at: aString - ifAbsent: [self localeID hasParent - ifTrue: [translator := self class cachedTranslations - at: self localeID parent - ifAbsent: [^ aString]. - translator translate: aString inDomain: aDomainName] - ifFalse: [aString]]! Item was removed: - ----- Method: InternalTranslator>>translations (in category 'accessing') ----- - translations - ^self generics! Item was removed: - ----- Method: InternalTranslator>>untranslated (in category 'accessing') ----- - untranslated - | translations | - translations := self translations. - ^self class allKnownPhrases reject: [:each | translations includesKey: each]! Item was changed: ----- Method: LanguageEditor>>checkSpanishPhrase:translation: (in category 'private') ----- checkSpanishPhrase: phraseString translation: translationString "check the translation and aswer a string with a comment or a nil meaning no-comments" | superResult | superResult := self checkPhrase: phraseString translation: translationString. superResult isNil ifFalse: [^ superResult]. "For some reason, MCInstaller couldn't read Spanish character. " "((translationString includes: $?) + and: [(translationString includes: $ø) not]) + ifTrue: [^ 'øOlvidÛ el signo de pregunta?']. - and: [(translationString includes: $¿) not]) - ifTrue: [^ '¿Olvidó el signo de pregunta?']. ((translationString includes: $!!) + and: [(translationString includes: $°) not]) + ifTrue: [^ 'øOlvidÛ el signo de admiraciÛn?']. - and: [(translationString includes: $¡) not]) - ifTrue: [^ '¿Olvidó el signo de admiración?']. " ^ nil ! Item was changed: ----- Method: LanguageEditor>>codeSelectedTranslationAsMimeString (in category 'gui methods') ----- codeSelectedTranslationAsMimeString | keys code tmpStream s2 gzs cont | keys := selectedTranslations collect: [:key | self translations at: key]. code := String streamContents: [:aStream | self translator fileOutOn: aStream keys: keys withBOM: false]. + tmpStream := MultiByteBinaryOrTextStream on: ''. - tmpStream _ MultiByteBinaryOrTextStream on: ''. tmpStream converter: UTF8TextConverter new. tmpStream nextPutAll: code. + s2 := RWBinaryOrTextStream on: ''. - s2 _ RWBinaryOrTextStream on: ''. gzs := GZipWriteStream on: s2. tmpStream reset. gzs nextPutAll: (tmpStream binary contentsOfEntireFile asString) contents. gzs close. s2 reset. + cont := String streamContents: [:strm | - cont _ String streamContents: [:strm | strm nextPutAll: '"Gzip+Base64 encoded translation for;'; cr. strm nextPutAll: '#('. keys do: [:each | strm nextPutAll: '''', each, ''' '.]. strm nextPutAll: ')"'; cr; cr. strm nextPutAll: 'NaturalLanguageTranslator loadForLocaleIsoString: '. strm nextPut: $'. strm nextPutAll: translator localeID isoString. strm nextPut: $'. strm nextPutAll: ' fromGzippedMimeLiteral: '. strm nextPut: $'. strm nextPutAll: (Base64MimeConverter mimeEncode: s2) contents. strm nextPutAll: '''.'. strm cr. ]. (StringHolder new contents: cont) openLabel: 'exported codes in Gzip+Base64 encoding' translated! Item was changed: ----- Method: LanguageEditor>>filterTranslations: (in category 'gui methods') ----- filterTranslations: aString | filter | filter := aString ifNil:['']. "" + translationsFilter := filter. - translationsFilter _ filter. self refreshTranslations. ! Item was changed: ----- Method: LanguageEditor>>getTextExport (in category 'gui methods') ----- getTextExport Cursor wait + showWhile: [GetTextExporter new exportTranslator: self model]! - showWhile: [GetTextExporter2 new exportTranslator: self model]! Item was changed: ----- Method: LanguageEditor>>getTextExportTemplate (in category 'gui methods') ----- getTextExportTemplate Cursor wait + showWhile: [GetTextExporter new exportTemplate] ! - showWhile: [GetTextExporter2 new exportTemplate] ! Item was changed: ----- Method: LanguageEditor>>initializeNewerKeys (in category 'initialization') ----- initializeNewerKeys + newerKeys := Set new. - newerKeys _ Set new. ! Item was changed: ----- Method: LanguageEditor>>selectNewerKeys (in category 'gui methods') ----- selectNewerKeys | index | self deselectAllTranslation. newerKeys do: [:k | + index := self translations indexOf: k ifAbsent: [0]. - index _ self translations indexOf: k ifAbsent: [0]. index > 0 ifTrue: [ self selectedTranslationsAt: index put: true ]. ]. ! Item was changed: ----- Method: LanguageEditor>>translation: (in category 'accessing') ----- translation: aStringOrText "change the translation for the selected phrase" | phrase | self selectedTranslation isZero ifTrue: [^ self]. + phrase := self translations at: self selectedTranslation. - phrase _ self translations at: self selectedTranslation. translator phrase: phrase translation: aStringOrText asString. newerKeys add: phrase. ^ true! Item was changed: ----- Method: LanguageEditor>>translations (in category 'accessing') ----- translations "answet the translator's translations" | allTranslations filterString | translations ifNotNil: [^translations]. allTranslations := self translator translations keys. "" filterString := self translationsFilter. "" filterString isEmpty ifFalse: [allTranslations := allTranslations select: [:each | "" ('*' , filterString , '*' match: each) or: ['*' , filterString , '*' match: (self translator translate: each)]]]. "" + ^ translations := allTranslations asSortedCollection asArray! - ^ translations _ allTranslations asSortedCollection asArray! Item was changed: ----- Method: LanguageEditor>>untranslated (in category 'accessing') ----- untranslated "answer the translator's untranslated phrases" | all filterString | untranslated ifNotNil: [^ untranslated]. all := self translator untranslated. "" filterString := self untranslatedFilter. "" filterString isEmpty ifFalse: [all := all select: [:each | "" ('*' , filterString , '*' match: each) or: ['*' , filterString , '*' match: (self translator translate: each)]]]. "" + ^ untranslated := all asSortedCollection asArray! - ^ untranslated _ all asSortedCollection asArray! Item was removed: - Object subclass: #Locale - instanceVariableNames: 'id shortDate longDate time decimalSymbol digitGrouping currencySymbol currencyNotation measurement offsetLocalToUTC offsetVMToUTC dstActive' - classVariableNames: 'Current CurrentPlatform KnownLocales LanguageSymbols LocaleChangeListeners PlatformEncodings Previous' - poolDictionaries: '' - category: 'GetText-Localization'! - - !Locale commentStamp: '<historical>' prior: 0! - Main comment stating the purpose of this class and relevant relationship to other classes. - - - -
http://www.w3.org/WAI/ER/IG/ert/iso639.htm
-
http://www.oasis-open.org/cover/iso639a.html
- See also -
http://oss.software.ibm.com/cvs/icu/~checkout~/icuhtml/design/language_code…
-
http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.10
- - ISO 3166 -
http://mitglied.lycos.de/buran/knowhow/codes/locales/
- ! Item was removed: - ----- Method: Locale class>>addLocalChangedListener: (in category 'notification') ----- - addLocalChangedListener: anObjectOrClass - self localeChangedListeners add: anObjectOrClass! Item was removed: - ----- Method: Locale class>>clipboadInterpreter (in category 'accessing') ----- - clipboadInterpreter - ^NoConversionClipboardInterpreter new! Item was removed: - ----- Method: Locale class>>current (in category 'accessing') ----- - current - "Current := nil" - Current ifNil: [ - Current := self determineCurrentLocale. - "Transcript show: 'Current locale: ' , Current localeID asString; cr"]. - ^Current! Item was removed: - ----- Method: Locale class>>currentPlatform (in category 'accessing') ----- - currentPlatform - "CurrentPlatform := nil" - CurrentPlatform ifNil: [CurrentPlatform := self determineCurrentLocale]. - ^CurrentPlatform! Item was removed: - ----- Method: Locale class>>currentPlatform: (in category 'accessing') ----- - currentPlatform: locale - CurrentPlatform := locale. - LanguageEnvironment startUp. - ! Item was removed: - ----- Method: Locale class>>currentPlatform:during: (in category 'accessing') ----- - currentPlatform: locale during: aBlock - "Alter current language platform during a block" - | backupPlatform | - backupPlatform := self currentPlatform. - [self currentPlatform: locale. - aBlock value] - ensure: [self currentPlatform: backupPlatform]! Item was removed: - ----- Method: Locale class>>defaultEncodingName: (in category 'platform specific') ----- - defaultEncodingName: languageSymbol - | encodings platformName osVersion | - platformName := SmalltalkImage current platformName. - osVersion := SmalltalkImage current getSystemAttribute: 1002. - encodings := self platformEncodings at: languageSymbol - ifAbsent: [self platformEncodings at: #default]. - encodings at: platformName ifPresent: [:encoding | ^encoding]. - encodings at: platformName , ' ' , osVersion - ifPresent: [:encoding | ^encoding]. - ^encodings at: #default! Item was removed: - ----- Method: Locale class>>defaultInputInterpreter (in category 'platform specific') ----- - defaultInputInterpreter - | platformName osVersion | - platformName := SmalltalkImage current platformName. - osVersion := SmalltalkImage current getSystemAttribute: 1002. - (platformName = 'Win32' and: [osVersion = 'CE']) - ifTrue: [^NoInputInterpreter new]. - platformName = 'Win32' ifTrue: [^MacRomanInputInterpreter new]. - ^NoInputInterpreter new! Item was removed: - ----- Method: Locale class>>determineCurrentLocale (in category 'private') ----- - determineCurrentLocale - "For now just return the default locale. - A smarter way would be to determine the current platforms default locale." - "Locale determineCurrentLocale" - - ^self new determineLocale! Item was removed: - ----- Method: Locale class>>initKnownLocales (in category 'private') ----- - initKnownLocales - | locales | - locales := Dictionary new. - - "Init the locales for which we have translations" - InternalTranslator availableLanguageLocaleIDs do: [:id | - locales at: id put: (Locale new localeID: id)]. - ^locales! Item was removed: - ----- Method: Locale class>>initialize (in category 'class initialization') ----- - initialize - "Locale initialize" - - Smalltalk addToStartUpList: Locale. - Preferences addPreference: #useLocale - categories: #('general') default: false - balloonHelp: 'Use the system locale to set the system language etc at startup'.! Item was removed: - ----- Method: Locale class>>initializePlatformEncodings (in category 'class initialization') ----- - initializePlatformEncodings - "Locale initializePlatformEncodings" - - | platform | - PlatformEncodings isNil ifTrue: [ PlatformEncodings := Dictionary new ]. - - platform := PlatformEncodings at: 'default' ifAbsentPut: Dictionary new. - platform - at: 'default' put: 'iso8859-1'; - at: 'Win32 CE' put: 'utf-8'; - yourself. - - platform := PlatformEncodings at: 'ja' ifAbsentPut: Dictionary new. - platform - at: 'default' put: 'shift-jis'; - at: 'unix' put: 'euc-jp'; - at: 'Win32 CE' put: 'utf-8'; - yourself. - - platform := PlatformEncodings at: 'ko' ifAbsentPut: Dictionary new. - platform - at: 'default' put: 'euc-kr'; - at: 'Win32 CE' put: 'utf-8'; - yourself. - - platform := PlatformEncodings at: 'zh' ifAbsentPut: Dictionary new. - platform - at: 'default' put: 'gb2312'; - at: 'unix' put: 'euc-cn'; - at: 'Win32 CE' put: 'utf-8'; - yourself. - ! Item was removed: - ----- Method: Locale class>>isoLanguage: (in category 'accessing') ----- - isoLanguage: isoLanguage - ^self isoLanguage: isoLanguage isoCountry: nil! Item was removed: - ----- Method: Locale class>>isoLanguage:isoCountry: (in category 'accessing') ----- - isoLanguage: isoLanguage isoCountry: isoCountry - ^self localeID: (LocaleID isoLanguage: isoLanguage isoCountry: isoCountry)! Item was removed: - ----- Method: Locale class>>isoLocale: (in category 'accessing') ----- - isoLocale: aString - ! Item was removed: - ----- Method: Locale class>>knownLocales (in category 'private') ----- - knownLocales - "KnownLocales := nil" - ^KnownLocales ifNil: [KnownLocales := self initKnownLocales]! Item was removed: - ----- Method: Locale class>>languageSymbol: (in category 'accessing') ----- - languageSymbol: languageSymbol - "Locale languageSymbol: #Deutsch" - - ^self isoLanguage: (LanguageSymbols at: languageSymbol)! Item was removed: - ----- Method: Locale class>>localeChanged (in category 'notification') ----- - localeChanged - - #(#ParagraphEditor #BitEditor #FormEditor #StandardSystemController ) - do: [:key | Smalltalk - at: key - ifPresent: [:class | class initialize]]. - PartsBin localeChanged. - Project localeChanged. - PaintBoxMorph localeChanged. - ColorPickerMorph localeChanged. - Preferences localeChanged! Item was removed: - ----- Method: Locale class>>localeChangedGently (in category 'notification') ----- - localeChangedGently - - #(#ParagraphEditor #BitEditor #FormEditor #StandardSystemController ) - do: [:key | Smalltalk - at: key - ifPresent: [:class | class initialize]]. - PartsBin localeChangedGently. - Project localeChangedGently. - PaintBoxMorph localeChangedGently. - ColorPickerMorph localeChangedGently. - Preferences localeChangedGently. - ! Item was removed: - ----- Method: Locale class>>localeChangedListeners (in category 'notification') ----- - localeChangedListeners - ^LocaleChangeListeners ifNil: [LocaleChangeListeners _ OrderedCollection new]! Item was removed: - ----- Method: Locale class>>localeID: (in category 'accessing') ----- - localeID: id - ^self knownLocales at: id ifAbsentPut: [Locale new localeID: id]! Item was removed: - ----- Method: Locale class>>migrateSystem (in category 'private') ----- - migrateSystem - "Locale migrateSystem" - "Do all the necessary operations to switch to the new Locale environment." - - LocaleChangeListeners _ nil. - self - addLocalChangedListener: HandMorph; - addLocalChangedListener: Clipboard; - addLocalChangedListener: Vocabulary; - addLocalChangedListener: PartsBin; - addLocalChangedListener: Project; - addLocalChangedListener: PaintBoxMorph; - yourself! Item was removed: - ----- Method: Locale class>>platformEncodings (in category 'class initialization') ----- - platformEncodings - PlatformEncodings isEmptyOrNil ifTrue: [ self initializePlatformEncodings ]. - ^PlatformEncodings - ! Item was removed: - ----- Method: Locale class>>previous (in category 'accessing') ----- - previous - - ^ Previous - ! Item was removed: - ----- Method: Locale class>>resetKnownLocales (in category 'private') ----- - resetKnownLocales - - KnownLocales := nil - ! Item was removed: - ----- Method: Locale class>>startUp: (in category 'system startUp') ----- - startUp: resuming - | newID | - resuming ifFalse: [^self]. - (Preferences valueOfFlag: #useLocale) - ifTrue: [ - DateAndTime localTimeZone: (TimeZone - offset: (Duration minutes: Locale current offsetLocalToUTC) - name: 'Local Time' - abbreviation: 'LT'). - newID := self current determineLocaleID. - newID ~= LocaleID current - ifTrue: [self switchAndInstallFontToID: newID gently: true]]! Item was removed: - ----- Method: Locale class>>stringForLanguageNameIs: (in category 'accessing') ----- - stringForLanguageNameIs: localeID - "Answer a string for a menu determining whether the given - symbol is the project's natural language" - ^ (self current localeID = localeID - ifTrue: ['<yes>'] - ifFalse: ['<no>']) - , localeID displayName! Item was removed: - ----- Method: Locale class>>switchAndInstallFontToID: (in category 'accessing') ----- - switchAndInstallFontToID: localeID - "Locale switchAndInstallFontToID: (LocaleID isoLanguage: 'de')" - | locale | - locale := Locale localeID: localeID. - locale languageEnvironment isFontAvailable - ifFalse: [(self confirm: 'This language needs additional fonts. - Do you want to install the fonts?' translated) - ifTrue: [locale languageEnvironment installFont] - ifFalse: [^ self]]. - self - switchTo: locale! Item was removed: - ----- Method: Locale class>>switchAndInstallFontToID:gently: (in category 'accessing') ----- - switchAndInstallFontToID: localeID gently: gentlyFlag - - | locale result env envFound ret fontInImage menu | - "Assumption: Rainbow => can try Pango" - "Logic: - - in Sugar, we don't bother asking any questions, and we don't bother automatically loading fonts. - in Sugar, and if the font is available, use the font. - in Sugar, and if the font is not in the image, try to enable Pango. - - if the previous step fails, notify the user that you cannot switch to the language. - - not in Rainbow, - - if the font is in the image, use the font. - - if the font is not in the image, - - ask to choose: - - load font - - try to enable pango, if pango is available - - or cancel. - - if the previous step fails, notify the user that you cannot switch to the language. - Details: - - how to check non-pango font is available: - - if the language environment for the locale doesn't exist, the font is not available. - - if font loading fails, it is not available. - - how to check if the language environment doesn't exist: - - if the locales languageEnvironment is Latin1 but the locale isn't it is not available. - " - locale := Locale localeID: localeID. - env := locale languageEnvironment. - result := true. - envFound := (Latin1Environment supportedLanguages includes: locale isoLanguage) or: [(env isMemberOf: Latin1Environment) not]. - fontInImage := envFound and: [env isFontAvailable]. - SugarLauncher isRunningInSugar ifTrue: [ - fontInImage ifFalse: [ - "font is not available in the image. Even don't ask for font installation." - Cursor wait showWhile: [ - Preferences setPreference: #usePangoRenderer toValue: true. - TextMorph usePango: true]]. - ] ifFalse: [ - fontInImage ifFalse: [ - menu := MenuMorph new. - menu defaultTarget: menu. - envFound ifTrue: [menu add: 'load font' translated selector: #modalSelection: argument: #loadFont]. - RomePluginCanvas pangoIsAvailable ifTrue: [menu add: 'enable Pango' translated selector: #modalSelection: argument: #enablePango]. - menu add: 'cancel' translated selector: #modalSelection: argument: #cancel. - menu addTitle: 'This language needs additional fonts. - Do you want to install the fonts?' translated. - ret := menu invokeModal. - ret = #loadFont ifTrue: [result := env installFont. result ifTrue: [StrikeFont setupDefaultFallbackTextStyle]]. - ret = #enablePango ifTrue: [ - (result := RomePluginCanvas pangoIsAvailable) ifTrue: [ - Cursor wait showWhile: [ - Preferences setPreference: #usePangoRenderer toValue: true. - TextMorph usePango: true]]]. - (ret ~~ #loadFont and: [ret ~~ #enablePango]) ifTrue: [result := false]]]. - - result ifFalse: [self inform: 'Cannot load additional fonts' translated] ifTrue: [self switchTo: locale gently: gentlyFlag]. - ! Item was removed: - ----- Method: Locale class>>switchTo: (in category 'accessing') ----- - switchTo: locale - self switchTo: locale gently: false. - ! Item was removed: - ----- Method: Locale class>>switchTo:gently: (in category 'accessing') ----- - switchTo: locale gently: gentlyFlag - "Locale switchTo: (Locale isoLanguage: 'de')" - | availableID | - availableID := (NaturalLanguageTranslator availableForLocaleID: locale localeID) localeID. - Current localeID = availableID - ifFalse: [Previous _ Current. - CurrentPlatform := Current := Locale localeID: availableID. - NaturalLanguageTranslator localeChanged. - gentlyFlag ifTrue: [self localeChangedGently] ifFalse: [self localeChanged]]! Item was removed: - ----- Method: Locale class>>switchToID: (in category 'accessing') ----- - switchToID: localeID - "Locale switchToID: (LocaleID isoLanguage: 'de') " - - self switchTo: (Locale localeID: localeID)! Item was removed: - ----- Method: Locale>>determineLocale (in category 'accessing') ----- - determineLocale - self localeID: self determineLocaleID! Item was removed: - ----- Method: Locale>>determineLocaleID (in category 'accessing') ----- - determineLocaleID - "Locale current determineLocaleID" - | isoLang isoCountry | - isoLang := self fetchISO2Language - ifNil: [^ self localeID]. - isoCountry := self fetchISOCountry - ifNil: [^ LocaleID isoLanguage: isoLang]. - ^ LocaleID isoLanguage: isoLang isoCountry: isoCountry! Item was removed: - ----- Method: Locale>>fetchISO2Language (in category 'private') ----- - fetchISO2Language - "Locale current fetchISO2Language" - | lang isoLang | - lang := self primLanguage. - lang ifNil: [^nil]. - lang := lang copyUpTo: 0 asCharacter. - lang size == 2 - ifTrue: [^lang]. - isoLang := ISOLanguageDefinition iso3LanguageDefinition: lang. - ^isoLang - ifNil: [nil] - ifNotNil: [isoLang iso2]! Item was removed: - ----- Method: Locale>>fetchISOCountry (in category 'private') ----- - fetchISOCountry - "Locale current fetchISOCountry" - | countryCode | - countryCode := self primCountry - ifNil: [^ nil]. - ^ countryCode copyUpTo: 0 asCharacter! Item was removed: - ----- Method: Locale>>iconForNativeLanguage (in category 'accessing') ----- - iconForNativeLanguage - - ^ (NaturalLanguageFormTranslator localeID: self localeID) translate: 'LanguageNameInNativeLanguage'. - ! Item was removed: - ----- Method: Locale>>isoCountry (in category 'accessing') ----- - isoCountry - ^self localeID isoCountry! Item was removed: - ----- Method: Locale>>isoLanguage (in category 'accessing') ----- - isoLanguage - ^self localeID isoLanguage! Item was removed: - ----- Method: Locale>>isoLocale (in category 'accessing') ----- - isoLocale - "<language>-<country>" - ^self isoCountry - ifNil: [self isoLanguage] - ifNotNil: [self isoLanguage , '-' , self isoCountry]! Item was removed: - ----- Method: Locale>>languageEnvironment (in category 'accessing') ----- - languageEnvironment - ^LanguageEnvironment localeID: self localeID! Item was removed: - ----- Method: Locale>>localeID (in category 'accessing') ----- - localeID - ^id! Item was removed: - ----- Method: Locale>>localeID: (in category 'accessing') ----- - localeID: anID - id := anID! Item was removed: - ----- Method: Locale>>offsetLocalToUTC (in category 'accessing') ----- - offsetLocalToUTC - ^self primTimezone! Item was removed: - ----- Method: Locale>>primCountry (in category 'system primitives') ----- - primCountry - "Returns string with country tag according to ISO 639" - <primitive: 'primitiveCountry' module: 'LocalePlugin'> - ^'US'! Item was removed: - ----- Method: Locale>>primCurrencyNotation (in category 'system primitives') ----- - primCurrencyNotation - "Returns boolean if symbol is pre- (true) or post-fix (false)" - <primitive: 'primitiveCurrencyNotation' module: 'LocalePlugin'> - ^true! Item was removed: - ----- Method: Locale>>primCurrencySymbol (in category 'system primitives') ----- - primCurrencySymbol - "Returns string with currency symbol" - <primitive: 'primitiveCurrencySymbol' module:'LocalePlugin'> - ^'$'! Item was removed: - ----- Method: Locale>>primDST (in category 'system primitives') ----- - primDST - "Returns boolean if DST (daylight saving time) is active or not" - <primitive:'primitiveDaylightSavings' module: 'LocalePlugin'> - ^false! Item was removed: - ----- Method: Locale>>primDecimalSymbol (in category 'system primitives') ----- - primDecimalSymbol - "Returns string with e.g. '.' or ','" - <primitive:'primitiveDecimalSymbol' module: 'LocalePlugin'> - ^'.'! Item was removed: - ----- Method: Locale>>primDigitGrouping (in category 'system primitives') ----- - primDigitGrouping - "Returns string with e.g. '.' or ',' (thousands etc)" - <primitive:'primitiveDigitGroupingSymbol' module: 'LocalePlugin'> - ^','! Item was removed: - ----- Method: Locale>>primLanguage (in category 'system primitives') ----- - primLanguage - "returns string with language tag according to ISO 639" - <primitive:'primitiveLanguage' module: 'LocalePlugin'> - ^'en' - - ! Item was removed: - ----- Method: Locale>>primLongDateFormat (in category 'system primitives') ----- - primLongDateFormat - "Returns the long date format - d day, m month, y year, - double symbol is null padded, single not padded (m=6, mm=06) - dddd weekday - mmmm month name" - <primitive:'primitiveLongDateFormat' module: 'LocalePlugin'> - ^'dddd, mmmm d, yyyy'! Item was removed: - ----- Method: Locale>>primMeasurement (in category 'system primitives') ----- - primMeasurement - "Returns boolean denoting metric(true) or imperial(false)." - <primitive:'primitiveMeasurementMetric' module: 'LocalePlugin'> - ^true - ! Item was removed: - ----- Method: Locale>>primShortDateFormat (in category 'system primitives') ----- - primShortDateFormat - "Returns the short date format - d day, m month, y year, - double symbol is null padded, single not padded (m=6, mm=06) - dddd weekday - mmmm month name" - <primitive:'primitiveShortDateFormat' module: 'LocalePlugin'> - ^'m/d/yy'! Item was removed: - ----- Method: Locale>>primTimeFormat (in category 'system primitives') ----- - primTimeFormat - "Returns string time format - Format is made up of - h hour (h 12, H 24), m minute, s seconds, x (am/pm String) - double symbol is null padded, single not padded (h=6, hh=06)" - <primitive:'primitiveTimeFormat' module: 'LocalePlugin'> - ^'h:mmx'! Item was removed: - ----- Method: Locale>>primTimezone (in category 'system primitives') ----- - primTimezone - "The offset from UTC in minutes, with positive offsets being towards the east. - (San Francisco is in UTC -07*60 and Paris is in UTC +02*60 when daylight savings is in effect)." - <primitive:'primitiveTimezoneOffset' module: 'LocalePlugin'> - ^0! Item was removed: - ----- Method: Locale>>primVMOffsetToUTC (in category 'system primitives') ----- - primVMOffsetToUTC - "Returns the offset in minutes between the VM and UTC. - If the VM does not support UTC times, this is 0. - Also gives us backward compatibility with old VMs as the primitive will fail and we then can return 0." - <primitive:'primitiveVMOffsetToUTC' module: 'LocalePlugin'> - ^0! Item was removed: - ----- Method: Locale>>printOn: (in category 'accessing') ----- - printOn: aStream - super printOn: aStream. - aStream nextPutAll: '(' , id printString , ')'! Item was removed: - Object subclass: #LocaleID - instanceVariableNames: 'isoLanguage isoCountry' - classVariableNames: '' - poolDictionaries: '' - category: 'GetText-Localization'! Item was removed: - ----- Method: LocaleID class>>current (in category 'accessing') ----- - current - ^Locale current localeID! Item was removed: - ----- Method: LocaleID class>>isoLanguage: (in category 'instance creation') ----- - isoLanguage: langString - ^self isoLanguage: langString isoCountry: nil! Item was removed: - ----- Method: LocaleID class>>isoLanguage:isoCountry: (in category 'instance creation') ----- - isoLanguage: langString isoCountry: countryStringOrNil - ^self new isoLanguage: langString isoCountry: countryStringOrNil! Item was removed: - ----- Method: LocaleID class>>isoString: (in category 'instance creation') ----- - isoString: isoString - "Parse the isoString (<language>-<country>) into its components and return the matching LocaleID" - "LocaleID isoString: 'en' " - "LocaleID isoString: 'en-us' " - - | parts language country | - parts := isoString findTokens: #($- ). - language := parts first. - parts size > 1 - ifTrue: [country := parts second]. - ^self isoLanguage: language isoCountry: country! Item was removed: - ----- Method: LocaleID class>>posixName: (in category 'instance creation') ----- - posixName: aString - ^ self - isoString: (aString copyReplaceAll: '_' with: '-')! Item was removed: - ----- Method: LocaleID class>>previous (in category 'accessing') ----- - previous - ^Locale previous localeID! Item was removed: - ----- Method: LocaleID>>= (in category 'comparing') ----- - = anotherObject - self class == anotherObject class - ifFalse: [^false]. - ^self isoLanguage = anotherObject isoLanguage - and: [self isoCountry = anotherObject isoCountry]! Item was removed: - ----- Method: LocaleID>>displayCountry (in category 'accessing') ----- - displayCountry - ^(ISOLanguageDefinition iso2Countries at: self isoCountry asUppercase ifAbsent: [ self isoCountry ]) ! Item was removed: - ----- Method: LocaleID>>displayLanguage (in category 'accessing') ----- - displayLanguage - | language | - language := (ISOLanguageDefinition iso2LanguageTable - at: self isoLanguage - ifAbsent: [^ self isoLanguage]) language. - ^ self isoCountry - ifNil: [language] - ifNotNil: [language , ' (' , self displayCountry , ')']! Item was removed: - ----- Method: LocaleID>>displayName (in category 'accessing') ----- - displayName - "Answer a proper name to represent the receiver in GUI. - - The wording is provided by translations of the magic value - '<language display name>'. - - 'English' -> 'English' - 'German' -> 'Deutsch' - " - | magicPhrase translatedMagicPhrase | - magicPhrase := '<language display name>'. - translatedMagicPhrase := GetTextTranslator translateWithoutLoading: magicPhrase toLocaleID: self. - ^ translatedMagicPhrase = magicPhrase - ifTrue: [self displayLanguage] - ifFalse: [translatedMagicPhrase]! Item was removed: - ----- Method: LocaleID>>hasParent (in category 'testing') ----- - hasParent - ^self isoCountry notNil! Item was removed: - ----- Method: LocaleID>>hash (in category 'comparing') ----- - hash - ^self isoLanguage hash bitXor: self isoCountry hash! Item was removed: - ----- Method: LocaleID>>isoCountry (in category 'accessing') ----- - isoCountry - ^isoCountry! Item was removed: - ----- Method: LocaleID>>isoLanguage (in category 'accessing') ----- - isoLanguage - ^isoLanguage! Item was removed: - ----- Method: LocaleID>>isoLanguage:isoCountry: (in category 'initialize') ----- - isoLanguage: langString isoCountry: countryStringOrNil - isoLanguage := langString. - isoCountry := countryStringOrNil! Item was removed: - ----- Method: LocaleID>>isoString (in category 'accessing') ----- - isoString - ^self asString! Item was removed: - ----- Method: LocaleID>>parent (in category 'accessing') ----- - parent - ^self class isoLanguage: self isoLanguage! Item was removed: - ----- Method: LocaleID>>posixName (in category 'printing') ----- - posixName - "(LocaleID isoString: 'es-MX') posixName" - "(LocaleID isoString: 'es') posixName" - "language[_territory]" - ^ self isoCountry - ifNil: [self isoLanguage] - ifNotNil: [self isoLanguage , '_' , self isoCountry]! Item was removed: - ----- Method: LocaleID>>printOn: (in category 'printing') ----- - printOn: stream - "<language>-<country>" - stream nextPutAll: self isoLanguage. - self isoCountry - ifNotNil: [stream nextPut: $-; nextPutAll: self isoCountry]! Item was removed: - ----- Method: LocaleID>>storeOn: (in category 'printing') ----- - storeOn: aStream - aStream nextPut: $(. - aStream nextPutAll: self class name. - aStream nextPutAll: ' isoString: '. - aStream nextPutAll: '''' , self printString , ''''. - aStream nextPut: $). - ! Item was removed: - ----- Method: LocaleID>>translator (in category 'accessing') ----- - translator - ^ InternalTranslator localeID: self ! Item was changed: ----- Method: MOFile>>fileName: (in category 'public') ----- fileName: path + fileName := path! - fileName _ path! Item was changed: ----- Method: MOFile>>hashPjw: (in category 'experimental') ----- hashPjw: aString "So called `hashpjw' function by P.J. Weinberger [see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools, 1986, 1987 Bell Telephone Laboratories, Inc.] " | stringSize hash g | + stringSize := aString size. + hash := 0. - stringSize _ aString size. - hash _ 0. 1 to: stringSize do: [:pos | + hash := hash bitShift: 4. + hash := hash + ((aString at: pos) asInteger). + g := hash bitAnd: 16rF0000000. - hash _ hash bitShift: 4. - hash _ hash + ((aString at: pos) asInteger). - g _ hash bitAnd: 16rF0000000. g = 0 ifFalse: [ + hash := hash bitXor: (g bitShift: -24). + hash := hash bitXor: g. - hash _ hash bitXor: (g bitShift: -24). - hash _ hash bitXor: g. ] ]. ^hash. ! Item was changed: ----- Method: MOFile>>load1:localeID: (in category 'experimental') ----- load1: aFileName localeID: id "CASE1: all of strings are loaded. translation strings are converted to Squeak format on load time. original-string/index pairs are registerd to Dictionary on load time. hash search can't be used" | strm originalTable translatedTable | + localeID := id. - localeID _ id. strm_ FileStream readOnlyFileNamed: aFileName. + fileName := aFileName. - fileName _ aFileName. [ self loadHeader: strm. + originalTable := self loadStringPointers: strm - originalTable _ self loadStringPointers: strm offset: originalTableOffset. + originalStrings := self loadStrings: strm - originalStrings _ self loadStrings: strm pointers: originalTable. + translatedTable := self loadStringPointers: strm - translatedTable _ self loadStringPointers: strm offset: translatedTableOffset. + translatedStrings := self loadStrings: strm - translatedStrings _ self loadStrings: strm pointers: translatedTable encoding: 'utf8' languageEnvironment: (Locale localeID: localeID) languageEnvironment . + translations := Dictionary new. - translations _ Dictionary new. 1 to: nStrings do: [:index | | key | + key := originalStrings at: index. - key _ originalStrings at: index. translations at: key put: index. ]. + originalTable := nil. - originalTable _ nil. ] ensure: [strm close].! Item was changed: ----- Method: MOFile>>load4:localeID: (in category 'experimental') ----- load4: aFileName localeID: id "CASE4: all of strings are loaded. loading and conversion of translation strings to Squeak format is executed on initialization time. only hash search can be used" | strm originalTable translatedTable | + localeID := id. - localeID _ id. strm_ FileStream readOnlyFileNamed: aFileName. + fileName := aFileName. - fileName _ aFileName. [ self loadHeader: strm. self loadHashTable: strm. + originalTable := self loadStringPointers: strm - originalTable _ self loadStringPointers: strm offset: originalTableOffset. + originalStrings := self loadStrings: strm - originalStrings _ self loadStrings: strm pointers: originalTable. + translatedTable := self loadStringPointers: strm - translatedTable _ self loadStringPointers: strm offset: translatedTableOffset. + translatedStrings := self loadStrings: strm - translatedStrings _ self loadStrings: strm pointers: translatedTable encoding: 'utf-8' languageEnvironment: (Locale localeID: localeID) languageEnvironment . ] ensure: [strm close].! Item was changed: ----- Method: MOFile>>load:localeID: (in category 'public') ----- load: aFileName localeID: id "all of original/translated strings are loaded. but conversion of translation string (in utf-8 bytestring) to Squeak format will be defered. original-string/index pairs are registerd to Dictionary on load time. hash search can't be used" | strm originalTable translatedTable | + localeID := id. - localeID _ id. strm_ FileStream readOnlyFileNamed: aFileName. + fileName := aFileName. - fileName _ aFileName. [ self loadHeader: strm. + originalTable := self loadStringPointers: strm - originalTable _ self loadStringPointers: strm offset: originalTableOffset. + originalStrings := self loadStrings: strm - originalStrings _ self loadStrings: strm pointers: originalTable. + translatedTable := self loadStringPointers: strm - translatedTable _ self loadStringPointers: strm offset: translatedTableOffset. + translatedStrings := self loadStrings: strm - translatedStrings _ self loadStrings: strm pointers: translatedTable. + translations := Dictionary new: nStrings * 2. "make too enough room to avoid #grow" - translations _ Dictionary new: nStrings * 2. "make too enough room to avoid #grow" 1 to: nStrings do: [:index | | key | + key := originalStrings at: index. - key _ originalStrings at: index. translations at: key put: index. ]. + originalStrings := nil. - originalStrings _ nil. ] ensure: [strm close].! Item was changed: ----- Method: MOFile>>loadHashTable: (in category 'experimental') ----- loadHashTable: strm | entry | + hashTable := IntegerArray ofSize: hashTableSize. - hashTable _ IntegerArray ofSize: hashTableSize. strm binary. strm position: hashTableOffset. 1 to: hashTableSize do: [:index | + entry := self nextInt32From: strm. - entry _ self nextInt32From: strm. hashTable at: index put: entry. ]! Item was changed: ----- Method: MOFile>>loadHeader: (in category 'private') ----- loadHeader: strm strm binary. + magic := strm uint32. - magic _ strm uint32. magic = 16rDE120495 + ifTrue: [isLittleEndian := true] - ifTrue: [isLittleEndian _ true] ifFalse: [ magic = 16r950412DE + ifTrue: [isLittleEndian := false] - ifTrue: [isLittleEndian _ false] ifFalse: [ self error: 'invalid MO'] ]. + revision := self nextInt32From: strm. + nStrings := self nextInt32From: strm. + originalTableOffset := self nextInt32From: strm. + translatedTableOffset := self nextInt32From: strm. + hashTableSize := self nextInt32From: strm. + hashTableOffset := self nextInt32From: strm. - revision _ self nextInt32From: strm. - nStrings _ self nextInt32From: strm. - originalTableOffset _ self nextInt32From: strm. - translatedTableOffset _ self nextInt32From: strm. - hashTableSize _ self nextInt32From: strm. - hashTableOffset _ self nextInt32From: strm. ! Item was changed: ----- Method: MOFile>>loadString:pointer:length: (in category 'private') ----- loadString: strm pointer: top length: len | str | + str := ByteString new: len. - str _ ByteString new: len. strm position: top. strm nextInto: str. ^str replaceAll: Lf with: Cr. ! Item was changed: ----- Method: MOFile>>loadStringPointers:offset: (in category 'private') ----- loadStringPointers: strm offset: tableOffset "returns tupple {arrayOfOffsetToString arrayOfLengthOfString}" | offsetTable lenTable len offset tupple | + offsetTable := IntegerArray new: nStrings. + lenTable := IntegerArray new: nStrings. - offsetTable _ IntegerArray new: nStrings. - lenTable _ IntegerArray new: nStrings. strm binary. strm position: tableOffset. 1 to: nStrings do: [:index | + len := self nextInt32From: strm. + offset := self nextInt32From: strm. - len _ self nextInt32From: strm. - offset _ self nextInt32From: strm. offsetTable at: index put: offset. lenTable at: index put: len. ]. + tupple := Array new: 2. - tupple _ Array new: 2. tupple at: 1 put: offsetTable. tupple at: 2 put: lenTable. ^tupple ! Item was changed: ----- Method: MOFile>>loadStrings:pointers:encoding:languageEnvironment: (in category 'private') ----- loadStrings: strm pointers: tupple encoding: encodingName languageEnvironment: env | strings rawStr str offsetTable lenTable | + offsetTable := tupple first. + lenTable := tupple second. + strings := Array new: nStrings. - offsetTable _ tupple first. - lenTable _ tupple second. - strings _ Array new: nStrings. 1 to: nStrings do: [:index | + rawStr := self loadString: strm - rawStr _ self loadString: strm pointer: (offsetTable at: index) length: (lenTable at: index). + str := encodingName isNil ifTrue: [rawStr] - str _ encodingName isNil ifTrue: [rawStr] ifFalse: [ encodingName = 'utf8' ifTrue: [rawStr utf8ToSqueak applyLanguageInfomation: env] ifFalse: [self error: 'this encoding isn''t supported'] ]. strings at: index put: str. ]. ^strings.! Item was changed: ----- Method: MOFile>>searchByDictionary: (in category 'public') ----- searchByDictionary: aString | index | + index := translations at: aString ifAbsent: [^nil]. - index _ translations at: aString ifAbsent: [^nil]. ^self translatedString: index ! Item was changed: ----- Method: MOFile>>searchByHash: (in category 'experimental') ----- searchByHash: aString | hashValue nstr index incr key | + hashValue := self hashPjw: aString. + incr := 1 + (hashValue \\ (hashTableSize -2)). + index := (hashValue \\ hashTableSize) . + [ nstr := (hashTable at: index +1 ). - hashValue _ self hashPjw: aString. - incr _ 1 + (hashValue \\ (hashTableSize -2)). - index _ (hashValue \\ hashTableSize) . - [ nstr _ (hashTable at: index +1 ). nstr = 0 ifTrue: [^nil]. + key := self originalString: nstr. - key _ self originalString: nstr. key = aString ifTrue: [^self translatedString: nstr]. index >= (hashTableSize - incr) + ifTrue: [index := index - (hashTableSize - incr) ] + ifFalse:[index := index + incr]. - ifTrue: [index _ index - (hashTableSize - incr) ] - ifFalse:[index _ index + incr]. ] doWhileTrue: true.! Item was changed: ----- Method: MOFile>>translateByHash: (in category 'experimental') ----- translateByHash: aString | trans | + trans := self searchByHash: aString. - trans _ self searchByHash: aString. trans isNil ifTrue: [^aString] ifFalse: [^trans]. ! Item was changed: ----- Method: MOFile>>translatedString: (in category 'private') ----- translatedString: index "KNOWN PROBLEM: conversion is executed everytimes this method called" | str | + str := translatedStrings at: index. - str _ translatedStrings at: index. ^str utf8ToSqueak applyLanguageInfomation: (Locale localeID: localeID) languageEnvironment. ! Item was removed: - Object subclass: #NaturalLanguageFormTranslator - instanceVariableNames: 'id generics' - classVariableNames: 'CachedTranslations' - poolDictionaries: '' - category: 'GetText-Localization'! Item was removed: - ----- Method: NaturalLanguageFormTranslator class>>bitmapForJapanese (in category 'as yet unclassified') ----- - bitmapForJapanese - - ^ (Form - extent: 54@17 - depth: 16 - fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65536 0 1 65537 65537 65537 65537 0 0 0 0 1 0 0 0 0 65537 65537 1 65537 65537 65536 1 0 0 0 1 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 65536 0 0 65536 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 1 65537 65537 65536 1 0 0 0 1 0 0 65536 0 0 1 0 0 0 1 0 1 65537 65537 65537 65537 65537 65537 0 0 0 1 65537 65537 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 65537 65536 0 0 0 65537 65537 0 65536 1 0 0 0 65536 1 0 0 0 1 65537 65537 65537 65537 0 0 0 1 1 1 0 0 0 0 0 0 65536 1 0 0 0 65536 1 0 0 0 1 0 0 0 1 0 0 0 1 1 1 0 0 0 65537 65537 65537 65537 65537 65537 0 0 65536 1 0 0 0 1 0 0 0 1 0 0 0 65536 1 0 65536 0 0 0 0 0 0 0 0 0 0 65536 1 0 0 0 1 0 0 0 1 0 0 1 0 1 0 1 0 0 65537 65537 1 65537 65537 65536 0 0 65536 1 0 0 0 1 0 0 0 1 0 0 65536 65537 65537 65537 65536 65536 0 65536 1 1 0 0 65536 0 0 65536 0 65536 0 0 1 0 0 0 1 0 1 0 0 1 0 0 1 0 65536 1 1 0 0 65536 0 1 0 0 65536 0 0 1 65537 65537 65537 65537 0 0 0 0 1 0 0 0 0 65537 65537 1 65537 65537 65536 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 65536 0 0 0 65536 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0) - offset: 0@0)! Item was removed: - ----- Method: NaturalLanguageFormTranslator class>>cachedTranslations (in category 'accessing') ----- - cachedTranslations - "CachedTranslations := nil" - ^CachedTranslations ifNil: [CachedTranslations := Dictionary new]! Item was removed: - ----- Method: NaturalLanguageFormTranslator class>>cleanUp (in category 'class initialization') ----- - cleanUp - "Flush caches" - - CachedTranslations := nil! Item was removed: - ----- Method: NaturalLanguageFormTranslator class>>initializeJapaneseBitmap (in category 'as yet unclassified') ----- - initializeJapaneseBitmap - - (self localeID: (LocaleID isoString: 'ja')) name: 'LanguageNameInNativeLanguage' form: self bitmapForJapanese. - ! Item was removed: - ----- Method: NaturalLanguageFormTranslator class>>isoLanguage: (in category 'accessing') ----- - isoLanguage: isoLanguage - "Return the generic language translator as there is no information about the country code" - - ^self isoLanguage: isoLanguage isoCountry: nil! Item was removed: - ----- Method: NaturalLanguageFormTranslator class>>isoLanguage:isoCountry: (in category 'accessing') ----- - isoLanguage: isoLanguage isoCountry: isoCountry - ^self localeID: (LocaleID isoLanguage: isoLanguage isoCountry: isoCountry)! Item was removed: - ----- Method: NaturalLanguageFormTranslator class>>loadFormsFrom: (in category 'i/o') ----- - loadFormsFrom: aStream - - | rr pair inst | - rr _ ReferenceStream on: aStream. - pair _ rr next. - inst _ self localeID: (LocaleID isoString: pair first). - pair second associationsDo: [:assoc | - inst name: assoc key form: assoc value. - ]. - ^ inst. - ! Item was removed: - ----- Method: NaturalLanguageFormTranslator class>>localeID: (in category 'accessing') ----- - localeID: localeID - ^ self cachedTranslations - at: localeID - ifAbsentPut: [self new localeID: localeID]! Item was removed: - ----- Method: NaturalLanguageFormTranslator>>generics (in category 'accessing') ----- - generics - ^generics ifNil: [generics := Dictionary new]! Item was removed: - ----- Method: NaturalLanguageFormTranslator>>localeID (in category 'accessing') ----- - localeID - ^id! Item was removed: - ----- Method: NaturalLanguageFormTranslator>>localeID: (in category 'accessing') ----- - localeID: anID - id := anID! Item was removed: - ----- Method: NaturalLanguageFormTranslator>>name:form: (in category 'accessing') ----- - name: formName form: translatedForm - self generics at: formName put: translatedForm. - ! Item was removed: - ----- Method: NaturalLanguageFormTranslator>>saveFormsOn: (in category 'i/o') ----- - saveFormsOn: aStream - - | rr | - rr _ ReferenceStream on: aStream. - rr nextPut: {id isoString. generics}. - rr close. - ! Item was removed: - ----- Method: NaturalLanguageFormTranslator>>translate: (in category 'utilities') ----- - translate: aString - - ^ (self generics - at: aString ifAbsent: [nil]) deepCopy. - - "Do you like to write 'form ifNotNil: [form deepCopy]'?" - ! Item was removed: - Object subclass: #NaturalLanguageTranslator - instanceVariableNames: 'id' - classVariableNames: 'Translators' - poolDictionaries: '' - category: 'GetText-Localization'! - - !NaturalLanguageTranslator commentStamp: '<historical>' prior: 0! - abstract class of natural language translator. - Class side manages and holds loaded instances of concrete classes.! Item was removed: - ----- Method: NaturalLanguageTranslator class>>availableForLocaleID: (in category 'accessing') ----- - availableForLocaleID: localeID - "Answer available locale ID. - If translator is not found for correct locale ID, then isoLanguage is - attempted for the key." - ^ self translators - at: localeID - ifAbsent: [localeID hasParent - ifTrue: [self translators - at: localeID parent - ifAbsent: [self default]] - ifFalse: [self default]]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>availableLanguageLocaleIDs (in category 'accessing') ----- - availableLanguageLocaleIDs - "Return the locale ids for the currently available languages. - Meaning those which either internally or externally have - translations available." - "NaturalLanguageTranslator availableLanguageLocaleIDs" - ^ self translators values collect:[:each | each localeID]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>cleanUpCache (in category 'private') ----- - cleanUpCache - "NaturalLanguageTranslator cleanUpCache" - - self cachedTranslations keys do: [:key | - key isoLanguage size > 2 ifTrue: [self cachedTranslations removeKey: key]]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>current (in category 'accessing') ----- - current - ^ self availableForLocaleID: LocaleID current! Item was removed: - ----- Method: NaturalLanguageTranslator class>>default (in category 'accessing') ----- - default - "Answer translator for backstop" - "self default translate: 'test'" - ^ self new - localeID: (LocaleID isoLanguage: 'en')! Item was removed: - ----- Method: NaturalLanguageTranslator class>>directoryForLanguage:country:create: (in category 'private loading') ----- - directoryForLanguage: isoLanguage country: isoCountry create: createDir - "Try to locate the <prefs>/locale/<language>{/<country>} folder. - If createDir is set, create the path down to country or language, depending on wether it's specified.. - Return the directory for country or language depending on specification. - If neither exists, nil" - - "NaturalLanguageTranslator directoryForLanguage: 'es' country: nil create: true" - "NaturalLanguageTranslator directoryForLanguage: 'de' country: 'DE' create: true" - "NaturalLanguageTranslator directoryForLanguage: 'en' country: 'US' create: false" - "NaturalLanguageTranslator directoryForLanguage: 'en' country: nil create: true" - - "If this fails, there is nothing we can do about it here" - | localeDir countryDir languageDir | - localeDir := self localeDirCreate: createDir. - localeDir ifNil: [^nil]. - - isoCountry ifNil: [ - languageDir := localeDir directoryNamed: isoLanguage. - createDir - ifTrue: [languageDir assureExistence]. - ^languageDir exists - ifTrue: [languageDir] - ifFalse: [nil]]. - - countryDir := languageDir directoryNamed: isoCountry. - createDir - ifTrue: [countryDir assureExistence]. - - ^countryDir exists - ifTrue: [countryDir] - ifFalse: [nil]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>directoryForLocaleID:create: (in category 'private loading') ----- - directoryForLocaleID: localeID create: createDir - "Try to locate the <prefs>/locale/<language>{/<country>} folder. - If createDir is set, create the path down to country or language, depending on locale. - Return the directory for country or language depending on locale. - If neither exists, nil" - - "NaturalLanguageTranslator directoryForLanguage: 'de' country: nil readOnly: true" - "NaturalLanguageTranslator directoryForLanguage: 'de' country: 'DE' readOnly: true" - "NaturalLanguageTranslator directoryForLanguage: 'en' country: 'US' readOnly: false" - "NaturalLanguageTranslator directoryForLanguage: 'en' country: nil readOnly: true" - - ^self directoryForLanguage: localeID isoLanguage country: localeID isoCountry create: createDir! Item was removed: - ----- Method: NaturalLanguageTranslator class>>domainRegistered: (in category 'accessing') ----- - domainRegistered: aDomainName - "notify that new TextDomain is registered" - self translators do: [:each | each domainRegistered: aDomainName]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>domainUnregistered: (in category 'accessing') ----- - domainUnregistered: aDomainName - "notify that new TextDomain is unregistered" - self translators do: [:each | each domainUnregistered: aDomainName]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>fileReaderServicesForFile:suffix: (in category 'file-services') ----- - fileReaderServicesForFile: fullName suffix: suffix - "Answer the file services associated with given file" - ^ (suffix = self translationSuffix) | (suffix = '*') - ifTrue: [{self serviceMergeLanguageTranslations}] - ifFalse: [#()]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>initialize (in category 'class initialization') ----- - initialize - Smalltalk addToStartUpList: NaturalLanguageTranslator after: FileDirectory. - ! Item was removed: - ----- Method: NaturalLanguageTranslator class>>isoLanguage: (in category 'accessing') ----- - isoLanguage: isoLanguage - "Return the generic language translator as there is no information about the country code" - - ^self isoLanguage: isoLanguage isoCountry: nil! Item was removed: - ----- Method: NaturalLanguageTranslator class>>isoLanguage:isoCountry: (in category 'accessing') ----- - isoLanguage: isoLanguage isoCountry: isoCountry - ^self localeID: (LocaleID isoLanguage: isoLanguage isoCountry: isoCountry)! Item was removed: - ----- Method: NaturalLanguageTranslator class>>loadAvailableExternalLocales (in category 'private loading') ----- - loadAvailableExternalLocales - "private - register locales IDs based on the content of the <prefs>/locale/ directory" - | localeDir | - localeDir := self localeDirCreate: false. - localeDir ifNil: [^ #()]. - localeDir directoryNames - do: [:langDirName | - | langDir | - langDir := localeDir directoryNamed: langDirName. - (langDir fileNamesMatching: '*.' , self translationSuffix) - ifNotEmpty: [self loadTranslatorForIsoLanguage: langDirName isoCountry: nil]. - langDir directoryNames - do: [:countryDirName | - | countryDir | - countryDir := langDir directoryNamed: countryDirName. - (countryDir fileNamesMatching: '*.' , self translationSuffix) - ifNotEmpty: [self loadTranslatorForIsoLanguage: langDirName isoCountry: countryDirName] - ] - ]. - ! Item was removed: - ----- Method: NaturalLanguageTranslator class>>loadAvailableLocales (in category 'private loading') ----- - loadAvailableLocales - "This loads the default locale and all external locales" - - | defaultID | - defaultID := LocaleID current. - self cachedTranslations at: defaultID ifAbsent: [self localeID: defaultID]. - self loadAvailableExternalLocales.! Item was removed: - ----- Method: NaturalLanguageTranslator class>>loadExternalTranslationsFor: (in category 'private loading') ----- - loadExternalTranslationsFor: translator - "Try to load translations from external external files. - The files are located in the <prefs>/locale/<language>{/<country>} folder. - There can be more than one file for each location, so applications can install their own partial translation tables. All files in the specific folder are loaded." - - | translationDir | - translationDir := self directoryForLocaleID: translator localeID create: false. - translationDir ifNil: [ ^nil ]. - (translationDir fileNamesMatching: '*.' , self translationSuffix) - do: [:fileName | translator loadFromFileNamed: (translationDir fullNameFor: fileName)]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>loadForLocaleIsoString:fromGzippedMimeLiteral: (in category 'file-services') ----- - loadForLocaleIsoString: localeString fromGzippedMimeLiteral: mimeString - "merge the translation from the mime literal." - | stream localeID translator gs rbStream s currentPlatform | - s := Base64MimeConverter mimeDecodeToBytes: mimeString readStream. - s reset. - gs := GZipReadStream on: s. - rbStream := MultiByteBinaryOrTextStream with: gs contents asString. - rbStream converter: UTF8TextConverter new. - rbStream reset. - localeID := LocaleID isoString: localeString. - currentPlatform := Locale currentPlatform. - [Locale - currentPlatform: (Locale localeID: localeID). - stream := ReadStream on: rbStream contents] - ensure: [Locale currentPlatform: currentPlatform]. - translator := self localeID: localeID. - translator loadFromStream: stream. - LanguageEnvironment resetKnownEnvironments! Item was removed: - ----- Method: NaturalLanguageTranslator class>>loadTranslatorForIsoLanguage:isoCountry: (in category 'private loading') ----- - loadTranslatorForIsoLanguage: isoLanguage isoCountry: isoCountry - "private - load the translations from <prefs>/locale/ directory - the procedure is to assure the existence of a translator for the - given language/country and then load the external translations for this translator" - - | translator | - translator := self localeID: (LocaleID isoLanguage: isoLanguage isoCountry: isoCountry). - - self loadExternalTranslationsFor: translator! Item was removed: - ----- Method: NaturalLanguageTranslator class>>localeChanged (in category 'accessing') ----- - localeChanged - "notify some project starts to use this locale. - this facility may use the event to load translation data dynamically" - self current setCurrent - ! Item was removed: - ----- Method: NaturalLanguageTranslator class>>localeDirCreate: (in category 'private loading') ----- - localeDirCreate: createDir - "Try to locate the <prefs>/locale/ folder. - If createDir is set, try to create the path. - If it doesn't exist, return nil" - - "If this fails, there is nothing we can do about it here" - | prefDir localeDir | - (createDir not - and: [ExternalSettings preferenceDirectory isNil]) - ifTrue: [^ nil]. - - prefDir := ExternalSettings assuredPreferenceDirectory. - prefDir exists - ifFalse: [^nil]. - - - localeDir := prefDir directoryNamed: 'locale'. - createDir - ifTrue: [localeDir assureExistence]. - ^localeDir exists - ifTrue: [localeDir] - ifFalse: [nil]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>localeID: (in category 'accessing') ----- - localeID: localeID - ^ self cachedTranslations - at: localeID - ifAbsentPut: [self new localeID: localeID]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>mergeTranslationFileNamed: (in category 'file-services') ----- - mergeTranslationFileNamed: fileFullNameString - "merge the translation in the file named fileFullNameString" - - FileStream readOnlyFileNamed: fileFullNameString do: [:stream | - | localeID translator | - localeID := LocaleID isoString: stream localName sansPeriodSuffix. - translator := self localeID: localeID. - translator loadFromStream: stream]. - LanguageEnvironment resetKnownEnvironments. - - ! Item was removed: - ----- Method: NaturalLanguageTranslator class>>privateStartUp (in category 'class initialization') ----- - privateStartUp - self resetCaches. - GetTextTranslator privateStartUp. - InternalTranslator privateStartUp. - self localeChanged.! Item was removed: - ----- Method: NaturalLanguageTranslator class>>registerPhrase: (in category 'private') ----- - registerPhrase: phrase - "Using a Dictionary so we can lookup existing string instead of creating needless copies when loading a translation." - self allKnownPhrases at: phrase put: phrase! Item was removed: - ----- Method: NaturalLanguageTranslator class>>registeredPhraseFor: (in category 'private') ----- - registeredPhraseFor: phrase - "Using a Dictionary so we can lookup existing string instead of creating needless copies when loading a translation." - ^self allKnownPhrases at: phrase ifAbsentPut: [phrase]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>removeLocaleID: (in category 'accessing') ----- - removeLocaleID: localeID - "self removeLocaleID: (LocaleID isoString: 'ja-kids')" - ^ self translators - removeKey: localeID - ifAbsent: []! Item was removed: - ----- Method: NaturalLanguageTranslator class>>resetCaches (in category 'class initialization') ----- - resetCaches - Translators := nil.! Item was removed: - ----- Method: NaturalLanguageTranslator class>>serviceMergeLanguageTranslations (in category 'file-services') ----- - serviceMergeLanguageTranslations - "Answer a service for merging of translation files" - ^ SimpleServiceEntry - provider: self - label: 'merge the translation file' - selector: #mergeTranslationFileNamed: - description: 'merge the translation file into the language named like the file' - buttonLabel: 'merge'! Item was removed: - ----- Method: NaturalLanguageTranslator class>>services (in category 'file-services') ----- - services - "Answer potential file services associated with this class" - ^ {self serviceMergeLanguageTranslations}! Item was removed: - ----- Method: NaturalLanguageTranslator class>>startUp: (in category 'class initialization') ----- - startUp: resuming - resuming - ifFalse: [^ self]. - self privateStartUp.! Item was removed: - ----- Method: NaturalLanguageTranslator class>>translate:toLocaleID: (in category 'translation') ----- - translate: aString toLocaleID: localeID - "translate for default domain" - ^ (self availableForLocaleID: localeID) - translate: aString! Item was removed: - ----- Method: NaturalLanguageTranslator class>>translate:toLocaleID:inDomain: (in category 'translation') ----- - translate: aString toLocaleID: localeID inDomain: aDomainName - ^ (self availableForLocaleID: localeID) - translate: aString inDomain: aDomainName! Item was removed: - ----- Method: NaturalLanguageTranslator class>>translateWithoutLoading:toLocaleID: (in category 'translation') ----- - translateWithoutLoading: aString toLocaleID: localeID - "translate for default domain" - ^self translateWithoutLoading: aString toLocaleID: localeID inDomain: TextDomainManager defaultDomain. - ! Item was removed: - ----- Method: NaturalLanguageTranslator class>>translateWithoutLoading:toLocaleID:inDomain: (in category 'translation') ----- - translateWithoutLoading: aString toLocaleID: localeID inDomain: aDomainName - "try to translate with small footprint: - if GetTextTranslator hasn't loaded MO, try to use InternalTranslator. - if InternalTranslator isn't available, then actually load MO and use it" - | translator | - translator _ self availableForLocaleID: localeID. - (translator isDomainLoaded: aDomainName) ifFalse: [ - (InternalTranslator availableLanguageLocaleIDs includes: localeID) - ifTrue: [translator _ InternalTranslator localeID: localeID]. - ]. - ^translator translate: aString inDomain: aDomainName! Item was removed: - ----- Method: NaturalLanguageTranslator class>>translationSuffix (in category 'private') ----- - translationSuffix - ^'translation'! Item was removed: - ----- Method: NaturalLanguageTranslator class>>translators (in category 'accessing') ----- - translators - ^ Translators ifNil: [Translators := Dictionary new] ! Item was removed: - ----- Method: NaturalLanguageTranslator>>atRandom (in category 'accessing') ----- - atRandom - - self subclassResponsibility. - ! Item was removed: - ----- Method: NaturalLanguageTranslator>>checkPhrase:translation: (in category 'translation') ----- - checkPhrase: phrase translation: translation! Item was removed: - ----- Method: NaturalLanguageTranslator>>defaultBackgroundColor (in category 'user interface') ----- - defaultBackgroundColor - "answer the receiver's defaultBackgroundColor for views" - ^ Color cyan! Item was removed: - ----- Method: NaturalLanguageTranslator>>displayLanguage (in category 'accessing') ----- - displayLanguage - ^ id displayLanguage! Item was removed: - ----- Method: NaturalLanguageTranslator>>displayName (in category 'accessing') ----- - displayName - ^ id displayName! Item was removed: - ----- Method: NaturalLanguageTranslator>>domainRegistered: (in category 'accessing') ----- - domainRegistered: aDomainName - "notify that new TextDomain is registered. Concrete subclass can responds to this event if needed"! Item was removed: - ----- Method: NaturalLanguageTranslator>>domainUnregistered: (in category 'accessing') ----- - domainUnregistered: aDomainName - "notify that new TextDomain is unregistered. Concrete subclass can responds to this event if needed"! Item was removed: - ----- Method: NaturalLanguageTranslator>>fileOutHeader (in category 'fileIn/fileOut') ----- - fileOutHeader - ^ '''Translation dictionary'''! Item was removed: - ----- Method: NaturalLanguageTranslator>>fileOutHeaderOn: (in category 'fileIn/fileOut') ----- - fileOutHeaderOn: aStream - aStream nextChunkPut: self fileOutHeader; - cr. - aStream timeStamp; cr. - aStream nextPut: $!!. - aStream nextChunkPut: '(' , self class name , ' localeID: ' , id storeString , ')'. - aStream cr! Item was removed: - ----- Method: NaturalLanguageTranslator>>fileOutOn: (in category 'fileIn/fileOut') ----- - fileOutOn: aStream - "self current fileOutOn: Transcript. Transcript endEntry" - self fileOutHeaderOn: aStream. - self fileOutOn: aStream keys: nil! Item was removed: - ----- Method: NaturalLanguageTranslator>>fileOutOn:keys: (in category 'fileIn/fileOut') ----- - fileOutOn: aStream keys: keys - "self current fileOutOn: Transcript. Transcript endEntry" - (keys - ifNil: [generics keys asArray sort]) - do: [:key | self - nextChunkPut: (generics associationAt: key) - on: aStream]. - keys - ifNil: [self untranslated - do: [:each | self nextChunkPut: each -> '' on: aStream]]. - aStream nextPut: $!!; - cr! Item was removed: - ----- Method: NaturalLanguageTranslator>>generics (in category 'private') ----- - generics - ^generics ifNil: [generics := Dictionary new]! Item was removed: - ----- Method: NaturalLanguageTranslator>>isDomainLoaded: (in category 'accessing') ----- - isDomainLoaded: aDomainName - "ask if translation dictionary for the domain has been loaded and available now for use" - self subclassResponsibility.! Item was removed: - ----- Method: NaturalLanguageTranslator>>isoCountry (in category 'accessing') ----- - isoCountry - ^self localeID isoCountry! Item was removed: - ----- Method: NaturalLanguageTranslator>>isoLanguage (in category 'accessing') ----- - isoLanguage - ^self localeID isoLanguage! Item was removed: - ----- Method: NaturalLanguageTranslator>>loadFromFileNamed: (in category 'private store-retrieve') ----- - loadFromFileNamed: fileNameString - "Load translations from an external file" - - FileStream readOnlyFileNamed: fileNameString do: [ :file | - self loadFromStream: file ]. - self changed: #translations. - self changed: #untranslated. - ! Item was removed: - ----- Method: NaturalLanguageTranslator>>loadFromRefStream: (in category 'private store-retrieve') ----- - loadFromRefStream: stream - "Load translations from an external file" - | loadedArray refStream | - refStream := ReferenceStream on: stream. - [loadedArray := refStream next] - ensure: [refStream close]. - self processExternalObject: loadedArray ! Item was removed: - ----- Method: NaturalLanguageTranslator>>loadFromStream: (in category 'private store-retrieve') ----- - loadFromStream: stream - "Load translations from an external file" - | header isFileIn | - header := '''Translation dictionary'''. - isFileIn := (stream next: header size) - = header. - stream reset. - isFileIn - ifTrue: [stream fileInAnnouncing: 'Loading ' translated, stream localName] - ifFalse: [self loadFromRefStream: stream]! Item was removed: - ----- Method: NaturalLanguageTranslator>>localeID (in category 'accessing') ----- - localeID - ^id! Item was removed: - ----- Method: NaturalLanguageTranslator>>localeID: (in category 'initialize-release') ----- - localeID: anID - id := anID! Item was removed: - ----- Method: NaturalLanguageTranslator>>mergeTranslations: (in category 'private store-retrieve') ----- - mergeTranslations: newTranslations - "Merge a new set of translations into the exiting table. - Overwrites existing entries." - - newTranslations keysAndValuesDo: [:key :value | - self rawPhrase: (self class registeredPhraseFor: key) translation: value]. - self changed: #translations. - self changed: #untranslated.! Item was removed: - ----- Method: NaturalLanguageTranslator>>nextChunkPut:on: (in category 'fileIn/fileOut') ----- - nextChunkPut: anObject on: aStream - | i remainder terminator | - terminator := $!!. - remainder := anObject storeString. - [(i := remainder indexOf: terminator) = 0] - whileFalse: [aStream - nextPutAll: (remainder copyFrom: 1 to: i). - aStream nextPut: terminator. - "double imbedded terminators" - remainder := remainder copyFrom: i + 1 to: remainder size]. - aStream nextPutAll: remainder. - aStream nextPut: terminator; cr.! Item was removed: - ----- Method: NaturalLanguageTranslator>>phrase:translation: (in category 'translation') ----- - phrase: phraseString translation: translationString - self generics at: phraseString put: translationString asString. - self changed: #translations. - self changed: #untranslated.! Item was removed: - ----- Method: NaturalLanguageTranslator>>printOn: (in category 'printing') ----- - printOn: aStream - aStream nextPutAll: self class name; nextPut: $(; print: self localeID; nextPut: $)! Item was removed: - ----- Method: NaturalLanguageTranslator>>processExternalObject: (in category 'private store-retrieve') ----- - processExternalObject: anArray - "pivate - process the external object" - - "new format -> {translations. untranslated}" - - anArray second do: [:each | self class registerPhrase: each]. - - self mergeTranslations: anArray first! Item was removed: - ----- Method: NaturalLanguageTranslator>>rawPhrase:translation: (in category 'translation') ----- - rawPhrase: phraseString translation: translationString - self generics at: phraseString put: translationString asString. - ! Item was removed: - ----- Method: NaturalLanguageTranslator>>rawRemoveUntranslated: (in category 'translation') ----- - rawRemoveUntranslated: untranslated - - self class allKnownPhrases removeKey: untranslated ifAbsent: []. - self changed: #untranslated.! Item was removed: - ----- Method: NaturalLanguageTranslator>>removeTranslationFor: (in category 'translation') ----- - removeTranslationFor: phraseString - self generics removeKey: phraseString ifAbsent: []. - self changed: #translations. - self changed: #untranslated.! Item was removed: - ----- Method: NaturalLanguageTranslator>>removeUntranslated: (in category 'translation') ----- - removeUntranslated: untranslated - - self class allKnownPhrases removeKey: untranslated ifAbsent: []. - ! Item was removed: - ----- Method: NaturalLanguageTranslator>>saveToFileNamed: (in category 'private store-retrieve') ----- - saveToFileNamed: fileNameString - "save the receiver's translations to a file named fileNameString" - | stream | - "Set true if you need to save as binary" - false - ifTrue: [stream := ReferenceStream fileNamed: fileNameString. - stream nextPut: {self translations. self untranslated}. - stream close. - ^ self]. - stream := FileStream fileNamed: fileNameString. - [self fileOutOn: stream] - ensure: [stream close]! Item was removed: - ----- Method: NaturalLanguageTranslator>>scanFrom: (in category 'fileIn/fileOut') ----- - scanFrom: aStream - "Read a definition of dictionary. - Make sure current locale corresponds my locale id" - | newTranslations currentPlatform | - newTranslations := Dictionary new. - currentPlatform := Locale currentPlatform. - [ | aString assoc | - Locale - currentPlatform: (Locale localeID: id). - [aString := aStream nextChunk withSqueakLineEndings. - aString size > 0] - whileTrue: [assoc := Compiler evaluate: aString. - assoc value = '' - ifTrue: [self class registerPhrase: assoc key] - ifFalse: [newTranslations add: assoc]]] - ensure: [Locale currentPlatform: currentPlatform]. - self mergeTranslations: newTranslations! Item was removed: - ----- Method: NaturalLanguageTranslator>>setCurrent (in category 'language switching') ----- - setCurrent - "notify locale of the translator become current" - ! Item was removed: - ----- Method: NaturalLanguageTranslator>>translate: (in category 'translation') ----- - translate: aString - ^self translate: aString - inDomain: TextDomainManager defaultDomain! Item was removed: - ----- Method: NaturalLanguageTranslator>>translate:in: (in category 'translation') ----- - translate: aString in: aContext! Item was removed: - ----- Method: NaturalLanguageTranslator>>translate:inDomain: (in category 'translation') ----- - translate: aString inDomain: aDomainName - ^ aString! Item was removed: - ----- Method: NaturalLanguageTranslator>>translationFor: (in category 'translation') ----- - translationFor: aString - ^self translate: aString! Item was removed: - ----- Method: NaturalLanguageTranslator>>translations (in category 'accessing') ----- - translations - ^self generics! Item was removed: - ----- Method: NaturalLanguageTranslator>>untranslated (in category 'accessing') ----- - untranslated - | translations | - translations := self translations. - ^self class allKnownPhrases reject: [:each | translations includesKey: each]! Item was removed: - ----- Method: NaturalLanguageTranslator>>writeAsMimeString (in category 'fileIn/fileOut') ----- - writeAsMimeString - - | fileName fileStream tmpStream s2 gzs | - tmpStream := MultiByteBinaryOrTextStream on: ''. - tmpStream converter: UTF8TextConverter new. - self fileOutOn: tmpStream. - s2 := RWBinaryOrTextStream on: ''. - gzs := GZipWriteStream on: s2. - tmpStream reset. - gzs nextPutAll: (tmpStream binary contentsOfEntireFile asString) contents. - gzs close. - s2 reset. - - fileName := id isoString, '.translation.gz.mime'. - fileStream := FileStream newFileNamed: fileName. - fileStream nextPutAll: (Base64MimeConverter mimeEncode: s2) contents. - fileStream close. - ! Item was changed: ----- Method: TranslatedReceiverFinder>>stringReceiversWithContext (in category 'accessing') ----- stringReceiversWithContext | mrs results rr cls mn t o | + mrs := SystemNavigation default allCallsOn: #translated. + results := OrderedCollection new. - mrs _ SystemNavigation default allCallsOn: #translated. - results _ OrderedCollection new. mrs do: [:mr | + rr := OrderedCollection new. + cls := Smalltalk at: mr classSymbol. - rr _ OrderedCollection new. - cls _ Smalltalk at: mr classSymbol. rr add: cls category. rr add: mr classSymbol. rr add: mr methodSymbol. mr classIsMeta ifTrue: [ + mn := cls class decompile: mr methodSymbol. - mn _ cls class decompile: mr methodSymbol. ] ifFalse: [ + mn := cls decompile: mr methodSymbol. - mn _ cls decompile: mr methodSymbol. ]. + o := OrderedCollection new. + t := Set new. - o _ OrderedCollection new. - t _ Set new. self searchMessageNode: mn addTo: t. t do: [ :te | (te receiver isMemberOf: LiteralNode) ifTrue: [ o add: te receiver key. ]. ]. o ifNotEmpty: [ rr add: o. results add: rr. ]. ]. ^ results. ! Item was changed: ----- Method: TranslatedReceiverFinder>>stringReceiversWithContext: (in category 'accessing') ----- stringReceiversWithContext: aSymbol "Find string receivers for a symbol. Answer a collection of aMethodReference -> {keyword. keyword...}" "self new stringReceiversWithContext: #translated" | keywords methodReferences | + methodReferences := SystemNavigation default allCallsOn: aSymbol. - methodReferences _ SystemNavigation default allCallsOn: aSymbol. ^ methodReferences inject: OrderedCollection new into: [:list :next | keywords := self findWordsWith: aSymbol in: next. keywords ifNotEmpty: [list add: next -> keywords]. list] !
1
0
0
0
The Trunk: System-edc.474.mcz
by commits@source.squeak.org
29 Mar '12
29 Mar '12
Edgar J. De Cleene uploaded a new version of System to project The Trunk:
http://source.squeak.org/trunk/System-edc.474.mcz
==================== Summary ==================== Name: System-edc.474 Author: edc Time: 29 March 2012, 7:56:22.086 am UUID: 50ce2068-fc68-4a19-9f8c-9334c1a501f4 Ancestors: System-bf.473 {InternalTranslator ISOLanguageDefinition Locale LocaleID NaturalLanguageFormTranslator NaturalLanguageTranslator} Moved back to System-Localization =============== Diff against System-bf.473 =============== Item was added: + Object subclass: #ISOLanguageDefinition + instanceVariableNames: 'iso3 iso2 iso3Alternate language' + classVariableNames: 'ISO2Countries ISO2Table ISO3Countries ISO3Table' + poolDictionaries: '' + category: 'System-Localization'! Item was added: + ----- Method: ISOLanguageDefinition class>>buildIso3166CodesTables (in category 'private') ----- + buildIso3166CodesTables + "ISOLanguageDefinition buildIso3166CodesTables" + | rawdata stream country isoa2 isoa3 unNumeric macName macCode windowsName windowsCode empty table | + rawdata := self iso3166Codes. + table := OrderedCollection new: 200. + stream := rawdata readStream. + empty := 160 asCharacter asString. + [stream atEnd] whileFalse: + [country := stream nextLine. + isoa2 := stream nextLine. + isoa3 := stream nextLine. + unNumeric := stream nextLine. + windowsName := stream nextLine. + windowsName = empty ifTrue: [windowsName := nil]. + windowsCode := stream nextLine. + windowsCode = empty ifTrue: [windowsCode := nil]. + macName := stream nextLine. + macName = empty ifTrue: [macName := nil]. + macCode := stream nextLine. + macCode = empty ifTrue: [macCode := nil]. + table add: { country. isoa2. isoa3. unNumeric. windowsName. windowsCode. macName. macCode. }]. + ^table! Item was added: + ----- Method: ISOLanguageDefinition class>>extraCountryDefinitions (in category 'private') ----- + extraCountryDefinitions + ^{ + {'Kids'. 'KIDS'. 'KIDS'.}. + }! Item was added: + ----- Method: ISOLanguageDefinition class>>extraISO3Definitions (in category 'private') ----- + extraISO3Definitions + + ^self readISOLanguagesFrom: 'jpk Japanese (Kids) + ' readStream! Item was added: + ----- Method: ISOLanguageDefinition class>>initISO3LanguageTable (in category 'private') ----- + initISO3LanguageTable + "ISOLanguageDefinition initIso3LanguageTable" + + | table | + table := ISOLanguageDefinition readISOLanguagesFrom: ISOLanguageDefinition isoLanguages readStream. + table addAll: self extraISO3Definitions. + ^table! Item was added: + ----- Method: ISOLanguageDefinition class>>initISOCountries (in category 'private') ----- + initISOCountries + "ISOLanguageDefinition initISOCountries" + | iso3166Table | + iso3166Table := ISOLanguageDefinition buildIso3166CodesTables. + ISO2Countries := Dictionary new. + ISO3Countries := Dictionary new. + iso3166Table do: [:entry | + ISO2Countries at: (entry at: 2) put: (entry at: 1). + ISO3Countries at: (entry at: 3) put: (entry at: 1)]. + self extraCountryDefinitions do: [:entry | + ISO2Countries at: (entry at: 2) put: (entry at: 1). + ISO3Countries at: (entry at: 3) put: (entry at: 1)]! Item was added: + ----- Method: ISOLanguageDefinition class>>initialize (in category 'class initialization') ----- + initialize + "ISOLanguageDefinition initialize" + + ISO3Table := nil. + ISO2Table := nil! Item was added: + ----- Method: ISOLanguageDefinition class>>iso2Countries (in category 'private') ----- + iso2Countries + "ISOLanguageDefinition iso2Countries" + "ISO2Countries := nil. ISO3Countries := nil" + + ISO2Countries ifNil: [self initISOCountries]. + ^ISO2Countries! Item was added: + ----- Method: ISOLanguageDefinition class>>iso2LanguageDefinition: (in category 'accessing') ----- + iso2LanguageDefinition: aString + ^self iso2LanguageTable at: aString! Item was added: + ----- Method: ISOLanguageDefinition class>>iso2LanguageTable (in category 'private') ----- + iso2LanguageTable + "ISOLanguageDefinition iso2LanguageTable" + + ISO2Table ifNotNil: [^ISO2Table]. + ISO2Table := Dictionary new: self iso3LanguageTable basicSize. + self iso3LanguageTable do: [:entry | + ISO2Table at: entry iso2 put: entry]. + ^ISO2Table! Item was added: + ----- Method: ISOLanguageDefinition class>>iso3166Codes (in category 'private') ----- + iso3166Codes + "
http://www.unicode.org/onlinedat/countries.html
" + + ^'LAND ISLANDS + AX + + + + + + + AFGHANISTAN + AF + AFG + 004 + + + + + ALBANIA + AL + ALB + 008 + CTRY_ALBANIA + 355 + + + ALGERIA + DZ + DZA + 012 + CTRY_ALGERIA + 213 + verArabic + 16 + AMERICAN SAMOA + AS + ASM + 016 + + + + + ANDORRA + AD + AND + 020 + + + + + ANGOLA + AO + AGO + 024 + + + + + ANGUILLA + AI + AIA + 660 + + + + + ANTARCTICA + AQ + ATA + 010 + + + + + ANTIGUA AND BARBUDA + AG + ATG + 028 + + + + + ARGENTINA + AR + ARG + 032 + CTRY_ARGENTINA + 54 + + + ARMENIA + AM + ARM + 051 + CTRY_ARMENIA + 374 + verArmenian + 84 + ARUBA + AW + ABW + 533 + + + + + AUSTRALIA + AU + AUS + 036 + CTRY_AUSTRALIA + 61 + verAustralia + 15 + AUSTRIA + AT + AUT + 040 + CTRY_AUSTRIA + 43 + verAustria + 92 + AZERBAIJAN + AZ + AZE + 031 + CTRY_AZERBAIJAN + 994 + + + BAHAMAS + BS + BHS + 044 + + + + + BAHRAIN + BH + BHR + 048 + CTRY_BAHRAIN + 973 + + + BANGLADESH + BD + BGD + 050 + + + verBengali + 60 + BARBADOS + BB + BRB + 052 + + + + + BELARUS + BY + BLR + 112 + CTRY_BELARUS + 375 + + + BELGIUM + BE + BEL + 056 + CTRY_BELGIUM + 32 + verFrBelgium, verFlemish + 98 + BELIZE + BZ + BLZ + 084 + CTRY_BELIZE + 501 + + + BENIN + BJ + BEN + 204 + + + + + BERMUDA + BM + BMU + 060 + + + + + BHUTAN + BT + BTN + 064 + + + verBhutan + 83 + BOLIVIA + BO + BOL + 068 + CTRY_BOLIVIA + 591 + + + BOSNIA AND HERZEGOVINA + BA + BIH + 070 + + + + + BOTSWANA + BW + BWA + 072 + + + + + BOUVET ISLAND + BV + BVT + 074 + + + + + BRAZIL + BR + BRA + 076 + CTRY_BRAZIL + 55 + verBrazil + 71 + BRITISH INDIAN OCEAN TERRITORY + IO + IOT + 086 + + + + + BRUNEI DARUSSALAM + BN + BRN + 096 + CTRY_BRUNEI_DARUSSALAM + 673 + + + BULGARIA + BG + BGR + 100 + CTRY_BULGARIA + 359 + verBulgaria + 72 + BURKINA FASO + BF + BFA + 854 + + + + + BURUNDI + BI + BDI + 108 + + + + + CAMBODIA + KH + KHM + 116 + + + + + CAMEROON + CM + CMR + 120 + + + + + CANADA + CA + CAN + 124 + CTRY_CANADA + 2 + verFrCanada, verEndCanada + 82 + CAPE VERDE + CV + CPV + 132 + + + + + CAYMAN ISLANDS + KY + CYM + 136 + + + + + CENTRAL AFRICAN REPUBLIC + CF + CAF + 140 + + + + + CHAD + TD + TCD + 148 + + + + + CHILE + CL + CHL + 152 + CTRY_CHILE + 56 + + + CHINA + CN + CHN + 156 + CTRY_PRCHINA + 86 + verChina + 52 + CHRISTMAS ISLAND + CX + CXR + 162 + + + + + COCOS (KEELING) ISLANDS + CC + CCK + 166 + + + + + COLOMBIA + CO + COL + 170 + CTRY_COLOMBIA + 57 + + + COMOROS + KM + COM + 174 + + + + + CONGO + CG + COG + 178 + + + + + CONGO, THE DEMOCRATIC REPUBLIC OF THE + CD + + + + + + + COOK ISLANDS + CK + COK + 184 + + + + + COSTA RICA + CR + CRI + 188 + CTRY_COSTA_RICA + 506 + + + COTE D''IVOIRE + CI + CIV + 384 + + + + + CROATIA (local name: Hrvatska) + HR + HRV + 191 + CTRY_CROATIA + 385 + verCroatia, verYugoCroatian + 68 (c), 25 (y) + CUBA + CU + CUB + 192 + + + + + CYPRUS + CY + CYP + 196 + + + verCyprus + 23 + CZECH REPUBLIC + CZ + CZE + 203 + CTRY_CZECH + 420 + verCzech + 56 + DENMARK + DK + DNK + 208 + CTRY_DENMARK + 45 + verDenmark(da), verFaeroeIsl(fo) + 9(da), 47(fo) + DJIBOUTI + DJ + DJI + 262 + + + + + DOMINICA + DM + DMA + 212 + + + + + DOMINICAN REPUBLIC + DO + DOM + 214 + CTRY_DOMINICAN_REPUBLIC + 1 + + + EAST TIMOR + TL + TLS + 626 + + + + + ECUADOR + EC + ECU + 218 + CTRY_ECUADOR + 593 + + + EGYPT + EG + EGY + 818 + CTRY_EGYPT + 20 + verArabic + 16 + EL SALVADOR + SV + SLV + 222 + CTRY_EL_SALVADOR + 503 + + + EQUATORIAL GUINEA + GQ + GNQ + 226 + + + + + ERITREA + ER + ERI + 232 + + + + + ESTONIA + EE + EST + 233 + CTRY_ESTONIA + 372 + verEstonia + 44 + ETHIOPIA + ET + ETH + 210 + + + + + FALKLAND ISLANDS (MALVINAS) + FK + FLK + 238 + + + + + FAROE ISLANDS + FO + FRO + 234 + CTRY_FAEROE_ISLANDS + 298 + + + FIJI + FJ + FJI + 242 + + + + + FINLAND + FI + FIN + 246 + CTRY_FINLAND + 358 + verFinland + 17 + FRANCE + FR + FRA + 250 + CTRY_FRANCE + 33 + verFrance + 1 + FRANCE, METROPOLITAN + FX + FXX + 249 + + + + + FRENCH GUIANA + GF + GUF + 254 + + + + + FRENCH POLYNESIA + PF + PYF + 258 + + + + + FRENCH SOUTHERN TERRITORIES + TF + ATF + 260 + + + + + GABON + GA + GAB + 266 + + + + + GAMBIA + GM + GMB + 270 + + + + + GEORGIA + GE + GEO + 268 + CTRY_GEORGIA + 995 + verGeorgian + 85 + GERMANY + DE + DEU + 276 + CTRY_GERMANY + 49 + verGermany + 3 + GHANA + GH + GHA + 288 + + + + + GIBRALTAR + GI + GIB + 292 + + + + + GREECE + GR + GRC + 300 + CTRY_GREECE + 30 + verGreece, verGreecePoly + 20, 40 + GREENLAND + GL + GRL + 304 + + + verGreenland + 107 + GRENADA + GD + GRD + 308 + + + + + GUADELOUPE + GP + GLP + 312 + + + + + GUAM + GU + GUM + 316 + + + + + GUATEMALA + GT + GTM + 320 + CTRY_GUATEMALA + 502 + + + GUINEA + GN + GIN + 324 + + + + + GUINEA-BISSAU + GW + GNB + 624 + + + + + GUYANA + GY + GUY + 328 + + + + + HAITI + HT + HTI + 332 + + + + + HEARD ISLAND & MCDONALD ISLANDS + HM + HMD + 334 + + + + + HONDURAS + HN + HND + 340 + CTRY_HONDURAS + 504 + + + HONG KONG + HK + HKG + 344 + CTRY_HONG_KONG + 852 + + + HUNGARY + HU + HUN + 348 + CTRY_HUNGARY + 36 + verHungary + 43 + ICELAND + IS + ISL + 352 + CTRY_ICELAND + 354 + verIceland + 21 + INDIA + IN + IND + 356 + CTRY_INDIA + 91 + verIndiaHindi(hi) + 33 + INDONESIA + ID + IDN + 360 + CTRY_INDONESIA + 62 + + + IRAN, ISLAMIC REPUBLIC OF + IR + IRN + 364 + CTRY_IRAN + 981 + verIran + 48 + IRAQ + IQ + IRQ + 368 + CTRY_IRAQ + 964 + verArabic + 16 + IRELAND + IE + IRL + 372 + CTRY_IRELAND + 353 + verIreland + 50 + ISRAEL + IL + ISR + 376 + CTRY_ISRAEL + 972 + verIsrael + 13 + ITALY + IT + ITA + 380 + CTRY_ITALY + 39 + verItaly + 4 + JAMAICA + JM + JAM + 388 + CTRY_JAMAICA + 1 + + + JAPAN + JP + JPN + 392 + CTRY_JAPAN + 81 + verJapan + 14 + JORDAN + JO + JOR + 400 + CTRY_JORDAN + 962 + + + KAZAKHSTAN + KZ + KAZ + 398 + CTRY_KAZAKSTAN + 7 + + + KENYA + KE + KEN + 404 + CTRY_KENYA + 254 + + + KIRIBATI + KI + KIR + 296 + + + + + KOREA, DEMOCRATIC PEOPLE''S REPUBLIC OF + KP + PRK + 408 + + + verKorea + 51 + KOREA, REPUBLIC OF + KR + KOR + 410 + CTRY_SOUTH_KOREA + 82 + verKorea + + KUWAIT + KW + KWT + 414 + CTRY_KUWAIT + 965 + + + KYRGYZSTAN + KG + KGZ + 417 + CTRY_KYRGYZSTAN + 996 + + + LAO PEOPLE''S DEMOCRATIC REPUBLIC + LA + LAO + 418 + + + + + LATVIA + LV + LVA + 428 + CTRY_LATVIA + 371 + verLatvia + 45 + LEBANON + LB + LBN + 422 + CTRY_LEBANON + 961 + + + LESOTHO + LS + LSO + 426 + + + + + LIBERIA + LR + LBR + 430 + + + + + LIBYAN ARAB JAMAHIRIYA + LY + LBY + 434 + CTRY_LIBYA + 218 + verArabic + 16 + LIECHTENSTEIN + LI + LIE + 438 + CTRY_LIECHTENSTEIN + 41 + + + LITHUANIA + LT + LTU + 440 + CTRY_LITHUANIA + 370 + verLithuania + 41 + LUXEMBOURG + LU + LUX + 442 + CTRY_LUXEMBOURG + 352 + verFrBelgiumLux + 6 + MACAU + MO + MAC + 446 + CTRY_MACAU + 853 + + + MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF + MK + MKD + 807 + CTRY_MACEDONIA + 389 + verMacedonian + + MADAGASCAR + MG + MDG + 450 + + + + + MALAWI + MW + MWI + 454 + + + + + MALAYSIA + MY + MYS + 458 + CTRY_MALAYSIA + 60 + + + MALDIVES + MV + MDV + 462 + CTRY_MALDIVES + 960 + + + MALI + ML + MLI + 466 + + + + + MALTA + MT + MLT + 470 + + + verMalta + 22 + MARSHALL ISLANDS + MH + MHL + 584 + + + + + MARTINIQUE + MQ + MTQ + 474 + + + + + MAURITANIA + MR + MRT + 478 + + + + + MAURITIUS + MU + MUS + 480 + + + + + MAYOTTE + YT + MYT + 175 + + + + + MEXICO + MX + MEX + 484 + CTRY_MEXICO + 52 + + + MICRONESIA, FEDERATED STATES OF + FM + FSM + 583 + + + + + MOLDOVA, REPUBLIC OF + MD + MDA + 498 + + + + + MONACO + MC + MCO + 492 + CTRY_MONACO + 33 + + + MONGOLIA + MN + MNG + 496 + CTRY_MONGOLIA + 976 + + + MONTSERRAT + MS + MSR + 500 + + + + + MOROCCO + MA + MAR + 504 + CTRY_MOROCCO + 212 + verArabic + 16 + MOZAMBIQUE + MZ + MOZ + 508 + + + + + MYANMAR + MM + MMR + 104 + + + + + NAMIBIA + NA + NAM + 516 + + + + + NAURU + NR + NRU + 520 + + + + + NEPAL + NP + NPL + 524 + + + verNepal + 106 + NETHERLANDS + NL + NLD + 528 + CTRY_NETHERLANDS + 31 + verNetherlands + 5 + NETHERLANDS ANTILLES + AN + ANT + 530 + + + + + NEW CALEDONIA + NC + NCL + 540 + + + + + NEW ZEALAND + NZ + NZL + 554 + CTRY_NEW_ZEALAND + 64 + + + NICARAGUA + NI + NIC + 558 + CTRY_NICARAGUA + 505 + + + NIGER + NE + NER + 562 + + + + + NIGERIA + NG + NGA + 566 + + + + + NIUE + NU + NIU + 570 + + + + + NORFOLK ISLAND + NF + NFK + 574 + + + + + NORTHERN MARIANA ISLANDS + MP + MNP + 580 + + + + + NORWAY + NO + NOR + 578 + CTRY_NORWAY + 47 + verNorway + 12 + OMAN + OM + OMN + 512 + CTRY_OMAN + 968 + + + PAKISTAN + PK + PAK + 586 + CTRY_PAKISTAN + 92 + verPakistanUrdu, verPunjabi + 34 (U), 95 (P) + PALAU + PW + PLW + 585 + + + + + PANAMA + PA + PAN + 591 + CTRY_PANAMA + 507 + + + PALESTINIAN TERRITORY, OCCUPIED + PS + + + + + + + PAPUA NEW GUINEA + PG + PNG + 598 + + + + + PARAGUAY + PY + PRY + 600 + CTRY_PARAGUAY + 595 + + + PERU + PE + PER + 604 + CTRY_PERU + 51 + + + PHILIPPINES + PH + PHL + 608 + CTRY_PHILIPPINES + 63 + + + PITCAIRN + PN + PCN + 612 + + + + + POLAND + PL + POL + 616 + CTRY_POLAND + 48 + verPoland + 42 + PORTUGAL + PT + PRT + 620 + CTRY_PORTUGAL + 351 + verPortugal + 10 + PUERTO RICO + PR + PRI + 630 + CTRY_PUERTO_RICO + 1 + + + QATAR + QA + QAT + 634 + CTRY_QATAR + 974 + + + REUNION + RE + REU + 638 + + + + + ROMANIA + RO + ROU* + 642 + CTRY_ROMANIA + 40 + verRomania + 39 + RUSSIAN FEDERATION + RU + RUS + 643 + CTRY_RUSSIA + 7 + verRussia + 49 + RWANDA + RW + RWA + 646 + + + + + SAINT KITTS AND NEVIS + KN + KNA + 659 + + + + + SAINT LUCIA + LC + LCA + 662 + + + + + SAINT VINCENT AND THE GRENADINES + VC + VCT + 670 + + + + + SAMOA + WS + WSM + 882 + + + + + SAN MARINO + SM + SMR + 674 + + + + + SAO TOME AND PRINCIPE + ST + STP + 678 + + + + + SAUDI ARABIA + SA + SAU + 682 + CTRY_SAUDI_ARABIA + 966 + verArabic + 16 + SENEGAL + SN + SEN + 686 + + + + + SERBIA AND MONTENEGRO + CS + + + CTRY_SERBIA + 381 + + + SEYCHELLES + SC + SYC + 690 + + + + + SIERRA LEONE + SL + SLE + 694 + + + + + SINGAPORE + SG + SGP + 702 + CTRY_SINGAPORE + 65 + verSingapore + 100 + SLOVAKIA (Slovak Republic) + SK + SVK + 703 + CTRY_SLOVAK + 421 + verSlovak + 57 + SLOVENIA + SI + SVN + 705 + CTRY_SLOVENIA + 386 + verSlovenian + 66 + SOLOMON ISLANDS + SB + SLB + 90 + + + + + SOMALIA + SO + SOM + 706 + + + + + SOUTH AFRICA + ZA + ZAF + 710 + CTRY_SOUTH_AFRICA + 27 + + + SOUTH GEORGIA AND THE SOUTH SANDWICH ISLANDS + GS + + + + + + + SPAIN + ES + ESP + 724 + CTRY_SPAIN + 34 + verSpain + 8 + SRI LANKA + LK + LKA + 144 + + + + + SAINT HELENA + SH + SHN + 654 + + + + + SAINT PIERRE AND MIQUELON + PM + SPM + 666 + + + + + SUDAN + SD + SDN + 736 + + + + + SURINAME + SR + SUR + 740 + + + + + SVALBARD AND JAN MAYEN ISLANDS + SJ + SJM + 744 + + + + + SWAZILAND + SZ + SWZ + 748 + + + + + SWEDEN + SE + SWE + 752 + CTRY_SWEDEN + 46 + verSweden + 7 + SWITZERLAND + CH + CHE + 756 + CTRY_SWITZERLAND + 41 + verFrSwiss(fr), verGrSwiss(de) + 18(fr), 19(de) + SYRIAN ARAB REPUBLIC + SY + SYR + 760 + CTRY_SYRIA + 963 + + + TAIWAN, PROVINCE OF CHINA + TW + TWN + 158 + CTRY_TAIWAN + 886 + verTaiwan + 53 + TAJIKISTAN + TJ + TJK + 762 + + + + + TANZANIA, UNITED REPUBLIC OF + TZ + TZA + 834 + + + + + TATARSTAN + + + + CTRY_TATARSTAN + 7 + + + THAILAND + TH + THA + 764 + CTRY_THAILAND + 66 + verThailand + 54 + TIMOR-LESTE + TL + + + + + + + TOGO + TG + TGO + 768 + + + + + TOKELAU + TK + TKL + 772 + + + + + TONGA + TO + TON + 776 + + + verTonga + 88 + TRINIDAD AND TOBAGO + TT + TTO + 780 + CTRY_TRINIDAD_Y_TOBAGO + 1 + + + TUNISIA + TN + TUN + 788 + CTRY_TUNISIA + 216 + verArabic + 16 + TURKEY + TR + TUR + 792 + CTRY_TURKEY + 90 + verTurkey + 24 + TURKMENISTAN + TM + TKM + 795 + + + + + TURKS AND CAICOS ISLANDS + TC + TCA + 796 + + + + + TUVALU + TV + TUV + 798 + + + + + UGANDA + UG + UGA + 800 + + + + + UKRAINE + UA + UKR + 804 + CTRY_UKRAINE + 380 + verUkraine + 62 + UNITED ARAB EMIRATES + AE + ARE + 784 + CTRY_UAE + 971 + + + UNITED KINGDOM + GB + GBR + 826 + CTRY_UNITED_KINGDOM + 44 + verBritain + 2 + UNITED STATES + US + USA + 840 + CTRY_UNITED_STATES + 1 + verUS + 0 + UNITED STATES MINOR OUTLYING ISLANDS + UM + UMI + 581 + + + + + URUGUAY + UY + URY + 858 + CTRY_URUGUAY + 598 + + + UZBEKISTAN + UZ + UZB + 860 + CTRY_UZBEKISTAN + 7 + + + VANUATU + VU + VUT + 548 + + + + + VATICAN CITY STATE (HOLY SEE) + VA + VAT + 336 + + + + + VENEZUELA + VE + VEN + 862 + CTRY_VENEZUELA + 58 + + + VIET NAM + VN + VNM + 704 + CTRY_VIET_NAM + 84 + verVietnam + + VIRGIN ISLANDS (BRITISH) + VG + VGB + 92 + + + + + VIRGIN ISLANDS (U.S.) + VI + VIR + 850 + + + + + WALLIS AND FUTUNA ISLANDS + WF + WLF + 876 + + + + + WESTERN SAHARA + EH + ESH + 732 + + + + + YEMEN + YE + YEM + 887 + CTRY_YEMEN + 967 + + + YUGOSLAVIA + YU + YUG + 891 + + + + + ZAIRE + ZR + ZAR + 180 + + + + + ZAMBIA + ZM + ZMB + 894 + + + + + ZIMBABWE + ZW + ZWE + 716 + CTRY_ZIMBABWE + 263 + + + '! Item was added: + ----- Method: ISOLanguageDefinition class>>iso3Countries (in category 'private') ----- + iso3Countries + "ISOLanguageDefinition iso3Countries" + "ISO2Countries := nil. ISO3Countries := nil" + + ISO3Countries ifNil: [self initISOCountries]. + ^ISO3Countries! Item was added: + ----- Method: ISOLanguageDefinition class>>iso3LanguageDefinition: (in category 'accessing') ----- + iso3LanguageDefinition: aString + ^self iso3LanguageTable at: aString! Item was added: + ----- Method: ISOLanguageDefinition class>>iso3LanguageTable (in category 'private') ----- + iso3LanguageTable + "ISOLanguageDefinition iso3LanguageTable" + + ^ISO3Table ifNil: [ISO3Table := self initISO3LanguageTable]! Item was added: + ----- Method: ISOLanguageDefinition class>>isoLanguages (in category 'private') ----- + isoLanguages + "ISO 639: 3-letter codes" + ^'aar aa Afar + abk ab Abkhazian + ace Achinese + ach Acoli + ada Adangme + ady Adyghe; Adygei + afa Afro-Asiatic languages + afh Afrihili + afr af Afrikaans + ain Ainu + aka ak Akan + akk Akkadian + alb/sqi sq Albanian + ale Aleut + alg Algonquian languages + alt Southern Altai + amh am Amharic + ang English, Old (ca.450-1100) + anp Angika + apa Apache languages + ara ar Arabic + arc Official Aramaic (700-300 BCE); Imperial Aramaic (700-300 BCE) + arg an Aragonese + arm/hye hy Armenian + arn Mapudungun; Mapuche + arp Arapaho + art Artificial languages + arw Arawak + asm as Assamese + ast Asturian; Bable; Leonese; Asturleonese + ath Athapascan languages + aus Australian languages + ava av Avaric + ave ae Avestan + awa Awadhi + aym ay Aymara + aze az Azerbaijani + bad Banda languages + bai Bamileke languages + bak ba Bashkir + bal Baluchi + bam bm Bambara + ban Balinese + baq/eus eu Basque + bas Basa + bat Baltic languages + bej Beja; Bedawiyet + bel be Belarusian + bem Bemba + ben bn Bengali + ber Berber languages) + bho Bhojpuri + bih bh Bihari + bik Bikol + bin Bini; Edo + bis bi Bislama + bla Siksika + bnt Bantu languages + bos bs Bosnian + bra Braj + bre br Breton + btk Batak languages + bua Buriat + bug Buginese + bul bg Bulgarian + bur/mya my Burmese + byn Blin; Bilin + cad Caddo + cai Central American Indian languages + car Galibi Carib + cat ca Catalan; Valencian + cau Caucasian languages + ceb Cebuano + cel Celtic languages + cha ch Chamorro + chb Chibcha + che ce Chechen + chg Chagatai + chi/zho zh Chinese + chk Chuukese + chm Mari + chn Chinook jargon + cho Choctaw + chp Chipewyan; Dene Suline + chr Cherokee + chu cu Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic + chv cv Chuvash + chy Cheyenne + cmc Chamic languages + cop Coptic + cor kw Cornish + cos co Corsican + cpe Creoles and pidgins, English based + cpf Creoles and pidgins, French-based + cpp Creoles and pidgins, Portuguese-based + cre cr Cree + crh Crimean Tatar; Crimean Turkish + crp Creoles and pidgins + csb Kashubian + cus Cushitic languages + cze/ces cs Czech + dak Dakota + dan da Danish + dar Dargwa + day Land Dayak languages + del Delaware + den Slave (Athapascan) + dgr Dogrib + din Dinka + div dv Divehi; Dhivehi; Maldivian + doi Dogri + dra Dravidian languages + dsb Lower Sorbian + dua Duala + dum Dutch, Middle (ca.1050-1350) + dut/nld nl Dutch; Flemish + dyu Dyula + dzo dz Dzongkha + efi Efik + egy Egyptian (Ancient) + eka Ekajuk + elx Elamite + eng en English + enm English, Middle (1100-1500) + epo eo Esperanto + est et Estonian + ewe ee Ewe + ewo Ewondo + fan Fang + fao fo Faroese + fat Fanti + fij fj Fijian + fil Filipino; Pilipino + fin fi Finnish + fiu Finno-Ugrian languages) + fon Fon + fre/fra fr French + frm French, Middle (ca.1400-1600) + fro French, Old (842-ca.1400) + frr Northern Frisian + frs Eastern Frisian + fry fy Western Frisian + ful ff Fulah + fur Friulian + gaa Ga + gay Gayo + gba Gbaya + gem Germanic languages + geo/kat ka Georgian + ger/deu de German + gez Geez + gil Gilbertese + gla gd Gaelic; Scottish Gaelic + gle ga Irish + glg gl Galician + glv gv Manx + gmh German, Middle High (ca.1050-1500) + goh German, Old High (ca.750-1050) + gon Gondi + gor Gorontalo + got Gothic + grb Grebo + grc Greek, Ancient (to 1453) + gre/ell el Greek, Modern (1453-) + grn gn Guarani + gsw Swiss German; Alemannic; Alsatian + guj gu Gujarati + gwi Gwich''in + hai Haida + hat ht Haitian; Haitian Creole + hau ha Hausa + haw Hawaiian + heb he Hebrew + her hz Herero + hil Hiligaynon + him Himachali + hin hi Hindi + hit Hittite + hmn Hmong + hmo ho Hiri Motu + hrv hr Croatian + hsb Upper Sorbian + hun hu Hungarian + hup Hupa + iba Iban + ibo ig Igbo + ice/isl is Icelandic + ido io Ido + iii ii Sichuan Yi; Nuosu + ijo Ijo languages + iku iu Inuktitut + ile ie Interlingue; Occidental + ilo Iloko + ina ia Interlingua (International Auxiliary Language Association) + inc Indic languages + ind id Indonesian + ine Indo-European languages + inh Ingush + ipk ik Inupiaq + ira Iranian languages + iro Iroquoian languages + ita it Italian + jav jv Javanese + jbo Lojban + jpn ja Japanese + jpr Judeo-Persian + jrb Judeo-Arabic + kaa Kara-Kalpak + kab Kabyle + kac Kachin; Jingpho + kal kl Kalaallisut; Greenlandic + kam Kamba + kan kn Kannada + kar Karen languages + kas ks Kashmiri + kau kr Kanuri + kaw Kawi + kaz kk Kazakh + kbd Kabardian + kha Khasi + khi Khoisan languages + khm km Central Khmer + kho Khotanese; Sakan + kik ki Kikuyu; Gikuyu + kin rw Kinyarwanda + kir ky Kirghiz; Kyrgyz + kmb Kimbundu + kok Konkani + kom kv Komi + kon kg Kongo + kor ko Korean + kos Kosraean + kpe Kpelle + krc Karachay-Balkar + krl Karelian + kro Kru languages + kru Kurukh + kua kj Kuanyama; Kwanyama + kum Kumyk + kur ku Kurdish + kut Kutenai + lad Ladino + lah Lahnda + lam Lamba + lao lo Lao + lat la Latin + lav lv Latvian + lez Lezghian + lim li Limburgan; Limburger; Limburgish + lin ln Lingala + lit lt Lithuanian + lol Mongo + loz Lozi + ltz lb Luxembourgish; Letzeburgesch + lua Luba-Lulua + lub lu Luba-Katanga + lug lg Ganda + lui Luiseno + lun Lunda + luo Luo (Kenya and Tanzania) + lus Lushai + mac/mkd mk Macedonian + mad Madurese + mag Magahi + mah mh Marshallese + mai Maithili + mak Makasar + mal ml Malayalam + man Mandingo + mao/mri mi Maori + map Austronesian languages + mar mr Marathi + mas Masai + may/msa ms Malay + mdf Moksha + mdr Mandar + men Mende + mga Irish, Middle (900-1200) + mic Mi''kmaq; Micmac + min Minangkabau + mis Uncoded languages + mkh Mon-Khmer languages + mlg mg Malagasy + mlt mt Maltese + mnc Manchu + mni Manipuri + mno Manobo languages + moh Mohawk + mon mn Mongolian + mos Mossi + mul Multiple languages + mun Munda languages + mus Creek + mwl Mirandese + mwr Marwari + myn Mayan languages + myv Erzya + nah Nahuatl languages + nai North American Indian languages + nap Neapolitan + nau na Nauru + nav nv Navajo; Navaho + nbl nr Ndebele, South; South Ndebele + nde nd Ndebele, North; North Ndebele + ndo ng Ndonga + nds Low German; Low Saxon; German, Low; Saxon, Low + nep ne Nepali + new Nepal Bhasa; Newari + nia Nias + nic Niger-Kordofanian languages + niu Niuean + nno nn Norwegian Nynorsk; Nynorsk, Norwegian + nob nb Bokmal, Norwegian; Norwegian Bokmal + nog Nogai + non Norse, Old + nor no Norwegian + nqo N''Ko + nso Pedi; Sepedi; Northern Sotho + nub Nubian languages + nwc Classical Newari; Old Newari; Classical Nepal Bhasa + nya ny Chichewa; Chewa; Nyanja + nym Nyamwezi + nyn Nyankole + nyo Nyoro + nzi Nzima + oci oc Occitan (post 1500) + oji oj Ojibwa + ori or Oriya + orm om Oromo + osa Osage + oss os Ossetian; Ossetic + ota Turkish, Ottoman (1500-1928) + oto Otomian languages + paa Papuan languages + pag Pangasinan + pal Pahlavi + pam Pampanga; Kapampangan + pan pa Panjabi; Punjabi + pap Papiamento + pau Palauan + peo Persian, Old (ca.600-400 B.C.) + per/fas fa Persian + phi Philippine languages) + phn Phoenician + pli pi Pali + pol pl Polish + pon Pohnpeian + por pt Portuguese + pra Prakrit languages + pro Provencal, Old (to 1500);Occitan, Old (to 1500) + pus ps Pushto; Pashto + qaa-qtz Reserved for local use + que qu Quechua + raj Rajasthani + rap Rapanui + rar Rarotongan; Cook Islands Maori + roa Romance languages + roh rm Romansh + rom Romany + rum/ron ro Romanian; Moldavian; Moldovan + run rn Rundi + rup Aromanian; Arumanian; Macedo-Romanian + rus ru Russian + sad Sandawe + sag sg Sango + sah Yakut + sai South American Indian languages + sal Salishan languages + sam Samaritan Aramaic + san sa Sanskrit + sas Sasak + sat Santali + scn Sicilian + sco Scots + sel Selkup + sem Semitic languages + sga Irish, Old (to 900) + sgn Sign Languages + shn Shan + sid Sidamo + sin si Sinhala; Sinhalese + sio Siouan languages + sit Sino-Tibetan languages + sla Slavic languages + slo/slk sk Slovak + slv sl Slovenian + sma Southern Sami + sme se Northern Sami + smi Sami languages + smj Lule Sami + smn Inari Sami + smo sm Samoan + sms Skolt Sami + sna sn Shona + snd sd Sindhi + snk Soninke + sog Sogdian + som so Somali + son Songhai languages + sot st Sotho, Southern + spa es Spanish; Castilian + srd sc Sardinian + srn Sranan Tongo + srp sr Serbian + srr Serer + ssa Nilo-Saharan languages + ssw ss Swati + suk Sukuma + sun su Sundanese + sus Susu + sux Sumerian + swa sw Swahili + swe sv Swedish + syc Classical Syriac + syr Syriac + tah ty Tahitian + tai Tai languages + tam ta Tamil + tat tt Tatar + tel te Telugu + tem Timne + ter Tereno + tet Tetum + tgk tg Tajik + tgl tl Tagalog + tha th Thai + tib/bod bo Tibetan + tig Tigre + tir ti Tigrinya + tiv Tiv + tkl Tokelau + tlh Klingon; tlhIngan-Hol + tli Tlingit + tmh Tamashek + tog Tonga (Nyasa) + ton to Tonga (Tonga Islands) + tpi Tok Pisin + tsi Tsimshian + tsn tn Tswana + tso ts Tsonga + tuk tk Turkmen + tum Tumbuka + tup Tupi languages + tur tr Turkish + tut Altaic languages + tvl Tuvalu + twi tw Twi + tyv Tuvinian + udm Udmurt + uga Ugaritic + uig ug Uighur; Uyghur + ukr uk Ukrainian + umb Umbundu + und Undetermined + urd ur Urdu + uzb uz Uzbek + vai Vai + ven ve Venda + vie vi Vietnamese + vol vo Volapuk + vot Votic + wak Wakashan languages + wal Wolaitta; Wolaytta + war Waray + was Washo + wel/cym cy Welsh + wen Sorbian languages + wln wa Walloon + wol wo Wolof + xal Kalmyk; Oirat + xho xh Xhosa + yao Yao + yap Yapese + yid yi Yiddish + yor yo Yoruba + ypk Yupik languages + zap Zapotec + zbl Blissymbols; Blissymbolics; Bliss + zen Zenaga + zha za Zhuang; Chuang + znd Zande languages + zul zu Zulu + zun Zuni + zxx No linguistic content; Not applicable + zza Zaza; Dimili; Dimli; Kirdki; Kirmanjki; Zazaki'! Item was added: + ----- Method: ISOLanguageDefinition class>>readISOLanguagesFrom: (in category 'private') ----- + readISOLanguagesFrom: stream + "ISOLanguageDefinition readISOLanguagesFrom: ISOLanguageDefinition isoLanguages readStream " + | languages language code3 index line | + languages := Dictionary new. + [stream atEnd + or: [(line := stream nextLine readStream) atEnd]] + whileFalse: [ + language := ISOLanguageDefinition new. + code3 := line upTo: Character tab. + (index := code3 indexOf: $/) > 0 + ifTrue: [ + language iso3: (code3 copyFrom: 1 to: index-1). + language iso3Alternate: (code3 copyFrom: index+1 to: code3 size)] + ifFalse: [language iso3: code3]. + language + iso2: (line upTo: Character tab); + language: line upToEnd. + languages at: language iso3 put: language]. + ^languages! Item was added: + ----- Method: ISOLanguageDefinition>>iso2 (in category 'accessing') ----- + iso2 + ^iso2 ifNil: [self iso3]! Item was added: + ----- Method: ISOLanguageDefinition>>iso2: (in category 'initialize') ----- + iso2: aString + iso2 := aString ifEmpty: [nil] ifNotEmpty: [aString]! Item was added: + ----- Method: ISOLanguageDefinition>>iso3 (in category 'accessing') ----- + iso3 + ^iso3 ifNil: ['']! Item was added: + ----- Method: ISOLanguageDefinition>>iso3: (in category 'initialize') ----- + iso3: aString + iso3 := aString ifEmpty: [nil] ifNotEmpty: [aString]! Item was added: + ----- Method: ISOLanguageDefinition>>iso3Alternate (in category 'accessing') ----- + iso3Alternate + ^iso3Alternate ifNil: ['']! Item was added: + ----- Method: ISOLanguageDefinition>>iso3Alternate: (in category 'initialize') ----- + iso3Alternate: aString + iso3Alternate := aString ifEmpty: [nil] ifNotEmpty: [aString]! Item was added: + ----- Method: ISOLanguageDefinition>>language (in category 'accessing') ----- + language + ^language! Item was added: + ----- Method: ISOLanguageDefinition>>language: (in category 'initialize') ----- + language: aString + language := aString! Item was added: + NaturalLanguageTranslator subclass: #InternalTranslator + instanceVariableNames: 'generics' + classVariableNames: 'AllKnownPhrases CachedTranslations' + poolDictionaries: '' + category: 'System-Localization'! + + !InternalTranslator commentStamp: 'tak 10/19/2007 11:12' prior: 0! + An InternalTranslator is used a translation dictionary in a image. + You can use it without any external translation file. + + Structure: + generics Dictionary -- msgid -> msgstr + ! Item was added: + ----- Method: InternalTranslator class>>allKnownPhrases (in category 'private') ----- + allKnownPhrases + ^AllKnownPhrases ifNil: [AllKnownPhrases := Dictionary new: 2051]! Item was added: + ----- Method: InternalTranslator class>>availableLanguageLocaleIDs (in category 'accessing') ----- + availableLanguageLocaleIDs + "Return locale ids for the internal translation dictionary." + "InternalTranslator availableLanguageLocaleIDs" + ^ self cachedTranslations values collect:[:each | each localeID]! Item was added: + ----- Method: InternalTranslator class>>cachedTranslations (in category 'private') ----- + cachedTranslations + "CachedTranslations := nil" + ^CachedTranslations ifNil: [CachedTranslations := Dictionary new]! Item was added: + ----- Method: InternalTranslator class>>directoryForLanguage:country:create: (in category 'private loading') ----- + directoryForLanguage: isoLanguage country: isoCountry create: createDir + "Try to locate the <prefs>/locale/<language>{/<country>} folder. + If createDir is set, create the path down to country or language, depending on wether it's specified.. + Return the directory for country or language depending on specification. + If neither exists, nil" + + "NaturalLanguageTranslator directoryForLanguage: 'es' country: nil create: true" + "NaturalLanguageTranslator directoryForLanguage: 'de' country: 'DE' create: true" + "NaturalLanguageTranslator directoryForLanguage: 'en' country: 'US' create: false" + "NaturalLanguageTranslator directoryForLanguage: 'en' country: nil create: true" + + "If this fails, there is nothing we can do about it here" + | localeDir countryDir languageDir | + localeDir := self localeDirCreate: createDir. + localeDir ifNil: [^nil]. + + isoCountry ifNil: [ + languageDir := localeDir directoryNamed: isoLanguage. + createDir + ifTrue: [languageDir assureExistence]. + ^languageDir exists + ifTrue: [languageDir] + ifFalse: [nil]]. + + countryDir := languageDir directoryNamed: isoCountry. + createDir + ifTrue: [countryDir assureExistence]. + + ^countryDir exists + ifTrue: [countryDir] + ifFalse: [nil]! Item was added: + ----- Method: InternalTranslator class>>directoryForLocaleID:create: (in category 'private loading') ----- + directoryForLocaleID: localeID create: createDir + "Try to locate the <prefs>/locale/<language>{/<country>} folder. + If createDir is set, create the path down to country or language, depending on locale. + Return the directory for country or language depending on locale. + If neither exists, nil" + + "NaturalLanguageTranslator directoryForLanguage: 'de' country: nil readOnly: true" + "NaturalLanguageTranslator directoryForLanguage: 'de' country: 'DE' readOnly: true" + "NaturalLanguageTranslator directoryForLanguage: 'en' country: 'US' readOnly: false" + "NaturalLanguageTranslator directoryForLanguage: 'en' country: nil readOnly: true" + + ^self directoryForLanguage: localeID isoLanguage country: localeID isoCountry create: createDir! Item was added: + ----- Method: InternalTranslator class>>discardAllTranslations (in category 'class initialization') ----- + discardAllTranslations + AllKnownPhrases := nil. + self resetCaches.! Item was added: + ----- Method: InternalTranslator class>>fileReaderServicesForFile:suffix: (in category 'file-services') ----- + fileReaderServicesForFile: fullName suffix: suffix + "Answer the file services associated with given file" + ^ (suffix = self translationSuffix) | (suffix = '*') + ifTrue: [{self serviceMergeLanguageTranslations}] + ifFalse: [#()]! Item was added: + ----- Method: InternalTranslator class>>loadAvailableExternalLocales (in category 'private loading') ----- + loadAvailableExternalLocales + "private - register locales IDs based on the content of the <prefs>/locale/ directory" + | localeDir | + localeDir := self localeDirCreate: false. + localeDir ifNil: [^ #()]. + + localeDir directoryNames + do: [:langDirName | + | langDir | + langDir := localeDir directoryNamed: langDirName. + + (langDir fileNamesMatching: '*.' , self translationSuffix) + ifNotEmpty: [self loadTranslatorForIsoLanguage: langDirName isoCountry: nil]. + + langDir directoryNames + do: [:countryDirName | + | countryDir | + countryDir := langDir directoryNamed: countryDirName. + (countryDir fileNamesMatching: '*.' , self translationSuffix) + ifNotEmpty: [self loadTranslatorForIsoLanguage: langDirName isoCountry: countryDirName] + ] + ]. + ! Item was added: + ----- Method: InternalTranslator class>>loadExternalTranslationsFor: (in category 'private loading') ----- + loadExternalTranslationsFor: translator + "Try to load translations from external external files. + The files are located in the <prefs>/locale/<language>{/<country>} folder. + There can be more than one file for each location, so applications can install their own partial translation tables. All files in the specific folder are loaded." + + | translationDir | + translationDir := self directoryForLocaleID: translator localeID create: false. + translationDir ifNil: [ ^nil ]. + (translationDir fileNamesMatching: '*.' , self translationSuffix) + do: [:fileName | translator loadFromFileNamed: (translationDir fullNameFor: fileName)]! Item was added: + ----- Method: InternalTranslator class>>loadForLocaleIsoString:fromGzippedMimeLiteral: (in category 'file-services') ----- + loadForLocaleIsoString: localeString fromGzippedMimeLiteral: mimeString + "merge the translation from the mime literal." + | stream localeID translator gs rbStream s currentPlatform | + s := Base64MimeConverter mimeDecodeToBytes: mimeString readStream. + s reset. + gs := GZipReadStream on: s. + rbStream := MultiByteBinaryOrTextStream with: gs contents asString. + rbStream converter: UTF8TextConverter new. + rbStream reset. + localeID := LocaleID isoString: localeString. + currentPlatform := Locale currentPlatform. + [Locale + currentPlatform: (Locale localeID: localeID). + stream := ReadStream on: rbStream contents] + ensure: [Locale currentPlatform: currentPlatform]. + translator := self localeID: localeID. + translator loadFromStream: stream. + LanguageEnvironment resetKnownEnvironments! Item was added: + ----- Method: InternalTranslator class>>loadTranslatorForIsoLanguage:isoCountry: (in category 'private loading') ----- + loadTranslatorForIsoLanguage: isoLanguage isoCountry: isoCountry + "private - load the translations from <prefs>/locale/ directory + the procedure is to assure the existence of a translator for the + given language/country and then load the external translations for this translator" + + | translator | + translator := self newLocaleID: (LocaleID isoLanguage: isoLanguage isoCountry: isoCountry). + + self loadExternalTranslationsFor: translator! Item was added: + ----- Method: InternalTranslator class>>localeDirCreate: (in category 'private loading') ----- + localeDirCreate: createDir + "Try to locate the <prefs>/locale/ folder. + If createDir is set, try to create the path. + If it doesn't exist, return nil" + + "If this fails, there is nothing we can do about it here" + | prefDir localeDir | + (createDir not + and: [ExternalSettings preferenceDirectory isNil]) + ifTrue: [^ nil]. + + prefDir := ExternalSettings assuredPreferenceDirectory. + prefDir exists + ifFalse: [^nil]. + + + localeDir := prefDir directoryNamed: 'locale'. + createDir + ifTrue: [localeDir assureExistence]. + ^localeDir exists + ifTrue: [localeDir] + ifFalse: [nil]! Item was added: + ----- Method: InternalTranslator class>>localeID: (in category 'accessing') ----- + localeID: localeID + "For backward compatibility, see NaturalLanguageTranslator >> fileOutHeaderOn:." + ^ self newLocaleID: localeID! Item was added: + ----- Method: InternalTranslator class>>mergeLegacyTranslators (in category 'accessing') ----- + mergeLegacyTranslators + self availableLanguageLocaleIDs + do: [:localeID | (NaturalLanguageTranslator translators includesKey: localeID) + ifFalse: [NaturalLanguageTranslator translators + at: localeID + put: (self newLocaleID: localeID)]]! Item was added: + ----- Method: InternalTranslator class>>mergeTranslationFileNamed: (in category 'file-services') ----- + mergeTranslationFileNamed: fileFullNameString + "merge the translation in the file named fileFullNameString" + + | stream localeID translator | + stream := FileStream readOnlyFileNamed: fileFullNameString. + [localeID := LocaleID isoString: stream localName sansPeriodSuffix. + translator := self localeID: localeID. + translator loadFromStream: stream] + ensure: [stream close]. + LanguageEnvironment resetKnownEnvironments. + + ! Item was added: + ----- Method: InternalTranslator class>>newLocaleID: (in category 'accessing') ----- + newLocaleID: localeID + ^ self cachedTranslations + at: localeID + ifAbsentPut: [self new localeID: localeID]! Item was added: + ----- Method: InternalTranslator class>>privateStartUp (in category 'class initialization') ----- + privateStartUp + self loadAvailableExternalLocales. + self mergeLegacyTranslators. + ! Item was added: + ----- Method: InternalTranslator class>>registerPhrase: (in category 'private') ----- + registerPhrase: phrase + "Using a Dictionary so we can lookup existing string instead of creating needless copies when loading a translation." + self allKnownPhrases at: phrase put: phrase! Item was added: + ----- Method: InternalTranslator class>>registeredPhraseFor: (in category 'private') ----- + registeredPhraseFor: phrase + "Using a Dictionary so we can lookup existing string instead of creating needless copies when loading a translation." + ^self allKnownPhrases at: phrase ifAbsentPut: [phrase]! Item was added: + ----- Method: InternalTranslator class>>removeLocaleID: (in category 'accessing') ----- + removeLocaleID: localeID + "self removeLocaleID: (LocaleID isoString: 'ja-kids')" + self cachedTranslations + removeKey: localeID + ifAbsent: []. + NaturalLanguageTranslator privateStartUp! Item was added: + ----- Method: InternalTranslator class>>resetCaches (in category 'class initialization') ----- + resetCaches + CachedTranslations := nil. + ! Item was added: + ----- Method: InternalTranslator class>>serviceMergeLanguageTranslations (in category 'file-services') ----- + serviceMergeLanguageTranslations + "Answer a service for merging of translation files" + ^ SimpleServiceEntry + provider: self + label: 'merge the translation file' translatedNoop + selector: #mergeTranslationFileNamed: + description: 'merge the translation file into the language named like the file' translatedNoop + buttonLabel: 'merge' translatedNoop! Item was added: + ----- Method: InternalTranslator class>>services (in category 'file-services') ----- + services + "Answer potential file services associated with this class" + ^ {self serviceMergeLanguageTranslations}! Item was added: + ----- Method: InternalTranslator class>>translationSuffix (in category 'private') ----- + translationSuffix + ^'translation'! Item was added: + ----- Method: InternalTranslator>>atRandom (in category 'accessing') ----- + atRandom + + ^ generics atRandom value. + ! Item was added: + ----- Method: InternalTranslator>>checkPhrase:translation: (in category 'translation') ----- + checkPhrase: phrase translation: translation! Item was added: + ----- Method: InternalTranslator>>defaultBackgroundColor (in category 'user interface') ----- + defaultBackgroundColor + "answer the receiver's defaultBackgroundColor for views" + ^ Color cyan! Item was added: + ----- Method: InternalTranslator>>fileOutHeader (in category 'fileIn/fileOut') ----- + fileOutHeader + ^ '''Translation dictionary'''! Item was added: + ----- Method: InternalTranslator>>fileOutHeaderOn: (in category 'user interface') ----- + fileOutHeaderOn: aStream + aStream binary. + UTF8TextConverter writeBOMOn: aStream. + aStream text. + aStream nextChunkPut: self fileOutHeader; + cr. + aStream timeStamp; cr. + aStream nextPut: $!!. + aStream nextChunkPut: '(' , self class name , ' localeID: ' , id storeString , ')'. + aStream cr! Item was added: + ----- Method: InternalTranslator>>fileOutHeaderOn:withBOM: (in category 'user interface') ----- + fileOutHeaderOn: aStream withBOM: bomFlag + bomFlag ifTrue: [ + aStream binary. + UTF8TextConverter writeBOMOn: aStream. + aStream text. + ]. + aStream nextChunkPut: self fileOutHeader; + cr. + aStream timeStamp; cr. + aStream nextPut: $!!. + aStream nextChunkPut: '(' , self class name , ' localeID: ' , id storeString , ')'. + aStream cr! Item was added: + ----- Method: InternalTranslator>>fileOutOn: (in category 'fileIn/fileOut') ----- + fileOutOn: aStream + "self current fileOutOn: Transcript. Transcript endEntry" + self fileOutOn: aStream keys: nil withBOM: true. + ! Item was added: + ----- Method: InternalTranslator>>fileOutOn:keys:withBOM: (in category 'fileIn/fileOut') ----- + fileOutOn: aStream keys: keys withBOM: bomFlag + "self current fileOutOn: Transcript. Transcript endEntry" + self fileOutHeaderOn: aStream withBOM: bomFlag. + (keys + ifNil: [generics keys asSortedCollection]) + do: [:key | self + nextChunkPut: (generics associationAt: key) + on: aStream]. + keys + ifNil: [self untranslated + do: [:each | self nextChunkPut: each -> '' on: aStream]]. + aStream nextPut: $!!; + cr! Item was added: + ----- Method: InternalTranslator>>generics (in category 'private') ----- + generics + ^generics ifNil: [generics := Dictionary new]! Item was added: + ----- Method: InternalTranslator>>isDomainLoaded: (in category 'accessing') ----- + isDomainLoaded: aDomainName + ^true + ! Item was added: + ----- Method: InternalTranslator>>loadFromFileNamed: (in category 'private store-retrieve') ----- + loadFromFileNamed: fileNameString + "Load translations from an external file" + + | stream | + [stream := FileStream readOnlyFileNamed: fileNameString. + self loadFromStream: stream] + ensure: [stream close]. + self changed: #translations. + self changed: #untranslated. + ! Item was added: + ----- Method: InternalTranslator>>loadFromRefStream: (in category 'private store-retrieve') ----- + loadFromRefStream: stream + "Load translations from an external file" + | loadedArray refStream | + refStream := ReferenceStream on: stream. + [loadedArray := refStream next] + ensure: [refStream close]. + self processExternalObject: loadedArray ! Item was added: + ----- Method: InternalTranslator>>loadFromStream: (in category 'private store-retrieve') ----- + loadFromStream: stream + "Load translations from an external file" + | header isFileIn | + header := '''Translation dictionary'''. + isFileIn := (stream next: header size) + = header. + stream reset. + isFileIn + ifTrue: [stream fileInAnnouncing: 'Loading ' translated, stream localName] + ifFalse: [self loadFromRefStream: stream]! Item was added: + ----- Method: InternalTranslator>>mergeTranslations: (in category 'private store-retrieve') ----- + mergeTranslations: newTranslations + "Merge a new set of translations into the exiting table. + Overwrites existing entries." + + newTranslations keysAndValuesDo: [:key :value | + self rawPhrase: (self class registeredPhraseFor: key) translation: value]. + self changed: #translations. + self changed: #untranslated.! Item was added: + ----- Method: InternalTranslator>>nextChunkPut:on: (in category 'fileIn/fileOut') ----- + nextChunkPut: anObject on: aStream + | i remainder terminator | + terminator := $!!. + remainder := anObject storeString. + [(i := remainder indexOf: terminator) = 0] + whileFalse: [aStream + nextPutAll: (remainder copyFrom: 1 to: i). + aStream nextPut: terminator. + "double imbedded terminators" + remainder := remainder copyFrom: i + 1 to: remainder size]. + aStream nextPutAll: remainder. + aStream nextPut: terminator; cr.! Item was added: + ----- Method: InternalTranslator>>phrase:translation: (in category 'translation') ----- + phrase: phraseString translation: translationString + self generics at: phraseString put: translationString asString. + self changed: #translations. + self changed: #untranslated.! Item was added: + ----- Method: InternalTranslator>>processExternalObject: (in category 'private store-retrieve') ----- + processExternalObject: anArray + "pivate - process the external object" + + "new format -> {translations. untranslated}" + + anArray second do: [:each | self class registerPhrase: each]. + + self mergeTranslations: anArray first! Item was added: + ----- Method: InternalTranslator>>rawPhrase:translation: (in category 'translation') ----- + rawPhrase: phraseString translation: translationString + self generics at: phraseString put: translationString asString. + ! Item was added: + ----- Method: InternalTranslator>>rawRemoveUntranslated: (in category 'translation') ----- + rawRemoveUntranslated: untranslated + + self class allKnownPhrases removeKey: untranslated ifAbsent: []. + self changed: #untranslated.! Item was added: + ----- Method: InternalTranslator>>removeTranslationFor: (in category 'translation') ----- + removeTranslationFor: phraseString + self generics removeKey: phraseString ifAbsent: []. + self changed: #translations. + self changed: #untranslated.! Item was added: + ----- Method: InternalTranslator>>removeUntranslated: (in category 'translation') ----- + removeUntranslated: untranslated + + self class allKnownPhrases removeKey: untranslated ifAbsent: []. + ! Item was added: + ----- Method: InternalTranslator>>saveToFileNamed: (in category 'private store-retrieve') ----- + saveToFileNamed: fileNameString + "save the receiver's translations to a file named fileNameString" + | stream | + "Set true if you need to save as binary" + false + ifTrue: [stream := ReferenceStream fileNamed: fileNameString. + stream nextPut: {self translations. self untranslated}. + stream close. + ^ self]. + stream := FileStream fileNamed: fileNameString. + [self fileOutOn: stream] + ensure: [stream close]! Item was added: + ----- Method: InternalTranslator>>scanFrom: (in category 'fileIn/fileOut') ----- + scanFrom: aStream + "Read a definition of dictionary. + Make sure current locale corresponds my locale id" + | aString newTranslations assoc currentPlatform | + newTranslations := Dictionary new. + currentPlatform := Locale currentPlatform. + [Locale + currentPlatform: (Locale localeID: id). + [aString := aStream nextChunk withSqueakLineEndings. + aString size > 0] + whileTrue: [assoc := Compiler evaluate: aString. + assoc value = '' + ifTrue: [self class registerPhrase: assoc key] + ifFalse: [newTranslations add: assoc]]] + ensure: [Locale currentPlatform: currentPlatform]. + self mergeTranslations: newTranslations! Item was added: + ----- Method: InternalTranslator>>translate:inDomain: (in category 'translation') ----- + translate: aString inDomain: aDomainName + | translator | + ^ self generics + at: aString + ifAbsent: [self localeID hasParent + ifTrue: [translator := self class cachedTranslations + at: self localeID parent + ifAbsent: [^ aString]. + translator translate: aString inDomain: aDomainName] + ifFalse: [aString]]! Item was added: + ----- Method: InternalTranslator>>translations (in category 'accessing') ----- + translations + ^self generics! Item was added: + ----- Method: InternalTranslator>>untranslated (in category 'accessing') ----- + untranslated + | translations | + translations := self translations. + ^self class allKnownPhrases reject: [:each | translations includesKey: each]! Item was added: + Object subclass: #Locale + instanceVariableNames: 'id shortDate longDate time decimalSymbol digitGrouping currencySymbol currencyNotation measurement offsetLocalToUTC offsetVMToUTC dstActive' + classVariableNames: 'Current CurrentPlatform KnownLocales LanguageSymbols LocaleChangeListeners PlatformEncodings Previous' + poolDictionaries: '' + category: 'System-Localization'! + + !Locale commentStamp: '<historical>' prior: 0! + Main comment stating the purpose of this class and relevant relationship to other classes. + + + +
http://www.w3.org/WAI/ER/IG/ert/iso639.htm
+
http://www.oasis-open.org/cover/iso639a.html
+ See also +
http://oss.software.ibm.com/cvs/icu/~checkout~/icuhtml/design/language_code…
+
http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.10
+ + ISO 3166 +
http://mitglied.lycos.de/buran/knowhow/codes/locales/
+ ! Item was added: + ----- Method: Locale class>>addLocalChangedListener: (in category 'notification') ----- + addLocalChangedListener: anObjectOrClass + self localeChangedListeners add: anObjectOrClass! Item was added: + ----- Method: Locale class>>clipboadInterpreter (in category 'accessing') ----- + clipboadInterpreter + ^NoConversionClipboardInterpreter new! Item was added: + ----- Method: Locale class>>current (in category 'accessing') ----- + current + "Current := nil" + Current ifNil: [ + Current := self determineCurrentLocale. + "Transcript show: 'Current locale: ' , Current localeID asString; cr"]. + ^Current! Item was added: + ----- Method: Locale class>>currentPlatform (in category 'accessing') ----- + currentPlatform + "CurrentPlatform := nil" + CurrentPlatform ifNil: [CurrentPlatform := self determineCurrentLocale]. + ^CurrentPlatform! Item was added: + ----- Method: Locale class>>currentPlatform: (in category 'accessing') ----- + currentPlatform: locale + CurrentPlatform := locale. + LanguageEnvironment startUp. + ! Item was added: + ----- Method: Locale class>>currentPlatform:during: (in category 'accessing') ----- + currentPlatform: locale during: aBlock + "Alter current language platform during a block" + | backupPlatform | + backupPlatform := self currentPlatform. + [self currentPlatform: locale. + aBlock value] + ensure: [self currentPlatform: backupPlatform]! Item was added: + ----- Method: Locale class>>defaultEncodingName: (in category 'platform specific') ----- + defaultEncodingName: languageSymbol + | encodings platformName osVersion | + platformName := SmalltalkImage current platformName. + osVersion := SmalltalkImage current getSystemAttribute: 1002. + encodings := self platformEncodings at: languageSymbol + ifAbsent: [self platformEncodings at: #default]. + encodings at: platformName ifPresent: [:encoding | ^encoding]. + encodings at: platformName , ' ' , osVersion + ifPresent: [:encoding | ^encoding]. + ^encodings at: #default! Item was added: + ----- Method: Locale class>>defaultInputInterpreter (in category 'platform specific') ----- + defaultInputInterpreter + | platformName osVersion | + platformName := SmalltalkImage current platformName. + osVersion := SmalltalkImage current getSystemAttribute: 1002. + (platformName = 'Win32' and: [osVersion = 'CE']) + ifTrue: [^NoInputInterpreter new]. + platformName = 'Win32' ifTrue: [^MacRomanInputInterpreter new]. + ^NoInputInterpreter new! Item was added: + ----- Method: Locale class>>determineCurrentLocale (in category 'private') ----- + determineCurrentLocale + "For now just return the default locale. + A smarter way would be to determine the current platforms default locale." + "Locale determineCurrentLocale" + + ^self new determineLocale! Item was added: + ----- Method: Locale class>>initKnownLocales (in category 'private') ----- + initKnownLocales + | locales | + locales := Dictionary new. + + "Init the locales for which we have translations" + InternalTranslator availableLanguageLocaleIDs do: [:id | + locales at: id put: (Locale new localeID: id)]. + ^locales! Item was added: + ----- Method: Locale class>>initialize (in category 'class initialization') ----- + initialize + "Locale initialize" + + Smalltalk addToStartUpList: Locale. + Preferences addPreference: #useLocale + categories: #('general') default: false + balloonHelp: 'Use the system locale to set the system language etc at startup'.! Item was added: + ----- Method: Locale class>>initializePlatformEncodings (in category 'class initialization') ----- + initializePlatformEncodings + "Locale initializePlatformEncodings" + + | platform | + PlatformEncodings isNil ifTrue: [ PlatformEncodings := Dictionary new ]. + + platform := PlatformEncodings at: 'default' ifAbsentPut: Dictionary new. + platform + at: 'default' put: 'iso8859-1'; + at: 'Win32 CE' put: 'utf-8'; + yourself. + + platform := PlatformEncodings at: 'ja' ifAbsentPut: Dictionary new. + platform + at: 'default' put: 'shift-jis'; + at: 'unix' put: 'euc-jp'; + at: 'Win32 CE' put: 'utf-8'; + yourself. + + platform := PlatformEncodings at: 'ko' ifAbsentPut: Dictionary new. + platform + at: 'default' put: 'euc-kr'; + at: 'Win32 CE' put: 'utf-8'; + yourself. + + platform := PlatformEncodings at: 'zh' ifAbsentPut: Dictionary new. + platform + at: 'default' put: 'gb2312'; + at: 'unix' put: 'euc-cn'; + at: 'Win32 CE' put: 'utf-8'; + yourself. + ! Item was added: + ----- Method: Locale class>>isoLanguage: (in category 'accessing') ----- + isoLanguage: isoLanguage + ^self isoLanguage: isoLanguage isoCountry: nil! Item was added: + ----- Method: Locale class>>isoLanguage:isoCountry: (in category 'accessing') ----- + isoLanguage: isoLanguage isoCountry: isoCountry + ^self localeID: (LocaleID isoLanguage: isoLanguage isoCountry: isoCountry)! Item was added: + ----- Method: Locale class>>isoLocale: (in category 'accessing') ----- + isoLocale: aString + ! Item was added: + ----- Method: Locale class>>knownLocales (in category 'private') ----- + knownLocales + "KnownLocales := nil" + ^KnownLocales ifNil: [KnownLocales := self initKnownLocales]! Item was added: + ----- Method: Locale class>>languageSymbol: (in category 'accessing') ----- + languageSymbol: languageSymbol + "Locale languageSymbol: #Deutsch" + + ^self isoLanguage: (LanguageSymbols at: languageSymbol)! Item was added: + ----- Method: Locale class>>localeChanged (in category 'notification') ----- + localeChanged + + #(#ParagraphEditor #BitEditor #FormEditor #StandardSystemController ) + do: [:key | Smalltalk + at: key + ifPresent: [:class | class initialize]]. + PartsBin localeChanged. + Project localeChanged. + PaintBoxMorph localeChanged. + ColorPickerMorph localeChanged. + Preferences localeChanged! Item was added: + ----- Method: Locale class>>localeChangedGently (in category 'notification') ----- + localeChangedGently + + #(#ParagraphEditor #BitEditor #FormEditor #StandardSystemController ) + do: [:key | Smalltalk + at: key + ifPresent: [:class | class initialize]]. + PartsBin localeChangedGently. + Project localeChangedGently. + PaintBoxMorph localeChangedGently. + ColorPickerMorph localeChangedGently. + Preferences localeChangedGently. + ! Item was added: + ----- Method: Locale class>>localeChangedListeners (in category 'notification') ----- + localeChangedListeners + ^LocaleChangeListeners ifNil: [LocaleChangeListeners := OrderedCollection new]! Item was added: + ----- Method: Locale class>>localeID: (in category 'accessing') ----- + localeID: id + ^self knownLocales at: id ifAbsentPut: [Locale new localeID: id]! Item was added: + ----- Method: Locale class>>migrateSystem (in category 'private') ----- + migrateSystem + "Locale migrateSystem" + "Do all the necessary operations to switch to the new Locale environment." + + LocaleChangeListeners := nil. + self + addLocalChangedListener: HandMorph; + addLocalChangedListener: Clipboard; + addLocalChangedListener: Vocabulary; + addLocalChangedListener: PartsBin; + addLocalChangedListener: Project; + addLocalChangedListener: PaintBoxMorph; + yourself! Item was added: + ----- Method: Locale class>>platformEncodings (in category 'class initialization') ----- + platformEncodings + PlatformEncodings isEmptyOrNil ifTrue: [ self initializePlatformEncodings ]. + ^PlatformEncodings + ! Item was added: + ----- Method: Locale class>>previous (in category 'accessing') ----- + previous + + ^ Previous + ! Item was added: + ----- Method: Locale class>>resetKnownLocales (in category 'private') ----- + resetKnownLocales + + KnownLocales := nil + ! Item was added: + ----- Method: Locale class>>startUp: (in category 'system startUp') ----- + startUp: resuming + | newID | + resuming ifFalse: [^self]. + (Preferences valueOfFlag: #useLocale) + ifTrue: [ + DateAndTime localTimeZone: (TimeZone + offset: (Duration minutes: Locale current offsetLocalToUTC) + name: 'Local Time' + abbreviation: 'LT'). + newID := self current determineLocaleID. + newID ~= LocaleID current + ifTrue: [self switchAndInstallFontToID: newID gently: true]]! Item was added: + ----- Method: Locale class>>stringForLanguageNameIs: (in category 'accessing') ----- + stringForLanguageNameIs: localeID + "Answer a string for a menu determining whether the given + symbol is the project's natural language" + ^ (self current localeID = localeID + ifTrue: ['<yes>'] + ifFalse: ['<no>']) + , localeID displayName! Item was added: + ----- Method: Locale class>>switchAndInstallFontToID: (in category 'accessing') ----- + switchAndInstallFontToID: localeID + "Locale switchAndInstallFontToID: (LocaleID isoLanguage: 'de')" + | locale | + locale := Locale localeID: localeID. + locale languageEnvironment isFontAvailable + ifFalse: [(self confirm: 'This language needs additional fonts. + Do you want to install the fonts?' translated) + ifTrue: [locale languageEnvironment installFont] + ifFalse: [^ self]]. + self + switchTo: locale! Item was added: + ----- Method: Locale class>>switchAndInstallFontToID:gently: (in category 'accessing') ----- + switchAndInstallFontToID: localeID gently: gentlyFlag + | locale result env envFound ret fontInImage menu | + "Logic: + - not in Rainbow, + - if the font is in the image, use the font. + - if the font is not in the image, + - ask to choose: + - load font + - try to enable pango, if pango is available + - or cancel. + - if the previous step fails, notify the user that you cannot switch to the language. + Details: + - how to check non-pango font is available: + - if the language environment for the locale doesn't exist, the font is not available. + - if font loading fails, it is not available. + - how to check if the language environment doesn't exist: + - if the locales languageEnvironment is Latin1 but the locale isn't it is not available. + " + locale := Locale localeID: localeID. + env := locale languageEnvironment. + result := true. + envFound := (Latin1Environment supportedLanguages includes: locale isoLanguage) or: [(env isMemberOf: Latin1Environment) not]. + fontInImage := envFound and: [env isFontAvailable]. + fontInImage ifFalse: [ + menu := MenuMorph new. + menu defaultTarget: menu. + envFound ifTrue: [menu add: 'load font' translated selector: #modalSelection: argument: #loadFont]. + menu add: 'cancel' translated selector: #modalSelection: argument: #cancel. + menu addTitle: 'This language needs additional fonts. + Do you want to install the fonts?' translated. + ret := menu invokeModal. + ret = #loadFont ifTrue: [result := env installFont. result ifTrue: [StrikeFont setupDefaultFallbackTextStyle]]. + (ret ~~ #loadFont and: [ret ~~ #enablePango]) ifTrue: [result := false]]. + result ifFalse: [self inform: 'Cannot load additional fonts' translated] ifTrue: [self switchTo: locale gently: gentlyFlag]. + ! Item was added: + ----- Method: Locale class>>switchTo: (in category 'accessing') ----- + switchTo: locale + self switchTo: locale gently: false. + ! Item was added: + ----- Method: Locale class>>switchTo:gently: (in category 'accessing') ----- + switchTo: locale gently: gentlyFlag + "Locale switchTo: (Locale isoLanguage: 'de')" + | availableID | + availableID := (NaturalLanguageTranslator availableForLocaleID: locale localeID) localeID. + Current localeID = availableID + ifFalse: [Previous := Current. + CurrentPlatform := Current := Locale localeID: availableID. + NaturalLanguageTranslator localeChanged. + gentlyFlag ifTrue: [self localeChangedGently] ifFalse: [self localeChanged]]! Item was added: + ----- Method: Locale class>>switchToID: (in category 'accessing') ----- + switchToID: localeID + "Locale switchToID: (LocaleID isoLanguage: 'de') " + + self switchTo: (Locale localeID: localeID)! Item was added: + ----- Method: Locale>>determineLocale (in category 'accessing') ----- + determineLocale + self localeID: self determineLocaleID! Item was added: + ----- Method: Locale>>determineLocaleID (in category 'accessing') ----- + determineLocaleID + "Locale current determineLocaleID" + | isoLang isoCountry | + isoLang := self fetchISO2Language + ifNil: [^ self localeID]. + isoCountry := self fetchISOCountry + ifNil: [^ LocaleID isoLanguage: isoLang]. + ^ LocaleID isoLanguage: isoLang isoCountry: isoCountry! Item was added: + ----- Method: Locale>>fetchISO2Language (in category 'private') ----- + fetchISO2Language + "Locale current fetchISO2Language" + | lang isoLang | + lang := self primLanguage. + lang ifNil: [^nil]. + lang := lang copyUpTo: 0 asCharacter. + lang size == 2 + ifTrue: [^lang]. + isoLang := ISOLanguageDefinition iso3LanguageDefinition: lang. + ^isoLang + ifNil: [nil] + ifNotNil: [isoLang iso2]! Item was added: + ----- Method: Locale>>fetchISOCountry (in category 'private') ----- + fetchISOCountry + "Locale current fetchISOCountry" + | countryCode | + countryCode := self primCountry + ifNil: [^ nil]. + ^ countryCode copyUpTo: 0 asCharacter! Item was added: + ----- Method: Locale>>iconForNativeLanguage (in category 'accessing') ----- + iconForNativeLanguage + + ^ (NaturalLanguageFormTranslator localeID: self localeID) translate: 'LanguageNameInNativeLanguage'. + ! Item was added: + ----- Method: Locale>>isoCountry (in category 'accessing') ----- + isoCountry + ^self localeID isoCountry! Item was added: + ----- Method: Locale>>isoLanguage (in category 'accessing') ----- + isoLanguage + ^self localeID isoLanguage! Item was added: + ----- Method: Locale>>isoLocale (in category 'accessing') ----- + isoLocale + "<language>-<country>" + ^self isoCountry + ifNil: [self isoLanguage] + ifNotNil: [self isoLanguage , '-' , self isoCountry]! Item was added: + ----- Method: Locale>>languageEnvironment (in category 'accessing') ----- + languageEnvironment + ^LanguageEnvironment localeID: self localeID! Item was added: + ----- Method: Locale>>localeID (in category 'accessing') ----- + localeID + ^id! Item was added: + ----- Method: Locale>>localeID: (in category 'accessing') ----- + localeID: anID + id := anID! Item was added: + ----- Method: Locale>>offsetLocalToUTC (in category 'accessing') ----- + offsetLocalToUTC + ^self primTimezone! Item was added: + ----- Method: Locale>>primCountry (in category 'system primitives') ----- + primCountry + "Returns string with country tag according to ISO 639" + <primitive: 'primitiveCountry' module: 'LocalePlugin'> + ^'US'! Item was added: + ----- Method: Locale>>primCurrencyNotation (in category 'system primitives') ----- + primCurrencyNotation + "Returns boolean if symbol is pre- (true) or post-fix (false)" + <primitive: 'primitiveCurrencyNotation' module: 'LocalePlugin'> + ^true! Item was added: + ----- Method: Locale>>primCurrencySymbol (in category 'system primitives') ----- + primCurrencySymbol + "Returns string with currency symbol" + <primitive: 'primitiveCurrencySymbol' module:'LocalePlugin'> + ^'$'! Item was added: + ----- Method: Locale>>primDST (in category 'system primitives') ----- + primDST + "Returns boolean if DST (daylight saving time) is active or not" + <primitive:'primitiveDaylightSavings' module: 'LocalePlugin'> + ^false! Item was added: + ----- Method: Locale>>primDecimalSymbol (in category 'system primitives') ----- + primDecimalSymbol + "Returns string with e.g. '.' or ','" + <primitive:'primitiveDecimalSymbol' module: 'LocalePlugin'> + ^'.'! Item was added: + ----- Method: Locale>>primDigitGrouping (in category 'system primitives') ----- + primDigitGrouping + "Returns string with e.g. '.' or ',' (thousands etc)" + <primitive:'primitiveDigitGroupingSymbol' module: 'LocalePlugin'> + ^','! Item was added: + ----- Method: Locale>>primLanguage (in category 'system primitives') ----- + primLanguage + "returns string with language tag according to ISO 639" + <primitive:'primitiveLanguage' module: 'LocalePlugin'> + ^'en' + + ! Item was added: + ----- Method: Locale>>primLongDateFormat (in category 'system primitives') ----- + primLongDateFormat + "Returns the long date format + d day, m month, y year, + double symbol is null padded, single not padded (m=6, mm=06) + dddd weekday + mmmm month name" + <primitive:'primitiveLongDateFormat' module: 'LocalePlugin'> + ^'dddd, mmmm d, yyyy'! Item was added: + ----- Method: Locale>>primMeasurement (in category 'system primitives') ----- + primMeasurement + "Returns boolean denoting metric(true) or imperial(false)." + <primitive:'primitiveMeasurementMetric' module: 'LocalePlugin'> + ^true + ! Item was added: + ----- Method: Locale>>primShortDateFormat (in category 'system primitives') ----- + primShortDateFormat + "Returns the short date format + d day, m month, y year, + double symbol is null padded, single not padded (m=6, mm=06) + dddd weekday + mmmm month name" + <primitive:'primitiveShortDateFormat' module: 'LocalePlugin'> + ^'m/d/yy'! Item was added: + ----- Method: Locale>>primTimeFormat (in category 'system primitives') ----- + primTimeFormat + "Returns string time format + Format is made up of + h hour (h 12, H 24), m minute, s seconds, x (am/pm String) + double symbol is null padded, single not padded (h=6, hh=06)" + <primitive:'primitiveTimeFormat' module: 'LocalePlugin'> + ^'h:mmx'! Item was added: + ----- Method: Locale>>primTimezone (in category 'system primitives') ----- + primTimezone + "The offset from UTC in minutes, with positive offsets being towards the east. + (San Francisco is in UTC -07*60 and Paris is in UTC +02*60 when daylight savings is in effect)." + <primitive:'primitiveTimezoneOffset' module: 'LocalePlugin'> + ^0! Item was added: + ----- Method: Locale>>primVMOffsetToUTC (in category 'system primitives') ----- + primVMOffsetToUTC + "Returns the offset in minutes between the VM and UTC. + If the VM does not support UTC times, this is 0. + Also gives us backward compatibility with old VMs as the primitive will fail and we then can return 0." + <primitive:'primitiveVMOffsetToUTC' module: 'LocalePlugin'> + ^0! Item was added: + ----- Method: Locale>>printOn: (in category 'accessing') ----- + printOn: aStream + super printOn: aStream. + aStream nextPutAll: '(' , id printString , ')'! Item was added: + Object subclass: #LocaleID + instanceVariableNames: 'isoLanguage isoCountry' + classVariableNames: '' + poolDictionaries: '' + category: 'System-Localization'! Item was added: + ----- Method: LocaleID class>>current (in category 'accessing') ----- + current + ^Locale current localeID! Item was added: + ----- Method: LocaleID class>>isoLanguage: (in category 'instance creation') ----- + isoLanguage: langString + ^self isoLanguage: langString isoCountry: nil! Item was added: + ----- Method: LocaleID class>>isoLanguage:isoCountry: (in category 'instance creation') ----- + isoLanguage: langString isoCountry: countryStringOrNil + ^self new isoLanguage: langString isoCountry: countryStringOrNil! Item was added: + ----- Method: LocaleID class>>isoString: (in category 'instance creation') ----- + isoString: isoString + "Parse the isoString (<language>-<country>) into its components and return the matching LocaleID" + "LocaleID isoString: 'en' " + "LocaleID isoString: 'en-us' " + + | parts language country | + parts := isoString findTokens: #($- ). + language := parts first. + parts size > 1 + ifTrue: [country := parts second]. + ^self isoLanguage: language isoCountry: country! Item was added: + ----- Method: LocaleID class>>posixName: (in category 'instance creation') ----- + posixName: aString + ^ self + isoString: (aString copyReplaceAll: ':=' with: '-')! Item was added: + ----- Method: LocaleID class>>previous (in category 'accessing') ----- + previous + ^Locale previous localeID! Item was added: + ----- Method: LocaleID>>= (in category 'comparing') ----- + = anotherObject + self class == anotherObject class + ifFalse: [^false]. + ^self isoLanguage = anotherObject isoLanguage + and: [self isoCountry = anotherObject isoCountry]! Item was added: + ----- Method: LocaleID>>displayCountry (in category 'accessing') ----- + displayCountry + ^(ISOLanguageDefinition iso2Countries at: self isoCountry asUppercase ifAbsent: [ self isoCountry ]) ! Item was added: + ----- Method: LocaleID>>displayLanguage (in category 'accessing') ----- + displayLanguage + | language | + language := (ISOLanguageDefinition iso2LanguageTable + at: self isoLanguage + ifAbsent: [^ self isoLanguage]) language. + ^ self isoCountry + ifNil: [language] + ifNotNil: [language , ' (' , self displayCountry , ')']! Item was added: + ----- Method: LocaleID>>displayName (in category 'accessing') ----- + displayName + "Answer a proper name to represent the receiver in GUI. + + The wording is provided by translations of the magic value + '<language display name>'. + + 'English' -> 'English' + 'German' -> 'Deutsch' + " + | magicPhrase translatedMagicPhrase | + magicPhrase := '<language display name>'. + translatedMagicPhrase := GetTextTranslator translateWithoutLoading: magicPhrase toLocaleID: self. + ^ translatedMagicPhrase = magicPhrase + ifTrue: [self displayLanguage] + ifFalse: [translatedMagicPhrase]! Item was added: + ----- Method: LocaleID>>hasParent (in category 'testing') ----- + hasParent + ^self isoCountry notNil! Item was added: + ----- Method: LocaleID>>hash (in category 'comparing') ----- + hash + ^self isoLanguage hash bitXor: self isoCountry hash! Item was added: + ----- Method: LocaleID>>isoCountry (in category 'accessing') ----- + isoCountry + ^isoCountry! Item was added: + ----- Method: LocaleID>>isoLanguage (in category 'accessing') ----- + isoLanguage + ^isoLanguage! Item was added: + ----- Method: LocaleID>>isoLanguage:isoCountry: (in category 'initialize') ----- + isoLanguage: langString isoCountry: countryStringOrNil + isoLanguage := langString. + isoCountry := countryStringOrNil! Item was added: + ----- Method: LocaleID>>isoString (in category 'accessing') ----- + isoString + ^self asString! Item was added: + ----- Method: LocaleID>>parent (in category 'accessing') ----- + parent + ^self class isoLanguage: self isoLanguage! Item was added: + ----- Method: LocaleID>>posixName (in category 'printing') ----- + posixName + "(LocaleID isoString: 'es-MX') posixName" + "(LocaleID isoString: 'es') posixName" + "language[_territory]" + ^ self isoCountry + ifNil: [self isoLanguage] + ifNotNil: [self isoLanguage , ':=' , self isoCountry]! Item was added: + ----- Method: LocaleID>>printOn: (in category 'printing') ----- + printOn: stream + "<language>-<country>" + stream nextPutAll: self isoLanguage. + self isoCountry + ifNotNil: [stream nextPut: $-; nextPutAll: self isoCountry]! Item was added: + ----- Method: LocaleID>>storeOn: (in category 'printing') ----- + storeOn: aStream + aStream nextPut: $(. + aStream nextPutAll: self class name. + aStream nextPutAll: ' isoString: '. + aStream nextPutAll: '''' , self printString , ''''. + aStream nextPut: $). + ! Item was added: + ----- Method: LocaleID>>translator (in category 'accessing') ----- + translator + ^ InternalTranslator localeID: self ! Item was added: + Object subclass: #NaturalLanguageFormTranslator + instanceVariableNames: 'id generics' + classVariableNames: 'CachedTranslations' + poolDictionaries: '' + category: 'System-Localization'! Item was added: + ----- Method: NaturalLanguageFormTranslator class>>bitmapForJapanese (in category 'as yet unclassified') ----- + bitmapForJapanese + + ^ (Form + extent: 54@17 + depth: 16 + fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65536 0 1 65537 65537 65537 65537 0 0 0 0 1 0 0 0 0 65537 65537 1 65537 65537 65536 1 0 0 0 1 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 65536 0 0 65536 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 1 65537 65537 65536 1 0 0 0 1 0 0 65536 0 0 1 0 0 0 1 0 1 65537 65537 65537 65537 65537 65537 0 0 0 1 65537 65537 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 65537 65536 0 0 0 65537 65537 0 65536 1 0 0 0 65536 1 0 0 0 1 65537 65537 65537 65537 0 0 0 1 1 1 0 0 0 0 0 0 65536 1 0 0 0 65536 1 0 0 0 1 0 0 0 1 0 0 0 1 1 1 0 0 0 65537 65537 65537 65537 65537 65537 0 0 65536 1 0 0 0 1 0 0 0 1 0 0 0 65536 1 0 65536 0 0 0 0 0 0 0 0 0 0 65536 1 0 0 0 1 0 0 0 1 0 0 1 0 1 0 1 0 0 65537 65537 1 65537 65537 65536 0 0 65536 1 0 0 0 1 0 0 0 1 0 0 65536 65537 65537 65537 65536 65536 0 65536 1 1 0 0 65536 0 0 65536 0 65536 0 0 1 0 0 0 1 0 1 0 0 1 0 0 1 0 65536 1 1 0 0 65536 0 1 0 0 65536 0 0 1 65537 65537 65537 65537 0 0 0 0 1 0 0 0 0 65537 65537 1 65537 65537 65536 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 65536 0 0 0 65536 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0) + offset: 0@0)! Item was added: + ----- Method: NaturalLanguageFormTranslator class>>cachedTranslations (in category 'accessing') ----- + cachedTranslations + "CachedTranslations := nil" + ^CachedTranslations ifNil: [CachedTranslations := Dictionary new]! Item was added: + ----- Method: NaturalLanguageFormTranslator class>>cleanUp (in category 'class initialization') ----- + cleanUp + "Flush caches" + + CachedTranslations := nil! Item was added: + ----- Method: NaturalLanguageFormTranslator class>>initializeJapaneseBitmap (in category 'as yet unclassified') ----- + initializeJapaneseBitmap + + (self localeID: (LocaleID isoString: 'ja')) name: 'LanguageNameInNativeLanguage' form: self bitmapForJapanese. + ! Item was added: + ----- Method: NaturalLanguageFormTranslator class>>isoLanguage: (in category 'accessing') ----- + isoLanguage: isoLanguage + "Return the generic language translator as there is no information about the country code" + + ^self isoLanguage: isoLanguage isoCountry: nil! Item was added: + ----- Method: NaturalLanguageFormTranslator class>>isoLanguage:isoCountry: (in category 'accessing') ----- + isoLanguage: isoLanguage isoCountry: isoCountry + ^self localeID: (LocaleID isoLanguage: isoLanguage isoCountry: isoCountry)! Item was added: + ----- Method: NaturalLanguageFormTranslator class>>loadFormsFrom: (in category 'i/o') ----- + loadFormsFrom: aStream + + | rr pair inst | + rr := ReferenceStream on: aStream. + pair := rr next. + inst := self localeID: (LocaleID isoString: pair first). + pair second associationsDo: [:assoc | + inst name: assoc key form: assoc value. + ]. + ^ inst. + ! Item was added: + ----- Method: NaturalLanguageFormTranslator class>>localeID: (in category 'accessing') ----- + localeID: localeID + ^ self cachedTranslations + at: localeID + ifAbsentPut: [self new localeID: localeID]! Item was added: + ----- Method: NaturalLanguageFormTranslator>>generics (in category 'accessing') ----- + generics + ^generics ifNil: [generics := Dictionary new]! Item was added: + ----- Method: NaturalLanguageFormTranslator>>localeID (in category 'accessing') ----- + localeID + ^id! Item was added: + ----- Method: NaturalLanguageFormTranslator>>localeID: (in category 'accessing') ----- + localeID: anID + id := anID! Item was added: + ----- Method: NaturalLanguageFormTranslator>>name:form: (in category 'accessing') ----- + name: formName form: translatedForm + self generics at: formName put: translatedForm. + ! Item was added: + ----- Method: NaturalLanguageFormTranslator>>saveFormsOn: (in category 'i/o') ----- + saveFormsOn: aStream + + | rr | + rr := ReferenceStream on: aStream. + rr nextPut: {id isoString. generics}. + rr close. + ! Item was added: + ----- Method: NaturalLanguageFormTranslator>>translate: (in category 'utilities') ----- + translate: aString + + ^ (self generics + at: aString ifAbsent: [nil]) deepCopy. + + "Do you like to write 'form ifNotNil: [form deepCopy]'?" + ! Item was added: + Object subclass: #NaturalLanguageTranslator + instanceVariableNames: 'id' + classVariableNames: 'Translators' + poolDictionaries: '' + category: 'System-Localization'! + + !NaturalLanguageTranslator commentStamp: '<historical>' prior: 0! + abstract class of natural language translator. + Class side manages and holds loaded instances of concrete classes.! Item was added: + ----- Method: NaturalLanguageTranslator class>>allKnownPhrases (in category 'private') ----- + allKnownPhrases + ^AllKnownPhrases ifNil: [AllKnownPhrases := Dictionary new: 2051]! Item was added: + ----- Method: NaturalLanguageTranslator class>>availableForLocaleID: (in category 'accessing') ----- + availableForLocaleID: localeID + "Answer available locale ID. + If translator is not found for correct locale ID, then isoLanguage is + attempted for the key." + ^ self translators + at: localeID + ifAbsent: [localeID hasParent + ifTrue: [self translators + at: localeID parent + ifAbsent: [self default]] + ifFalse: [self default]]! Item was added: + ----- Method: NaturalLanguageTranslator class>>availableLanguageLocaleIDs (in category 'accessing') ----- + availableLanguageLocaleIDs + "Return the locale ids for the currently available languages. + Meaning those which either internally or externally have + translations available." + "NaturalLanguageTranslator availableLanguageLocaleIDs" + ^ self translators values collect:[:each | each localeID]! Item was added: + ----- Method: NaturalLanguageTranslator class>>cachedTranslations (in category 'private') ----- + cachedTranslations + "CachedTranslations := nil" + ^CachedTranslations ifNil: [CachedTranslations := Dictionary new]! Item was added: + ----- Method: NaturalLanguageTranslator class>>cleanUp (in category 'class initialization') ----- + cleanUp + "Flush caches" + + CachedTranslations := nil. + AllKnownPhrases := nil.! Item was added: + ----- Method: NaturalLanguageTranslator class>>cleanUpCache (in category 'private') ----- + cleanUpCache + "NaturalLanguageTranslator cleanUpCache" + + self cachedTranslations keys do: [:key | + key isoLanguage size > 2 ifTrue: [self cachedTranslations removeKey: key]]! Item was added: + ----- Method: NaturalLanguageTranslator class>>current (in category 'accessing') ----- + current + ^ self availableForLocaleID: LocaleID current! Item was added: + ----- Method: NaturalLanguageTranslator class>>default (in category 'accessing') ----- + default + "Answer translator for backstop" + "self default translate: 'test'" + ^ self new + localeID: (LocaleID isoLanguage: 'en')! Item was added: + ----- Method: NaturalLanguageTranslator class>>directoryForLanguage:country:create: (in category 'private loading') ----- + directoryForLanguage: isoLanguage country: isoCountry create: createDir + "Try to locate the <prefs>/locale/<language>{/<country>} folder. + If createDir is set, create the path down to country or language, depending on wether it's specified.. + Return the directory for country or language depending on specification. + If neither exists, nil" + + "NaturalLanguageTranslator directoryForLanguage: 'es' country: nil create: true" + "NaturalLanguageTranslator directoryForLanguage: 'de' country: 'DE' create: true" + "NaturalLanguageTranslator directoryForLanguage: 'en' country: 'US' create: false" + "NaturalLanguageTranslator directoryForLanguage: 'en' country: nil create: true" + + "If this fails, there is nothing we can do about it here" + | localeDir countryDir languageDir | + localeDir := self localeDirCreate: createDir. + localeDir ifNil: [^nil]. + + isoCountry ifNil: [ + languageDir := localeDir directoryNamed: isoLanguage. + createDir + ifTrue: [languageDir assureExistence]. + ^languageDir exists + ifTrue: [languageDir] + ifFalse: [nil]]. + + countryDir := languageDir directoryNamed: isoCountry. + createDir + ifTrue: [countryDir assureExistence]. + + ^countryDir exists + ifTrue: [countryDir] + ifFalse: [nil]! Item was added: + ----- Method: NaturalLanguageTranslator class>>directoryForLocaleID:create: (in category 'private loading') ----- + directoryForLocaleID: localeID create: createDir + "Try to locate the <prefs>/locale/<language>{/<country>} folder. + If createDir is set, create the path down to country or language, depending on locale. + Return the directory for country or language depending on locale. + If neither exists, nil" + + "NaturalLanguageTranslator directoryForLanguage: 'de' country: nil readOnly: true" + "NaturalLanguageTranslator directoryForLanguage: 'de' country: 'DE' readOnly: true" + "NaturalLanguageTranslator directoryForLanguage: 'en' country: 'US' readOnly: false" + "NaturalLanguageTranslator directoryForLanguage: 'en' country: nil readOnly: true" + + ^self directoryForLanguage: localeID isoLanguage country: localeID isoCountry create: createDir! Item was added: + ----- Method: NaturalLanguageTranslator class>>domainRegistered: (in category 'accessing') ----- + domainRegistered: aDomainName + "notify that new TextDomain is registered" + self translators do: [:each | each domainRegistered: aDomainName]! Item was added: + ----- Method: NaturalLanguageTranslator class>>domainUnregistered: (in category 'accessing') ----- + domainUnregistered: aDomainName + "notify that new TextDomain is unregistered" + self translators do: [:each | each domainUnregistered: aDomainName]! Item was added: + ----- Method: NaturalLanguageTranslator class>>fileReaderServicesForFile:suffix: (in category 'file-services') ----- + fileReaderServicesForFile: fullName suffix: suffix + "Answer the file services associated with given file" + ^ (suffix = self translationSuffix) | (suffix = '*') + ifTrue: [{self serviceMergeLanguageTranslations}] + ifFalse: [#()]! Item was added: + ----- Method: NaturalLanguageTranslator class>>initialize (in category 'class initialization') ----- + initialize + Smalltalk addToStartUpList: NaturalLanguageTranslator after: FileDirectory. + ! Item was added: + ----- Method: NaturalLanguageTranslator class>>isoLanguage: (in category 'accessing') ----- + isoLanguage: isoLanguage + "Return the generic language translator as there is no information about the country code" + + ^self isoLanguage: isoLanguage isoCountry: nil! Item was added: + ----- Method: NaturalLanguageTranslator class>>isoLanguage:isoCountry: (in category 'accessing') ----- + isoLanguage: isoLanguage isoCountry: isoCountry + ^self localeID: (LocaleID isoLanguage: isoLanguage isoCountry: isoCountry)! Item was added: + ----- Method: NaturalLanguageTranslator class>>loadAvailableExternalLocales (in category 'private loading') ----- + loadAvailableExternalLocales + "private - register locales IDs based on the content of the <prefs>/locale/ directory" + | localeDir | + localeDir := self localeDirCreate: false. + localeDir ifNil: [^ #()]. + localeDir directoryNames + do: [:langDirName | + | langDir | + langDir := localeDir directoryNamed: langDirName. + (langDir fileNamesMatching: '*.' , self translationSuffix) + ifNotEmpty: [self loadTranslatorForIsoLanguage: langDirName isoCountry: nil]. + langDir directoryNames + do: [:countryDirName | + | countryDir | + countryDir := langDir directoryNamed: countryDirName. + (countryDir fileNamesMatching: '*.' , self translationSuffix) + ifNotEmpty: [self loadTranslatorForIsoLanguage: langDirName isoCountry: countryDirName] + ] + ]. + ! Item was added: + ----- Method: NaturalLanguageTranslator class>>loadAvailableLocales (in category 'private loading') ----- + loadAvailableLocales + "This loads the default locale and all external locales" + + | defaultID | + defaultID := LocaleID current. + self cachedTranslations at: defaultID ifAbsent: [self localeID: defaultID]. + self loadAvailableExternalLocales.! Item was added: + ----- Method: NaturalLanguageTranslator class>>loadExternalTranslationsFor: (in category 'private loading') ----- + loadExternalTranslationsFor: translator + "Try to load translations from external external files. + The files are located in the <prefs>/locale/<language>{/<country>} folder. + There can be more than one file for each location, so applications can install their own partial translation tables. All files in the specific folder are loaded." + + | translationDir | + translationDir := self directoryForLocaleID: translator localeID create: false. + translationDir ifNil: [ ^nil ]. + (translationDir fileNamesMatching: '*.' , self translationSuffix) + do: [:fileName | translator loadFromFileNamed: (translationDir fullNameFor: fileName)]! Item was added: + ----- Method: NaturalLanguageTranslator class>>loadForLocaleIsoString:fromGzippedMimeLiteral: (in category 'file-services') ----- + loadForLocaleIsoString: localeString fromGzippedMimeLiteral: mimeString + "merge the translation from the mime literal." + | stream localeID translator gs rbStream s currentPlatform | + s := Base64MimeConverter mimeDecodeToBytes: mimeString readStream. + s reset. + gs := GZipReadStream on: s. + rbStream := MultiByteBinaryOrTextStream with: gs contents asString. + rbStream converter: UTF8TextConverter new. + rbStream reset. + localeID := LocaleID isoString: localeString. + currentPlatform := Locale currentPlatform. + [Locale + currentPlatform: (Locale localeID: localeID). + stream := ReadStream on: rbStream contents] + ensure: [Locale currentPlatform: currentPlatform]. + translator := self localeID: localeID. + translator loadFromStream: stream. + LanguageEnvironment resetKnownEnvironments! Item was added: + ----- Method: NaturalLanguageTranslator class>>loadTranslatorForIsoLanguage:isoCountry: (in category 'private loading') ----- + loadTranslatorForIsoLanguage: isoLanguage isoCountry: isoCountry + "private - load the translations from <prefs>/locale/ directory + the procedure is to assure the existence of a translator for the + given language/country and then load the external translations for this translator" + + | translator | + translator := self localeID: (LocaleID isoLanguage: isoLanguage isoCountry: isoCountry). + + self loadExternalTranslationsFor: translator! Item was added: + ----- Method: NaturalLanguageTranslator class>>localeChanged (in category 'accessing') ----- + localeChanged + "notify some project starts to use this locale. + this facility may use the event to load translation data dynamically" + self current setCurrent + ! Item was added: + ----- Method: NaturalLanguageTranslator class>>localeDirCreate: (in category 'private loading') ----- + localeDirCreate: createDir + "Try to locate the <prefs>/locale/ folder. + If createDir is set, try to create the path. + If it doesn't exist, return nil" + + "If this fails, there is nothing we can do about it here" + | prefDir localeDir | + (createDir not + and: [ExternalSettings preferenceDirectory isNil]) + ifTrue: [^ nil]. + + prefDir := ExternalSettings assuredPreferenceDirectory. + prefDir exists + ifFalse: [^nil]. + + + localeDir := prefDir directoryNamed: 'locale'. + createDir + ifTrue: [localeDir assureExistence]. + ^localeDir exists + ifTrue: [localeDir] + ifFalse: [nil]! Item was added: + ----- Method: NaturalLanguageTranslator class>>localeID: (in category 'accessing') ----- + localeID: localeID + ^ self cachedTranslations + at: localeID + ifAbsentPut: [self new localeID: localeID]! Item was added: + ----- Method: NaturalLanguageTranslator class>>mergeTranslationFileNamed: (in category 'file-services') ----- + mergeTranslationFileNamed: fileFullNameString + "merge the translation in the file named fileFullNameString" + + FileStream readOnlyFileNamed: fileFullNameString do: [:stream | + | localeID translator | + localeID := LocaleID isoString: stream localName sansPeriodSuffix. + translator := self localeID: localeID. + translator loadFromStream: stream]. + LanguageEnvironment resetKnownEnvironments. + + ! Item was added: + ----- Method: NaturalLanguageTranslator class>>privateStartUp (in category 'class initialization') ----- + privateStartUp + self resetCaches. + GetTextTranslator privateStartUp. + InternalTranslator privateStartUp. + self localeChanged.! Item was added: + ----- Method: NaturalLanguageTranslator class>>registerPhrase: (in category 'private') ----- + registerPhrase: phrase + "Using a Dictionary so we can lookup existing string instead of creating needless copies when loading a translation." + self allKnownPhrases at: phrase put: phrase! Item was added: + ----- Method: NaturalLanguageTranslator class>>registeredPhraseFor: (in category 'private') ----- + registeredPhraseFor: phrase + "Using a Dictionary so we can lookup existing string instead of creating needless copies when loading a translation." + ^self allKnownPhrases at: phrase ifAbsentPut: [phrase]! Item was added: + ----- Method: NaturalLanguageTranslator class>>removeLocaleID: (in category 'accessing') ----- + removeLocaleID: localeID + "self removeLocaleID: (LocaleID isoString: 'ja-kids')" + ^ self translators + removeKey: localeID + ifAbsent: []! Item was added: + ----- Method: NaturalLanguageTranslator class>>resetCaches (in category 'class initialization') ----- + resetCaches + Translators := nil.! Item was added: + ----- Method: NaturalLanguageTranslator class>>serviceMergeLanguageTranslations (in category 'file-services') ----- + serviceMergeLanguageTranslations + "Answer a service for merging of translation files" + ^ SimpleServiceEntry + provider: self + label: 'merge the translation file' + selector: #mergeTranslationFileNamed: + description: 'merge the translation file into the language named like the file' + buttonLabel: 'merge'! Item was added: + ----- Method: NaturalLanguageTranslator class>>services (in category 'file-services') ----- + services + "Answer potential file services associated with this class" + ^ {self serviceMergeLanguageTranslations}! Item was added: + ----- Method: NaturalLanguageTranslator class>>startUp: (in category 'class initialization') ----- + startUp: resuming + resuming + ifFalse: [^ self]. + self privateStartUp.! Item was added: + ----- Method: NaturalLanguageTranslator class>>translate:toLocaleID: (in category 'translation') ----- + translate: aString toLocaleID: localeID + "translate for default domain" + ^ (self availableForLocaleID: localeID) + translate: aString! Item was added: + ----- Method: NaturalLanguageTranslator class>>translate:toLocaleID:inDomain: (in category 'translation') ----- + translate: aString toLocaleID: localeID inDomain: aDomainName + ^ (self availableForLocaleID: localeID) + translate: aString inDomain: aDomainName! Item was added: + ----- Method: NaturalLanguageTranslator class>>translateWithoutLoading:toLocaleID: (in category 'translation') ----- + translateWithoutLoading: aString toLocaleID: localeID + "translate for default domain" + ^self translateWithoutLoading: aString toLocaleID: localeID inDomain: TextDomainManager defaultDomain. + ! Item was added: + ----- Method: NaturalLanguageTranslator class>>translateWithoutLoading:toLocaleID:inDomain: (in category 'translation') ----- + translateWithoutLoading: aString toLocaleID: localeID inDomain: aDomainName + "try to translate with small footprint: + if GetTextTranslator hasn't loaded MO, try to use InternalTranslator. + if InternalTranslator isn't available, then actually load MO and use it" + | translator | + translator := self availableForLocaleID: localeID. + (translator isDomainLoaded: aDomainName) ifFalse: [ + (InternalTranslator availableLanguageLocaleIDs includes: localeID) + ifTrue: [translator := InternalTranslator localeID: localeID]. + ]. + ^translator translate: aString inDomain: aDomainName! Item was added: + ----- Method: NaturalLanguageTranslator class>>translationSuffix (in category 'private') ----- + translationSuffix + ^'translation'! Item was added: + ----- Method: NaturalLanguageTranslator class>>translators (in category 'accessing') ----- + translators + ^ Translators ifNil: [Translators := Dictionary new] ! Item was added: + ----- Method: NaturalLanguageTranslator>>atRandom (in category 'accessing') ----- + atRandom + + self subclassResponsibility. + ! Item was added: + ----- Method: NaturalLanguageTranslator>>checkPhrase:translation: (in category 'translation') ----- + checkPhrase: phrase translation: translation! Item was added: + ----- Method: NaturalLanguageTranslator>>defaultBackgroundColor (in category 'user interface') ----- + defaultBackgroundColor + "answer the receiver's defaultBackgroundColor for views" + ^ Color cyan! Item was added: + ----- Method: NaturalLanguageTranslator>>displayLanguage (in category 'accessing') ----- + displayLanguage + ^ id displayLanguage! Item was added: + ----- Method: NaturalLanguageTranslator>>displayName (in category 'accessing') ----- + displayName + ^ id displayName! Item was added: + ----- Method: NaturalLanguageTranslator>>domainRegistered: (in category 'accessing') ----- + domainRegistered: aDomainName + "notify that new TextDomain is registered. Concrete subclass can responds to this event if needed"! Item was added: + ----- Method: NaturalLanguageTranslator>>domainUnregistered: (in category 'accessing') ----- + domainUnregistered: aDomainName + "notify that new TextDomain is unregistered. Concrete subclass can responds to this event if needed"! Item was added: + ----- Method: NaturalLanguageTranslator>>fileOutHeader (in category 'fileIn/fileOut') ----- + fileOutHeader + ^ '''Translation dictionary'''! Item was added: + ----- Method: NaturalLanguageTranslator>>fileOutHeaderOn: (in category 'fileIn/fileOut') ----- + fileOutHeaderOn: aStream + aStream nextChunkPut: self fileOutHeader; + cr. + aStream timeStamp; cr. + aStream nextPut: $!!. + aStream nextChunkPut: '(' , self class name , ' localeID: ' , id storeString , ')'. + aStream cr! Item was added: + ----- Method: NaturalLanguageTranslator>>fileOutOn: (in category 'fileIn/fileOut') ----- + fileOutOn: aStream + "self current fileOutOn: Transcript. Transcript endEntry" + self fileOutHeaderOn: aStream. + self fileOutOn: aStream keys: nil! Item was added: + ----- Method: NaturalLanguageTranslator>>fileOutOn:keys: (in category 'fileIn/fileOut') ----- + fileOutOn: aStream keys: keys + "self current fileOutOn: Transcript. Transcript endEntry" + (keys + ifNil: [generics keys asArray sort]) + do: [:key | self + nextChunkPut: (generics associationAt: key) + on: aStream]. + keys + ifNil: [self untranslated + do: [:each | self nextChunkPut: each -> '' on: aStream]]. + aStream nextPut: $!!; + cr! Item was added: + ----- Method: NaturalLanguageTranslator>>generics (in category 'private') ----- + generics + ^generics ifNil: [generics := Dictionary new]! Item was added: + ----- Method: NaturalLanguageTranslator>>isDomainLoaded: (in category 'accessing') ----- + isDomainLoaded: aDomainName + "ask if translation dictionary for the domain has been loaded and available now for use" + self subclassResponsibility.! Item was added: + ----- Method: NaturalLanguageTranslator>>isoCountry (in category 'accessing') ----- + isoCountry + ^self localeID isoCountry! Item was added: + ----- Method: NaturalLanguageTranslator>>isoLanguage (in category 'accessing') ----- + isoLanguage + ^self localeID isoLanguage! Item was added: + ----- Method: NaturalLanguageTranslator>>loadFromFileNamed: (in category 'private store-retrieve') ----- + loadFromFileNamed: fileNameString + "Load translations from an external file" + + FileStream readOnlyFileNamed: fileNameString do: [ :file | + self loadFromStream: file ]. + self changed: #translations. + self changed: #untranslated. + ! Item was added: + ----- Method: NaturalLanguageTranslator>>loadFromRefStream: (in category 'private store-retrieve') ----- + loadFromRefStream: stream + "Load translations from an external file" + | loadedArray refStream | + refStream := ReferenceStream on: stream. + [loadedArray := refStream next] + ensure: [refStream close]. + self processExternalObject: loadedArray ! Item was added: + ----- Method: NaturalLanguageTranslator>>loadFromStream: (in category 'private store-retrieve') ----- + loadFromStream: stream + "Load translations from an external file" + | header isFileIn | + header := '''Translation dictionary'''. + isFileIn := (stream next: header size) + = header. + stream reset. + isFileIn + ifTrue: [stream fileInAnnouncing: 'Loading ' translated, stream localName] + ifFalse: [self loadFromRefStream: stream]! Item was added: + ----- Method: NaturalLanguageTranslator>>localeID (in category 'accessing') ----- + localeID + ^id! Item was added: + ----- Method: NaturalLanguageTranslator>>localeID: (in category 'initialize-release') ----- + localeID: anID + id := anID! Item was added: + ----- Method: NaturalLanguageTranslator>>mergeTranslations: (in category 'private store-retrieve') ----- + mergeTranslations: newTranslations + "Merge a new set of translations into the exiting table. + Overwrites existing entries." + + newTranslations keysAndValuesDo: [:key :value | + self rawPhrase: (self class registeredPhraseFor: key) translation: value]. + self changed: #translations. + self changed: #untranslated.! Item was added: + ----- Method: NaturalLanguageTranslator>>nextChunkPut:on: (in category 'fileIn/fileOut') ----- + nextChunkPut: anObject on: aStream + | i remainder terminator | + terminator := $!!. + remainder := anObject storeString. + [(i := remainder indexOf: terminator) = 0] + whileFalse: [aStream + nextPutAll: (remainder copyFrom: 1 to: i). + aStream nextPut: terminator. + "double imbedded terminators" + remainder := remainder copyFrom: i + 1 to: remainder size]. + aStream nextPutAll: remainder. + aStream nextPut: terminator; cr.! Item was added: + ----- Method: NaturalLanguageTranslator>>phrase:translation: (in category 'translation') ----- + phrase: phraseString translation: translationString + self generics at: phraseString put: translationString asString. + self changed: #translations. + self changed: #untranslated.! Item was added: + ----- Method: NaturalLanguageTranslator>>printOn: (in category 'printing') ----- + printOn: aStream + aStream nextPutAll: self class name; nextPut: $(; print: self localeID; nextPut: $)! Item was added: + ----- Method: NaturalLanguageTranslator>>processExternalObject: (in category 'private store-retrieve') ----- + processExternalObject: anArray + "pivate - process the external object" + + "new format -> {translations. untranslated}" + + anArray second do: [:each | self class registerPhrase: each]. + + self mergeTranslations: anArray first! Item was added: + ----- Method: NaturalLanguageTranslator>>rawPhrase:translation: (in category 'translation') ----- + rawPhrase: phraseString translation: translationString + self generics at: phraseString put: translationString asString. + ! Item was added: + ----- Method: NaturalLanguageTranslator>>rawRemoveUntranslated: (in category 'translation') ----- + rawRemoveUntranslated: untranslated + + self class allKnownPhrases removeKey: untranslated ifAbsent: []. + self changed: #untranslated.! Item was added: + ----- Method: NaturalLanguageTranslator>>removeTranslationFor: (in category 'translation') ----- + removeTranslationFor: phraseString + self generics removeKey: phraseString ifAbsent: []. + self changed: #translations. + self changed: #untranslated.! Item was added: + ----- Method: NaturalLanguageTranslator>>removeUntranslated: (in category 'translation') ----- + removeUntranslated: untranslated + + self class allKnownPhrases removeKey: untranslated ifAbsent: []. + ! Item was added: + ----- Method: NaturalLanguageTranslator>>saveToFileNamed: (in category 'private store-retrieve') ----- + saveToFileNamed: fileNameString + "save the receiver's translations to a file named fileNameString" + | stream | + "Set true if you need to save as binary" + false + ifTrue: [stream := ReferenceStream fileNamed: fileNameString. + stream nextPut: {self translations. self untranslated}. + stream close. + ^ self]. + stream := FileStream fileNamed: fileNameString. + [self fileOutOn: stream] + ensure: [stream close]! Item was added: + ----- Method: NaturalLanguageTranslator>>scanFrom: (in category 'fileIn/fileOut') ----- + scanFrom: aStream + "Read a definition of dictionary. + Make sure current locale corresponds my locale id" + | newTranslations currentPlatform | + newTranslations := Dictionary new. + currentPlatform := Locale currentPlatform. + [ | aString assoc | + Locale + currentPlatform: (Locale localeID: id). + [aString := aStream nextChunk withSqueakLineEndings. + aString size > 0] + whileTrue: [assoc := Compiler evaluate: aString. + assoc value = '' + ifTrue: [self class registerPhrase: assoc key] + ifFalse: [newTranslations add: assoc]]] + ensure: [Locale currentPlatform: currentPlatform]. + self mergeTranslations: newTranslations! Item was added: + ----- Method: NaturalLanguageTranslator>>setCurrent (in category 'language switching') ----- + setCurrent + "notify locale of the translator become current" + ! Item was added: + ----- Method: NaturalLanguageTranslator>>translate: (in category 'translation') ----- + translate: aString + ^self translate: aString + inDomain: TextDomainManager defaultDomain! Item was added: + ----- Method: NaturalLanguageTranslator>>translate:in: (in category 'translation') ----- + translate: aString in: aContext! Item was added: + ----- Method: NaturalLanguageTranslator>>translate:inDomain: (in category 'translation') ----- + translate: aString inDomain: aDomainName + ^ aString! Item was added: + ----- Method: NaturalLanguageTranslator>>translationFor: (in category 'translation') ----- + translationFor: aString + ^self translate: aString! Item was added: + ----- Method: NaturalLanguageTranslator>>translations (in category 'accessing') ----- + translations + ^self generics! Item was added: + ----- Method: NaturalLanguageTranslator>>untranslated (in category 'accessing') ----- + untranslated + | translations | + translations := self translations. + ^self class allKnownPhrases reject: [:each | translations includesKey: each]! Item was added: + ----- Method: NaturalLanguageTranslator>>writeAsMimeString (in category 'fileIn/fileOut') ----- + writeAsMimeString + + | fileName fileStream tmpStream s2 gzs | + tmpStream := MultiByteBinaryOrTextStream on: ''. + tmpStream converter: UTF8TextConverter new. + self fileOutOn: tmpStream. + s2 := RWBinaryOrTextStream on: ''. + gzs := GZipWriteStream on: s2. + tmpStream reset. + gzs nextPutAll: (tmpStream binary contentsOfEntireFile asString) contents. + gzs close. + s2 reset. + + fileName := id isoString, '.translation.gz.mime'. + fileStream := FileStream newFileNamed: fileName. + fileStream nextPutAll: (Base64MimeConverter mimeEncode: s2) contents. + fileStream close. + !
1
0
0
0
The Trunk: GetText-edc.20.mcz
by commits@source.squeak.org
29 Mar '12
29 Mar '12
Edgar J. De Cleene uploaded a new version of GetText to project The Trunk:
http://source.squeak.org/trunk/GetText-edc.20.mcz
==================== Summary ==================== Name: GetText-edc.20 Author: edc Time: 29 March 2012, 7:32:49.142 am UUID: 958a59da-4fce-4c70-a776-166b3c8237a8 Ancestors: GetText-edc.17 Clean Undeclared. {InternalTranslator ISOLanguageDefinition Locale LocaleID NaturalLanguageFormTranslator NaturalLanguageTranslator} Moved back to System-Localization =============== Diff against GetText-edc.17 =============== Item was changed: ----- Method: GetTextExporter>>appendStringReceivers:into: (in category 'private') ----- appendStringReceivers: aSymbol into: domains | literals references domainName methodReference keywords found | found := TranslatedReceiverFinder new stringReceiversWithContext: aSymbol. found do: [ :assoc | methodReference := assoc key. keywords := assoc value. domainName := (PackageOrganizer default packageOfMethod: methodReference ifNone: [nil]). domainName := domainName isNil ifTrue: [TextDomainManager defaultDomain] ifFalse: [domainName name]. + literals := domains at: domainName ifAbsentPut: [Dictionary new]. - literals _ domains at: domainName ifAbsentPut: [Dictionary new]. keywords do: [ :literal | + references := literals at: literal ifAbsentPut: [OrderedCollection new]. - references _ literals at: literal ifAbsentPut: [OrderedCollection new]. references add: methodReference. ]. ]. ! Item was changed: ----- Method: GetTextExporter>>appendVocabularies: (in category 'private') ----- appendVocabularies: domains | literalsForDomain references domainName methodReference | EToyVocabulary allPhrasesWithContextToTranslate do: [ :r | methodReference := (MethodReference new setStandardClass: (r second) methodSymbol: (r third)). + "domainName := self getTextDomainForPackage: (PackageOrganizer default packageOfMethod: methodReference)". - "domainName _ self getTextDomainForPackage: (PackageOrganizer default packageOfMethod: methodReference)". domainName := 'Etoys-Tiles'. + literalsForDomain := domains at: domainName ifAbsentPut: [Dictionary new]. - literalsForDomain _ domains at: domainName ifAbsentPut: [Dictionary new]. r fourth do: [ :literal | + references := literalsForDomain at: literal ifAbsentPut: [OrderedCollection new]. - references _ literalsForDomain at: literal ifAbsentPut: [OrderedCollection new]. references add: methodReference. ]. ]. ! Item was changed: ----- Method: GetTextExporter>>dirNameCategory:translator: (in category 'exporting') ----- dirNameCategory: category translator: translator "Answer a file name for the category. Make one if it is not exist yet. Make template file name if translator is nil" "self new dirNameCategory: 'Morphic-Scripting Support' translator: NaturalLanguageTranslator current" "self new dirNameCategory: 'Morphic-Scripting Support' translator: nil" | safeCategory fileName dirName pathName | + safeCategory := category copyReplaceAll: ' ' with: ':='. - safeCategory := category copyReplaceAll: ' ' with: '_'. fileName := translator ifNil: [safeCategory , '.pot'] ifNotNil: [translator localeID posixName , '.po']. dirName := (safeCategory findTokens: '-') inject: 'po' into: [:aString :next | aString , FileDirectory slash , next]. pathName := dirName , FileDirectory slash , fileName. (FileDirectory default directoryNamed: dirName) assureExistence. ^ pathName! Item was changed: ----- Method: GetTextExporter>>dirNameDomain:translator: (in category 'exporting') ----- dirNameDomain: domain translator: translator "Answer a file name for the domain. Make one if it is not exist yet. Make template file name if translator is nil" "self new dirNameDomain: 'etoys' translator: NaturalLanguageTranslator current" "self new dirNameDomain: 'etoys' translator: nil" | fileName dirName pathName | + "safeCategory := category copyReplaceAll: ' ' with: ':='." - "safeCategory := category copyReplaceAll: ' ' with: '_'." fileName := domain, (translator ifNil: ['.pot'] ifNotNil: ['.po']). dirName := 'po', FileDirectory slash, (translator ifNil: ['templates'] ifNotNil: [translator localeID posixName]). pathName := dirName , FileDirectory slash , fileName. (FileDirectory default directoryNamed: dirName) assureExistence. ^ pathName! Item was changed: ----- Method: GetTextExporter>>exportBody:translator: (in category 'file out') ----- exportBody: literals translator: translator "Export a gettext file body. literals is a dictionary of keyword -> #(MethodReference...) in the textDomain." "Build {sortKey. comment. msgid } to optimize sorting (getting category is too slow). If there are two or more methods for a mgsid, only first method (alphabetical) is used for sorting." | sorted msgid sortedMethods category sortKey comment triplets commentUnderLined | triplets := literals associations collect: [:assoc | msgid := assoc key. sortedMethods := assoc value asArray sort. category := (Smalltalk at: sortedMethods first classSymbol) category asString. sortKey := category , ',' , sortedMethods first printString , ',' , msgid. comment := (sortedMethods collect: [:each | each actualClass asString , '>>' , each methodSymbol asString]) inject: category into: [:result :methodName | result , ',' , methodName]. + "Replace white spaces to := because gettext tool might - "Replace white spaces to _ because gettext tool might replace a space to a new line some times, and it makes difficult to take a diff." + commentUnderLined := comment copyReplaceAll: ' ' with: ':='. - commentUnderLined := comment copyReplaceAll: ' ' with: '_'. Array with: sortKey with: commentUnderLined with: msgid]. "Sort and output the words" sorted := triplets sort: [:a :b | a first <= b first]. sorted do: [:triplet | comment := triplet second. msgid := triplet third. self exportRecordHeader: comment. self exportPhrase: msgid translation: (self translationFor: msgid in: translator)]! Item was changed: ----- Method: GetTextExporter>>exportPhrase:translation: (in category 'private') ----- exportPhrase: phraseString translation: translationString | normalizedTrans tmp transStartsWithCR transEndsWithCR| phraseString isEmpty ifTrue: [^ self]. self exportTag: 'msgid' msg: phraseString. translationString size = 0 ifTrue: [ + normalizedTrans := '' - normalizedTrans _ '' ] ifFalse: [ + transEndsWithCR := translationString last = (Character cr). - transEndsWithCR _ translationString last = (Character cr). phraseString last = (Character cr) ifTrue: [ transEndsWithCR ifTrue: [ + normalizedTrans := translationString - normalizedTrans _ translationString ] ifFalse: [ + normalizedTrans := translationString , String cr - normalizedTrans _ translationString , String cr ] ] ifFalse: [ transEndsWithCR ifTrue: [ + normalizedTrans := translationString allButLast - normalizedTrans _ translationString allButLast ] ifFalse: [ + normalizedTrans := translationString - normalizedTrans _ translationString ] ]. + transStartsWithCR := normalizedTrans first = (Character cr). - transStartsWithCR _ normalizedTrans first = (Character cr). phraseString first = (Character cr) ifTrue: [ transStartsWithCR ifFalse: [ + tmp := (Character cr asString) , normalizedTrans. + normalizedTrans := tmp. - tmp _ (Character cr asString) , normalizedTrans. - normalizedTrans _ tmp. ] ] ifFalse: [ transStartsWithCR ifTrue: [ + normalizedTrans := normalizedTrans allButFirst - normalizedTrans _ normalizedTrans allButFirst ] ] ]. self exportTag: 'msgstr' msg: normalizedTrans. stream cr! Item was changed: ----- Method: GetTextInterchange>>language: (in category 'accessing') ----- language: translator + language := translator! - language _ translator! Item was changed: ----- Method: GetTextInterchange>>stream: (in category 'accessing') ----- stream: aStream + stream := aStream! - stream _ aStream! Item was changed: ----- Method: GetTextTranslator class>>defaultLocaleDirs (in category 'translation data layout') ----- defaultLocaleDirs | dirs | + dirs := OrderedCollection new. - dirs _ OrderedCollection new. UserDefaultLocaleDirs ifNotNil: [dirs addAll: UserDefaultLocaleDirs]. dirs addAll: self systemDefaultLocaleDirs. ^dirs ! Item was changed: ----- Method: GetTextTranslator class>>findMOForLocaleID:domain: (in category 'private') ----- findMOForLocaleID: id domain: aDomainName | sepa langSubDir path | + sepa := FileDirectory slash. + langSubDir := self langDirNameForLocaleID: id. - sepa _ FileDirectory slash. - langSubDir _ self langDirNameForLocaleID: id. (self localeDirsForDomain: aDomainName) do: [:each | + path := each , sepa , langSubDir, sepa , (self moNameForDomain: aDomainName). - path _ each , sepa , langSubDir, sepa , (self moNameForDomain: aDomainName). [(FileDirectory default fileExists: path) ifTrue: [^path]] on: InvalidDirectoryError do: [:e | ^nil]]. ^nil.! Item was changed: ----- Method: GetTextTranslator class>>initialize (in category 'class initialization') ----- initialize + SystemDefaultLocaleDirs := OrderedCollection new. + UserDefaultLocaleDirs := OrderedCollection new. + LocaleDirsForDomain := Dictionary new.! - SystemDefaultLocaleDirs _ OrderedCollection new. - UserDefaultLocaleDirs _ OrderedCollection new. - LocaleDirsForDomain _ Dictionary new.! Item was changed: ----- Method: GetTextTranslator class>>localeDirsForDomain (in category 'private') ----- localeDirsForDomain + ^LocaleDirsForDomain ifNil: [LocaleDirsForDomain := Dictionary new]! - ^LocaleDirsForDomain ifNil: [LocaleDirsForDomain _ Dictionary new]! Item was changed: ----- Method: GetTextTranslator class>>localeDirsForDomain: (in category 'translation data layout') ----- localeDirsForDomain: aDomainName "returns collection of locale directories for text domain. This includes user defined one for the domain, user defaults and system defaults" | dirs dir | + dirs := OrderedCollection new. + dir := self localeDirForDomain: aDomainName. - dirs _ OrderedCollection new. - dir _ self localeDirForDomain: aDomainName. dir ifNotNil: [dirs add: dir]. dirs addAll: self defaultLocaleDirs. ^dirs! Item was changed: ----- Method: GetTextTranslator>>initialize (in category 'initialize-release') ----- initialize + moFiles := Dictionary new.! - moFiles _ Dictionary new.! Item was changed: ----- Method: GetTextTranslator>>isDomainLoaded: (in category 'accessing') ----- isDomainLoaded: aDomainName | mo | + mo := moFiles at: aDomainName ifAbsent: [nil]. - mo _ moFiles at: aDomainName ifAbsent: [nil]. ^mo isNil not. ! Item was changed: ----- Method: GetTextTranslator>>loadMOFileForDomain: (in category 'private') ----- loadMOFileForDomain: aDomainName | moName | + moName := self class findMOForLocaleID: self localeID - moName _ self class findMOForLocaleID: self localeID domain: aDomainName. moName notNil ifTrue: [^MOFile new load: moName localeID: self localeID] ifFalse: [^nil] ! Item was changed: ----- Method: GetTextTranslator>>reloadMOFiles (in category 'accessing') ----- reloadMOFiles + moFiles := Dictionary new. - moFiles _ Dictionary new. self loadMOFiles.! Item was changed: ----- Method: GetTextTranslator>>translate:inDomain: (in category 'translation') ----- translate: aString inDomain: aDomainName | mo | + mo := self moFileForDomain: aDomainName. - mo _ self moFileForDomain: aDomainName. ^mo isNil ifTrue: [aString] ifFalse: [mo translationFor: aString] ! Item was removed: - Object subclass: #ISOLanguageDefinition - instanceVariableNames: 'iso3 iso2 iso3Alternate language' - classVariableNames: 'ISO2Countries ISO2Table ISO3Countries ISO3Table' - poolDictionaries: '' - category: 'GetText-Localization'! Item was removed: - ----- Method: ISOLanguageDefinition class>>buildIso3166CodesTables (in category 'private') ----- - buildIso3166CodesTables - "ISOLanguageDefinition buildIso3166CodesTables" - | rawdata stream country isoa2 isoa3 unNumeric macName macCode windowsName windowsCode empty table | - rawdata := self iso3166Codes. - table := OrderedCollection new: 200. - stream := rawdata readStream. - empty := 160 asCharacter asString. - [stream atEnd] whileFalse: - [country := stream nextLine. - isoa2 := stream nextLine. - isoa3 := stream nextLine. - unNumeric := stream nextLine. - windowsName := stream nextLine. - windowsName = empty ifTrue: [windowsName := nil]. - windowsCode := stream nextLine. - windowsCode = empty ifTrue: [windowsCode := nil]. - macName := stream nextLine. - macName = empty ifTrue: [macName := nil]. - macCode := stream nextLine. - macCode = empty ifTrue: [macCode := nil]. - table add: { country. isoa2. isoa3. unNumeric. windowsName. windowsCode. macName. macCode. }]. - ^table! Item was removed: - ----- Method: ISOLanguageDefinition class>>extraCountryDefinitions (in category 'private') ----- - extraCountryDefinitions - ^{ - {'Kids'. 'KIDS'. 'KIDS'.}. - }! Item was removed: - ----- Method: ISOLanguageDefinition class>>extraISO3Definitions (in category 'private') ----- - extraISO3Definitions - - ^self readISOLanguagesFrom: 'jpk Japanese (Kids) - ' readStream! Item was removed: - ----- Method: ISOLanguageDefinition class>>initISO3LanguageTable (in category 'private') ----- - initISO3LanguageTable - "ISOLanguageDefinition initIso3LanguageTable" - - | table | - table := ISOLanguageDefinition readISOLanguagesFrom: ISOLanguageDefinition isoLanguages readStream. - table addAll: self extraISO3Definitions. - ^table! Item was removed: - ----- Method: ISOLanguageDefinition class>>initISOCountries (in category 'private') ----- - initISOCountries - "ISOLanguageDefinition initISOCountries" - | iso3166Table | - iso3166Table := ISOLanguageDefinition buildIso3166CodesTables. - ISO2Countries := Dictionary new. - ISO3Countries := Dictionary new. - iso3166Table do: [:entry | - ISO2Countries at: (entry at: 2) put: (entry at: 1). - ISO3Countries at: (entry at: 3) put: (entry at: 1)]. - self extraCountryDefinitions do: [:entry | - ISO2Countries at: (entry at: 2) put: (entry at: 1). - ISO3Countries at: (entry at: 3) put: (entry at: 1)]! Item was removed: - ----- Method: ISOLanguageDefinition class>>initialize (in category 'class initialization') ----- - initialize - "ISOLanguageDefinition initialize" - - ISO3Table := nil. - ISO2Table := nil! Item was removed: - ----- Method: ISOLanguageDefinition class>>iso2Countries (in category 'private') ----- - iso2Countries - "ISOLanguageDefinition iso2Countries" - "ISO2Countries := nil. ISO3Countries := nil" - - ISO2Countries ifNil: [self initISOCountries]. - ^ISO2Countries! Item was removed: - ----- Method: ISOLanguageDefinition class>>iso2LanguageDefinition: (in category 'accessing') ----- - iso2LanguageDefinition: aString - ^self iso2LanguageTable at: aString! Item was removed: - ----- Method: ISOLanguageDefinition class>>iso2LanguageTable (in category 'private') ----- - iso2LanguageTable - "ISOLanguageDefinition iso2LanguageTable" - - ISO2Table ifNotNil: [^ISO2Table]. - ISO2Table := Dictionary new: self iso3LanguageTable basicSize. - self iso3LanguageTable do: [:entry | - ISO2Table at: entry iso2 put: entry]. - ^ISO2Table! Item was removed: - ----- Method: ISOLanguageDefinition class>>iso3166Codes (in category 'private') ----- - iso3166Codes - "
http://www.unicode.org/onlinedat/countries.html
" - - ^'ÅLAND ISLANDS - AX - - - - - - - AFGHANISTAN - AF - AFG - 004 - - - - - ALBANIA - AL - ALB - 008 - CTRY_ALBANIA - 355 - - - ALGERIA - DZ - DZA - 012 - CTRY_ALGERIA - 213 - verArabic - 16 - AMERICAN SAMOA - AS - ASM - 016 - - - - - ANDORRA - AD - AND - 020 - - - - - ANGOLA - AO - AGO - 024 - - - - - ANGUILLA - AI - AIA - 660 - - - - - ANTARCTICA - AQ - ATA - 010 - - - - - ANTIGUA AND BARBUDA - AG - ATG - 028 - - - - - ARGENTINA - AR - ARG - 032 - CTRY_ARGENTINA - 54 - - - ARMENIA - AM - ARM - 051 - CTRY_ARMENIA - 374 - verArmenian - 84 - ARUBA - AW - ABW - 533 - - - - - AUSTRALIA - AU - AUS - 036 - CTRY_AUSTRALIA - 61 - verAustralia - 15 - AUSTRIA - AT - AUT - 040 - CTRY_AUSTRIA - 43 - verAustria - 92 - AZERBAIJAN - AZ - AZE - 031 - CTRY_AZERBAIJAN - 994 - - - BAHAMAS - BS - BHS - 044 - - - - - BAHRAIN - BH - BHR - 048 - CTRY_BAHRAIN - 973 - - - BANGLADESH - BD - BGD - 050 - - - verBengali - 60 - BARBADOS - BB - BRB - 052 - - - - - BELARUS - BY - BLR - 112 - CTRY_BELARUS - 375 - - - BELGIUM - BE - BEL - 056 - CTRY_BELGIUM - 32 - verFrBelgium, verFlemish - 98 - BELIZE - BZ - BLZ - 084 - CTRY_BELIZE - 501 - - - BENIN - BJ - BEN - 204 - - - - - BERMUDA - BM - BMU - 060 - - - - - BHUTAN - BT - BTN - 064 - - - verBhutan - 83 - BOLIVIA - BO - BOL - 068 - CTRY_BOLIVIA - 591 - - - BOSNIA AND HERZEGOVINA - BA - BIH - 070 - - - - - BOTSWANA - BW - BWA - 072 - - - - - BOUVET ISLAND - BV - BVT - 074 - - - - - BRAZIL - BR - BRA - 076 - CTRY_BRAZIL - 55 - verBrazil - 71 - BRITISH INDIAN OCEAN TERRITORY - IO - IOT - 086 - - - - - BRUNEI DARUSSALAM - BN - BRN - 096 - CTRY_BRUNEI_DARUSSALAM - 673 - - - BULGARIA - BG - BGR - 100 - CTRY_BULGARIA - 359 - verBulgaria - 72 - BURKINA FASO - BF - BFA - 854 - - - - - BURUNDI - BI - BDI - 108 - - - - - CAMBODIA - KH - KHM - 116 - - - - - CAMEROON - CM - CMR - 120 - - - - - CANADA - CA - CAN - 124 - CTRY_CANADA - 2 - verFrCanada, verEndCanada - 82 - CAPE VERDE - CV - CPV - 132 - - - - - CAYMAN ISLANDS - KY - CYM - 136 - - - - - CENTRAL AFRICAN REPUBLIC - CF - CAF - 140 - - - - - CHAD - TD - TCD - 148 - - - - - CHILE - CL - CHL - 152 - CTRY_CHILE - 56 - - - CHINA - CN - CHN - 156 - CTRY_PRCHINA - 86 - verChina - 52 - CHRISTMAS ISLAND - CX - CXR - 162 - - - - - COCOS (KEELING) ISLANDS - CC - CCK - 166 - - - - - COLOMBIA - CO - COL - 170 - CTRY_COLOMBIA - 57 - - - COMOROS - KM - COM - 174 - - - - - CONGO - CG - COG - 178 - - - - - CONGO, THE DEMOCRATIC REPUBLIC OF THE - CD - - - - - - - COOK ISLANDS - CK - COK - 184 - - - - - COSTA RICA - CR - CRI - 188 - CTRY_COSTA_RICA - 506 - - - COTE D''IVOIRE - CI - CIV - 384 - - - - - CROATIA (local name: Hrvatska) - HR - HRV - 191 - CTRY_CROATIA - 385 - verCroatia, verYugoCroatian - 68 (c), 25 (y) - CUBA - CU - CUB - 192 - - - - - CYPRUS - CY - CYP - 196 - - - verCyprus - 23 - CZECH REPUBLIC - CZ - CZE - 203 - CTRY_CZECH - 420 - verCzech - 56 - DENMARK - DK - DNK - 208 - CTRY_DENMARK - 45 - verDenmark(da), verFaeroeIsl(fo) - 9(da), 47(fo) - DJIBOUTI - DJ - DJI - 262 - - - - - DOMINICA - DM - DMA - 212 - - - - - DOMINICAN REPUBLIC - DO - DOM - 214 - CTRY_DOMINICAN_REPUBLIC - 1 - - - EAST TIMOR - TL - TLS - 626 - - - - - ECUADOR - EC - ECU - 218 - CTRY_ECUADOR - 593 - - - EGYPT - EG - EGY - 818 - CTRY_EGYPT - 20 - verArabic - 16 - EL SALVADOR - SV - SLV - 222 - CTRY_EL_SALVADOR - 503 - - - EQUATORIAL GUINEA - GQ - GNQ - 226 - - - - - ERITREA - ER - ERI - 232 - - - - - ESTONIA - EE - EST - 233 - CTRY_ESTONIA - 372 - verEstonia - 44 - ETHIOPIA - ET - ETH - 210 - - - - - FALKLAND ISLANDS (MALVINAS) - FK - FLK - 238 - - - - - FAROE ISLANDS - FO - FRO - 234 - CTRY_FAEROE_ISLANDS - 298 - - - FIJI - FJ - FJI - 242 - - - - - FINLAND - FI - FIN - 246 - CTRY_FINLAND - 358 - verFinland - 17 - FRANCE - FR - FRA - 250 - CTRY_FRANCE - 33 - verFrance - 1 - FRANCE, METROPOLITAN - FX - FXX - 249 - - - - - FRENCH GUIANA - GF - GUF - 254 - - - - - FRENCH POLYNESIA - PF - PYF - 258 - - - - - FRENCH SOUTHERN TERRITORIES - TF - ATF - 260 - - - - - GABON - GA - GAB - 266 - - - - - GAMBIA - GM - GMB - 270 - - - - - GEORGIA - GE - GEO - 268 - CTRY_GEORGIA - 995 - verGeorgian - 85 - GERMANY - DE - DEU - 276 - CTRY_GERMANY - 49 - verGermany - 3 - GHANA - GH - GHA - 288 - - - - - GIBRALTAR - GI - GIB - 292 - - - - - GREECE - GR - GRC - 300 - CTRY_GREECE - 30 - verGreece, verGreecePoly - 20, 40 - GREENLAND - GL - GRL - 304 - - - verGreenland - 107 - GRENADA - GD - GRD - 308 - - - - - GUADELOUPE - GP - GLP - 312 - - - - - GUAM - GU - GUM - 316 - - - - - GUATEMALA - GT - GTM - 320 - CTRY_GUATEMALA - 502 - - - GUINEA - GN - GIN - 324 - - - - - GUINEA-BISSAU - GW - GNB - 624 - - - - - GUYANA - GY - GUY - 328 - - - - - HAITI - HT - HTI - 332 - - - - - HEARD ISLAND & MCDONALD ISLANDS - HM - HMD - 334 - - - - - HONDURAS - HN - HND - 340 - CTRY_HONDURAS - 504 - - - HONG KONG - HK - HKG - 344 - CTRY_HONG_KONG - 852 - - - HUNGARY - HU - HUN - 348 - CTRY_HUNGARY - 36 - verHungary - 43 - ICELAND - IS - ISL - 352 - CTRY_ICELAND - 354 - verIceland - 21 - INDIA - IN - IND - 356 - CTRY_INDIA - 91 - verIndiaHindi(hi) - 33 - INDONESIA - ID - IDN - 360 - CTRY_INDONESIA - 62 - - - IRAN, ISLAMIC REPUBLIC OF - IR - IRN - 364 - CTRY_IRAN - 981 - verIran - 48 - IRAQ - IQ - IRQ - 368 - CTRY_IRAQ - 964 - verArabic - 16 - IRELAND - IE - IRL - 372 - CTRY_IRELAND - 353 - verIreland - 50 - ISRAEL - IL - ISR - 376 - CTRY_ISRAEL - 972 - verIsrael - 13 - ITALY - IT - ITA - 380 - CTRY_ITALY - 39 - verItaly - 4 - JAMAICA - JM - JAM - 388 - CTRY_JAMAICA - 1 - - - JAPAN - JP - JPN - 392 - CTRY_JAPAN - 81 - verJapan - 14 - JORDAN - JO - JOR - 400 - CTRY_JORDAN - 962 - - - KAZAKHSTAN - KZ - KAZ - 398 - CTRY_KAZAKSTAN - 7 - - - KENYA - KE - KEN - 404 - CTRY_KENYA - 254 - - - KIRIBATI - KI - KIR - 296 - - - - - KOREA, DEMOCRATIC PEOPLE''S REPUBLIC OF - KP - PRK - 408 - - - verKorea - 51 - KOREA, REPUBLIC OF - KR - KOR - 410 - CTRY_SOUTH_KOREA - 82 - verKorea - - KUWAIT - KW - KWT - 414 - CTRY_KUWAIT - 965 - - - KYRGYZSTAN - KG - KGZ - 417 - CTRY_KYRGYZSTAN - 996 - - - LAO PEOPLE''S DEMOCRATIC REPUBLIC - LA - LAO - 418 - - - - - LATVIA - LV - LVA - 428 - CTRY_LATVIA - 371 - verLatvia - 45 - LEBANON - LB - LBN - 422 - CTRY_LEBANON - 961 - - - LESOTHO - LS - LSO - 426 - - - - - LIBERIA - LR - LBR - 430 - - - - - LIBYAN ARAB JAMAHIRIYA - LY - LBY - 434 - CTRY_LIBYA - 218 - verArabic - 16 - LIECHTENSTEIN - LI - LIE - 438 - CTRY_LIECHTENSTEIN - 41 - - - LITHUANIA - LT - LTU - 440 - CTRY_LITHUANIA - 370 - verLithuania - 41 - LUXEMBOURG - LU - LUX - 442 - CTRY_LUXEMBOURG - 352 - verFrBelgiumLux - 6 - MACAU - MO - MAC - 446 - CTRY_MACAU - 853 - - - MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF - MK - MKD - 807 - CTRY_MACEDONIA - 389 - verMacedonian - - MADAGASCAR - MG - MDG - 450 - - - - - MALAWI - MW - MWI - 454 - - - - - MALAYSIA - MY - MYS - 458 - CTRY_MALAYSIA - 60 - - - MALDIVES - MV - MDV - 462 - CTRY_MALDIVES - 960 - - - MALI - ML - MLI - 466 - - - - - MALTA - MT - MLT - 470 - - - verMalta - 22 - MARSHALL ISLANDS - MH - MHL - 584 - - - - - MARTINIQUE - MQ - MTQ - 474 - - - - - MAURITANIA - MR - MRT - 478 - - - - - MAURITIUS - MU - MUS - 480 - - - - - MAYOTTE - YT - MYT - 175 - - - - - MEXICO - MX - MEX - 484 - CTRY_MEXICO - 52 - - - MICRONESIA, FEDERATED STATES OF - FM - FSM - 583 - - - - - MOLDOVA, REPUBLIC OF - MD - MDA - 498 - - - - - MONACO - MC - MCO - 492 - CTRY_MONACO - 33 - - - MONGOLIA - MN - MNG - 496 - CTRY_MONGOLIA - 976 - - - MONTSERRAT - MS - MSR - 500 - - - - - MOROCCO - MA - MAR - 504 - CTRY_MOROCCO - 212 - verArabic - 16 - MOZAMBIQUE - MZ - MOZ - 508 - - - - - MYANMAR - MM - MMR - 104 - - - - - NAMIBIA - NA - NAM - 516 - - - - - NAURU - NR - NRU - 520 - - - - - NEPAL - NP - NPL - 524 - - - verNepal - 106 - NETHERLANDS - NL - NLD - 528 - CTRY_NETHERLANDS - 31 - verNetherlands - 5 - NETHERLANDS ANTILLES - AN - ANT - 530 - - - - - NEW CALEDONIA - NC - NCL - 540 - - - - - NEW ZEALAND - NZ - NZL - 554 - CTRY_NEW_ZEALAND - 64 - - - NICARAGUA - NI - NIC - 558 - CTRY_NICARAGUA - 505 - - - NIGER - NE - NER - 562 - - - - - NIGERIA - NG - NGA - 566 - - - - - NIUE - NU - NIU - 570 - - - - - NORFOLK ISLAND - NF - NFK - 574 - - - - - NORTHERN MARIANA ISLANDS - MP - MNP - 580 - - - - - NORWAY - NO - NOR - 578 - CTRY_NORWAY - 47 - verNorway - 12 - OMAN - OM - OMN - 512 - CTRY_OMAN - 968 - - - PAKISTAN - PK - PAK - 586 - CTRY_PAKISTAN - 92 - verPakistanUrdu, verPunjabi - 34 (U), 95 (P) - PALAU - PW - PLW - 585 - - - - - PANAMA - PA - PAN - 591 - CTRY_PANAMA - 507 - - - PALESTINIAN TERRITORY, OCCUPIED - PS - - - - - - - PAPUA NEW GUINEA - PG - PNG - 598 - - - - - PARAGUAY - PY - PRY - 600 - CTRY_PARAGUAY - 595 - - - PERU - PE - PER - 604 - CTRY_PERU - 51 - - - PHILIPPINES - PH - PHL - 608 - CTRY_PHILIPPINES - 63 - - - PITCAIRN - PN - PCN - 612 - - - - - POLAND - PL - POL - 616 - CTRY_POLAND - 48 - verPoland - 42 - PORTUGAL - PT - PRT - 620 - CTRY_PORTUGAL - 351 - verPortugal - 10 - PUERTO RICO - PR - PRI - 630 - CTRY_PUERTO_RICO - 1 - - - QATAR - QA - QAT - 634 - CTRY_QATAR - 974 - - - REUNION - RE - REU - 638 - - - - - ROMANIA - RO - ROU* - 642 - CTRY_ROMANIA - 40 - verRomania - 39 - RUSSIAN FEDERATION - RU - RUS - 643 - CTRY_RUSSIA - 7 - verRussia - 49 - RWANDA - RW - RWA - 646 - - - - - SAINT KITTS AND NEVIS - KN - KNA - 659 - - - - - SAINT LUCIA - LC - LCA - 662 - - - - - SAINT VINCENT AND THE GRENADINES - VC - VCT - 670 - - - - - SAMOA - WS - WSM - 882 - - - - - SAN MARINO - SM - SMR - 674 - - - - - SAO TOME AND PRINCIPE - ST - STP - 678 - - - - - SAUDI ARABIA - SA - SAU - 682 - CTRY_SAUDI_ARABIA - 966 - verArabic - 16 - SENEGAL - SN - SEN - 686 - - - - - SERBIA AND MONTENEGRO - CS - - - CTRY_SERBIA - 381 - - - SEYCHELLES - SC - SYC - 690 - - - - - SIERRA LEONE - SL - SLE - 694 - - - - - SINGAPORE - SG - SGP - 702 - CTRY_SINGAPORE - 65 - verSingapore - 100 - SLOVAKIA (Slovak Republic) - SK - SVK - 703 - CTRY_SLOVAK - 421 - verSlovak - 57 - SLOVENIA - SI - SVN - 705 - CTRY_SLOVENIA - 386 - verSlovenian - 66 - SOLOMON ISLANDS - SB - SLB - 90 - - - - - SOMALIA - SO - SOM - 706 - - - - - SOUTH AFRICA - ZA - ZAF - 710 - CTRY_SOUTH_AFRICA - 27 - - - SOUTH GEORGIA AND THE SOUTH SANDWICH ISLANDS - GS - - - - - - - SPAIN - ES - ESP - 724 - CTRY_SPAIN - 34 - verSpain - 8 - SRI LANKA - LK - LKA - 144 - - - - - SAINT HELENA - SH - SHN - 654 - - - - - SAINT PIERRE AND MIQUELON - PM - SPM - 666 - - - - - SUDAN - SD - SDN - 736 - - - - - SURINAME - SR - SUR - 740 - - - - - SVALBARD AND JAN MAYEN ISLANDS - SJ - SJM - 744 - - - - - SWAZILAND - SZ - SWZ - 748 - - - - - SWEDEN - SE - SWE - 752 - CTRY_SWEDEN - 46 - verSweden - 7 - SWITZERLAND - CH - CHE - 756 - CTRY_SWITZERLAND - 41 - verFrSwiss(fr), verGrSwiss(de) - 18(fr), 19(de) - SYRIAN ARAB REPUBLIC - SY - SYR - 760 - CTRY_SYRIA - 963 - - - TAIWAN, PROVINCE OF CHINA - TW - TWN - 158 - CTRY_TAIWAN - 886 - verTaiwan - 53 - TAJIKISTAN - TJ - TJK - 762 - - - - - TANZANIA, UNITED REPUBLIC OF - TZ - TZA - 834 - - - - - TATARSTAN - - - - CTRY_TATARSTAN - 7 - - - THAILAND - TH - THA - 764 - CTRY_THAILAND - 66 - verThailand - 54 - TIMOR-LESTE - TL - - - - - - - TOGO - TG - TGO - 768 - - - - - TOKELAU - TK - TKL - 772 - - - - - TONGA - TO - TON - 776 - - - verTonga - 88 - TRINIDAD AND TOBAGO - TT - TTO - 780 - CTRY_TRINIDAD_Y_TOBAGO - 1 - - - TUNISIA - TN - TUN - 788 - CTRY_TUNISIA - 216 - verArabic - 16 - TURKEY - TR - TUR - 792 - CTRY_TURKEY - 90 - verTurkey - 24 - TURKMENISTAN - TM - TKM - 795 - - - - - TURKS AND CAICOS ISLANDS - TC - TCA - 796 - - - - - TUVALU - TV - TUV - 798 - - - - - UGANDA - UG - UGA - 800 - - - - - UKRAINE - UA - UKR - 804 - CTRY_UKRAINE - 380 - verUkraine - 62 - UNITED ARAB EMIRATES - AE - ARE - 784 - CTRY_UAE - 971 - - - UNITED KINGDOM - GB - GBR - 826 - CTRY_UNITED_KINGDOM - 44 - verBritain - 2 - UNITED STATES - US - USA - 840 - CTRY_UNITED_STATES - 1 - verUS - 0 - UNITED STATES MINOR OUTLYING ISLANDS - UM - UMI - 581 - - - - - URUGUAY - UY - URY - 858 - CTRY_URUGUAY - 598 - - - UZBEKISTAN - UZ - UZB - 860 - CTRY_UZBEKISTAN - 7 - - - VANUATU - VU - VUT - 548 - - - - - VATICAN CITY STATE (HOLY SEE) - VA - VAT - 336 - - - - - VENEZUELA - VE - VEN - 862 - CTRY_VENEZUELA - 58 - - - VIET NAM - VN - VNM - 704 - CTRY_VIET_NAM - 84 - verVietnam - - VIRGIN ISLANDS (BRITISH) - VG - VGB - 92 - - - - - VIRGIN ISLANDS (U.S.) - VI - VIR - 850 - - - - - WALLIS AND FUTUNA ISLANDS - WF - WLF - 876 - - - - - WESTERN SAHARA - EH - ESH - 732 - - - - - YEMEN - YE - YEM - 887 - CTRY_YEMEN - 967 - - - YUGOSLAVIA - YU - YUG - 891 - - - - - ZAIRE - ZR - ZAR - 180 - - - - - ZAMBIA - ZM - ZMB - 894 - - - - - ZIMBABWE - ZW - ZWE - 716 - CTRY_ZIMBABWE - 263 - - - '! Item was removed: - ----- Method: ISOLanguageDefinition class>>iso3Countries (in category 'private') ----- - iso3Countries - "ISOLanguageDefinition iso3Countries" - "ISO2Countries := nil. ISO3Countries := nil" - - ISO3Countries ifNil: [self initISOCountries]. - ^ISO3Countries! Item was removed: - ----- Method: ISOLanguageDefinition class>>iso3LanguageDefinition: (in category 'accessing') ----- - iso3LanguageDefinition: aString - ^self iso3LanguageTable at: aString! Item was removed: - ----- Method: ISOLanguageDefinition class>>iso3LanguageTable (in category 'private') ----- - iso3LanguageTable - "ISOLanguageDefinition iso3LanguageTable" - - ^ISO3Table ifNil: [ISO3Table := self initISO3LanguageTable]! Item was removed: - ----- Method: ISOLanguageDefinition class>>isoLanguages (in category 'private') ----- - isoLanguages - "ISO 639: 3-letter codes" - ^'aar aa Afar - abk ab Abkhazian - ace Achinese - ach Acoli - ada Adangme - ady Adyghe; Adygei - afa Afro-Asiatic languages - afh Afrihili - afr af Afrikaans - ain Ainu - aka ak Akan - akk Akkadian - alb/sqi sq Albanian - ale Aleut - alg Algonquian languages - alt Southern Altai - amh am Amharic - ang English, Old (ca.450-1100) - anp Angika - apa Apache languages - ara ar Arabic - arc Official Aramaic (700-300 BCE); Imperial Aramaic (700-300 BCE) - arg an Aragonese - arm/hye hy Armenian - arn Mapudungun; Mapuche - arp Arapaho - art Artificial languages - arw Arawak - asm as Assamese - ast Asturian; Bable; Leonese; Asturleonese - ath Athapascan languages - aus Australian languages - ava av Avaric - ave ae Avestan - awa Awadhi - aym ay Aymara - aze az Azerbaijani - bad Banda languages - bai Bamileke languages - bak ba Bashkir - bal Baluchi - bam bm Bambara - ban Balinese - baq/eus eu Basque - bas Basa - bat Baltic languages - bej Beja; Bedawiyet - bel be Belarusian - bem Bemba - ben bn Bengali - ber Berber languages) - bho Bhojpuri - bih bh Bihari - bik Bikol - bin Bini; Edo - bis bi Bislama - bla Siksika - bnt Bantu languages - bos bs Bosnian - bra Braj - bre br Breton - btk Batak languages - bua Buriat - bug Buginese - bul bg Bulgarian - bur/mya my Burmese - byn Blin; Bilin - cad Caddo - cai Central American Indian languages - car Galibi Carib - cat ca Catalan; Valencian - cau Caucasian languages - ceb Cebuano - cel Celtic languages - cha ch Chamorro - chb Chibcha - che ce Chechen - chg Chagatai - chi/zho zh Chinese - chk Chuukese - chm Mari - chn Chinook jargon - cho Choctaw - chp Chipewyan; Dene Suline - chr Cherokee - chu cu Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic - chv cv Chuvash - chy Cheyenne - cmc Chamic languages - cop Coptic - cor kw Cornish - cos co Corsican - cpe Creoles and pidgins, English based - cpf Creoles and pidgins, French-based - cpp Creoles and pidgins, Portuguese-based - cre cr Cree - crh Crimean Tatar; Crimean Turkish - crp Creoles and pidgins - csb Kashubian - cus Cushitic languages - cze/ces cs Czech - dak Dakota - dan da Danish - dar Dargwa - day Land Dayak languages - del Delaware - den Slave (Athapascan) - dgr Dogrib - din Dinka - div dv Divehi; Dhivehi; Maldivian - doi Dogri - dra Dravidian languages - dsb Lower Sorbian - dua Duala - dum Dutch, Middle (ca.1050-1350) - dut/nld nl Dutch; Flemish - dyu Dyula - dzo dz Dzongkha - efi Efik - egy Egyptian (Ancient) - eka Ekajuk - elx Elamite - eng en English - enm English, Middle (1100-1500) - epo eo Esperanto - est et Estonian - ewe ee Ewe - ewo Ewondo - fan Fang - fao fo Faroese - fat Fanti - fij fj Fijian - fil Filipino; Pilipino - fin fi Finnish - fiu Finno-Ugrian languages) - fon Fon - fre/fra fr French - frm French, Middle (ca.1400-1600) - fro French, Old (842-ca.1400) - frr Northern Frisian - frs Eastern Frisian - fry fy Western Frisian - ful ff Fulah - fur Friulian - gaa Ga - gay Gayo - gba Gbaya - gem Germanic languages - geo/kat ka Georgian - ger/deu de German - gez Geez - gil Gilbertese - gla gd Gaelic; Scottish Gaelic - gle ga Irish - glg gl Galician - glv gv Manx - gmh German, Middle High (ca.1050-1500) - goh German, Old High (ca.750-1050) - gon Gondi - gor Gorontalo - got Gothic - grb Grebo - grc Greek, Ancient (to 1453) - gre/ell el Greek, Modern (1453-) - grn gn Guarani - gsw Swiss German; Alemannic; Alsatian - guj gu Gujarati - gwi Gwich''in - hai Haida - hat ht Haitian; Haitian Creole - hau ha Hausa - haw Hawaiian - heb he Hebrew - her hz Herero - hil Hiligaynon - him Himachali - hin hi Hindi - hit Hittite - hmn Hmong - hmo ho Hiri Motu - hrv hr Croatian - hsb Upper Sorbian - hun hu Hungarian - hup Hupa - iba Iban - ibo ig Igbo - ice/isl is Icelandic - ido io Ido - iii ii Sichuan Yi; Nuosu - ijo Ijo languages - iku iu Inuktitut - ile ie Interlingue; Occidental - ilo Iloko - ina ia Interlingua (International Auxiliary Language Association) - inc Indic languages - ind id Indonesian - ine Indo-European languages - inh Ingush - ipk ik Inupiaq - ira Iranian languages - iro Iroquoian languages - ita it Italian - jav jv Javanese - jbo Lojban - jpn ja Japanese - jpr Judeo-Persian - jrb Judeo-Arabic - kaa Kara-Kalpak - kab Kabyle - kac Kachin; Jingpho - kal kl Kalaallisut; Greenlandic - kam Kamba - kan kn Kannada - kar Karen languages - kas ks Kashmiri - kau kr Kanuri - kaw Kawi - kaz kk Kazakh - kbd Kabardian - kha Khasi - khi Khoisan languages - khm km Central Khmer - kho Khotanese; Sakan - kik ki Kikuyu; Gikuyu - kin rw Kinyarwanda - kir ky Kirghiz; Kyrgyz - kmb Kimbundu - kok Konkani - kom kv Komi - kon kg Kongo - kor ko Korean - kos Kosraean - kpe Kpelle - krc Karachay-Balkar - krl Karelian - kro Kru languages - kru Kurukh - kua kj Kuanyama; Kwanyama - kum Kumyk - kur ku Kurdish - kut Kutenai - lad Ladino - lah Lahnda - lam Lamba - lao lo Lao - lat la Latin - lav lv Latvian - lez Lezghian - lim li Limburgan; Limburger; Limburgish - lin ln Lingala - lit lt Lithuanian - lol Mongo - loz Lozi - ltz lb Luxembourgish; Letzeburgesch - lua Luba-Lulua - lub lu Luba-Katanga - lug lg Ganda - lui Luiseno - lun Lunda - luo Luo (Kenya and Tanzania) - lus Lushai - mac/mkd mk Macedonian - mad Madurese - mag Magahi - mah mh Marshallese - mai Maithili - mak Makasar - mal ml Malayalam - man Mandingo - mao/mri mi Maori - map Austronesian languages - mar mr Marathi - mas Masai - may/msa ms Malay - mdf Moksha - mdr Mandar - men Mende - mga Irish, Middle (900-1200) - mic Mi''kmaq; Micmac - min Minangkabau - mis Uncoded languages - mkh Mon-Khmer languages - mlg mg Malagasy - mlt mt Maltese - mnc Manchu - mni Manipuri - mno Manobo languages - moh Mohawk - mon mn Mongolian - mos Mossi - mul Multiple languages - mun Munda languages - mus Creek - mwl Mirandese - mwr Marwari - myn Mayan languages - myv Erzya - nah Nahuatl languages - nai North American Indian languages - nap Neapolitan - nau na Nauru - nav nv Navajo; Navaho - nbl nr Ndebele, South; South Ndebele - nde nd Ndebele, North; North Ndebele - ndo ng Ndonga - nds Low German; Low Saxon; German, Low; Saxon, Low - nep ne Nepali - new Nepal Bhasa; Newari - nia Nias - nic Niger-Kordofanian languages - niu Niuean - nno nn Norwegian Nynorsk; Nynorsk, Norwegian - nob nb Bokmal, Norwegian; Norwegian Bokmal - nog Nogai - non Norse, Old - nor no Norwegian - nqo N''Ko - nso Pedi; Sepedi; Northern Sotho - nub Nubian languages - nwc Classical Newari; Old Newari; Classical Nepal Bhasa - nya ny Chichewa; Chewa; Nyanja - nym Nyamwezi - nyn Nyankole - nyo Nyoro - nzi Nzima - oci oc Occitan (post 1500) - oji oj Ojibwa - ori or Oriya - orm om Oromo - osa Osage - oss os Ossetian; Ossetic - ota Turkish, Ottoman (1500-1928) - oto Otomian languages - paa Papuan languages - pag Pangasinan - pal Pahlavi - pam Pampanga; Kapampangan - pan pa Panjabi; Punjabi - pap Papiamento - pau Palauan - peo Persian, Old (ca.600-400 B.C.) - per/fas fa Persian - phi Philippine languages) - phn Phoenician - pli pi Pali - pol pl Polish - pon Pohnpeian - por pt Portuguese - pra Prakrit languages - pro Provencal, Old (to 1500);Occitan, Old (to 1500) - pus ps Pushto; Pashto - qaa-qtz Reserved for local use - que qu Quechua - raj Rajasthani - rap Rapanui - rar Rarotongan; Cook Islands Maori - roa Romance languages - roh rm Romansh - rom Romany - rum/ron ro Romanian; Moldavian; Moldovan - run rn Rundi - rup Aromanian; Arumanian; Macedo-Romanian - rus ru Russian - sad Sandawe - sag sg Sango - sah Yakut - sai South American Indian languages - sal Salishan languages - sam Samaritan Aramaic - san sa Sanskrit - sas Sasak - sat Santali - scn Sicilian - sco Scots - sel Selkup - sem Semitic languages - sga Irish, Old (to 900) - sgn Sign Languages - shn Shan - sid Sidamo - sin si Sinhala; Sinhalese - sio Siouan languages - sit Sino-Tibetan languages - sla Slavic languages - slo/slk sk Slovak - slv sl Slovenian - sma Southern Sami - sme se Northern Sami - smi Sami languages - smj Lule Sami - smn Inari Sami - smo sm Samoan - sms Skolt Sami - sna sn Shona - snd sd Sindhi - snk Soninke - sog Sogdian - som so Somali - son Songhai languages - sot st Sotho, Southern - spa es Spanish; Castilian - srd sc Sardinian - srn Sranan Tongo - srp sr Serbian - srr Serer - ssa Nilo-Saharan languages - ssw ss Swati - suk Sukuma - sun su Sundanese - sus Susu - sux Sumerian - swa sw Swahili - swe sv Swedish - syc Classical Syriac - syr Syriac - tah ty Tahitian - tai Tai languages - tam ta Tamil - tat tt Tatar - tel te Telugu - tem Timne - ter Tereno - tet Tetum - tgk tg Tajik - tgl tl Tagalog - tha th Thai - tib/bod bo Tibetan - tig Tigre - tir ti Tigrinya - tiv Tiv - tkl Tokelau - tlh Klingon; tlhIngan-Hol - tli Tlingit - tmh Tamashek - tog Tonga (Nyasa) - ton to Tonga (Tonga Islands) - tpi Tok Pisin - tsi Tsimshian - tsn tn Tswana - tso ts Tsonga - tuk tk Turkmen - tum Tumbuka - tup Tupi languages - tur tr Turkish - tut Altaic languages - tvl Tuvalu - twi tw Twi - tyv Tuvinian - udm Udmurt - uga Ugaritic - uig ug Uighur; Uyghur - ukr uk Ukrainian - umb Umbundu - und Undetermined - urd ur Urdu - uzb uz Uzbek - vai Vai - ven ve Venda - vie vi Vietnamese - vol vo Volapuk - vot Votic - wak Wakashan languages - wal Wolaitta; Wolaytta - war Waray - was Washo - wel/cym cy Welsh - wen Sorbian languages - wln wa Walloon - wol wo Wolof - xal Kalmyk; Oirat - xho xh Xhosa - yao Yao - yap Yapese - yid yi Yiddish - yor yo Yoruba - ypk Yupik languages - zap Zapotec - zbl Blissymbols; Blissymbolics; Bliss - zen Zenaga - zha za Zhuang; Chuang - znd Zande languages - zul zu Zulu - zun Zuni - zxx No linguistic content; Not applicable - zza Zaza; Dimili; Dimli; Kirdki; Kirmanjki; Zazaki'! Item was removed: - ----- Method: ISOLanguageDefinition class>>readISOLanguagesFrom: (in category 'private') ----- - readISOLanguagesFrom: stream - "ISOLanguageDefinition readISOLanguagesFrom: ISOLanguageDefinition isoLanguages readStream " - | languages language code3 index line | - languages := Dictionary new. - [stream atEnd - or: [(line := stream nextLine readStream) atEnd]] - whileFalse: [ - language := ISOLanguageDefinition new. - code3 := line upTo: Character tab. - (index := code3 indexOf: $/) > 0 - ifTrue: [ - language iso3: (code3 copyFrom: 1 to: index-1). - language iso3Alternate: (code3 copyFrom: index+1 to: code3 size)] - ifFalse: [language iso3: code3]. - language - iso2: (line upTo: Character tab); - language: line upToEnd. - languages at: language iso3 put: language]. - ^languages! Item was removed: - ----- Method: ISOLanguageDefinition>>iso2 (in category 'accessing') ----- - iso2 - ^iso2 ifNil: [self iso3]! Item was removed: - ----- Method: ISOLanguageDefinition>>iso2: (in category 'initialize') ----- - iso2: aString - iso2 := aString ifEmpty: [nil] ifNotEmpty: [aString]! Item was removed: - ----- Method: ISOLanguageDefinition>>iso3 (in category 'accessing') ----- - iso3 - ^iso3 ifNil: ['']! Item was removed: - ----- Method: ISOLanguageDefinition>>iso3: (in category 'initialize') ----- - iso3: aString - iso3 := aString ifEmpty: [nil] ifNotEmpty: [aString]! Item was removed: - ----- Method: ISOLanguageDefinition>>iso3Alternate (in category 'accessing') ----- - iso3Alternate - ^iso3Alternate ifNil: ['']! Item was removed: - ----- Method: ISOLanguageDefinition>>iso3Alternate: (in category 'initialize') ----- - iso3Alternate: aString - iso3Alternate := aString ifEmpty: [nil] ifNotEmpty: [aString]! Item was removed: - ----- Method: ISOLanguageDefinition>>language (in category 'accessing') ----- - language - ^language! Item was removed: - ----- Method: ISOLanguageDefinition>>language: (in category 'initialize') ----- - language: aString - language := aString! Item was removed: - NaturalLanguageTranslator subclass: #InternalTranslator - instanceVariableNames: 'generics' - classVariableNames: 'AllKnownPhrases CachedTranslations' - poolDictionaries: '' - category: 'GetText-Localization'! - - !InternalTranslator commentStamp: 'tak 10/19/2007 11:12' prior: 0! - An InternalTranslator is used a translation dictionary in a image. - You can use it without any external translation file. - - Structure: - generics Dictionary -- msgid -> msgstr - ! Item was removed: - ----- Method: InternalTranslator class>>allKnownPhrases (in category 'private') ----- - allKnownPhrases - ^AllKnownPhrases ifNil: [AllKnownPhrases := Dictionary new: 2051]! Item was removed: - ----- Method: InternalTranslator class>>availableLanguageLocaleIDs (in category 'accessing') ----- - availableLanguageLocaleIDs - "Return locale ids for the internal translation dictionary." - "InternalTranslator availableLanguageLocaleIDs" - ^ self cachedTranslations values collect:[:each | each localeID]! Item was removed: - ----- Method: InternalTranslator class>>cachedTranslations (in category 'private') ----- - cachedTranslations - "CachedTranslations := nil" - ^CachedTranslations ifNil: [CachedTranslations := Dictionary new]! Item was removed: - ----- Method: InternalTranslator class>>directoryForLanguage:country:create: (in category 'private loading') ----- - directoryForLanguage: isoLanguage country: isoCountry create: createDir - "Try to locate the <prefs>/locale/<language>{/<country>} folder. - If createDir is set, create the path down to country or language, depending on wether it's specified.. - Return the directory for country or language depending on specification. - If neither exists, nil" - - "NaturalLanguageTranslator directoryForLanguage: 'es' country: nil create: true" - "NaturalLanguageTranslator directoryForLanguage: 'de' country: 'DE' create: true" - "NaturalLanguageTranslator directoryForLanguage: 'en' country: 'US' create: false" - "NaturalLanguageTranslator directoryForLanguage: 'en' country: nil create: true" - - "If this fails, there is nothing we can do about it here" - | localeDir countryDir languageDir | - localeDir := self localeDirCreate: createDir. - localeDir ifNil: [^nil]. - - isoCountry ifNil: [ - languageDir := localeDir directoryNamed: isoLanguage. - createDir - ifTrue: [languageDir assureExistence]. - ^languageDir exists - ifTrue: [languageDir] - ifFalse: [nil]]. - - countryDir := languageDir directoryNamed: isoCountry. - createDir - ifTrue: [countryDir assureExistence]. - - ^countryDir exists - ifTrue: [countryDir] - ifFalse: [nil]! Item was removed: - ----- Method: InternalTranslator class>>directoryForLocaleID:create: (in category 'private loading') ----- - directoryForLocaleID: localeID create: createDir - "Try to locate the <prefs>/locale/<language>{/<country>} folder. - If createDir is set, create the path down to country or language, depending on locale. - Return the directory for country or language depending on locale. - If neither exists, nil" - - "NaturalLanguageTranslator directoryForLanguage: 'de' country: nil readOnly: true" - "NaturalLanguageTranslator directoryForLanguage: 'de' country: 'DE' readOnly: true" - "NaturalLanguageTranslator directoryForLanguage: 'en' country: 'US' readOnly: false" - "NaturalLanguageTranslator directoryForLanguage: 'en' country: nil readOnly: true" - - ^self directoryForLanguage: localeID isoLanguage country: localeID isoCountry create: createDir! Item was removed: - ----- Method: InternalTranslator class>>discardAllTranslations (in category 'class initialization') ----- - discardAllTranslations - AllKnownPhrases := nil. - self resetCaches.! Item was removed: - ----- Method: InternalTranslator class>>fileReaderServicesForFile:suffix: (in category 'file-services') ----- - fileReaderServicesForFile: fullName suffix: suffix - "Answer the file services associated with given file" - ^ (suffix = self translationSuffix) | (suffix = '*') - ifTrue: [{self serviceMergeLanguageTranslations}] - ifFalse: [#()]! Item was removed: - ----- Method: InternalTranslator class>>loadAvailableExternalLocales (in category 'private loading') ----- - loadAvailableExternalLocales - "private - register locales IDs based on the content of the <prefs>/locale/ directory" - | localeDir | - localeDir := self localeDirCreate: false. - localeDir ifNil: [^ #()]. - - localeDir directoryNames - do: [:langDirName | - | langDir | - langDir := localeDir directoryNamed: langDirName. - - (langDir fileNamesMatching: '*.' , self translationSuffix) - ifNotEmpty: [self loadTranslatorForIsoLanguage: langDirName isoCountry: nil]. - - langDir directoryNames - do: [:countryDirName | - | countryDir | - countryDir := langDirName directoryNamed: countryDirName. - (countryDir fileNamesMatching: '*.' , self translationSuffix) - ifNotEmpty: [self loadTranslatorForIsoLanguage: langDirName isoCountry: countryDirName] - ] - ]. - ! Item was removed: - ----- Method: InternalTranslator class>>loadExternalTranslationsFor: (in category 'private loading') ----- - loadExternalTranslationsFor: translator - "Try to load translations from external external files. - The files are located in the <prefs>/locale/<language>{/<country>} folder. - There can be more than one file for each location, so applications can install their own partial translation tables. All files in the specific folder are loaded." - - | translationDir | - translationDir := self directoryForLocaleID: translator localeID create: false. - translationDir ifNil: [ ^nil ]. - (translationDir fileNamesMatching: '*.' , self translationSuffix) - do: [:fileName | translator loadFromFileNamed: (translationDir fullNameFor: fileName)]! Item was removed: - ----- Method: InternalTranslator class>>loadForLocaleIsoString:fromGzippedMimeLiteral: (in category 'file-services') ----- - loadForLocaleIsoString: localeString fromGzippedMimeLiteral: mimeString - "merge the translation from the mime literal." - | stream localeID translator gs rbStream s currentPlatform | - s := Base64MimeConverter mimeDecodeToBytes: mimeString readStream. - s reset. - gs := GZipReadStream on: s. - rbStream := MultiByteBinaryOrTextStream with: gs contents asString. - rbStream converter: UTF8TextConverter new. - rbStream reset. - localeID := LocaleID isoString: localeString. - currentPlatform := Locale currentPlatform. - [Locale - currentPlatform: (Locale localeID: localeID). - stream := ReadStream on: rbStream contents] - ensure: [Locale currentPlatform: currentPlatform]. - translator := self localeID: localeID. - translator loadFromStream: stream. - LanguageEnvironment resetKnownEnvironments! Item was removed: - ----- Method: InternalTranslator class>>loadTranslatorForIsoLanguage:isoCountry: (in category 'private loading') ----- - loadTranslatorForIsoLanguage: isoLanguage isoCountry: isoCountry - "private - load the translations from <prefs>/locale/ directory - the procedure is to assure the existence of a translator for the - given language/country and then load the external translations for this translator" - - | translator | - translator := self newLocaleID: (LocaleID isoLanguage: isoLanguage isoCountry: isoCountry). - - self loadExternalTranslationsFor: translator! Item was removed: - ----- Method: InternalTranslator class>>localeDirCreate: (in category 'private loading') ----- - localeDirCreate: createDir - "Try to locate the <prefs>/locale/ folder. - If createDir is set, try to create the path. - If it doesn't exist, return nil" - - "If this fails, there is nothing we can do about it here" - | prefDir localeDir | - (createDir not - and: [ExternalSettings preferenceDirectory isNil]) - ifTrue: [^ nil]. - - prefDir := ExternalSettings assuredPreferenceDirectory. - prefDir exists - ifFalse: [^nil]. - - - localeDir := prefDir directoryNamed: 'locale'. - createDir - ifTrue: [localeDir assureExistence]. - ^localeDir exists - ifTrue: [localeDir] - ifFalse: [nil]! Item was removed: - ----- Method: InternalTranslator class>>localeID: (in category 'accessing') ----- - localeID: localeID - "For backward compatibility, see NaturalLanguageTranslator >> fileOutHeaderOn:." - ^ self newLocaleID: localeID! Item was removed: - ----- Method: InternalTranslator class>>mergeLegacyTranslators (in category 'accessing') ----- - mergeLegacyTranslators - self availableLanguageLocaleIDs - do: [:localeID | (NaturalLanguageTranslator translators includesKey: localeID) - ifFalse: [NaturalLanguageTranslator translators - at: localeID - put: (self newLocaleID: localeID)]]! Item was removed: - ----- Method: InternalTranslator class>>mergeTranslationFileNamed: (in category 'file-services') ----- - mergeTranslationFileNamed: fileFullNameString - "merge the translation in the file named fileFullNameString" - - | stream localeID translator | - stream := FileStream readOnlyFileNamed: fileFullNameString. - [localeID := LocaleID isoString: stream localName sansPeriodSuffix. - translator := self localeID: localeID. - translator loadFromStream: stream] - ensure: [stream close]. - LanguageEnvironment resetKnownEnvironments. - - ! Item was removed: - ----- Method: InternalTranslator class>>newLocaleID: (in category 'accessing') ----- - newLocaleID: localeID - ^ self cachedTranslations - at: localeID - ifAbsentPut: [self new localeID: localeID]! Item was removed: - ----- Method: InternalTranslator class>>privateStartUp (in category 'class initialization') ----- - privateStartUp - self loadAvailableExternalLocales. - self mergeLegacyTranslators. - ! Item was removed: - ----- Method: InternalTranslator class>>registerPhrase: (in category 'private') ----- - registerPhrase: phrase - "Using a Dictionary so we can lookup existing string instead of creating needless copies when loading a translation." - self allKnownPhrases at: phrase put: phrase! Item was removed: - ----- Method: InternalTranslator class>>registeredPhraseFor: (in category 'private') ----- - registeredPhraseFor: phrase - "Using a Dictionary so we can lookup existing string instead of creating needless copies when loading a translation." - ^self allKnownPhrases at: phrase ifAbsentPut: [phrase]! Item was removed: - ----- Method: InternalTranslator class>>removeLocaleID: (in category 'accessing') ----- - removeLocaleID: localeID - "self removeLocaleID: (LocaleID isoString: 'ja-kids')" - self cachedTranslations - removeKey: localeID - ifAbsent: []. - NaturalLanguageTranslator privateStartUp! Item was removed: - ----- Method: InternalTranslator class>>resetCaches (in category 'class initialization') ----- - resetCaches - CachedTranslations := nil. - ! Item was removed: - ----- Method: InternalTranslator class>>serviceMergeLanguageTranslations (in category 'file-services') ----- - serviceMergeLanguageTranslations - "Answer a service for merging of translation files" - ^ SimpleServiceEntry - provider: self - label: 'merge the translation file' translatedNoop - selector: #mergeTranslationFileNamed: - description: 'merge the translation file into the language named like the file' translatedNoop - buttonLabel: 'merge' translatedNoop! Item was removed: - ----- Method: InternalTranslator class>>services (in category 'file-services') ----- - services - "Answer potential file services associated with this class" - ^ {self serviceMergeLanguageTranslations}! Item was removed: - ----- Method: InternalTranslator class>>translationSuffix (in category 'private') ----- - translationSuffix - ^'translation'! Item was removed: - ----- Method: InternalTranslator>>atRandom (in category 'accessing') ----- - atRandom - - ^ generics atRandom value. - ! Item was removed: - ----- Method: InternalTranslator>>checkPhrase:translation: (in category 'translation') ----- - checkPhrase: phrase translation: translation! Item was removed: - ----- Method: InternalTranslator>>defaultBackgroundColor (in category 'user interface') ----- - defaultBackgroundColor - "answer the receiver's defaultBackgroundColor for views" - ^ Color cyan! Item was removed: - ----- Method: InternalTranslator>>fileOutHeader (in category 'fileIn/fileOut') ----- - fileOutHeader - ^ '''Translation dictionary'''! Item was removed: - ----- Method: InternalTranslator>>fileOutHeaderOn: (in category 'user interface') ----- - fileOutHeaderOn: aStream - aStream binary. - UTF8TextConverter writeBOMOn: aStream. - aStream text. - aStream nextChunkPut: self fileOutHeader; - cr. - aStream timeStamp; cr. - aStream nextPut: $!!. - aStream nextChunkPut: '(' , self class name , ' localeID: ' , id storeString , ')'. - aStream cr! Item was removed: - ----- Method: InternalTranslator>>fileOutHeaderOn:withBOM: (in category 'user interface') ----- - fileOutHeaderOn: aStream withBOM: bomFlag - bomFlag ifTrue: [ - aStream binary. - UTF8TextConverter writeBOMOn: aStream. - aStream text. - ]. - aStream nextChunkPut: self fileOutHeader; - cr. - aStream timeStamp; cr. - aStream nextPut: $!!. - aStream nextChunkPut: '(' , self class name , ' localeID: ' , id storeString , ')'. - aStream cr! Item was removed: - ----- Method: InternalTranslator>>fileOutOn: (in category 'fileIn/fileOut') ----- - fileOutOn: aStream - "self current fileOutOn: Transcript. Transcript endEntry" - self fileOutOn: aStream keys: nil withBOM: true. - ! Item was removed: - ----- Method: InternalTranslator>>fileOutOn:keys:withBOM: (in category 'fileIn/fileOut') ----- - fileOutOn: aStream keys: keys withBOM: bomFlag - "self current fileOutOn: Transcript. Transcript endEntry" - self fileOutHeaderOn: aStream withBOM: bomFlag. - (keys - ifNil: [generics keys asSortedCollection]) - do: [:key | self - nextChunkPut: (generics associationAt: key) - on: aStream]. - keys - ifNil: [self untranslated - do: [:each | self nextChunkPut: each -> '' on: aStream]]. - aStream nextPut: $!!; - cr! Item was removed: - ----- Method: InternalTranslator>>generics (in category 'private') ----- - generics - ^generics ifNil: [generics := Dictionary new]! Item was removed: - ----- Method: InternalTranslator>>isDomainLoaded: (in category 'accessing') ----- - isDomainLoaded: aDomainName - ^true - ! Item was removed: - ----- Method: InternalTranslator>>loadFromFileNamed: (in category 'private store-retrieve') ----- - loadFromFileNamed: fileNameString - "Load translations from an external file" - - | stream | - [stream := FileStream readOnlyFileNamed: fileNameString. - self loadFromStream: stream] - ensure: [stream close]. - self changed: #translations. - self changed: #untranslated. - ! Item was removed: - ----- Method: InternalTranslator>>loadFromRefStream: (in category 'private store-retrieve') ----- - loadFromRefStream: stream - "Load translations from an external file" - | loadedArray refStream | - refStream := ReferenceStream on: stream. - [loadedArray := refStream next] - ensure: [refStream close]. - self processExternalObject: loadedArray ! Item was removed: - ----- Method: InternalTranslator>>loadFromStream: (in category 'private store-retrieve') ----- - loadFromStream: stream - "Load translations from an external file" - | header isFileIn | - header := '''Translation dictionary'''. - isFileIn := (stream next: header size) - = header. - stream reset. - isFileIn - ifTrue: [stream fileInAnnouncing: 'Loading ' translated, stream localName] - ifFalse: [self loadFromRefStream: stream]! Item was removed: - ----- Method: InternalTranslator>>mergeTranslations: (in category 'private store-retrieve') ----- - mergeTranslations: newTranslations - "Merge a new set of translations into the exiting table. - Overwrites existing entries." - - newTranslations keysAndValuesDo: [:key :value | - self rawPhrase: (self class registeredPhraseFor: key) translation: value]. - self changed: #translations. - self changed: #untranslated.! Item was removed: - ----- Method: InternalTranslator>>nextChunkPut:on: (in category 'fileIn/fileOut') ----- - nextChunkPut: anObject on: aStream - | i remainder terminator | - terminator := $!!. - remainder := anObject storeString. - [(i := remainder indexOf: terminator) = 0] - whileFalse: [aStream - nextPutAll: (remainder copyFrom: 1 to: i). - aStream nextPut: terminator. - "double imbedded terminators" - remainder := remainder copyFrom: i + 1 to: remainder size]. - aStream nextPutAll: remainder. - aStream nextPut: terminator; cr.! Item was removed: - ----- Method: InternalTranslator>>phrase:translation: (in category 'translation') ----- - phrase: phraseString translation: translationString - self generics at: phraseString put: translationString asString. - self changed: #translations. - self changed: #untranslated.! Item was removed: - ----- Method: InternalTranslator>>processExternalObject: (in category 'private store-retrieve') ----- - processExternalObject: anArray - "pivate - process the external object" - - "new format -> {translations. untranslated}" - - anArray second do: [:each | self class registerPhrase: each]. - - self mergeTranslations: anArray first! Item was removed: - ----- Method: InternalTranslator>>rawPhrase:translation: (in category 'translation') ----- - rawPhrase: phraseString translation: translationString - self generics at: phraseString put: translationString asString. - ! Item was removed: - ----- Method: InternalTranslator>>rawRemoveUntranslated: (in category 'translation') ----- - rawRemoveUntranslated: untranslated - - self class allKnownPhrases removeKey: untranslated ifAbsent: []. - self changed: #untranslated.! Item was removed: - ----- Method: InternalTranslator>>removeTranslationFor: (in category 'translation') ----- - removeTranslationFor: phraseString - self generics removeKey: phraseString ifAbsent: []. - self changed: #translations. - self changed: #untranslated.! Item was removed: - ----- Method: InternalTranslator>>removeUntranslated: (in category 'translation') ----- - removeUntranslated: untranslated - - self class allKnownPhrases removeKey: untranslated ifAbsent: []. - ! Item was removed: - ----- Method: InternalTranslator>>saveToFileNamed: (in category 'private store-retrieve') ----- - saveToFileNamed: fileNameString - "save the receiver's translations to a file named fileNameString" - | stream | - "Set true if you need to save as binary" - false - ifTrue: [stream := ReferenceStream fileNamed: fileNameString. - stream nextPut: {self translations. self untranslated}. - stream close. - ^ self]. - stream := FileStream fileNamed: fileNameString. - [self fileOutOn: stream] - ensure: [stream close]! Item was removed: - ----- Method: InternalTranslator>>scanFrom: (in category 'fileIn/fileOut') ----- - scanFrom: aStream - "Read a definition of dictionary. - Make sure current locale corresponds my locale id" - | aString newTranslations assoc currentPlatform | - newTranslations := Dictionary new. - currentPlatform := Locale currentPlatform. - [Locale - currentPlatform: (Locale localeID: id). - [aString := aStream nextChunk withSqueakLineEndings. - aString size > 0] - whileTrue: [assoc := Compiler evaluate: aString. - assoc value = '' - ifTrue: [self class registerPhrase: assoc key] - ifFalse: [newTranslations add: assoc]]] - ensure: [Locale currentPlatform: currentPlatform]. - self mergeTranslations: newTranslations! Item was removed: - ----- Method: InternalTranslator>>translate:inDomain: (in category 'translation') ----- - translate: aString inDomain: aDomainName - | translator | - ^ self generics - at: aString - ifAbsent: [self localeID hasParent - ifTrue: [translator := self class cachedTranslations - at: self localeID parent - ifAbsent: [^ aString]. - translator translate: aString inDomain: aDomainName] - ifFalse: [aString]]! Item was removed: - ----- Method: InternalTranslator>>translations (in category 'accessing') ----- - translations - ^self generics! Item was removed: - ----- Method: InternalTranslator>>untranslated (in category 'accessing') ----- - untranslated - | translations | - translations := self translations. - ^self class allKnownPhrases reject: [:each | translations includesKey: each]! Item was changed: ----- Method: LanguageEditor>>checkSpanishPhrase:translation: (in category 'private') ----- checkSpanishPhrase: phraseString translation: translationString "check the translation and aswer a string with a comment or a nil meaning no-comments" | superResult | superResult := self checkPhrase: phraseString translation: translationString. superResult isNil ifFalse: [^ superResult]. "For some reason, MCInstaller couldn't read Spanish character. " "((translationString includes: $?) + and: [(translationString includes: $ø) not]) + ifTrue: [^ 'øOlvidÛ el signo de pregunta?']. - and: [(translationString includes: $¿) not]) - ifTrue: [^ '¿Olvidó el signo de pregunta?']. ((translationString includes: $!!) + and: [(translationString includes: $°) not]) + ifTrue: [^ 'øOlvidÛ el signo de admiraciÛn?']. - and: [(translationString includes: $¡) not]) - ifTrue: [^ '¿Olvidó el signo de admiración?']. " ^ nil ! Item was changed: ----- Method: LanguageEditor>>codeSelectedTranslationAsMimeString (in category 'gui methods') ----- codeSelectedTranslationAsMimeString | keys code tmpStream s2 gzs cont | keys := selectedTranslations collect: [:key | self translations at: key]. code := String streamContents: [:aStream | self translator fileOutOn: aStream keys: keys withBOM: false]. + tmpStream := MultiByteBinaryOrTextStream on: ''. - tmpStream _ MultiByteBinaryOrTextStream on: ''. tmpStream converter: UTF8TextConverter new. tmpStream nextPutAll: code. + s2 := RWBinaryOrTextStream on: ''. - s2 _ RWBinaryOrTextStream on: ''. gzs := GZipWriteStream on: s2. tmpStream reset. gzs nextPutAll: (tmpStream binary contentsOfEntireFile asString) contents. gzs close. s2 reset. + cont := String streamContents: [:strm | - cont _ String streamContents: [:strm | strm nextPutAll: '"Gzip+Base64 encoded translation for;'; cr. strm nextPutAll: '#('. keys do: [:each | strm nextPutAll: '''', each, ''' '.]. strm nextPutAll: ')"'; cr; cr. strm nextPutAll: 'NaturalLanguageTranslator loadForLocaleIsoString: '. strm nextPut: $'. strm nextPutAll: translator localeID isoString. strm nextPut: $'. strm nextPutAll: ' fromGzippedMimeLiteral: '. strm nextPut: $'. strm nextPutAll: (Base64MimeConverter mimeEncode: s2) contents. strm nextPutAll: '''.'. strm cr. ]. (StringHolder new contents: cont) openLabel: 'exported codes in Gzip+Base64 encoding' translated! Item was changed: ----- Method: LanguageEditor>>filterTranslations: (in category 'gui methods') ----- filterTranslations: aString | filter | filter := aString ifNil:['']. "" + translationsFilter := filter. - translationsFilter _ filter. self refreshTranslations. ! Item was changed: ----- Method: LanguageEditor>>getTextExport (in category 'gui methods') ----- getTextExport Cursor wait + showWhile: [GetTextExporter new exportTranslator: self model]! - showWhile: [GetTextExporter2 new exportTranslator: self model]! Item was changed: ----- Method: LanguageEditor>>getTextExportTemplate (in category 'gui methods') ----- getTextExportTemplate Cursor wait + showWhile: [GetTextExporter new exportTemplate] ! - showWhile: [GetTextExporter2 new exportTemplate] ! Item was changed: ----- Method: LanguageEditor>>initializeNewerKeys (in category 'initialization') ----- initializeNewerKeys + newerKeys := Set new. - newerKeys _ Set new. ! Item was changed: ----- Method: LanguageEditor>>selectNewerKeys (in category 'gui methods') ----- selectNewerKeys | index | self deselectAllTranslation. newerKeys do: [:k | + index := self translations indexOf: k ifAbsent: [0]. - index _ self translations indexOf: k ifAbsent: [0]. index > 0 ifTrue: [ self selectedTranslationsAt: index put: true ]. ]. ! Item was changed: ----- Method: LanguageEditor>>translation: (in category 'accessing') ----- translation: aStringOrText "change the translation for the selected phrase" | phrase | self selectedTranslation isZero ifTrue: [^ self]. + phrase := self translations at: self selectedTranslation. - phrase _ self translations at: self selectedTranslation. translator phrase: phrase translation: aStringOrText asString. newerKeys add: phrase. ^ true! Item was changed: ----- Method: LanguageEditor>>translations (in category 'accessing') ----- translations "answet the translator's translations" | allTranslations filterString | translations ifNotNil: [^translations]. allTranslations := self translator translations keys. "" filterString := self translationsFilter. "" filterString isEmpty ifFalse: [allTranslations := allTranslations select: [:each | "" ('*' , filterString , '*' match: each) or: ['*' , filterString , '*' match: (self translator translate: each)]]]. "" + ^ translations := allTranslations asSortedCollection asArray! - ^ translations _ allTranslations asSortedCollection asArray! Item was changed: ----- Method: LanguageEditor>>untranslated (in category 'accessing') ----- untranslated "answer the translator's untranslated phrases" | all filterString | untranslated ifNotNil: [^ untranslated]. all := self translator untranslated. "" filterString := self untranslatedFilter. "" filterString isEmpty ifFalse: [all := all select: [:each | "" ('*' , filterString , '*' match: each) or: ['*' , filterString , '*' match: (self translator translate: each)]]]. "" + ^ untranslated := all asSortedCollection asArray! - ^ untranslated _ all asSortedCollection asArray! Item was removed: - Object subclass: #Locale - instanceVariableNames: 'id shortDate longDate time decimalSymbol digitGrouping currencySymbol currencyNotation measurement offsetLocalToUTC offsetVMToUTC dstActive' - classVariableNames: 'Current CurrentPlatform KnownLocales LanguageSymbols LocaleChangeListeners PlatformEncodings Previous' - poolDictionaries: '' - category: 'GetText-Localization'! - - !Locale commentStamp: '<historical>' prior: 0! - Main comment stating the purpose of this class and relevant relationship to other classes. - - - -
http://www.w3.org/WAI/ER/IG/ert/iso639.htm
-
http://www.oasis-open.org/cover/iso639a.html
- See also -
http://oss.software.ibm.com/cvs/icu/~checkout~/icuhtml/design/language_code…
-
http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.10
- - ISO 3166 -
http://mitglied.lycos.de/buran/knowhow/codes/locales/
- ! Item was removed: - ----- Method: Locale class>>addLocalChangedListener: (in category 'notification') ----- - addLocalChangedListener: anObjectOrClass - self localeChangedListeners add: anObjectOrClass! Item was removed: - ----- Method: Locale class>>clipboadInterpreter (in category 'accessing') ----- - clipboadInterpreter - ^NoConversionClipboardInterpreter new! Item was removed: - ----- Method: Locale class>>current (in category 'accessing') ----- - current - "Current := nil" - Current ifNil: [ - Current := self determineCurrentLocale. - "Transcript show: 'Current locale: ' , Current localeID asString; cr"]. - ^Current! Item was removed: - ----- Method: Locale class>>currentPlatform (in category 'accessing') ----- - currentPlatform - "CurrentPlatform := nil" - CurrentPlatform ifNil: [CurrentPlatform := self determineCurrentLocale]. - ^CurrentPlatform! Item was removed: - ----- Method: Locale class>>currentPlatform: (in category 'accessing') ----- - currentPlatform: locale - CurrentPlatform := locale. - LanguageEnvironment startUp. - ! Item was removed: - ----- Method: Locale class>>currentPlatform:during: (in category 'accessing') ----- - currentPlatform: locale during: aBlock - "Alter current language platform during a block" - | backupPlatform | - backupPlatform := self currentPlatform. - [self currentPlatform: locale. - aBlock value] - ensure: [self currentPlatform: backupPlatform]! Item was removed: - ----- Method: Locale class>>defaultEncodingName: (in category 'platform specific') ----- - defaultEncodingName: languageSymbol - | encodings platformName osVersion | - platformName := SmalltalkImage current platformName. - osVersion := SmalltalkImage current getSystemAttribute: 1002. - encodings := self platformEncodings at: languageSymbol - ifAbsent: [self platformEncodings at: #default]. - encodings at: platformName ifPresent: [:encoding | ^encoding]. - encodings at: platformName , ' ' , osVersion - ifPresent: [:encoding | ^encoding]. - ^encodings at: #default! Item was removed: - ----- Method: Locale class>>defaultInputInterpreter (in category 'platform specific') ----- - defaultInputInterpreter - | platformName osVersion | - platformName := SmalltalkImage current platformName. - osVersion := SmalltalkImage current getSystemAttribute: 1002. - (platformName = 'Win32' and: [osVersion = 'CE']) - ifTrue: [^NoInputInterpreter new]. - platformName = 'Win32' ifTrue: [^MacRomanInputInterpreter new]. - ^NoInputInterpreter new! Item was removed: - ----- Method: Locale class>>determineCurrentLocale (in category 'private') ----- - determineCurrentLocale - "For now just return the default locale. - A smarter way would be to determine the current platforms default locale." - "Locale determineCurrentLocale" - - ^self new determineLocale! Item was removed: - ----- Method: Locale class>>initKnownLocales (in category 'private') ----- - initKnownLocales - | locales | - locales := Dictionary new. - - "Init the locales for which we have translations" - InternalTranslator availableLanguageLocaleIDs do: [:id | - locales at: id put: (Locale new localeID: id)]. - ^locales! Item was removed: - ----- Method: Locale class>>initialize (in category 'class initialization') ----- - initialize - "Locale initialize" - - Smalltalk addToStartUpList: Locale. - Preferences addPreference: #useLocale - categories: #('general') default: false - balloonHelp: 'Use the system locale to set the system language etc at startup'.! Item was removed: - ----- Method: Locale class>>initializePlatformEncodings (in category 'class initialization') ----- - initializePlatformEncodings - "Locale initializePlatformEncodings" - - | platform | - PlatformEncodings isNil ifTrue: [ PlatformEncodings := Dictionary new ]. - - platform := PlatformEncodings at: 'default' ifAbsentPut: Dictionary new. - platform - at: 'default' put: 'iso8859-1'; - at: 'Win32 CE' put: 'utf-8'; - yourself. - - platform := PlatformEncodings at: 'ja' ifAbsentPut: Dictionary new. - platform - at: 'default' put: 'shift-jis'; - at: 'unix' put: 'euc-jp'; - at: 'Win32 CE' put: 'utf-8'; - yourself. - - platform := PlatformEncodings at: 'ko' ifAbsentPut: Dictionary new. - platform - at: 'default' put: 'euc-kr'; - at: 'Win32 CE' put: 'utf-8'; - yourself. - - platform := PlatformEncodings at: 'zh' ifAbsentPut: Dictionary new. - platform - at: 'default' put: 'gb2312'; - at: 'unix' put: 'euc-cn'; - at: 'Win32 CE' put: 'utf-8'; - yourself. - ! Item was removed: - ----- Method: Locale class>>isoLanguage: (in category 'accessing') ----- - isoLanguage: isoLanguage - ^self isoLanguage: isoLanguage isoCountry: nil! Item was removed: - ----- Method: Locale class>>isoLanguage:isoCountry: (in category 'accessing') ----- - isoLanguage: isoLanguage isoCountry: isoCountry - ^self localeID: (LocaleID isoLanguage: isoLanguage isoCountry: isoCountry)! Item was removed: - ----- Method: Locale class>>isoLocale: (in category 'accessing') ----- - isoLocale: aString - ! Item was removed: - ----- Method: Locale class>>knownLocales (in category 'private') ----- - knownLocales - "KnownLocales := nil" - ^KnownLocales ifNil: [KnownLocales := self initKnownLocales]! Item was removed: - ----- Method: Locale class>>languageSymbol: (in category 'accessing') ----- - languageSymbol: languageSymbol - "Locale languageSymbol: #Deutsch" - - ^self isoLanguage: (LanguageSymbols at: languageSymbol)! Item was removed: - ----- Method: Locale class>>localeChanged (in category 'notification') ----- - localeChanged - - #(#ParagraphEditor #BitEditor #FormEditor #StandardSystemController ) - do: [:key | Smalltalk - at: key - ifPresent: [:class | class initialize]]. - PartsBin localeChanged. - Project localeChanged. - PaintBoxMorph localeChanged. - ColorPickerMorph localeChanged. - Preferences localeChanged! Item was removed: - ----- Method: Locale class>>localeChangedGently (in category 'notification') ----- - localeChangedGently - - #(#ParagraphEditor #BitEditor #FormEditor #StandardSystemController ) - do: [:key | Smalltalk - at: key - ifPresent: [:class | class initialize]]. - PartsBin localeChangedGently. - Project localeChangedGently. - PaintBoxMorph localeChangedGently. - ColorPickerMorph localeChangedGently. - Preferences localeChangedGently. - ! Item was removed: - ----- Method: Locale class>>localeChangedListeners (in category 'notification') ----- - localeChangedListeners - ^LocaleChangeListeners ifNil: [LocaleChangeListeners _ OrderedCollection new]! Item was removed: - ----- Method: Locale class>>localeID: (in category 'accessing') ----- - localeID: id - ^self knownLocales at: id ifAbsentPut: [Locale new localeID: id]! Item was removed: - ----- Method: Locale class>>migrateSystem (in category 'private') ----- - migrateSystem - "Locale migrateSystem" - "Do all the necessary operations to switch to the new Locale environment." - - LocaleChangeListeners _ nil. - self - addLocalChangedListener: HandMorph; - addLocalChangedListener: Clipboard; - addLocalChangedListener: Vocabulary; - addLocalChangedListener: PartsBin; - addLocalChangedListener: Project; - addLocalChangedListener: PaintBoxMorph; - yourself! Item was removed: - ----- Method: Locale class>>platformEncodings (in category 'class initialization') ----- - platformEncodings - PlatformEncodings isEmptyOrNil ifTrue: [ self initializePlatformEncodings ]. - ^PlatformEncodings - ! Item was removed: - ----- Method: Locale class>>previous (in category 'accessing') ----- - previous - - ^ Previous - ! Item was removed: - ----- Method: Locale class>>resetKnownLocales (in category 'private') ----- - resetKnownLocales - - KnownLocales := nil - ! Item was removed: - ----- Method: Locale class>>startUp: (in category 'system startUp') ----- - startUp: resuming - | newID | - resuming ifFalse: [^self]. - (Preferences valueOfFlag: #useLocale) - ifTrue: [ - DateAndTime localTimeZone: (TimeZone - offset: (Duration minutes: Locale current offsetLocalToUTC) - name: 'Local Time' - abbreviation: 'LT'). - newID := self current determineLocaleID. - newID ~= LocaleID current - ifTrue: [self switchAndInstallFontToID: newID gently: true]]! Item was removed: - ----- Method: Locale class>>stringForLanguageNameIs: (in category 'accessing') ----- - stringForLanguageNameIs: localeID - "Answer a string for a menu determining whether the given - symbol is the project's natural language" - ^ (self current localeID = localeID - ifTrue: ['<yes>'] - ifFalse: ['<no>']) - , localeID displayName! Item was removed: - ----- Method: Locale class>>switchAndInstallFontToID: (in category 'accessing') ----- - switchAndInstallFontToID: localeID - "Locale switchAndInstallFontToID: (LocaleID isoLanguage: 'de')" - | locale | - locale := Locale localeID: localeID. - locale languageEnvironment isFontAvailable - ifFalse: [(self confirm: 'This language needs additional fonts. - Do you want to install the fonts?' translated) - ifTrue: [locale languageEnvironment installFont] - ifFalse: [^ self]]. - self - switchTo: locale! Item was removed: - ----- Method: Locale class>>switchAndInstallFontToID:gently: (in category 'accessing') ----- - switchAndInstallFontToID: localeID gently: gentlyFlag - - | locale result env envFound ret fontInImage menu | - "Assumption: Rainbow => can try Pango" - "Logic: - - in Sugar, we don't bother asking any questions, and we don't bother automatically loading fonts. - in Sugar, and if the font is available, use the font. - in Sugar, and if the font is not in the image, try to enable Pango. - - if the previous step fails, notify the user that you cannot switch to the language. - - not in Rainbow, - - if the font is in the image, use the font. - - if the font is not in the image, - - ask to choose: - - load font - - try to enable pango, if pango is available - - or cancel. - - if the previous step fails, notify the user that you cannot switch to the language. - Details: - - how to check non-pango font is available: - - if the language environment for the locale doesn't exist, the font is not available. - - if font loading fails, it is not available. - - how to check if the language environment doesn't exist: - - if the locales languageEnvironment is Latin1 but the locale isn't it is not available. - " - locale := Locale localeID: localeID. - env := locale languageEnvironment. - result := true. - envFound := (Latin1Environment supportedLanguages includes: locale isoLanguage) or: [(env isMemberOf: Latin1Environment) not]. - fontInImage := envFound and: [env isFontAvailable]. - SugarLauncher isRunningInSugar ifTrue: [ - fontInImage ifFalse: [ - "font is not available in the image. Even don't ask for font installation." - Cursor wait showWhile: [ - Preferences setPreference: #usePangoRenderer toValue: true. - TextMorph usePango: true]]. - ] ifFalse: [ - fontInImage ifFalse: [ - menu := MenuMorph new. - menu defaultTarget: menu. - envFound ifTrue: [menu add: 'load font' translated selector: #modalSelection: argument: #loadFont]. - RomePluginCanvas pangoIsAvailable ifTrue: [menu add: 'enable Pango' translated selector: #modalSelection: argument: #enablePango]. - menu add: 'cancel' translated selector: #modalSelection: argument: #cancel. - menu addTitle: 'This language needs additional fonts. - Do you want to install the fonts?' translated. - ret := menu invokeModal. - ret = #loadFont ifTrue: [result := env installFont. result ifTrue: [StrikeFont setupDefaultFallbackTextStyle]]. - ret = #enablePango ifTrue: [ - (result := RomePluginCanvas pangoIsAvailable) ifTrue: [ - Cursor wait showWhile: [ - Preferences setPreference: #usePangoRenderer toValue: true. - TextMorph usePango: true]]]. - (ret ~~ #loadFont and: [ret ~~ #enablePango]) ifTrue: [result := false]]]. - - result ifFalse: [self inform: 'Cannot load additional fonts' translated] ifTrue: [self switchTo: locale gently: gentlyFlag]. - ! Item was removed: - ----- Method: Locale class>>switchTo: (in category 'accessing') ----- - switchTo: locale - self switchTo: locale gently: false. - ! Item was removed: - ----- Method: Locale class>>switchTo:gently: (in category 'accessing') ----- - switchTo: locale gently: gentlyFlag - "Locale switchTo: (Locale isoLanguage: 'de')" - | availableID | - availableID := (NaturalLanguageTranslator availableForLocaleID: locale localeID) localeID. - Current localeID = availableID - ifFalse: [Previous _ Current. - CurrentPlatform := Current := Locale localeID: availableID. - NaturalLanguageTranslator localeChanged. - gentlyFlag ifTrue: [self localeChangedGently] ifFalse: [self localeChanged]]! Item was removed: - ----- Method: Locale class>>switchToID: (in category 'accessing') ----- - switchToID: localeID - "Locale switchToID: (LocaleID isoLanguage: 'de') " - - self switchTo: (Locale localeID: localeID)! Item was removed: - ----- Method: Locale>>determineLocale (in category 'accessing') ----- - determineLocale - self localeID: self determineLocaleID! Item was removed: - ----- Method: Locale>>determineLocaleID (in category 'accessing') ----- - determineLocaleID - "Locale current determineLocaleID" - | isoLang isoCountry | - isoLang := self fetchISO2Language - ifNil: [^ self localeID]. - isoCountry := self fetchISOCountry - ifNil: [^ LocaleID isoLanguage: isoLang]. - ^ LocaleID isoLanguage: isoLang isoCountry: isoCountry! Item was removed: - ----- Method: Locale>>fetchISO2Language (in category 'private') ----- - fetchISO2Language - "Locale current fetchISO2Language" - | lang isoLang | - lang := self primLanguage. - lang ifNil: [^nil]. - lang := lang copyUpTo: 0 asCharacter. - lang size == 2 - ifTrue: [^lang]. - isoLang := ISOLanguageDefinition iso3LanguageDefinition: lang. - ^isoLang - ifNil: [nil] - ifNotNil: [isoLang iso2]! Item was removed: - ----- Method: Locale>>fetchISOCountry (in category 'private') ----- - fetchISOCountry - "Locale current fetchISOCountry" - | countryCode | - countryCode := self primCountry - ifNil: [^ nil]. - ^ countryCode copyUpTo: 0 asCharacter! Item was removed: - ----- Method: Locale>>iconForNativeLanguage (in category 'accessing') ----- - iconForNativeLanguage - - ^ (NaturalLanguageFormTranslator localeID: self localeID) translate: 'LanguageNameInNativeLanguage'. - ! Item was removed: - ----- Method: Locale>>isoCountry (in category 'accessing') ----- - isoCountry - ^self localeID isoCountry! Item was removed: - ----- Method: Locale>>isoLanguage (in category 'accessing') ----- - isoLanguage - ^self localeID isoLanguage! Item was removed: - ----- Method: Locale>>isoLocale (in category 'accessing') ----- - isoLocale - "<language>-<country>" - ^self isoCountry - ifNil: [self isoLanguage] - ifNotNil: [self isoLanguage , '-' , self isoCountry]! Item was removed: - ----- Method: Locale>>languageEnvironment (in category 'accessing') ----- - languageEnvironment - ^LanguageEnvironment localeID: self localeID! Item was removed: - ----- Method: Locale>>localeID (in category 'accessing') ----- - localeID - ^id! Item was removed: - ----- Method: Locale>>localeID: (in category 'accessing') ----- - localeID: anID - id := anID! Item was removed: - ----- Method: Locale>>offsetLocalToUTC (in category 'accessing') ----- - offsetLocalToUTC - ^self primTimezone! Item was removed: - ----- Method: Locale>>primCountry (in category 'system primitives') ----- - primCountry - "Returns string with country tag according to ISO 639" - <primitive: 'primitiveCountry' module: 'LocalePlugin'> - ^'US'! Item was removed: - ----- Method: Locale>>primCurrencyNotation (in category 'system primitives') ----- - primCurrencyNotation - "Returns boolean if symbol is pre- (true) or post-fix (false)" - <primitive: 'primitiveCurrencyNotation' module: 'LocalePlugin'> - ^true! Item was removed: - ----- Method: Locale>>primCurrencySymbol (in category 'system primitives') ----- - primCurrencySymbol - "Returns string with currency symbol" - <primitive: 'primitiveCurrencySymbol' module:'LocalePlugin'> - ^'$'! Item was removed: - ----- Method: Locale>>primDST (in category 'system primitives') ----- - primDST - "Returns boolean if DST (daylight saving time) is active or not" - <primitive:'primitiveDaylightSavings' module: 'LocalePlugin'> - ^false! Item was removed: - ----- Method: Locale>>primDecimalSymbol (in category 'system primitives') ----- - primDecimalSymbol - "Returns string with e.g. '.' or ','" - <primitive:'primitiveDecimalSymbol' module: 'LocalePlugin'> - ^'.'! Item was removed: - ----- Method: Locale>>primDigitGrouping (in category 'system primitives') ----- - primDigitGrouping - "Returns string with e.g. '.' or ',' (thousands etc)" - <primitive:'primitiveDigitGroupingSymbol' module: 'LocalePlugin'> - ^','! Item was removed: - ----- Method: Locale>>primLanguage (in category 'system primitives') ----- - primLanguage - "returns string with language tag according to ISO 639" - <primitive:'primitiveLanguage' module: 'LocalePlugin'> - ^'en' - - ! Item was removed: - ----- Method: Locale>>primLongDateFormat (in category 'system primitives') ----- - primLongDateFormat - "Returns the long date format - d day, m month, y year, - double symbol is null padded, single not padded (m=6, mm=06) - dddd weekday - mmmm month name" - <primitive:'primitiveLongDateFormat' module: 'LocalePlugin'> - ^'dddd, mmmm d, yyyy'! Item was removed: - ----- Method: Locale>>primMeasurement (in category 'system primitives') ----- - primMeasurement - "Returns boolean denoting metric(true) or imperial(false)." - <primitive:'primitiveMeasurementMetric' module: 'LocalePlugin'> - ^true - ! Item was removed: - ----- Method: Locale>>primShortDateFormat (in category 'system primitives') ----- - primShortDateFormat - "Returns the short date format - d day, m month, y year, - double symbol is null padded, single not padded (m=6, mm=06) - dddd weekday - mmmm month name" - <primitive:'primitiveShortDateFormat' module: 'LocalePlugin'> - ^'m/d/yy'! Item was removed: - ----- Method: Locale>>primTimeFormat (in category 'system primitives') ----- - primTimeFormat - "Returns string time format - Format is made up of - h hour (h 12, H 24), m minute, s seconds, x (am/pm String) - double symbol is null padded, single not padded (h=6, hh=06)" - <primitive:'primitiveTimeFormat' module: 'LocalePlugin'> - ^'h:mmx'! Item was removed: - ----- Method: Locale>>primTimezone (in category 'system primitives') ----- - primTimezone - "The offset from UTC in minutes, with positive offsets being towards the east. - (San Francisco is in UTC -07*60 and Paris is in UTC +02*60 when daylight savings is in effect)." - <primitive:'primitiveTimezoneOffset' module: 'LocalePlugin'> - ^0! Item was removed: - ----- Method: Locale>>primVMOffsetToUTC (in category 'system primitives') ----- - primVMOffsetToUTC - "Returns the offset in minutes between the VM and UTC. - If the VM does not support UTC times, this is 0. - Also gives us backward compatibility with old VMs as the primitive will fail and we then can return 0." - <primitive:'primitiveVMOffsetToUTC' module: 'LocalePlugin'> - ^0! Item was removed: - ----- Method: Locale>>printOn: (in category 'accessing') ----- - printOn: aStream - super printOn: aStream. - aStream nextPutAll: '(' , id printString , ')'! Item was removed: - Object subclass: #LocaleID - instanceVariableNames: 'isoLanguage isoCountry' - classVariableNames: '' - poolDictionaries: '' - category: 'GetText-Localization'! Item was removed: - ----- Method: LocaleID class>>current (in category 'accessing') ----- - current - ^Locale current localeID! Item was removed: - ----- Method: LocaleID class>>isoLanguage: (in category 'instance creation') ----- - isoLanguage: langString - ^self isoLanguage: langString isoCountry: nil! Item was removed: - ----- Method: LocaleID class>>isoLanguage:isoCountry: (in category 'instance creation') ----- - isoLanguage: langString isoCountry: countryStringOrNil - ^self new isoLanguage: langString isoCountry: countryStringOrNil! Item was removed: - ----- Method: LocaleID class>>isoString: (in category 'instance creation') ----- - isoString: isoString - "Parse the isoString (<language>-<country>) into its components and return the matching LocaleID" - "LocaleID isoString: 'en' " - "LocaleID isoString: 'en-us' " - - | parts language country | - parts := isoString findTokens: #($- ). - language := parts first. - parts size > 1 - ifTrue: [country := parts second]. - ^self isoLanguage: language isoCountry: country! Item was removed: - ----- Method: LocaleID class>>posixName: (in category 'instance creation') ----- - posixName: aString - ^ self - isoString: (aString copyReplaceAll: '_' with: '-')! Item was removed: - ----- Method: LocaleID class>>previous (in category 'accessing') ----- - previous - ^Locale previous localeID! Item was removed: - ----- Method: LocaleID>>= (in category 'comparing') ----- - = anotherObject - self class == anotherObject class - ifFalse: [^false]. - ^self isoLanguage = anotherObject isoLanguage - and: [self isoCountry = anotherObject isoCountry]! Item was removed: - ----- Method: LocaleID>>displayCountry (in category 'accessing') ----- - displayCountry - ^(ISOLanguageDefinition iso2Countries at: self isoCountry asUppercase ifAbsent: [ self isoCountry ]) ! Item was removed: - ----- Method: LocaleID>>displayLanguage (in category 'accessing') ----- - displayLanguage - | language | - language := (ISOLanguageDefinition iso2LanguageTable - at: self isoLanguage - ifAbsent: [^ self isoLanguage]) language. - ^ self isoCountry - ifNil: [language] - ifNotNil: [language , ' (' , self displayCountry , ')']! Item was removed: - ----- Method: LocaleID>>displayName (in category 'accessing') ----- - displayName - "Answer a proper name to represent the receiver in GUI. - - The wording is provided by translations of the magic value - '<language display name>'. - - 'English' -> 'English' - 'German' -> 'Deutsch' - " - | magicPhrase translatedMagicPhrase | - magicPhrase := '<language display name>'. - translatedMagicPhrase := GetTextTranslator translateWithoutLoading: magicPhrase toLocaleID: self. - ^ translatedMagicPhrase = magicPhrase - ifTrue: [self displayLanguage] - ifFalse: [translatedMagicPhrase]! Item was removed: - ----- Method: LocaleID>>hasParent (in category 'testing') ----- - hasParent - ^self isoCountry notNil! Item was removed: - ----- Method: LocaleID>>hash (in category 'comparing') ----- - hash - ^self isoLanguage hash bitXor: self isoCountry hash! Item was removed: - ----- Method: LocaleID>>isoCountry (in category 'accessing') ----- - isoCountry - ^isoCountry! Item was removed: - ----- Method: LocaleID>>isoLanguage (in category 'accessing') ----- - isoLanguage - ^isoLanguage! Item was removed: - ----- Method: LocaleID>>isoLanguage:isoCountry: (in category 'initialize') ----- - isoLanguage: langString isoCountry: countryStringOrNil - isoLanguage := langString. - isoCountry := countryStringOrNil! Item was removed: - ----- Method: LocaleID>>isoString (in category 'accessing') ----- - isoString - ^self asString! Item was removed: - ----- Method: LocaleID>>parent (in category 'accessing') ----- - parent - ^self class isoLanguage: self isoLanguage! Item was removed: - ----- Method: LocaleID>>posixName (in category 'printing') ----- - posixName - "(LocaleID isoString: 'es-MX') posixName" - "(LocaleID isoString: 'es') posixName" - "language[_territory]" - ^ self isoCountry - ifNil: [self isoLanguage] - ifNotNil: [self isoLanguage , '_' , self isoCountry]! Item was removed: - ----- Method: LocaleID>>printOn: (in category 'printing') ----- - printOn: stream - "<language>-<country>" - stream nextPutAll: self isoLanguage. - self isoCountry - ifNotNil: [stream nextPut: $-; nextPutAll: self isoCountry]! Item was removed: - ----- Method: LocaleID>>storeOn: (in category 'printing') ----- - storeOn: aStream - aStream nextPut: $(. - aStream nextPutAll: self class name. - aStream nextPutAll: ' isoString: '. - aStream nextPutAll: '''' , self printString , ''''. - aStream nextPut: $). - ! Item was removed: - ----- Method: LocaleID>>translator (in category 'accessing') ----- - translator - ^ InternalTranslator localeID: self ! Item was changed: ----- Method: MOFile>>fileName: (in category 'public') ----- fileName: path + fileName := path! - fileName _ path! Item was changed: ----- Method: MOFile>>hashPjw: (in category 'experimental') ----- hashPjw: aString "So called `hashpjw' function by P.J. Weinberger [see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools, 1986, 1987 Bell Telephone Laboratories, Inc.] " | stringSize hash g | + stringSize := aString size. + hash := 0. - stringSize _ aString size. - hash _ 0. 1 to: stringSize do: [:pos | + hash := hash bitShift: 4. + hash := hash + ((aString at: pos) asInteger). + g := hash bitAnd: 16rF0000000. - hash _ hash bitShift: 4. - hash _ hash + ((aString at: pos) asInteger). - g _ hash bitAnd: 16rF0000000. g = 0 ifFalse: [ + hash := hash bitXor: (g bitShift: -24). + hash := hash bitXor: g. - hash _ hash bitXor: (g bitShift: -24). - hash _ hash bitXor: g. ] ]. ^hash. ! Item was changed: ----- Method: MOFile>>load1:localeID: (in category 'experimental') ----- load1: aFileName localeID: id "CASE1: all of strings are loaded. translation strings are converted to Squeak format on load time. original-string/index pairs are registerd to Dictionary on load time. hash search can't be used" | strm originalTable translatedTable | + localeID := id. - localeID _ id. strm_ FileStream readOnlyFileNamed: aFileName. + fileName := aFileName. - fileName _ aFileName. [ self loadHeader: strm. + originalTable := self loadStringPointers: strm - originalTable _ self loadStringPointers: strm offset: originalTableOffset. + originalStrings := self loadStrings: strm - originalStrings _ self loadStrings: strm pointers: originalTable. + translatedTable := self loadStringPointers: strm - translatedTable _ self loadStringPointers: strm offset: translatedTableOffset. + translatedStrings := self loadStrings: strm - translatedStrings _ self loadStrings: strm pointers: translatedTable encoding: 'utf8' languageEnvironment: (Locale localeID: localeID) languageEnvironment . + translations := Dictionary new. - translations _ Dictionary new. 1 to: nStrings do: [:index | | key | + key := originalStrings at: index. - key _ originalStrings at: index. translations at: key put: index. ]. + originalTable := nil. - originalTable _ nil. ] ensure: [strm close].! Item was changed: ----- Method: MOFile>>load4:localeID: (in category 'experimental') ----- load4: aFileName localeID: id "CASE4: all of strings are loaded. loading and conversion of translation strings to Squeak format is executed on initialization time. only hash search can be used" | strm originalTable translatedTable | + localeID := id. - localeID _ id. strm_ FileStream readOnlyFileNamed: aFileName. + fileName := aFileName. - fileName _ aFileName. [ self loadHeader: strm. self loadHashTable: strm. + originalTable := self loadStringPointers: strm - originalTable _ self loadStringPointers: strm offset: originalTableOffset. + originalStrings := self loadStrings: strm - originalStrings _ self loadStrings: strm pointers: originalTable. + translatedTable := self loadStringPointers: strm - translatedTable _ self loadStringPointers: strm offset: translatedTableOffset. + translatedStrings := self loadStrings: strm - translatedStrings _ self loadStrings: strm pointers: translatedTable encoding: 'utf-8' languageEnvironment: (Locale localeID: localeID) languageEnvironment . ] ensure: [strm close].! Item was changed: ----- Method: MOFile>>load:localeID: (in category 'public') ----- load: aFileName localeID: id "all of original/translated strings are loaded. but conversion of translation string (in utf-8 bytestring) to Squeak format will be defered. original-string/index pairs are registerd to Dictionary on load time. hash search can't be used" | strm originalTable translatedTable | + localeID := id. - localeID _ id. strm_ FileStream readOnlyFileNamed: aFileName. + fileName := aFileName. - fileName _ aFileName. [ self loadHeader: strm. + originalTable := self loadStringPointers: strm - originalTable _ self loadStringPointers: strm offset: originalTableOffset. + originalStrings := self loadStrings: strm - originalStrings _ self loadStrings: strm pointers: originalTable. + translatedTable := self loadStringPointers: strm - translatedTable _ self loadStringPointers: strm offset: translatedTableOffset. + translatedStrings := self loadStrings: strm - translatedStrings _ self loadStrings: strm pointers: translatedTable. + translations := Dictionary new: nStrings * 2. "make too enough room to avoid #grow" - translations _ Dictionary new: nStrings * 2. "make too enough room to avoid #grow" 1 to: nStrings do: [:index | | key | + key := originalStrings at: index. - key _ originalStrings at: index. translations at: key put: index. ]. + originalStrings := nil. - originalStrings _ nil. ] ensure: [strm close].! Item was changed: ----- Method: MOFile>>loadHashTable: (in category 'experimental') ----- loadHashTable: strm | entry | + hashTable := IntegerArray ofSize: hashTableSize. - hashTable _ IntegerArray ofSize: hashTableSize. strm binary. strm position: hashTableOffset. 1 to: hashTableSize do: [:index | + entry := self nextInt32From: strm. - entry _ self nextInt32From: strm. hashTable at: index put: entry. ]! Item was changed: ----- Method: MOFile>>loadHeader: (in category 'private') ----- loadHeader: strm strm binary. + magic := strm uint32. - magic _ strm uint32. magic = 16rDE120495 + ifTrue: [isLittleEndian := true] - ifTrue: [isLittleEndian _ true] ifFalse: [ magic = 16r950412DE + ifTrue: [isLittleEndian := false] - ifTrue: [isLittleEndian _ false] ifFalse: [ self error: 'invalid MO'] ]. + revision := self nextInt32From: strm. + nStrings := self nextInt32From: strm. + originalTableOffset := self nextInt32From: strm. + translatedTableOffset := self nextInt32From: strm. + hashTableSize := self nextInt32From: strm. + hashTableOffset := self nextInt32From: strm. - revision _ self nextInt32From: strm. - nStrings _ self nextInt32From: strm. - originalTableOffset _ self nextInt32From: strm. - translatedTableOffset _ self nextInt32From: strm. - hashTableSize _ self nextInt32From: strm. - hashTableOffset _ self nextInt32From: strm. ! Item was changed: ----- Method: MOFile>>loadString:pointer:length: (in category 'private') ----- loadString: strm pointer: top length: len | str | + str := ByteString new: len. - str _ ByteString new: len. strm position: top. strm nextInto: str. ^str replaceAll: Lf with: Cr. ! Item was changed: ----- Method: MOFile>>loadStringPointers:offset: (in category 'private') ----- loadStringPointers: strm offset: tableOffset "returns tupple {arrayOfOffsetToString arrayOfLengthOfString}" | offsetTable lenTable len offset tupple | + offsetTable := IntegerArray new: nStrings. + lenTable := IntegerArray new: nStrings. - offsetTable _ IntegerArray new: nStrings. - lenTable _ IntegerArray new: nStrings. strm binary. strm position: tableOffset. 1 to: nStrings do: [:index | + len := self nextInt32From: strm. + offset := self nextInt32From: strm. - len _ self nextInt32From: strm. - offset _ self nextInt32From: strm. offsetTable at: index put: offset. lenTable at: index put: len. ]. + tupple := Array new: 2. - tupple _ Array new: 2. tupple at: 1 put: offsetTable. tupple at: 2 put: lenTable. ^tupple ! Item was changed: ----- Method: MOFile>>loadStrings:pointers:encoding:languageEnvironment: (in category 'private') ----- loadStrings: strm pointers: tupple encoding: encodingName languageEnvironment: env | strings rawStr str offsetTable lenTable | + offsetTable := tupple first. + lenTable := tupple second. + strings := Array new: nStrings. - offsetTable _ tupple first. - lenTable _ tupple second. - strings _ Array new: nStrings. 1 to: nStrings do: [:index | + rawStr := self loadString: strm - rawStr _ self loadString: strm pointer: (offsetTable at: index) length: (lenTable at: index). + str := encodingName isNil ifTrue: [rawStr] - str _ encodingName isNil ifTrue: [rawStr] ifFalse: [ encodingName = 'utf8' ifTrue: [rawStr utf8ToSqueak applyLanguageInfomation: env] ifFalse: [self error: 'this encoding isn''t supported'] ]. strings at: index put: str. ]. ^strings.! Item was changed: ----- Method: MOFile>>searchByDictionary: (in category 'public') ----- searchByDictionary: aString | index | + index := translations at: aString ifAbsent: [^nil]. - index _ translations at: aString ifAbsent: [^nil]. ^self translatedString: index ! Item was changed: ----- Method: MOFile>>searchByHash: (in category 'experimental') ----- searchByHash: aString | hashValue nstr index incr key | + hashValue := self hashPjw: aString. + incr := 1 + (hashValue \\ (hashTableSize -2)). + index := (hashValue \\ hashTableSize) . + [ nstr := (hashTable at: index +1 ). - hashValue _ self hashPjw: aString. - incr _ 1 + (hashValue \\ (hashTableSize -2)). - index _ (hashValue \\ hashTableSize) . - [ nstr _ (hashTable at: index +1 ). nstr = 0 ifTrue: [^nil]. + key := self originalString: nstr. - key _ self originalString: nstr. key = aString ifTrue: [^self translatedString: nstr]. index >= (hashTableSize - incr) + ifTrue: [index := index - (hashTableSize - incr) ] + ifFalse:[index := index + incr]. - ifTrue: [index _ index - (hashTableSize - incr) ] - ifFalse:[index _ index + incr]. ] doWhileTrue: true.! Item was changed: ----- Method: MOFile>>translateByHash: (in category 'experimental') ----- translateByHash: aString | trans | + trans := self searchByHash: aString. - trans _ self searchByHash: aString. trans isNil ifTrue: [^aString] ifFalse: [^trans]. ! Item was changed: ----- Method: MOFile>>translatedString: (in category 'private') ----- translatedString: index "KNOWN PROBLEM: conversion is executed everytimes this method called" | str | + str := translatedStrings at: index. - str _ translatedStrings at: index. ^str utf8ToSqueak applyLanguageInfomation: (Locale localeID: localeID) languageEnvironment. ! Item was removed: - Object subclass: #NaturalLanguageFormTranslator - instanceVariableNames: 'id generics' - classVariableNames: 'CachedTranslations' - poolDictionaries: '' - category: 'GetText-Localization'! Item was removed: - ----- Method: NaturalLanguageFormTranslator class>>bitmapForJapanese (in category 'as yet unclassified') ----- - bitmapForJapanese - - ^ (Form - extent: 54@17 - depth: 16 - fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65536 0 1 65537 65537 65537 65537 0 0 0 0 1 0 0 0 0 65537 65537 1 65537 65537 65536 1 0 0 0 1 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 65536 0 0 65536 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 1 65537 65537 65536 1 0 0 0 1 0 0 65536 0 0 1 0 0 0 1 0 1 65537 65537 65537 65537 65537 65537 0 0 0 1 65537 65537 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 65537 65536 0 0 0 65537 65537 0 65536 1 0 0 0 65536 1 0 0 0 1 65537 65537 65537 65537 0 0 0 1 1 1 0 0 0 0 0 0 65536 1 0 0 0 65536 1 0 0 0 1 0 0 0 1 0 0 0 1 1 1 0 0 0 65537 65537 65537 65537 65537 65537 0 0 65536 1 0 0 0 1 0 0 0 1 0 0 0 65536 1 0 65536 0 0 0 0 0 0 0 0 0 0 65536 1 0 0 0 1 0 0 0 1 0 0 1 0 1 0 1 0 0 65537 65537 1 65537 65537 65536 0 0 65536 1 0 0 0 1 0 0 0 1 0 0 65536 65537 65537 65537 65536 65536 0 65536 1 1 0 0 65536 0 0 65536 0 65536 0 0 1 0 0 0 1 0 1 0 0 1 0 0 1 0 65536 1 1 0 0 65536 0 1 0 0 65536 0 0 1 65537 65537 65537 65537 0 0 0 0 1 0 0 0 0 65537 65537 1 65537 65537 65536 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 65536 0 0 0 65536 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0) - offset: 0@0)! Item was removed: - ----- Method: NaturalLanguageFormTranslator class>>cachedTranslations (in category 'accessing') ----- - cachedTranslations - "CachedTranslations := nil" - ^CachedTranslations ifNil: [CachedTranslations := Dictionary new]! Item was removed: - ----- Method: NaturalLanguageFormTranslator class>>cleanUp (in category 'class initialization') ----- - cleanUp - "Flush caches" - - CachedTranslations := nil! Item was removed: - ----- Method: NaturalLanguageFormTranslator class>>initializeJapaneseBitmap (in category 'as yet unclassified') ----- - initializeJapaneseBitmap - - (self localeID: (LocaleID isoString: 'ja')) name: 'LanguageNameInNativeLanguage' form: self bitmapForJapanese. - ! Item was removed: - ----- Method: NaturalLanguageFormTranslator class>>isoLanguage: (in category 'accessing') ----- - isoLanguage: isoLanguage - "Return the generic language translator as there is no information about the country code" - - ^self isoLanguage: isoLanguage isoCountry: nil! Item was removed: - ----- Method: NaturalLanguageFormTranslator class>>isoLanguage:isoCountry: (in category 'accessing') ----- - isoLanguage: isoLanguage isoCountry: isoCountry - ^self localeID: (LocaleID isoLanguage: isoLanguage isoCountry: isoCountry)! Item was removed: - ----- Method: NaturalLanguageFormTranslator class>>loadFormsFrom: (in category 'i/o') ----- - loadFormsFrom: aStream - - | rr pair inst | - rr _ ReferenceStream on: aStream. - pair _ rr next. - inst _ self localeID: (LocaleID isoString: pair first). - pair second associationsDo: [:assoc | - inst name: assoc key form: assoc value. - ]. - ^ inst. - ! Item was removed: - ----- Method: NaturalLanguageFormTranslator class>>localeID: (in category 'accessing') ----- - localeID: localeID - ^ self cachedTranslations - at: localeID - ifAbsentPut: [self new localeID: localeID]! Item was removed: - ----- Method: NaturalLanguageFormTranslator>>generics (in category 'accessing') ----- - generics - ^generics ifNil: [generics := Dictionary new]! Item was removed: - ----- Method: NaturalLanguageFormTranslator>>localeID (in category 'accessing') ----- - localeID - ^id! Item was removed: - ----- Method: NaturalLanguageFormTranslator>>localeID: (in category 'accessing') ----- - localeID: anID - id := anID! Item was removed: - ----- Method: NaturalLanguageFormTranslator>>name:form: (in category 'accessing') ----- - name: formName form: translatedForm - self generics at: formName put: translatedForm. - ! Item was removed: - ----- Method: NaturalLanguageFormTranslator>>saveFormsOn: (in category 'i/o') ----- - saveFormsOn: aStream - - | rr | - rr _ ReferenceStream on: aStream. - rr nextPut: {id isoString. generics}. - rr close. - ! Item was removed: - ----- Method: NaturalLanguageFormTranslator>>translate: (in category 'utilities') ----- - translate: aString - - ^ (self generics - at: aString ifAbsent: [nil]) deepCopy. - - "Do you like to write 'form ifNotNil: [form deepCopy]'?" - ! Item was removed: - Object subclass: #NaturalLanguageTranslator - instanceVariableNames: 'id' - classVariableNames: 'Translators' - poolDictionaries: '' - category: 'GetText-Localization'! - - !NaturalLanguageTranslator commentStamp: '<historical>' prior: 0! - abstract class of natural language translator. - Class side manages and holds loaded instances of concrete classes.! Item was removed: - ----- Method: NaturalLanguageTranslator class>>availableForLocaleID: (in category 'accessing') ----- - availableForLocaleID: localeID - "Answer available locale ID. - If translator is not found for correct locale ID, then isoLanguage is - attempted for the key." - ^ self translators - at: localeID - ifAbsent: [localeID hasParent - ifTrue: [self translators - at: localeID parent - ifAbsent: [self default]] - ifFalse: [self default]]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>availableLanguageLocaleIDs (in category 'accessing') ----- - availableLanguageLocaleIDs - "Return the locale ids for the currently available languages. - Meaning those which either internally or externally have - translations available." - "NaturalLanguageTranslator availableLanguageLocaleIDs" - ^ self translators values collect:[:each | each localeID]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>cleanUpCache (in category 'private') ----- - cleanUpCache - "NaturalLanguageTranslator cleanUpCache" - - self cachedTranslations keys do: [:key | - key isoLanguage size > 2 ifTrue: [self cachedTranslations removeKey: key]]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>current (in category 'accessing') ----- - current - ^ self availableForLocaleID: LocaleID current! Item was removed: - ----- Method: NaturalLanguageTranslator class>>default (in category 'accessing') ----- - default - "Answer translator for backstop" - "self default translate: 'test'" - ^ self new - localeID: (LocaleID isoLanguage: 'en')! Item was removed: - ----- Method: NaturalLanguageTranslator class>>directoryForLanguage:country:create: (in category 'private loading') ----- - directoryForLanguage: isoLanguage country: isoCountry create: createDir - "Try to locate the <prefs>/locale/<language>{/<country>} folder. - If createDir is set, create the path down to country or language, depending on wether it's specified.. - Return the directory for country or language depending on specification. - If neither exists, nil" - - "NaturalLanguageTranslator directoryForLanguage: 'es' country: nil create: true" - "NaturalLanguageTranslator directoryForLanguage: 'de' country: 'DE' create: true" - "NaturalLanguageTranslator directoryForLanguage: 'en' country: 'US' create: false" - "NaturalLanguageTranslator directoryForLanguage: 'en' country: nil create: true" - - "If this fails, there is nothing we can do about it here" - | localeDir countryDir languageDir | - localeDir := self localeDirCreate: createDir. - localeDir ifNil: [^nil]. - - isoCountry ifNil: [ - languageDir := localeDir directoryNamed: isoLanguage. - createDir - ifTrue: [languageDir assureExistence]. - ^languageDir exists - ifTrue: [languageDir] - ifFalse: [nil]]. - - countryDir := languageDir directoryNamed: isoCountry. - createDir - ifTrue: [countryDir assureExistence]. - - ^countryDir exists - ifTrue: [countryDir] - ifFalse: [nil]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>directoryForLocaleID:create: (in category 'private loading') ----- - directoryForLocaleID: localeID create: createDir - "Try to locate the <prefs>/locale/<language>{/<country>} folder. - If createDir is set, create the path down to country or language, depending on locale. - Return the directory for country or language depending on locale. - If neither exists, nil" - - "NaturalLanguageTranslator directoryForLanguage: 'de' country: nil readOnly: true" - "NaturalLanguageTranslator directoryForLanguage: 'de' country: 'DE' readOnly: true" - "NaturalLanguageTranslator directoryForLanguage: 'en' country: 'US' readOnly: false" - "NaturalLanguageTranslator directoryForLanguage: 'en' country: nil readOnly: true" - - ^self directoryForLanguage: localeID isoLanguage country: localeID isoCountry create: createDir! Item was removed: - ----- Method: NaturalLanguageTranslator class>>domainRegistered: (in category 'accessing') ----- - domainRegistered: aDomainName - "notify that new TextDomain is registered" - self translators do: [:each | each domainRegistered: aDomainName]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>domainUnregistered: (in category 'accessing') ----- - domainUnregistered: aDomainName - "notify that new TextDomain is unregistered" - self translators do: [:each | each domainUnregistered: aDomainName]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>fileReaderServicesForFile:suffix: (in category 'file-services') ----- - fileReaderServicesForFile: fullName suffix: suffix - "Answer the file services associated with given file" - ^ (suffix = self translationSuffix) | (suffix = '*') - ifTrue: [{self serviceMergeLanguageTranslations}] - ifFalse: [#()]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>initialize (in category 'class initialization') ----- - initialize - Smalltalk addToStartUpList: NaturalLanguageTranslator after: FileDirectory. - ! Item was removed: - ----- Method: NaturalLanguageTranslator class>>isoLanguage: (in category 'accessing') ----- - isoLanguage: isoLanguage - "Return the generic language translator as there is no information about the country code" - - ^self isoLanguage: isoLanguage isoCountry: nil! Item was removed: - ----- Method: NaturalLanguageTranslator class>>isoLanguage:isoCountry: (in category 'accessing') ----- - isoLanguage: isoLanguage isoCountry: isoCountry - ^self localeID: (LocaleID isoLanguage: isoLanguage isoCountry: isoCountry)! Item was removed: - ----- Method: NaturalLanguageTranslator class>>loadAvailableExternalLocales (in category 'private loading') ----- - loadAvailableExternalLocales - "private - register locales IDs based on the content of the <prefs>/locale/ directory" - | localeDir | - localeDir := self localeDirCreate: false. - localeDir ifNil: [^ #()]. - localeDir directoryNames - do: [:langDirName | - | langDir | - langDir := localeDir directoryNamed: langDirName. - (langDir fileNamesMatching: '*.' , self translationSuffix) - ifNotEmpty: [self loadTranslatorForIsoLanguage: langDirName isoCountry: nil]. - langDir directoryNames - do: [:countryDirName | - | countryDir | - countryDir := langDir directoryNamed: countryDirName. - (countryDir fileNamesMatching: '*.' , self translationSuffix) - ifNotEmpty: [self loadTranslatorForIsoLanguage: langDirName isoCountry: countryDirName] - ] - ]. - ! Item was removed: - ----- Method: NaturalLanguageTranslator class>>loadAvailableLocales (in category 'private loading') ----- - loadAvailableLocales - "This loads the default locale and all external locales" - - | defaultID | - defaultID := LocaleID current. - self cachedTranslations at: defaultID ifAbsent: [self localeID: defaultID]. - self loadAvailableExternalLocales.! Item was removed: - ----- Method: NaturalLanguageTranslator class>>loadExternalTranslationsFor: (in category 'private loading') ----- - loadExternalTranslationsFor: translator - "Try to load translations from external external files. - The files are located in the <prefs>/locale/<language>{/<country>} folder. - There can be more than one file for each location, so applications can install their own partial translation tables. All files in the specific folder are loaded." - - | translationDir | - translationDir := self directoryForLocaleID: translator localeID create: false. - translationDir ifNil: [ ^nil ]. - (translationDir fileNamesMatching: '*.' , self translationSuffix) - do: [:fileName | translator loadFromFileNamed: (translationDir fullNameFor: fileName)]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>loadForLocaleIsoString:fromGzippedMimeLiteral: (in category 'file-services') ----- - loadForLocaleIsoString: localeString fromGzippedMimeLiteral: mimeString - "merge the translation from the mime literal." - | stream localeID translator gs rbStream s currentPlatform | - s := Base64MimeConverter mimeDecodeToBytes: mimeString readStream. - s reset. - gs := GZipReadStream on: s. - rbStream := MultiByteBinaryOrTextStream with: gs contents asString. - rbStream converter: UTF8TextConverter new. - rbStream reset. - localeID := LocaleID isoString: localeString. - currentPlatform := Locale currentPlatform. - [Locale - currentPlatform: (Locale localeID: localeID). - stream := ReadStream on: rbStream contents] - ensure: [Locale currentPlatform: currentPlatform]. - translator := self localeID: localeID. - translator loadFromStream: stream. - LanguageEnvironment resetKnownEnvironments! Item was removed: - ----- Method: NaturalLanguageTranslator class>>loadTranslatorForIsoLanguage:isoCountry: (in category 'private loading') ----- - loadTranslatorForIsoLanguage: isoLanguage isoCountry: isoCountry - "private - load the translations from <prefs>/locale/ directory - the procedure is to assure the existence of a translator for the - given language/country and then load the external translations for this translator" - - | translator | - translator := self localeID: (LocaleID isoLanguage: isoLanguage isoCountry: isoCountry). - - self loadExternalTranslationsFor: translator! Item was removed: - ----- Method: NaturalLanguageTranslator class>>localeChanged (in category 'accessing') ----- - localeChanged - "notify some project starts to use this locale. - this facility may use the event to load translation data dynamically" - self current setCurrent - ! Item was removed: - ----- Method: NaturalLanguageTranslator class>>localeDirCreate: (in category 'private loading') ----- - localeDirCreate: createDir - "Try to locate the <prefs>/locale/ folder. - If createDir is set, try to create the path. - If it doesn't exist, return nil" - - "If this fails, there is nothing we can do about it here" - | prefDir localeDir | - (createDir not - and: [ExternalSettings preferenceDirectory isNil]) - ifTrue: [^ nil]. - - prefDir := ExternalSettings assuredPreferenceDirectory. - prefDir exists - ifFalse: [^nil]. - - - localeDir := prefDir directoryNamed: 'locale'. - createDir - ifTrue: [localeDir assureExistence]. - ^localeDir exists - ifTrue: [localeDir] - ifFalse: [nil]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>localeID: (in category 'accessing') ----- - localeID: localeID - ^ self cachedTranslations - at: localeID - ifAbsentPut: [self new localeID: localeID]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>mergeTranslationFileNamed: (in category 'file-services') ----- - mergeTranslationFileNamed: fileFullNameString - "merge the translation in the file named fileFullNameString" - - FileStream readOnlyFileNamed: fileFullNameString do: [:stream | - | localeID translator | - localeID := LocaleID isoString: stream localName sansPeriodSuffix. - translator := self localeID: localeID. - translator loadFromStream: stream]. - LanguageEnvironment resetKnownEnvironments. - - ! Item was removed: - ----- Method: NaturalLanguageTranslator class>>privateStartUp (in category 'class initialization') ----- - privateStartUp - self resetCaches. - GetTextTranslator privateStartUp. - InternalTranslator privateStartUp. - self localeChanged.! Item was removed: - ----- Method: NaturalLanguageTranslator class>>registerPhrase: (in category 'private') ----- - registerPhrase: phrase - "Using a Dictionary so we can lookup existing string instead of creating needless copies when loading a translation." - self allKnownPhrases at: phrase put: phrase! Item was removed: - ----- Method: NaturalLanguageTranslator class>>registeredPhraseFor: (in category 'private') ----- - registeredPhraseFor: phrase - "Using a Dictionary so we can lookup existing string instead of creating needless copies when loading a translation." - ^self allKnownPhrases at: phrase ifAbsentPut: [phrase]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>removeLocaleID: (in category 'accessing') ----- - removeLocaleID: localeID - "self removeLocaleID: (LocaleID isoString: 'ja-kids')" - ^ self translators - removeKey: localeID - ifAbsent: []! Item was removed: - ----- Method: NaturalLanguageTranslator class>>resetCaches (in category 'class initialization') ----- - resetCaches - Translators := nil.! Item was removed: - ----- Method: NaturalLanguageTranslator class>>serviceMergeLanguageTranslations (in category 'file-services') ----- - serviceMergeLanguageTranslations - "Answer a service for merging of translation files" - ^ SimpleServiceEntry - provider: self - label: 'merge the translation file' - selector: #mergeTranslationFileNamed: - description: 'merge the translation file into the language named like the file' - buttonLabel: 'merge'! Item was removed: - ----- Method: NaturalLanguageTranslator class>>services (in category 'file-services') ----- - services - "Answer potential file services associated with this class" - ^ {self serviceMergeLanguageTranslations}! Item was removed: - ----- Method: NaturalLanguageTranslator class>>startUp: (in category 'class initialization') ----- - startUp: resuming - resuming - ifFalse: [^ self]. - self privateStartUp.! Item was removed: - ----- Method: NaturalLanguageTranslator class>>translate:toLocaleID: (in category 'translation') ----- - translate: aString toLocaleID: localeID - "translate for default domain" - ^ (self availableForLocaleID: localeID) - translate: aString! Item was removed: - ----- Method: NaturalLanguageTranslator class>>translate:toLocaleID:inDomain: (in category 'translation') ----- - translate: aString toLocaleID: localeID inDomain: aDomainName - ^ (self availableForLocaleID: localeID) - translate: aString inDomain: aDomainName! Item was removed: - ----- Method: NaturalLanguageTranslator class>>translateWithoutLoading:toLocaleID: (in category 'translation') ----- - translateWithoutLoading: aString toLocaleID: localeID - "translate for default domain" - ^self translateWithoutLoading: aString toLocaleID: localeID inDomain: TextDomainManager defaultDomain. - ! Item was removed: - ----- Method: NaturalLanguageTranslator class>>translateWithoutLoading:toLocaleID:inDomain: (in category 'translation') ----- - translateWithoutLoading: aString toLocaleID: localeID inDomain: aDomainName - "try to translate with small footprint: - if GetTextTranslator hasn't loaded MO, try to use InternalTranslator. - if InternalTranslator isn't available, then actually load MO and use it" - | translator | - translator _ self availableForLocaleID: localeID. - (translator isDomainLoaded: aDomainName) ifFalse: [ - (InternalTranslator availableLanguageLocaleIDs includes: localeID) - ifTrue: [translator _ InternalTranslator localeID: localeID]. - ]. - ^translator translate: aString inDomain: aDomainName! Item was removed: - ----- Method: NaturalLanguageTranslator class>>translationSuffix (in category 'private') ----- - translationSuffix - ^'translation'! Item was removed: - ----- Method: NaturalLanguageTranslator class>>translators (in category 'accessing') ----- - translators - ^ Translators ifNil: [Translators := Dictionary new] ! Item was removed: - ----- Method: NaturalLanguageTranslator>>atRandom (in category 'accessing') ----- - atRandom - - self subclassResponsibility. - ! Item was removed: - ----- Method: NaturalLanguageTranslator>>checkPhrase:translation: (in category 'translation') ----- - checkPhrase: phrase translation: translation! Item was removed: - ----- Method: NaturalLanguageTranslator>>defaultBackgroundColor (in category 'user interface') ----- - defaultBackgroundColor - "answer the receiver's defaultBackgroundColor for views" - ^ Color cyan! Item was removed: - ----- Method: NaturalLanguageTranslator>>displayLanguage (in category 'accessing') ----- - displayLanguage - ^ id displayLanguage! Item was removed: - ----- Method: NaturalLanguageTranslator>>displayName (in category 'accessing') ----- - displayName - ^ id displayName! Item was removed: - ----- Method: NaturalLanguageTranslator>>domainRegistered: (in category 'accessing') ----- - domainRegistered: aDomainName - "notify that new TextDomain is registered. Concrete subclass can responds to this event if needed"! Item was removed: - ----- Method: NaturalLanguageTranslator>>domainUnregistered: (in category 'accessing') ----- - domainUnregistered: aDomainName - "notify that new TextDomain is unregistered. Concrete subclass can responds to this event if needed"! Item was removed: - ----- Method: NaturalLanguageTranslator>>fileOutHeader (in category 'fileIn/fileOut') ----- - fileOutHeader - ^ '''Translation dictionary'''! Item was removed: - ----- Method: NaturalLanguageTranslator>>fileOutHeaderOn: (in category 'fileIn/fileOut') ----- - fileOutHeaderOn: aStream - aStream nextChunkPut: self fileOutHeader; - cr. - aStream timeStamp; cr. - aStream nextPut: $!!. - aStream nextChunkPut: '(' , self class name , ' localeID: ' , id storeString , ')'. - aStream cr! Item was removed: - ----- Method: NaturalLanguageTranslator>>fileOutOn: (in category 'fileIn/fileOut') ----- - fileOutOn: aStream - "self current fileOutOn: Transcript. Transcript endEntry" - self fileOutHeaderOn: aStream. - self fileOutOn: aStream keys: nil! Item was removed: - ----- Method: NaturalLanguageTranslator>>fileOutOn:keys: (in category 'fileIn/fileOut') ----- - fileOutOn: aStream keys: keys - "self current fileOutOn: Transcript. Transcript endEntry" - (keys - ifNil: [generics keys asArray sort]) - do: [:key | self - nextChunkPut: (generics associationAt: key) - on: aStream]. - keys - ifNil: [self untranslated - do: [:each | self nextChunkPut: each -> '' on: aStream]]. - aStream nextPut: $!!; - cr! Item was removed: - ----- Method: NaturalLanguageTranslator>>generics (in category 'private') ----- - generics - ^generics ifNil: [generics := Dictionary new]! Item was removed: - ----- Method: NaturalLanguageTranslator>>isDomainLoaded: (in category 'accessing') ----- - isDomainLoaded: aDomainName - "ask if translation dictionary for the domain has been loaded and available now for use" - self subclassResponsibility.! Item was removed: - ----- Method: NaturalLanguageTranslator>>isoCountry (in category 'accessing') ----- - isoCountry - ^self localeID isoCountry! Item was removed: - ----- Method: NaturalLanguageTranslator>>isoLanguage (in category 'accessing') ----- - isoLanguage - ^self localeID isoLanguage! Item was removed: - ----- Method: NaturalLanguageTranslator>>loadFromFileNamed: (in category 'private store-retrieve') ----- - loadFromFileNamed: fileNameString - "Load translations from an external file" - - FileStream readOnlyFileNamed: fileNameString do: [ :file | - self loadFromStream: file ]. - self changed: #translations. - self changed: #untranslated. - ! Item was removed: - ----- Method: NaturalLanguageTranslator>>loadFromRefStream: (in category 'private store-retrieve') ----- - loadFromRefStream: stream - "Load translations from an external file" - | loadedArray refStream | - refStream := ReferenceStream on: stream. - [loadedArray := refStream next] - ensure: [refStream close]. - self processExternalObject: loadedArray ! Item was removed: - ----- Method: NaturalLanguageTranslator>>loadFromStream: (in category 'private store-retrieve') ----- - loadFromStream: stream - "Load translations from an external file" - | header isFileIn | - header := '''Translation dictionary'''. - isFileIn := (stream next: header size) - = header. - stream reset. - isFileIn - ifTrue: [stream fileInAnnouncing: 'Loading ' translated, stream localName] - ifFalse: [self loadFromRefStream: stream]! Item was removed: - ----- Method: NaturalLanguageTranslator>>localeID (in category 'accessing') ----- - localeID - ^id! Item was removed: - ----- Method: NaturalLanguageTranslator>>localeID: (in category 'initialize-release') ----- - localeID: anID - id := anID! Item was removed: - ----- Method: NaturalLanguageTranslator>>mergeTranslations: (in category 'private store-retrieve') ----- - mergeTranslations: newTranslations - "Merge a new set of translations into the exiting table. - Overwrites existing entries." - - newTranslations keysAndValuesDo: [:key :value | - self rawPhrase: (self class registeredPhraseFor: key) translation: value]. - self changed: #translations. - self changed: #untranslated.! Item was removed: - ----- Method: NaturalLanguageTranslator>>nextChunkPut:on: (in category 'fileIn/fileOut') ----- - nextChunkPut: anObject on: aStream - | i remainder terminator | - terminator := $!!. - remainder := anObject storeString. - [(i := remainder indexOf: terminator) = 0] - whileFalse: [aStream - nextPutAll: (remainder copyFrom: 1 to: i). - aStream nextPut: terminator. - "double imbedded terminators" - remainder := remainder copyFrom: i + 1 to: remainder size]. - aStream nextPutAll: remainder. - aStream nextPut: terminator; cr.! Item was removed: - ----- Method: NaturalLanguageTranslator>>phrase:translation: (in category 'translation') ----- - phrase: phraseString translation: translationString - self generics at: phraseString put: translationString asString. - self changed: #translations. - self changed: #untranslated.! Item was removed: - ----- Method: NaturalLanguageTranslator>>printOn: (in category 'printing') ----- - printOn: aStream - aStream nextPutAll: self class name; nextPut: $(; print: self localeID; nextPut: $)! Item was removed: - ----- Method: NaturalLanguageTranslator>>processExternalObject: (in category 'private store-retrieve') ----- - processExternalObject: anArray - "pivate - process the external object" - - "new format -> {translations. untranslated}" - - anArray second do: [:each | self class registerPhrase: each]. - - self mergeTranslations: anArray first! Item was removed: - ----- Method: NaturalLanguageTranslator>>rawPhrase:translation: (in category 'translation') ----- - rawPhrase: phraseString translation: translationString - self generics at: phraseString put: translationString asString. - ! Item was removed: - ----- Method: NaturalLanguageTranslator>>rawRemoveUntranslated: (in category 'translation') ----- - rawRemoveUntranslated: untranslated - - self class allKnownPhrases removeKey: untranslated ifAbsent: []. - self changed: #untranslated.! Item was removed: - ----- Method: NaturalLanguageTranslator>>removeTranslationFor: (in category 'translation') ----- - removeTranslationFor: phraseString - self generics removeKey: phraseString ifAbsent: []. - self changed: #translations. - self changed: #untranslated.! Item was removed: - ----- Method: NaturalLanguageTranslator>>removeUntranslated: (in category 'translation') ----- - removeUntranslated: untranslated - - self class allKnownPhrases removeKey: untranslated ifAbsent: []. - ! Item was removed: - ----- Method: NaturalLanguageTranslator>>saveToFileNamed: (in category 'private store-retrieve') ----- - saveToFileNamed: fileNameString - "save the receiver's translations to a file named fileNameString" - | stream | - "Set true if you need to save as binary" - false - ifTrue: [stream := ReferenceStream fileNamed: fileNameString. - stream nextPut: {self translations. self untranslated}. - stream close. - ^ self]. - stream := FileStream fileNamed: fileNameString. - [self fileOutOn: stream] - ensure: [stream close]! Item was removed: - ----- Method: NaturalLanguageTranslator>>scanFrom: (in category 'fileIn/fileOut') ----- - scanFrom: aStream - "Read a definition of dictionary. - Make sure current locale corresponds my locale id" - | newTranslations currentPlatform | - newTranslations := Dictionary new. - currentPlatform := Locale currentPlatform. - [ | aString assoc | - Locale - currentPlatform: (Locale localeID: id). - [aString := aStream nextChunk withSqueakLineEndings. - aString size > 0] - whileTrue: [assoc := Compiler evaluate: aString. - assoc value = '' - ifTrue: [self class registerPhrase: assoc key] - ifFalse: [newTranslations add: assoc]]] - ensure: [Locale currentPlatform: currentPlatform]. - self mergeTranslations: newTranslations! Item was removed: - ----- Method: NaturalLanguageTranslator>>setCurrent (in category 'language switching') ----- - setCurrent - "notify locale of the translator become current" - ! Item was removed: - ----- Method: NaturalLanguageTranslator>>translate: (in category 'translation') ----- - translate: aString - ^self translate: aString - inDomain: TextDomainManager defaultDomain! Item was removed: - ----- Method: NaturalLanguageTranslator>>translate:in: (in category 'translation') ----- - translate: aString in: aContext! Item was removed: - ----- Method: NaturalLanguageTranslator>>translate:inDomain: (in category 'translation') ----- - translate: aString inDomain: aDomainName - ^ aString! Item was removed: - ----- Method: NaturalLanguageTranslator>>translationFor: (in category 'translation') ----- - translationFor: aString - ^self translate: aString! Item was removed: - ----- Method: NaturalLanguageTranslator>>translations (in category 'accessing') ----- - translations - ^self generics! Item was removed: - ----- Method: NaturalLanguageTranslator>>untranslated (in category 'accessing') ----- - untranslated - | translations | - translations := self translations. - ^self class allKnownPhrases reject: [:each | translations includesKey: each]! Item was removed: - ----- Method: NaturalLanguageTranslator>>writeAsMimeString (in category 'fileIn/fileOut') ----- - writeAsMimeString - - | fileName fileStream tmpStream s2 gzs | - tmpStream := MultiByteBinaryOrTextStream on: ''. - tmpStream converter: UTF8TextConverter new. - self fileOutOn: tmpStream. - s2 := RWBinaryOrTextStream on: ''. - gzs := GZipWriteStream on: s2. - tmpStream reset. - gzs nextPutAll: (tmpStream binary contentsOfEntireFile asString) contents. - gzs close. - s2 reset. - - fileName := id isoString, '.translation.gz.mime'. - fileStream := FileStream newFileNamed: fileName. - fileStream nextPutAll: (Base64MimeConverter mimeEncode: s2) contents. - fileStream close. - ! Item was changed: ----- Method: TranslatedReceiverFinder>>stringReceiversWithContext (in category 'accessing') ----- stringReceiversWithContext | mrs results rr cls mn t o | + mrs := SystemNavigation default allCallsOn: #translated. + results := OrderedCollection new. - mrs _ SystemNavigation default allCallsOn: #translated. - results _ OrderedCollection new. mrs do: [:mr | + rr := OrderedCollection new. + cls := Smalltalk at: mr classSymbol. - rr _ OrderedCollection new. - cls _ Smalltalk at: mr classSymbol. rr add: cls category. rr add: mr classSymbol. rr add: mr methodSymbol. mr classIsMeta ifTrue: [ + mn := cls class decompile: mr methodSymbol. - mn _ cls class decompile: mr methodSymbol. ] ifFalse: [ + mn := cls decompile: mr methodSymbol. - mn _ cls decompile: mr methodSymbol. ]. + o := OrderedCollection new. + t := Set new. - o _ OrderedCollection new. - t _ Set new. self searchMessageNode: mn addTo: t. t do: [ :te | (te receiver isMemberOf: LiteralNode) ifTrue: [ o add: te receiver key. ]. ]. o ifNotEmpty: [ rr add: o. results add: rr. ]. ]. ^ results. ! Item was changed: ----- Method: TranslatedReceiverFinder>>stringReceiversWithContext: (in category 'accessing') ----- stringReceiversWithContext: aSymbol "Find string receivers for a symbol. Answer a collection of aMethodReference -> {keyword. keyword...}" "self new stringReceiversWithContext: #translated" | keywords methodReferences | + methodReferences := SystemNavigation default allCallsOn: aSymbol. - methodReferences _ SystemNavigation default allCallsOn: aSymbol. ^ methodReferences inject: OrderedCollection new into: [:list :next | keywords := self findWordsWith: aSymbol in: next. keywords ifNotEmpty: [list add: next -> keywords]. list] !
1
0
0
0
The Trunk: System-edc.474.mcz
by commits@source.squeak.org
29 Mar '12
29 Mar '12
Edgar J. De Cleene uploaded a new version of System to project The Trunk:
http://source.squeak.org/trunk/System-edc.474.mcz
==================== Summary ==================== Name: System-edc.474 Author: edc Time: 29 March 2012, 7:56:22.086 am UUID: 50ce2068-fc68-4a19-9f8c-9334c1a501f4 Ancestors: System-bf.473 {InternalTranslator ISOLanguageDefinition Locale LocaleID NaturalLanguageFormTranslator NaturalLanguageTranslator} Moved back to System-Localization =============== Diff against System-bf.473 =============== Item was added: + Object subclass: #ISOLanguageDefinition + instanceVariableNames: 'iso3 iso2 iso3Alternate language' + classVariableNames: 'ISO2Countries ISO2Table ISO3Countries ISO3Table' + poolDictionaries: '' + category: 'System-Localization'! Item was added: + ----- Method: ISOLanguageDefinition class>>buildIso3166CodesTables (in category 'private') ----- + buildIso3166CodesTables + "ISOLanguageDefinition buildIso3166CodesTables" + | rawdata stream country isoa2 isoa3 unNumeric macName macCode windowsName windowsCode empty table | + rawdata := self iso3166Codes. + table := OrderedCollection new: 200. + stream := rawdata readStream. + empty := 160 asCharacter asString. + [stream atEnd] whileFalse: + [country := stream nextLine. + isoa2 := stream nextLine. + isoa3 := stream nextLine. + unNumeric := stream nextLine. + windowsName := stream nextLine. + windowsName = empty ifTrue: [windowsName := nil]. + windowsCode := stream nextLine. + windowsCode = empty ifTrue: [windowsCode := nil]. + macName := stream nextLine. + macName = empty ifTrue: [macName := nil]. + macCode := stream nextLine. + macCode = empty ifTrue: [macCode := nil]. + table add: { country. isoa2. isoa3. unNumeric. windowsName. windowsCode. macName. macCode. }]. + ^table! Item was added: + ----- Method: ISOLanguageDefinition class>>extraCountryDefinitions (in category 'private') ----- + extraCountryDefinitions + ^{ + {'Kids'. 'KIDS'. 'KIDS'.}. + }! Item was added: + ----- Method: ISOLanguageDefinition class>>extraISO3Definitions (in category 'private') ----- + extraISO3Definitions + + ^self readISOLanguagesFrom: 'jpk Japanese (Kids) + ' readStream! Item was added: + ----- Method: ISOLanguageDefinition class>>initISO3LanguageTable (in category 'private') ----- + initISO3LanguageTable + "ISOLanguageDefinition initIso3LanguageTable" + + | table | + table := ISOLanguageDefinition readISOLanguagesFrom: ISOLanguageDefinition isoLanguages readStream. + table addAll: self extraISO3Definitions. + ^table! Item was added: + ----- Method: ISOLanguageDefinition class>>initISOCountries (in category 'private') ----- + initISOCountries + "ISOLanguageDefinition initISOCountries" + | iso3166Table | + iso3166Table := ISOLanguageDefinition buildIso3166CodesTables. + ISO2Countries := Dictionary new. + ISO3Countries := Dictionary new. + iso3166Table do: [:entry | + ISO2Countries at: (entry at: 2) put: (entry at: 1). + ISO3Countries at: (entry at: 3) put: (entry at: 1)]. + self extraCountryDefinitions do: [:entry | + ISO2Countries at: (entry at: 2) put: (entry at: 1). + ISO3Countries at: (entry at: 3) put: (entry at: 1)]! Item was added: + ----- Method: ISOLanguageDefinition class>>initialize (in category 'class initialization') ----- + initialize + "ISOLanguageDefinition initialize" + + ISO3Table := nil. + ISO2Table := nil! Item was added: + ----- Method: ISOLanguageDefinition class>>iso2Countries (in category 'private') ----- + iso2Countries + "ISOLanguageDefinition iso2Countries" + "ISO2Countries := nil. ISO3Countries := nil" + + ISO2Countries ifNil: [self initISOCountries]. + ^ISO2Countries! Item was added: + ----- Method: ISOLanguageDefinition class>>iso2LanguageDefinition: (in category 'accessing') ----- + iso2LanguageDefinition: aString + ^self iso2LanguageTable at: aString! Item was added: + ----- Method: ISOLanguageDefinition class>>iso2LanguageTable (in category 'private') ----- + iso2LanguageTable + "ISOLanguageDefinition iso2LanguageTable" + + ISO2Table ifNotNil: [^ISO2Table]. + ISO2Table := Dictionary new: self iso3LanguageTable basicSize. + self iso3LanguageTable do: [:entry | + ISO2Table at: entry iso2 put: entry]. + ^ISO2Table! Item was added: + ----- Method: ISOLanguageDefinition class>>iso3166Codes (in category 'private') ----- + iso3166Codes + "
http://www.unicode.org/onlinedat/countries.html
" + + ^'LAND ISLANDS + AX + + + + + + + AFGHANISTAN + AF + AFG + 004 + + + + + ALBANIA + AL + ALB + 008 + CTRY_ALBANIA + 355 + + + ALGERIA + DZ + DZA + 012 + CTRY_ALGERIA + 213 + verArabic + 16 + AMERICAN SAMOA + AS + ASM + 016 + + + + + ANDORRA + AD + AND + 020 + + + + + ANGOLA + AO + AGO + 024 + + + + + ANGUILLA + AI + AIA + 660 + + + + + ANTARCTICA + AQ + ATA + 010 + + + + + ANTIGUA AND BARBUDA + AG + ATG + 028 + + + + + ARGENTINA + AR + ARG + 032 + CTRY_ARGENTINA + 54 + + + ARMENIA + AM + ARM + 051 + CTRY_ARMENIA + 374 + verArmenian + 84 + ARUBA + AW + ABW + 533 + + + + + AUSTRALIA + AU + AUS + 036 + CTRY_AUSTRALIA + 61 + verAustralia + 15 + AUSTRIA + AT + AUT + 040 + CTRY_AUSTRIA + 43 + verAustria + 92 + AZERBAIJAN + AZ + AZE + 031 + CTRY_AZERBAIJAN + 994 + + + BAHAMAS + BS + BHS + 044 + + + + + BAHRAIN + BH + BHR + 048 + CTRY_BAHRAIN + 973 + + + BANGLADESH + BD + BGD + 050 + + + verBengali + 60 + BARBADOS + BB + BRB + 052 + + + + + BELARUS + BY + BLR + 112 + CTRY_BELARUS + 375 + + + BELGIUM + BE + BEL + 056 + CTRY_BELGIUM + 32 + verFrBelgium, verFlemish + 98 + BELIZE + BZ + BLZ + 084 + CTRY_BELIZE + 501 + + + BENIN + BJ + BEN + 204 + + + + + BERMUDA + BM + BMU + 060 + + + + + BHUTAN + BT + BTN + 064 + + + verBhutan + 83 + BOLIVIA + BO + BOL + 068 + CTRY_BOLIVIA + 591 + + + BOSNIA AND HERZEGOVINA + BA + BIH + 070 + + + + + BOTSWANA + BW + BWA + 072 + + + + + BOUVET ISLAND + BV + BVT + 074 + + + + + BRAZIL + BR + BRA + 076 + CTRY_BRAZIL + 55 + verBrazil + 71 + BRITISH INDIAN OCEAN TERRITORY + IO + IOT + 086 + + + + + BRUNEI DARUSSALAM + BN + BRN + 096 + CTRY_BRUNEI_DARUSSALAM + 673 + + + BULGARIA + BG + BGR + 100 + CTRY_BULGARIA + 359 + verBulgaria + 72 + BURKINA FASO + BF + BFA + 854 + + + + + BURUNDI + BI + BDI + 108 + + + + + CAMBODIA + KH + KHM + 116 + + + + + CAMEROON + CM + CMR + 120 + + + + + CANADA + CA + CAN + 124 + CTRY_CANADA + 2 + verFrCanada, verEndCanada + 82 + CAPE VERDE + CV + CPV + 132 + + + + + CAYMAN ISLANDS + KY + CYM + 136 + + + + + CENTRAL AFRICAN REPUBLIC + CF + CAF + 140 + + + + + CHAD + TD + TCD + 148 + + + + + CHILE + CL + CHL + 152 + CTRY_CHILE + 56 + + + CHINA + CN + CHN + 156 + CTRY_PRCHINA + 86 + verChina + 52 + CHRISTMAS ISLAND + CX + CXR + 162 + + + + + COCOS (KEELING) ISLANDS + CC + CCK + 166 + + + + + COLOMBIA + CO + COL + 170 + CTRY_COLOMBIA + 57 + + + COMOROS + KM + COM + 174 + + + + + CONGO + CG + COG + 178 + + + + + CONGO, THE DEMOCRATIC REPUBLIC OF THE + CD + + + + + + + COOK ISLANDS + CK + COK + 184 + + + + + COSTA RICA + CR + CRI + 188 + CTRY_COSTA_RICA + 506 + + + COTE D''IVOIRE + CI + CIV + 384 + + + + + CROATIA (local name: Hrvatska) + HR + HRV + 191 + CTRY_CROATIA + 385 + verCroatia, verYugoCroatian + 68 (c), 25 (y) + CUBA + CU + CUB + 192 + + + + + CYPRUS + CY + CYP + 196 + + + verCyprus + 23 + CZECH REPUBLIC + CZ + CZE + 203 + CTRY_CZECH + 420 + verCzech + 56 + DENMARK + DK + DNK + 208 + CTRY_DENMARK + 45 + verDenmark(da), verFaeroeIsl(fo) + 9(da), 47(fo) + DJIBOUTI + DJ + DJI + 262 + + + + + DOMINICA + DM + DMA + 212 + + + + + DOMINICAN REPUBLIC + DO + DOM + 214 + CTRY_DOMINICAN_REPUBLIC + 1 + + + EAST TIMOR + TL + TLS + 626 + + + + + ECUADOR + EC + ECU + 218 + CTRY_ECUADOR + 593 + + + EGYPT + EG + EGY + 818 + CTRY_EGYPT + 20 + verArabic + 16 + EL SALVADOR + SV + SLV + 222 + CTRY_EL_SALVADOR + 503 + + + EQUATORIAL GUINEA + GQ + GNQ + 226 + + + + + ERITREA + ER + ERI + 232 + + + + + ESTONIA + EE + EST + 233 + CTRY_ESTONIA + 372 + verEstonia + 44 + ETHIOPIA + ET + ETH + 210 + + + + + FALKLAND ISLANDS (MALVINAS) + FK + FLK + 238 + + + + + FAROE ISLANDS + FO + FRO + 234 + CTRY_FAEROE_ISLANDS + 298 + + + FIJI + FJ + FJI + 242 + + + + + FINLAND + FI + FIN + 246 + CTRY_FINLAND + 358 + verFinland + 17 + FRANCE + FR + FRA + 250 + CTRY_FRANCE + 33 + verFrance + 1 + FRANCE, METROPOLITAN + FX + FXX + 249 + + + + + FRENCH GUIANA + GF + GUF + 254 + + + + + FRENCH POLYNESIA + PF + PYF + 258 + + + + + FRENCH SOUTHERN TERRITORIES + TF + ATF + 260 + + + + + GABON + GA + GAB + 266 + + + + + GAMBIA + GM + GMB + 270 + + + + + GEORGIA + GE + GEO + 268 + CTRY_GEORGIA + 995 + verGeorgian + 85 + GERMANY + DE + DEU + 276 + CTRY_GERMANY + 49 + verGermany + 3 + GHANA + GH + GHA + 288 + + + + + GIBRALTAR + GI + GIB + 292 + + + + + GREECE + GR + GRC + 300 + CTRY_GREECE + 30 + verGreece, verGreecePoly + 20, 40 + GREENLAND + GL + GRL + 304 + + + verGreenland + 107 + GRENADA + GD + GRD + 308 + + + + + GUADELOUPE + GP + GLP + 312 + + + + + GUAM + GU + GUM + 316 + + + + + GUATEMALA + GT + GTM + 320 + CTRY_GUATEMALA + 502 + + + GUINEA + GN + GIN + 324 + + + + + GUINEA-BISSAU + GW + GNB + 624 + + + + + GUYANA + GY + GUY + 328 + + + + + HAITI + HT + HTI + 332 + + + + + HEARD ISLAND & MCDONALD ISLANDS + HM + HMD + 334 + + + + + HONDURAS + HN + HND + 340 + CTRY_HONDURAS + 504 + + + HONG KONG + HK + HKG + 344 + CTRY_HONG_KONG + 852 + + + HUNGARY + HU + HUN + 348 + CTRY_HUNGARY + 36 + verHungary + 43 + ICELAND + IS + ISL + 352 + CTRY_ICELAND + 354 + verIceland + 21 + INDIA + IN + IND + 356 + CTRY_INDIA + 91 + verIndiaHindi(hi) + 33 + INDONESIA + ID + IDN + 360 + CTRY_INDONESIA + 62 + + + IRAN, ISLAMIC REPUBLIC OF + IR + IRN + 364 + CTRY_IRAN + 981 + verIran + 48 + IRAQ + IQ + IRQ + 368 + CTRY_IRAQ + 964 + verArabic + 16 + IRELAND + IE + IRL + 372 + CTRY_IRELAND + 353 + verIreland + 50 + ISRAEL + IL + ISR + 376 + CTRY_ISRAEL + 972 + verIsrael + 13 + ITALY + IT + ITA + 380 + CTRY_ITALY + 39 + verItaly + 4 + JAMAICA + JM + JAM + 388 + CTRY_JAMAICA + 1 + + + JAPAN + JP + JPN + 392 + CTRY_JAPAN + 81 + verJapan + 14 + JORDAN + JO + JOR + 400 + CTRY_JORDAN + 962 + + + KAZAKHSTAN + KZ + KAZ + 398 + CTRY_KAZAKSTAN + 7 + + + KENYA + KE + KEN + 404 + CTRY_KENYA + 254 + + + KIRIBATI + KI + KIR + 296 + + + + + KOREA, DEMOCRATIC PEOPLE''S REPUBLIC OF + KP + PRK + 408 + + + verKorea + 51 + KOREA, REPUBLIC OF + KR + KOR + 410 + CTRY_SOUTH_KOREA + 82 + verKorea + + KUWAIT + KW + KWT + 414 + CTRY_KUWAIT + 965 + + + KYRGYZSTAN + KG + KGZ + 417 + CTRY_KYRGYZSTAN + 996 + + + LAO PEOPLE''S DEMOCRATIC REPUBLIC + LA + LAO + 418 + + + + + LATVIA + LV + LVA + 428 + CTRY_LATVIA + 371 + verLatvia + 45 + LEBANON + LB + LBN + 422 + CTRY_LEBANON + 961 + + + LESOTHO + LS + LSO + 426 + + + + + LIBERIA + LR + LBR + 430 + + + + + LIBYAN ARAB JAMAHIRIYA + LY + LBY + 434 + CTRY_LIBYA + 218 + verArabic + 16 + LIECHTENSTEIN + LI + LIE + 438 + CTRY_LIECHTENSTEIN + 41 + + + LITHUANIA + LT + LTU + 440 + CTRY_LITHUANIA + 370 + verLithuania + 41 + LUXEMBOURG + LU + LUX + 442 + CTRY_LUXEMBOURG + 352 + verFrBelgiumLux + 6 + MACAU + MO + MAC + 446 + CTRY_MACAU + 853 + + + MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF + MK + MKD + 807 + CTRY_MACEDONIA + 389 + verMacedonian + + MADAGASCAR + MG + MDG + 450 + + + + + MALAWI + MW + MWI + 454 + + + + + MALAYSIA + MY + MYS + 458 + CTRY_MALAYSIA + 60 + + + MALDIVES + MV + MDV + 462 + CTRY_MALDIVES + 960 + + + MALI + ML + MLI + 466 + + + + + MALTA + MT + MLT + 470 + + + verMalta + 22 + MARSHALL ISLANDS + MH + MHL + 584 + + + + + MARTINIQUE + MQ + MTQ + 474 + + + + + MAURITANIA + MR + MRT + 478 + + + + + MAURITIUS + MU + MUS + 480 + + + + + MAYOTTE + YT + MYT + 175 + + + + + MEXICO + MX + MEX + 484 + CTRY_MEXICO + 52 + + + MICRONESIA, FEDERATED STATES OF + FM + FSM + 583 + + + + + MOLDOVA, REPUBLIC OF + MD + MDA + 498 + + + + + MONACO + MC + MCO + 492 + CTRY_MONACO + 33 + + + MONGOLIA + MN + MNG + 496 + CTRY_MONGOLIA + 976 + + + MONTSERRAT + MS + MSR + 500 + + + + + MOROCCO + MA + MAR + 504 + CTRY_MOROCCO + 212 + verArabic + 16 + MOZAMBIQUE + MZ + MOZ + 508 + + + + + MYANMAR + MM + MMR + 104 + + + + + NAMIBIA + NA + NAM + 516 + + + + + NAURU + NR + NRU + 520 + + + + + NEPAL + NP + NPL + 524 + + + verNepal + 106 + NETHERLANDS + NL + NLD + 528 + CTRY_NETHERLANDS + 31 + verNetherlands + 5 + NETHERLANDS ANTILLES + AN + ANT + 530 + + + + + NEW CALEDONIA + NC + NCL + 540 + + + + + NEW ZEALAND + NZ + NZL + 554 + CTRY_NEW_ZEALAND + 64 + + + NICARAGUA + NI + NIC + 558 + CTRY_NICARAGUA + 505 + + + NIGER + NE + NER + 562 + + + + + NIGERIA + NG + NGA + 566 + + + + + NIUE + NU + NIU + 570 + + + + + NORFOLK ISLAND + NF + NFK + 574 + + + + + NORTHERN MARIANA ISLANDS + MP + MNP + 580 + + + + + NORWAY + NO + NOR + 578 + CTRY_NORWAY + 47 + verNorway + 12 + OMAN + OM + OMN + 512 + CTRY_OMAN + 968 + + + PAKISTAN + PK + PAK + 586 + CTRY_PAKISTAN + 92 + verPakistanUrdu, verPunjabi + 34 (U), 95 (P) + PALAU + PW + PLW + 585 + + + + + PANAMA + PA + PAN + 591 + CTRY_PANAMA + 507 + + + PALESTINIAN TERRITORY, OCCUPIED + PS + + + + + + + PAPUA NEW GUINEA + PG + PNG + 598 + + + + + PARAGUAY + PY + PRY + 600 + CTRY_PARAGUAY + 595 + + + PERU + PE + PER + 604 + CTRY_PERU + 51 + + + PHILIPPINES + PH + PHL + 608 + CTRY_PHILIPPINES + 63 + + + PITCAIRN + PN + PCN + 612 + + + + + POLAND + PL + POL + 616 + CTRY_POLAND + 48 + verPoland + 42 + PORTUGAL + PT + PRT + 620 + CTRY_PORTUGAL + 351 + verPortugal + 10 + PUERTO RICO + PR + PRI + 630 + CTRY_PUERTO_RICO + 1 + + + QATAR + QA + QAT + 634 + CTRY_QATAR + 974 + + + REUNION + RE + REU + 638 + + + + + ROMANIA + RO + ROU* + 642 + CTRY_ROMANIA + 40 + verRomania + 39 + RUSSIAN FEDERATION + RU + RUS + 643 + CTRY_RUSSIA + 7 + verRussia + 49 + RWANDA + RW + RWA + 646 + + + + + SAINT KITTS AND NEVIS + KN + KNA + 659 + + + + + SAINT LUCIA + LC + LCA + 662 + + + + + SAINT VINCENT AND THE GRENADINES + VC + VCT + 670 + + + + + SAMOA + WS + WSM + 882 + + + + + SAN MARINO + SM + SMR + 674 + + + + + SAO TOME AND PRINCIPE + ST + STP + 678 + + + + + SAUDI ARABIA + SA + SAU + 682 + CTRY_SAUDI_ARABIA + 966 + verArabic + 16 + SENEGAL + SN + SEN + 686 + + + + + SERBIA AND MONTENEGRO + CS + + + CTRY_SERBIA + 381 + + + SEYCHELLES + SC + SYC + 690 + + + + + SIERRA LEONE + SL + SLE + 694 + + + + + SINGAPORE + SG + SGP + 702 + CTRY_SINGAPORE + 65 + verSingapore + 100 + SLOVAKIA (Slovak Republic) + SK + SVK + 703 + CTRY_SLOVAK + 421 + verSlovak + 57 + SLOVENIA + SI + SVN + 705 + CTRY_SLOVENIA + 386 + verSlovenian + 66 + SOLOMON ISLANDS + SB + SLB + 90 + + + + + SOMALIA + SO + SOM + 706 + + + + + SOUTH AFRICA + ZA + ZAF + 710 + CTRY_SOUTH_AFRICA + 27 + + + SOUTH GEORGIA AND THE SOUTH SANDWICH ISLANDS + GS + + + + + + + SPAIN + ES + ESP + 724 + CTRY_SPAIN + 34 + verSpain + 8 + SRI LANKA + LK + LKA + 144 + + + + + SAINT HELENA + SH + SHN + 654 + + + + + SAINT PIERRE AND MIQUELON + PM + SPM + 666 + + + + + SUDAN + SD + SDN + 736 + + + + + SURINAME + SR + SUR + 740 + + + + + SVALBARD AND JAN MAYEN ISLANDS + SJ + SJM + 744 + + + + + SWAZILAND + SZ + SWZ + 748 + + + + + SWEDEN + SE + SWE + 752 + CTRY_SWEDEN + 46 + verSweden + 7 + SWITZERLAND + CH + CHE + 756 + CTRY_SWITZERLAND + 41 + verFrSwiss(fr), verGrSwiss(de) + 18(fr), 19(de) + SYRIAN ARAB REPUBLIC + SY + SYR + 760 + CTRY_SYRIA + 963 + + + TAIWAN, PROVINCE OF CHINA + TW + TWN + 158 + CTRY_TAIWAN + 886 + verTaiwan + 53 + TAJIKISTAN + TJ + TJK + 762 + + + + + TANZANIA, UNITED REPUBLIC OF + TZ + TZA + 834 + + + + + TATARSTAN + + + + CTRY_TATARSTAN + 7 + + + THAILAND + TH + THA + 764 + CTRY_THAILAND + 66 + verThailand + 54 + TIMOR-LESTE + TL + + + + + + + TOGO + TG + TGO + 768 + + + + + TOKELAU + TK + TKL + 772 + + + + + TONGA + TO + TON + 776 + + + verTonga + 88 + TRINIDAD AND TOBAGO + TT + TTO + 780 + CTRY_TRINIDAD_Y_TOBAGO + 1 + + + TUNISIA + TN + TUN + 788 + CTRY_TUNISIA + 216 + verArabic + 16 + TURKEY + TR + TUR + 792 + CTRY_TURKEY + 90 + verTurkey + 24 + TURKMENISTAN + TM + TKM + 795 + + + + + TURKS AND CAICOS ISLANDS + TC + TCA + 796 + + + + + TUVALU + TV + TUV + 798 + + + + + UGANDA + UG + UGA + 800 + + + + + UKRAINE + UA + UKR + 804 + CTRY_UKRAINE + 380 + verUkraine + 62 + UNITED ARAB EMIRATES + AE + ARE + 784 + CTRY_UAE + 971 + + + UNITED KINGDOM + GB + GBR + 826 + CTRY_UNITED_KINGDOM + 44 + verBritain + 2 + UNITED STATES + US + USA + 840 + CTRY_UNITED_STATES + 1 + verUS + 0 + UNITED STATES MINOR OUTLYING ISLANDS + UM + UMI + 581 + + + + + URUGUAY + UY + URY + 858 + CTRY_URUGUAY + 598 + + + UZBEKISTAN + UZ + UZB + 860 + CTRY_UZBEKISTAN + 7 + + + VANUATU + VU + VUT + 548 + + + + + VATICAN CITY STATE (HOLY SEE) + VA + VAT + 336 + + + + + VENEZUELA + VE + VEN + 862 + CTRY_VENEZUELA + 58 + + + VIET NAM + VN + VNM + 704 + CTRY_VIET_NAM + 84 + verVietnam + + VIRGIN ISLANDS (BRITISH) + VG + VGB + 92 + + + + + VIRGIN ISLANDS (U.S.) + VI + VIR + 850 + + + + + WALLIS AND FUTUNA ISLANDS + WF + WLF + 876 + + + + + WESTERN SAHARA + EH + ESH + 732 + + + + + YEMEN + YE + YEM + 887 + CTRY_YEMEN + 967 + + + YUGOSLAVIA + YU + YUG + 891 + + + + + ZAIRE + ZR + ZAR + 180 + + + + + ZAMBIA + ZM + ZMB + 894 + + + + + ZIMBABWE + ZW + ZWE + 716 + CTRY_ZIMBABWE + 263 + + + '! Item was added: + ----- Method: ISOLanguageDefinition class>>iso3Countries (in category 'private') ----- + iso3Countries + "ISOLanguageDefinition iso3Countries" + "ISO2Countries := nil. ISO3Countries := nil" + + ISO3Countries ifNil: [self initISOCountries]. + ^ISO3Countries! Item was added: + ----- Method: ISOLanguageDefinition class>>iso3LanguageDefinition: (in category 'accessing') ----- + iso3LanguageDefinition: aString + ^self iso3LanguageTable at: aString! Item was added: + ----- Method: ISOLanguageDefinition class>>iso3LanguageTable (in category 'private') ----- + iso3LanguageTable + "ISOLanguageDefinition iso3LanguageTable" + + ^ISO3Table ifNil: [ISO3Table := self initISO3LanguageTable]! Item was added: + ----- Method: ISOLanguageDefinition class>>isoLanguages (in category 'private') ----- + isoLanguages + "ISO 639: 3-letter codes" + ^'aar aa Afar + abk ab Abkhazian + ace Achinese + ach Acoli + ada Adangme + ady Adyghe; Adygei + afa Afro-Asiatic languages + afh Afrihili + afr af Afrikaans + ain Ainu + aka ak Akan + akk Akkadian + alb/sqi sq Albanian + ale Aleut + alg Algonquian languages + alt Southern Altai + amh am Amharic + ang English, Old (ca.450-1100) + anp Angika + apa Apache languages + ara ar Arabic + arc Official Aramaic (700-300 BCE); Imperial Aramaic (700-300 BCE) + arg an Aragonese + arm/hye hy Armenian + arn Mapudungun; Mapuche + arp Arapaho + art Artificial languages + arw Arawak + asm as Assamese + ast Asturian; Bable; Leonese; Asturleonese + ath Athapascan languages + aus Australian languages + ava av Avaric + ave ae Avestan + awa Awadhi + aym ay Aymara + aze az Azerbaijani + bad Banda languages + bai Bamileke languages + bak ba Bashkir + bal Baluchi + bam bm Bambara + ban Balinese + baq/eus eu Basque + bas Basa + bat Baltic languages + bej Beja; Bedawiyet + bel be Belarusian + bem Bemba + ben bn Bengali + ber Berber languages) + bho Bhojpuri + bih bh Bihari + bik Bikol + bin Bini; Edo + bis bi Bislama + bla Siksika + bnt Bantu languages + bos bs Bosnian + bra Braj + bre br Breton + btk Batak languages + bua Buriat + bug Buginese + bul bg Bulgarian + bur/mya my Burmese + byn Blin; Bilin + cad Caddo + cai Central American Indian languages + car Galibi Carib + cat ca Catalan; Valencian + cau Caucasian languages + ceb Cebuano + cel Celtic languages + cha ch Chamorro + chb Chibcha + che ce Chechen + chg Chagatai + chi/zho zh Chinese + chk Chuukese + chm Mari + chn Chinook jargon + cho Choctaw + chp Chipewyan; Dene Suline + chr Cherokee + chu cu Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic + chv cv Chuvash + chy Cheyenne + cmc Chamic languages + cop Coptic + cor kw Cornish + cos co Corsican + cpe Creoles and pidgins, English based + cpf Creoles and pidgins, French-based + cpp Creoles and pidgins, Portuguese-based + cre cr Cree + crh Crimean Tatar; Crimean Turkish + crp Creoles and pidgins + csb Kashubian + cus Cushitic languages + cze/ces cs Czech + dak Dakota + dan da Danish + dar Dargwa + day Land Dayak languages + del Delaware + den Slave (Athapascan) + dgr Dogrib + din Dinka + div dv Divehi; Dhivehi; Maldivian + doi Dogri + dra Dravidian languages + dsb Lower Sorbian + dua Duala + dum Dutch, Middle (ca.1050-1350) + dut/nld nl Dutch; Flemish + dyu Dyula + dzo dz Dzongkha + efi Efik + egy Egyptian (Ancient) + eka Ekajuk + elx Elamite + eng en English + enm English, Middle (1100-1500) + epo eo Esperanto + est et Estonian + ewe ee Ewe + ewo Ewondo + fan Fang + fao fo Faroese + fat Fanti + fij fj Fijian + fil Filipino; Pilipino + fin fi Finnish + fiu Finno-Ugrian languages) + fon Fon + fre/fra fr French + frm French, Middle (ca.1400-1600) + fro French, Old (842-ca.1400) + frr Northern Frisian + frs Eastern Frisian + fry fy Western Frisian + ful ff Fulah + fur Friulian + gaa Ga + gay Gayo + gba Gbaya + gem Germanic languages + geo/kat ka Georgian + ger/deu de German + gez Geez + gil Gilbertese + gla gd Gaelic; Scottish Gaelic + gle ga Irish + glg gl Galician + glv gv Manx + gmh German, Middle High (ca.1050-1500) + goh German, Old High (ca.750-1050) + gon Gondi + gor Gorontalo + got Gothic + grb Grebo + grc Greek, Ancient (to 1453) + gre/ell el Greek, Modern (1453-) + grn gn Guarani + gsw Swiss German; Alemannic; Alsatian + guj gu Gujarati + gwi Gwich''in + hai Haida + hat ht Haitian; Haitian Creole + hau ha Hausa + haw Hawaiian + heb he Hebrew + her hz Herero + hil Hiligaynon + him Himachali + hin hi Hindi + hit Hittite + hmn Hmong + hmo ho Hiri Motu + hrv hr Croatian + hsb Upper Sorbian + hun hu Hungarian + hup Hupa + iba Iban + ibo ig Igbo + ice/isl is Icelandic + ido io Ido + iii ii Sichuan Yi; Nuosu + ijo Ijo languages + iku iu Inuktitut + ile ie Interlingue; Occidental + ilo Iloko + ina ia Interlingua (International Auxiliary Language Association) + inc Indic languages + ind id Indonesian + ine Indo-European languages + inh Ingush + ipk ik Inupiaq + ira Iranian languages + iro Iroquoian languages + ita it Italian + jav jv Javanese + jbo Lojban + jpn ja Japanese + jpr Judeo-Persian + jrb Judeo-Arabic + kaa Kara-Kalpak + kab Kabyle + kac Kachin; Jingpho + kal kl Kalaallisut; Greenlandic + kam Kamba + kan kn Kannada + kar Karen languages + kas ks Kashmiri + kau kr Kanuri + kaw Kawi + kaz kk Kazakh + kbd Kabardian + kha Khasi + khi Khoisan languages + khm km Central Khmer + kho Khotanese; Sakan + kik ki Kikuyu; Gikuyu + kin rw Kinyarwanda + kir ky Kirghiz; Kyrgyz + kmb Kimbundu + kok Konkani + kom kv Komi + kon kg Kongo + kor ko Korean + kos Kosraean + kpe Kpelle + krc Karachay-Balkar + krl Karelian + kro Kru languages + kru Kurukh + kua kj Kuanyama; Kwanyama + kum Kumyk + kur ku Kurdish + kut Kutenai + lad Ladino + lah Lahnda + lam Lamba + lao lo Lao + lat la Latin + lav lv Latvian + lez Lezghian + lim li Limburgan; Limburger; Limburgish + lin ln Lingala + lit lt Lithuanian + lol Mongo + loz Lozi + ltz lb Luxembourgish; Letzeburgesch + lua Luba-Lulua + lub lu Luba-Katanga + lug lg Ganda + lui Luiseno + lun Lunda + luo Luo (Kenya and Tanzania) + lus Lushai + mac/mkd mk Macedonian + mad Madurese + mag Magahi + mah mh Marshallese + mai Maithili + mak Makasar + mal ml Malayalam + man Mandingo + mao/mri mi Maori + map Austronesian languages + mar mr Marathi + mas Masai + may/msa ms Malay + mdf Moksha + mdr Mandar + men Mende + mga Irish, Middle (900-1200) + mic Mi''kmaq; Micmac + min Minangkabau + mis Uncoded languages + mkh Mon-Khmer languages + mlg mg Malagasy + mlt mt Maltese + mnc Manchu + mni Manipuri + mno Manobo languages + moh Mohawk + mon mn Mongolian + mos Mossi + mul Multiple languages + mun Munda languages + mus Creek + mwl Mirandese + mwr Marwari + myn Mayan languages + myv Erzya + nah Nahuatl languages + nai North American Indian languages + nap Neapolitan + nau na Nauru + nav nv Navajo; Navaho + nbl nr Ndebele, South; South Ndebele + nde nd Ndebele, North; North Ndebele + ndo ng Ndonga + nds Low German; Low Saxon; German, Low; Saxon, Low + nep ne Nepali + new Nepal Bhasa; Newari + nia Nias + nic Niger-Kordofanian languages + niu Niuean + nno nn Norwegian Nynorsk; Nynorsk, Norwegian + nob nb Bokmal, Norwegian; Norwegian Bokmal + nog Nogai + non Norse, Old + nor no Norwegian + nqo N''Ko + nso Pedi; Sepedi; Northern Sotho + nub Nubian languages + nwc Classical Newari; Old Newari; Classical Nepal Bhasa + nya ny Chichewa; Chewa; Nyanja + nym Nyamwezi + nyn Nyankole + nyo Nyoro + nzi Nzima + oci oc Occitan (post 1500) + oji oj Ojibwa + ori or Oriya + orm om Oromo + osa Osage + oss os Ossetian; Ossetic + ota Turkish, Ottoman (1500-1928) + oto Otomian languages + paa Papuan languages + pag Pangasinan + pal Pahlavi + pam Pampanga; Kapampangan + pan pa Panjabi; Punjabi + pap Papiamento + pau Palauan + peo Persian, Old (ca.600-400 B.C.) + per/fas fa Persian + phi Philippine languages) + phn Phoenician + pli pi Pali + pol pl Polish + pon Pohnpeian + por pt Portuguese + pra Prakrit languages + pro Provencal, Old (to 1500);Occitan, Old (to 1500) + pus ps Pushto; Pashto + qaa-qtz Reserved for local use + que qu Quechua + raj Rajasthani + rap Rapanui + rar Rarotongan; Cook Islands Maori + roa Romance languages + roh rm Romansh + rom Romany + rum/ron ro Romanian; Moldavian; Moldovan + run rn Rundi + rup Aromanian; Arumanian; Macedo-Romanian + rus ru Russian + sad Sandawe + sag sg Sango + sah Yakut + sai South American Indian languages + sal Salishan languages + sam Samaritan Aramaic + san sa Sanskrit + sas Sasak + sat Santali + scn Sicilian + sco Scots + sel Selkup + sem Semitic languages + sga Irish, Old (to 900) + sgn Sign Languages + shn Shan + sid Sidamo + sin si Sinhala; Sinhalese + sio Siouan languages + sit Sino-Tibetan languages + sla Slavic languages + slo/slk sk Slovak + slv sl Slovenian + sma Southern Sami + sme se Northern Sami + smi Sami languages + smj Lule Sami + smn Inari Sami + smo sm Samoan + sms Skolt Sami + sna sn Shona + snd sd Sindhi + snk Soninke + sog Sogdian + som so Somali + son Songhai languages + sot st Sotho, Southern + spa es Spanish; Castilian + srd sc Sardinian + srn Sranan Tongo + srp sr Serbian + srr Serer + ssa Nilo-Saharan languages + ssw ss Swati + suk Sukuma + sun su Sundanese + sus Susu + sux Sumerian + swa sw Swahili + swe sv Swedish + syc Classical Syriac + syr Syriac + tah ty Tahitian + tai Tai languages + tam ta Tamil + tat tt Tatar + tel te Telugu + tem Timne + ter Tereno + tet Tetum + tgk tg Tajik + tgl tl Tagalog + tha th Thai + tib/bod bo Tibetan + tig Tigre + tir ti Tigrinya + tiv Tiv + tkl Tokelau + tlh Klingon; tlhIngan-Hol + tli Tlingit + tmh Tamashek + tog Tonga (Nyasa) + ton to Tonga (Tonga Islands) + tpi Tok Pisin + tsi Tsimshian + tsn tn Tswana + tso ts Tsonga + tuk tk Turkmen + tum Tumbuka + tup Tupi languages + tur tr Turkish + tut Altaic languages + tvl Tuvalu + twi tw Twi + tyv Tuvinian + udm Udmurt + uga Ugaritic + uig ug Uighur; Uyghur + ukr uk Ukrainian + umb Umbundu + und Undetermined + urd ur Urdu + uzb uz Uzbek + vai Vai + ven ve Venda + vie vi Vietnamese + vol vo Volapuk + vot Votic + wak Wakashan languages + wal Wolaitta; Wolaytta + war Waray + was Washo + wel/cym cy Welsh + wen Sorbian languages + wln wa Walloon + wol wo Wolof + xal Kalmyk; Oirat + xho xh Xhosa + yao Yao + yap Yapese + yid yi Yiddish + yor yo Yoruba + ypk Yupik languages + zap Zapotec + zbl Blissymbols; Blissymbolics; Bliss + zen Zenaga + zha za Zhuang; Chuang + znd Zande languages + zul zu Zulu + zun Zuni + zxx No linguistic content; Not applicable + zza Zaza; Dimili; Dimli; Kirdki; Kirmanjki; Zazaki'! Item was added: + ----- Method: ISOLanguageDefinition class>>readISOLanguagesFrom: (in category 'private') ----- + readISOLanguagesFrom: stream + "ISOLanguageDefinition readISOLanguagesFrom: ISOLanguageDefinition isoLanguages readStream " + | languages language code3 index line | + languages := Dictionary new. + [stream atEnd + or: [(line := stream nextLine readStream) atEnd]] + whileFalse: [ + language := ISOLanguageDefinition new. + code3 := line upTo: Character tab. + (index := code3 indexOf: $/) > 0 + ifTrue: [ + language iso3: (code3 copyFrom: 1 to: index-1). + language iso3Alternate: (code3 copyFrom: index+1 to: code3 size)] + ifFalse: [language iso3: code3]. + language + iso2: (line upTo: Character tab); + language: line upToEnd. + languages at: language iso3 put: language]. + ^languages! Item was added: + ----- Method: ISOLanguageDefinition>>iso2 (in category 'accessing') ----- + iso2 + ^iso2 ifNil: [self iso3]! Item was added: + ----- Method: ISOLanguageDefinition>>iso2: (in category 'initialize') ----- + iso2: aString + iso2 := aString ifEmpty: [nil] ifNotEmpty: [aString]! Item was added: + ----- Method: ISOLanguageDefinition>>iso3 (in category 'accessing') ----- + iso3 + ^iso3 ifNil: ['']! Item was added: + ----- Method: ISOLanguageDefinition>>iso3: (in category 'initialize') ----- + iso3: aString + iso3 := aString ifEmpty: [nil] ifNotEmpty: [aString]! Item was added: + ----- Method: ISOLanguageDefinition>>iso3Alternate (in category 'accessing') ----- + iso3Alternate + ^iso3Alternate ifNil: ['']! Item was added: + ----- Method: ISOLanguageDefinition>>iso3Alternate: (in category 'initialize') ----- + iso3Alternate: aString + iso3Alternate := aString ifEmpty: [nil] ifNotEmpty: [aString]! Item was added: + ----- Method: ISOLanguageDefinition>>language (in category 'accessing') ----- + language + ^language! Item was added: + ----- Method: ISOLanguageDefinition>>language: (in category 'initialize') ----- + language: aString + language := aString! Item was added: + NaturalLanguageTranslator subclass: #InternalTranslator + instanceVariableNames: 'generics' + classVariableNames: 'AllKnownPhrases CachedTranslations' + poolDictionaries: '' + category: 'System-Localization'! + + !InternalTranslator commentStamp: 'tak 10/19/2007 11:12' prior: 0! + An InternalTranslator is used a translation dictionary in a image. + You can use it without any external translation file. + + Structure: + generics Dictionary -- msgid -> msgstr + ! Item was added: + ----- Method: InternalTranslator class>>allKnownPhrases (in category 'private') ----- + allKnownPhrases + ^AllKnownPhrases ifNil: [AllKnownPhrases := Dictionary new: 2051]! Item was added: + ----- Method: InternalTranslator class>>availableLanguageLocaleIDs (in category 'accessing') ----- + availableLanguageLocaleIDs + "Return locale ids for the internal translation dictionary." + "InternalTranslator availableLanguageLocaleIDs" + ^ self cachedTranslations values collect:[:each | each localeID]! Item was added: + ----- Method: InternalTranslator class>>cachedTranslations (in category 'private') ----- + cachedTranslations + "CachedTranslations := nil" + ^CachedTranslations ifNil: [CachedTranslations := Dictionary new]! Item was added: + ----- Method: InternalTranslator class>>directoryForLanguage:country:create: (in category 'private loading') ----- + directoryForLanguage: isoLanguage country: isoCountry create: createDir + "Try to locate the <prefs>/locale/<language>{/<country>} folder. + If createDir is set, create the path down to country or language, depending on wether it's specified.. + Return the directory for country or language depending on specification. + If neither exists, nil" + + "NaturalLanguageTranslator directoryForLanguage: 'es' country: nil create: true" + "NaturalLanguageTranslator directoryForLanguage: 'de' country: 'DE' create: true" + "NaturalLanguageTranslator directoryForLanguage: 'en' country: 'US' create: false" + "NaturalLanguageTranslator directoryForLanguage: 'en' country: nil create: true" + + "If this fails, there is nothing we can do about it here" + | localeDir countryDir languageDir | + localeDir := self localeDirCreate: createDir. + localeDir ifNil: [^nil]. + + isoCountry ifNil: [ + languageDir := localeDir directoryNamed: isoLanguage. + createDir + ifTrue: [languageDir assureExistence]. + ^languageDir exists + ifTrue: [languageDir] + ifFalse: [nil]]. + + countryDir := languageDir directoryNamed: isoCountry. + createDir + ifTrue: [countryDir assureExistence]. + + ^countryDir exists + ifTrue: [countryDir] + ifFalse: [nil]! Item was added: + ----- Method: InternalTranslator class>>directoryForLocaleID:create: (in category 'private loading') ----- + directoryForLocaleID: localeID create: createDir + "Try to locate the <prefs>/locale/<language>{/<country>} folder. + If createDir is set, create the path down to country or language, depending on locale. + Return the directory for country or language depending on locale. + If neither exists, nil" + + "NaturalLanguageTranslator directoryForLanguage: 'de' country: nil readOnly: true" + "NaturalLanguageTranslator directoryForLanguage: 'de' country: 'DE' readOnly: true" + "NaturalLanguageTranslator directoryForLanguage: 'en' country: 'US' readOnly: false" + "NaturalLanguageTranslator directoryForLanguage: 'en' country: nil readOnly: true" + + ^self directoryForLanguage: localeID isoLanguage country: localeID isoCountry create: createDir! Item was added: + ----- Method: InternalTranslator class>>discardAllTranslations (in category 'class initialization') ----- + discardAllTranslations + AllKnownPhrases := nil. + self resetCaches.! Item was added: + ----- Method: InternalTranslator class>>fileReaderServicesForFile:suffix: (in category 'file-services') ----- + fileReaderServicesForFile: fullName suffix: suffix + "Answer the file services associated with given file" + ^ (suffix = self translationSuffix) | (suffix = '*') + ifTrue: [{self serviceMergeLanguageTranslations}] + ifFalse: [#()]! Item was added: + ----- Method: InternalTranslator class>>loadAvailableExternalLocales (in category 'private loading') ----- + loadAvailableExternalLocales + "private - register locales IDs based on the content of the <prefs>/locale/ directory" + | localeDir | + localeDir := self localeDirCreate: false. + localeDir ifNil: [^ #()]. + + localeDir directoryNames + do: [:langDirName | + | langDir | + langDir := localeDir directoryNamed: langDirName. + + (langDir fileNamesMatching: '*.' , self translationSuffix) + ifNotEmpty: [self loadTranslatorForIsoLanguage: langDirName isoCountry: nil]. + + langDir directoryNames + do: [:countryDirName | + | countryDir | + countryDir := langDir directoryNamed: countryDirName. + (countryDir fileNamesMatching: '*.' , self translationSuffix) + ifNotEmpty: [self loadTranslatorForIsoLanguage: langDirName isoCountry: countryDirName] + ] + ]. + ! Item was added: + ----- Method: InternalTranslator class>>loadExternalTranslationsFor: (in category 'private loading') ----- + loadExternalTranslationsFor: translator + "Try to load translations from external external files. + The files are located in the <prefs>/locale/<language>{/<country>} folder. + There can be more than one file for each location, so applications can install their own partial translation tables. All files in the specific folder are loaded." + + | translationDir | + translationDir := self directoryForLocaleID: translator localeID create: false. + translationDir ifNil: [ ^nil ]. + (translationDir fileNamesMatching: '*.' , self translationSuffix) + do: [:fileName | translator loadFromFileNamed: (translationDir fullNameFor: fileName)]! Item was added: + ----- Method: InternalTranslator class>>loadForLocaleIsoString:fromGzippedMimeLiteral: (in category 'file-services') ----- + loadForLocaleIsoString: localeString fromGzippedMimeLiteral: mimeString + "merge the translation from the mime literal." + | stream localeID translator gs rbStream s currentPlatform | + s := Base64MimeConverter mimeDecodeToBytes: mimeString readStream. + s reset. + gs := GZipReadStream on: s. + rbStream := MultiByteBinaryOrTextStream with: gs contents asString. + rbStream converter: UTF8TextConverter new. + rbStream reset. + localeID := LocaleID isoString: localeString. + currentPlatform := Locale currentPlatform. + [Locale + currentPlatform: (Locale localeID: localeID). + stream := ReadStream on: rbStream contents] + ensure: [Locale currentPlatform: currentPlatform]. + translator := self localeID: localeID. + translator loadFromStream: stream. + LanguageEnvironment resetKnownEnvironments! Item was added: + ----- Method: InternalTranslator class>>loadTranslatorForIsoLanguage:isoCountry: (in category 'private loading') ----- + loadTranslatorForIsoLanguage: isoLanguage isoCountry: isoCountry + "private - load the translations from <prefs>/locale/ directory + the procedure is to assure the existence of a translator for the + given language/country and then load the external translations for this translator" + + | translator | + translator := self newLocaleID: (LocaleID isoLanguage: isoLanguage isoCountry: isoCountry). + + self loadExternalTranslationsFor: translator! Item was added: + ----- Method: InternalTranslator class>>localeDirCreate: (in category 'private loading') ----- + localeDirCreate: createDir + "Try to locate the <prefs>/locale/ folder. + If createDir is set, try to create the path. + If it doesn't exist, return nil" + + "If this fails, there is nothing we can do about it here" + | prefDir localeDir | + (createDir not + and: [ExternalSettings preferenceDirectory isNil]) + ifTrue: [^ nil]. + + prefDir := ExternalSettings assuredPreferenceDirectory. + prefDir exists + ifFalse: [^nil]. + + + localeDir := prefDir directoryNamed: 'locale'. + createDir + ifTrue: [localeDir assureExistence]. + ^localeDir exists + ifTrue: [localeDir] + ifFalse: [nil]! Item was added: + ----- Method: InternalTranslator class>>localeID: (in category 'accessing') ----- + localeID: localeID + "For backward compatibility, see NaturalLanguageTranslator >> fileOutHeaderOn:." + ^ self newLocaleID: localeID! Item was added: + ----- Method: InternalTranslator class>>mergeLegacyTranslators (in category 'accessing') ----- + mergeLegacyTranslators + self availableLanguageLocaleIDs + do: [:localeID | (NaturalLanguageTranslator translators includesKey: localeID) + ifFalse: [NaturalLanguageTranslator translators + at: localeID + put: (self newLocaleID: localeID)]]! Item was added: + ----- Method: InternalTranslator class>>mergeTranslationFileNamed: (in category 'file-services') ----- + mergeTranslationFileNamed: fileFullNameString + "merge the translation in the file named fileFullNameString" + + | stream localeID translator | + stream := FileStream readOnlyFileNamed: fileFullNameString. + [localeID := LocaleID isoString: stream localName sansPeriodSuffix. + translator := self localeID: localeID. + translator loadFromStream: stream] + ensure: [stream close]. + LanguageEnvironment resetKnownEnvironments. + + ! Item was added: + ----- Method: InternalTranslator class>>newLocaleID: (in category 'accessing') ----- + newLocaleID: localeID + ^ self cachedTranslations + at: localeID + ifAbsentPut: [self new localeID: localeID]! Item was added: + ----- Method: InternalTranslator class>>privateStartUp (in category 'class initialization') ----- + privateStartUp + self loadAvailableExternalLocales. + self mergeLegacyTranslators. + ! Item was added: + ----- Method: InternalTranslator class>>registerPhrase: (in category 'private') ----- + registerPhrase: phrase + "Using a Dictionary so we can lookup existing string instead of creating needless copies when loading a translation." + self allKnownPhrases at: phrase put: phrase! Item was added: + ----- Method: InternalTranslator class>>registeredPhraseFor: (in category 'private') ----- + registeredPhraseFor: phrase + "Using a Dictionary so we can lookup existing string instead of creating needless copies when loading a translation." + ^self allKnownPhrases at: phrase ifAbsentPut: [phrase]! Item was added: + ----- Method: InternalTranslator class>>removeLocaleID: (in category 'accessing') ----- + removeLocaleID: localeID + "self removeLocaleID: (LocaleID isoString: 'ja-kids')" + self cachedTranslations + removeKey: localeID + ifAbsent: []. + NaturalLanguageTranslator privateStartUp! Item was added: + ----- Method: InternalTranslator class>>resetCaches (in category 'class initialization') ----- + resetCaches + CachedTranslations := nil. + ! Item was added: + ----- Method: InternalTranslator class>>serviceMergeLanguageTranslations (in category 'file-services') ----- + serviceMergeLanguageTranslations + "Answer a service for merging of translation files" + ^ SimpleServiceEntry + provider: self + label: 'merge the translation file' translatedNoop + selector: #mergeTranslationFileNamed: + description: 'merge the translation file into the language named like the file' translatedNoop + buttonLabel: 'merge' translatedNoop! Item was added: + ----- Method: InternalTranslator class>>services (in category 'file-services') ----- + services + "Answer potential file services associated with this class" + ^ {self serviceMergeLanguageTranslations}! Item was added: + ----- Method: InternalTranslator class>>translationSuffix (in category 'private') ----- + translationSuffix + ^'translation'! Item was added: + ----- Method: InternalTranslator>>atRandom (in category 'accessing') ----- + atRandom + + ^ generics atRandom value. + ! Item was added: + ----- Method: InternalTranslator>>checkPhrase:translation: (in category 'translation') ----- + checkPhrase: phrase translation: translation! Item was added: + ----- Method: InternalTranslator>>defaultBackgroundColor (in category 'user interface') ----- + defaultBackgroundColor + "answer the receiver's defaultBackgroundColor for views" + ^ Color cyan! Item was added: + ----- Method: InternalTranslator>>fileOutHeader (in category 'fileIn/fileOut') ----- + fileOutHeader + ^ '''Translation dictionary'''! Item was added: + ----- Method: InternalTranslator>>fileOutHeaderOn: (in category 'user interface') ----- + fileOutHeaderOn: aStream + aStream binary. + UTF8TextConverter writeBOMOn: aStream. + aStream text. + aStream nextChunkPut: self fileOutHeader; + cr. + aStream timeStamp; cr. + aStream nextPut: $!!. + aStream nextChunkPut: '(' , self class name , ' localeID: ' , id storeString , ')'. + aStream cr! Item was added: + ----- Method: InternalTranslator>>fileOutHeaderOn:withBOM: (in category 'user interface') ----- + fileOutHeaderOn: aStream withBOM: bomFlag + bomFlag ifTrue: [ + aStream binary. + UTF8TextConverter writeBOMOn: aStream. + aStream text. + ]. + aStream nextChunkPut: self fileOutHeader; + cr. + aStream timeStamp; cr. + aStream nextPut: $!!. + aStream nextChunkPut: '(' , self class name , ' localeID: ' , id storeString , ')'. + aStream cr! Item was added: + ----- Method: InternalTranslator>>fileOutOn: (in category 'fileIn/fileOut') ----- + fileOutOn: aStream + "self current fileOutOn: Transcript. Transcript endEntry" + self fileOutOn: aStream keys: nil withBOM: true. + ! Item was added: + ----- Method: InternalTranslator>>fileOutOn:keys:withBOM: (in category 'fileIn/fileOut') ----- + fileOutOn: aStream keys: keys withBOM: bomFlag + "self current fileOutOn: Transcript. Transcript endEntry" + self fileOutHeaderOn: aStream withBOM: bomFlag. + (keys + ifNil: [generics keys asSortedCollection]) + do: [:key | self + nextChunkPut: (generics associationAt: key) + on: aStream]. + keys + ifNil: [self untranslated + do: [:each | self nextChunkPut: each -> '' on: aStream]]. + aStream nextPut: $!!; + cr! Item was added: + ----- Method: InternalTranslator>>generics (in category 'private') ----- + generics + ^generics ifNil: [generics := Dictionary new]! Item was added: + ----- Method: InternalTranslator>>isDomainLoaded: (in category 'accessing') ----- + isDomainLoaded: aDomainName + ^true + ! Item was added: + ----- Method: InternalTranslator>>loadFromFileNamed: (in category 'private store-retrieve') ----- + loadFromFileNamed: fileNameString + "Load translations from an external file" + + | stream | + [stream := FileStream readOnlyFileNamed: fileNameString. + self loadFromStream: stream] + ensure: [stream close]. + self changed: #translations. + self changed: #untranslated. + ! Item was added: + ----- Method: InternalTranslator>>loadFromRefStream: (in category 'private store-retrieve') ----- + loadFromRefStream: stream + "Load translations from an external file" + | loadedArray refStream | + refStream := ReferenceStream on: stream. + [loadedArray := refStream next] + ensure: [refStream close]. + self processExternalObject: loadedArray ! Item was added: + ----- Method: InternalTranslator>>loadFromStream: (in category 'private store-retrieve') ----- + loadFromStream: stream + "Load translations from an external file" + | header isFileIn | + header := '''Translation dictionary'''. + isFileIn := (stream next: header size) + = header. + stream reset. + isFileIn + ifTrue: [stream fileInAnnouncing: 'Loading ' translated, stream localName] + ifFalse: [self loadFromRefStream: stream]! Item was added: + ----- Method: InternalTranslator>>mergeTranslations: (in category 'private store-retrieve') ----- + mergeTranslations: newTranslations + "Merge a new set of translations into the exiting table. + Overwrites existing entries." + + newTranslations keysAndValuesDo: [:key :value | + self rawPhrase: (self class registeredPhraseFor: key) translation: value]. + self changed: #translations. + self changed: #untranslated.! Item was added: + ----- Method: InternalTranslator>>nextChunkPut:on: (in category 'fileIn/fileOut') ----- + nextChunkPut: anObject on: aStream + | i remainder terminator | + terminator := $!!. + remainder := anObject storeString. + [(i := remainder indexOf: terminator) = 0] + whileFalse: [aStream + nextPutAll: (remainder copyFrom: 1 to: i). + aStream nextPut: terminator. + "double imbedded terminators" + remainder := remainder copyFrom: i + 1 to: remainder size]. + aStream nextPutAll: remainder. + aStream nextPut: terminator; cr.! Item was added: + ----- Method: InternalTranslator>>phrase:translation: (in category 'translation') ----- + phrase: phraseString translation: translationString + self generics at: phraseString put: translationString asString. + self changed: #translations. + self changed: #untranslated.! Item was added: + ----- Method: InternalTranslator>>processExternalObject: (in category 'private store-retrieve') ----- + processExternalObject: anArray + "pivate - process the external object" + + "new format -> {translations. untranslated}" + + anArray second do: [:each | self class registerPhrase: each]. + + self mergeTranslations: anArray first! Item was added: + ----- Method: InternalTranslator>>rawPhrase:translation: (in category 'translation') ----- + rawPhrase: phraseString translation: translationString + self generics at: phraseString put: translationString asString. + ! Item was added: + ----- Method: InternalTranslator>>rawRemoveUntranslated: (in category 'translation') ----- + rawRemoveUntranslated: untranslated + + self class allKnownPhrases removeKey: untranslated ifAbsent: []. + self changed: #untranslated.! Item was added: + ----- Method: InternalTranslator>>removeTranslationFor: (in category 'translation') ----- + removeTranslationFor: phraseString + self generics removeKey: phraseString ifAbsent: []. + self changed: #translations. + self changed: #untranslated.! Item was added: + ----- Method: InternalTranslator>>removeUntranslated: (in category 'translation') ----- + removeUntranslated: untranslated + + self class allKnownPhrases removeKey: untranslated ifAbsent: []. + ! Item was added: + ----- Method: InternalTranslator>>saveToFileNamed: (in category 'private store-retrieve') ----- + saveToFileNamed: fileNameString + "save the receiver's translations to a file named fileNameString" + | stream | + "Set true if you need to save as binary" + false + ifTrue: [stream := ReferenceStream fileNamed: fileNameString. + stream nextPut: {self translations. self untranslated}. + stream close. + ^ self]. + stream := FileStream fileNamed: fileNameString. + [self fileOutOn: stream] + ensure: [stream close]! Item was added: + ----- Method: InternalTranslator>>scanFrom: (in category 'fileIn/fileOut') ----- + scanFrom: aStream + "Read a definition of dictionary. + Make sure current locale corresponds my locale id" + | aString newTranslations assoc currentPlatform | + newTranslations := Dictionary new. + currentPlatform := Locale currentPlatform. + [Locale + currentPlatform: (Locale localeID: id). + [aString := aStream nextChunk withSqueakLineEndings. + aString size > 0] + whileTrue: [assoc := Compiler evaluate: aString. + assoc value = '' + ifTrue: [self class registerPhrase: assoc key] + ifFalse: [newTranslations add: assoc]]] + ensure: [Locale currentPlatform: currentPlatform]. + self mergeTranslations: newTranslations! Item was added: + ----- Method: InternalTranslator>>translate:inDomain: (in category 'translation') ----- + translate: aString inDomain: aDomainName + | translator | + ^ self generics + at: aString + ifAbsent: [self localeID hasParent + ifTrue: [translator := self class cachedTranslations + at: self localeID parent + ifAbsent: [^ aString]. + translator translate: aString inDomain: aDomainName] + ifFalse: [aString]]! Item was added: + ----- Method: InternalTranslator>>translations (in category 'accessing') ----- + translations + ^self generics! Item was added: + ----- Method: InternalTranslator>>untranslated (in category 'accessing') ----- + untranslated + | translations | + translations := self translations. + ^self class allKnownPhrases reject: [:each | translations includesKey: each]! Item was added: + Object subclass: #Locale + instanceVariableNames: 'id shortDate longDate time decimalSymbol digitGrouping currencySymbol currencyNotation measurement offsetLocalToUTC offsetVMToUTC dstActive' + classVariableNames: 'Current CurrentPlatform KnownLocales LanguageSymbols LocaleChangeListeners PlatformEncodings Previous' + poolDictionaries: '' + category: 'System-Localization'! + + !Locale commentStamp: '<historical>' prior: 0! + Main comment stating the purpose of this class and relevant relationship to other classes. + + + +
http://www.w3.org/WAI/ER/IG/ert/iso639.htm
+
http://www.oasis-open.org/cover/iso639a.html
+ See also +
http://oss.software.ibm.com/cvs/icu/~checkout~/icuhtml/design/language_code…
+
http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.10
+ + ISO 3166 +
http://mitglied.lycos.de/buran/knowhow/codes/locales/
+ ! Item was added: + ----- Method: Locale class>>addLocalChangedListener: (in category 'notification') ----- + addLocalChangedListener: anObjectOrClass + self localeChangedListeners add: anObjectOrClass! Item was added: + ----- Method: Locale class>>clipboadInterpreter (in category 'accessing') ----- + clipboadInterpreter + ^NoConversionClipboardInterpreter new! Item was added: + ----- Method: Locale class>>current (in category 'accessing') ----- + current + "Current := nil" + Current ifNil: [ + Current := self determineCurrentLocale. + "Transcript show: 'Current locale: ' , Current localeID asString; cr"]. + ^Current! Item was added: + ----- Method: Locale class>>currentPlatform (in category 'accessing') ----- + currentPlatform + "CurrentPlatform := nil" + CurrentPlatform ifNil: [CurrentPlatform := self determineCurrentLocale]. + ^CurrentPlatform! Item was added: + ----- Method: Locale class>>currentPlatform: (in category 'accessing') ----- + currentPlatform: locale + CurrentPlatform := locale. + LanguageEnvironment startUp. + ! Item was added: + ----- Method: Locale class>>currentPlatform:during: (in category 'accessing') ----- + currentPlatform: locale during: aBlock + "Alter current language platform during a block" + | backupPlatform | + backupPlatform := self currentPlatform. + [self currentPlatform: locale. + aBlock value] + ensure: [self currentPlatform: backupPlatform]! Item was added: + ----- Method: Locale class>>defaultEncodingName: (in category 'platform specific') ----- + defaultEncodingName: languageSymbol + | encodings platformName osVersion | + platformName := SmalltalkImage current platformName. + osVersion := SmalltalkImage current getSystemAttribute: 1002. + encodings := self platformEncodings at: languageSymbol + ifAbsent: [self platformEncodings at: #default]. + encodings at: platformName ifPresent: [:encoding | ^encoding]. + encodings at: platformName , ' ' , osVersion + ifPresent: [:encoding | ^encoding]. + ^encodings at: #default! Item was added: + ----- Method: Locale class>>defaultInputInterpreter (in category 'platform specific') ----- + defaultInputInterpreter + | platformName osVersion | + platformName := SmalltalkImage current platformName. + osVersion := SmalltalkImage current getSystemAttribute: 1002. + (platformName = 'Win32' and: [osVersion = 'CE']) + ifTrue: [^NoInputInterpreter new]. + platformName = 'Win32' ifTrue: [^MacRomanInputInterpreter new]. + ^NoInputInterpreter new! Item was added: + ----- Method: Locale class>>determineCurrentLocale (in category 'private') ----- + determineCurrentLocale + "For now just return the default locale. + A smarter way would be to determine the current platforms default locale." + "Locale determineCurrentLocale" + + ^self new determineLocale! Item was added: + ----- Method: Locale class>>initKnownLocales (in category 'private') ----- + initKnownLocales + | locales | + locales := Dictionary new. + + "Init the locales for which we have translations" + InternalTranslator availableLanguageLocaleIDs do: [:id | + locales at: id put: (Locale new localeID: id)]. + ^locales! Item was added: + ----- Method: Locale class>>initialize (in category 'class initialization') ----- + initialize + "Locale initialize" + + Smalltalk addToStartUpList: Locale. + Preferences addPreference: #useLocale + categories: #('general') default: false + balloonHelp: 'Use the system locale to set the system language etc at startup'.! Item was added: + ----- Method: Locale class>>initializePlatformEncodings (in category 'class initialization') ----- + initializePlatformEncodings + "Locale initializePlatformEncodings" + + | platform | + PlatformEncodings isNil ifTrue: [ PlatformEncodings := Dictionary new ]. + + platform := PlatformEncodings at: 'default' ifAbsentPut: Dictionary new. + platform + at: 'default' put: 'iso8859-1'; + at: 'Win32 CE' put: 'utf-8'; + yourself. + + platform := PlatformEncodings at: 'ja' ifAbsentPut: Dictionary new. + platform + at: 'default' put: 'shift-jis'; + at: 'unix' put: 'euc-jp'; + at: 'Win32 CE' put: 'utf-8'; + yourself. + + platform := PlatformEncodings at: 'ko' ifAbsentPut: Dictionary new. + platform + at: 'default' put: 'euc-kr'; + at: 'Win32 CE' put: 'utf-8'; + yourself. + + platform := PlatformEncodings at: 'zh' ifAbsentPut: Dictionary new. + platform + at: 'default' put: 'gb2312'; + at: 'unix' put: 'euc-cn'; + at: 'Win32 CE' put: 'utf-8'; + yourself. + ! Item was added: + ----- Method: Locale class>>isoLanguage: (in category 'accessing') ----- + isoLanguage: isoLanguage + ^self isoLanguage: isoLanguage isoCountry: nil! Item was added: + ----- Method: Locale class>>isoLanguage:isoCountry: (in category 'accessing') ----- + isoLanguage: isoLanguage isoCountry: isoCountry + ^self localeID: (LocaleID isoLanguage: isoLanguage isoCountry: isoCountry)! Item was added: + ----- Method: Locale class>>isoLocale: (in category 'accessing') ----- + isoLocale: aString + ! Item was added: + ----- Method: Locale class>>knownLocales (in category 'private') ----- + knownLocales + "KnownLocales := nil" + ^KnownLocales ifNil: [KnownLocales := self initKnownLocales]! Item was added: + ----- Method: Locale class>>languageSymbol: (in category 'accessing') ----- + languageSymbol: languageSymbol + "Locale languageSymbol: #Deutsch" + + ^self isoLanguage: (LanguageSymbols at: languageSymbol)! Item was added: + ----- Method: Locale class>>localeChanged (in category 'notification') ----- + localeChanged + + #(#ParagraphEditor #BitEditor #FormEditor #StandardSystemController ) + do: [:key | Smalltalk + at: key + ifPresent: [:class | class initialize]]. + PartsBin localeChanged. + Project localeChanged. + PaintBoxMorph localeChanged. + ColorPickerMorph localeChanged. + Preferences localeChanged! Item was added: + ----- Method: Locale class>>localeChangedGently (in category 'notification') ----- + localeChangedGently + + #(#ParagraphEditor #BitEditor #FormEditor #StandardSystemController ) + do: [:key | Smalltalk + at: key + ifPresent: [:class | class initialize]]. + PartsBin localeChangedGently. + Project localeChangedGently. + PaintBoxMorph localeChangedGently. + ColorPickerMorph localeChangedGently. + Preferences localeChangedGently. + ! Item was added: + ----- Method: Locale class>>localeChangedListeners (in category 'notification') ----- + localeChangedListeners + ^LocaleChangeListeners ifNil: [LocaleChangeListeners := OrderedCollection new]! Item was added: + ----- Method: Locale class>>localeID: (in category 'accessing') ----- + localeID: id + ^self knownLocales at: id ifAbsentPut: [Locale new localeID: id]! Item was added: + ----- Method: Locale class>>migrateSystem (in category 'private') ----- + migrateSystem + "Locale migrateSystem" + "Do all the necessary operations to switch to the new Locale environment." + + LocaleChangeListeners := nil. + self + addLocalChangedListener: HandMorph; + addLocalChangedListener: Clipboard; + addLocalChangedListener: Vocabulary; + addLocalChangedListener: PartsBin; + addLocalChangedListener: Project; + addLocalChangedListener: PaintBoxMorph; + yourself! Item was added: + ----- Method: Locale class>>platformEncodings (in category 'class initialization') ----- + platformEncodings + PlatformEncodings isEmptyOrNil ifTrue: [ self initializePlatformEncodings ]. + ^PlatformEncodings + ! Item was added: + ----- Method: Locale class>>previous (in category 'accessing') ----- + previous + + ^ Previous + ! Item was added: + ----- Method: Locale class>>resetKnownLocales (in category 'private') ----- + resetKnownLocales + + KnownLocales := nil + ! Item was added: + ----- Method: Locale class>>startUp: (in category 'system startUp') ----- + startUp: resuming + | newID | + resuming ifFalse: [^self]. + (Preferences valueOfFlag: #useLocale) + ifTrue: [ + DateAndTime localTimeZone: (TimeZone + offset: (Duration minutes: Locale current offsetLocalToUTC) + name: 'Local Time' + abbreviation: 'LT'). + newID := self current determineLocaleID. + newID ~= LocaleID current + ifTrue: [self switchAndInstallFontToID: newID gently: true]]! Item was added: + ----- Method: Locale class>>stringForLanguageNameIs: (in category 'accessing') ----- + stringForLanguageNameIs: localeID + "Answer a string for a menu determining whether the given + symbol is the project's natural language" + ^ (self current localeID = localeID + ifTrue: ['<yes>'] + ifFalse: ['<no>']) + , localeID displayName! Item was added: + ----- Method: Locale class>>switchAndInstallFontToID: (in category 'accessing') ----- + switchAndInstallFontToID: localeID + "Locale switchAndInstallFontToID: (LocaleID isoLanguage: 'de')" + | locale | + locale := Locale localeID: localeID. + locale languageEnvironment isFontAvailable + ifFalse: [(self confirm: 'This language needs additional fonts. + Do you want to install the fonts?' translated) + ifTrue: [locale languageEnvironment installFont] + ifFalse: [^ self]]. + self + switchTo: locale! Item was added: + ----- Method: Locale class>>switchAndInstallFontToID:gently: (in category 'accessing') ----- + switchAndInstallFontToID: localeID gently: gentlyFlag + | locale result env envFound ret fontInImage menu | + "Logic: + - not in Rainbow, + - if the font is in the image, use the font. + - if the font is not in the image, + - ask to choose: + - load font + - try to enable pango, if pango is available + - or cancel. + - if the previous step fails, notify the user that you cannot switch to the language. + Details: + - how to check non-pango font is available: + - if the language environment for the locale doesn't exist, the font is not available. + - if font loading fails, it is not available. + - how to check if the language environment doesn't exist: + - if the locales languageEnvironment is Latin1 but the locale isn't it is not available. + " + locale := Locale localeID: localeID. + env := locale languageEnvironment. + result := true. + envFound := (Latin1Environment supportedLanguages includes: locale isoLanguage) or: [(env isMemberOf: Latin1Environment) not]. + fontInImage := envFound and: [env isFontAvailable]. + fontInImage ifFalse: [ + menu := MenuMorph new. + menu defaultTarget: menu. + envFound ifTrue: [menu add: 'load font' translated selector: #modalSelection: argument: #loadFont]. + menu add: 'cancel' translated selector: #modalSelection: argument: #cancel. + menu addTitle: 'This language needs additional fonts. + Do you want to install the fonts?' translated. + ret := menu invokeModal. + ret = #loadFont ifTrue: [result := env installFont. result ifTrue: [StrikeFont setupDefaultFallbackTextStyle]]. + (ret ~~ #loadFont and: [ret ~~ #enablePango]) ifTrue: [result := false]]. + result ifFalse: [self inform: 'Cannot load additional fonts' translated] ifTrue: [self switchTo: locale gently: gentlyFlag]. + ! Item was added: + ----- Method: Locale class>>switchTo: (in category 'accessing') ----- + switchTo: locale + self switchTo: locale gently: false. + ! Item was added: + ----- Method: Locale class>>switchTo:gently: (in category 'accessing') ----- + switchTo: locale gently: gentlyFlag + "Locale switchTo: (Locale isoLanguage: 'de')" + | availableID | + availableID := (NaturalLanguageTranslator availableForLocaleID: locale localeID) localeID. + Current localeID = availableID + ifFalse: [Previous := Current. + CurrentPlatform := Current := Locale localeID: availableID. + NaturalLanguageTranslator localeChanged. + gentlyFlag ifTrue: [self localeChangedGently] ifFalse: [self localeChanged]]! Item was added: + ----- Method: Locale class>>switchToID: (in category 'accessing') ----- + switchToID: localeID + "Locale switchToID: (LocaleID isoLanguage: 'de') " + + self switchTo: (Locale localeID: localeID)! Item was added: + ----- Method: Locale>>determineLocale (in category 'accessing') ----- + determineLocale + self localeID: self determineLocaleID! Item was added: + ----- Method: Locale>>determineLocaleID (in category 'accessing') ----- + determineLocaleID + "Locale current determineLocaleID" + | isoLang isoCountry | + isoLang := self fetchISO2Language + ifNil: [^ self localeID]. + isoCountry := self fetchISOCountry + ifNil: [^ LocaleID isoLanguage: isoLang]. + ^ LocaleID isoLanguage: isoLang isoCountry: isoCountry! Item was added: + ----- Method: Locale>>fetchISO2Language (in category 'private') ----- + fetchISO2Language + "Locale current fetchISO2Language" + | lang isoLang | + lang := self primLanguage. + lang ifNil: [^nil]. + lang := lang copyUpTo: 0 asCharacter. + lang size == 2 + ifTrue: [^lang]. + isoLang := ISOLanguageDefinition iso3LanguageDefinition: lang. + ^isoLang + ifNil: [nil] + ifNotNil: [isoLang iso2]! Item was added: + ----- Method: Locale>>fetchISOCountry (in category 'private') ----- + fetchISOCountry + "Locale current fetchISOCountry" + | countryCode | + countryCode := self primCountry + ifNil: [^ nil]. + ^ countryCode copyUpTo: 0 asCharacter! Item was added: + ----- Method: Locale>>iconForNativeLanguage (in category 'accessing') ----- + iconForNativeLanguage + + ^ (NaturalLanguageFormTranslator localeID: self localeID) translate: 'LanguageNameInNativeLanguage'. + ! Item was added: + ----- Method: Locale>>isoCountry (in category 'accessing') ----- + isoCountry + ^self localeID isoCountry! Item was added: + ----- Method: Locale>>isoLanguage (in category 'accessing') ----- + isoLanguage + ^self localeID isoLanguage! Item was added: + ----- Method: Locale>>isoLocale (in category 'accessing') ----- + isoLocale + "<language>-<country>" + ^self isoCountry + ifNil: [self isoLanguage] + ifNotNil: [self isoLanguage , '-' , self isoCountry]! Item was added: + ----- Method: Locale>>languageEnvironment (in category 'accessing') ----- + languageEnvironment + ^LanguageEnvironment localeID: self localeID! Item was added: + ----- Method: Locale>>localeID (in category 'accessing') ----- + localeID + ^id! Item was added: + ----- Method: Locale>>localeID: (in category 'accessing') ----- + localeID: anID + id := anID! Item was added: + ----- Method: Locale>>offsetLocalToUTC (in category 'accessing') ----- + offsetLocalToUTC + ^self primTimezone! Item was added: + ----- Method: Locale>>primCountry (in category 'system primitives') ----- + primCountry + "Returns string with country tag according to ISO 639" + <primitive: 'primitiveCountry' module: 'LocalePlugin'> + ^'US'! Item was added: + ----- Method: Locale>>primCurrencyNotation (in category 'system primitives') ----- + primCurrencyNotation + "Returns boolean if symbol is pre- (true) or post-fix (false)" + <primitive: 'primitiveCurrencyNotation' module: 'LocalePlugin'> + ^true! Item was added: + ----- Method: Locale>>primCurrencySymbol (in category 'system primitives') ----- + primCurrencySymbol + "Returns string with currency symbol" + <primitive: 'primitiveCurrencySymbol' module:'LocalePlugin'> + ^'$'! Item was added: + ----- Method: Locale>>primDST (in category 'system primitives') ----- + primDST + "Returns boolean if DST (daylight saving time) is active or not" + <primitive:'primitiveDaylightSavings' module: 'LocalePlugin'> + ^false! Item was added: + ----- Method: Locale>>primDecimalSymbol (in category 'system primitives') ----- + primDecimalSymbol + "Returns string with e.g. '.' or ','" + <primitive:'primitiveDecimalSymbol' module: 'LocalePlugin'> + ^'.'! Item was added: + ----- Method: Locale>>primDigitGrouping (in category 'system primitives') ----- + primDigitGrouping + "Returns string with e.g. '.' or ',' (thousands etc)" + <primitive:'primitiveDigitGroupingSymbol' module: 'LocalePlugin'> + ^','! Item was added: + ----- Method: Locale>>primLanguage (in category 'system primitives') ----- + primLanguage + "returns string with language tag according to ISO 639" + <primitive:'primitiveLanguage' module: 'LocalePlugin'> + ^'en' + + ! Item was added: + ----- Method: Locale>>primLongDateFormat (in category 'system primitives') ----- + primLongDateFormat + "Returns the long date format + d day, m month, y year, + double symbol is null padded, single not padded (m=6, mm=06) + dddd weekday + mmmm month name" + <primitive:'primitiveLongDateFormat' module: 'LocalePlugin'> + ^'dddd, mmmm d, yyyy'! Item was added: + ----- Method: Locale>>primMeasurement (in category 'system primitives') ----- + primMeasurement + "Returns boolean denoting metric(true) or imperial(false)." + <primitive:'primitiveMeasurementMetric' module: 'LocalePlugin'> + ^true + ! Item was added: + ----- Method: Locale>>primShortDateFormat (in category 'system primitives') ----- + primShortDateFormat + "Returns the short date format + d day, m month, y year, + double symbol is null padded, single not padded (m=6, mm=06) + dddd weekday + mmmm month name" + <primitive:'primitiveShortDateFormat' module: 'LocalePlugin'> + ^'m/d/yy'! Item was added: + ----- Method: Locale>>primTimeFormat (in category 'system primitives') ----- + primTimeFormat + "Returns string time format + Format is made up of + h hour (h 12, H 24), m minute, s seconds, x (am/pm String) + double symbol is null padded, single not padded (h=6, hh=06)" + <primitive:'primitiveTimeFormat' module: 'LocalePlugin'> + ^'h:mmx'! Item was added: + ----- Method: Locale>>primTimezone (in category 'system primitives') ----- + primTimezone + "The offset from UTC in minutes, with positive offsets being towards the east. + (San Francisco is in UTC -07*60 and Paris is in UTC +02*60 when daylight savings is in effect)." + <primitive:'primitiveTimezoneOffset' module: 'LocalePlugin'> + ^0! Item was added: + ----- Method: Locale>>primVMOffsetToUTC (in category 'system primitives') ----- + primVMOffsetToUTC + "Returns the offset in minutes between the VM and UTC. + If the VM does not support UTC times, this is 0. + Also gives us backward compatibility with old VMs as the primitive will fail and we then can return 0." + <primitive:'primitiveVMOffsetToUTC' module: 'LocalePlugin'> + ^0! Item was added: + ----- Method: Locale>>printOn: (in category 'accessing') ----- + printOn: aStream + super printOn: aStream. + aStream nextPutAll: '(' , id printString , ')'! Item was added: + Object subclass: #LocaleID + instanceVariableNames: 'isoLanguage isoCountry' + classVariableNames: '' + poolDictionaries: '' + category: 'System-Localization'! Item was added: + ----- Method: LocaleID class>>current (in category 'accessing') ----- + current + ^Locale current localeID! Item was added: + ----- Method: LocaleID class>>isoLanguage: (in category 'instance creation') ----- + isoLanguage: langString + ^self isoLanguage: langString isoCountry: nil! Item was added: + ----- Method: LocaleID class>>isoLanguage:isoCountry: (in category 'instance creation') ----- + isoLanguage: langString isoCountry: countryStringOrNil + ^self new isoLanguage: langString isoCountry: countryStringOrNil! Item was added: + ----- Method: LocaleID class>>isoString: (in category 'instance creation') ----- + isoString: isoString + "Parse the isoString (<language>-<country>) into its components and return the matching LocaleID" + "LocaleID isoString: 'en' " + "LocaleID isoString: 'en-us' " + + | parts language country | + parts := isoString findTokens: #($- ). + language := parts first. + parts size > 1 + ifTrue: [country := parts second]. + ^self isoLanguage: language isoCountry: country! Item was added: + ----- Method: LocaleID class>>posixName: (in category 'instance creation') ----- + posixName: aString + ^ self + isoString: (aString copyReplaceAll: ':=' with: '-')! Item was added: + ----- Method: LocaleID class>>previous (in category 'accessing') ----- + previous + ^Locale previous localeID! Item was added: + ----- Method: LocaleID>>= (in category 'comparing') ----- + = anotherObject + self class == anotherObject class + ifFalse: [^false]. + ^self isoLanguage = anotherObject isoLanguage + and: [self isoCountry = anotherObject isoCountry]! Item was added: + ----- Method: LocaleID>>displayCountry (in category 'accessing') ----- + displayCountry + ^(ISOLanguageDefinition iso2Countries at: self isoCountry asUppercase ifAbsent: [ self isoCountry ]) ! Item was added: + ----- Method: LocaleID>>displayLanguage (in category 'accessing') ----- + displayLanguage + | language | + language := (ISOLanguageDefinition iso2LanguageTable + at: self isoLanguage + ifAbsent: [^ self isoLanguage]) language. + ^ self isoCountry + ifNil: [language] + ifNotNil: [language , ' (' , self displayCountry , ')']! Item was added: + ----- Method: LocaleID>>displayName (in category 'accessing') ----- + displayName + "Answer a proper name to represent the receiver in GUI. + + The wording is provided by translations of the magic value + '<language display name>'. + + 'English' -> 'English' + 'German' -> 'Deutsch' + " + | magicPhrase translatedMagicPhrase | + magicPhrase := '<language display name>'. + translatedMagicPhrase := GetTextTranslator translateWithoutLoading: magicPhrase toLocaleID: self. + ^ translatedMagicPhrase = magicPhrase + ifTrue: [self displayLanguage] + ifFalse: [translatedMagicPhrase]! Item was added: + ----- Method: LocaleID>>hasParent (in category 'testing') ----- + hasParent + ^self isoCountry notNil! Item was added: + ----- Method: LocaleID>>hash (in category 'comparing') ----- + hash + ^self isoLanguage hash bitXor: self isoCountry hash! Item was added: + ----- Method: LocaleID>>isoCountry (in category 'accessing') ----- + isoCountry + ^isoCountry! Item was added: + ----- Method: LocaleID>>isoLanguage (in category 'accessing') ----- + isoLanguage + ^isoLanguage! Item was added: + ----- Method: LocaleID>>isoLanguage:isoCountry: (in category 'initialize') ----- + isoLanguage: langString isoCountry: countryStringOrNil + isoLanguage := langString. + isoCountry := countryStringOrNil! Item was added: + ----- Method: LocaleID>>isoString (in category 'accessing') ----- + isoString + ^self asString! Item was added: + ----- Method: LocaleID>>parent (in category 'accessing') ----- + parent + ^self class isoLanguage: self isoLanguage! Item was added: + ----- Method: LocaleID>>posixName (in category 'printing') ----- + posixName + "(LocaleID isoString: 'es-MX') posixName" + "(LocaleID isoString: 'es') posixName" + "language[_territory]" + ^ self isoCountry + ifNil: [self isoLanguage] + ifNotNil: [self isoLanguage , ':=' , self isoCountry]! Item was added: + ----- Method: LocaleID>>printOn: (in category 'printing') ----- + printOn: stream + "<language>-<country>" + stream nextPutAll: self isoLanguage. + self isoCountry + ifNotNil: [stream nextPut: $-; nextPutAll: self isoCountry]! Item was added: + ----- Method: LocaleID>>storeOn: (in category 'printing') ----- + storeOn: aStream + aStream nextPut: $(. + aStream nextPutAll: self class name. + aStream nextPutAll: ' isoString: '. + aStream nextPutAll: '''' , self printString , ''''. + aStream nextPut: $). + ! Item was added: + ----- Method: LocaleID>>translator (in category 'accessing') ----- + translator + ^ InternalTranslator localeID: self ! Item was added: + Object subclass: #NaturalLanguageFormTranslator + instanceVariableNames: 'id generics' + classVariableNames: 'CachedTranslations' + poolDictionaries: '' + category: 'System-Localization'! Item was added: + ----- Method: NaturalLanguageFormTranslator class>>bitmapForJapanese (in category 'as yet unclassified') ----- + bitmapForJapanese + + ^ (Form + extent: 54@17 + depth: 16 + fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65536 0 1 65537 65537 65537 65537 0 0 0 0 1 0 0 0 0 65537 65537 1 65537 65537 65536 1 0 0 0 1 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 65536 0 0 65536 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 1 65537 65537 65536 1 0 0 0 1 0 0 65536 0 0 1 0 0 0 1 0 1 65537 65537 65537 65537 65537 65537 0 0 0 1 65537 65537 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 65537 65536 0 0 0 65537 65537 0 65536 1 0 0 0 65536 1 0 0 0 1 65537 65537 65537 65537 0 0 0 1 1 1 0 0 0 0 0 0 65536 1 0 0 0 65536 1 0 0 0 1 0 0 0 1 0 0 0 1 1 1 0 0 0 65537 65537 65537 65537 65537 65537 0 0 65536 1 0 0 0 1 0 0 0 1 0 0 0 65536 1 0 65536 0 0 0 0 0 0 0 0 0 0 65536 1 0 0 0 1 0 0 0 1 0 0 1 0 1 0 1 0 0 65537 65537 1 65537 65537 65536 0 0 65536 1 0 0 0 1 0 0 0 1 0 0 65536 65537 65537 65537 65536 65536 0 65536 1 1 0 0 65536 0 0 65536 0 65536 0 0 1 0 0 0 1 0 1 0 0 1 0 0 1 0 65536 1 1 0 0 65536 0 1 0 0 65536 0 0 1 65537 65537 65537 65537 0 0 0 0 1 0 0 0 0 65537 65537 1 65537 65537 65536 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 65536 0 0 0 65536 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0) + offset: 0@0)! Item was added: + ----- Method: NaturalLanguageFormTranslator class>>cachedTranslations (in category 'accessing') ----- + cachedTranslations + "CachedTranslations := nil" + ^CachedTranslations ifNil: [CachedTranslations := Dictionary new]! Item was added: + ----- Method: NaturalLanguageFormTranslator class>>cleanUp (in category 'class initialization') ----- + cleanUp + "Flush caches" + + CachedTranslations := nil! Item was added: + ----- Method: NaturalLanguageFormTranslator class>>initializeJapaneseBitmap (in category 'as yet unclassified') ----- + initializeJapaneseBitmap + + (self localeID: (LocaleID isoString: 'ja')) name: 'LanguageNameInNativeLanguage' form: self bitmapForJapanese. + ! Item was added: + ----- Method: NaturalLanguageFormTranslator class>>isoLanguage: (in category 'accessing') ----- + isoLanguage: isoLanguage + "Return the generic language translator as there is no information about the country code" + + ^self isoLanguage: isoLanguage isoCountry: nil! Item was added: + ----- Method: NaturalLanguageFormTranslator class>>isoLanguage:isoCountry: (in category 'accessing') ----- + isoLanguage: isoLanguage isoCountry: isoCountry + ^self localeID: (LocaleID isoLanguage: isoLanguage isoCountry: isoCountry)! Item was added: + ----- Method: NaturalLanguageFormTranslator class>>loadFormsFrom: (in category 'i/o') ----- + loadFormsFrom: aStream + + | rr pair inst | + rr := ReferenceStream on: aStream. + pair := rr next. + inst := self localeID: (LocaleID isoString: pair first). + pair second associationsDo: [:assoc | + inst name: assoc key form: assoc value. + ]. + ^ inst. + ! Item was added: + ----- Method: NaturalLanguageFormTranslator class>>localeID: (in category 'accessing') ----- + localeID: localeID + ^ self cachedTranslations + at: localeID + ifAbsentPut: [self new localeID: localeID]! Item was added: + ----- Method: NaturalLanguageFormTranslator>>generics (in category 'accessing') ----- + generics + ^generics ifNil: [generics := Dictionary new]! Item was added: + ----- Method: NaturalLanguageFormTranslator>>localeID (in category 'accessing') ----- + localeID + ^id! Item was added: + ----- Method: NaturalLanguageFormTranslator>>localeID: (in category 'accessing') ----- + localeID: anID + id := anID! Item was added: + ----- Method: NaturalLanguageFormTranslator>>name:form: (in category 'accessing') ----- + name: formName form: translatedForm + self generics at: formName put: translatedForm. + ! Item was added: + ----- Method: NaturalLanguageFormTranslator>>saveFormsOn: (in category 'i/o') ----- + saveFormsOn: aStream + + | rr | + rr := ReferenceStream on: aStream. + rr nextPut: {id isoString. generics}. + rr close. + ! Item was added: + ----- Method: NaturalLanguageFormTranslator>>translate: (in category 'utilities') ----- + translate: aString + + ^ (self generics + at: aString ifAbsent: [nil]) deepCopy. + + "Do you like to write 'form ifNotNil: [form deepCopy]'?" + ! Item was added: + Object subclass: #NaturalLanguageTranslator + instanceVariableNames: 'id' + classVariableNames: 'Translators' + poolDictionaries: '' + category: 'System-Localization'! + + !NaturalLanguageTranslator commentStamp: '<historical>' prior: 0! + abstract class of natural language translator. + Class side manages and holds loaded instances of concrete classes.! Item was added: + ----- Method: NaturalLanguageTranslator class>>allKnownPhrases (in category 'private') ----- + allKnownPhrases + ^AllKnownPhrases ifNil: [AllKnownPhrases := Dictionary new: 2051]! Item was added: + ----- Method: NaturalLanguageTranslator class>>availableForLocaleID: (in category 'accessing') ----- + availableForLocaleID: localeID + "Answer available locale ID. + If translator is not found for correct locale ID, then isoLanguage is + attempted for the key." + ^ self translators + at: localeID + ifAbsent: [localeID hasParent + ifTrue: [self translators + at: localeID parent + ifAbsent: [self default]] + ifFalse: [self default]]! Item was added: + ----- Method: NaturalLanguageTranslator class>>availableLanguageLocaleIDs (in category 'accessing') ----- + availableLanguageLocaleIDs + "Return the locale ids for the currently available languages. + Meaning those which either internally or externally have + translations available." + "NaturalLanguageTranslator availableLanguageLocaleIDs" + ^ self translators values collect:[:each | each localeID]! Item was added: + ----- Method: NaturalLanguageTranslator class>>cachedTranslations (in category 'private') ----- + cachedTranslations + "CachedTranslations := nil" + ^CachedTranslations ifNil: [CachedTranslations := Dictionary new]! Item was added: + ----- Method: NaturalLanguageTranslator class>>cleanUp (in category 'class initialization') ----- + cleanUp + "Flush caches" + + CachedTranslations := nil. + AllKnownPhrases := nil.! Item was added: + ----- Method: NaturalLanguageTranslator class>>cleanUpCache (in category 'private') ----- + cleanUpCache + "NaturalLanguageTranslator cleanUpCache" + + self cachedTranslations keys do: [:key | + key isoLanguage size > 2 ifTrue: [self cachedTranslations removeKey: key]]! Item was added: + ----- Method: NaturalLanguageTranslator class>>current (in category 'accessing') ----- + current + ^ self availableForLocaleID: LocaleID current! Item was added: + ----- Method: NaturalLanguageTranslator class>>default (in category 'accessing') ----- + default + "Answer translator for backstop" + "self default translate: 'test'" + ^ self new + localeID: (LocaleID isoLanguage: 'en')! Item was added: + ----- Method: NaturalLanguageTranslator class>>directoryForLanguage:country:create: (in category 'private loading') ----- + directoryForLanguage: isoLanguage country: isoCountry create: createDir + "Try to locate the <prefs>/locale/<language>{/<country>} folder. + If createDir is set, create the path down to country or language, depending on wether it's specified.. + Return the directory for country or language depending on specification. + If neither exists, nil" + + "NaturalLanguageTranslator directoryForLanguage: 'es' country: nil create: true" + "NaturalLanguageTranslator directoryForLanguage: 'de' country: 'DE' create: true" + "NaturalLanguageTranslator directoryForLanguage: 'en' country: 'US' create: false" + "NaturalLanguageTranslator directoryForLanguage: 'en' country: nil create: true" + + "If this fails, there is nothing we can do about it here" + | localeDir countryDir languageDir | + localeDir := self localeDirCreate: createDir. + localeDir ifNil: [^nil]. + + isoCountry ifNil: [ + languageDir := localeDir directoryNamed: isoLanguage. + createDir + ifTrue: [languageDir assureExistence]. + ^languageDir exists + ifTrue: [languageDir] + ifFalse: [nil]]. + + countryDir := languageDir directoryNamed: isoCountry. + createDir + ifTrue: [countryDir assureExistence]. + + ^countryDir exists + ifTrue: [countryDir] + ifFalse: [nil]! Item was added: + ----- Method: NaturalLanguageTranslator class>>directoryForLocaleID:create: (in category 'private loading') ----- + directoryForLocaleID: localeID create: createDir + "Try to locate the <prefs>/locale/<language>{/<country>} folder. + If createDir is set, create the path down to country or language, depending on locale. + Return the directory for country or language depending on locale. + If neither exists, nil" + + "NaturalLanguageTranslator directoryForLanguage: 'de' country: nil readOnly: true" + "NaturalLanguageTranslator directoryForLanguage: 'de' country: 'DE' readOnly: true" + "NaturalLanguageTranslator directoryForLanguage: 'en' country: 'US' readOnly: false" + "NaturalLanguageTranslator directoryForLanguage: 'en' country: nil readOnly: true" + + ^self directoryForLanguage: localeID isoLanguage country: localeID isoCountry create: createDir! Item was added: + ----- Method: NaturalLanguageTranslator class>>domainRegistered: (in category 'accessing') ----- + domainRegistered: aDomainName + "notify that new TextDomain is registered" + self translators do: [:each | each domainRegistered: aDomainName]! Item was added: + ----- Method: NaturalLanguageTranslator class>>domainUnregistered: (in category 'accessing') ----- + domainUnregistered: aDomainName + "notify that new TextDomain is unregistered" + self translators do: [:each | each domainUnregistered: aDomainName]! Item was added: + ----- Method: NaturalLanguageTranslator class>>fileReaderServicesForFile:suffix: (in category 'file-services') ----- + fileReaderServicesForFile: fullName suffix: suffix + "Answer the file services associated with given file" + ^ (suffix = self translationSuffix) | (suffix = '*') + ifTrue: [{self serviceMergeLanguageTranslations}] + ifFalse: [#()]! Item was added: + ----- Method: NaturalLanguageTranslator class>>initialize (in category 'class initialization') ----- + initialize + Smalltalk addToStartUpList: NaturalLanguageTranslator after: FileDirectory. + ! Item was added: + ----- Method: NaturalLanguageTranslator class>>isoLanguage: (in category 'accessing') ----- + isoLanguage: isoLanguage + "Return the generic language translator as there is no information about the country code" + + ^self isoLanguage: isoLanguage isoCountry: nil! Item was added: + ----- Method: NaturalLanguageTranslator class>>isoLanguage:isoCountry: (in category 'accessing') ----- + isoLanguage: isoLanguage isoCountry: isoCountry + ^self localeID: (LocaleID isoLanguage: isoLanguage isoCountry: isoCountry)! Item was added: + ----- Method: NaturalLanguageTranslator class>>loadAvailableExternalLocales (in category 'private loading') ----- + loadAvailableExternalLocales + "private - register locales IDs based on the content of the <prefs>/locale/ directory" + | localeDir | + localeDir := self localeDirCreate: false. + localeDir ifNil: [^ #()]. + localeDir directoryNames + do: [:langDirName | + | langDir | + langDir := localeDir directoryNamed: langDirName. + (langDir fileNamesMatching: '*.' , self translationSuffix) + ifNotEmpty: [self loadTranslatorForIsoLanguage: langDirName isoCountry: nil]. + langDir directoryNames + do: [:countryDirName | + | countryDir | + countryDir := langDir directoryNamed: countryDirName. + (countryDir fileNamesMatching: '*.' , self translationSuffix) + ifNotEmpty: [self loadTranslatorForIsoLanguage: langDirName isoCountry: countryDirName] + ] + ]. + ! Item was added: + ----- Method: NaturalLanguageTranslator class>>loadAvailableLocales (in category 'private loading') ----- + loadAvailableLocales + "This loads the default locale and all external locales" + + | defaultID | + defaultID := LocaleID current. + self cachedTranslations at: defaultID ifAbsent: [self localeID: defaultID]. + self loadAvailableExternalLocales.! Item was added: + ----- Method: NaturalLanguageTranslator class>>loadExternalTranslationsFor: (in category 'private loading') ----- + loadExternalTranslationsFor: translator + "Try to load translations from external external files. + The files are located in the <prefs>/locale/<language>{/<country>} folder. + There can be more than one file for each location, so applications can install their own partial translation tables. All files in the specific folder are loaded." + + | translationDir | + translationDir := self directoryForLocaleID: translator localeID create: false. + translationDir ifNil: [ ^nil ]. + (translationDir fileNamesMatching: '*.' , self translationSuffix) + do: [:fileName | translator loadFromFileNamed: (translationDir fullNameFor: fileName)]! Item was added: + ----- Method: NaturalLanguageTranslator class>>loadForLocaleIsoString:fromGzippedMimeLiteral: (in category 'file-services') ----- + loadForLocaleIsoString: localeString fromGzippedMimeLiteral: mimeString + "merge the translation from the mime literal." + | stream localeID translator gs rbStream s currentPlatform | + s := Base64MimeConverter mimeDecodeToBytes: mimeString readStream. + s reset. + gs := GZipReadStream on: s. + rbStream := MultiByteBinaryOrTextStream with: gs contents asString. + rbStream converter: UTF8TextConverter new. + rbStream reset. + localeID := LocaleID isoString: localeString. + currentPlatform := Locale currentPlatform. + [Locale + currentPlatform: (Locale localeID: localeID). + stream := ReadStream on: rbStream contents] + ensure: [Locale currentPlatform: currentPlatform]. + translator := self localeID: localeID. + translator loadFromStream: stream. + LanguageEnvironment resetKnownEnvironments! Item was added: + ----- Method: NaturalLanguageTranslator class>>loadTranslatorForIsoLanguage:isoCountry: (in category 'private loading') ----- + loadTranslatorForIsoLanguage: isoLanguage isoCountry: isoCountry + "private - load the translations from <prefs>/locale/ directory + the procedure is to assure the existence of a translator for the + given language/country and then load the external translations for this translator" + + | translator | + translator := self localeID: (LocaleID isoLanguage: isoLanguage isoCountry: isoCountry). + + self loadExternalTranslationsFor: translator! Item was added: + ----- Method: NaturalLanguageTranslator class>>localeChanged (in category 'accessing') ----- + localeChanged + "notify some project starts to use this locale. + this facility may use the event to load translation data dynamically" + self current setCurrent + ! Item was added: + ----- Method: NaturalLanguageTranslator class>>localeDirCreate: (in category 'private loading') ----- + localeDirCreate: createDir + "Try to locate the <prefs>/locale/ folder. + If createDir is set, try to create the path. + If it doesn't exist, return nil" + + "If this fails, there is nothing we can do about it here" + | prefDir localeDir | + (createDir not + and: [ExternalSettings preferenceDirectory isNil]) + ifTrue: [^ nil]. + + prefDir := ExternalSettings assuredPreferenceDirectory. + prefDir exists + ifFalse: [^nil]. + + + localeDir := prefDir directoryNamed: 'locale'. + createDir + ifTrue: [localeDir assureExistence]. + ^localeDir exists + ifTrue: [localeDir] + ifFalse: [nil]! Item was added: + ----- Method: NaturalLanguageTranslator class>>localeID: (in category 'accessing') ----- + localeID: localeID + ^ self cachedTranslations + at: localeID + ifAbsentPut: [self new localeID: localeID]! Item was added: + ----- Method: NaturalLanguageTranslator class>>mergeTranslationFileNamed: (in category 'file-services') ----- + mergeTranslationFileNamed: fileFullNameString + "merge the translation in the file named fileFullNameString" + + FileStream readOnlyFileNamed: fileFullNameString do: [:stream | + | localeID translator | + localeID := LocaleID isoString: stream localName sansPeriodSuffix. + translator := self localeID: localeID. + translator loadFromStream: stream]. + LanguageEnvironment resetKnownEnvironments. + + ! Item was added: + ----- Method: NaturalLanguageTranslator class>>privateStartUp (in category 'class initialization') ----- + privateStartUp + self resetCaches. + GetTextTranslator privateStartUp. + InternalTranslator privateStartUp. + self localeChanged.! Item was added: + ----- Method: NaturalLanguageTranslator class>>registerPhrase: (in category 'private') ----- + registerPhrase: phrase + "Using a Dictionary so we can lookup existing string instead of creating needless copies when loading a translation." + self allKnownPhrases at: phrase put: phrase! Item was added: + ----- Method: NaturalLanguageTranslator class>>registeredPhraseFor: (in category 'private') ----- + registeredPhraseFor: phrase + "Using a Dictionary so we can lookup existing string instead of creating needless copies when loading a translation." + ^self allKnownPhrases at: phrase ifAbsentPut: [phrase]! Item was added: + ----- Method: NaturalLanguageTranslator class>>removeLocaleID: (in category 'accessing') ----- + removeLocaleID: localeID + "self removeLocaleID: (LocaleID isoString: 'ja-kids')" + ^ self translators + removeKey: localeID + ifAbsent: []! Item was added: + ----- Method: NaturalLanguageTranslator class>>resetCaches (in category 'class initialization') ----- + resetCaches + Translators := nil.! Item was added: + ----- Method: NaturalLanguageTranslator class>>serviceMergeLanguageTranslations (in category 'file-services') ----- + serviceMergeLanguageTranslations + "Answer a service for merging of translation files" + ^ SimpleServiceEntry + provider: self + label: 'merge the translation file' + selector: #mergeTranslationFileNamed: + description: 'merge the translation file into the language named like the file' + buttonLabel: 'merge'! Item was added: + ----- Method: NaturalLanguageTranslator class>>services (in category 'file-services') ----- + services + "Answer potential file services associated with this class" + ^ {self serviceMergeLanguageTranslations}! Item was added: + ----- Method: NaturalLanguageTranslator class>>startUp: (in category 'class initialization') ----- + startUp: resuming + resuming + ifFalse: [^ self]. + self privateStartUp.! Item was added: + ----- Method: NaturalLanguageTranslator class>>translate:toLocaleID: (in category 'translation') ----- + translate: aString toLocaleID: localeID + "translate for default domain" + ^ (self availableForLocaleID: localeID) + translate: aString! Item was added: + ----- Method: NaturalLanguageTranslator class>>translate:toLocaleID:inDomain: (in category 'translation') ----- + translate: aString toLocaleID: localeID inDomain: aDomainName + ^ (self availableForLocaleID: localeID) + translate: aString inDomain: aDomainName! Item was added: + ----- Method: NaturalLanguageTranslator class>>translateWithoutLoading:toLocaleID: (in category 'translation') ----- + translateWithoutLoading: aString toLocaleID: localeID + "translate for default domain" + ^self translateWithoutLoading: aString toLocaleID: localeID inDomain: TextDomainManager defaultDomain. + ! Item was added: + ----- Method: NaturalLanguageTranslator class>>translateWithoutLoading:toLocaleID:inDomain: (in category 'translation') ----- + translateWithoutLoading: aString toLocaleID: localeID inDomain: aDomainName + "try to translate with small footprint: + if GetTextTranslator hasn't loaded MO, try to use InternalTranslator. + if InternalTranslator isn't available, then actually load MO and use it" + | translator | + translator := self availableForLocaleID: localeID. + (translator isDomainLoaded: aDomainName) ifFalse: [ + (InternalTranslator availableLanguageLocaleIDs includes: localeID) + ifTrue: [translator := InternalTranslator localeID: localeID]. + ]. + ^translator translate: aString inDomain: aDomainName! Item was added: + ----- Method: NaturalLanguageTranslator class>>translationSuffix (in category 'private') ----- + translationSuffix + ^'translation'! Item was added: + ----- Method: NaturalLanguageTranslator class>>translators (in category 'accessing') ----- + translators + ^ Translators ifNil: [Translators := Dictionary new] ! Item was added: + ----- Method: NaturalLanguageTranslator>>atRandom (in category 'accessing') ----- + atRandom + + self subclassResponsibility. + ! Item was added: + ----- Method: NaturalLanguageTranslator>>checkPhrase:translation: (in category 'translation') ----- + checkPhrase: phrase translation: translation! Item was added: + ----- Method: NaturalLanguageTranslator>>defaultBackgroundColor (in category 'user interface') ----- + defaultBackgroundColor + "answer the receiver's defaultBackgroundColor for views" + ^ Color cyan! Item was added: + ----- Method: NaturalLanguageTranslator>>displayLanguage (in category 'accessing') ----- + displayLanguage + ^ id displayLanguage! Item was added: + ----- Method: NaturalLanguageTranslator>>displayName (in category 'accessing') ----- + displayName + ^ id displayName! Item was added: + ----- Method: NaturalLanguageTranslator>>domainRegistered: (in category 'accessing') ----- + domainRegistered: aDomainName + "notify that new TextDomain is registered. Concrete subclass can responds to this event if needed"! Item was added: + ----- Method: NaturalLanguageTranslator>>domainUnregistered: (in category 'accessing') ----- + domainUnregistered: aDomainName + "notify that new TextDomain is unregistered. Concrete subclass can responds to this event if needed"! Item was added: + ----- Method: NaturalLanguageTranslator>>fileOutHeader (in category 'fileIn/fileOut') ----- + fileOutHeader + ^ '''Translation dictionary'''! Item was added: + ----- Method: NaturalLanguageTranslator>>fileOutHeaderOn: (in category 'fileIn/fileOut') ----- + fileOutHeaderOn: aStream + aStream nextChunkPut: self fileOutHeader; + cr. + aStream timeStamp; cr. + aStream nextPut: $!!. + aStream nextChunkPut: '(' , self class name , ' localeID: ' , id storeString , ')'. + aStream cr! Item was added: + ----- Method: NaturalLanguageTranslator>>fileOutOn: (in category 'fileIn/fileOut') ----- + fileOutOn: aStream + "self current fileOutOn: Transcript. Transcript endEntry" + self fileOutHeaderOn: aStream. + self fileOutOn: aStream keys: nil! Item was added: + ----- Method: NaturalLanguageTranslator>>fileOutOn:keys: (in category 'fileIn/fileOut') ----- + fileOutOn: aStream keys: keys + "self current fileOutOn: Transcript. Transcript endEntry" + (keys + ifNil: [generics keys asArray sort]) + do: [:key | self + nextChunkPut: (generics associationAt: key) + on: aStream]. + keys + ifNil: [self untranslated + do: [:each | self nextChunkPut: each -> '' on: aStream]]. + aStream nextPut: $!!; + cr! Item was added: + ----- Method: NaturalLanguageTranslator>>generics (in category 'private') ----- + generics + ^generics ifNil: [generics := Dictionary new]! Item was added: + ----- Method: NaturalLanguageTranslator>>isDomainLoaded: (in category 'accessing') ----- + isDomainLoaded: aDomainName + "ask if translation dictionary for the domain has been loaded and available now for use" + self subclassResponsibility.! Item was added: + ----- Method: NaturalLanguageTranslator>>isoCountry (in category 'accessing') ----- + isoCountry + ^self localeID isoCountry! Item was added: + ----- Method: NaturalLanguageTranslator>>isoLanguage (in category 'accessing') ----- + isoLanguage + ^self localeID isoLanguage! Item was added: + ----- Method: NaturalLanguageTranslator>>loadFromFileNamed: (in category 'private store-retrieve') ----- + loadFromFileNamed: fileNameString + "Load translations from an external file" + + FileStream readOnlyFileNamed: fileNameString do: [ :file | + self loadFromStream: file ]. + self changed: #translations. + self changed: #untranslated. + ! Item was added: + ----- Method: NaturalLanguageTranslator>>loadFromRefStream: (in category 'private store-retrieve') ----- + loadFromRefStream: stream + "Load translations from an external file" + | loadedArray refStream | + refStream := ReferenceStream on: stream. + [loadedArray := refStream next] + ensure: [refStream close]. + self processExternalObject: loadedArray ! Item was added: + ----- Method: NaturalLanguageTranslator>>loadFromStream: (in category 'private store-retrieve') ----- + loadFromStream: stream + "Load translations from an external file" + | header isFileIn | + header := '''Translation dictionary'''. + isFileIn := (stream next: header size) + = header. + stream reset. + isFileIn + ifTrue: [stream fileInAnnouncing: 'Loading ' translated, stream localName] + ifFalse: [self loadFromRefStream: stream]! Item was added: + ----- Method: NaturalLanguageTranslator>>localeID (in category 'accessing') ----- + localeID + ^id! Item was added: + ----- Method: NaturalLanguageTranslator>>localeID: (in category 'initialize-release') ----- + localeID: anID + id := anID! Item was added: + ----- Method: NaturalLanguageTranslator>>mergeTranslations: (in category 'private store-retrieve') ----- + mergeTranslations: newTranslations + "Merge a new set of translations into the exiting table. + Overwrites existing entries." + + newTranslations keysAndValuesDo: [:key :value | + self rawPhrase: (self class registeredPhraseFor: key) translation: value]. + self changed: #translations. + self changed: #untranslated.! Item was added: + ----- Method: NaturalLanguageTranslator>>nextChunkPut:on: (in category 'fileIn/fileOut') ----- + nextChunkPut: anObject on: aStream + | i remainder terminator | + terminator := $!!. + remainder := anObject storeString. + [(i := remainder indexOf: terminator) = 0] + whileFalse: [aStream + nextPutAll: (remainder copyFrom: 1 to: i). + aStream nextPut: terminator. + "double imbedded terminators" + remainder := remainder copyFrom: i + 1 to: remainder size]. + aStream nextPutAll: remainder. + aStream nextPut: terminator; cr.! Item was added: + ----- Method: NaturalLanguageTranslator>>phrase:translation: (in category 'translation') ----- + phrase: phraseString translation: translationString + self generics at: phraseString put: translationString asString. + self changed: #translations. + self changed: #untranslated.! Item was added: + ----- Method: NaturalLanguageTranslator>>printOn: (in category 'printing') ----- + printOn: aStream + aStream nextPutAll: self class name; nextPut: $(; print: self localeID; nextPut: $)! Item was added: + ----- Method: NaturalLanguageTranslator>>processExternalObject: (in category 'private store-retrieve') ----- + processExternalObject: anArray + "pivate - process the external object" + + "new format -> {translations. untranslated}" + + anArray second do: [:each | self class registerPhrase: each]. + + self mergeTranslations: anArray first! Item was added: + ----- Method: NaturalLanguageTranslator>>rawPhrase:translation: (in category 'translation') ----- + rawPhrase: phraseString translation: translationString + self generics at: phraseString put: translationString asString. + ! Item was added: + ----- Method: NaturalLanguageTranslator>>rawRemoveUntranslated: (in category 'translation') ----- + rawRemoveUntranslated: untranslated + + self class allKnownPhrases removeKey: untranslated ifAbsent: []. + self changed: #untranslated.! Item was added: + ----- Method: NaturalLanguageTranslator>>removeTranslationFor: (in category 'translation') ----- + removeTranslationFor: phraseString + self generics removeKey: phraseString ifAbsent: []. + self changed: #translations. + self changed: #untranslated.! Item was added: + ----- Method: NaturalLanguageTranslator>>removeUntranslated: (in category 'translation') ----- + removeUntranslated: untranslated + + self class allKnownPhrases removeKey: untranslated ifAbsent: []. + ! Item was added: + ----- Method: NaturalLanguageTranslator>>saveToFileNamed: (in category 'private store-retrieve') ----- + saveToFileNamed: fileNameString + "save the receiver's translations to a file named fileNameString" + | stream | + "Set true if you need to save as binary" + false + ifTrue: [stream := ReferenceStream fileNamed: fileNameString. + stream nextPut: {self translations. self untranslated}. + stream close. + ^ self]. + stream := FileStream fileNamed: fileNameString. + [self fileOutOn: stream] + ensure: [stream close]! Item was added: + ----- Method: NaturalLanguageTranslator>>scanFrom: (in category 'fileIn/fileOut') ----- + scanFrom: aStream + "Read a definition of dictionary. + Make sure current locale corresponds my locale id" + | newTranslations currentPlatform | + newTranslations := Dictionary new. + currentPlatform := Locale currentPlatform. + [ | aString assoc | + Locale + currentPlatform: (Locale localeID: id). + [aString := aStream nextChunk withSqueakLineEndings. + aString size > 0] + whileTrue: [assoc := Compiler evaluate: aString. + assoc value = '' + ifTrue: [self class registerPhrase: assoc key] + ifFalse: [newTranslations add: assoc]]] + ensure: [Locale currentPlatform: currentPlatform]. + self mergeTranslations: newTranslations! Item was added: + ----- Method: NaturalLanguageTranslator>>setCurrent (in category 'language switching') ----- + setCurrent + "notify locale of the translator become current" + ! Item was added: + ----- Method: NaturalLanguageTranslator>>translate: (in category 'translation') ----- + translate: aString + ^self translate: aString + inDomain: TextDomainManager defaultDomain! Item was added: + ----- Method: NaturalLanguageTranslator>>translate:in: (in category 'translation') ----- + translate: aString in: aContext! Item was added: + ----- Method: NaturalLanguageTranslator>>translate:inDomain: (in category 'translation') ----- + translate: aString inDomain: aDomainName + ^ aString! Item was added: + ----- Method: NaturalLanguageTranslator>>translationFor: (in category 'translation') ----- + translationFor: aString + ^self translate: aString! Item was added: + ----- Method: NaturalLanguageTranslator>>translations (in category 'accessing') ----- + translations + ^self generics! Item was added: + ----- Method: NaturalLanguageTranslator>>untranslated (in category 'accessing') ----- + untranslated + | translations | + translations := self translations. + ^self class allKnownPhrases reject: [:each | translations includesKey: each]! Item was added: + ----- Method: NaturalLanguageTranslator>>writeAsMimeString (in category 'fileIn/fileOut') ----- + writeAsMimeString + + | fileName fileStream tmpStream s2 gzs | + tmpStream := MultiByteBinaryOrTextStream on: ''. + tmpStream converter: UTF8TextConverter new. + self fileOutOn: tmpStream. + s2 := RWBinaryOrTextStream on: ''. + gzs := GZipWriteStream on: s2. + tmpStream reset. + gzs nextPutAll: (tmpStream binary contentsOfEntireFile asString) contents. + gzs close. + s2 reset. + + fileName := id isoString, '.translation.gz.mime'. + fileStream := FileStream newFileNamed: fileName. + fileStream nextPutAll: (Base64MimeConverter mimeEncode: s2) contents. + fileStream close. + !
1
0
0
0
The Trunk: GetText-edc.20.mcz
by commits@source.squeak.org
29 Mar '12
29 Mar '12
Edgar J. De Cleene uploaded a new version of GetText to project The Trunk:
http://source.squeak.org/trunk/GetText-edc.20.mcz
==================== Summary ==================== Name: GetText-edc.20 Author: edc Time: 29 March 2012, 7:32:49.142 am UUID: 958a59da-4fce-4c70-a776-166b3c8237a8 Ancestors: GetText-edc.17 Clean Undeclared. {InternalTranslator ISOLanguageDefinition Locale LocaleID NaturalLanguageFormTranslator NaturalLanguageTranslator} Moved back to System-Localization =============== Diff against GetText-edc.17 =============== Item was changed: ----- Method: GetTextExporter>>appendStringReceivers:into: (in category 'private') ----- appendStringReceivers: aSymbol into: domains | literals references domainName methodReference keywords found | found := TranslatedReceiverFinder new stringReceiversWithContext: aSymbol. found do: [ :assoc | methodReference := assoc key. keywords := assoc value. domainName := (PackageOrganizer default packageOfMethod: methodReference ifNone: [nil]). domainName := domainName isNil ifTrue: [TextDomainManager defaultDomain] ifFalse: [domainName name]. + literals := domains at: domainName ifAbsentPut: [Dictionary new]. - literals _ domains at: domainName ifAbsentPut: [Dictionary new]. keywords do: [ :literal | + references := literals at: literal ifAbsentPut: [OrderedCollection new]. - references _ literals at: literal ifAbsentPut: [OrderedCollection new]. references add: methodReference. ]. ]. ! Item was changed: ----- Method: GetTextExporter>>appendVocabularies: (in category 'private') ----- appendVocabularies: domains | literalsForDomain references domainName methodReference | EToyVocabulary allPhrasesWithContextToTranslate do: [ :r | methodReference := (MethodReference new setStandardClass: (r second) methodSymbol: (r third)). + "domainName := self getTextDomainForPackage: (PackageOrganizer default packageOfMethod: methodReference)". - "domainName _ self getTextDomainForPackage: (PackageOrganizer default packageOfMethod: methodReference)". domainName := 'Etoys-Tiles'. + literalsForDomain := domains at: domainName ifAbsentPut: [Dictionary new]. - literalsForDomain _ domains at: domainName ifAbsentPut: [Dictionary new]. r fourth do: [ :literal | + references := literalsForDomain at: literal ifAbsentPut: [OrderedCollection new]. - references _ literalsForDomain at: literal ifAbsentPut: [OrderedCollection new]. references add: methodReference. ]. ]. ! Item was changed: ----- Method: GetTextExporter>>dirNameCategory:translator: (in category 'exporting') ----- dirNameCategory: category translator: translator "Answer a file name for the category. Make one if it is not exist yet. Make template file name if translator is nil" "self new dirNameCategory: 'Morphic-Scripting Support' translator: NaturalLanguageTranslator current" "self new dirNameCategory: 'Morphic-Scripting Support' translator: nil" | safeCategory fileName dirName pathName | + safeCategory := category copyReplaceAll: ' ' with: ':='. - safeCategory := category copyReplaceAll: ' ' with: '_'. fileName := translator ifNil: [safeCategory , '.pot'] ifNotNil: [translator localeID posixName , '.po']. dirName := (safeCategory findTokens: '-') inject: 'po' into: [:aString :next | aString , FileDirectory slash , next]. pathName := dirName , FileDirectory slash , fileName. (FileDirectory default directoryNamed: dirName) assureExistence. ^ pathName! Item was changed: ----- Method: GetTextExporter>>dirNameDomain:translator: (in category 'exporting') ----- dirNameDomain: domain translator: translator "Answer a file name for the domain. Make one if it is not exist yet. Make template file name if translator is nil" "self new dirNameDomain: 'etoys' translator: NaturalLanguageTranslator current" "self new dirNameDomain: 'etoys' translator: nil" | fileName dirName pathName | + "safeCategory := category copyReplaceAll: ' ' with: ':='." - "safeCategory := category copyReplaceAll: ' ' with: '_'." fileName := domain, (translator ifNil: ['.pot'] ifNotNil: ['.po']). dirName := 'po', FileDirectory slash, (translator ifNil: ['templates'] ifNotNil: [translator localeID posixName]). pathName := dirName , FileDirectory slash , fileName. (FileDirectory default directoryNamed: dirName) assureExistence. ^ pathName! Item was changed: ----- Method: GetTextExporter>>exportBody:translator: (in category 'file out') ----- exportBody: literals translator: translator "Export a gettext file body. literals is a dictionary of keyword -> #(MethodReference...) in the textDomain." "Build {sortKey. comment. msgid } to optimize sorting (getting category is too slow). If there are two or more methods for a mgsid, only first method (alphabetical) is used for sorting." | sorted msgid sortedMethods category sortKey comment triplets commentUnderLined | triplets := literals associations collect: [:assoc | msgid := assoc key. sortedMethods := assoc value asArray sort. category := (Smalltalk at: sortedMethods first classSymbol) category asString. sortKey := category , ',' , sortedMethods first printString , ',' , msgid. comment := (sortedMethods collect: [:each | each actualClass asString , '>>' , each methodSymbol asString]) inject: category into: [:result :methodName | result , ',' , methodName]. + "Replace white spaces to := because gettext tool might - "Replace white spaces to _ because gettext tool might replace a space to a new line some times, and it makes difficult to take a diff." + commentUnderLined := comment copyReplaceAll: ' ' with: ':='. - commentUnderLined := comment copyReplaceAll: ' ' with: '_'. Array with: sortKey with: commentUnderLined with: msgid]. "Sort and output the words" sorted := triplets sort: [:a :b | a first <= b first]. sorted do: [:triplet | comment := triplet second. msgid := triplet third. self exportRecordHeader: comment. self exportPhrase: msgid translation: (self translationFor: msgid in: translator)]! Item was changed: ----- Method: GetTextExporter>>exportPhrase:translation: (in category 'private') ----- exportPhrase: phraseString translation: translationString | normalizedTrans tmp transStartsWithCR transEndsWithCR| phraseString isEmpty ifTrue: [^ self]. self exportTag: 'msgid' msg: phraseString. translationString size = 0 ifTrue: [ + normalizedTrans := '' - normalizedTrans _ '' ] ifFalse: [ + transEndsWithCR := translationString last = (Character cr). - transEndsWithCR _ translationString last = (Character cr). phraseString last = (Character cr) ifTrue: [ transEndsWithCR ifTrue: [ + normalizedTrans := translationString - normalizedTrans _ translationString ] ifFalse: [ + normalizedTrans := translationString , String cr - normalizedTrans _ translationString , String cr ] ] ifFalse: [ transEndsWithCR ifTrue: [ + normalizedTrans := translationString allButLast - normalizedTrans _ translationString allButLast ] ifFalse: [ + normalizedTrans := translationString - normalizedTrans _ translationString ] ]. + transStartsWithCR := normalizedTrans first = (Character cr). - transStartsWithCR _ normalizedTrans first = (Character cr). phraseString first = (Character cr) ifTrue: [ transStartsWithCR ifFalse: [ + tmp := (Character cr asString) , normalizedTrans. + normalizedTrans := tmp. - tmp _ (Character cr asString) , normalizedTrans. - normalizedTrans _ tmp. ] ] ifFalse: [ transStartsWithCR ifTrue: [ + normalizedTrans := normalizedTrans allButFirst - normalizedTrans _ normalizedTrans allButFirst ] ] ]. self exportTag: 'msgstr' msg: normalizedTrans. stream cr! Item was changed: ----- Method: GetTextInterchange>>language: (in category 'accessing') ----- language: translator + language := translator! - language _ translator! Item was changed: ----- Method: GetTextInterchange>>stream: (in category 'accessing') ----- stream: aStream + stream := aStream! - stream _ aStream! Item was changed: ----- Method: GetTextTranslator class>>defaultLocaleDirs (in category 'translation data layout') ----- defaultLocaleDirs | dirs | + dirs := OrderedCollection new. - dirs _ OrderedCollection new. UserDefaultLocaleDirs ifNotNil: [dirs addAll: UserDefaultLocaleDirs]. dirs addAll: self systemDefaultLocaleDirs. ^dirs ! Item was changed: ----- Method: GetTextTranslator class>>findMOForLocaleID:domain: (in category 'private') ----- findMOForLocaleID: id domain: aDomainName | sepa langSubDir path | + sepa := FileDirectory slash. + langSubDir := self langDirNameForLocaleID: id. - sepa _ FileDirectory slash. - langSubDir _ self langDirNameForLocaleID: id. (self localeDirsForDomain: aDomainName) do: [:each | + path := each , sepa , langSubDir, sepa , (self moNameForDomain: aDomainName). - path _ each , sepa , langSubDir, sepa , (self moNameForDomain: aDomainName). [(FileDirectory default fileExists: path) ifTrue: [^path]] on: InvalidDirectoryError do: [:e | ^nil]]. ^nil.! Item was changed: ----- Method: GetTextTranslator class>>initialize (in category 'class initialization') ----- initialize + SystemDefaultLocaleDirs := OrderedCollection new. + UserDefaultLocaleDirs := OrderedCollection new. + LocaleDirsForDomain := Dictionary new.! - SystemDefaultLocaleDirs _ OrderedCollection new. - UserDefaultLocaleDirs _ OrderedCollection new. - LocaleDirsForDomain _ Dictionary new.! Item was changed: ----- Method: GetTextTranslator class>>localeDirsForDomain (in category 'private') ----- localeDirsForDomain + ^LocaleDirsForDomain ifNil: [LocaleDirsForDomain := Dictionary new]! - ^LocaleDirsForDomain ifNil: [LocaleDirsForDomain _ Dictionary new]! Item was changed: ----- Method: GetTextTranslator class>>localeDirsForDomain: (in category 'translation data layout') ----- localeDirsForDomain: aDomainName "returns collection of locale directories for text domain. This includes user defined one for the domain, user defaults and system defaults" | dirs dir | + dirs := OrderedCollection new. + dir := self localeDirForDomain: aDomainName. - dirs _ OrderedCollection new. - dir _ self localeDirForDomain: aDomainName. dir ifNotNil: [dirs add: dir]. dirs addAll: self defaultLocaleDirs. ^dirs! Item was changed: ----- Method: GetTextTranslator>>initialize (in category 'initialize-release') ----- initialize + moFiles := Dictionary new.! - moFiles _ Dictionary new.! Item was changed: ----- Method: GetTextTranslator>>isDomainLoaded: (in category 'accessing') ----- isDomainLoaded: aDomainName | mo | + mo := moFiles at: aDomainName ifAbsent: [nil]. - mo _ moFiles at: aDomainName ifAbsent: [nil]. ^mo isNil not. ! Item was changed: ----- Method: GetTextTranslator>>loadMOFileForDomain: (in category 'private') ----- loadMOFileForDomain: aDomainName | moName | + moName := self class findMOForLocaleID: self localeID - moName _ self class findMOForLocaleID: self localeID domain: aDomainName. moName notNil ifTrue: [^MOFile new load: moName localeID: self localeID] ifFalse: [^nil] ! Item was changed: ----- Method: GetTextTranslator>>reloadMOFiles (in category 'accessing') ----- reloadMOFiles + moFiles := Dictionary new. - moFiles _ Dictionary new. self loadMOFiles.! Item was changed: ----- Method: GetTextTranslator>>translate:inDomain: (in category 'translation') ----- translate: aString inDomain: aDomainName | mo | + mo := self moFileForDomain: aDomainName. - mo _ self moFileForDomain: aDomainName. ^mo isNil ifTrue: [aString] ifFalse: [mo translationFor: aString] ! Item was removed: - Object subclass: #ISOLanguageDefinition - instanceVariableNames: 'iso3 iso2 iso3Alternate language' - classVariableNames: 'ISO2Countries ISO2Table ISO3Countries ISO3Table' - poolDictionaries: '' - category: 'GetText-Localization'! Item was removed: - ----- Method: ISOLanguageDefinition class>>buildIso3166CodesTables (in category 'private') ----- - buildIso3166CodesTables - "ISOLanguageDefinition buildIso3166CodesTables" - | rawdata stream country isoa2 isoa3 unNumeric macName macCode windowsName windowsCode empty table | - rawdata := self iso3166Codes. - table := OrderedCollection new: 200. - stream := rawdata readStream. - empty := 160 asCharacter asString. - [stream atEnd] whileFalse: - [country := stream nextLine. - isoa2 := stream nextLine. - isoa3 := stream nextLine. - unNumeric := stream nextLine. - windowsName := stream nextLine. - windowsName = empty ifTrue: [windowsName := nil]. - windowsCode := stream nextLine. - windowsCode = empty ifTrue: [windowsCode := nil]. - macName := stream nextLine. - macName = empty ifTrue: [macName := nil]. - macCode := stream nextLine. - macCode = empty ifTrue: [macCode := nil]. - table add: { country. isoa2. isoa3. unNumeric. windowsName. windowsCode. macName. macCode. }]. - ^table! Item was removed: - ----- Method: ISOLanguageDefinition class>>extraCountryDefinitions (in category 'private') ----- - extraCountryDefinitions - ^{ - {'Kids'. 'KIDS'. 'KIDS'.}. - }! Item was removed: - ----- Method: ISOLanguageDefinition class>>extraISO3Definitions (in category 'private') ----- - extraISO3Definitions - - ^self readISOLanguagesFrom: 'jpk Japanese (Kids) - ' readStream! Item was removed: - ----- Method: ISOLanguageDefinition class>>initISO3LanguageTable (in category 'private') ----- - initISO3LanguageTable - "ISOLanguageDefinition initIso3LanguageTable" - - | table | - table := ISOLanguageDefinition readISOLanguagesFrom: ISOLanguageDefinition isoLanguages readStream. - table addAll: self extraISO3Definitions. - ^table! Item was removed: - ----- Method: ISOLanguageDefinition class>>initISOCountries (in category 'private') ----- - initISOCountries - "ISOLanguageDefinition initISOCountries" - | iso3166Table | - iso3166Table := ISOLanguageDefinition buildIso3166CodesTables. - ISO2Countries := Dictionary new. - ISO3Countries := Dictionary new. - iso3166Table do: [:entry | - ISO2Countries at: (entry at: 2) put: (entry at: 1). - ISO3Countries at: (entry at: 3) put: (entry at: 1)]. - self extraCountryDefinitions do: [:entry | - ISO2Countries at: (entry at: 2) put: (entry at: 1). - ISO3Countries at: (entry at: 3) put: (entry at: 1)]! Item was removed: - ----- Method: ISOLanguageDefinition class>>initialize (in category 'class initialization') ----- - initialize - "ISOLanguageDefinition initialize" - - ISO3Table := nil. - ISO2Table := nil! Item was removed: - ----- Method: ISOLanguageDefinition class>>iso2Countries (in category 'private') ----- - iso2Countries - "ISOLanguageDefinition iso2Countries" - "ISO2Countries := nil. ISO3Countries := nil" - - ISO2Countries ifNil: [self initISOCountries]. - ^ISO2Countries! Item was removed: - ----- Method: ISOLanguageDefinition class>>iso2LanguageDefinition: (in category 'accessing') ----- - iso2LanguageDefinition: aString - ^self iso2LanguageTable at: aString! Item was removed: - ----- Method: ISOLanguageDefinition class>>iso2LanguageTable (in category 'private') ----- - iso2LanguageTable - "ISOLanguageDefinition iso2LanguageTable" - - ISO2Table ifNotNil: [^ISO2Table]. - ISO2Table := Dictionary new: self iso3LanguageTable basicSize. - self iso3LanguageTable do: [:entry | - ISO2Table at: entry iso2 put: entry]. - ^ISO2Table! Item was removed: - ----- Method: ISOLanguageDefinition class>>iso3166Codes (in category 'private') ----- - iso3166Codes - "
http://www.unicode.org/onlinedat/countries.html
" - - ^'ÅLAND ISLANDS - AX - - - - - - - AFGHANISTAN - AF - AFG - 004 - - - - - ALBANIA - AL - ALB - 008 - CTRY_ALBANIA - 355 - - - ALGERIA - DZ - DZA - 012 - CTRY_ALGERIA - 213 - verArabic - 16 - AMERICAN SAMOA - AS - ASM - 016 - - - - - ANDORRA - AD - AND - 020 - - - - - ANGOLA - AO - AGO - 024 - - - - - ANGUILLA - AI - AIA - 660 - - - - - ANTARCTICA - AQ - ATA - 010 - - - - - ANTIGUA AND BARBUDA - AG - ATG - 028 - - - - - ARGENTINA - AR - ARG - 032 - CTRY_ARGENTINA - 54 - - - ARMENIA - AM - ARM - 051 - CTRY_ARMENIA - 374 - verArmenian - 84 - ARUBA - AW - ABW - 533 - - - - - AUSTRALIA - AU - AUS - 036 - CTRY_AUSTRALIA - 61 - verAustralia - 15 - AUSTRIA - AT - AUT - 040 - CTRY_AUSTRIA - 43 - verAustria - 92 - AZERBAIJAN - AZ - AZE - 031 - CTRY_AZERBAIJAN - 994 - - - BAHAMAS - BS - BHS - 044 - - - - - BAHRAIN - BH - BHR - 048 - CTRY_BAHRAIN - 973 - - - BANGLADESH - BD - BGD - 050 - - - verBengali - 60 - BARBADOS - BB - BRB - 052 - - - - - BELARUS - BY - BLR - 112 - CTRY_BELARUS - 375 - - - BELGIUM - BE - BEL - 056 - CTRY_BELGIUM - 32 - verFrBelgium, verFlemish - 98 - BELIZE - BZ - BLZ - 084 - CTRY_BELIZE - 501 - - - BENIN - BJ - BEN - 204 - - - - - BERMUDA - BM - BMU - 060 - - - - - BHUTAN - BT - BTN - 064 - - - verBhutan - 83 - BOLIVIA - BO - BOL - 068 - CTRY_BOLIVIA - 591 - - - BOSNIA AND HERZEGOVINA - BA - BIH - 070 - - - - - BOTSWANA - BW - BWA - 072 - - - - - BOUVET ISLAND - BV - BVT - 074 - - - - - BRAZIL - BR - BRA - 076 - CTRY_BRAZIL - 55 - verBrazil - 71 - BRITISH INDIAN OCEAN TERRITORY - IO - IOT - 086 - - - - - BRUNEI DARUSSALAM - BN - BRN - 096 - CTRY_BRUNEI_DARUSSALAM - 673 - - - BULGARIA - BG - BGR - 100 - CTRY_BULGARIA - 359 - verBulgaria - 72 - BURKINA FASO - BF - BFA - 854 - - - - - BURUNDI - BI - BDI - 108 - - - - - CAMBODIA - KH - KHM - 116 - - - - - CAMEROON - CM - CMR - 120 - - - - - CANADA - CA - CAN - 124 - CTRY_CANADA - 2 - verFrCanada, verEndCanada - 82 - CAPE VERDE - CV - CPV - 132 - - - - - CAYMAN ISLANDS - KY - CYM - 136 - - - - - CENTRAL AFRICAN REPUBLIC - CF - CAF - 140 - - - - - CHAD - TD - TCD - 148 - - - - - CHILE - CL - CHL - 152 - CTRY_CHILE - 56 - - - CHINA - CN - CHN - 156 - CTRY_PRCHINA - 86 - verChina - 52 - CHRISTMAS ISLAND - CX - CXR - 162 - - - - - COCOS (KEELING) ISLANDS - CC - CCK - 166 - - - - - COLOMBIA - CO - COL - 170 - CTRY_COLOMBIA - 57 - - - COMOROS - KM - COM - 174 - - - - - CONGO - CG - COG - 178 - - - - - CONGO, THE DEMOCRATIC REPUBLIC OF THE - CD - - - - - - - COOK ISLANDS - CK - COK - 184 - - - - - COSTA RICA - CR - CRI - 188 - CTRY_COSTA_RICA - 506 - - - COTE D''IVOIRE - CI - CIV - 384 - - - - - CROATIA (local name: Hrvatska) - HR - HRV - 191 - CTRY_CROATIA - 385 - verCroatia, verYugoCroatian - 68 (c), 25 (y) - CUBA - CU - CUB - 192 - - - - - CYPRUS - CY - CYP - 196 - - - verCyprus - 23 - CZECH REPUBLIC - CZ - CZE - 203 - CTRY_CZECH - 420 - verCzech - 56 - DENMARK - DK - DNK - 208 - CTRY_DENMARK - 45 - verDenmark(da), verFaeroeIsl(fo) - 9(da), 47(fo) - DJIBOUTI - DJ - DJI - 262 - - - - - DOMINICA - DM - DMA - 212 - - - - - DOMINICAN REPUBLIC - DO - DOM - 214 - CTRY_DOMINICAN_REPUBLIC - 1 - - - EAST TIMOR - TL - TLS - 626 - - - - - ECUADOR - EC - ECU - 218 - CTRY_ECUADOR - 593 - - - EGYPT - EG - EGY - 818 - CTRY_EGYPT - 20 - verArabic - 16 - EL SALVADOR - SV - SLV - 222 - CTRY_EL_SALVADOR - 503 - - - EQUATORIAL GUINEA - GQ - GNQ - 226 - - - - - ERITREA - ER - ERI - 232 - - - - - ESTONIA - EE - EST - 233 - CTRY_ESTONIA - 372 - verEstonia - 44 - ETHIOPIA - ET - ETH - 210 - - - - - FALKLAND ISLANDS (MALVINAS) - FK - FLK - 238 - - - - - FAROE ISLANDS - FO - FRO - 234 - CTRY_FAEROE_ISLANDS - 298 - - - FIJI - FJ - FJI - 242 - - - - - FINLAND - FI - FIN - 246 - CTRY_FINLAND - 358 - verFinland - 17 - FRANCE - FR - FRA - 250 - CTRY_FRANCE - 33 - verFrance - 1 - FRANCE, METROPOLITAN - FX - FXX - 249 - - - - - FRENCH GUIANA - GF - GUF - 254 - - - - - FRENCH POLYNESIA - PF - PYF - 258 - - - - - FRENCH SOUTHERN TERRITORIES - TF - ATF - 260 - - - - - GABON - GA - GAB - 266 - - - - - GAMBIA - GM - GMB - 270 - - - - - GEORGIA - GE - GEO - 268 - CTRY_GEORGIA - 995 - verGeorgian - 85 - GERMANY - DE - DEU - 276 - CTRY_GERMANY - 49 - verGermany - 3 - GHANA - GH - GHA - 288 - - - - - GIBRALTAR - GI - GIB - 292 - - - - - GREECE - GR - GRC - 300 - CTRY_GREECE - 30 - verGreece, verGreecePoly - 20, 40 - GREENLAND - GL - GRL - 304 - - - verGreenland - 107 - GRENADA - GD - GRD - 308 - - - - - GUADELOUPE - GP - GLP - 312 - - - - - GUAM - GU - GUM - 316 - - - - - GUATEMALA - GT - GTM - 320 - CTRY_GUATEMALA - 502 - - - GUINEA - GN - GIN - 324 - - - - - GUINEA-BISSAU - GW - GNB - 624 - - - - - GUYANA - GY - GUY - 328 - - - - - HAITI - HT - HTI - 332 - - - - - HEARD ISLAND & MCDONALD ISLANDS - HM - HMD - 334 - - - - - HONDURAS - HN - HND - 340 - CTRY_HONDURAS - 504 - - - HONG KONG - HK - HKG - 344 - CTRY_HONG_KONG - 852 - - - HUNGARY - HU - HUN - 348 - CTRY_HUNGARY - 36 - verHungary - 43 - ICELAND - IS - ISL - 352 - CTRY_ICELAND - 354 - verIceland - 21 - INDIA - IN - IND - 356 - CTRY_INDIA - 91 - verIndiaHindi(hi) - 33 - INDONESIA - ID - IDN - 360 - CTRY_INDONESIA - 62 - - - IRAN, ISLAMIC REPUBLIC OF - IR - IRN - 364 - CTRY_IRAN - 981 - verIran - 48 - IRAQ - IQ - IRQ - 368 - CTRY_IRAQ - 964 - verArabic - 16 - IRELAND - IE - IRL - 372 - CTRY_IRELAND - 353 - verIreland - 50 - ISRAEL - IL - ISR - 376 - CTRY_ISRAEL - 972 - verIsrael - 13 - ITALY - IT - ITA - 380 - CTRY_ITALY - 39 - verItaly - 4 - JAMAICA - JM - JAM - 388 - CTRY_JAMAICA - 1 - - - JAPAN - JP - JPN - 392 - CTRY_JAPAN - 81 - verJapan - 14 - JORDAN - JO - JOR - 400 - CTRY_JORDAN - 962 - - - KAZAKHSTAN - KZ - KAZ - 398 - CTRY_KAZAKSTAN - 7 - - - KENYA - KE - KEN - 404 - CTRY_KENYA - 254 - - - KIRIBATI - KI - KIR - 296 - - - - - KOREA, DEMOCRATIC PEOPLE''S REPUBLIC OF - KP - PRK - 408 - - - verKorea - 51 - KOREA, REPUBLIC OF - KR - KOR - 410 - CTRY_SOUTH_KOREA - 82 - verKorea - - KUWAIT - KW - KWT - 414 - CTRY_KUWAIT - 965 - - - KYRGYZSTAN - KG - KGZ - 417 - CTRY_KYRGYZSTAN - 996 - - - LAO PEOPLE''S DEMOCRATIC REPUBLIC - LA - LAO - 418 - - - - - LATVIA - LV - LVA - 428 - CTRY_LATVIA - 371 - verLatvia - 45 - LEBANON - LB - LBN - 422 - CTRY_LEBANON - 961 - - - LESOTHO - LS - LSO - 426 - - - - - LIBERIA - LR - LBR - 430 - - - - - LIBYAN ARAB JAMAHIRIYA - LY - LBY - 434 - CTRY_LIBYA - 218 - verArabic - 16 - LIECHTENSTEIN - LI - LIE - 438 - CTRY_LIECHTENSTEIN - 41 - - - LITHUANIA - LT - LTU - 440 - CTRY_LITHUANIA - 370 - verLithuania - 41 - LUXEMBOURG - LU - LUX - 442 - CTRY_LUXEMBOURG - 352 - verFrBelgiumLux - 6 - MACAU - MO - MAC - 446 - CTRY_MACAU - 853 - - - MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF - MK - MKD - 807 - CTRY_MACEDONIA - 389 - verMacedonian - - MADAGASCAR - MG - MDG - 450 - - - - - MALAWI - MW - MWI - 454 - - - - - MALAYSIA - MY - MYS - 458 - CTRY_MALAYSIA - 60 - - - MALDIVES - MV - MDV - 462 - CTRY_MALDIVES - 960 - - - MALI - ML - MLI - 466 - - - - - MALTA - MT - MLT - 470 - - - verMalta - 22 - MARSHALL ISLANDS - MH - MHL - 584 - - - - - MARTINIQUE - MQ - MTQ - 474 - - - - - MAURITANIA - MR - MRT - 478 - - - - - MAURITIUS - MU - MUS - 480 - - - - - MAYOTTE - YT - MYT - 175 - - - - - MEXICO - MX - MEX - 484 - CTRY_MEXICO - 52 - - - MICRONESIA, FEDERATED STATES OF - FM - FSM - 583 - - - - - MOLDOVA, REPUBLIC OF - MD - MDA - 498 - - - - - MONACO - MC - MCO - 492 - CTRY_MONACO - 33 - - - MONGOLIA - MN - MNG - 496 - CTRY_MONGOLIA - 976 - - - MONTSERRAT - MS - MSR - 500 - - - - - MOROCCO - MA - MAR - 504 - CTRY_MOROCCO - 212 - verArabic - 16 - MOZAMBIQUE - MZ - MOZ - 508 - - - - - MYANMAR - MM - MMR - 104 - - - - - NAMIBIA - NA - NAM - 516 - - - - - NAURU - NR - NRU - 520 - - - - - NEPAL - NP - NPL - 524 - - - verNepal - 106 - NETHERLANDS - NL - NLD - 528 - CTRY_NETHERLANDS - 31 - verNetherlands - 5 - NETHERLANDS ANTILLES - AN - ANT - 530 - - - - - NEW CALEDONIA - NC - NCL - 540 - - - - - NEW ZEALAND - NZ - NZL - 554 - CTRY_NEW_ZEALAND - 64 - - - NICARAGUA - NI - NIC - 558 - CTRY_NICARAGUA - 505 - - - NIGER - NE - NER - 562 - - - - - NIGERIA - NG - NGA - 566 - - - - - NIUE - NU - NIU - 570 - - - - - NORFOLK ISLAND - NF - NFK - 574 - - - - - NORTHERN MARIANA ISLANDS - MP - MNP - 580 - - - - - NORWAY - NO - NOR - 578 - CTRY_NORWAY - 47 - verNorway - 12 - OMAN - OM - OMN - 512 - CTRY_OMAN - 968 - - - PAKISTAN - PK - PAK - 586 - CTRY_PAKISTAN - 92 - verPakistanUrdu, verPunjabi - 34 (U), 95 (P) - PALAU - PW - PLW - 585 - - - - - PANAMA - PA - PAN - 591 - CTRY_PANAMA - 507 - - - PALESTINIAN TERRITORY, OCCUPIED - PS - - - - - - - PAPUA NEW GUINEA - PG - PNG - 598 - - - - - PARAGUAY - PY - PRY - 600 - CTRY_PARAGUAY - 595 - - - PERU - PE - PER - 604 - CTRY_PERU - 51 - - - PHILIPPINES - PH - PHL - 608 - CTRY_PHILIPPINES - 63 - - - PITCAIRN - PN - PCN - 612 - - - - - POLAND - PL - POL - 616 - CTRY_POLAND - 48 - verPoland - 42 - PORTUGAL - PT - PRT - 620 - CTRY_PORTUGAL - 351 - verPortugal - 10 - PUERTO RICO - PR - PRI - 630 - CTRY_PUERTO_RICO - 1 - - - QATAR - QA - QAT - 634 - CTRY_QATAR - 974 - - - REUNION - RE - REU - 638 - - - - - ROMANIA - RO - ROU* - 642 - CTRY_ROMANIA - 40 - verRomania - 39 - RUSSIAN FEDERATION - RU - RUS - 643 - CTRY_RUSSIA - 7 - verRussia - 49 - RWANDA - RW - RWA - 646 - - - - - SAINT KITTS AND NEVIS - KN - KNA - 659 - - - - - SAINT LUCIA - LC - LCA - 662 - - - - - SAINT VINCENT AND THE GRENADINES - VC - VCT - 670 - - - - - SAMOA - WS - WSM - 882 - - - - - SAN MARINO - SM - SMR - 674 - - - - - SAO TOME AND PRINCIPE - ST - STP - 678 - - - - - SAUDI ARABIA - SA - SAU - 682 - CTRY_SAUDI_ARABIA - 966 - verArabic - 16 - SENEGAL - SN - SEN - 686 - - - - - SERBIA AND MONTENEGRO - CS - - - CTRY_SERBIA - 381 - - - SEYCHELLES - SC - SYC - 690 - - - - - SIERRA LEONE - SL - SLE - 694 - - - - - SINGAPORE - SG - SGP - 702 - CTRY_SINGAPORE - 65 - verSingapore - 100 - SLOVAKIA (Slovak Republic) - SK - SVK - 703 - CTRY_SLOVAK - 421 - verSlovak - 57 - SLOVENIA - SI - SVN - 705 - CTRY_SLOVENIA - 386 - verSlovenian - 66 - SOLOMON ISLANDS - SB - SLB - 90 - - - - - SOMALIA - SO - SOM - 706 - - - - - SOUTH AFRICA - ZA - ZAF - 710 - CTRY_SOUTH_AFRICA - 27 - - - SOUTH GEORGIA AND THE SOUTH SANDWICH ISLANDS - GS - - - - - - - SPAIN - ES - ESP - 724 - CTRY_SPAIN - 34 - verSpain - 8 - SRI LANKA - LK - LKA - 144 - - - - - SAINT HELENA - SH - SHN - 654 - - - - - SAINT PIERRE AND MIQUELON - PM - SPM - 666 - - - - - SUDAN - SD - SDN - 736 - - - - - SURINAME - SR - SUR - 740 - - - - - SVALBARD AND JAN MAYEN ISLANDS - SJ - SJM - 744 - - - - - SWAZILAND - SZ - SWZ - 748 - - - - - SWEDEN - SE - SWE - 752 - CTRY_SWEDEN - 46 - verSweden - 7 - SWITZERLAND - CH - CHE - 756 - CTRY_SWITZERLAND - 41 - verFrSwiss(fr), verGrSwiss(de) - 18(fr), 19(de) - SYRIAN ARAB REPUBLIC - SY - SYR - 760 - CTRY_SYRIA - 963 - - - TAIWAN, PROVINCE OF CHINA - TW - TWN - 158 - CTRY_TAIWAN - 886 - verTaiwan - 53 - TAJIKISTAN - TJ - TJK - 762 - - - - - TANZANIA, UNITED REPUBLIC OF - TZ - TZA - 834 - - - - - TATARSTAN - - - - CTRY_TATARSTAN - 7 - - - THAILAND - TH - THA - 764 - CTRY_THAILAND - 66 - verThailand - 54 - TIMOR-LESTE - TL - - - - - - - TOGO - TG - TGO - 768 - - - - - TOKELAU - TK - TKL - 772 - - - - - TONGA - TO - TON - 776 - - - verTonga - 88 - TRINIDAD AND TOBAGO - TT - TTO - 780 - CTRY_TRINIDAD_Y_TOBAGO - 1 - - - TUNISIA - TN - TUN - 788 - CTRY_TUNISIA - 216 - verArabic - 16 - TURKEY - TR - TUR - 792 - CTRY_TURKEY - 90 - verTurkey - 24 - TURKMENISTAN - TM - TKM - 795 - - - - - TURKS AND CAICOS ISLANDS - TC - TCA - 796 - - - - - TUVALU - TV - TUV - 798 - - - - - UGANDA - UG - UGA - 800 - - - - - UKRAINE - UA - UKR - 804 - CTRY_UKRAINE - 380 - verUkraine - 62 - UNITED ARAB EMIRATES - AE - ARE - 784 - CTRY_UAE - 971 - - - UNITED KINGDOM - GB - GBR - 826 - CTRY_UNITED_KINGDOM - 44 - verBritain - 2 - UNITED STATES - US - USA - 840 - CTRY_UNITED_STATES - 1 - verUS - 0 - UNITED STATES MINOR OUTLYING ISLANDS - UM - UMI - 581 - - - - - URUGUAY - UY - URY - 858 - CTRY_URUGUAY - 598 - - - UZBEKISTAN - UZ - UZB - 860 - CTRY_UZBEKISTAN - 7 - - - VANUATU - VU - VUT - 548 - - - - - VATICAN CITY STATE (HOLY SEE) - VA - VAT - 336 - - - - - VENEZUELA - VE - VEN - 862 - CTRY_VENEZUELA - 58 - - - VIET NAM - VN - VNM - 704 - CTRY_VIET_NAM - 84 - verVietnam - - VIRGIN ISLANDS (BRITISH) - VG - VGB - 92 - - - - - VIRGIN ISLANDS (U.S.) - VI - VIR - 850 - - - - - WALLIS AND FUTUNA ISLANDS - WF - WLF - 876 - - - - - WESTERN SAHARA - EH - ESH - 732 - - - - - YEMEN - YE - YEM - 887 - CTRY_YEMEN - 967 - - - YUGOSLAVIA - YU - YUG - 891 - - - - - ZAIRE - ZR - ZAR - 180 - - - - - ZAMBIA - ZM - ZMB - 894 - - - - - ZIMBABWE - ZW - ZWE - 716 - CTRY_ZIMBABWE - 263 - - - '! Item was removed: - ----- Method: ISOLanguageDefinition class>>iso3Countries (in category 'private') ----- - iso3Countries - "ISOLanguageDefinition iso3Countries" - "ISO2Countries := nil. ISO3Countries := nil" - - ISO3Countries ifNil: [self initISOCountries]. - ^ISO3Countries! Item was removed: - ----- Method: ISOLanguageDefinition class>>iso3LanguageDefinition: (in category 'accessing') ----- - iso3LanguageDefinition: aString - ^self iso3LanguageTable at: aString! Item was removed: - ----- Method: ISOLanguageDefinition class>>iso3LanguageTable (in category 'private') ----- - iso3LanguageTable - "ISOLanguageDefinition iso3LanguageTable" - - ^ISO3Table ifNil: [ISO3Table := self initISO3LanguageTable]! Item was removed: - ----- Method: ISOLanguageDefinition class>>isoLanguages (in category 'private') ----- - isoLanguages - "ISO 639: 3-letter codes" - ^'aar aa Afar - abk ab Abkhazian - ace Achinese - ach Acoli - ada Adangme - ady Adyghe; Adygei - afa Afro-Asiatic languages - afh Afrihili - afr af Afrikaans - ain Ainu - aka ak Akan - akk Akkadian - alb/sqi sq Albanian - ale Aleut - alg Algonquian languages - alt Southern Altai - amh am Amharic - ang English, Old (ca.450-1100) - anp Angika - apa Apache languages - ara ar Arabic - arc Official Aramaic (700-300 BCE); Imperial Aramaic (700-300 BCE) - arg an Aragonese - arm/hye hy Armenian - arn Mapudungun; Mapuche - arp Arapaho - art Artificial languages - arw Arawak - asm as Assamese - ast Asturian; Bable; Leonese; Asturleonese - ath Athapascan languages - aus Australian languages - ava av Avaric - ave ae Avestan - awa Awadhi - aym ay Aymara - aze az Azerbaijani - bad Banda languages - bai Bamileke languages - bak ba Bashkir - bal Baluchi - bam bm Bambara - ban Balinese - baq/eus eu Basque - bas Basa - bat Baltic languages - bej Beja; Bedawiyet - bel be Belarusian - bem Bemba - ben bn Bengali - ber Berber languages) - bho Bhojpuri - bih bh Bihari - bik Bikol - bin Bini; Edo - bis bi Bislama - bla Siksika - bnt Bantu languages - bos bs Bosnian - bra Braj - bre br Breton - btk Batak languages - bua Buriat - bug Buginese - bul bg Bulgarian - bur/mya my Burmese - byn Blin; Bilin - cad Caddo - cai Central American Indian languages - car Galibi Carib - cat ca Catalan; Valencian - cau Caucasian languages - ceb Cebuano - cel Celtic languages - cha ch Chamorro - chb Chibcha - che ce Chechen - chg Chagatai - chi/zho zh Chinese - chk Chuukese - chm Mari - chn Chinook jargon - cho Choctaw - chp Chipewyan; Dene Suline - chr Cherokee - chu cu Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic - chv cv Chuvash - chy Cheyenne - cmc Chamic languages - cop Coptic - cor kw Cornish - cos co Corsican - cpe Creoles and pidgins, English based - cpf Creoles and pidgins, French-based - cpp Creoles and pidgins, Portuguese-based - cre cr Cree - crh Crimean Tatar; Crimean Turkish - crp Creoles and pidgins - csb Kashubian - cus Cushitic languages - cze/ces cs Czech - dak Dakota - dan da Danish - dar Dargwa - day Land Dayak languages - del Delaware - den Slave (Athapascan) - dgr Dogrib - din Dinka - div dv Divehi; Dhivehi; Maldivian - doi Dogri - dra Dravidian languages - dsb Lower Sorbian - dua Duala - dum Dutch, Middle (ca.1050-1350) - dut/nld nl Dutch; Flemish - dyu Dyula - dzo dz Dzongkha - efi Efik - egy Egyptian (Ancient) - eka Ekajuk - elx Elamite - eng en English - enm English, Middle (1100-1500) - epo eo Esperanto - est et Estonian - ewe ee Ewe - ewo Ewondo - fan Fang - fao fo Faroese - fat Fanti - fij fj Fijian - fil Filipino; Pilipino - fin fi Finnish - fiu Finno-Ugrian languages) - fon Fon - fre/fra fr French - frm French, Middle (ca.1400-1600) - fro French, Old (842-ca.1400) - frr Northern Frisian - frs Eastern Frisian - fry fy Western Frisian - ful ff Fulah - fur Friulian - gaa Ga - gay Gayo - gba Gbaya - gem Germanic languages - geo/kat ka Georgian - ger/deu de German - gez Geez - gil Gilbertese - gla gd Gaelic; Scottish Gaelic - gle ga Irish - glg gl Galician - glv gv Manx - gmh German, Middle High (ca.1050-1500) - goh German, Old High (ca.750-1050) - gon Gondi - gor Gorontalo - got Gothic - grb Grebo - grc Greek, Ancient (to 1453) - gre/ell el Greek, Modern (1453-) - grn gn Guarani - gsw Swiss German; Alemannic; Alsatian - guj gu Gujarati - gwi Gwich''in - hai Haida - hat ht Haitian; Haitian Creole - hau ha Hausa - haw Hawaiian - heb he Hebrew - her hz Herero - hil Hiligaynon - him Himachali - hin hi Hindi - hit Hittite - hmn Hmong - hmo ho Hiri Motu - hrv hr Croatian - hsb Upper Sorbian - hun hu Hungarian - hup Hupa - iba Iban - ibo ig Igbo - ice/isl is Icelandic - ido io Ido - iii ii Sichuan Yi; Nuosu - ijo Ijo languages - iku iu Inuktitut - ile ie Interlingue; Occidental - ilo Iloko - ina ia Interlingua (International Auxiliary Language Association) - inc Indic languages - ind id Indonesian - ine Indo-European languages - inh Ingush - ipk ik Inupiaq - ira Iranian languages - iro Iroquoian languages - ita it Italian - jav jv Javanese - jbo Lojban - jpn ja Japanese - jpr Judeo-Persian - jrb Judeo-Arabic - kaa Kara-Kalpak - kab Kabyle - kac Kachin; Jingpho - kal kl Kalaallisut; Greenlandic - kam Kamba - kan kn Kannada - kar Karen languages - kas ks Kashmiri - kau kr Kanuri - kaw Kawi - kaz kk Kazakh - kbd Kabardian - kha Khasi - khi Khoisan languages - khm km Central Khmer - kho Khotanese; Sakan - kik ki Kikuyu; Gikuyu - kin rw Kinyarwanda - kir ky Kirghiz; Kyrgyz - kmb Kimbundu - kok Konkani - kom kv Komi - kon kg Kongo - kor ko Korean - kos Kosraean - kpe Kpelle - krc Karachay-Balkar - krl Karelian - kro Kru languages - kru Kurukh - kua kj Kuanyama; Kwanyama - kum Kumyk - kur ku Kurdish - kut Kutenai - lad Ladino - lah Lahnda - lam Lamba - lao lo Lao - lat la Latin - lav lv Latvian - lez Lezghian - lim li Limburgan; Limburger; Limburgish - lin ln Lingala - lit lt Lithuanian - lol Mongo - loz Lozi - ltz lb Luxembourgish; Letzeburgesch - lua Luba-Lulua - lub lu Luba-Katanga - lug lg Ganda - lui Luiseno - lun Lunda - luo Luo (Kenya and Tanzania) - lus Lushai - mac/mkd mk Macedonian - mad Madurese - mag Magahi - mah mh Marshallese - mai Maithili - mak Makasar - mal ml Malayalam - man Mandingo - mao/mri mi Maori - map Austronesian languages - mar mr Marathi - mas Masai - may/msa ms Malay - mdf Moksha - mdr Mandar - men Mende - mga Irish, Middle (900-1200) - mic Mi''kmaq; Micmac - min Minangkabau - mis Uncoded languages - mkh Mon-Khmer languages - mlg mg Malagasy - mlt mt Maltese - mnc Manchu - mni Manipuri - mno Manobo languages - moh Mohawk - mon mn Mongolian - mos Mossi - mul Multiple languages - mun Munda languages - mus Creek - mwl Mirandese - mwr Marwari - myn Mayan languages - myv Erzya - nah Nahuatl languages - nai North American Indian languages - nap Neapolitan - nau na Nauru - nav nv Navajo; Navaho - nbl nr Ndebele, South; South Ndebele - nde nd Ndebele, North; North Ndebele - ndo ng Ndonga - nds Low German; Low Saxon; German, Low; Saxon, Low - nep ne Nepali - new Nepal Bhasa; Newari - nia Nias - nic Niger-Kordofanian languages - niu Niuean - nno nn Norwegian Nynorsk; Nynorsk, Norwegian - nob nb Bokmal, Norwegian; Norwegian Bokmal - nog Nogai - non Norse, Old - nor no Norwegian - nqo N''Ko - nso Pedi; Sepedi; Northern Sotho - nub Nubian languages - nwc Classical Newari; Old Newari; Classical Nepal Bhasa - nya ny Chichewa; Chewa; Nyanja - nym Nyamwezi - nyn Nyankole - nyo Nyoro - nzi Nzima - oci oc Occitan (post 1500) - oji oj Ojibwa - ori or Oriya - orm om Oromo - osa Osage - oss os Ossetian; Ossetic - ota Turkish, Ottoman (1500-1928) - oto Otomian languages - paa Papuan languages - pag Pangasinan - pal Pahlavi - pam Pampanga; Kapampangan - pan pa Panjabi; Punjabi - pap Papiamento - pau Palauan - peo Persian, Old (ca.600-400 B.C.) - per/fas fa Persian - phi Philippine languages) - phn Phoenician - pli pi Pali - pol pl Polish - pon Pohnpeian - por pt Portuguese - pra Prakrit languages - pro Provencal, Old (to 1500);Occitan, Old (to 1500) - pus ps Pushto; Pashto - qaa-qtz Reserved for local use - que qu Quechua - raj Rajasthani - rap Rapanui - rar Rarotongan; Cook Islands Maori - roa Romance languages - roh rm Romansh - rom Romany - rum/ron ro Romanian; Moldavian; Moldovan - run rn Rundi - rup Aromanian; Arumanian; Macedo-Romanian - rus ru Russian - sad Sandawe - sag sg Sango - sah Yakut - sai South American Indian languages - sal Salishan languages - sam Samaritan Aramaic - san sa Sanskrit - sas Sasak - sat Santali - scn Sicilian - sco Scots - sel Selkup - sem Semitic languages - sga Irish, Old (to 900) - sgn Sign Languages - shn Shan - sid Sidamo - sin si Sinhala; Sinhalese - sio Siouan languages - sit Sino-Tibetan languages - sla Slavic languages - slo/slk sk Slovak - slv sl Slovenian - sma Southern Sami - sme se Northern Sami - smi Sami languages - smj Lule Sami - smn Inari Sami - smo sm Samoan - sms Skolt Sami - sna sn Shona - snd sd Sindhi - snk Soninke - sog Sogdian - som so Somali - son Songhai languages - sot st Sotho, Southern - spa es Spanish; Castilian - srd sc Sardinian - srn Sranan Tongo - srp sr Serbian - srr Serer - ssa Nilo-Saharan languages - ssw ss Swati - suk Sukuma - sun su Sundanese - sus Susu - sux Sumerian - swa sw Swahili - swe sv Swedish - syc Classical Syriac - syr Syriac - tah ty Tahitian - tai Tai languages - tam ta Tamil - tat tt Tatar - tel te Telugu - tem Timne - ter Tereno - tet Tetum - tgk tg Tajik - tgl tl Tagalog - tha th Thai - tib/bod bo Tibetan - tig Tigre - tir ti Tigrinya - tiv Tiv - tkl Tokelau - tlh Klingon; tlhIngan-Hol - tli Tlingit - tmh Tamashek - tog Tonga (Nyasa) - ton to Tonga (Tonga Islands) - tpi Tok Pisin - tsi Tsimshian - tsn tn Tswana - tso ts Tsonga - tuk tk Turkmen - tum Tumbuka - tup Tupi languages - tur tr Turkish - tut Altaic languages - tvl Tuvalu - twi tw Twi - tyv Tuvinian - udm Udmurt - uga Ugaritic - uig ug Uighur; Uyghur - ukr uk Ukrainian - umb Umbundu - und Undetermined - urd ur Urdu - uzb uz Uzbek - vai Vai - ven ve Venda - vie vi Vietnamese - vol vo Volapuk - vot Votic - wak Wakashan languages - wal Wolaitta; Wolaytta - war Waray - was Washo - wel/cym cy Welsh - wen Sorbian languages - wln wa Walloon - wol wo Wolof - xal Kalmyk; Oirat - xho xh Xhosa - yao Yao - yap Yapese - yid yi Yiddish - yor yo Yoruba - ypk Yupik languages - zap Zapotec - zbl Blissymbols; Blissymbolics; Bliss - zen Zenaga - zha za Zhuang; Chuang - znd Zande languages - zul zu Zulu - zun Zuni - zxx No linguistic content; Not applicable - zza Zaza; Dimili; Dimli; Kirdki; Kirmanjki; Zazaki'! Item was removed: - ----- Method: ISOLanguageDefinition class>>readISOLanguagesFrom: (in category 'private') ----- - readISOLanguagesFrom: stream - "ISOLanguageDefinition readISOLanguagesFrom: ISOLanguageDefinition isoLanguages readStream " - | languages language code3 index line | - languages := Dictionary new. - [stream atEnd - or: [(line := stream nextLine readStream) atEnd]] - whileFalse: [ - language := ISOLanguageDefinition new. - code3 := line upTo: Character tab. - (index := code3 indexOf: $/) > 0 - ifTrue: [ - language iso3: (code3 copyFrom: 1 to: index-1). - language iso3Alternate: (code3 copyFrom: index+1 to: code3 size)] - ifFalse: [language iso3: code3]. - language - iso2: (line upTo: Character tab); - language: line upToEnd. - languages at: language iso3 put: language]. - ^languages! Item was removed: - ----- Method: ISOLanguageDefinition>>iso2 (in category 'accessing') ----- - iso2 - ^iso2 ifNil: [self iso3]! Item was removed: - ----- Method: ISOLanguageDefinition>>iso2: (in category 'initialize') ----- - iso2: aString - iso2 := aString ifEmpty: [nil] ifNotEmpty: [aString]! Item was removed: - ----- Method: ISOLanguageDefinition>>iso3 (in category 'accessing') ----- - iso3 - ^iso3 ifNil: ['']! Item was removed: - ----- Method: ISOLanguageDefinition>>iso3: (in category 'initialize') ----- - iso3: aString - iso3 := aString ifEmpty: [nil] ifNotEmpty: [aString]! Item was removed: - ----- Method: ISOLanguageDefinition>>iso3Alternate (in category 'accessing') ----- - iso3Alternate - ^iso3Alternate ifNil: ['']! Item was removed: - ----- Method: ISOLanguageDefinition>>iso3Alternate: (in category 'initialize') ----- - iso3Alternate: aString - iso3Alternate := aString ifEmpty: [nil] ifNotEmpty: [aString]! Item was removed: - ----- Method: ISOLanguageDefinition>>language (in category 'accessing') ----- - language - ^language! Item was removed: - ----- Method: ISOLanguageDefinition>>language: (in category 'initialize') ----- - language: aString - language := aString! Item was removed: - NaturalLanguageTranslator subclass: #InternalTranslator - instanceVariableNames: 'generics' - classVariableNames: 'AllKnownPhrases CachedTranslations' - poolDictionaries: '' - category: 'GetText-Localization'! - - !InternalTranslator commentStamp: 'tak 10/19/2007 11:12' prior: 0! - An InternalTranslator is used a translation dictionary in a image. - You can use it without any external translation file. - - Structure: - generics Dictionary -- msgid -> msgstr - ! Item was removed: - ----- Method: InternalTranslator class>>allKnownPhrases (in category 'private') ----- - allKnownPhrases - ^AllKnownPhrases ifNil: [AllKnownPhrases := Dictionary new: 2051]! Item was removed: - ----- Method: InternalTranslator class>>availableLanguageLocaleIDs (in category 'accessing') ----- - availableLanguageLocaleIDs - "Return locale ids for the internal translation dictionary." - "InternalTranslator availableLanguageLocaleIDs" - ^ self cachedTranslations values collect:[:each | each localeID]! Item was removed: - ----- Method: InternalTranslator class>>cachedTranslations (in category 'private') ----- - cachedTranslations - "CachedTranslations := nil" - ^CachedTranslations ifNil: [CachedTranslations := Dictionary new]! Item was removed: - ----- Method: InternalTranslator class>>directoryForLanguage:country:create: (in category 'private loading') ----- - directoryForLanguage: isoLanguage country: isoCountry create: createDir - "Try to locate the <prefs>/locale/<language>{/<country>} folder. - If createDir is set, create the path down to country or language, depending on wether it's specified.. - Return the directory for country or language depending on specification. - If neither exists, nil" - - "NaturalLanguageTranslator directoryForLanguage: 'es' country: nil create: true" - "NaturalLanguageTranslator directoryForLanguage: 'de' country: 'DE' create: true" - "NaturalLanguageTranslator directoryForLanguage: 'en' country: 'US' create: false" - "NaturalLanguageTranslator directoryForLanguage: 'en' country: nil create: true" - - "If this fails, there is nothing we can do about it here" - | localeDir countryDir languageDir | - localeDir := self localeDirCreate: createDir. - localeDir ifNil: [^nil]. - - isoCountry ifNil: [ - languageDir := localeDir directoryNamed: isoLanguage. - createDir - ifTrue: [languageDir assureExistence]. - ^languageDir exists - ifTrue: [languageDir] - ifFalse: [nil]]. - - countryDir := languageDir directoryNamed: isoCountry. - createDir - ifTrue: [countryDir assureExistence]. - - ^countryDir exists - ifTrue: [countryDir] - ifFalse: [nil]! Item was removed: - ----- Method: InternalTranslator class>>directoryForLocaleID:create: (in category 'private loading') ----- - directoryForLocaleID: localeID create: createDir - "Try to locate the <prefs>/locale/<language>{/<country>} folder. - If createDir is set, create the path down to country or language, depending on locale. - Return the directory for country or language depending on locale. - If neither exists, nil" - - "NaturalLanguageTranslator directoryForLanguage: 'de' country: nil readOnly: true" - "NaturalLanguageTranslator directoryForLanguage: 'de' country: 'DE' readOnly: true" - "NaturalLanguageTranslator directoryForLanguage: 'en' country: 'US' readOnly: false" - "NaturalLanguageTranslator directoryForLanguage: 'en' country: nil readOnly: true" - - ^self directoryForLanguage: localeID isoLanguage country: localeID isoCountry create: createDir! Item was removed: - ----- Method: InternalTranslator class>>discardAllTranslations (in category 'class initialization') ----- - discardAllTranslations - AllKnownPhrases := nil. - self resetCaches.! Item was removed: - ----- Method: InternalTranslator class>>fileReaderServicesForFile:suffix: (in category 'file-services') ----- - fileReaderServicesForFile: fullName suffix: suffix - "Answer the file services associated with given file" - ^ (suffix = self translationSuffix) | (suffix = '*') - ifTrue: [{self serviceMergeLanguageTranslations}] - ifFalse: [#()]! Item was removed: - ----- Method: InternalTranslator class>>loadAvailableExternalLocales (in category 'private loading') ----- - loadAvailableExternalLocales - "private - register locales IDs based on the content of the <prefs>/locale/ directory" - | localeDir | - localeDir := self localeDirCreate: false. - localeDir ifNil: [^ #()]. - - localeDir directoryNames - do: [:langDirName | - | langDir | - langDir := localeDir directoryNamed: langDirName. - - (langDir fileNamesMatching: '*.' , self translationSuffix) - ifNotEmpty: [self loadTranslatorForIsoLanguage: langDirName isoCountry: nil]. - - langDir directoryNames - do: [:countryDirName | - | countryDir | - countryDir := langDirName directoryNamed: countryDirName. - (countryDir fileNamesMatching: '*.' , self translationSuffix) - ifNotEmpty: [self loadTranslatorForIsoLanguage: langDirName isoCountry: countryDirName] - ] - ]. - ! Item was removed: - ----- Method: InternalTranslator class>>loadExternalTranslationsFor: (in category 'private loading') ----- - loadExternalTranslationsFor: translator - "Try to load translations from external external files. - The files are located in the <prefs>/locale/<language>{/<country>} folder. - There can be more than one file for each location, so applications can install their own partial translation tables. All files in the specific folder are loaded." - - | translationDir | - translationDir := self directoryForLocaleID: translator localeID create: false. - translationDir ifNil: [ ^nil ]. - (translationDir fileNamesMatching: '*.' , self translationSuffix) - do: [:fileName | translator loadFromFileNamed: (translationDir fullNameFor: fileName)]! Item was removed: - ----- Method: InternalTranslator class>>loadForLocaleIsoString:fromGzippedMimeLiteral: (in category 'file-services') ----- - loadForLocaleIsoString: localeString fromGzippedMimeLiteral: mimeString - "merge the translation from the mime literal." - | stream localeID translator gs rbStream s currentPlatform | - s := Base64MimeConverter mimeDecodeToBytes: mimeString readStream. - s reset. - gs := GZipReadStream on: s. - rbStream := MultiByteBinaryOrTextStream with: gs contents asString. - rbStream converter: UTF8TextConverter new. - rbStream reset. - localeID := LocaleID isoString: localeString. - currentPlatform := Locale currentPlatform. - [Locale - currentPlatform: (Locale localeID: localeID). - stream := ReadStream on: rbStream contents] - ensure: [Locale currentPlatform: currentPlatform]. - translator := self localeID: localeID. - translator loadFromStream: stream. - LanguageEnvironment resetKnownEnvironments! Item was removed: - ----- Method: InternalTranslator class>>loadTranslatorForIsoLanguage:isoCountry: (in category 'private loading') ----- - loadTranslatorForIsoLanguage: isoLanguage isoCountry: isoCountry - "private - load the translations from <prefs>/locale/ directory - the procedure is to assure the existence of a translator for the - given language/country and then load the external translations for this translator" - - | translator | - translator := self newLocaleID: (LocaleID isoLanguage: isoLanguage isoCountry: isoCountry). - - self loadExternalTranslationsFor: translator! Item was removed: - ----- Method: InternalTranslator class>>localeDirCreate: (in category 'private loading') ----- - localeDirCreate: createDir - "Try to locate the <prefs>/locale/ folder. - If createDir is set, try to create the path. - If it doesn't exist, return nil" - - "If this fails, there is nothing we can do about it here" - | prefDir localeDir | - (createDir not - and: [ExternalSettings preferenceDirectory isNil]) - ifTrue: [^ nil]. - - prefDir := ExternalSettings assuredPreferenceDirectory. - prefDir exists - ifFalse: [^nil]. - - - localeDir := prefDir directoryNamed: 'locale'. - createDir - ifTrue: [localeDir assureExistence]. - ^localeDir exists - ifTrue: [localeDir] - ifFalse: [nil]! Item was removed: - ----- Method: InternalTranslator class>>localeID: (in category 'accessing') ----- - localeID: localeID - "For backward compatibility, see NaturalLanguageTranslator >> fileOutHeaderOn:." - ^ self newLocaleID: localeID! Item was removed: - ----- Method: InternalTranslator class>>mergeLegacyTranslators (in category 'accessing') ----- - mergeLegacyTranslators - self availableLanguageLocaleIDs - do: [:localeID | (NaturalLanguageTranslator translators includesKey: localeID) - ifFalse: [NaturalLanguageTranslator translators - at: localeID - put: (self newLocaleID: localeID)]]! Item was removed: - ----- Method: InternalTranslator class>>mergeTranslationFileNamed: (in category 'file-services') ----- - mergeTranslationFileNamed: fileFullNameString - "merge the translation in the file named fileFullNameString" - - | stream localeID translator | - stream := FileStream readOnlyFileNamed: fileFullNameString. - [localeID := LocaleID isoString: stream localName sansPeriodSuffix. - translator := self localeID: localeID. - translator loadFromStream: stream] - ensure: [stream close]. - LanguageEnvironment resetKnownEnvironments. - - ! Item was removed: - ----- Method: InternalTranslator class>>newLocaleID: (in category 'accessing') ----- - newLocaleID: localeID - ^ self cachedTranslations - at: localeID - ifAbsentPut: [self new localeID: localeID]! Item was removed: - ----- Method: InternalTranslator class>>privateStartUp (in category 'class initialization') ----- - privateStartUp - self loadAvailableExternalLocales. - self mergeLegacyTranslators. - ! Item was removed: - ----- Method: InternalTranslator class>>registerPhrase: (in category 'private') ----- - registerPhrase: phrase - "Using a Dictionary so we can lookup existing string instead of creating needless copies when loading a translation." - self allKnownPhrases at: phrase put: phrase! Item was removed: - ----- Method: InternalTranslator class>>registeredPhraseFor: (in category 'private') ----- - registeredPhraseFor: phrase - "Using a Dictionary so we can lookup existing string instead of creating needless copies when loading a translation." - ^self allKnownPhrases at: phrase ifAbsentPut: [phrase]! Item was removed: - ----- Method: InternalTranslator class>>removeLocaleID: (in category 'accessing') ----- - removeLocaleID: localeID - "self removeLocaleID: (LocaleID isoString: 'ja-kids')" - self cachedTranslations - removeKey: localeID - ifAbsent: []. - NaturalLanguageTranslator privateStartUp! Item was removed: - ----- Method: InternalTranslator class>>resetCaches (in category 'class initialization') ----- - resetCaches - CachedTranslations := nil. - ! Item was removed: - ----- Method: InternalTranslator class>>serviceMergeLanguageTranslations (in category 'file-services') ----- - serviceMergeLanguageTranslations - "Answer a service for merging of translation files" - ^ SimpleServiceEntry - provider: self - label: 'merge the translation file' translatedNoop - selector: #mergeTranslationFileNamed: - description: 'merge the translation file into the language named like the file' translatedNoop - buttonLabel: 'merge' translatedNoop! Item was removed: - ----- Method: InternalTranslator class>>services (in category 'file-services') ----- - services - "Answer potential file services associated with this class" - ^ {self serviceMergeLanguageTranslations}! Item was removed: - ----- Method: InternalTranslator class>>translationSuffix (in category 'private') ----- - translationSuffix - ^'translation'! Item was removed: - ----- Method: InternalTranslator>>atRandom (in category 'accessing') ----- - atRandom - - ^ generics atRandom value. - ! Item was removed: - ----- Method: InternalTranslator>>checkPhrase:translation: (in category 'translation') ----- - checkPhrase: phrase translation: translation! Item was removed: - ----- Method: InternalTranslator>>defaultBackgroundColor (in category 'user interface') ----- - defaultBackgroundColor - "answer the receiver's defaultBackgroundColor for views" - ^ Color cyan! Item was removed: - ----- Method: InternalTranslator>>fileOutHeader (in category 'fileIn/fileOut') ----- - fileOutHeader - ^ '''Translation dictionary'''! Item was removed: - ----- Method: InternalTranslator>>fileOutHeaderOn: (in category 'user interface') ----- - fileOutHeaderOn: aStream - aStream binary. - UTF8TextConverter writeBOMOn: aStream. - aStream text. - aStream nextChunkPut: self fileOutHeader; - cr. - aStream timeStamp; cr. - aStream nextPut: $!!. - aStream nextChunkPut: '(' , self class name , ' localeID: ' , id storeString , ')'. - aStream cr! Item was removed: - ----- Method: InternalTranslator>>fileOutHeaderOn:withBOM: (in category 'user interface') ----- - fileOutHeaderOn: aStream withBOM: bomFlag - bomFlag ifTrue: [ - aStream binary. - UTF8TextConverter writeBOMOn: aStream. - aStream text. - ]. - aStream nextChunkPut: self fileOutHeader; - cr. - aStream timeStamp; cr. - aStream nextPut: $!!. - aStream nextChunkPut: '(' , self class name , ' localeID: ' , id storeString , ')'. - aStream cr! Item was removed: - ----- Method: InternalTranslator>>fileOutOn: (in category 'fileIn/fileOut') ----- - fileOutOn: aStream - "self current fileOutOn: Transcript. Transcript endEntry" - self fileOutOn: aStream keys: nil withBOM: true. - ! Item was removed: - ----- Method: InternalTranslator>>fileOutOn:keys:withBOM: (in category 'fileIn/fileOut') ----- - fileOutOn: aStream keys: keys withBOM: bomFlag - "self current fileOutOn: Transcript. Transcript endEntry" - self fileOutHeaderOn: aStream withBOM: bomFlag. - (keys - ifNil: [generics keys asSortedCollection]) - do: [:key | self - nextChunkPut: (generics associationAt: key) - on: aStream]. - keys - ifNil: [self untranslated - do: [:each | self nextChunkPut: each -> '' on: aStream]]. - aStream nextPut: $!!; - cr! Item was removed: - ----- Method: InternalTranslator>>generics (in category 'private') ----- - generics - ^generics ifNil: [generics := Dictionary new]! Item was removed: - ----- Method: InternalTranslator>>isDomainLoaded: (in category 'accessing') ----- - isDomainLoaded: aDomainName - ^true - ! Item was removed: - ----- Method: InternalTranslator>>loadFromFileNamed: (in category 'private store-retrieve') ----- - loadFromFileNamed: fileNameString - "Load translations from an external file" - - | stream | - [stream := FileStream readOnlyFileNamed: fileNameString. - self loadFromStream: stream] - ensure: [stream close]. - self changed: #translations. - self changed: #untranslated. - ! Item was removed: - ----- Method: InternalTranslator>>loadFromRefStream: (in category 'private store-retrieve') ----- - loadFromRefStream: stream - "Load translations from an external file" - | loadedArray refStream | - refStream := ReferenceStream on: stream. - [loadedArray := refStream next] - ensure: [refStream close]. - self processExternalObject: loadedArray ! Item was removed: - ----- Method: InternalTranslator>>loadFromStream: (in category 'private store-retrieve') ----- - loadFromStream: stream - "Load translations from an external file" - | header isFileIn | - header := '''Translation dictionary'''. - isFileIn := (stream next: header size) - = header. - stream reset. - isFileIn - ifTrue: [stream fileInAnnouncing: 'Loading ' translated, stream localName] - ifFalse: [self loadFromRefStream: stream]! Item was removed: - ----- Method: InternalTranslator>>mergeTranslations: (in category 'private store-retrieve') ----- - mergeTranslations: newTranslations - "Merge a new set of translations into the exiting table. - Overwrites existing entries." - - newTranslations keysAndValuesDo: [:key :value | - self rawPhrase: (self class registeredPhraseFor: key) translation: value]. - self changed: #translations. - self changed: #untranslated.! Item was removed: - ----- Method: InternalTranslator>>nextChunkPut:on: (in category 'fileIn/fileOut') ----- - nextChunkPut: anObject on: aStream - | i remainder terminator | - terminator := $!!. - remainder := anObject storeString. - [(i := remainder indexOf: terminator) = 0] - whileFalse: [aStream - nextPutAll: (remainder copyFrom: 1 to: i). - aStream nextPut: terminator. - "double imbedded terminators" - remainder := remainder copyFrom: i + 1 to: remainder size]. - aStream nextPutAll: remainder. - aStream nextPut: terminator; cr.! Item was removed: - ----- Method: InternalTranslator>>phrase:translation: (in category 'translation') ----- - phrase: phraseString translation: translationString - self generics at: phraseString put: translationString asString. - self changed: #translations. - self changed: #untranslated.! Item was removed: - ----- Method: InternalTranslator>>processExternalObject: (in category 'private store-retrieve') ----- - processExternalObject: anArray - "pivate - process the external object" - - "new format -> {translations. untranslated}" - - anArray second do: [:each | self class registerPhrase: each]. - - self mergeTranslations: anArray first! Item was removed: - ----- Method: InternalTranslator>>rawPhrase:translation: (in category 'translation') ----- - rawPhrase: phraseString translation: translationString - self generics at: phraseString put: translationString asString. - ! Item was removed: - ----- Method: InternalTranslator>>rawRemoveUntranslated: (in category 'translation') ----- - rawRemoveUntranslated: untranslated - - self class allKnownPhrases removeKey: untranslated ifAbsent: []. - self changed: #untranslated.! Item was removed: - ----- Method: InternalTranslator>>removeTranslationFor: (in category 'translation') ----- - removeTranslationFor: phraseString - self generics removeKey: phraseString ifAbsent: []. - self changed: #translations. - self changed: #untranslated.! Item was removed: - ----- Method: InternalTranslator>>removeUntranslated: (in category 'translation') ----- - removeUntranslated: untranslated - - self class allKnownPhrases removeKey: untranslated ifAbsent: []. - ! Item was removed: - ----- Method: InternalTranslator>>saveToFileNamed: (in category 'private store-retrieve') ----- - saveToFileNamed: fileNameString - "save the receiver's translations to a file named fileNameString" - | stream | - "Set true if you need to save as binary" - false - ifTrue: [stream := ReferenceStream fileNamed: fileNameString. - stream nextPut: {self translations. self untranslated}. - stream close. - ^ self]. - stream := FileStream fileNamed: fileNameString. - [self fileOutOn: stream] - ensure: [stream close]! Item was removed: - ----- Method: InternalTranslator>>scanFrom: (in category 'fileIn/fileOut') ----- - scanFrom: aStream - "Read a definition of dictionary. - Make sure current locale corresponds my locale id" - | aString newTranslations assoc currentPlatform | - newTranslations := Dictionary new. - currentPlatform := Locale currentPlatform. - [Locale - currentPlatform: (Locale localeID: id). - [aString := aStream nextChunk withSqueakLineEndings. - aString size > 0] - whileTrue: [assoc := Compiler evaluate: aString. - assoc value = '' - ifTrue: [self class registerPhrase: assoc key] - ifFalse: [newTranslations add: assoc]]] - ensure: [Locale currentPlatform: currentPlatform]. - self mergeTranslations: newTranslations! Item was removed: - ----- Method: InternalTranslator>>translate:inDomain: (in category 'translation') ----- - translate: aString inDomain: aDomainName - | translator | - ^ self generics - at: aString - ifAbsent: [self localeID hasParent - ifTrue: [translator := self class cachedTranslations - at: self localeID parent - ifAbsent: [^ aString]. - translator translate: aString inDomain: aDomainName] - ifFalse: [aString]]! Item was removed: - ----- Method: InternalTranslator>>translations (in category 'accessing') ----- - translations - ^self generics! Item was removed: - ----- Method: InternalTranslator>>untranslated (in category 'accessing') ----- - untranslated - | translations | - translations := self translations. - ^self class allKnownPhrases reject: [:each | translations includesKey: each]! Item was changed: ----- Method: LanguageEditor>>checkSpanishPhrase:translation: (in category 'private') ----- checkSpanishPhrase: phraseString translation: translationString "check the translation and aswer a string with a comment or a nil meaning no-comments" | superResult | superResult := self checkPhrase: phraseString translation: translationString. superResult isNil ifFalse: [^ superResult]. "For some reason, MCInstaller couldn't read Spanish character. " "((translationString includes: $?) + and: [(translationString includes: $ø) not]) + ifTrue: [^ 'øOlvidÛ el signo de pregunta?']. - and: [(translationString includes: $¿) not]) - ifTrue: [^ '¿Olvidó el signo de pregunta?']. ((translationString includes: $!!) + and: [(translationString includes: $°) not]) + ifTrue: [^ 'øOlvidÛ el signo de admiraciÛn?']. - and: [(translationString includes: $¡) not]) - ifTrue: [^ '¿Olvidó el signo de admiración?']. " ^ nil ! Item was changed: ----- Method: LanguageEditor>>codeSelectedTranslationAsMimeString (in category 'gui methods') ----- codeSelectedTranslationAsMimeString | keys code tmpStream s2 gzs cont | keys := selectedTranslations collect: [:key | self translations at: key]. code := String streamContents: [:aStream | self translator fileOutOn: aStream keys: keys withBOM: false]. + tmpStream := MultiByteBinaryOrTextStream on: ''. - tmpStream _ MultiByteBinaryOrTextStream on: ''. tmpStream converter: UTF8TextConverter new. tmpStream nextPutAll: code. + s2 := RWBinaryOrTextStream on: ''. - s2 _ RWBinaryOrTextStream on: ''. gzs := GZipWriteStream on: s2. tmpStream reset. gzs nextPutAll: (tmpStream binary contentsOfEntireFile asString) contents. gzs close. s2 reset. + cont := String streamContents: [:strm | - cont _ String streamContents: [:strm | strm nextPutAll: '"Gzip+Base64 encoded translation for;'; cr. strm nextPutAll: '#('. keys do: [:each | strm nextPutAll: '''', each, ''' '.]. strm nextPutAll: ')"'; cr; cr. strm nextPutAll: 'NaturalLanguageTranslator loadForLocaleIsoString: '. strm nextPut: $'. strm nextPutAll: translator localeID isoString. strm nextPut: $'. strm nextPutAll: ' fromGzippedMimeLiteral: '. strm nextPut: $'. strm nextPutAll: (Base64MimeConverter mimeEncode: s2) contents. strm nextPutAll: '''.'. strm cr. ]. (StringHolder new contents: cont) openLabel: 'exported codes in Gzip+Base64 encoding' translated! Item was changed: ----- Method: LanguageEditor>>filterTranslations: (in category 'gui methods') ----- filterTranslations: aString | filter | filter := aString ifNil:['']. "" + translationsFilter := filter. - translationsFilter _ filter. self refreshTranslations. ! Item was changed: ----- Method: LanguageEditor>>getTextExport (in category 'gui methods') ----- getTextExport Cursor wait + showWhile: [GetTextExporter new exportTranslator: self model]! - showWhile: [GetTextExporter2 new exportTranslator: self model]! Item was changed: ----- Method: LanguageEditor>>getTextExportTemplate (in category 'gui methods') ----- getTextExportTemplate Cursor wait + showWhile: [GetTextExporter new exportTemplate] ! - showWhile: [GetTextExporter2 new exportTemplate] ! Item was changed: ----- Method: LanguageEditor>>initializeNewerKeys (in category 'initialization') ----- initializeNewerKeys + newerKeys := Set new. - newerKeys _ Set new. ! Item was changed: ----- Method: LanguageEditor>>selectNewerKeys (in category 'gui methods') ----- selectNewerKeys | index | self deselectAllTranslation. newerKeys do: [:k | + index := self translations indexOf: k ifAbsent: [0]. - index _ self translations indexOf: k ifAbsent: [0]. index > 0 ifTrue: [ self selectedTranslationsAt: index put: true ]. ]. ! Item was changed: ----- Method: LanguageEditor>>translation: (in category 'accessing') ----- translation: aStringOrText "change the translation for the selected phrase" | phrase | self selectedTranslation isZero ifTrue: [^ self]. + phrase := self translations at: self selectedTranslation. - phrase _ self translations at: self selectedTranslation. translator phrase: phrase translation: aStringOrText asString. newerKeys add: phrase. ^ true! Item was changed: ----- Method: LanguageEditor>>translations (in category 'accessing') ----- translations "answet the translator's translations" | allTranslations filterString | translations ifNotNil: [^translations]. allTranslations := self translator translations keys. "" filterString := self translationsFilter. "" filterString isEmpty ifFalse: [allTranslations := allTranslations select: [:each | "" ('*' , filterString , '*' match: each) or: ['*' , filterString , '*' match: (self translator translate: each)]]]. "" + ^ translations := allTranslations asSortedCollection asArray! - ^ translations _ allTranslations asSortedCollection asArray! Item was changed: ----- Method: LanguageEditor>>untranslated (in category 'accessing') ----- untranslated "answer the translator's untranslated phrases" | all filterString | untranslated ifNotNil: [^ untranslated]. all := self translator untranslated. "" filterString := self untranslatedFilter. "" filterString isEmpty ifFalse: [all := all select: [:each | "" ('*' , filterString , '*' match: each) or: ['*' , filterString , '*' match: (self translator translate: each)]]]. "" + ^ untranslated := all asSortedCollection asArray! - ^ untranslated _ all asSortedCollection asArray! Item was removed: - Object subclass: #Locale - instanceVariableNames: 'id shortDate longDate time decimalSymbol digitGrouping currencySymbol currencyNotation measurement offsetLocalToUTC offsetVMToUTC dstActive' - classVariableNames: 'Current CurrentPlatform KnownLocales LanguageSymbols LocaleChangeListeners PlatformEncodings Previous' - poolDictionaries: '' - category: 'GetText-Localization'! - - !Locale commentStamp: '<historical>' prior: 0! - Main comment stating the purpose of this class and relevant relationship to other classes. - - - -
http://www.w3.org/WAI/ER/IG/ert/iso639.htm
-
http://www.oasis-open.org/cover/iso639a.html
- See also -
http://oss.software.ibm.com/cvs/icu/~checkout~/icuhtml/design/language_code…
-
http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.10
- - ISO 3166 -
http://mitglied.lycos.de/buran/knowhow/codes/locales/
- ! Item was removed: - ----- Method: Locale class>>addLocalChangedListener: (in category 'notification') ----- - addLocalChangedListener: anObjectOrClass - self localeChangedListeners add: anObjectOrClass! Item was removed: - ----- Method: Locale class>>clipboadInterpreter (in category 'accessing') ----- - clipboadInterpreter - ^NoConversionClipboardInterpreter new! Item was removed: - ----- Method: Locale class>>current (in category 'accessing') ----- - current - "Current := nil" - Current ifNil: [ - Current := self determineCurrentLocale. - "Transcript show: 'Current locale: ' , Current localeID asString; cr"]. - ^Current! Item was removed: - ----- Method: Locale class>>currentPlatform (in category 'accessing') ----- - currentPlatform - "CurrentPlatform := nil" - CurrentPlatform ifNil: [CurrentPlatform := self determineCurrentLocale]. - ^CurrentPlatform! Item was removed: - ----- Method: Locale class>>currentPlatform: (in category 'accessing') ----- - currentPlatform: locale - CurrentPlatform := locale. - LanguageEnvironment startUp. - ! Item was removed: - ----- Method: Locale class>>currentPlatform:during: (in category 'accessing') ----- - currentPlatform: locale during: aBlock - "Alter current language platform during a block" - | backupPlatform | - backupPlatform := self currentPlatform. - [self currentPlatform: locale. - aBlock value] - ensure: [self currentPlatform: backupPlatform]! Item was removed: - ----- Method: Locale class>>defaultEncodingName: (in category 'platform specific') ----- - defaultEncodingName: languageSymbol - | encodings platformName osVersion | - platformName := SmalltalkImage current platformName. - osVersion := SmalltalkImage current getSystemAttribute: 1002. - encodings := self platformEncodings at: languageSymbol - ifAbsent: [self platformEncodings at: #default]. - encodings at: platformName ifPresent: [:encoding | ^encoding]. - encodings at: platformName , ' ' , osVersion - ifPresent: [:encoding | ^encoding]. - ^encodings at: #default! Item was removed: - ----- Method: Locale class>>defaultInputInterpreter (in category 'platform specific') ----- - defaultInputInterpreter - | platformName osVersion | - platformName := SmalltalkImage current platformName. - osVersion := SmalltalkImage current getSystemAttribute: 1002. - (platformName = 'Win32' and: [osVersion = 'CE']) - ifTrue: [^NoInputInterpreter new]. - platformName = 'Win32' ifTrue: [^MacRomanInputInterpreter new]. - ^NoInputInterpreter new! Item was removed: - ----- Method: Locale class>>determineCurrentLocale (in category 'private') ----- - determineCurrentLocale - "For now just return the default locale. - A smarter way would be to determine the current platforms default locale." - "Locale determineCurrentLocale" - - ^self new determineLocale! Item was removed: - ----- Method: Locale class>>initKnownLocales (in category 'private') ----- - initKnownLocales - | locales | - locales := Dictionary new. - - "Init the locales for which we have translations" - InternalTranslator availableLanguageLocaleIDs do: [:id | - locales at: id put: (Locale new localeID: id)]. - ^locales! Item was removed: - ----- Method: Locale class>>initialize (in category 'class initialization') ----- - initialize - "Locale initialize" - - Smalltalk addToStartUpList: Locale. - Preferences addPreference: #useLocale - categories: #('general') default: false - balloonHelp: 'Use the system locale to set the system language etc at startup'.! Item was removed: - ----- Method: Locale class>>initializePlatformEncodings (in category 'class initialization') ----- - initializePlatformEncodings - "Locale initializePlatformEncodings" - - | platform | - PlatformEncodings isNil ifTrue: [ PlatformEncodings := Dictionary new ]. - - platform := PlatformEncodings at: 'default' ifAbsentPut: Dictionary new. - platform - at: 'default' put: 'iso8859-1'; - at: 'Win32 CE' put: 'utf-8'; - yourself. - - platform := PlatformEncodings at: 'ja' ifAbsentPut: Dictionary new. - platform - at: 'default' put: 'shift-jis'; - at: 'unix' put: 'euc-jp'; - at: 'Win32 CE' put: 'utf-8'; - yourself. - - platform := PlatformEncodings at: 'ko' ifAbsentPut: Dictionary new. - platform - at: 'default' put: 'euc-kr'; - at: 'Win32 CE' put: 'utf-8'; - yourself. - - platform := PlatformEncodings at: 'zh' ifAbsentPut: Dictionary new. - platform - at: 'default' put: 'gb2312'; - at: 'unix' put: 'euc-cn'; - at: 'Win32 CE' put: 'utf-8'; - yourself. - ! Item was removed: - ----- Method: Locale class>>isoLanguage: (in category 'accessing') ----- - isoLanguage: isoLanguage - ^self isoLanguage: isoLanguage isoCountry: nil! Item was removed: - ----- Method: Locale class>>isoLanguage:isoCountry: (in category 'accessing') ----- - isoLanguage: isoLanguage isoCountry: isoCountry - ^self localeID: (LocaleID isoLanguage: isoLanguage isoCountry: isoCountry)! Item was removed: - ----- Method: Locale class>>isoLocale: (in category 'accessing') ----- - isoLocale: aString - ! Item was removed: - ----- Method: Locale class>>knownLocales (in category 'private') ----- - knownLocales - "KnownLocales := nil" - ^KnownLocales ifNil: [KnownLocales := self initKnownLocales]! Item was removed: - ----- Method: Locale class>>languageSymbol: (in category 'accessing') ----- - languageSymbol: languageSymbol - "Locale languageSymbol: #Deutsch" - - ^self isoLanguage: (LanguageSymbols at: languageSymbol)! Item was removed: - ----- Method: Locale class>>localeChanged (in category 'notification') ----- - localeChanged - - #(#ParagraphEditor #BitEditor #FormEditor #StandardSystemController ) - do: [:key | Smalltalk - at: key - ifPresent: [:class | class initialize]]. - PartsBin localeChanged. - Project localeChanged. - PaintBoxMorph localeChanged. - ColorPickerMorph localeChanged. - Preferences localeChanged! Item was removed: - ----- Method: Locale class>>localeChangedGently (in category 'notification') ----- - localeChangedGently - - #(#ParagraphEditor #BitEditor #FormEditor #StandardSystemController ) - do: [:key | Smalltalk - at: key - ifPresent: [:class | class initialize]]. - PartsBin localeChangedGently. - Project localeChangedGently. - PaintBoxMorph localeChangedGently. - ColorPickerMorph localeChangedGently. - Preferences localeChangedGently. - ! Item was removed: - ----- Method: Locale class>>localeChangedListeners (in category 'notification') ----- - localeChangedListeners - ^LocaleChangeListeners ifNil: [LocaleChangeListeners _ OrderedCollection new]! Item was removed: - ----- Method: Locale class>>localeID: (in category 'accessing') ----- - localeID: id - ^self knownLocales at: id ifAbsentPut: [Locale new localeID: id]! Item was removed: - ----- Method: Locale class>>migrateSystem (in category 'private') ----- - migrateSystem - "Locale migrateSystem" - "Do all the necessary operations to switch to the new Locale environment." - - LocaleChangeListeners _ nil. - self - addLocalChangedListener: HandMorph; - addLocalChangedListener: Clipboard; - addLocalChangedListener: Vocabulary; - addLocalChangedListener: PartsBin; - addLocalChangedListener: Project; - addLocalChangedListener: PaintBoxMorph; - yourself! Item was removed: - ----- Method: Locale class>>platformEncodings (in category 'class initialization') ----- - platformEncodings - PlatformEncodings isEmptyOrNil ifTrue: [ self initializePlatformEncodings ]. - ^PlatformEncodings - ! Item was removed: - ----- Method: Locale class>>previous (in category 'accessing') ----- - previous - - ^ Previous - ! Item was removed: - ----- Method: Locale class>>resetKnownLocales (in category 'private') ----- - resetKnownLocales - - KnownLocales := nil - ! Item was removed: - ----- Method: Locale class>>startUp: (in category 'system startUp') ----- - startUp: resuming - | newID | - resuming ifFalse: [^self]. - (Preferences valueOfFlag: #useLocale) - ifTrue: [ - DateAndTime localTimeZone: (TimeZone - offset: (Duration minutes: Locale current offsetLocalToUTC) - name: 'Local Time' - abbreviation: 'LT'). - newID := self current determineLocaleID. - newID ~= LocaleID current - ifTrue: [self switchAndInstallFontToID: newID gently: true]]! Item was removed: - ----- Method: Locale class>>stringForLanguageNameIs: (in category 'accessing') ----- - stringForLanguageNameIs: localeID - "Answer a string for a menu determining whether the given - symbol is the project's natural language" - ^ (self current localeID = localeID - ifTrue: ['<yes>'] - ifFalse: ['<no>']) - , localeID displayName! Item was removed: - ----- Method: Locale class>>switchAndInstallFontToID: (in category 'accessing') ----- - switchAndInstallFontToID: localeID - "Locale switchAndInstallFontToID: (LocaleID isoLanguage: 'de')" - | locale | - locale := Locale localeID: localeID. - locale languageEnvironment isFontAvailable - ifFalse: [(self confirm: 'This language needs additional fonts. - Do you want to install the fonts?' translated) - ifTrue: [locale languageEnvironment installFont] - ifFalse: [^ self]]. - self - switchTo: locale! Item was removed: - ----- Method: Locale class>>switchAndInstallFontToID:gently: (in category 'accessing') ----- - switchAndInstallFontToID: localeID gently: gentlyFlag - - | locale result env envFound ret fontInImage menu | - "Assumption: Rainbow => can try Pango" - "Logic: - - in Sugar, we don't bother asking any questions, and we don't bother automatically loading fonts. - in Sugar, and if the font is available, use the font. - in Sugar, and if the font is not in the image, try to enable Pango. - - if the previous step fails, notify the user that you cannot switch to the language. - - not in Rainbow, - - if the font is in the image, use the font. - - if the font is not in the image, - - ask to choose: - - load font - - try to enable pango, if pango is available - - or cancel. - - if the previous step fails, notify the user that you cannot switch to the language. - Details: - - how to check non-pango font is available: - - if the language environment for the locale doesn't exist, the font is not available. - - if font loading fails, it is not available. - - how to check if the language environment doesn't exist: - - if the locales languageEnvironment is Latin1 but the locale isn't it is not available. - " - locale := Locale localeID: localeID. - env := locale languageEnvironment. - result := true. - envFound := (Latin1Environment supportedLanguages includes: locale isoLanguage) or: [(env isMemberOf: Latin1Environment) not]. - fontInImage := envFound and: [env isFontAvailable]. - SugarLauncher isRunningInSugar ifTrue: [ - fontInImage ifFalse: [ - "font is not available in the image. Even don't ask for font installation." - Cursor wait showWhile: [ - Preferences setPreference: #usePangoRenderer toValue: true. - TextMorph usePango: true]]. - ] ifFalse: [ - fontInImage ifFalse: [ - menu := MenuMorph new. - menu defaultTarget: menu. - envFound ifTrue: [menu add: 'load font' translated selector: #modalSelection: argument: #loadFont]. - RomePluginCanvas pangoIsAvailable ifTrue: [menu add: 'enable Pango' translated selector: #modalSelection: argument: #enablePango]. - menu add: 'cancel' translated selector: #modalSelection: argument: #cancel. - menu addTitle: 'This language needs additional fonts. - Do you want to install the fonts?' translated. - ret := menu invokeModal. - ret = #loadFont ifTrue: [result := env installFont. result ifTrue: [StrikeFont setupDefaultFallbackTextStyle]]. - ret = #enablePango ifTrue: [ - (result := RomePluginCanvas pangoIsAvailable) ifTrue: [ - Cursor wait showWhile: [ - Preferences setPreference: #usePangoRenderer toValue: true. - TextMorph usePango: true]]]. - (ret ~~ #loadFont and: [ret ~~ #enablePango]) ifTrue: [result := false]]]. - - result ifFalse: [self inform: 'Cannot load additional fonts' translated] ifTrue: [self switchTo: locale gently: gentlyFlag]. - ! Item was removed: - ----- Method: Locale class>>switchTo: (in category 'accessing') ----- - switchTo: locale - self switchTo: locale gently: false. - ! Item was removed: - ----- Method: Locale class>>switchTo:gently: (in category 'accessing') ----- - switchTo: locale gently: gentlyFlag - "Locale switchTo: (Locale isoLanguage: 'de')" - | availableID | - availableID := (NaturalLanguageTranslator availableForLocaleID: locale localeID) localeID. - Current localeID = availableID - ifFalse: [Previous _ Current. - CurrentPlatform := Current := Locale localeID: availableID. - NaturalLanguageTranslator localeChanged. - gentlyFlag ifTrue: [self localeChangedGently] ifFalse: [self localeChanged]]! Item was removed: - ----- Method: Locale class>>switchToID: (in category 'accessing') ----- - switchToID: localeID - "Locale switchToID: (LocaleID isoLanguage: 'de') " - - self switchTo: (Locale localeID: localeID)! Item was removed: - ----- Method: Locale>>determineLocale (in category 'accessing') ----- - determineLocale - self localeID: self determineLocaleID! Item was removed: - ----- Method: Locale>>determineLocaleID (in category 'accessing') ----- - determineLocaleID - "Locale current determineLocaleID" - | isoLang isoCountry | - isoLang := self fetchISO2Language - ifNil: [^ self localeID]. - isoCountry := self fetchISOCountry - ifNil: [^ LocaleID isoLanguage: isoLang]. - ^ LocaleID isoLanguage: isoLang isoCountry: isoCountry! Item was removed: - ----- Method: Locale>>fetchISO2Language (in category 'private') ----- - fetchISO2Language - "Locale current fetchISO2Language" - | lang isoLang | - lang := self primLanguage. - lang ifNil: [^nil]. - lang := lang copyUpTo: 0 asCharacter. - lang size == 2 - ifTrue: [^lang]. - isoLang := ISOLanguageDefinition iso3LanguageDefinition: lang. - ^isoLang - ifNil: [nil] - ifNotNil: [isoLang iso2]! Item was removed: - ----- Method: Locale>>fetchISOCountry (in category 'private') ----- - fetchISOCountry - "Locale current fetchISOCountry" - | countryCode | - countryCode := self primCountry - ifNil: [^ nil]. - ^ countryCode copyUpTo: 0 asCharacter! Item was removed: - ----- Method: Locale>>iconForNativeLanguage (in category 'accessing') ----- - iconForNativeLanguage - - ^ (NaturalLanguageFormTranslator localeID: self localeID) translate: 'LanguageNameInNativeLanguage'. - ! Item was removed: - ----- Method: Locale>>isoCountry (in category 'accessing') ----- - isoCountry - ^self localeID isoCountry! Item was removed: - ----- Method: Locale>>isoLanguage (in category 'accessing') ----- - isoLanguage - ^self localeID isoLanguage! Item was removed: - ----- Method: Locale>>isoLocale (in category 'accessing') ----- - isoLocale - "<language>-<country>" - ^self isoCountry - ifNil: [self isoLanguage] - ifNotNil: [self isoLanguage , '-' , self isoCountry]! Item was removed: - ----- Method: Locale>>languageEnvironment (in category 'accessing') ----- - languageEnvironment - ^LanguageEnvironment localeID: self localeID! Item was removed: - ----- Method: Locale>>localeID (in category 'accessing') ----- - localeID - ^id! Item was removed: - ----- Method: Locale>>localeID: (in category 'accessing') ----- - localeID: anID - id := anID! Item was removed: - ----- Method: Locale>>offsetLocalToUTC (in category 'accessing') ----- - offsetLocalToUTC - ^self primTimezone! Item was removed: - ----- Method: Locale>>primCountry (in category 'system primitives') ----- - primCountry - "Returns string with country tag according to ISO 639" - <primitive: 'primitiveCountry' module: 'LocalePlugin'> - ^'US'! Item was removed: - ----- Method: Locale>>primCurrencyNotation (in category 'system primitives') ----- - primCurrencyNotation - "Returns boolean if symbol is pre- (true) or post-fix (false)" - <primitive: 'primitiveCurrencyNotation' module: 'LocalePlugin'> - ^true! Item was removed: - ----- Method: Locale>>primCurrencySymbol (in category 'system primitives') ----- - primCurrencySymbol - "Returns string with currency symbol" - <primitive: 'primitiveCurrencySymbol' module:'LocalePlugin'> - ^'$'! Item was removed: - ----- Method: Locale>>primDST (in category 'system primitives') ----- - primDST - "Returns boolean if DST (daylight saving time) is active or not" - <primitive:'primitiveDaylightSavings' module: 'LocalePlugin'> - ^false! Item was removed: - ----- Method: Locale>>primDecimalSymbol (in category 'system primitives') ----- - primDecimalSymbol - "Returns string with e.g. '.' or ','" - <primitive:'primitiveDecimalSymbol' module: 'LocalePlugin'> - ^'.'! Item was removed: - ----- Method: Locale>>primDigitGrouping (in category 'system primitives') ----- - primDigitGrouping - "Returns string with e.g. '.' or ',' (thousands etc)" - <primitive:'primitiveDigitGroupingSymbol' module: 'LocalePlugin'> - ^','! Item was removed: - ----- Method: Locale>>primLanguage (in category 'system primitives') ----- - primLanguage - "returns string with language tag according to ISO 639" - <primitive:'primitiveLanguage' module: 'LocalePlugin'> - ^'en' - - ! Item was removed: - ----- Method: Locale>>primLongDateFormat (in category 'system primitives') ----- - primLongDateFormat - "Returns the long date format - d day, m month, y year, - double symbol is null padded, single not padded (m=6, mm=06) - dddd weekday - mmmm month name" - <primitive:'primitiveLongDateFormat' module: 'LocalePlugin'> - ^'dddd, mmmm d, yyyy'! Item was removed: - ----- Method: Locale>>primMeasurement (in category 'system primitives') ----- - primMeasurement - "Returns boolean denoting metric(true) or imperial(false)." - <primitive:'primitiveMeasurementMetric' module: 'LocalePlugin'> - ^true - ! Item was removed: - ----- Method: Locale>>primShortDateFormat (in category 'system primitives') ----- - primShortDateFormat - "Returns the short date format - d day, m month, y year, - double symbol is null padded, single not padded (m=6, mm=06) - dddd weekday - mmmm month name" - <primitive:'primitiveShortDateFormat' module: 'LocalePlugin'> - ^'m/d/yy'! Item was removed: - ----- Method: Locale>>primTimeFormat (in category 'system primitives') ----- - primTimeFormat - "Returns string time format - Format is made up of - h hour (h 12, H 24), m minute, s seconds, x (am/pm String) - double symbol is null padded, single not padded (h=6, hh=06)" - <primitive:'primitiveTimeFormat' module: 'LocalePlugin'> - ^'h:mmx'! Item was removed: - ----- Method: Locale>>primTimezone (in category 'system primitives') ----- - primTimezone - "The offset from UTC in minutes, with positive offsets being towards the east. - (San Francisco is in UTC -07*60 and Paris is in UTC +02*60 when daylight savings is in effect)." - <primitive:'primitiveTimezoneOffset' module: 'LocalePlugin'> - ^0! Item was removed: - ----- Method: Locale>>primVMOffsetToUTC (in category 'system primitives') ----- - primVMOffsetToUTC - "Returns the offset in minutes between the VM and UTC. - If the VM does not support UTC times, this is 0. - Also gives us backward compatibility with old VMs as the primitive will fail and we then can return 0." - <primitive:'primitiveVMOffsetToUTC' module: 'LocalePlugin'> - ^0! Item was removed: - ----- Method: Locale>>printOn: (in category 'accessing') ----- - printOn: aStream - super printOn: aStream. - aStream nextPutAll: '(' , id printString , ')'! Item was removed: - Object subclass: #LocaleID - instanceVariableNames: 'isoLanguage isoCountry' - classVariableNames: '' - poolDictionaries: '' - category: 'GetText-Localization'! Item was removed: - ----- Method: LocaleID class>>current (in category 'accessing') ----- - current - ^Locale current localeID! Item was removed: - ----- Method: LocaleID class>>isoLanguage: (in category 'instance creation') ----- - isoLanguage: langString - ^self isoLanguage: langString isoCountry: nil! Item was removed: - ----- Method: LocaleID class>>isoLanguage:isoCountry: (in category 'instance creation') ----- - isoLanguage: langString isoCountry: countryStringOrNil - ^self new isoLanguage: langString isoCountry: countryStringOrNil! Item was removed: - ----- Method: LocaleID class>>isoString: (in category 'instance creation') ----- - isoString: isoString - "Parse the isoString (<language>-<country>) into its components and return the matching LocaleID" - "LocaleID isoString: 'en' " - "LocaleID isoString: 'en-us' " - - | parts language country | - parts := isoString findTokens: #($- ). - language := parts first. - parts size > 1 - ifTrue: [country := parts second]. - ^self isoLanguage: language isoCountry: country! Item was removed: - ----- Method: LocaleID class>>posixName: (in category 'instance creation') ----- - posixName: aString - ^ self - isoString: (aString copyReplaceAll: '_' with: '-')! Item was removed: - ----- Method: LocaleID class>>previous (in category 'accessing') ----- - previous - ^Locale previous localeID! Item was removed: - ----- Method: LocaleID>>= (in category 'comparing') ----- - = anotherObject - self class == anotherObject class - ifFalse: [^false]. - ^self isoLanguage = anotherObject isoLanguage - and: [self isoCountry = anotherObject isoCountry]! Item was removed: - ----- Method: LocaleID>>displayCountry (in category 'accessing') ----- - displayCountry - ^(ISOLanguageDefinition iso2Countries at: self isoCountry asUppercase ifAbsent: [ self isoCountry ]) ! Item was removed: - ----- Method: LocaleID>>displayLanguage (in category 'accessing') ----- - displayLanguage - | language | - language := (ISOLanguageDefinition iso2LanguageTable - at: self isoLanguage - ifAbsent: [^ self isoLanguage]) language. - ^ self isoCountry - ifNil: [language] - ifNotNil: [language , ' (' , self displayCountry , ')']! Item was removed: - ----- Method: LocaleID>>displayName (in category 'accessing') ----- - displayName - "Answer a proper name to represent the receiver in GUI. - - The wording is provided by translations of the magic value - '<language display name>'. - - 'English' -> 'English' - 'German' -> 'Deutsch' - " - | magicPhrase translatedMagicPhrase | - magicPhrase := '<language display name>'. - translatedMagicPhrase := GetTextTranslator translateWithoutLoading: magicPhrase toLocaleID: self. - ^ translatedMagicPhrase = magicPhrase - ifTrue: [self displayLanguage] - ifFalse: [translatedMagicPhrase]! Item was removed: - ----- Method: LocaleID>>hasParent (in category 'testing') ----- - hasParent - ^self isoCountry notNil! Item was removed: - ----- Method: LocaleID>>hash (in category 'comparing') ----- - hash - ^self isoLanguage hash bitXor: self isoCountry hash! Item was removed: - ----- Method: LocaleID>>isoCountry (in category 'accessing') ----- - isoCountry - ^isoCountry! Item was removed: - ----- Method: LocaleID>>isoLanguage (in category 'accessing') ----- - isoLanguage - ^isoLanguage! Item was removed: - ----- Method: LocaleID>>isoLanguage:isoCountry: (in category 'initialize') ----- - isoLanguage: langString isoCountry: countryStringOrNil - isoLanguage := langString. - isoCountry := countryStringOrNil! Item was removed: - ----- Method: LocaleID>>isoString (in category 'accessing') ----- - isoString - ^self asString! Item was removed: - ----- Method: LocaleID>>parent (in category 'accessing') ----- - parent - ^self class isoLanguage: self isoLanguage! Item was removed: - ----- Method: LocaleID>>posixName (in category 'printing') ----- - posixName - "(LocaleID isoString: 'es-MX') posixName" - "(LocaleID isoString: 'es') posixName" - "language[_territory]" - ^ self isoCountry - ifNil: [self isoLanguage] - ifNotNil: [self isoLanguage , '_' , self isoCountry]! Item was removed: - ----- Method: LocaleID>>printOn: (in category 'printing') ----- - printOn: stream - "<language>-<country>" - stream nextPutAll: self isoLanguage. - self isoCountry - ifNotNil: [stream nextPut: $-; nextPutAll: self isoCountry]! Item was removed: - ----- Method: LocaleID>>storeOn: (in category 'printing') ----- - storeOn: aStream - aStream nextPut: $(. - aStream nextPutAll: self class name. - aStream nextPutAll: ' isoString: '. - aStream nextPutAll: '''' , self printString , ''''. - aStream nextPut: $). - ! Item was removed: - ----- Method: LocaleID>>translator (in category 'accessing') ----- - translator - ^ InternalTranslator localeID: self ! Item was changed: ----- Method: MOFile>>fileName: (in category 'public') ----- fileName: path + fileName := path! - fileName _ path! Item was changed: ----- Method: MOFile>>hashPjw: (in category 'experimental') ----- hashPjw: aString "So called `hashpjw' function by P.J. Weinberger [see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools, 1986, 1987 Bell Telephone Laboratories, Inc.] " | stringSize hash g | + stringSize := aString size. + hash := 0. - stringSize _ aString size. - hash _ 0. 1 to: stringSize do: [:pos | + hash := hash bitShift: 4. + hash := hash + ((aString at: pos) asInteger). + g := hash bitAnd: 16rF0000000. - hash _ hash bitShift: 4. - hash _ hash + ((aString at: pos) asInteger). - g _ hash bitAnd: 16rF0000000. g = 0 ifFalse: [ + hash := hash bitXor: (g bitShift: -24). + hash := hash bitXor: g. - hash _ hash bitXor: (g bitShift: -24). - hash _ hash bitXor: g. ] ]. ^hash. ! Item was changed: ----- Method: MOFile>>load1:localeID: (in category 'experimental') ----- load1: aFileName localeID: id "CASE1: all of strings are loaded. translation strings are converted to Squeak format on load time. original-string/index pairs are registerd to Dictionary on load time. hash search can't be used" | strm originalTable translatedTable | + localeID := id. - localeID _ id. strm_ FileStream readOnlyFileNamed: aFileName. + fileName := aFileName. - fileName _ aFileName. [ self loadHeader: strm. + originalTable := self loadStringPointers: strm - originalTable _ self loadStringPointers: strm offset: originalTableOffset. + originalStrings := self loadStrings: strm - originalStrings _ self loadStrings: strm pointers: originalTable. + translatedTable := self loadStringPointers: strm - translatedTable _ self loadStringPointers: strm offset: translatedTableOffset. + translatedStrings := self loadStrings: strm - translatedStrings _ self loadStrings: strm pointers: translatedTable encoding: 'utf8' languageEnvironment: (Locale localeID: localeID) languageEnvironment . + translations := Dictionary new. - translations _ Dictionary new. 1 to: nStrings do: [:index | | key | + key := originalStrings at: index. - key _ originalStrings at: index. translations at: key put: index. ]. + originalTable := nil. - originalTable _ nil. ] ensure: [strm close].! Item was changed: ----- Method: MOFile>>load4:localeID: (in category 'experimental') ----- load4: aFileName localeID: id "CASE4: all of strings are loaded. loading and conversion of translation strings to Squeak format is executed on initialization time. only hash search can be used" | strm originalTable translatedTable | + localeID := id. - localeID _ id. strm_ FileStream readOnlyFileNamed: aFileName. + fileName := aFileName. - fileName _ aFileName. [ self loadHeader: strm. self loadHashTable: strm. + originalTable := self loadStringPointers: strm - originalTable _ self loadStringPointers: strm offset: originalTableOffset. + originalStrings := self loadStrings: strm - originalStrings _ self loadStrings: strm pointers: originalTable. + translatedTable := self loadStringPointers: strm - translatedTable _ self loadStringPointers: strm offset: translatedTableOffset. + translatedStrings := self loadStrings: strm - translatedStrings _ self loadStrings: strm pointers: translatedTable encoding: 'utf-8' languageEnvironment: (Locale localeID: localeID) languageEnvironment . ] ensure: [strm close].! Item was changed: ----- Method: MOFile>>load:localeID: (in category 'public') ----- load: aFileName localeID: id "all of original/translated strings are loaded. but conversion of translation string (in utf-8 bytestring) to Squeak format will be defered. original-string/index pairs are registerd to Dictionary on load time. hash search can't be used" | strm originalTable translatedTable | + localeID := id. - localeID _ id. strm_ FileStream readOnlyFileNamed: aFileName. + fileName := aFileName. - fileName _ aFileName. [ self loadHeader: strm. + originalTable := self loadStringPointers: strm - originalTable _ self loadStringPointers: strm offset: originalTableOffset. + originalStrings := self loadStrings: strm - originalStrings _ self loadStrings: strm pointers: originalTable. + translatedTable := self loadStringPointers: strm - translatedTable _ self loadStringPointers: strm offset: translatedTableOffset. + translatedStrings := self loadStrings: strm - translatedStrings _ self loadStrings: strm pointers: translatedTable. + translations := Dictionary new: nStrings * 2. "make too enough room to avoid #grow" - translations _ Dictionary new: nStrings * 2. "make too enough room to avoid #grow" 1 to: nStrings do: [:index | | key | + key := originalStrings at: index. - key _ originalStrings at: index. translations at: key put: index. ]. + originalStrings := nil. - originalStrings _ nil. ] ensure: [strm close].! Item was changed: ----- Method: MOFile>>loadHashTable: (in category 'experimental') ----- loadHashTable: strm | entry | + hashTable := IntegerArray ofSize: hashTableSize. - hashTable _ IntegerArray ofSize: hashTableSize. strm binary. strm position: hashTableOffset. 1 to: hashTableSize do: [:index | + entry := self nextInt32From: strm. - entry _ self nextInt32From: strm. hashTable at: index put: entry. ]! Item was changed: ----- Method: MOFile>>loadHeader: (in category 'private') ----- loadHeader: strm strm binary. + magic := strm uint32. - magic _ strm uint32. magic = 16rDE120495 + ifTrue: [isLittleEndian := true] - ifTrue: [isLittleEndian _ true] ifFalse: [ magic = 16r950412DE + ifTrue: [isLittleEndian := false] - ifTrue: [isLittleEndian _ false] ifFalse: [ self error: 'invalid MO'] ]. + revision := self nextInt32From: strm. + nStrings := self nextInt32From: strm. + originalTableOffset := self nextInt32From: strm. + translatedTableOffset := self nextInt32From: strm. + hashTableSize := self nextInt32From: strm. + hashTableOffset := self nextInt32From: strm. - revision _ self nextInt32From: strm. - nStrings _ self nextInt32From: strm. - originalTableOffset _ self nextInt32From: strm. - translatedTableOffset _ self nextInt32From: strm. - hashTableSize _ self nextInt32From: strm. - hashTableOffset _ self nextInt32From: strm. ! Item was changed: ----- Method: MOFile>>loadString:pointer:length: (in category 'private') ----- loadString: strm pointer: top length: len | str | + str := ByteString new: len. - str _ ByteString new: len. strm position: top. strm nextInto: str. ^str replaceAll: Lf with: Cr. ! Item was changed: ----- Method: MOFile>>loadStringPointers:offset: (in category 'private') ----- loadStringPointers: strm offset: tableOffset "returns tupple {arrayOfOffsetToString arrayOfLengthOfString}" | offsetTable lenTable len offset tupple | + offsetTable := IntegerArray new: nStrings. + lenTable := IntegerArray new: nStrings. - offsetTable _ IntegerArray new: nStrings. - lenTable _ IntegerArray new: nStrings. strm binary. strm position: tableOffset. 1 to: nStrings do: [:index | + len := self nextInt32From: strm. + offset := self nextInt32From: strm. - len _ self nextInt32From: strm. - offset _ self nextInt32From: strm. offsetTable at: index put: offset. lenTable at: index put: len. ]. + tupple := Array new: 2. - tupple _ Array new: 2. tupple at: 1 put: offsetTable. tupple at: 2 put: lenTable. ^tupple ! Item was changed: ----- Method: MOFile>>loadStrings:pointers:encoding:languageEnvironment: (in category 'private') ----- loadStrings: strm pointers: tupple encoding: encodingName languageEnvironment: env | strings rawStr str offsetTable lenTable | + offsetTable := tupple first. + lenTable := tupple second. + strings := Array new: nStrings. - offsetTable _ tupple first. - lenTable _ tupple second. - strings _ Array new: nStrings. 1 to: nStrings do: [:index | + rawStr := self loadString: strm - rawStr _ self loadString: strm pointer: (offsetTable at: index) length: (lenTable at: index). + str := encodingName isNil ifTrue: [rawStr] - str _ encodingName isNil ifTrue: [rawStr] ifFalse: [ encodingName = 'utf8' ifTrue: [rawStr utf8ToSqueak applyLanguageInfomation: env] ifFalse: [self error: 'this encoding isn''t supported'] ]. strings at: index put: str. ]. ^strings.! Item was changed: ----- Method: MOFile>>searchByDictionary: (in category 'public') ----- searchByDictionary: aString | index | + index := translations at: aString ifAbsent: [^nil]. - index _ translations at: aString ifAbsent: [^nil]. ^self translatedString: index ! Item was changed: ----- Method: MOFile>>searchByHash: (in category 'experimental') ----- searchByHash: aString | hashValue nstr index incr key | + hashValue := self hashPjw: aString. + incr := 1 + (hashValue \\ (hashTableSize -2)). + index := (hashValue \\ hashTableSize) . + [ nstr := (hashTable at: index +1 ). - hashValue _ self hashPjw: aString. - incr _ 1 + (hashValue \\ (hashTableSize -2)). - index _ (hashValue \\ hashTableSize) . - [ nstr _ (hashTable at: index +1 ). nstr = 0 ifTrue: [^nil]. + key := self originalString: nstr. - key _ self originalString: nstr. key = aString ifTrue: [^self translatedString: nstr]. index >= (hashTableSize - incr) + ifTrue: [index := index - (hashTableSize - incr) ] + ifFalse:[index := index + incr]. - ifTrue: [index _ index - (hashTableSize - incr) ] - ifFalse:[index _ index + incr]. ] doWhileTrue: true.! Item was changed: ----- Method: MOFile>>translateByHash: (in category 'experimental') ----- translateByHash: aString | trans | + trans := self searchByHash: aString. - trans _ self searchByHash: aString. trans isNil ifTrue: [^aString] ifFalse: [^trans]. ! Item was changed: ----- Method: MOFile>>translatedString: (in category 'private') ----- translatedString: index "KNOWN PROBLEM: conversion is executed everytimes this method called" | str | + str := translatedStrings at: index. - str _ translatedStrings at: index. ^str utf8ToSqueak applyLanguageInfomation: (Locale localeID: localeID) languageEnvironment. ! Item was removed: - Object subclass: #NaturalLanguageFormTranslator - instanceVariableNames: 'id generics' - classVariableNames: 'CachedTranslations' - poolDictionaries: '' - category: 'GetText-Localization'! Item was removed: - ----- Method: NaturalLanguageFormTranslator class>>bitmapForJapanese (in category 'as yet unclassified') ----- - bitmapForJapanese - - ^ (Form - extent: 54@17 - depth: 16 - fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65536 0 1 65537 65537 65537 65537 0 0 0 0 1 0 0 0 0 65537 65537 1 65537 65537 65536 1 0 0 0 1 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 65536 0 0 65536 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 1 65537 65537 65536 1 0 0 0 1 0 0 65536 0 0 1 0 0 0 1 0 1 65537 65537 65537 65537 65537 65537 0 0 0 1 65537 65537 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 65537 65536 0 0 0 65537 65537 0 65536 1 0 0 0 65536 1 0 0 0 1 65537 65537 65537 65537 0 0 0 1 1 1 0 0 0 0 0 0 65536 1 0 0 0 65536 1 0 0 0 1 0 0 0 1 0 0 0 1 1 1 0 0 0 65537 65537 65537 65537 65537 65537 0 0 65536 1 0 0 0 1 0 0 0 1 0 0 0 65536 1 0 65536 0 0 0 0 0 0 0 0 0 0 65536 1 0 0 0 1 0 0 0 1 0 0 1 0 1 0 1 0 0 65537 65537 1 65537 65537 65536 0 0 65536 1 0 0 0 1 0 0 0 1 0 0 65536 65537 65537 65537 65536 65536 0 65536 1 1 0 0 65536 0 0 65536 0 65536 0 0 1 0 0 0 1 0 1 0 0 1 0 0 1 0 65536 1 1 0 0 65536 0 1 0 0 65536 0 0 1 65537 65537 65537 65537 0 0 0 0 1 0 0 0 0 65537 65537 1 65537 65537 65536 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 65536 0 0 0 65536 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0) - offset: 0@0)! Item was removed: - ----- Method: NaturalLanguageFormTranslator class>>cachedTranslations (in category 'accessing') ----- - cachedTranslations - "CachedTranslations := nil" - ^CachedTranslations ifNil: [CachedTranslations := Dictionary new]! Item was removed: - ----- Method: NaturalLanguageFormTranslator class>>cleanUp (in category 'class initialization') ----- - cleanUp - "Flush caches" - - CachedTranslations := nil! Item was removed: - ----- Method: NaturalLanguageFormTranslator class>>initializeJapaneseBitmap (in category 'as yet unclassified') ----- - initializeJapaneseBitmap - - (self localeID: (LocaleID isoString: 'ja')) name: 'LanguageNameInNativeLanguage' form: self bitmapForJapanese. - ! Item was removed: - ----- Method: NaturalLanguageFormTranslator class>>isoLanguage: (in category 'accessing') ----- - isoLanguage: isoLanguage - "Return the generic language translator as there is no information about the country code" - - ^self isoLanguage: isoLanguage isoCountry: nil! Item was removed: - ----- Method: NaturalLanguageFormTranslator class>>isoLanguage:isoCountry: (in category 'accessing') ----- - isoLanguage: isoLanguage isoCountry: isoCountry - ^self localeID: (LocaleID isoLanguage: isoLanguage isoCountry: isoCountry)! Item was removed: - ----- Method: NaturalLanguageFormTranslator class>>loadFormsFrom: (in category 'i/o') ----- - loadFormsFrom: aStream - - | rr pair inst | - rr _ ReferenceStream on: aStream. - pair _ rr next. - inst _ self localeID: (LocaleID isoString: pair first). - pair second associationsDo: [:assoc | - inst name: assoc key form: assoc value. - ]. - ^ inst. - ! Item was removed: - ----- Method: NaturalLanguageFormTranslator class>>localeID: (in category 'accessing') ----- - localeID: localeID - ^ self cachedTranslations - at: localeID - ifAbsentPut: [self new localeID: localeID]! Item was removed: - ----- Method: NaturalLanguageFormTranslator>>generics (in category 'accessing') ----- - generics - ^generics ifNil: [generics := Dictionary new]! Item was removed: - ----- Method: NaturalLanguageFormTranslator>>localeID (in category 'accessing') ----- - localeID - ^id! Item was removed: - ----- Method: NaturalLanguageFormTranslator>>localeID: (in category 'accessing') ----- - localeID: anID - id := anID! Item was removed: - ----- Method: NaturalLanguageFormTranslator>>name:form: (in category 'accessing') ----- - name: formName form: translatedForm - self generics at: formName put: translatedForm. - ! Item was removed: - ----- Method: NaturalLanguageFormTranslator>>saveFormsOn: (in category 'i/o') ----- - saveFormsOn: aStream - - | rr | - rr _ ReferenceStream on: aStream. - rr nextPut: {id isoString. generics}. - rr close. - ! Item was removed: - ----- Method: NaturalLanguageFormTranslator>>translate: (in category 'utilities') ----- - translate: aString - - ^ (self generics - at: aString ifAbsent: [nil]) deepCopy. - - "Do you like to write 'form ifNotNil: [form deepCopy]'?" - ! Item was removed: - Object subclass: #NaturalLanguageTranslator - instanceVariableNames: 'id' - classVariableNames: 'Translators' - poolDictionaries: '' - category: 'GetText-Localization'! - - !NaturalLanguageTranslator commentStamp: '<historical>' prior: 0! - abstract class of natural language translator. - Class side manages and holds loaded instances of concrete classes.! Item was removed: - ----- Method: NaturalLanguageTranslator class>>availableForLocaleID: (in category 'accessing') ----- - availableForLocaleID: localeID - "Answer available locale ID. - If translator is not found for correct locale ID, then isoLanguage is - attempted for the key." - ^ self translators - at: localeID - ifAbsent: [localeID hasParent - ifTrue: [self translators - at: localeID parent - ifAbsent: [self default]] - ifFalse: [self default]]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>availableLanguageLocaleIDs (in category 'accessing') ----- - availableLanguageLocaleIDs - "Return the locale ids for the currently available languages. - Meaning those which either internally or externally have - translations available." - "NaturalLanguageTranslator availableLanguageLocaleIDs" - ^ self translators values collect:[:each | each localeID]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>cleanUpCache (in category 'private') ----- - cleanUpCache - "NaturalLanguageTranslator cleanUpCache" - - self cachedTranslations keys do: [:key | - key isoLanguage size > 2 ifTrue: [self cachedTranslations removeKey: key]]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>current (in category 'accessing') ----- - current - ^ self availableForLocaleID: LocaleID current! Item was removed: - ----- Method: NaturalLanguageTranslator class>>default (in category 'accessing') ----- - default - "Answer translator for backstop" - "self default translate: 'test'" - ^ self new - localeID: (LocaleID isoLanguage: 'en')! Item was removed: - ----- Method: NaturalLanguageTranslator class>>directoryForLanguage:country:create: (in category 'private loading') ----- - directoryForLanguage: isoLanguage country: isoCountry create: createDir - "Try to locate the <prefs>/locale/<language>{/<country>} folder. - If createDir is set, create the path down to country or language, depending on wether it's specified.. - Return the directory for country or language depending on specification. - If neither exists, nil" - - "NaturalLanguageTranslator directoryForLanguage: 'es' country: nil create: true" - "NaturalLanguageTranslator directoryForLanguage: 'de' country: 'DE' create: true" - "NaturalLanguageTranslator directoryForLanguage: 'en' country: 'US' create: false" - "NaturalLanguageTranslator directoryForLanguage: 'en' country: nil create: true" - - "If this fails, there is nothing we can do about it here" - | localeDir countryDir languageDir | - localeDir := self localeDirCreate: createDir. - localeDir ifNil: [^nil]. - - isoCountry ifNil: [ - languageDir := localeDir directoryNamed: isoLanguage. - createDir - ifTrue: [languageDir assureExistence]. - ^languageDir exists - ifTrue: [languageDir] - ifFalse: [nil]]. - - countryDir := languageDir directoryNamed: isoCountry. - createDir - ifTrue: [countryDir assureExistence]. - - ^countryDir exists - ifTrue: [countryDir] - ifFalse: [nil]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>directoryForLocaleID:create: (in category 'private loading') ----- - directoryForLocaleID: localeID create: createDir - "Try to locate the <prefs>/locale/<language>{/<country>} folder. - If createDir is set, create the path down to country or language, depending on locale. - Return the directory for country or language depending on locale. - If neither exists, nil" - - "NaturalLanguageTranslator directoryForLanguage: 'de' country: nil readOnly: true" - "NaturalLanguageTranslator directoryForLanguage: 'de' country: 'DE' readOnly: true" - "NaturalLanguageTranslator directoryForLanguage: 'en' country: 'US' readOnly: false" - "NaturalLanguageTranslator directoryForLanguage: 'en' country: nil readOnly: true" - - ^self directoryForLanguage: localeID isoLanguage country: localeID isoCountry create: createDir! Item was removed: - ----- Method: NaturalLanguageTranslator class>>domainRegistered: (in category 'accessing') ----- - domainRegistered: aDomainName - "notify that new TextDomain is registered" - self translators do: [:each | each domainRegistered: aDomainName]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>domainUnregistered: (in category 'accessing') ----- - domainUnregistered: aDomainName - "notify that new TextDomain is unregistered" - self translators do: [:each | each domainUnregistered: aDomainName]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>fileReaderServicesForFile:suffix: (in category 'file-services') ----- - fileReaderServicesForFile: fullName suffix: suffix - "Answer the file services associated with given file" - ^ (suffix = self translationSuffix) | (suffix = '*') - ifTrue: [{self serviceMergeLanguageTranslations}] - ifFalse: [#()]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>initialize (in category 'class initialization') ----- - initialize - Smalltalk addToStartUpList: NaturalLanguageTranslator after: FileDirectory. - ! Item was removed: - ----- Method: NaturalLanguageTranslator class>>isoLanguage: (in category 'accessing') ----- - isoLanguage: isoLanguage - "Return the generic language translator as there is no information about the country code" - - ^self isoLanguage: isoLanguage isoCountry: nil! Item was removed: - ----- Method: NaturalLanguageTranslator class>>isoLanguage:isoCountry: (in category 'accessing') ----- - isoLanguage: isoLanguage isoCountry: isoCountry - ^self localeID: (LocaleID isoLanguage: isoLanguage isoCountry: isoCountry)! Item was removed: - ----- Method: NaturalLanguageTranslator class>>loadAvailableExternalLocales (in category 'private loading') ----- - loadAvailableExternalLocales - "private - register locales IDs based on the content of the <prefs>/locale/ directory" - | localeDir | - localeDir := self localeDirCreate: false. - localeDir ifNil: [^ #()]. - localeDir directoryNames - do: [:langDirName | - | langDir | - langDir := localeDir directoryNamed: langDirName. - (langDir fileNamesMatching: '*.' , self translationSuffix) - ifNotEmpty: [self loadTranslatorForIsoLanguage: langDirName isoCountry: nil]. - langDir directoryNames - do: [:countryDirName | - | countryDir | - countryDir := langDir directoryNamed: countryDirName. - (countryDir fileNamesMatching: '*.' , self translationSuffix) - ifNotEmpty: [self loadTranslatorForIsoLanguage: langDirName isoCountry: countryDirName] - ] - ]. - ! Item was removed: - ----- Method: NaturalLanguageTranslator class>>loadAvailableLocales (in category 'private loading') ----- - loadAvailableLocales - "This loads the default locale and all external locales" - - | defaultID | - defaultID := LocaleID current. - self cachedTranslations at: defaultID ifAbsent: [self localeID: defaultID]. - self loadAvailableExternalLocales.! Item was removed: - ----- Method: NaturalLanguageTranslator class>>loadExternalTranslationsFor: (in category 'private loading') ----- - loadExternalTranslationsFor: translator - "Try to load translations from external external files. - The files are located in the <prefs>/locale/<language>{/<country>} folder. - There can be more than one file for each location, so applications can install their own partial translation tables. All files in the specific folder are loaded." - - | translationDir | - translationDir := self directoryForLocaleID: translator localeID create: false. - translationDir ifNil: [ ^nil ]. - (translationDir fileNamesMatching: '*.' , self translationSuffix) - do: [:fileName | translator loadFromFileNamed: (translationDir fullNameFor: fileName)]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>loadForLocaleIsoString:fromGzippedMimeLiteral: (in category 'file-services') ----- - loadForLocaleIsoString: localeString fromGzippedMimeLiteral: mimeString - "merge the translation from the mime literal." - | stream localeID translator gs rbStream s currentPlatform | - s := Base64MimeConverter mimeDecodeToBytes: mimeString readStream. - s reset. - gs := GZipReadStream on: s. - rbStream := MultiByteBinaryOrTextStream with: gs contents asString. - rbStream converter: UTF8TextConverter new. - rbStream reset. - localeID := LocaleID isoString: localeString. - currentPlatform := Locale currentPlatform. - [Locale - currentPlatform: (Locale localeID: localeID). - stream := ReadStream on: rbStream contents] - ensure: [Locale currentPlatform: currentPlatform]. - translator := self localeID: localeID. - translator loadFromStream: stream. - LanguageEnvironment resetKnownEnvironments! Item was removed: - ----- Method: NaturalLanguageTranslator class>>loadTranslatorForIsoLanguage:isoCountry: (in category 'private loading') ----- - loadTranslatorForIsoLanguage: isoLanguage isoCountry: isoCountry - "private - load the translations from <prefs>/locale/ directory - the procedure is to assure the existence of a translator for the - given language/country and then load the external translations for this translator" - - | translator | - translator := self localeID: (LocaleID isoLanguage: isoLanguage isoCountry: isoCountry). - - self loadExternalTranslationsFor: translator! Item was removed: - ----- Method: NaturalLanguageTranslator class>>localeChanged (in category 'accessing') ----- - localeChanged - "notify some project starts to use this locale. - this facility may use the event to load translation data dynamically" - self current setCurrent - ! Item was removed: - ----- Method: NaturalLanguageTranslator class>>localeDirCreate: (in category 'private loading') ----- - localeDirCreate: createDir - "Try to locate the <prefs>/locale/ folder. - If createDir is set, try to create the path. - If it doesn't exist, return nil" - - "If this fails, there is nothing we can do about it here" - | prefDir localeDir | - (createDir not - and: [ExternalSettings preferenceDirectory isNil]) - ifTrue: [^ nil]. - - prefDir := ExternalSettings assuredPreferenceDirectory. - prefDir exists - ifFalse: [^nil]. - - - localeDir := prefDir directoryNamed: 'locale'. - createDir - ifTrue: [localeDir assureExistence]. - ^localeDir exists - ifTrue: [localeDir] - ifFalse: [nil]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>localeID: (in category 'accessing') ----- - localeID: localeID - ^ self cachedTranslations - at: localeID - ifAbsentPut: [self new localeID: localeID]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>mergeTranslationFileNamed: (in category 'file-services') ----- - mergeTranslationFileNamed: fileFullNameString - "merge the translation in the file named fileFullNameString" - - FileStream readOnlyFileNamed: fileFullNameString do: [:stream | - | localeID translator | - localeID := LocaleID isoString: stream localName sansPeriodSuffix. - translator := self localeID: localeID. - translator loadFromStream: stream]. - LanguageEnvironment resetKnownEnvironments. - - ! Item was removed: - ----- Method: NaturalLanguageTranslator class>>privateStartUp (in category 'class initialization') ----- - privateStartUp - self resetCaches. - GetTextTranslator privateStartUp. - InternalTranslator privateStartUp. - self localeChanged.! Item was removed: - ----- Method: NaturalLanguageTranslator class>>registerPhrase: (in category 'private') ----- - registerPhrase: phrase - "Using a Dictionary so we can lookup existing string instead of creating needless copies when loading a translation." - self allKnownPhrases at: phrase put: phrase! Item was removed: - ----- Method: NaturalLanguageTranslator class>>registeredPhraseFor: (in category 'private') ----- - registeredPhraseFor: phrase - "Using a Dictionary so we can lookup existing string instead of creating needless copies when loading a translation." - ^self allKnownPhrases at: phrase ifAbsentPut: [phrase]! Item was removed: - ----- Method: NaturalLanguageTranslator class>>removeLocaleID: (in category 'accessing') ----- - removeLocaleID: localeID - "self removeLocaleID: (LocaleID isoString: 'ja-kids')" - ^ self translators - removeKey: localeID - ifAbsent: []! Item was removed: - ----- Method: NaturalLanguageTranslator class>>resetCaches (in category 'class initialization') ----- - resetCaches - Translators := nil.! Item was removed: - ----- Method: NaturalLanguageTranslator class>>serviceMergeLanguageTranslations (in category 'file-services') ----- - serviceMergeLanguageTranslations - "Answer a service for merging of translation files" - ^ SimpleServiceEntry - provider: self - label: 'merge the translation file' - selector: #mergeTranslationFileNamed: - description: 'merge the translation file into the language named like the file' - buttonLabel: 'merge'! Item was removed: - ----- Method: NaturalLanguageTranslator class>>services (in category 'file-services') ----- - services - "Answer potential file services associated with this class" - ^ {self serviceMergeLanguageTranslations}! Item was removed: - ----- Method: NaturalLanguageTranslator class>>startUp: (in category 'class initialization') ----- - startUp: resuming - resuming - ifFalse: [^ self]. - self privateStartUp.! Item was removed: - ----- Method: NaturalLanguageTranslator class>>translate:toLocaleID: (in category 'translation') ----- - translate: aString toLocaleID: localeID - "translate for default domain" - ^ (self availableForLocaleID: localeID) - translate: aString! Item was removed: - ----- Method: NaturalLanguageTranslator class>>translate:toLocaleID:inDomain: (in category 'translation') ----- - translate: aString toLocaleID: localeID inDomain: aDomainName - ^ (self availableForLocaleID: localeID) - translate: aString inDomain: aDomainName! Item was removed: - ----- Method: NaturalLanguageTranslator class>>translateWithoutLoading:toLocaleID: (in category 'translation') ----- - translateWithoutLoading: aString toLocaleID: localeID - "translate for default domain" - ^self translateWithoutLoading: aString toLocaleID: localeID inDomain: TextDomainManager defaultDomain. - ! Item was removed: - ----- Method: NaturalLanguageTranslator class>>translateWithoutLoading:toLocaleID:inDomain: (in category 'translation') ----- - translateWithoutLoading: aString toLocaleID: localeID inDomain: aDomainName - "try to translate with small footprint: - if GetTextTranslator hasn't loaded MO, try to use InternalTranslator. - if InternalTranslator isn't available, then actually load MO and use it" - | translator | - translator _ self availableForLocaleID: localeID. - (translator isDomainLoaded: aDomainName) ifFalse: [ - (InternalTranslator availableLanguageLocaleIDs includes: localeID) - ifTrue: [translator _ InternalTranslator localeID: localeID]. - ]. - ^translator translate: aString inDomain: aDomainName! Item was removed: - ----- Method: NaturalLanguageTranslator class>>translationSuffix (in category 'private') ----- - translationSuffix - ^'translation'! Item was removed: - ----- Method: NaturalLanguageTranslator class>>translators (in category 'accessing') ----- - translators - ^ Translators ifNil: [Translators := Dictionary new] ! Item was removed: - ----- Method: NaturalLanguageTranslator>>atRandom (in category 'accessing') ----- - atRandom - - self subclassResponsibility. - ! Item was removed: - ----- Method: NaturalLanguageTranslator>>checkPhrase:translation: (in category 'translation') ----- - checkPhrase: phrase translation: translation! Item was removed: - ----- Method: NaturalLanguageTranslator>>defaultBackgroundColor (in category 'user interface') ----- - defaultBackgroundColor - "answer the receiver's defaultBackgroundColor for views" - ^ Color cyan! Item was removed: - ----- Method: NaturalLanguageTranslator>>displayLanguage (in category 'accessing') ----- - displayLanguage - ^ id displayLanguage! Item was removed: - ----- Method: NaturalLanguageTranslator>>displayName (in category 'accessing') ----- - displayName - ^ id displayName! Item was removed: - ----- Method: NaturalLanguageTranslator>>domainRegistered: (in category 'accessing') ----- - domainRegistered: aDomainName - "notify that new TextDomain is registered. Concrete subclass can responds to this event if needed"! Item was removed: - ----- Method: NaturalLanguageTranslator>>domainUnregistered: (in category 'accessing') ----- - domainUnregistered: aDomainName - "notify that new TextDomain is unregistered. Concrete subclass can responds to this event if needed"! Item was removed: - ----- Method: NaturalLanguageTranslator>>fileOutHeader (in category 'fileIn/fileOut') ----- - fileOutHeader - ^ '''Translation dictionary'''! Item was removed: - ----- Method: NaturalLanguageTranslator>>fileOutHeaderOn: (in category 'fileIn/fileOut') ----- - fileOutHeaderOn: aStream - aStream nextChunkPut: self fileOutHeader; - cr. - aStream timeStamp; cr. - aStream nextPut: $!!. - aStream nextChunkPut: '(' , self class name , ' localeID: ' , id storeString , ')'. - aStream cr! Item was removed: - ----- Method: NaturalLanguageTranslator>>fileOutOn: (in category 'fileIn/fileOut') ----- - fileOutOn: aStream - "self current fileOutOn: Transcript. Transcript endEntry" - self fileOutHeaderOn: aStream. - self fileOutOn: aStream keys: nil! Item was removed: - ----- Method: NaturalLanguageTranslator>>fileOutOn:keys: (in category 'fileIn/fileOut') ----- - fileOutOn: aStream keys: keys - "self current fileOutOn: Transcript. Transcript endEntry" - (keys - ifNil: [generics keys asArray sort]) - do: [:key | self - nextChunkPut: (generics associationAt: key) - on: aStream]. - keys - ifNil: [self untranslated - do: [:each | self nextChunkPut: each -> '' on: aStream]]. - aStream nextPut: $!!; - cr! Item was removed: - ----- Method: NaturalLanguageTranslator>>generics (in category 'private') ----- - generics - ^generics ifNil: [generics := Dictionary new]! Item was removed: - ----- Method: NaturalLanguageTranslator>>isDomainLoaded: (in category 'accessing') ----- - isDomainLoaded: aDomainName - "ask if translation dictionary for the domain has been loaded and available now for use" - self subclassResponsibility.! Item was removed: - ----- Method: NaturalLanguageTranslator>>isoCountry (in category 'accessing') ----- - isoCountry - ^self localeID isoCountry! Item was removed: - ----- Method: NaturalLanguageTranslator>>isoLanguage (in category 'accessing') ----- - isoLanguage - ^self localeID isoLanguage! Item was removed: - ----- Method: NaturalLanguageTranslator>>loadFromFileNamed: (in category 'private store-retrieve') ----- - loadFromFileNamed: fileNameString - "Load translations from an external file" - - FileStream readOnlyFileNamed: fileNameString do: [ :file | - self loadFromStream: file ]. - self changed: #translations. - self changed: #untranslated. - ! Item was removed: - ----- Method: NaturalLanguageTranslator>>loadFromRefStream: (in category 'private store-retrieve') ----- - loadFromRefStream: stream - "Load translations from an external file" - | loadedArray refStream | - refStream := ReferenceStream on: stream. - [loadedArray := refStream next] - ensure: [refStream close]. - self processExternalObject: loadedArray ! Item was removed: - ----- Method: NaturalLanguageTranslator>>loadFromStream: (in category 'private store-retrieve') ----- - loadFromStream: stream - "Load translations from an external file" - | header isFileIn | - header := '''Translation dictionary'''. - isFileIn := (stream next: header size) - = header. - stream reset. - isFileIn - ifTrue: [stream fileInAnnouncing: 'Loading ' translated, stream localName] - ifFalse: [self loadFromRefStream: stream]! Item was removed: - ----- Method: NaturalLanguageTranslator>>localeID (in category 'accessing') ----- - localeID - ^id! Item was removed: - ----- Method: NaturalLanguageTranslator>>localeID: (in category 'initialize-release') ----- - localeID: anID - id := anID! Item was removed: - ----- Method: NaturalLanguageTranslator>>mergeTranslations: (in category 'private store-retrieve') ----- - mergeTranslations: newTranslations - "Merge a new set of translations into the exiting table. - Overwrites existing entries." - - newTranslations keysAndValuesDo: [:key :value | - self rawPhrase: (self class registeredPhraseFor: key) translation: value]. - self changed: #translations. - self changed: #untranslated.! Item was removed: - ----- Method: NaturalLanguageTranslator>>nextChunkPut:on: (in category 'fileIn/fileOut') ----- - nextChunkPut: anObject on: aStream - | i remainder terminator | - terminator := $!!. - remainder := anObject storeString. - [(i := remainder indexOf: terminator) = 0] - whileFalse: [aStream - nextPutAll: (remainder copyFrom: 1 to: i). - aStream nextPut: terminator. - "double imbedded terminators" - remainder := remainder copyFrom: i + 1 to: remainder size]. - aStream nextPutAll: remainder. - aStream nextPut: terminator; cr.! Item was removed: - ----- Method: NaturalLanguageTranslator>>phrase:translation: (in category 'translation') ----- - phrase: phraseString translation: translationString - self generics at: phraseString put: translationString asString. - self changed: #translations. - self changed: #untranslated.! Item was removed: - ----- Method: NaturalLanguageTranslator>>printOn: (in category 'printing') ----- - printOn: aStream - aStream nextPutAll: self class name; nextPut: $(; print: self localeID; nextPut: $)! Item was removed: - ----- Method: NaturalLanguageTranslator>>processExternalObject: (in category 'private store-retrieve') ----- - processExternalObject: anArray - "pivate - process the external object" - - "new format -> {translations. untranslated}" - - anArray second do: [:each | self class registerPhrase: each]. - - self mergeTranslations: anArray first! Item was removed: - ----- Method: NaturalLanguageTranslator>>rawPhrase:translation: (in category 'translation') ----- - rawPhrase: phraseString translation: translationString - self generics at: phraseString put: translationString asString. - ! Item was removed: - ----- Method: NaturalLanguageTranslator>>rawRemoveUntranslated: (in category 'translation') ----- - rawRemoveUntranslated: untranslated - - self class allKnownPhrases removeKey: untranslated ifAbsent: []. - self changed: #untranslated.! Item was removed: - ----- Method: NaturalLanguageTranslator>>removeTranslationFor: (in category 'translation') ----- - removeTranslationFor: phraseString - self generics removeKey: phraseString ifAbsent: []. - self changed: #translations. - self changed: #untranslated.! Item was removed: - ----- Method: NaturalLanguageTranslator>>removeUntranslated: (in category 'translation') ----- - removeUntranslated: untranslated - - self class allKnownPhrases removeKey: untranslated ifAbsent: []. - ! Item was removed: - ----- Method: NaturalLanguageTranslator>>saveToFileNamed: (in category 'private store-retrieve') ----- - saveToFileNamed: fileNameString - "save the receiver's translations to a file named fileNameString" - | stream | - "Set true if you need to save as binary" - false - ifTrue: [stream := ReferenceStream fileNamed: fileNameString. - stream nextPut: {self translations. self untranslated}. - stream close. - ^ self]. - stream := FileStream fileNamed: fileNameString. - [self fileOutOn: stream] - ensure: [stream close]! Item was removed: - ----- Method: NaturalLanguageTranslator>>scanFrom: (in category 'fileIn/fileOut') ----- - scanFrom: aStream - "Read a definition of dictionary. - Make sure current locale corresponds my locale id" - | newTranslations currentPlatform | - newTranslations := Dictionary new. - currentPlatform := Locale currentPlatform. - [ | aString assoc | - Locale - currentPlatform: (Locale localeID: id). - [aString := aStream nextChunk withSqueakLineEndings. - aString size > 0] - whileTrue: [assoc := Compiler evaluate: aString. - assoc value = '' - ifTrue: [self class registerPhrase: assoc key] - ifFalse: [newTranslations add: assoc]]] - ensure: [Locale currentPlatform: currentPlatform]. - self mergeTranslations: newTranslations! Item was removed: - ----- Method: NaturalLanguageTranslator>>setCurrent (in category 'language switching') ----- - setCurrent - "notify locale of the translator become current" - ! Item was removed: - ----- Method: NaturalLanguageTranslator>>translate: (in category 'translation') ----- - translate: aString - ^self translate: aString - inDomain: TextDomainManager defaultDomain! Item was removed: - ----- Method: NaturalLanguageTranslator>>translate:in: (in category 'translation') ----- - translate: aString in: aContext! Item was removed: - ----- Method: NaturalLanguageTranslator>>translate:inDomain: (in category 'translation') ----- - translate: aString inDomain: aDomainName - ^ aString! Item was removed: - ----- Method: NaturalLanguageTranslator>>translationFor: (in category 'translation') ----- - translationFor: aString - ^self translate: aString! Item was removed: - ----- Method: NaturalLanguageTranslator>>translations (in category 'accessing') ----- - translations - ^self generics! Item was removed: - ----- Method: NaturalLanguageTranslator>>untranslated (in category 'accessing') ----- - untranslated - | translations | - translations := self translations. - ^self class allKnownPhrases reject: [:each | translations includesKey: each]! Item was removed: - ----- Method: NaturalLanguageTranslator>>writeAsMimeString (in category 'fileIn/fileOut') ----- - writeAsMimeString - - | fileName fileStream tmpStream s2 gzs | - tmpStream := MultiByteBinaryOrTextStream on: ''. - tmpStream converter: UTF8TextConverter new. - self fileOutOn: tmpStream. - s2 := RWBinaryOrTextStream on: ''. - gzs := GZipWriteStream on: s2. - tmpStream reset. - gzs nextPutAll: (tmpStream binary contentsOfEntireFile asString) contents. - gzs close. - s2 reset. - - fileName := id isoString, '.translation.gz.mime'. - fileStream := FileStream newFileNamed: fileName. - fileStream nextPutAll: (Base64MimeConverter mimeEncode: s2) contents. - fileStream close. - ! Item was changed: ----- Method: TranslatedReceiverFinder>>stringReceiversWithContext (in category 'accessing') ----- stringReceiversWithContext | mrs results rr cls mn t o | + mrs := SystemNavigation default allCallsOn: #translated. + results := OrderedCollection new. - mrs _ SystemNavigation default allCallsOn: #translated. - results _ OrderedCollection new. mrs do: [:mr | + rr := OrderedCollection new. + cls := Smalltalk at: mr classSymbol. - rr _ OrderedCollection new. - cls _ Smalltalk at: mr classSymbol. rr add: cls category. rr add: mr classSymbol. rr add: mr methodSymbol. mr classIsMeta ifTrue: [ + mn := cls class decompile: mr methodSymbol. - mn _ cls class decompile: mr methodSymbol. ] ifFalse: [ + mn := cls decompile: mr methodSymbol. - mn _ cls decompile: mr methodSymbol. ]. + o := OrderedCollection new. + t := Set new. - o _ OrderedCollection new. - t _ Set new. self searchMessageNode: mn addTo: t. t do: [ :te | (te receiver isMemberOf: LiteralNode) ifTrue: [ o add: te receiver key. ]. ]. o ifNotEmpty: [ rr add: o. results add: rr. ]. ]. ^ results. ! Item was changed: ----- Method: TranslatedReceiverFinder>>stringReceiversWithContext: (in category 'accessing') ----- stringReceiversWithContext: aSymbol "Find string receivers for a symbol. Answer a collection of aMethodReference -> {keyword. keyword...}" "self new stringReceiversWithContext: #translated" | keywords methodReferences | + methodReferences := SystemNavigation default allCallsOn: aSymbol. - methodReferences _ SystemNavigation default allCallsOn: aSymbol. ^ methodReferences inject: OrderedCollection new into: [:list :next | keywords := self findWordsWith: aSymbol in: next. keywords ifNotEmpty: [list add: next -> keywords]. list] !
1
0
0
0
The Trunk: System-edc.474.mcz
by commits@source.squeak.org
29 Mar '12
29 Mar '12
Edgar J. De Cleene uploaded a new version of System to project The Trunk:
http://source.squeak.org/trunk/System-edc.474.mcz
==================== Summary ==================== Name: System-edc.474 Author: edc Time: 29 March 2012, 7:56:22.086 am UUID: 50ce2068-fc68-4a19-9f8c-9334c1a501f4 Ancestors: System-bf.473 {InternalTranslator ISOLanguageDefinition Locale LocaleID NaturalLanguageFormTranslator NaturalLanguageTranslator} Moved back to System-Localization =============== Diff against System-bf.473 =============== Item was added: + Object subclass: #ISOLanguageDefinition + instanceVariableNames: 'iso3 iso2 iso3Alternate language' + classVariableNames: 'ISO2Countries ISO2Table ISO3Countries ISO3Table' + poolDictionaries: '' + category: 'System-Localization'! Item was added: + ----- Method: ISOLanguageDefinition class>>buildIso3166CodesTables (in category 'private') ----- + buildIso3166CodesTables + "ISOLanguageDefinition buildIso3166CodesTables" + | rawdata stream country isoa2 isoa3 unNumeric macName macCode windowsName windowsCode empty table | + rawdata := self iso3166Codes. + table := OrderedCollection new: 200. + stream := rawdata readStream. + empty := 160 asCharacter asString. + [stream atEnd] whileFalse: + [country := stream nextLine. + isoa2 := stream nextLine. + isoa3 := stream nextLine. + unNumeric := stream nextLine. + windowsName := stream nextLine. + windowsName = empty ifTrue: [windowsName := nil]. + windowsCode := stream nextLine. + windowsCode = empty ifTrue: [windowsCode := nil]. + macName := stream nextLine. + macName = empty ifTrue: [macName := nil]. + macCode := stream nextLine. + macCode = empty ifTrue: [macCode := nil]. + table add: { country. isoa2. isoa3. unNumeric. windowsName. windowsCode. macName. macCode. }]. + ^table! Item was added: + ----- Method: ISOLanguageDefinition class>>extraCountryDefinitions (in category 'private') ----- + extraCountryDefinitions + ^{ + {'Kids'. 'KIDS'. 'KIDS'.}. + }! Item was added: + ----- Method: ISOLanguageDefinition class>>extraISO3Definitions (in category 'private') ----- + extraISO3Definitions + + ^self readISOLanguagesFrom: 'jpk Japanese (Kids) + ' readStream! Item was added: + ----- Method: ISOLanguageDefinition class>>initISO3LanguageTable (in category 'private') ----- + initISO3LanguageTable + "ISOLanguageDefinition initIso3LanguageTable" + + | table | + table := ISOLanguageDefinition readISOLanguagesFrom: ISOLanguageDefinition isoLanguages readStream. + table addAll: self extraISO3Definitions. + ^table! Item was added: + ----- Method: ISOLanguageDefinition class>>initISOCountries (in category 'private') ----- + initISOCountries + "ISOLanguageDefinition initISOCountries" + | iso3166Table | + iso3166Table := ISOLanguageDefinition buildIso3166CodesTables. + ISO2Countries := Dictionary new. + ISO3Countries := Dictionary new. + iso3166Table do: [:entry | + ISO2Countries at: (entry at: 2) put: (entry at: 1). + ISO3Countries at: (entry at: 3) put: (entry at: 1)]. + self extraCountryDefinitions do: [:entry | + ISO2Countries at: (entry at: 2) put: (entry at: 1). + ISO3Countries at: (entry at: 3) put: (entry at: 1)]! Item was added: + ----- Method: ISOLanguageDefinition class>>initialize (in category 'class initialization') ----- + initialize + "ISOLanguageDefinition initialize" + + ISO3Table := nil. + ISO2Table := nil! Item was added: + ----- Method: ISOLanguageDefinition class>>iso2Countries (in category 'private') ----- + iso2Countries + "ISOLanguageDefinition iso2Countries" + "ISO2Countries := nil. ISO3Countries := nil" + + ISO2Countries ifNil: [self initISOCountries]. + ^ISO2Countries! Item was added: + ----- Method: ISOLanguageDefinition class>>iso2LanguageDefinition: (in category 'accessing') ----- + iso2LanguageDefinition: aString + ^self iso2LanguageTable at: aString! Item was added: + ----- Method: ISOLanguageDefinition class>>iso2LanguageTable (in category 'private') ----- + iso2LanguageTable + "ISOLanguageDefinition iso2LanguageTable" + + ISO2Table ifNotNil: [^ISO2Table]. + ISO2Table := Dictionary new: self iso3LanguageTable basicSize. + self iso3LanguageTable do: [:entry | + ISO2Table at: entry iso2 put: entry]. + ^ISO2Table! Item was added: + ----- Method: ISOLanguageDefinition class>>iso3166Codes (in category 'private') ----- + iso3166Codes + "
http://www.unicode.org/onlinedat/countries.html
" + + ^'LAND ISLANDS + AX + + + + + + + AFGHANISTAN + AF + AFG + 004 + + + + + ALBANIA + AL + ALB + 008 + CTRY_ALBANIA + 355 + + + ALGERIA + DZ + DZA + 012 + CTRY_ALGERIA + 213 + verArabic + 16 + AMERICAN SAMOA + AS + ASM + 016 + + + + + ANDORRA + AD + AND + 020 + + + + + ANGOLA + AO + AGO + 024 + + + + + ANGUILLA + AI + AIA + 660 + + + + + ANTARCTICA + AQ + ATA + 010 + + + + + ANTIGUA AND BARBUDA + AG + ATG + 028 + + + + + ARGENTINA + AR + ARG + 032 + CTRY_ARGENTINA + 54 + + + ARMENIA + AM + ARM + 051 + CTRY_ARMENIA + 374 + verArmenian + 84 + ARUBA + AW + ABW + 533 + + + + + AUSTRALIA + AU + AUS + 036 + CTRY_AUSTRALIA + 61 + verAustralia + 15 + AUSTRIA + AT + AUT + 040 + CTRY_AUSTRIA + 43 + verAustria + 92 + AZERBAIJAN + AZ + AZE + 031 + CTRY_AZERBAIJAN + 994 + + + BAHAMAS + BS + BHS + 044 + + + + + BAHRAIN + BH + BHR + 048 + CTRY_BAHRAIN + 973 + + + BANGLADESH + BD + BGD + 050 + + + verBengali + 60 + BARBADOS + BB + BRB + 052 + + + + + BELARUS + BY + BLR + 112 + CTRY_BELARUS + 375 + + + BELGIUM + BE + BEL + 056 + CTRY_BELGIUM + 32 + verFrBelgium, verFlemish + 98 + BELIZE + BZ + BLZ + 084 + CTRY_BELIZE + 501 + + + BENIN + BJ + BEN + 204 + + + + + BERMUDA + BM + BMU + 060 + + + + + BHUTAN + BT + BTN + 064 + + + verBhutan + 83 + BOLIVIA + BO + BOL + 068 + CTRY_BOLIVIA + 591 + + + BOSNIA AND HERZEGOVINA + BA + BIH + 070 + + + + + BOTSWANA + BW + BWA + 072 + + + + + BOUVET ISLAND + BV + BVT + 074 + + + + + BRAZIL + BR + BRA + 076 + CTRY_BRAZIL + 55 + verBrazil + 71 + BRITISH INDIAN OCEAN TERRITORY + IO + IOT + 086 + + + + + BRUNEI DARUSSALAM + BN + BRN + 096 + CTRY_BRUNEI_DARUSSALAM + 673 + + + BULGARIA + BG + BGR + 100 + CTRY_BULGARIA + 359 + verBulgaria + 72 + BURKINA FASO + BF + BFA + 854 + + + + + BURUNDI + BI + BDI + 108 + + + + + CAMBODIA + KH + KHM + 116 + + + + + CAMEROON + CM + CMR + 120 + + + + + CANADA + CA + CAN + 124 + CTRY_CANADA + 2 + verFrCanada, verEndCanada + 82 + CAPE VERDE + CV + CPV + 132 + + + + + CAYMAN ISLANDS + KY + CYM + 136 + + + + + CENTRAL AFRICAN REPUBLIC + CF + CAF + 140 + + + + + CHAD + TD + TCD + 148 + + + + + CHILE + CL + CHL + 152 + CTRY_CHILE + 56 + + + CHINA + CN + CHN + 156 + CTRY_PRCHINA + 86 + verChina + 52 + CHRISTMAS ISLAND + CX + CXR + 162 + + + + + COCOS (KEELING) ISLANDS + CC + CCK + 166 + + + + + COLOMBIA + CO + COL + 170 + CTRY_COLOMBIA + 57 + + + COMOROS + KM + COM + 174 + + + + + CONGO + CG + COG + 178 + + + + + CONGO, THE DEMOCRATIC REPUBLIC OF THE + CD + + + + + + + COOK ISLANDS + CK + COK + 184 + + + + + COSTA RICA + CR + CRI + 188 + CTRY_COSTA_RICA + 506 + + + COTE D''IVOIRE + CI + CIV + 384 + + + + + CROATIA (local name: Hrvatska) + HR + HRV + 191 + CTRY_CROATIA + 385 + verCroatia, verYugoCroatian + 68 (c), 25 (y) + CUBA + CU + CUB + 192 + + + + + CYPRUS + CY + CYP + 196 + + + verCyprus + 23 + CZECH REPUBLIC + CZ + CZE + 203 + CTRY_CZECH + 420 + verCzech + 56 + DENMARK + DK + DNK + 208 + CTRY_DENMARK + 45 + verDenmark(da), verFaeroeIsl(fo) + 9(da), 47(fo) + DJIBOUTI + DJ + DJI + 262 + + + + + DOMINICA + DM + DMA + 212 + + + + + DOMINICAN REPUBLIC + DO + DOM + 214 + CTRY_DOMINICAN_REPUBLIC + 1 + + + EAST TIMOR + TL + TLS + 626 + + + + + ECUADOR + EC + ECU + 218 + CTRY_ECUADOR + 593 + + + EGYPT + EG + EGY + 818 + CTRY_EGYPT + 20 + verArabic + 16 + EL SALVADOR + SV + SLV + 222 + CTRY_EL_SALVADOR + 503 + + + EQUATORIAL GUINEA + GQ + GNQ + 226 + + + + + ERITREA + ER + ERI + 232 + + + + + ESTONIA + EE + EST + 233 + CTRY_ESTONIA + 372 + verEstonia + 44 + ETHIOPIA + ET + ETH + 210 + + + + + FALKLAND ISLANDS (MALVINAS) + FK + FLK + 238 + + + + + FAROE ISLANDS + FO + FRO + 234 + CTRY_FAEROE_ISLANDS + 298 + + + FIJI + FJ + FJI + 242 + + + + + FINLAND + FI + FIN + 246 + CTRY_FINLAND + 358 + verFinland + 17 + FRANCE + FR + FRA + 250 + CTRY_FRANCE + 33 + verFrance + 1 + FRANCE, METROPOLITAN + FX + FXX + 249 + + + + + FRENCH GUIANA + GF + GUF + 254 + + + + + FRENCH POLYNESIA + PF + PYF + 258 + + + + + FRENCH SOUTHERN TERRITORIES + TF + ATF + 260 + + + + + GABON + GA + GAB + 266 + + + + + GAMBIA + GM + GMB + 270 + + + + + GEORGIA + GE + GEO + 268 + CTRY_GEORGIA + 995 + verGeorgian + 85 + GERMANY + DE + DEU + 276 + CTRY_GERMANY + 49 + verGermany + 3 + GHANA + GH + GHA + 288 + + + + + GIBRALTAR + GI + GIB + 292 + + + + + GREECE + GR + GRC + 300 + CTRY_GREECE + 30 + verGreece, verGreecePoly + 20, 40 + GREENLAND + GL + GRL + 304 + + + verGreenland + 107 + GRENADA + GD + GRD + 308 + + + + + GUADELOUPE + GP + GLP + 312 + + + + + GUAM + GU + GUM + 316 + + + + + GUATEMALA + GT + GTM + 320 + CTRY_GUATEMALA + 502 + + + GUINEA + GN + GIN + 324 + + + + + GUINEA-BISSAU + GW + GNB + 624 + + + + + GUYANA + GY + GUY + 328 + + + + + HAITI + HT + HTI + 332 + + + + + HEARD ISLAND & MCDONALD ISLANDS + HM + HMD + 334 + + + + + HONDURAS + HN + HND + 340 + CTRY_HONDURAS + 504 + + + HONG KONG + HK + HKG + 344 + CTRY_HONG_KONG + 852 + + + HUNGARY + HU + HUN + 348 + CTRY_HUNGARY + 36 + verHungary + 43 + ICELAND + IS + ISL + 352 + CTRY_ICELAND + 354 + verIceland + 21 + INDIA + IN + IND + 356 + CTRY_INDIA + 91 + verIndiaHindi(hi) + 33 + INDONESIA + ID + IDN + 360 + CTRY_INDONESIA + 62 + + + IRAN, ISLAMIC REPUBLIC OF + IR + IRN + 364 + CTRY_IRAN + 981 + verIran + 48 + IRAQ + IQ + IRQ + 368 + CTRY_IRAQ + 964 + verArabic + 16 + IRELAND + IE + IRL + 372 + CTRY_IRELAND + 353 + verIreland + 50 + ISRAEL + IL + ISR + 376 + CTRY_ISRAEL + 972 + verIsrael + 13 + ITALY + IT + ITA + 380 + CTRY_ITALY + 39 + verItaly + 4 + JAMAICA + JM + JAM + 388 + CTRY_JAMAICA + 1 + + + JAPAN + JP + JPN + 392 + CTRY_JAPAN + 81 + verJapan + 14 + JORDAN + JO + JOR + 400 + CTRY_JORDAN + 962 + + + KAZAKHSTAN + KZ + KAZ + 398 + CTRY_KAZAKSTAN + 7 + + + KENYA + KE + KEN + 404 + CTRY_KENYA + 254 + + + KIRIBATI + KI + KIR + 296 + + + + + KOREA, DEMOCRATIC PEOPLE''S REPUBLIC OF + KP + PRK + 408 + + + verKorea + 51 + KOREA, REPUBLIC OF + KR + KOR + 410 + CTRY_SOUTH_KOREA + 82 + verKorea + + KUWAIT + KW + KWT + 414 + CTRY_KUWAIT + 965 + + + KYRGYZSTAN + KG + KGZ + 417 + CTRY_KYRGYZSTAN + 996 + + + LAO PEOPLE''S DEMOCRATIC REPUBLIC + LA + LAO + 418 + + + + + LATVIA + LV + LVA + 428 + CTRY_LATVIA + 371 + verLatvia + 45 + LEBANON + LB + LBN + 422 + CTRY_LEBANON + 961 + + + LESOTHO + LS + LSO + 426 + + + + + LIBERIA + LR + LBR + 430 + + + + + LIBYAN ARAB JAMAHIRIYA + LY + LBY + 434 + CTRY_LIBYA + 218 + verArabic + 16 + LIECHTENSTEIN + LI + LIE + 438 + CTRY_LIECHTENSTEIN + 41 + + + LITHUANIA + LT + LTU + 440 + CTRY_LITHUANIA + 370 + verLithuania + 41 + LUXEMBOURG + LU + LUX + 442 + CTRY_LUXEMBOURG + 352 + verFrBelgiumLux + 6 + MACAU + MO + MAC + 446 + CTRY_MACAU + 853 + + + MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF + MK + MKD + 807 + CTRY_MACEDONIA + 389 + verMacedonian + + MADAGASCAR + MG + MDG + 450 + + + + + MALAWI + MW + MWI + 454 + + + + + MALAYSIA + MY + MYS + 458 + CTRY_MALAYSIA + 60 + + + MALDIVES + MV + MDV + 462 + CTRY_MALDIVES + 960 + + + MALI + ML + MLI + 466 + + + + + MALTA + MT + MLT + 470 + + + verMalta + 22 + MARSHALL ISLANDS + MH + MHL + 584 + + + + + MARTINIQUE + MQ + MTQ + 474 + + + + + MAURITANIA + MR + MRT + 478 + + + + + MAURITIUS + MU + MUS + 480 + + + + + MAYOTTE + YT + MYT + 175 + + + + + MEXICO + MX + MEX + 484 + CTRY_MEXICO + 52 + + + MICRONESIA, FEDERATED STATES OF + FM + FSM + 583 + + + + + MOLDOVA, REPUBLIC OF + MD + MDA + 498 + + + + + MONACO + MC + MCO + 492 + CTRY_MONACO + 33 + + + MONGOLIA + MN + MNG + 496 + CTRY_MONGOLIA + 976 + + + MONTSERRAT + MS + MSR + 500 + + + + + MOROCCO + MA + MAR + 504 + CTRY_MOROCCO + 212 + verArabic + 16 + MOZAMBIQUE + MZ + MOZ + 508 + + + + + MYANMAR + MM + MMR + 104 + + + + + NAMIBIA + NA + NAM + 516 + + + + + NAURU + NR + NRU + 520 + + + + + NEPAL + NP + NPL + 524 + + + verNepal + 106 + NETHERLANDS + NL + NLD + 528 + CTRY_NETHERLANDS + 31 + verNetherlands + 5 + NETHERLANDS ANTILLES + AN + ANT + 530 + + + + + NEW CALEDONIA + NC + NCL + 540 + + + + + NEW ZEALAND + NZ + NZL + 554 + CTRY_NEW_ZEALAND + 64 + + + NICARAGUA + NI + NIC + 558 + CTRY_NICARAGUA + 505 + + + NIGER + NE + NER + 562 + + + + + NIGERIA + NG + NGA + 566 + + + + + NIUE + NU + NIU + 570 + + + + + NORFOLK ISLAND + NF + NFK + 574 + + + + + NORTHERN MARIANA ISLANDS + MP + MNP + 580 + + + + + NORWAY + NO + NOR + 578 + CTRY_NORWAY + 47 + verNorway + 12 + OMAN + OM + OMN + 512 + CTRY_OMAN + 968 + + + PAKISTAN + PK + PAK + 586 + CTRY_PAKISTAN + 92 + verPakistanUrdu, verPunjabi + 34 (U), 95 (P) + PALAU + PW + PLW + 585 + + + + + PANAMA + PA + PAN + 591 + CTRY_PANAMA + 507 + + + PALESTINIAN TERRITORY, OCCUPIED + PS + + + + + + + PAPUA NEW GUINEA + PG + PNG + 598 + + + + + PARAGUAY + PY + PRY + 600 + CTRY_PARAGUAY + 595 + + + PERU + PE + PER + 604 + CTRY_PERU + 51 + + + PHILIPPINES + PH + PHL + 608 + CTRY_PHILIPPINES + 63 + + + PITCAIRN + PN + PCN + 612 + + + + + POLAND + PL + POL + 616 + CTRY_POLAND + 48 + verPoland + 42 + PORTUGAL + PT + PRT + 620 + CTRY_PORTUGAL + 351 + verPortugal + 10 + PUERTO RICO + PR + PRI + 630 + CTRY_PUERTO_RICO + 1 + + + QATAR + QA + QAT + 634 + CTRY_QATAR + 974 + + + REUNION + RE + REU + 638 + + + + + ROMANIA + RO + ROU* + 642 + CTRY_ROMANIA + 40 + verRomania + 39 + RUSSIAN FEDERATION + RU + RUS + 643 + CTRY_RUSSIA + 7 + verRussia + 49 + RWANDA + RW + RWA + 646 + + + + + SAINT KITTS AND NEVIS + KN + KNA + 659 + + + + + SAINT LUCIA + LC + LCA + 662 + + + + + SAINT VINCENT AND THE GRENADINES + VC + VCT + 670 + + + + + SAMOA + WS + WSM + 882 + + + + + SAN MARINO + SM + SMR + 674 + + + + + SAO TOME AND PRINCIPE + ST + STP + 678 + + + + + SAUDI ARABIA + SA + SAU + 682 + CTRY_SAUDI_ARABIA + 966 + verArabic + 16 + SENEGAL + SN + SEN + 686 + + + + + SERBIA AND MONTENEGRO + CS + + + CTRY_SERBIA + 381 + + + SEYCHELLES + SC + SYC + 690 + + + + + SIERRA LEONE + SL + SLE + 694 + + + + + SINGAPORE + SG + SGP + 702 + CTRY_SINGAPORE + 65 + verSingapore + 100 + SLOVAKIA (Slovak Republic) + SK + SVK + 703 + CTRY_SLOVAK + 421 + verSlovak + 57 + SLOVENIA + SI + SVN + 705 + CTRY_SLOVENIA + 386 + verSlovenian + 66 + SOLOMON ISLANDS + SB + SLB + 90 + + + + + SOMALIA + SO + SOM + 706 + + + + + SOUTH AFRICA + ZA + ZAF + 710 + CTRY_SOUTH_AFRICA + 27 + + + SOUTH GEORGIA AND THE SOUTH SANDWICH ISLANDS + GS + + + + + + + SPAIN + ES + ESP + 724 + CTRY_SPAIN + 34 + verSpain + 8 + SRI LANKA + LK + LKA + 144 + + + + + SAINT HELENA + SH + SHN + 654 + + + + + SAINT PIERRE AND MIQUELON + PM + SPM + 666 + + + + + SUDAN + SD + SDN + 736 + + + + + SURINAME + SR + SUR + 740 + + + + + SVALBARD AND JAN MAYEN ISLANDS + SJ + SJM + 744 + + + + + SWAZILAND + SZ + SWZ + 748 + + + + + SWEDEN + SE + SWE + 752 + CTRY_SWEDEN + 46 + verSweden + 7 + SWITZERLAND + CH + CHE + 756 + CTRY_SWITZERLAND + 41 + verFrSwiss(fr), verGrSwiss(de) + 18(fr), 19(de) + SYRIAN ARAB REPUBLIC + SY + SYR + 760 + CTRY_SYRIA + 963 + + + TAIWAN, PROVINCE OF CHINA + TW + TWN + 158 + CTRY_TAIWAN + 886 + verTaiwan + 53 + TAJIKISTAN + TJ + TJK + 762 + + + + + TANZANIA, UNITED REPUBLIC OF + TZ + TZA + 834 + + + + + TATARSTAN + + + + CTRY_TATARSTAN + 7 + + + THAILAND + TH + THA + 764 + CTRY_THAILAND + 66 + verThailand + 54 + TIMOR-LESTE + TL + + + + + + + TOGO + TG + TGO + 768 + + + + + TOKELAU + TK + TKL + 772 + + + + + TONGA + TO + TON + 776 + + + verTonga + 88 + TRINIDAD AND TOBAGO + TT + TTO + 780 + CTRY_TRINIDAD_Y_TOBAGO + 1 + + + TUNISIA + TN + TUN + 788 + CTRY_TUNISIA + 216 + verArabic + 16 + TURKEY + TR + TUR + 792 + CTRY_TURKEY + 90 + verTurkey + 24 + TURKMENISTAN + TM + TKM + 795 + + + + + TURKS AND CAICOS ISLANDS + TC + TCA + 796 + + + + + TUVALU + TV + TUV + 798 + + + + + UGANDA + UG + UGA + 800 + + + + + UKRAINE + UA + UKR + 804 + CTRY_UKRAINE + 380 + verUkraine + 62 + UNITED ARAB EMIRATES + AE + ARE + 784 + CTRY_UAE + 971 + + + UNITED KINGDOM + GB + GBR + 826 + CTRY_UNITED_KINGDOM + 44 + verBritain + 2 + UNITED STATES + US + USA + 840 + CTRY_UNITED_STATES + 1 + verUS + 0 + UNITED STATES MINOR OUTLYING ISLANDS + UM + UMI + 581 + + + + + URUGUAY + UY + URY + 858 + CTRY_URUGUAY + 598 + + + UZBEKISTAN + UZ + UZB + 860 + CTRY_UZBEKISTAN + 7 + + + VANUATU + VU + VUT + 548 + + + + + VATICAN CITY STATE (HOLY SEE) + VA + VAT + 336 + + + + + VENEZUELA + VE + VEN + 862 + CTRY_VENEZUELA + 58 + + + VIET NAM + VN + VNM + 704 + CTRY_VIET_NAM + 84 + verVietnam + + VIRGIN ISLANDS (BRITISH) + VG + VGB + 92 + + + + + VIRGIN ISLANDS (U.S.) + VI + VIR + 850 + + + + + WALLIS AND FUTUNA ISLANDS + WF + WLF + 876 + + + + + WESTERN SAHARA + EH + ESH + 732 + + + + + YEMEN + YE + YEM + 887 + CTRY_YEMEN + 967 + + + YUGOSLAVIA + YU + YUG + 891 + + + + + ZAIRE + ZR + ZAR + 180 + + + + + ZAMBIA + ZM + ZMB + 894 + + + + + ZIMBABWE + ZW + ZWE + 716 + CTRY_ZIMBABWE + 263 + + + '! Item was added: + ----- Method: ISOLanguageDefinition class>>iso3Countries (in category 'private') ----- + iso3Countries + "ISOLanguageDefinition iso3Countries" + "ISO2Countries := nil. ISO3Countries := nil" + + ISO3Countries ifNil: [self initISOCountries]. + ^ISO3Countries! Item was added: + ----- Method: ISOLanguageDefinition class>>iso3LanguageDefinition: (in category 'accessing') ----- + iso3LanguageDefinition: aString + ^self iso3LanguageTable at: aString! Item was added: + ----- Method: ISOLanguageDefinition class>>iso3LanguageTable (in category 'private') ----- + iso3LanguageTable + "ISOLanguageDefinition iso3LanguageTable" + + ^ISO3Table ifNil: [ISO3Table := self initISO3LanguageTable]! Item was added: + ----- Method: ISOLanguageDefinition class>>isoLanguages (in category 'private') ----- + isoLanguages + "ISO 639: 3-letter codes" + ^'aar aa Afar + abk ab Abkhazian + ace Achinese + ach Acoli + ada Adangme + ady Adyghe; Adygei + afa Afro-Asiatic languages + afh Afrihili + afr af Afrikaans + ain Ainu + aka ak Akan + akk Akkadian + alb/sqi sq Albanian + ale Aleut + alg Algonquian languages + alt Southern Altai + amh am Amharic + ang English, Old (ca.450-1100) + anp Angika + apa Apache languages + ara ar Arabic + arc Official Aramaic (700-300 BCE); Imperial Aramaic (700-300 BCE) + arg an Aragonese + arm/hye hy Armenian + arn Mapudungun; Mapuche + arp Arapaho + art Artificial languages + arw Arawak + asm as Assamese + ast Asturian; Bable; Leonese; Asturleonese + ath Athapascan languages + aus Australian languages + ava av Avaric + ave ae Avestan + awa Awadhi + aym ay Aymara + aze az Azerbaijani + bad Banda languages + bai Bamileke languages + bak ba Bashkir + bal Baluchi + bam bm Bambara + ban Balinese + baq/eus eu Basque + bas Basa + bat Baltic languages + bej Beja; Bedawiyet + bel be Belarusian + bem Bemba + ben bn Bengali + ber Berber languages) + bho Bhojpuri + bih bh Bihari + bik Bikol + bin Bini; Edo + bis bi Bislama + bla Siksika + bnt Bantu languages + bos bs Bosnian + bra Braj + bre br Breton + btk Batak languages + bua Buriat + bug Buginese + bul bg Bulgarian + bur/mya my Burmese + byn Blin; Bilin + cad Caddo + cai Central American Indian languages + car Galibi Carib + cat ca Catalan; Valencian + cau Caucasian languages + ceb Cebuano + cel Celtic languages + cha ch Chamorro + chb Chibcha + che ce Chechen + chg Chagatai + chi/zho zh Chinese + chk Chuukese + chm Mari + chn Chinook jargon + cho Choctaw + chp Chipewyan; Dene Suline + chr Cherokee + chu cu Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic + chv cv Chuvash + chy Cheyenne + cmc Chamic languages + cop Coptic + cor kw Cornish + cos co Corsican + cpe Creoles and pidgins, English based + cpf Creoles and pidgins, French-based + cpp Creoles and pidgins, Portuguese-based + cre cr Cree + crh Crimean Tatar; Crimean Turkish + crp Creoles and pidgins + csb Kashubian + cus Cushitic languages + cze/ces cs Czech + dak Dakota + dan da Danish + dar Dargwa + day Land Dayak languages + del Delaware + den Slave (Athapascan) + dgr Dogrib + din Dinka + div dv Divehi; Dhivehi; Maldivian + doi Dogri + dra Dravidian languages + dsb Lower Sorbian + dua Duala + dum Dutch, Middle (ca.1050-1350) + dut/nld nl Dutch; Flemish + dyu Dyula + dzo dz Dzongkha + efi Efik + egy Egyptian (Ancient) + eka Ekajuk + elx Elamite + eng en English + enm English, Middle (1100-1500) + epo eo Esperanto + est et Estonian + ewe ee Ewe + ewo Ewondo + fan Fang + fao fo Faroese + fat Fanti + fij fj Fijian + fil Filipino; Pilipino + fin fi Finnish + fiu Finno-Ugrian languages) + fon Fon + fre/fra fr French + frm French, Middle (ca.1400-1600) + fro French, Old (842-ca.1400) + frr Northern Frisian + frs Eastern Frisian + fry fy Western Frisian + ful ff Fulah + fur Friulian + gaa Ga + gay Gayo + gba Gbaya + gem Germanic languages + geo/kat ka Georgian + ger/deu de German + gez Geez + gil Gilbertese + gla gd Gaelic; Scottish Gaelic + gle ga Irish + glg gl Galician + glv gv Manx + gmh German, Middle High (ca.1050-1500) + goh German, Old High (ca.750-1050) + gon Gondi + gor Gorontalo + got Gothic + grb Grebo + grc Greek, Ancient (to 1453) + gre/ell el Greek, Modern (1453-) + grn gn Guarani + gsw Swiss German; Alemannic; Alsatian + guj gu Gujarati + gwi Gwich''in + hai Haida + hat ht Haitian; Haitian Creole + hau ha Hausa + haw Hawaiian + heb he Hebrew + her hz Herero + hil Hiligaynon + him Himachali + hin hi Hindi + hit Hittite + hmn Hmong + hmo ho Hiri Motu + hrv hr Croatian + hsb Upper Sorbian + hun hu Hungarian + hup Hupa + iba Iban + ibo ig Igbo + ice/isl is Icelandic + ido io Ido + iii ii Sichuan Yi; Nuosu + ijo Ijo languages + iku iu Inuktitut + ile ie Interlingue; Occidental + ilo Iloko + ina ia Interlingua (International Auxiliary Language Association) + inc Indic languages + ind id Indonesian + ine Indo-European languages + inh Ingush + ipk ik Inupiaq + ira Iranian languages + iro Iroquoian languages + ita it Italian + jav jv Javanese + jbo Lojban + jpn ja Japanese + jpr Judeo-Persian + jrb Judeo-Arabic + kaa Kara-Kalpak + kab Kabyle + kac Kachin; Jingpho + kal kl Kalaallisut; Greenlandic + kam Kamba + kan kn Kannada + kar Karen languages + kas ks Kashmiri + kau kr Kanuri + kaw Kawi + kaz kk Kazakh + kbd Kabardian + kha Khasi + khi Khoisan languages + khm km Central Khmer + kho Khotanese; Sakan + kik ki Kikuyu; Gikuyu + kin rw Kinyarwanda + kir ky Kirghiz; Kyrgyz + kmb Kimbundu + kok Konkani + kom kv Komi + kon kg Kongo + kor ko Korean + kos Kosraean + kpe Kpelle + krc Karachay-Balkar + krl Karelian + kro Kru languages + kru Kurukh + kua kj Kuanyama; Kwanyama + kum Kumyk + kur ku Kurdish + kut Kutenai + lad Ladino + lah Lahnda + lam Lamba + lao lo Lao + lat la Latin + lav lv Latvian + lez Lezghian + lim li Limburgan; Limburger; Limburgish + lin ln Lingala + lit lt Lithuanian + lol Mongo + loz Lozi + ltz lb Luxembourgish; Letzeburgesch + lua Luba-Lulua + lub lu Luba-Katanga + lug lg Ganda + lui Luiseno + lun Lunda + luo Luo (Kenya and Tanzania) + lus Lushai + mac/mkd mk Macedonian + mad Madurese + mag Magahi + mah mh Marshallese + mai Maithili + mak Makasar + mal ml Malayalam + man Mandingo + mao/mri mi Maori + map Austronesian languages + mar mr Marathi + mas Masai + may/msa ms Malay + mdf Moksha + mdr Mandar + men Mende + mga Irish, Middle (900-1200) + mic Mi''kmaq; Micmac + min Minangkabau + mis Uncoded languages + mkh Mon-Khmer languages + mlg mg Malagasy + mlt mt Maltese + mnc Manchu + mni Manipuri + mno Manobo languages + moh Mohawk + mon mn Mongolian + mos Mossi + mul Multiple languages + mun Munda languages + mus Creek + mwl Mirandese + mwr Marwari + myn Mayan languages + myv Erzya + nah Nahuatl languages + nai North American Indian languages + nap Neapolitan + nau na Nauru + nav nv Navajo; Navaho + nbl nr Ndebele, South; South Ndebele + nde nd Ndebele, North; North Ndebele + ndo ng Ndonga + nds Low German; Low Saxon; German, Low; Saxon, Low + nep ne Nepali + new Nepal Bhasa; Newari + nia Nias + nic Niger-Kordofanian languages + niu Niuean + nno nn Norwegian Nynorsk; Nynorsk, Norwegian + nob nb Bokmal, Norwegian; Norwegian Bokmal + nog Nogai + non Norse, Old + nor no Norwegian + nqo N''Ko + nso Pedi; Sepedi; Northern Sotho + nub Nubian languages + nwc Classical Newari; Old Newari; Classical Nepal Bhasa + nya ny Chichewa; Chewa; Nyanja + nym Nyamwezi + nyn Nyankole + nyo Nyoro + nzi Nzima + oci oc Occitan (post 1500) + oji oj Ojibwa + ori or Oriya + orm om Oromo + osa Osage + oss os Ossetian; Ossetic + ota Turkish, Ottoman (1500-1928) + oto Otomian languages + paa Papuan languages + pag Pangasinan + pal Pahlavi + pam Pampanga; Kapampangan + pan pa Panjabi; Punjabi + pap Papiamento + pau Palauan + peo Persian, Old (ca.600-400 B.C.) + per/fas fa Persian + phi Philippine languages) + phn Phoenician + pli pi Pali + pol pl Polish + pon Pohnpeian + por pt Portuguese + pra Prakrit languages + pro Provencal, Old (to 1500);Occitan, Old (to 1500) + pus ps Pushto; Pashto + qaa-qtz Reserved for local use + que qu Quechua + raj Rajasthani + rap Rapanui + rar Rarotongan; Cook Islands Maori + roa Romance languages + roh rm Romansh + rom Romany + rum/ron ro Romanian; Moldavian; Moldovan + run rn Rundi + rup Aromanian; Arumanian; Macedo-Romanian + rus ru Russian + sad Sandawe + sag sg Sango + sah Yakut + sai South American Indian languages + sal Salishan languages + sam Samaritan Aramaic + san sa Sanskrit + sas Sasak + sat Santali + scn Sicilian + sco Scots + sel Selkup + sem Semitic languages + sga Irish, Old (to 900) + sgn Sign Languages + shn Shan + sid Sidamo + sin si Sinhala; Sinhalese + sio Siouan languages + sit Sino-Tibetan languages + sla Slavic languages + slo/slk sk Slovak + slv sl Slovenian + sma Southern Sami + sme se Northern Sami + smi Sami languages + smj Lule Sami + smn Inari Sami + smo sm Samoan + sms Skolt Sami + sna sn Shona + snd sd Sindhi + snk Soninke + sog Sogdian + som so Somali + son Songhai languages + sot st Sotho, Southern + spa es Spanish; Castilian + srd sc Sardinian + srn Sranan Tongo + srp sr Serbian + srr Serer + ssa Nilo-Saharan languages + ssw ss Swati + suk Sukuma + sun su Sundanese + sus Susu + sux Sumerian + swa sw Swahili + swe sv Swedish + syc Classical Syriac + syr Syriac + tah ty Tahitian + tai Tai languages + tam ta Tamil + tat tt Tatar + tel te Telugu + tem Timne + ter Tereno + tet Tetum + tgk tg Tajik + tgl tl Tagalog + tha th Thai + tib/bod bo Tibetan + tig Tigre + tir ti Tigrinya + tiv Tiv + tkl Tokelau + tlh Klingon; tlhIngan-Hol + tli Tlingit + tmh Tamashek + tog Tonga (Nyasa) + ton to Tonga (Tonga Islands) + tpi Tok Pisin + tsi Tsimshian + tsn tn Tswana + tso ts Tsonga + tuk tk Turkmen + tum Tumbuka + tup Tupi languages + tur tr Turkish + tut Altaic languages + tvl Tuvalu + twi tw Twi + tyv Tuvinian + udm Udmurt + uga Ugaritic + uig ug Uighur; Uyghur + ukr uk Ukrainian + umb Umbundu + und Undetermined + urd ur Urdu + uzb uz Uzbek + vai Vai + ven ve Venda + vie vi Vietnamese + vol vo Volapuk + vot Votic + wak Wakashan languages + wal Wolaitta; Wolaytta + war Waray + was Washo + wel/cym cy Welsh + wen Sorbian languages + wln wa Walloon + wol wo Wolof + xal Kalmyk; Oirat + xho xh Xhosa + yao Yao + yap Yapese + yid yi Yiddish + yor yo Yoruba + ypk Yupik languages + zap Zapotec + zbl Blissymbols; Blissymbolics; Bliss + zen Zenaga + zha za Zhuang; Chuang + znd Zande languages + zul zu Zulu + zun Zuni + zxx No linguistic content; Not applicable + zza Zaza; Dimili; Dimli; Kirdki; Kirmanjki; Zazaki'! Item was added: + ----- Method: ISOLanguageDefinition class>>readISOLanguagesFrom: (in category 'private') ----- + readISOLanguagesFrom: stream + "ISOLanguageDefinition readISOLanguagesFrom: ISOLanguageDefinition isoLanguages readStream " + | languages language code3 index line | + languages := Dictionary new. + [stream atEnd + or: [(line := stream nextLine readStream) atEnd]] + whileFalse: [ + language := ISOLanguageDefinition new. + code3 := line upTo: Character tab. + (index := code3 indexOf: $/) > 0 + ifTrue: [ + language iso3: (code3 copyFrom: 1 to: index-1). + language iso3Alternate: (code3 copyFrom: index+1 to: code3 size)] + ifFalse: [language iso3: code3]. + language + iso2: (line upTo: Character tab); + language: line upToEnd. + languages at: language iso3 put: language]. + ^languages! Item was added: + ----- Method: ISOLanguageDefinition>>iso2 (in category 'accessing') ----- + iso2 + ^iso2 ifNil: [self iso3]! Item was added: + ----- Method: ISOLanguageDefinition>>iso2: (in category 'initialize') ----- + iso2: aString + iso2 := aString ifEmpty: [nil] ifNotEmpty: [aString]! Item was added: + ----- Method: ISOLanguageDefinition>>iso3 (in category 'accessing') ----- + iso3 + ^iso3 ifNil: ['']! Item was added: + ----- Method: ISOLanguageDefinition>>iso3: (in category 'initialize') ----- + iso3: aString + iso3 := aString ifEmpty: [nil] ifNotEmpty: [aString]! Item was added: + ----- Method: ISOLanguageDefinition>>iso3Alternate (in category 'accessing') ----- + iso3Alternate + ^iso3Alternate ifNil: ['']! Item was added: + ----- Method: ISOLanguageDefinition>>iso3Alternate: (in category 'initialize') ----- + iso3Alternate: aString + iso3Alternate := aString ifEmpty: [nil] ifNotEmpty: [aString]! Item was added: + ----- Method: ISOLanguageDefinition>>language (in category 'accessing') ----- + language + ^language! Item was added: + ----- Method: ISOLanguageDefinition>>language: (in category 'initialize') ----- + language: aString + language := aString! Item was added: + NaturalLanguageTranslator subclass: #InternalTranslator + instanceVariableNames: 'generics' + classVariableNames: 'AllKnownPhrases CachedTranslations' + poolDictionaries: '' + category: 'System-Localization'! + + !InternalTranslator commentStamp: 'tak 10/19/2007 11:12' prior: 0! + An InternalTranslator is used a translation dictionary in a image. + You can use it without any external translation file. + + Structure: + generics Dictionary -- msgid -> msgstr + ! Item was added: + ----- Method: InternalTranslator class>>allKnownPhrases (in category 'private') ----- + allKnownPhrases + ^AllKnownPhrases ifNil: [AllKnownPhrases := Dictionary new: 2051]! Item was added: + ----- Method: InternalTranslator class>>availableLanguageLocaleIDs (in category 'accessing') ----- + availableLanguageLocaleIDs + "Return locale ids for the internal translation dictionary." + "InternalTranslator availableLanguageLocaleIDs" + ^ self cachedTranslations values collect:[:each | each localeID]! Item was added: + ----- Method: InternalTranslator class>>cachedTranslations (in category 'private') ----- + cachedTranslations + "CachedTranslations := nil" + ^CachedTranslations ifNil: [CachedTranslations := Dictionary new]! Item was added: + ----- Method: InternalTranslator class>>directoryForLanguage:country:create: (in category 'private loading') ----- + directoryForLanguage: isoLanguage country: isoCountry create: createDir + "Try to locate the <prefs>/locale/<language>{/<country>} folder. + If createDir is set, create the path down to country or language, depending on wether it's specified.. + Return the directory for country or language depending on specification. + If neither exists, nil" + + "NaturalLanguageTranslator directoryForLanguage: 'es' country: nil create: true" + "NaturalLanguageTranslator directoryForLanguage: 'de' country: 'DE' create: true" + "NaturalLanguageTranslator directoryForLanguage: 'en' country: 'US' create: false" + "NaturalLanguageTranslator directoryForLanguage: 'en' country: nil create: true" + + "If this fails, there is nothing we can do about it here" + | localeDir countryDir languageDir | + localeDir := self localeDirCreate: createDir. + localeDir ifNil: [^nil]. + + isoCountry ifNil: [ + languageDir := localeDir directoryNamed: isoLanguage. + createDir + ifTrue: [languageDir assureExistence]. + ^languageDir exists + ifTrue: [languageDir] + ifFalse: [nil]]. + + countryDir := languageDir directoryNamed: isoCountry. + createDir + ifTrue: [countryDir assureExistence]. + + ^countryDir exists + ifTrue: [countryDir] + ifFalse: [nil]! Item was added: + ----- Method: InternalTranslator class>>directoryForLocaleID:create: (in category 'private loading') ----- + directoryForLocaleID: localeID create: createDir + "Try to locate the <prefs>/locale/<language>{/<country>} folder. + If createDir is set, create the path down to country or language, depending on locale. + Return the directory for country or language depending on locale. + If neither exists, nil" + + "NaturalLanguageTranslator directoryForLanguage: 'de' country: nil readOnly: true" + "NaturalLanguageTranslator directoryForLanguage: 'de' country: 'DE' readOnly: true" + "NaturalLanguageTranslator directoryForLanguage: 'en' country: 'US' readOnly: false" + "NaturalLanguageTranslator directoryForLanguage: 'en' country: nil readOnly: true" + + ^self directoryForLanguage: localeID isoLanguage country: localeID isoCountry create: createDir! Item was added: + ----- Method: InternalTranslator class>>discardAllTranslations (in category 'class initialization') ----- + discardAllTranslations + AllKnownPhrases := nil. + self resetCaches.! Item was added: + ----- Method: InternalTranslator class>>fileReaderServicesForFile:suffix: (in category 'file-services') ----- + fileReaderServicesForFile: fullName suffix: suffix + "Answer the file services associated with given file" + ^ (suffix = self translationSuffix) | (suffix = '*') + ifTrue: [{self serviceMergeLanguageTranslations}] + ifFalse: [#()]! Item was added: + ----- Method: InternalTranslator class>>loadAvailableExternalLocales (in category 'private loading') ----- + loadAvailableExternalLocales + "private - register locales IDs based on the content of the <prefs>/locale/ directory" + | localeDir | + localeDir := self localeDirCreate: false. + localeDir ifNil: [^ #()]. + + localeDir directoryNames + do: [:langDirName | + | langDir | + langDir := localeDir directoryNamed: langDirName. + + (langDir fileNamesMatching: '*.' , self translationSuffix) + ifNotEmpty: [self loadTranslatorForIsoLanguage: langDirName isoCountry: nil]. + + langDir directoryNames + do: [:countryDirName | + | countryDir | + countryDir := langDir directoryNamed: countryDirName. + (countryDir fileNamesMatching: '*.' , self translationSuffix) + ifNotEmpty: [self loadTranslatorForIsoLanguage: langDirName isoCountry: countryDirName] + ] + ]. + ! Item was added: + ----- Method: InternalTranslator class>>loadExternalTranslationsFor: (in category 'private loading') ----- + loadExternalTranslationsFor: translator + "Try to load translations from external external files. + The files are located in the <prefs>/locale/<language>{/<country>} folder. + There can be more than one file for each location, so applications can install their own partial translation tables. All files in the specific folder are loaded." + + | translationDir | + translationDir := self directoryForLocaleID: translator localeID create: false. + translationDir ifNil: [ ^nil ]. + (translationDir fileNamesMatching: '*.' , self translationSuffix) + do: [:fileName | translator loadFromFileNamed: (translationDir fullNameFor: fileName)]! Item was added: + ----- Method: InternalTranslator class>>loadForLocaleIsoString:fromGzippedMimeLiteral: (in category 'file-services') ----- + loadForLocaleIsoString: localeString fromGzippedMimeLiteral: mimeString + "merge the translation from the mime literal." + | stream localeID translator gs rbStream s currentPlatform | + s := Base64MimeConverter mimeDecodeToBytes: mimeString readStream. + s reset. + gs := GZipReadStream on: s. + rbStream := MultiByteBinaryOrTextStream with: gs contents asString. + rbStream converter: UTF8TextConverter new. + rbStream reset. + localeID := LocaleID isoString: localeString. + currentPlatform := Locale currentPlatform. + [Locale + currentPlatform: (Locale localeID: localeID). + stream := ReadStream on: rbStream contents] + ensure: [Locale currentPlatform: currentPlatform]. + translator := self localeID: localeID. + translator loadFromStream: stream. + LanguageEnvironment resetKnownEnvironments! Item was added: + ----- Method: InternalTranslator class>>loadTranslatorForIsoLanguage:isoCountry: (in category 'private loading') ----- + loadTranslatorForIsoLanguage: isoLanguage isoCountry: isoCountry + "private - load the translations from <prefs>/locale/ directory + the procedure is to assure the existence of a translator for the + given language/country and then load the external translations for this translator" + + | translator | + translator := self newLocaleID: (LocaleID isoLanguage: isoLanguage isoCountry: isoCountry). + + self loadExternalTranslationsFor: translator! Item was added: + ----- Method: InternalTranslator class>>localeDirCreate: (in category 'private loading') ----- + localeDirCreate: createDir + "Try to locate the <prefs>/locale/ folder. + If createDir is set, try to create the path. + If it doesn't exist, return nil" + + "If this fails, there is nothing we can do about it here" + | prefDir localeDir | + (createDir not + and: [ExternalSettings preferenceDirectory isNil]) + ifTrue: [^ nil]. + + prefDir := ExternalSettings assuredPreferenceDirectory. + prefDir exists + ifFalse: [^nil]. + + + localeDir := prefDir directoryNamed: 'locale'. + createDir + ifTrue: [localeDir assureExistence]. + ^localeDir exists + ifTrue: [localeDir] + ifFalse: [nil]! Item was added: + ----- Method: InternalTranslator class>>localeID: (in category 'accessing') ----- + localeID: localeID + "For backward compatibility, see NaturalLanguageTranslator >> fileOutHeaderOn:." + ^ self newLocaleID: localeID! Item was added: + ----- Method: InternalTranslator class>>mergeLegacyTranslators (in category 'accessing') ----- + mergeLegacyTranslators + self availableLanguageLocaleIDs + do: [:localeID | (NaturalLanguageTranslator translators includesKey: localeID) + ifFalse: [NaturalLanguageTranslator translators + at: localeID + put: (self newLocaleID: localeID)]]! Item was added: + ----- Method: InternalTranslator class>>mergeTranslationFileNamed: (in category 'file-services') ----- + mergeTranslationFileNamed: fileFullNameString + "merge the translation in the file named fileFullNameString" + + | stream localeID translator | + stream := FileStream readOnlyFileNamed: fileFullNameString. + [localeID := LocaleID isoString: stream localName sansPeriodSuffix. + translator := self localeID: localeID. + translator loadFromStream: stream] + ensure: [stream close]. + LanguageEnvironment resetKnownEnvironments. + + ! Item was added: + ----- Method: InternalTranslator class>>newLocaleID: (in category 'accessing') ----- + newLocaleID: localeID + ^ self cachedTranslations + at: localeID + ifAbsentPut: [self new localeID: localeID]! Item was added: + ----- Method: InternalTranslator class>>privateStartUp (in category 'class initialization') ----- + privateStartUp + self loadAvailableExternalLocales. + self mergeLegacyTranslators. + ! Item was added: + ----- Method: InternalTranslator class>>registerPhrase: (in category 'private') ----- + registerPhrase: phrase + "Using a Dictionary so we can lookup existing string instead of creating needless copies when loading a translation." + self allKnownPhrases at: phrase put: phrase! Item was added: + ----- Method: InternalTranslator class>>registeredPhraseFor: (in category 'private') ----- + registeredPhraseFor: phrase + "Using a Dictionary so we can lookup existing string instead of creating needless copies when loading a translation." + ^self allKnownPhrases at: phrase ifAbsentPut: [phrase]! Item was added: + ----- Method: InternalTranslator class>>removeLocaleID: (in category 'accessing') ----- + removeLocaleID: localeID + "self removeLocaleID: (LocaleID isoString: 'ja-kids')" + self cachedTranslations + removeKey: localeID + ifAbsent: []. + NaturalLanguageTranslator privateStartUp! Item was added: + ----- Method: InternalTranslator class>>resetCaches (in category 'class initialization') ----- + resetCaches + CachedTranslations := nil. + ! Item was added: + ----- Method: InternalTranslator class>>serviceMergeLanguageTranslations (in category 'file-services') ----- + serviceMergeLanguageTranslations + "Answer a service for merging of translation files" + ^ SimpleServiceEntry + provider: self + label: 'merge the translation file' translatedNoop + selector: #mergeTranslationFileNamed: + description: 'merge the translation file into the language named like the file' translatedNoop + buttonLabel: 'merge' translatedNoop! Item was added: + ----- Method: InternalTranslator class>>services (in category 'file-services') ----- + services + "Answer potential file services associated with this class" + ^ {self serviceMergeLanguageTranslations}! Item was added: + ----- Method: InternalTranslator class>>translationSuffix (in category 'private') ----- + translationSuffix + ^'translation'! Item was added: + ----- Method: InternalTranslator>>atRandom (in category 'accessing') ----- + atRandom + + ^ generics atRandom value. + ! Item was added: + ----- Method: InternalTranslator>>checkPhrase:translation: (in category 'translation') ----- + checkPhrase: phrase translation: translation! Item was added: + ----- Method: InternalTranslator>>defaultBackgroundColor (in category 'user interface') ----- + defaultBackgroundColor + "answer the receiver's defaultBackgroundColor for views" + ^ Color cyan! Item was added: + ----- Method: InternalTranslator>>fileOutHeader (in category 'fileIn/fileOut') ----- + fileOutHeader + ^ '''Translation dictionary'''! Item was added: + ----- Method: InternalTranslator>>fileOutHeaderOn: (in category 'user interface') ----- + fileOutHeaderOn: aStream + aStream binary. + UTF8TextConverter writeBOMOn: aStream. + aStream text. + aStream nextChunkPut: self fileOutHeader; + cr. + aStream timeStamp; cr. + aStream nextPut: $!!. + aStream nextChunkPut: '(' , self class name , ' localeID: ' , id storeString , ')'. + aStream cr! Item was added: + ----- Method: InternalTranslator>>fileOutHeaderOn:withBOM: (in category 'user interface') ----- + fileOutHeaderOn: aStream withBOM: bomFlag + bomFlag ifTrue: [ + aStream binary. + UTF8TextConverter writeBOMOn: aStream. + aStream text. + ]. + aStream nextChunkPut: self fileOutHeader; + cr. + aStream timeStamp; cr. + aStream nextPut: $!!. + aStream nextChunkPut: '(' , self class name , ' localeID: ' , id storeString , ')'. + aStream cr! Item was added: + ----- Method: InternalTranslator>>fileOutOn: (in category 'fileIn/fileOut') ----- + fileOutOn: aStream + "self current fileOutOn: Transcript. Transcript endEntry" + self fileOutOn: aStream keys: nil withBOM: true. + ! Item was added: + ----- Method: InternalTranslator>>fileOutOn:keys:withBOM: (in category 'fileIn/fileOut') ----- + fileOutOn: aStream keys: keys withBOM: bomFlag + "self current fileOutOn: Transcript. Transcript endEntry" + self fileOutHeaderOn: aStream withBOM: bomFlag. + (keys + ifNil: [generics keys asSortedCollection]) + do: [:key | self + nextChunkPut: (generics associationAt: key) + on: aStream]. + keys + ifNil: [self untranslated + do: [:each | self nextChunkPut: each -> '' on: aStream]]. + aStream nextPut: $!!; + cr! Item was added: + ----- Method: InternalTranslator>>generics (in category 'private') ----- + generics + ^generics ifNil: [generics := Dictionary new]! Item was added: + ----- Method: InternalTranslator>>isDomainLoaded: (in category 'accessing') ----- + isDomainLoaded: aDomainName + ^true + ! Item was added: + ----- Method: InternalTranslator>>loadFromFileNamed: (in category 'private store-retrieve') ----- + loadFromFileNamed: fileNameString + "Load translations from an external file" + + | stream | + [stream := FileStream readOnlyFileNamed: fileNameString. + self loadFromStream: stream] + ensure: [stream close]. + self changed: #translations. + self changed: #untranslated. + ! Item was added: + ----- Method: InternalTranslator>>loadFromRefStream: (in category 'private store-retrieve') ----- + loadFromRefStream: stream + "Load translations from an external file" + | loadedArray refStream | + refStream := ReferenceStream on: stream. + [loadedArray := refStream next] + ensure: [refStream close]. + self processExternalObject: loadedArray ! Item was added: + ----- Method: InternalTranslator>>loadFromStream: (in category 'private store-retrieve') ----- + loadFromStream: stream + "Load translations from an external file" + | header isFileIn | + header := '''Translation dictionary'''. + isFileIn := (stream next: header size) + = header. + stream reset. + isFileIn + ifTrue: [stream fileInAnnouncing: 'Loading ' translated, stream localName] + ifFalse: [self loadFromRefStream: stream]! Item was added: + ----- Method: InternalTranslator>>mergeTranslations: (in category 'private store-retrieve') ----- + mergeTranslations: newTranslations + "Merge a new set of translations into the exiting table. + Overwrites existing entries." + + newTranslations keysAndValuesDo: [:key :value | + self rawPhrase: (self class registeredPhraseFor: key) translation: value]. + self changed: #translations. + self changed: #untranslated.! Item was added: + ----- Method: InternalTranslator>>nextChunkPut:on: (in category 'fileIn/fileOut') ----- + nextChunkPut: anObject on: aStream + | i remainder terminator | + terminator := $!!. + remainder := anObject storeString. + [(i := remainder indexOf: terminator) = 0] + whileFalse: [aStream + nextPutAll: (remainder copyFrom: 1 to: i). + aStream nextPut: terminator. + "double imbedded terminators" + remainder := remainder copyFrom: i + 1 to: remainder size]. + aStream nextPutAll: remainder. + aStream nextPut: terminator; cr.! Item was added: + ----- Method: InternalTranslator>>phrase:translation: (in category 'translation') ----- + phrase: phraseString translation: translationString + self generics at: phraseString put: translationString asString. + self changed: #translations. + self changed: #untranslated.! Item was added: + ----- Method: InternalTranslator>>processExternalObject: (in category 'private store-retrieve') ----- + processExternalObject: anArray + "pivate - process the external object" + + "new format -> {translations. untranslated}" + + anArray second do: [:each | self class registerPhrase: each]. + + self mergeTranslations: anArray first! Item was added: + ----- Method: InternalTranslator>>rawPhrase:translation: (in category 'translation') ----- + rawPhrase: phraseString translation: translationString + self generics at: phraseString put: translationString asString. + ! Item was added: + ----- Method: InternalTranslator>>rawRemoveUntranslated: (in category 'translation') ----- + rawRemoveUntranslated: untranslated + + self class allKnownPhrases removeKey: untranslated ifAbsent: []. + self changed: #untranslated.! Item was added: + ----- Method: InternalTranslator>>removeTranslationFor: (in category 'translation') ----- + removeTranslationFor: phraseString + self generics removeKey: phraseString ifAbsent: []. + self changed: #translations. + self changed: #untranslated.! Item was added: + ----- Method: InternalTranslator>>removeUntranslated: (in category 'translation') ----- + removeUntranslated: untranslated + + self class allKnownPhrases removeKey: untranslated ifAbsent: []. + ! Item was added: + ----- Method: InternalTranslator>>saveToFileNamed: (in category 'private store-retrieve') ----- + saveToFileNamed: fileNameString + "save the receiver's translations to a file named fileNameString" + | stream | + "Set true if you need to save as binary" + false + ifTrue: [stream := ReferenceStream fileNamed: fileNameString. + stream nextPut: {self translations. self untranslated}. + stream close. + ^ self]. + stream := FileStream fileNamed: fileNameString. + [self fileOutOn: stream] + ensure: [stream close]! Item was added: + ----- Method: InternalTranslator>>scanFrom: (in category 'fileIn/fileOut') ----- + scanFrom: aStream + "Read a definition of dictionary. + Make sure current locale corresponds my locale id" + | aString newTranslations assoc currentPlatform | + newTranslations := Dictionary new. + currentPlatform := Locale currentPlatform. + [Locale + currentPlatform: (Locale localeID: id). + [aString := aStream nextChunk withSqueakLineEndings. + aString size > 0] + whileTrue: [assoc := Compiler evaluate: aString. + assoc value = '' + ifTrue: [self class registerPhrase: assoc key] + ifFalse: [newTranslations add: assoc]]] + ensure: [Locale currentPlatform: currentPlatform]. + self mergeTranslations: newTranslations! Item was added: + ----- Method: InternalTranslator>>translate:inDomain: (in category 'translation') ----- + translate: aString inDomain: aDomainName + | translator | + ^ self generics + at: aString + ifAbsent: [self localeID hasParent + ifTrue: [translator := self class cachedTranslations + at: self localeID parent + ifAbsent: [^ aString]. + translator translate: aString inDomain: aDomainName] + ifFalse: [aString]]! Item was added: + ----- Method: InternalTranslator>>translations (in category 'accessing') ----- + translations + ^self generics! Item was added: + ----- Method: InternalTranslator>>untranslated (in category 'accessing') ----- + untranslated + | translations | + translations := self translations. + ^self class allKnownPhrases reject: [:each | translations includesKey: each]! Item was added: + Object subclass: #Locale + instanceVariableNames: 'id shortDate longDate time decimalSymbol digitGrouping currencySymbol currencyNotation measurement offsetLocalToUTC offsetVMToUTC dstActive' + classVariableNames: 'Current CurrentPlatform KnownLocales LanguageSymbols LocaleChangeListeners PlatformEncodings Previous' + poolDictionaries: '' + category: 'System-Localization'! + + !Locale commentStamp: '<historical>' prior: 0! + Main comment stating the purpose of this class and relevant relationship to other classes. + + + +
http://www.w3.org/WAI/ER/IG/ert/iso639.htm
+
http://www.oasis-open.org/cover/iso639a.html
+ See also +
http://oss.software.ibm.com/cvs/icu/~checkout~/icuhtml/design/language_code…
+
http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.10
+ + ISO 3166 +
http://mitglied.lycos.de/buran/knowhow/codes/locales/
+ ! Item was added: + ----- Method: Locale class>>addLocalChangedListener: (in category 'notification') ----- + addLocalChangedListener: anObjectOrClass + self localeChangedListeners add: anObjectOrClass! Item was added: + ----- Method: Locale class>>clipboadInterpreter (in category 'accessing') ----- + clipboadInterpreter + ^NoConversionClipboardInterpreter new! Item was added: + ----- Method: Locale class>>current (in category 'accessing') ----- + current + "Current := nil" + Current ifNil: [ + Current := self determineCurrentLocale. + "Transcript show: 'Current locale: ' , Current localeID asString; cr"]. + ^Current! Item was added: + ----- Method: Locale class>>currentPlatform (in category 'accessing') ----- + currentPlatform + "CurrentPlatform := nil" + CurrentPlatform ifNil: [CurrentPlatform := self determineCurrentLocale]. + ^CurrentPlatform! Item was added: + ----- Method: Locale class>>currentPlatform: (in category 'accessing') ----- + currentPlatform: locale + CurrentPlatform := locale. + LanguageEnvironment startUp. + ! Item was added: + ----- Method: Locale class>>currentPlatform:during: (in category 'accessing') ----- + currentPlatform: locale during: aBlock + "Alter current language platform during a block" + | backupPlatform | + backupPlatform := self currentPlatform. + [self currentPlatform: locale. + aBlock value] + ensure: [self currentPlatform: backupPlatform]! Item was added: + ----- Method: Locale class>>defaultEncodingName: (in category 'platform specific') ----- + defaultEncodingName: languageSymbol + | encodings platformName osVersion | + platformName := SmalltalkImage current platformName. + osVersion := SmalltalkImage current getSystemAttribute: 1002. + encodings := self platformEncodings at: languageSymbol + ifAbsent: [self platformEncodings at: #default]. + encodings at: platformName ifPresent: [:encoding | ^encoding]. + encodings at: platformName , ' ' , osVersion + ifPresent: [:encoding | ^encoding]. + ^encodings at: #default! Item was added: + ----- Method: Locale class>>defaultInputInterpreter (in category 'platform specific') ----- + defaultInputInterpreter + | platformName osVersion | + platformName := SmalltalkImage current platformName. + osVersion := SmalltalkImage current getSystemAttribute: 1002. + (platformName = 'Win32' and: [osVersion = 'CE']) + ifTrue: [^NoInputInterpreter new]. + platformName = 'Win32' ifTrue: [^MacRomanInputInterpreter new]. + ^NoInputInterpreter new! Item was added: + ----- Method: Locale class>>determineCurrentLocale (in category 'private') ----- + determineCurrentLocale + "For now just return the default locale. + A smarter way would be to determine the current platforms default locale." + "Locale determineCurrentLocale" + + ^self new determineLocale! Item was added: + ----- Method: Locale class>>initKnownLocales (in category 'private') ----- + initKnownLocales + | locales | + locales := Dictionary new. + + "Init the locales for which we have translations" + InternalTranslator availableLanguageLocaleIDs do: [:id | + locales at: id put: (Locale new localeID: id)]. + ^locales! Item was added: + ----- Method: Locale class>>initialize (in category 'class initialization') ----- + initialize + "Locale initialize" + + Smalltalk addToStartUpList: Locale. + Preferences addPreference: #useLocale + categories: #('general') default: false + balloonHelp: 'Use the system locale to set the system language etc at startup'.! Item was added: + ----- Method: Locale class>>initializePlatformEncodings (in category 'class initialization') ----- + initializePlatformEncodings + "Locale initializePlatformEncodings" + + | platform | + PlatformEncodings isNil ifTrue: [ PlatformEncodings := Dictionary new ]. + + platform := PlatformEncodings at: 'default' ifAbsentPut: Dictionary new. + platform + at: 'default' put: 'iso8859-1'; + at: 'Win32 CE' put: 'utf-8'; + yourself. + + platform := PlatformEncodings at: 'ja' ifAbsentPut: Dictionary new. + platform + at: 'default' put: 'shift-jis'; + at: 'unix' put: 'euc-jp'; + at: 'Win32 CE' put: 'utf-8'; + yourself. + + platform := PlatformEncodings at: 'ko' ifAbsentPut: Dictionary new. + platform + at: 'default' put: 'euc-kr'; + at: 'Win32 CE' put: 'utf-8'; + yourself. + + platform := PlatformEncodings at: 'zh' ifAbsentPut: Dictionary new. + platform + at: 'default' put: 'gb2312'; + at: 'unix' put: 'euc-cn'; + at: 'Win32 CE' put: 'utf-8'; + yourself. + ! Item was added: + ----- Method: Locale class>>isoLanguage: (in category 'accessing') ----- + isoLanguage: isoLanguage + ^self isoLanguage: isoLanguage isoCountry: nil! Item was added: + ----- Method: Locale class>>isoLanguage:isoCountry: (in category 'accessing') ----- + isoLanguage: isoLanguage isoCountry: isoCountry + ^self localeID: (LocaleID isoLanguage: isoLanguage isoCountry: isoCountry)! Item was added: + ----- Method: Locale class>>isoLocale: (in category 'accessing') ----- + isoLocale: aString + ! Item was added: + ----- Method: Locale class>>knownLocales (in category 'private') ----- + knownLocales + "KnownLocales := nil" + ^KnownLocales ifNil: [KnownLocales := self initKnownLocales]! Item was added: + ----- Method: Locale class>>languageSymbol: (in category 'accessing') ----- + languageSymbol: languageSymbol + "Locale languageSymbol: #Deutsch" + + ^self isoLanguage: (LanguageSymbols at: languageSymbol)! Item was added: + ----- Method: Locale class>>localeChanged (in category 'notification') ----- + localeChanged + + #(#ParagraphEditor #BitEditor #FormEditor #StandardSystemController ) + do: [:key | Smalltalk + at: key + ifPresent: [:class | class initialize]]. + PartsBin localeChanged. + Project localeChanged. + PaintBoxMorph localeChanged. + ColorPickerMorph localeChanged. + Preferences localeChanged! Item was added: + ----- Method: Locale class>>localeChangedGently (in category 'notification') ----- + localeChangedGently + + #(#ParagraphEditor #BitEditor #FormEditor #StandardSystemController ) + do: [:key | Smalltalk + at: key + ifPresent: [:class | class initialize]]. + PartsBin localeChangedGently. + Project localeChangedGently. + PaintBoxMorph localeChangedGently. + ColorPickerMorph localeChangedGently. + Preferences localeChangedGently. + ! Item was added: + ----- Method: Locale class>>localeChangedListeners (in category 'notification') ----- + localeChangedListeners + ^LocaleChangeListeners ifNil: [LocaleChangeListeners := OrderedCollection new]! Item was added: + ----- Method: Locale class>>localeID: (in category 'accessing') ----- + localeID: id + ^self knownLocales at: id ifAbsentPut: [Locale new localeID: id]! Item was added: + ----- Method: Locale class>>migrateSystem (in category 'private') ----- + migrateSystem + "Locale migrateSystem" + "Do all the necessary operations to switch to the new Locale environment." + + LocaleChangeListeners := nil. + self + addLocalChangedListener: HandMorph; + addLocalChangedListener: Clipboard; + addLocalChangedListener: Vocabulary; + addLocalChangedListener: PartsBin; + addLocalChangedListener: Project; + addLocalChangedListener: PaintBoxMorph; + yourself! Item was added: + ----- Method: Locale class>>platformEncodings (in category 'class initialization') ----- + platformEncodings + PlatformEncodings isEmptyOrNil ifTrue: [ self initializePlatformEncodings ]. + ^PlatformEncodings + ! Item was added: + ----- Method: Locale class>>previous (in category 'accessing') ----- + previous + + ^ Previous + ! Item was added: + ----- Method: Locale class>>resetKnownLocales (in category 'private') ----- + resetKnownLocales + + KnownLocales := nil + ! Item was added: + ----- Method: Locale class>>startUp: (in category 'system startUp') ----- + startUp: resuming + | newID | + resuming ifFalse: [^self]. + (Preferences valueOfFlag: #useLocale) + ifTrue: [ + DateAndTime localTimeZone: (TimeZone + offset: (Duration minutes: Locale current offsetLocalToUTC) + name: 'Local Time' + abbreviation: 'LT'). + newID := self current determineLocaleID. + newID ~= LocaleID current + ifTrue: [self switchAndInstallFontToID: newID gently: true]]! Item was added: + ----- Method: Locale class>>stringForLanguageNameIs: (in category 'accessing') ----- + stringForLanguageNameIs: localeID + "Answer a string for a menu determining whether the given + symbol is the project's natural language" + ^ (self current localeID = localeID + ifTrue: ['<yes>'] + ifFalse: ['<no>']) + , localeID displayName! Item was added: + ----- Method: Locale class>>switchAndInstallFontToID: (in category 'accessing') ----- + switchAndInstallFontToID: localeID + "Locale switchAndInstallFontToID: (LocaleID isoLanguage: 'de')" + | locale | + locale := Locale localeID: localeID. + locale languageEnvironment isFontAvailable + ifFalse: [(self confirm: 'This language needs additional fonts. + Do you want to install the fonts?' translated) + ifTrue: [locale languageEnvironment installFont] + ifFalse: [^ self]]. + self + switchTo: locale! Item was added: + ----- Method: Locale class>>switchAndInstallFontToID:gently: (in category 'accessing') ----- + switchAndInstallFontToID: localeID gently: gentlyFlag + | locale result env envFound ret fontInImage menu | + "Logic: + - not in Rainbow, + - if the font is in the image, use the font. + - if the font is not in the image, + - ask to choose: + - load font + - try to enable pango, if pango is available + - or cancel. + - if the previous step fails, notify the user that you cannot switch to the language. + Details: + - how to check non-pango font is available: + - if the language environment for the locale doesn't exist, the font is not available. + - if font loading fails, it is not available. + - how to check if the language environment doesn't exist: + - if the locales languageEnvironment is Latin1 but the locale isn't it is not available. + " + locale := Locale localeID: localeID. + env := locale languageEnvironment. + result := true. + envFound := (Latin1Environment supportedLanguages includes: locale isoLanguage) or: [(env isMemberOf: Latin1Environment) not]. + fontInImage := envFound and: [env isFontAvailable]. + fontInImage ifFalse: [ + menu := MenuMorph new. + menu defaultTarget: menu. + envFound ifTrue: [menu add: 'load font' translated selector: #modalSelection: argument: #loadFont]. + menu add: 'cancel' translated selector: #modalSelection: argument: #cancel. + menu addTitle: 'This language needs additional fonts. + Do you want to install the fonts?' translated. + ret := menu invokeModal. + ret = #loadFont ifTrue: [result := env installFont. result ifTrue: [StrikeFont setupDefaultFallbackTextStyle]]. + (ret ~~ #loadFont and: [ret ~~ #enablePango]) ifTrue: [result := false]]. + result ifFalse: [self inform: 'Cannot load additional fonts' translated] ifTrue: [self switchTo: locale gently: gentlyFlag]. + ! Item was added: + ----- Method: Locale class>>switchTo: (in category 'accessing') ----- + switchTo: locale + self switchTo: locale gently: false. + ! Item was added: + ----- Method: Locale class>>switchTo:gently: (in category 'accessing') ----- + switchTo: locale gently: gentlyFlag + "Locale switchTo: (Locale isoLanguage: 'de')" + | availableID | + availableID := (NaturalLanguageTranslator availableForLocaleID: locale localeID) localeID. + Current localeID = availableID + ifFalse: [Previous := Current. + CurrentPlatform := Current := Locale localeID: availableID. + NaturalLanguageTranslator localeChanged. + gentlyFlag ifTrue: [self localeChangedGently] ifFalse: [self localeChanged]]! Item was added: + ----- Method: Locale class>>switchToID: (in category 'accessing') ----- + switchToID: localeID + "Locale switchToID: (LocaleID isoLanguage: 'de') " + + self switchTo: (Locale localeID: localeID)! Item was added: + ----- Method: Locale>>determineLocale (in category 'accessing') ----- + determineLocale + self localeID: self determineLocaleID! Item was added: + ----- Method: Locale>>determineLocaleID (in category 'accessing') ----- + determineLocaleID + "Locale current determineLocaleID" + | isoLang isoCountry | + isoLang := self fetchISO2Language + ifNil: [^ self localeID]. + isoCountry := self fetchISOCountry + ifNil: [^ LocaleID isoLanguage: isoLang]. + ^ LocaleID isoLanguage: isoLang isoCountry: isoCountry! Item was added: + ----- Method: Locale>>fetchISO2Language (in category 'private') ----- + fetchISO2Language + "Locale current fetchISO2Language" + | lang isoLang | + lang := self primLanguage. + lang ifNil: [^nil]. + lang := lang copyUpTo: 0 asCharacter. + lang size == 2 + ifTrue: [^lang]. + isoLang := ISOLanguageDefinition iso3LanguageDefinition: lang. + ^isoLang + ifNil: [nil] + ifNotNil: [isoLang iso2]! Item was added: + ----- Method: Locale>>fetchISOCountry (in category 'private') ----- + fetchISOCountry + "Locale current fetchISOCountry" + | countryCode | + countryCode := self primCountry + ifNil: [^ nil]. + ^ countryCode copyUpTo: 0 asCharacter! Item was added: + ----- Method: Locale>>iconForNativeLanguage (in category 'accessing') ----- + iconForNativeLanguage + + ^ (NaturalLanguageFormTranslator localeID: self localeID) translate: 'LanguageNameInNativeLanguage'. + ! Item was added: + ----- Method: Locale>>isoCountry (in category 'accessing') ----- + isoCountry + ^self localeID isoCountry! Item was added: + ----- Method: Locale>>isoLanguage (in category 'accessing') ----- + isoLanguage + ^self localeID isoLanguage! Item was added: + ----- Method: Locale>>isoLocale (in category 'accessing') ----- + isoLocale + "<language>-<country>" + ^self isoCountry + ifNil: [self isoLanguage] + ifNotNil: [self isoLanguage , '-' , self isoCountry]! Item was added: + ----- Method: Locale>>languageEnvironment (in category 'accessing') ----- + languageEnvironment + ^LanguageEnvironment localeID: self localeID! Item was added: + ----- Method: Locale>>localeID (in category 'accessing') ----- + localeID + ^id! Item was added: + ----- Method: Locale>>localeID: (in category 'accessing') ----- + localeID: anID + id := anID! Item was added: + ----- Method: Locale>>offsetLocalToUTC (in category 'accessing') ----- + offsetLocalToUTC + ^self primTimezone! Item was added: + ----- Method: Locale>>primCountry (in category 'system primitives') ----- + primCountry + "Returns string with country tag according to ISO 639" + <primitive: 'primitiveCountry' module: 'LocalePlugin'> + ^'US'! Item was added: + ----- Method: Locale>>primCurrencyNotation (in category 'system primitives') ----- + primCurrencyNotation + "Returns boolean if symbol is pre- (true) or post-fix (false)" + <primitive: 'primitiveCurrencyNotation' module: 'LocalePlugin'> + ^true! Item was added: + ----- Method: Locale>>primCurrencySymbol (in category 'system primitives') ----- + primCurrencySymbol + "Returns string with currency symbol" + <primitive: 'primitiveCurrencySymbol' module:'LocalePlugin'> + ^'$'! Item was added: + ----- Method: Locale>>primDST (in category 'system primitives') ----- + primDST + "Returns boolean if DST (daylight saving time) is active or not" + <primitive:'primitiveDaylightSavings' module: 'LocalePlugin'> + ^false! Item was added: + ----- Method: Locale>>primDecimalSymbol (in category 'system primitives') ----- + primDecimalSymbol + "Returns string with e.g. '.' or ','" + <primitive:'primitiveDecimalSymbol' module: 'LocalePlugin'> + ^'.'! Item was added: + ----- Method: Locale>>primDigitGrouping (in category 'system primitives') ----- + primDigitGrouping + "Returns string with e.g. '.' or ',' (thousands etc)" + <primitive:'primitiveDigitGroupingSymbol' module: 'LocalePlugin'> + ^','! Item was added: + ----- Method: Locale>>primLanguage (in category 'system primitives') ----- + primLanguage + "returns string with language tag according to ISO 639" + <primitive:'primitiveLanguage' module: 'LocalePlugin'> + ^'en' + + ! Item was added: + ----- Method: Locale>>primLongDateFormat (in category 'system primitives') ----- + primLongDateFormat + "Returns the long date format + d day, m month, y year, + double symbol is null padded, single not padded (m=6, mm=06) + dddd weekday + mmmm month name" + <primitive:'primitiveLongDateFormat' module: 'LocalePlugin'> + ^'dddd, mmmm d, yyyy'! Item was added: + ----- Method: Locale>>primMeasurement (in category 'system primitives') ----- + primMeasurement + "Returns boolean denoting metric(true) or imperial(false)." + <primitive:'primitiveMeasurementMetric' module: 'LocalePlugin'> + ^true + ! Item was added: + ----- Method: Locale>>primShortDateFormat (in category 'system primitives') ----- + primShortDateFormat + "Returns the short date format + d day, m month, y year, + double symbol is null padded, single not padded (m=6, mm=06) + dddd weekday + mmmm month name" + <primitive:'primitiveShortDateFormat' module: 'LocalePlugin'> + ^'m/d/yy'! Item was added: + ----- Method: Locale>>primTimeFormat (in category 'system primitives') ----- + primTimeFormat + "Returns string time format + Format is made up of + h hour (h 12, H 24), m minute, s seconds, x (am/pm String) + double symbol is null padded, single not padded (h=6, hh=06)" + <primitive:'primitiveTimeFormat' module: 'LocalePlugin'> + ^'h:mmx'! Item was added: + ----- Method: Locale>>primTimezone (in category 'system primitives') ----- + primTimezone + "The offset from UTC in minutes, with positive offsets being towards the east. + (San Francisco is in UTC -07*60 and Paris is in UTC +02*60 when daylight savings is in effect)." + <primitive:'primitiveTimezoneOffset' module: 'LocalePlugin'> + ^0! Item was added: + ----- Method: Locale>>primVMOffsetToUTC (in category 'system primitives') ----- + primVMOffsetToUTC + "Returns the offset in minutes between the VM and UTC. + If the VM does not support UTC times, this is 0. + Also gives us backward compatibility with old VMs as the primitive will fail and we then can return 0." + <primitive:'primitiveVMOffsetToUTC' module: 'LocalePlugin'> + ^0! Item was added: + ----- Method: Locale>>printOn: (in category 'accessing') ----- + printOn: aStream + super printOn: aStream. + aStream nextPutAll: '(' , id printString , ')'! Item was added: + Object subclass: #LocaleID + instanceVariableNames: 'isoLanguage isoCountry' + classVariableNames: '' + poolDictionaries: '' + category: 'System-Localization'! Item was added: + ----- Method: LocaleID class>>current (in category 'accessing') ----- + current + ^Locale current localeID! Item was added: + ----- Method: LocaleID class>>isoLanguage: (in category 'instance creation') ----- + isoLanguage: langString + ^self isoLanguage: langString isoCountry: nil! Item was added: + ----- Method: LocaleID class>>isoLanguage:isoCountry: (in category 'instance creation') ----- + isoLanguage: langString isoCountry: countryStringOrNil + ^self new isoLanguage: langString isoCountry: countryStringOrNil! Item was added: + ----- Method: LocaleID class>>isoString: (in category 'instance creation') ----- + isoString: isoString + "Parse the isoString (<language>-<country>) into its components and return the matching LocaleID" + "LocaleID isoString: 'en' " + "LocaleID isoString: 'en-us' " + + | parts language country | + parts := isoString findTokens: #($- ). + language := parts first. + parts size > 1 + ifTrue: [country := parts second]. + ^self isoLanguage: language isoCountry: country! Item was added: + ----- Method: LocaleID class>>posixName: (in category 'instance creation') ----- + posixName: aString + ^ self + isoString: (aString copyReplaceAll: ':=' with: '-')! Item was added: + ----- Method: LocaleID class>>previous (in category 'accessing') ----- + previous + ^Locale previous localeID! Item was added: + ----- Method: LocaleID>>= (in category 'comparing') ----- + = anotherObject + self class == anotherObject class + ifFalse: [^false]. + ^self isoLanguage = anotherObject isoLanguage + and: [self isoCountry = anotherObject isoCountry]! Item was added: + ----- Method: LocaleID>>displayCountry (in category 'accessing') ----- + displayCountry + ^(ISOLanguageDefinition iso2Countries at: self isoCountry asUppercase ifAbsent: [ self isoCountry ]) ! Item was added: + ----- Method: LocaleID>>displayLanguage (in category 'accessing') ----- + displayLanguage + | language | + language := (ISOLanguageDefinition iso2LanguageTable + at: self isoLanguage + ifAbsent: [^ self isoLanguage]) language. + ^ self isoCountry + ifNil: [language] + ifNotNil: [language , ' (' , self displayCountry , ')']! Item was added: + ----- Method: LocaleID>>displayName (in category 'accessing') ----- + displayName + "Answer a proper name to represent the receiver in GUI. + + The wording is provided by translations of the magic value + '<language display name>'. + + 'English' -> 'English' + 'German' -> 'Deutsch' + " + | magicPhrase translatedMagicPhrase | + magicPhrase := '<language display name>'. + translatedMagicPhrase := GetTextTranslator translateWithoutLoading: magicPhrase toLocaleID: self. + ^ translatedMagicPhrase = magicPhrase + ifTrue: [self displayLanguage] + ifFalse: [translatedMagicPhrase]! Item was added: + ----- Method: LocaleID>>hasParent (in category 'testing') ----- + hasParent + ^self isoCountry notNil! Item was added: + ----- Method: LocaleID>>hash (in category 'comparing') ----- + hash + ^self isoLanguage hash bitXor: self isoCountry hash! Item was added: + ----- Method: LocaleID>>isoCountry (in category 'accessing') ----- + isoCountry + ^isoCountry! Item was added: + ----- Method: LocaleID>>isoLanguage (in category 'accessing') ----- + isoLanguage + ^isoLanguage! Item was added: + ----- Method: LocaleID>>isoLanguage:isoCountry: (in category 'initialize') ----- + isoLanguage: langString isoCountry: countryStringOrNil + isoLanguage := langString. + isoCountry := countryStringOrNil! Item was added: + ----- Method: LocaleID>>isoString (in category 'accessing') ----- + isoString + ^self asString! Item was added: + ----- Method: LocaleID>>parent (in category 'accessing') ----- + parent + ^self class isoLanguage: self isoLanguage! Item was added: + ----- Method: LocaleID>>posixName (in category 'printing') ----- + posixName + "(LocaleID isoString: 'es-MX') posixName" + "(LocaleID isoString: 'es') posixName" + "language[_territory]" + ^ self isoCountry + ifNil: [self isoLanguage] + ifNotNil: [self isoLanguage , ':=' , self isoCountry]! Item was added: + ----- Method: LocaleID>>printOn: (in category 'printing') ----- + printOn: stream + "<language>-<country>" + stream nextPutAll: self isoLanguage. + self isoCountry + ifNotNil: [stream nextPut: $-; nextPutAll: self isoCountry]! Item was added: + ----- Method: LocaleID>>storeOn: (in category 'printing') ----- + storeOn: aStream + aStream nextPut: $(. + aStream nextPutAll: self class name. + aStream nextPutAll: ' isoString: '. + aStream nextPutAll: '''' , self printString , ''''. + aStream nextPut: $). + ! Item was added: + ----- Method: LocaleID>>translator (in category 'accessing') ----- + translator + ^ InternalTranslator localeID: self ! Item was added: + Object subclass: #NaturalLanguageFormTranslator + instanceVariableNames: 'id generics' + classVariableNames: 'CachedTranslations' + poolDictionaries: '' + category: 'System-Localization'! Item was added: + ----- Method: NaturalLanguageFormTranslator class>>bitmapForJapanese (in category 'as yet unclassified') ----- + bitmapForJapanese + + ^ (Form + extent: 54@17 + depth: 16 + fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65536 0 1 65537 65537 65537 65537 0 0 0 0 1 0 0 0 0 65537 65537 1 65537 65537 65536 1 0 0 0 1 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 65536 0 0 65536 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 1 65537 65537 65536 1 0 0 0 1 0 0 65536 0 0 1 0 0 0 1 0 1 65537 65537 65537 65537 65537 65537 0 0 0 1 65537 65537 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 65537 65536 0 0 0 65537 65537 0 65536 1 0 0 0 65536 1 0 0 0 1 65537 65537 65537 65537 0 0 0 1 1 1 0 0 0 0 0 0 65536 1 0 0 0 65536 1 0 0 0 1 0 0 0 1 0 0 0 1 1 1 0 0 0 65537 65537 65537 65537 65537 65537 0 0 65536 1 0 0 0 1 0 0 0 1 0 0 0 65536 1 0 65536 0 0 0 0 0 0 0 0 0 0 65536 1 0 0 0 1 0 0 0 1 0 0 1 0 1 0 1 0 0 65537 65537 1 65537 65537 65536 0 0 65536 1 0 0 0 1 0 0 0 1 0 0 65536 65537 65537 65537 65536 65536 0 65536 1 1 0 0 65536 0 0 65536 0 65536 0 0 1 0 0 0 1 0 1 0 0 1 0 0 1 0 65536 1 1 0 0 65536 0 1 0 0 65536 0 0 1 65537 65537 65537 65537 0 0 0 0 1 0 0 0 0 65537 65537 1 65537 65537 65536 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 65536 0 0 0 65536 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0) + offset: 0@0)! Item was added: + ----- Method: NaturalLanguageFormTranslator class>>cachedTranslations (in category 'accessing') ----- + cachedTranslations + "CachedTranslations := nil" + ^CachedTranslations ifNil: [CachedTranslations := Dictionary new]! Item was added: + ----- Method: NaturalLanguageFormTranslator class>>cleanUp (in category 'class initialization') ----- + cleanUp + "Flush caches" + + CachedTranslations := nil! Item was added: + ----- Method: NaturalLanguageFormTranslator class>>initializeJapaneseBitmap (in category 'as yet unclassified') ----- + initializeJapaneseBitmap + + (self localeID: (LocaleID isoString: 'ja')) name: 'LanguageNameInNativeLanguage' form: self bitmapForJapanese. + ! Item was added: + ----- Method: NaturalLanguageFormTranslator class>>isoLanguage: (in category 'accessing') ----- + isoLanguage: isoLanguage + "Return the generic language translator as there is no information about the country code" + + ^self isoLanguage: isoLanguage isoCountry: nil! Item was added: + ----- Method: NaturalLanguageFormTranslator class>>isoLanguage:isoCountry: (in category 'accessing') ----- + isoLanguage: isoLanguage isoCountry: isoCountry + ^self localeID: (LocaleID isoLanguage: isoLanguage isoCountry: isoCountry)! Item was added: + ----- Method: NaturalLanguageFormTranslator class>>loadFormsFrom: (in category 'i/o') ----- + loadFormsFrom: aStream + + | rr pair inst | + rr := ReferenceStream on: aStream. + pair := rr next. + inst := self localeID: (LocaleID isoString: pair first). + pair second associationsDo: [:assoc | + inst name: assoc key form: assoc value. + ]. + ^ inst. + ! Item was added: + ----- Method: NaturalLanguageFormTranslator class>>localeID: (in category 'accessing') ----- + localeID: localeID + ^ self cachedTranslations + at: localeID + ifAbsentPut: [self new localeID: localeID]! Item was added: + ----- Method: NaturalLanguageFormTranslator>>generics (in category 'accessing') ----- + generics + ^generics ifNil: [generics := Dictionary new]! Item was added: + ----- Method: NaturalLanguageFormTranslator>>localeID (in category 'accessing') ----- + localeID + ^id! Item was added: + ----- Method: NaturalLanguageFormTranslator>>localeID: (in category 'accessing') ----- + localeID: anID + id := anID! Item was added: + ----- Method: NaturalLanguageFormTranslator>>name:form: (in category 'accessing') ----- + name: formName form: translatedForm + self generics at: formName put: translatedForm. + ! Item was added: + ----- Method: NaturalLanguageFormTranslator>>saveFormsOn: (in category 'i/o') ----- + saveFormsOn: aStream + + | rr | + rr := ReferenceStream on: aStream. + rr nextPut: {id isoString. generics}. + rr close. + ! Item was added: + ----- Method: NaturalLanguageFormTranslator>>translate: (in category 'utilities') ----- + translate: aString + + ^ (self generics + at: aString ifAbsent: [nil]) deepCopy. + + "Do you like to write 'form ifNotNil: [form deepCopy]'?" + ! Item was added: + Object subclass: #NaturalLanguageTranslator + instanceVariableNames: 'id' + classVariableNames: 'Translators' + poolDictionaries: '' + category: 'System-Localization'! + + !NaturalLanguageTranslator commentStamp: '<historical>' prior: 0! + abstract class of natural language translator. + Class side manages and holds loaded instances of concrete classes.! Item was added: + ----- Method: NaturalLanguageTranslator class>>allKnownPhrases (in category 'private') ----- + allKnownPhrases + ^AllKnownPhrases ifNil: [AllKnownPhrases := Dictionary new: 2051]! Item was added: + ----- Method: NaturalLanguageTranslator class>>availableForLocaleID: (in category 'accessing') ----- + availableForLocaleID: localeID + "Answer available locale ID. + If translator is not found for correct locale ID, then isoLanguage is + attempted for the key." + ^ self translators + at: localeID + ifAbsent: [localeID hasParent + ifTrue: [self translators + at: localeID parent + ifAbsent: [self default]] + ifFalse: [self default]]! Item was added: + ----- Method: NaturalLanguageTranslator class>>availableLanguageLocaleIDs (in category 'accessing') ----- + availableLanguageLocaleIDs + "Return the locale ids for the currently available languages. + Meaning those which either internally or externally have + translations available." + "NaturalLanguageTranslator availableLanguageLocaleIDs" + ^ self translators values collect:[:each | each localeID]! Item was added: + ----- Method: NaturalLanguageTranslator class>>cachedTranslations (in category 'private') ----- + cachedTranslations + "CachedTranslations := nil" + ^CachedTranslations ifNil: [CachedTranslations := Dictionary new]! Item was added: + ----- Method: NaturalLanguageTranslator class>>cleanUp (in category 'class initialization') ----- + cleanUp + "Flush caches" + + CachedTranslations := nil. + AllKnownPhrases := nil.! Item was added: + ----- Method: NaturalLanguageTranslator class>>cleanUpCache (in category 'private') ----- + cleanUpCache + "NaturalLanguageTranslator cleanUpCache" + + self cachedTranslations keys do: [:key | + key isoLanguage size > 2 ifTrue: [self cachedTranslations removeKey: key]]! Item was added: + ----- Method: NaturalLanguageTranslator class>>current (in category 'accessing') ----- + current + ^ self availableForLocaleID: LocaleID current! Item was added: + ----- Method: NaturalLanguageTranslator class>>default (in category 'accessing') ----- + default + "Answer translator for backstop" + "self default translate: 'test'" + ^ self new + localeID: (LocaleID isoLanguage: 'en')! Item was added: + ----- Method: NaturalLanguageTranslator class>>directoryForLanguage:country:create: (in category 'private loading') ----- + directoryForLanguage: isoLanguage country: isoCountry create: createDir + "Try to locate the <prefs>/locale/<language>{/<country>} folder. + If createDir is set, create the path down to country or language, depending on wether it's specified.. + Return the directory for country or language depending on specification. + If neither exists, nil" + + "NaturalLanguageTranslator directoryForLanguage: 'es' country: nil create: true" + "NaturalLanguageTranslator directoryForLanguage: 'de' country: 'DE' create: true" + "NaturalLanguageTranslator directoryForLanguage: 'en' country: 'US' create: false" + "NaturalLanguageTranslator directoryForLanguage: 'en' country: nil create: true" + + "If this fails, there is nothing we can do about it here" + | localeDir countryDir languageDir | + localeDir := self localeDirCreate: createDir. + localeDir ifNil: [^nil]. + + isoCountry ifNil: [ + languageDir := localeDir directoryNamed: isoLanguage. + createDir + ifTrue: [languageDir assureExistence]. + ^languageDir exists + ifTrue: [languageDir] + ifFalse: [nil]]. + + countryDir := languageDir directoryNamed: isoCountry. + createDir + ifTrue: [countryDir assureExistence]. + + ^countryDir exists + ifTrue: [countryDir] + ifFalse: [nil]! Item was added: + ----- Method: NaturalLanguageTranslator class>>directoryForLocaleID:create: (in category 'private loading') ----- + directoryForLocaleID: localeID create: createDir + "Try to locate the <prefs>/locale/<language>{/<country>} folder. + If createDir is set, create the path down to country or language, depending on locale. + Return the directory for country or language depending on locale. + If neither exists, nil" + + "NaturalLanguageTranslator directoryForLanguage: 'de' country: nil readOnly: true" + "NaturalLanguageTranslator directoryForLanguage: 'de' country: 'DE' readOnly: true" + "NaturalLanguageTranslator directoryForLanguage: 'en' country: 'US' readOnly: false" + "NaturalLanguageTranslator directoryForLanguage: 'en' country: nil readOnly: true" + + ^self directoryForLanguage: localeID isoLanguage country: localeID isoCountry create: createDir! Item was added: + ----- Method: NaturalLanguageTranslator class>>domainRegistered: (in category 'accessing') ----- + domainRegistered: aDomainName + "notify that new TextDomain is registered" + self translators do: [:each | each domainRegistered: aDomainName]! Item was added: + ----- Method: NaturalLanguageTranslator class>>domainUnregistered: (in category 'accessing') ----- + domainUnregistered: aDomainName + "notify that new TextDomain is unregistered" + self translators do: [:each | each domainUnregistered: aDomainName]! Item was added: + ----- Method: NaturalLanguageTranslator class>>fileReaderServicesForFile:suffix: (in category 'file-services') ----- + fileReaderServicesForFile: fullName suffix: suffix + "Answer the file services associated with given file" + ^ (suffix = self translationSuffix) | (suffix = '*') + ifTrue: [{self serviceMergeLanguageTranslations}] + ifFalse: [#()]! Item was added: + ----- Method: NaturalLanguageTranslator class>>initialize (in category 'class initialization') ----- + initialize + Smalltalk addToStartUpList: NaturalLanguageTranslator after: FileDirectory. + ! Item was added: + ----- Method: NaturalLanguageTranslator class>>isoLanguage: (in category 'accessing') ----- + isoLanguage: isoLanguage + "Return the generic language translator as there is no information about the country code" + + ^self isoLanguage: isoLanguage isoCountry: nil! Item was added: + ----- Method: NaturalLanguageTranslator class>>isoLanguage:isoCountry: (in category 'accessing') ----- + isoLanguage: isoLanguage isoCountry: isoCountry + ^self localeID: (LocaleID isoLanguage: isoLanguage isoCountry: isoCountry)! Item was added: + ----- Method: NaturalLanguageTranslator class>>loadAvailableExternalLocales (in category 'private loading') ----- + loadAvailableExternalLocales + "private - register locales IDs based on the content of the <prefs>/locale/ directory" + | localeDir | + localeDir := self localeDirCreate: false. + localeDir ifNil: [^ #()]. + localeDir directoryNames + do: [:langDirName | + | langDir | + langDir := localeDir directoryNamed: langDirName. + (langDir fileNamesMatching: '*.' , self translationSuffix) + ifNotEmpty: [self loadTranslatorForIsoLanguage: langDirName isoCountry: nil]. + langDir directoryNames + do: [:countryDirName | + | countryDir | + countryDir := langDir directoryNamed: countryDirName. + (countryDir fileNamesMatching: '*.' , self translationSuffix) + ifNotEmpty: [self loadTranslatorForIsoLanguage: langDirName isoCountry: countryDirName] + ] + ]. + ! Item was added: + ----- Method: NaturalLanguageTranslator class>>loadAvailableLocales (in category 'private loading') ----- + loadAvailableLocales + "This loads the default locale and all external locales" + + | defaultID | + defaultID := LocaleID current. + self cachedTranslations at: defaultID ifAbsent: [self localeID: defaultID]. + self loadAvailableExternalLocales.! Item was added: + ----- Method: NaturalLanguageTranslator class>>loadExternalTranslationsFor: (in category 'private loading') ----- + loadExternalTranslationsFor: translator + "Try to load translations from external external files. + The files are located in the <prefs>/locale/<language>{/<country>} folder. + There can be more than one file for each location, so applications can install their own partial translation tables. All files in the specific folder are loaded." + + | translationDir | + translationDir := self directoryForLocaleID: translator localeID create: false. + translationDir ifNil: [ ^nil ]. + (translationDir fileNamesMatching: '*.' , self translationSuffix) + do: [:fileName | translator loadFromFileNamed: (translationDir fullNameFor: fileName)]! Item was added: + ----- Method: NaturalLanguageTranslator class>>loadForLocaleIsoString:fromGzippedMimeLiteral: (in category 'file-services') ----- + loadForLocaleIsoString: localeString fromGzippedMimeLiteral: mimeString + "merge the translation from the mime literal." + | stream localeID translator gs rbStream s currentPlatform | + s := Base64MimeConverter mimeDecodeToBytes: mimeString readStream. + s reset. + gs := GZipReadStream on: s. + rbStream := MultiByteBinaryOrTextStream with: gs contents asString. + rbStream converter: UTF8TextConverter new. + rbStream reset. + localeID := LocaleID isoString: localeString. + currentPlatform := Locale currentPlatform. + [Locale + currentPlatform: (Locale localeID: localeID). + stream := ReadStream on: rbStream contents] + ensure: [Locale currentPlatform: currentPlatform]. + translator := self localeID: localeID. + translator loadFromStream: stream. + LanguageEnvironment resetKnownEnvironments! Item was added: + ----- Method: NaturalLanguageTranslator class>>loadTranslatorForIsoLanguage:isoCountry: (in category 'private loading') ----- + loadTranslatorForIsoLanguage: isoLanguage isoCountry: isoCountry + "private - load the translations from <prefs>/locale/ directory + the procedure is to assure the existence of a translator for the + given language/country and then load the external translations for this translator" + + | translator | + translator := self localeID: (LocaleID isoLanguage: isoLanguage isoCountry: isoCountry). + + self loadExternalTranslationsFor: translator! Item was added: + ----- Method: NaturalLanguageTranslator class>>localeChanged (in category 'accessing') ----- + localeChanged + "notify some project starts to use this locale. + this facility may use the event to load translation data dynamically" + self current setCurrent + ! Item was added: + ----- Method: NaturalLanguageTranslator class>>localeDirCreate: (in category 'private loading') ----- + localeDirCreate: createDir + "Try to locate the <prefs>/locale/ folder. + If createDir is set, try to create the path. + If it doesn't exist, return nil" + + "If this fails, there is nothing we can do about it here" + | prefDir localeDir | + (createDir not + and: [ExternalSettings preferenceDirectory isNil]) + ifTrue: [^ nil]. + + prefDir := ExternalSettings assuredPreferenceDirectory. + prefDir exists + ifFalse: [^nil]. + + + localeDir := prefDir directoryNamed: 'locale'. + createDir + ifTrue: [localeDir assureExistence]. + ^localeDir exists + ifTrue: [localeDir] + ifFalse: [nil]! Item was added: + ----- Method: NaturalLanguageTranslator class>>localeID: (in category 'accessing') ----- + localeID: localeID + ^ self cachedTranslations + at: localeID + ifAbsentPut: [self new localeID: localeID]! Item was added: + ----- Method: NaturalLanguageTranslator class>>mergeTranslationFileNamed: (in category 'file-services') ----- + mergeTranslationFileNamed: fileFullNameString + "merge the translation in the file named fileFullNameString" + + FileStream readOnlyFileNamed: fileFullNameString do: [:stream | + | localeID translator | + localeID := LocaleID isoString: stream localName sansPeriodSuffix. + translator := self localeID: localeID. + translator loadFromStream: stream]. + LanguageEnvironment resetKnownEnvironments. + + ! Item was added: + ----- Method: NaturalLanguageTranslator class>>privateStartUp (in category 'class initialization') ----- + privateStartUp + self resetCaches. + GetTextTranslator privateStartUp. + InternalTranslator privateStartUp. + self localeChanged.! Item was added: + ----- Method: NaturalLanguageTranslator class>>registerPhrase: (in category 'private') ----- + registerPhrase: phrase + "Using a Dictionary so we can lookup existing string instead of creating needless copies when loading a translation." + self allKnownPhrases at: phrase put: phrase! Item was added: + ----- Method: NaturalLanguageTranslator class>>registeredPhraseFor: (in category 'private') ----- + registeredPhraseFor: phrase + "Using a Dictionary so we can lookup existing string instead of creating needless copies when loading a translation." + ^self allKnownPhrases at: phrase ifAbsentPut: [phrase]! Item was added: + ----- Method: NaturalLanguageTranslator class>>removeLocaleID: (in category 'accessing') ----- + removeLocaleID: localeID + "self removeLocaleID: (LocaleID isoString: 'ja-kids')" + ^ self translators + removeKey: localeID + ifAbsent: []! Item was added: + ----- Method: NaturalLanguageTranslator class>>resetCaches (in category 'class initialization') ----- + resetCaches + Translators := nil.! Item was added: + ----- Method: NaturalLanguageTranslator class>>serviceMergeLanguageTranslations (in category 'file-services') ----- + serviceMergeLanguageTranslations + "Answer a service for merging of translation files" + ^ SimpleServiceEntry + provider: self + label: 'merge the translation file' + selector: #mergeTranslationFileNamed: + description: 'merge the translation file into the language named like the file' + buttonLabel: 'merge'! Item was added: + ----- Method: NaturalLanguageTranslator class>>services (in category 'file-services') ----- + services + "Answer potential file services associated with this class" + ^ {self serviceMergeLanguageTranslations}! Item was added: + ----- Method: NaturalLanguageTranslator class>>startUp: (in category 'class initialization') ----- + startUp: resuming + resuming + ifFalse: [^ self]. + self privateStartUp.! Item was added: + ----- Method: NaturalLanguageTranslator class>>translate:toLocaleID: (in category 'translation') ----- + translate: aString toLocaleID: localeID + "translate for default domain" + ^ (self availableForLocaleID: localeID) + translate: aString! Item was added: + ----- Method: NaturalLanguageTranslator class>>translate:toLocaleID:inDomain: (in category 'translation') ----- + translate: aString toLocaleID: localeID inDomain: aDomainName + ^ (self availableForLocaleID: localeID) + translate: aString inDomain: aDomainName! Item was added: + ----- Method: NaturalLanguageTranslator class>>translateWithoutLoading:toLocaleID: (in category 'translation') ----- + translateWithoutLoading: aString toLocaleID: localeID + "translate for default domain" + ^self translateWithoutLoading: aString toLocaleID: localeID inDomain: TextDomainManager defaultDomain. + ! Item was added: + ----- Method: NaturalLanguageTranslator class>>translateWithoutLoading:toLocaleID:inDomain: (in category 'translation') ----- + translateWithoutLoading: aString toLocaleID: localeID inDomain: aDomainName + "try to translate with small footprint: + if GetTextTranslator hasn't loaded MO, try to use InternalTranslator. + if InternalTranslator isn't available, then actually load MO and use it" + | translator | + translator := self availableForLocaleID: localeID. + (translator isDomainLoaded: aDomainName) ifFalse: [ + (InternalTranslator availableLanguageLocaleIDs includes: localeID) + ifTrue: [translator := InternalTranslator localeID: localeID]. + ]. + ^translator translate: aString inDomain: aDomainName! Item was added: + ----- Method: NaturalLanguageTranslator class>>translationSuffix (in category 'private') ----- + translationSuffix + ^'translation'! Item was added: + ----- Method: NaturalLanguageTranslator class>>translators (in category 'accessing') ----- + translators + ^ Translators ifNil: [Translators := Dictionary new] ! Item was added: + ----- Method: NaturalLanguageTranslator>>atRandom (in category 'accessing') ----- + atRandom + + self subclassResponsibility. + ! Item was added: + ----- Method: NaturalLanguageTranslator>>checkPhrase:translation: (in category 'translation') ----- + checkPhrase: phrase translation: translation! Item was added: + ----- Method: NaturalLanguageTranslator>>defaultBackgroundColor (in category 'user interface') ----- + defaultBackgroundColor + "answer the receiver's defaultBackgroundColor for views" + ^ Color cyan! Item was added: + ----- Method: NaturalLanguageTranslator>>displayLanguage (in category 'accessing') ----- + displayLanguage + ^ id displayLanguage! Item was added: + ----- Method: NaturalLanguageTranslator>>displayName (in category 'accessing') ----- + displayName + ^ id displayName! Item was added: + ----- Method: NaturalLanguageTranslator>>domainRegistered: (in category 'accessing') ----- + domainRegistered: aDomainName + "notify that new TextDomain is registered. Concrete subclass can responds to this event if needed"! Item was added: + ----- Method: NaturalLanguageTranslator>>domainUnregistered: (in category 'accessing') ----- + domainUnregistered: aDomainName + "notify that new TextDomain is unregistered. Concrete subclass can responds to this event if needed"! Item was added: + ----- Method: NaturalLanguageTranslator>>fileOutHeader (in category 'fileIn/fileOut') ----- + fileOutHeader + ^ '''Translation dictionary'''! Item was added: + ----- Method: NaturalLanguageTranslator>>fileOutHeaderOn: (in category 'fileIn/fileOut') ----- + fileOutHeaderOn: aStream + aStream nextChunkPut: self fileOutHeader; + cr. + aStream timeStamp; cr. + aStream nextPut: $!!. + aStream nextChunkPut: '(' , self class name , ' localeID: ' , id storeString , ')'. + aStream cr! Item was added: + ----- Method: NaturalLanguageTranslator>>fileOutOn: (in category 'fileIn/fileOut') ----- + fileOutOn: aStream + "self current fileOutOn: Transcript. Transcript endEntry" + self fileOutHeaderOn: aStream. + self fileOutOn: aStream keys: nil! Item was added: + ----- Method: NaturalLanguageTranslator>>fileOutOn:keys: (in category 'fileIn/fileOut') ----- + fileOutOn: aStream keys: keys + "self current fileOutOn: Transcript. Transcript endEntry" + (keys + ifNil: [generics keys asArray sort]) + do: [:key | self + nextChunkPut: (generics associationAt: key) + on: aStream]. + keys + ifNil: [self untranslated + do: [:each | self nextChunkPut: each -> '' on: aStream]]. + aStream nextPut: $!!; + cr! Item was added: + ----- Method: NaturalLanguageTranslator>>generics (in category 'private') ----- + generics + ^generics ifNil: [generics := Dictionary new]! Item was added: + ----- Method: NaturalLanguageTranslator>>isDomainLoaded: (in category 'accessing') ----- + isDomainLoaded: aDomainName + "ask if translation dictionary for the domain has been loaded and available now for use" + self subclassResponsibility.! Item was added: + ----- Method: NaturalLanguageTranslator>>isoCountry (in category 'accessing') ----- + isoCountry + ^self localeID isoCountry! Item was added: + ----- Method: NaturalLanguageTranslator>>isoLanguage (in category 'accessing') ----- + isoLanguage + ^self localeID isoLanguage! Item was added: + ----- Method: NaturalLanguageTranslator>>loadFromFileNamed: (in category 'private store-retrieve') ----- + loadFromFileNamed: fileNameString + "Load translations from an external file" + + FileStream readOnlyFileNamed: fileNameString do: [ :file | + self loadFromStream: file ]. + self changed: #translations. + self changed: #untranslated. + ! Item was added: + ----- Method: NaturalLanguageTranslator>>loadFromRefStream: (in category 'private store-retrieve') ----- + loadFromRefStream: stream + "Load translations from an external file" + | loadedArray refStream | + refStream := ReferenceStream on: stream. + [loadedArray := refStream next] + ensure: [refStream close]. + self processExternalObject: loadedArray ! Item was added: + ----- Method: NaturalLanguageTranslator>>loadFromStream: (in category 'private store-retrieve') ----- + loadFromStream: stream + "Load translations from an external file" + | header isFileIn | + header := '''Translation dictionary'''. + isFileIn := (stream next: header size) + = header. + stream reset. + isFileIn + ifTrue: [stream fileInAnnouncing: 'Loading ' translated, stream localName] + ifFalse: [self loadFromRefStream: stream]! Item was added: + ----- Method: NaturalLanguageTranslator>>localeID (in category 'accessing') ----- + localeID + ^id! Item was added: + ----- Method: NaturalLanguageTranslator>>localeID: (in category 'initialize-release') ----- + localeID: anID + id := anID! Item was added: + ----- Method: NaturalLanguageTranslator>>mergeTranslations: (in category 'private store-retrieve') ----- + mergeTranslations: newTranslations + "Merge a new set of translations into the exiting table. + Overwrites existing entries." + + newTranslations keysAndValuesDo: [:key :value | + self rawPhrase: (self class registeredPhraseFor: key) translation: value]. + self changed: #translations. + self changed: #untranslated.! Item was added: + ----- Method: NaturalLanguageTranslator>>nextChunkPut:on: (in category 'fileIn/fileOut') ----- + nextChunkPut: anObject on: aStream + | i remainder terminator | + terminator := $!!. + remainder := anObject storeString. + [(i := remainder indexOf: terminator) = 0] + whileFalse: [aStream + nextPutAll: (remainder copyFrom: 1 to: i). + aStream nextPut: terminator. + "double imbedded terminators" + remainder := remainder copyFrom: i + 1 to: remainder size]. + aStream nextPutAll: remainder. + aStream nextPut: terminator; cr.! Item was added: + ----- Method: NaturalLanguageTranslator>>phrase:translation: (in category 'translation') ----- + phrase: phraseString translation: translationString + self generics at: phraseString put: translationString asString. + self changed: #translations. + self changed: #untranslated.! Item was added: + ----- Method: NaturalLanguageTranslator>>printOn: (in category 'printing') ----- + printOn: aStream + aStream nextPutAll: self class name; nextPut: $(; print: self localeID; nextPut: $)! Item was added: + ----- Method: NaturalLanguageTranslator>>processExternalObject: (in category 'private store-retrieve') ----- + processExternalObject: anArray + "pivate - process the external object" + + "new format -> {translations. untranslated}" + + anArray second do: [:each | self class registerPhrase: each]. + + self mergeTranslations: anArray first! Item was added: + ----- Method: NaturalLanguageTranslator>>rawPhrase:translation: (in category 'translation') ----- + rawPhrase: phraseString translation: translationString + self generics at: phraseString put: translationString asString. + ! Item was added: + ----- Method: NaturalLanguageTranslator>>rawRemoveUntranslated: (in category 'translation') ----- + rawRemoveUntranslated: untranslated + + self class allKnownPhrases removeKey: untranslated ifAbsent: []. + self changed: #untranslated.! Item was added: + ----- Method: NaturalLanguageTranslator>>removeTranslationFor: (in category 'translation') ----- + removeTranslationFor: phraseString + self generics removeKey: phraseString ifAbsent: []. + self changed: #translations. + self changed: #untranslated.! Item was added: + ----- Method: NaturalLanguageTranslator>>removeUntranslated: (in category 'translation') ----- + removeUntranslated: untranslated + + self class allKnownPhrases removeKey: untranslated ifAbsent: []. + ! Item was added: + ----- Method: NaturalLanguageTranslator>>saveToFileNamed: (in category 'private store-retrieve') ----- + saveToFileNamed: fileNameString + "save the receiver's translations to a file named fileNameString" + | stream | + "Set true if you need to save as binary" + false + ifTrue: [stream := ReferenceStream fileNamed: fileNameString. + stream nextPut: {self translations. self untranslated}. + stream close. + ^ self]. + stream := FileStream fileNamed: fileNameString. + [self fileOutOn: stream] + ensure: [stream close]! Item was added: + ----- Method: NaturalLanguageTranslator>>scanFrom: (in category 'fileIn/fileOut') ----- + scanFrom: aStream + "Read a definition of dictionary. + Make sure current locale corresponds my locale id" + | newTranslations currentPlatform | + newTranslations := Dictionary new. + currentPlatform := Locale currentPlatform. + [ | aString assoc | + Locale + currentPlatform: (Locale localeID: id). + [aString := aStream nextChunk withSqueakLineEndings. + aString size > 0] + whileTrue: [assoc := Compiler evaluate: aString. + assoc value = '' + ifTrue: [self class registerPhrase: assoc key] + ifFalse: [newTranslations add: assoc]]] + ensure: [Locale currentPlatform: currentPlatform]. + self mergeTranslations: newTranslations! Item was added: + ----- Method: NaturalLanguageTranslator>>setCurrent (in category 'language switching') ----- + setCurrent + "notify locale of the translator become current" + ! Item was added: + ----- Method: NaturalLanguageTranslator>>translate: (in category 'translation') ----- + translate: aString + ^self translate: aString + inDomain: TextDomainManager defaultDomain! Item was added: + ----- Method: NaturalLanguageTranslator>>translate:in: (in category 'translation') ----- + translate: aString in: aContext! Item was added: + ----- Method: NaturalLanguageTranslator>>translate:inDomain: (in category 'translation') ----- + translate: aString inDomain: aDomainName + ^ aString! Item was added: + ----- Method: NaturalLanguageTranslator>>translationFor: (in category 'translation') ----- + translationFor: aString + ^self translate: aString! Item was added: + ----- Method: NaturalLanguageTranslator>>translations (in category 'accessing') ----- + translations + ^self generics! Item was added: + ----- Method: NaturalLanguageTranslator>>untranslated (in category 'accessing') ----- + untranslated + | translations | + translations := self translations. + ^self class allKnownPhrases reject: [:each | translations includesKey: each]! Item was added: + ----- Method: NaturalLanguageTranslator>>writeAsMimeString (in category 'fileIn/fileOut') ----- + writeAsMimeString + + | fileName fileStream tmpStream s2 gzs | + tmpStream := MultiByteBinaryOrTextStream on: ''. + tmpStream converter: UTF8TextConverter new. + self fileOutOn: tmpStream. + s2 := RWBinaryOrTextStream on: ''. + gzs := GZipWriteStream on: s2. + tmpStream reset. + gzs nextPutAll: (tmpStream binary contentsOfEntireFile asString) contents. + gzs close. + s2 reset. + + fileName := id isoString, '.translation.gz.mime'. + fileStream := FileStream newFileNamed: fileName. + fileStream nextPutAll: (Base64MimeConverter mimeEncode: s2) contents. + fileStream close. + !
1
0
0
0
The Trunk: Compiler-eem.227.mcz
by commits@source.squeak.org
29 Mar '12
29 Mar '12
Eliot Miranda uploaded a new version of Compiler to project The Trunk:
http://source.squeak.org/trunk/Compiler-eem.227.mcz
==================== Summary ==================== Name: Compiler-eem.227 Author: eem Time: 28 March 2012, 6:34:18.679 pm UUID: ba2dd2c9-e83b-48f2-877e-310826e49215 Ancestors: Compiler-eem.226 Hide the onceCache when decompiling. =============== Diff against Compiler-eem.226 =============== Item was changed: ----- Method: DecompilerConstructorForClosures>>codeMethod:block:tempVars:primitive:class: (in category 'constructor') ----- codeMethod: selector block: block tempVars: vars primitive: primitive class: class + | blockNode selectorNode visibleTemps invisibleTemps arguments temporaries properties | - | blockNode selectorNode visibleTemps invisibleTemps arguments temporaries | selectorNode := self codeSelector: selector code: nil. tempVars := vars. visibleTemps := OrderedCollection new. invisibleTemps := OrderedCollection new. tempVars do: [:t| ((t isIndirectTempVector or: [t scope >= 0]) ifTrue: [visibleTemps] ifFalse: [invisibleTemps]) addLast: t]. arguments := visibleTemps copyFrom: 1 to: nArgs. temporaries := visibleTemps copyFrom: nArgs + 1 to: visibleTemps size. block arguments: arguments; temporaries: temporaries. + properties := method properties copy. + (properties at: #onceCache) ifNotNil: + [:onceCache| + properties := properties copyWithout: (Association + key: #onceCache + value: onceCache)]. blockNode := MethodNode new selector: selectorNode arguments: arguments precedence: selector precedence temporaries: temporaries block: block encoder: (EncoderForV3PlusClosures new initScopeAndLiteralTables temps: visibleTemps, invisibleTemps literals: literalValues class: class) primitive: primitive + properties: properties. - properties: method properties copy. blockNode properties method: blockNode. ^blockNode!
1
0
0
0
← Newer
1
...
4
5
6
7
8
9
10
...
19
Older →
Jump to page:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Results per page:
10
25
50
100
200