[squeak-dev] The Trunk: System-mt.1319.mcz
commits at source.squeak.org
commits at source.squeak.org
Thu Mar 10 14:13:10 UTC 2022
Marcel Taeumel uploaded a new version of System to project The Trunk:
http://source.squeak.org/trunk/System-mt.1319.mcz
==================== Summary ====================
Name: System-mt.1319
Author: mt
Time: 10 March 2022, 3:13:06.127178 pm
UUID: e5f1e939-bfff-3c4a-897f-4474209980e6
Ancestors: System-mt.1318
Locale and localization clean-up. Complements Multilingual-mt.269 and System-mt.1318
=============== Diff against System-mt.1318 ===============
Item was changed:
+ ----- Method: Clipboard>>clearInterpreter (in category 'initialize') -----
- ----- Method: Clipboard>>clearInterpreter (in category 'accessing') -----
clearInterpreter
interpreter := nil.
!
Item was changed:
+ ----- Method: Clipboard>>setInterpreter (in category 'initialize') -----
- ----- Method: Clipboard>>setInterpreter (in category 'accessing') -----
setInterpreter
+ interpreter := Locale currentPlatform clipboardInterpreter.!
- interpreter := LanguageEnvironment defaultClipboardInterpreter.
- interpreter ifNil: [
- "Should never be reached, but just in case."
- interpreter := NoConversionClipboardInterpreter new].
- !
Item was removed:
- ----- Method: GetTextTranslator class>>newForLocaleID: (in category 'instance creation') -----
- newForLocaleID: id
- ^self new localeID: id!
Item was changed:
----- Method: GetTextTranslator class>>privateStartUp (in category 'class initialization') -----
privateStartUp
+
self setSystemDefaultLocaleDirs.
+ self availableLanguageLocaleIDs
+ do: [ :localeID | self ensureForLocaleID: localeID ].!
- self availableLanguageLocaleIDs do: [ :localeID |
- NaturalLanguageTranslator translators
- at: localeID
- put: (self newForLocaleID: localeID).
- ]!
Item was changed:
NaturalLanguageTranslator subclass: #InternalTranslator
instanceVariableNames: 'generics'
+ classVariableNames: 'AllKnownPhrases'
- 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 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 changed:
----- 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 |
- | stream localeID translator gs rbStream s currentPlatform |
s := Base64MimeConverter mimeDecodeToBytes: mimeString readStream.
gs := GZipReadStream on: s.
rbStream := MultiByteBinaryOrTextStream with: gs contents asString.
rbStream converter: UTF8TextConverter new.
rbStream reset.
localeID := LocaleID isoString: localeString.
+ Locale
+ currentPlatform: (Locale localeID: localeID)
+ during: [stream := ReadStream on: rbStream contents].
- currentPlatform := Locale currentPlatform.
- [Locale
- currentPlatform: (Locale localeID: localeID).
- stream := ReadStream on: rbStream contents]
- ensure: [Locale currentPlatform: currentPlatform].
translator := self localeID: localeID.
+ translator loadFromStream: stream.!
- translator loadFromStream: stream.
- LanguageEnvironment resetKnownEnvironments!
Item was changed:
----- 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 ensureForLocaleID: (LocaleID isoLanguage: isoLanguage isoCountry: isoCountry).
- translator := self newLocaleID: (LocaleID isoLanguage: isoLanguage isoCountry: isoCountry).
self loadExternalTranslationsFor: translator!
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 changed:
----- 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 ensureForLocaleID: localeID.
- translator := self localeID: localeID.
translator loadFromStream: stream]
+ ensure: [stream close].!
- ensure: [stream close].
- LanguageEnvironment resetKnownEnvironments.
-
- !
Item was changed:
+ ----- Method: InternalTranslator class>>newLocaleID: (in category 'instance creation') -----
- ----- Method: InternalTranslator class>>newLocaleID: (in category 'accessing') -----
newLocaleID: localeID
+
+ self flag: #deprecated.
+ ^ self ensureForLocaleID: localeID!
- ^ self cachedTranslations
- at: localeID
- ifAbsentPut: [self new localeID: localeID]!
Item was changed:
----- Method: InternalTranslator class>>privateStartUp (in category 'class initialization') -----
privateStartUp
+
+ self loadAvailableExternalLocales.!
- self loadAvailableExternalLocales.
- self mergeLegacyTranslators.
- !
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>>checkPhrase:translation: (in category 'translation') -----
- checkPhrase: phrase translation: translation!
Item was changed:
----- Method: InternalTranslator>>scanFrom:environment: (in category 'fileIn/fileOut') -----
scanFrom: aStream environment: anEnvironment
"Read a definition of dictionary.
Make sure current locale corresponds my locale id"
+ | aString newTranslations assoc |
- | aString newTranslations assoc currentPlatform |
newTranslations := Dictionary new.
+ Locale
+ currentPlatform: (Locale localeID: id)
+ during: [
+ [aString := aStream nextChunk withSqueakLineEndings.
+ aString size > 0] whileTrue:
+ [assoc := Compiler evaluate: aString environment: anEnvironment.
+ assoc value = ''
+ ifTrue: [self class registerPhrase: assoc key]
+ ifFalse: [newTranslations add: assoc]] ].
- currentPlatform := Locale currentPlatform.
- [Locale
- currentPlatform: (Locale localeID: id).
- [aString := aStream nextChunk withSqueakLineEndings.
- aString size > 0] whileTrue:
- [assoc := Compiler evaluate: aString environment: anEnvironment.
- assoc value = ''
- ifTrue: [self class registerPhrase: assoc key]
- ifFalse: [newTranslations add: assoc]]]
- ensure: [Locale currentPlatform: currentPlatform].
self mergeTranslations: newTranslations!
Item was changed:
----- Method: InternalTranslator>>translate:inDomain: (in category 'translation') -----
translate: aString inDomain: aDomainName
+
| translator |
^ self generics
at: aString
ifAbsent: [self localeID hasParent
+ ifTrue: [translator := self class
+ forLocaleID: self localeID parent
- ifTrue: [translator := self class cachedTranslations
- at: self localeID parent
ifAbsent: [^ aString].
translator translate: aString inDomain: aDomainName]
ifFalse: [aString]]!
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.
+ self flag: #performance. "KNOWN PROBLEM: conversion is executed everytimes this method called"
+ ^str utf8ToSqueak applyLanguageInformation: (Locale localeID: localeID)
- ^str utf8ToSqueak applyLanguageInformation: (Locale localeID: localeID) languageEnvironment.
!
Item was changed:
Object subclass: #NaturalLanguageTranslator
instanceVariableNames: 'id'
+ classVariableNames: 'Current Translators'
- classVariableNames: 'Translators'
poolDictionaries: ''
category: 'System-Localization'!
+ NaturalLanguageTranslator class
+ instanceVariableNames: 'translators'!
!NaturalLanguageTranslator commentStamp: '<historical>' prior: 0!
abstract class of natural language translator.
Class side manages and holds loaded instances of concrete classes.!
+ NaturalLanguageTranslator class
+ instanceVariableNames: 'translators'!
Item was changed:
----- Method: NaturalLanguageTranslator class>>availableForLocaleID: (in category 'accessing') -----
availableForLocaleID: localeID
+
+ self deprecated.
+ ^ self forLocaleID: 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
- ifAbsentPut: [localeID hasParent
- ifTrue: [self translators
- at: localeID parent
- ifAbsent: [self default]]
- ifFalse: [self default]]!
Item was changed:
----- 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."
- "Return the locale ids for the currently available languages.
- Meaning those which either internally or externally have
- translations available."
"NaturalLanguageTranslator availableLanguageLocaleIDs"
+
+ ^ (Array streamContents: [:stream |
+ GetTextTranslator translators valuesDo: [:each | stream nextPut: each localeID].
+ InternalTranslator translators valuesDo: [:each | stream nextPut: each localeID]])
+ ifEmpty: [{LocaleID default "Developer-English from the source code :-)"}]
+ ifNotEmpty: [:ids | ids asSet asArray]!
- ^ self translators values collect:[:each | each localeID]!
Item was changed:
----- Method: NaturalLanguageTranslator class>>current (in category 'accessing') -----
current
+
+ ^ Current ifNil: [Current := LocaleID current languageTranslator]!
- ^ self availableForLocaleID: LocaleID current!
Item was added:
+ ----- Method: NaturalLanguageTranslator class>>current: (in category 'accessing') -----
+ current: aTranslator
+
+ Current := aTranslator.!
Item was changed:
----- Method: NaturalLanguageTranslator class>>default (in category 'accessing') -----
default
"Answer translator for backstop"
"self default translate: 'test'"
+
+ ^ self newForLocaleID: LocaleID default!
- ^ (self == NaturalLanguageTranslator ifTrue: [InternalTranslator] ifFalse: [self]) new
- localeID: (LocaleID isoLanguage: 'en')!
Item was added:
+ ----- Method: NaturalLanguageTranslator class>>defaultClass (in category 'accessing') -----
+ defaultClass
+
+ ^ self == NaturalLanguageTranslator
+ ifTrue: [InternalTranslator]
+ ifFalse: [self "< InternalTranslator | GetTextTranslator >"]!
Item was changed:
+ ----- Method: NaturalLanguageTranslator class>>domainRegistered: (in category 'updates') -----
- ----- Method: NaturalLanguageTranslator class>>domainRegistered: (in category 'accessing') -----
domainRegistered: aDomainName
"notify that new TextDomain is registered"
self translators do: [:each | each domainRegistered: aDomainName]!
Item was changed:
+ ----- Method: NaturalLanguageTranslator class>>domainUnregistered: (in category 'updates') -----
- ----- 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>>ensureForLocaleID: (in category 'instance creation') -----
+ ensureForLocaleID: localeID
+
+ ^ self translators
+ at: localeID
+ ifAbsentPut: [self newForLocaleID: localeID]!
Item was changed:
----- Method: NaturalLanguageTranslator class>>forLocaleID: (in category 'accessing') -----
forLocaleID: localeID
+ "Answer a translator available for localeID. If no translator can be found, try the localeID's generic parent. Otherwise, evaluate aBlock."
+
+ ^ self forLocaleID: localeID ifAbsent: [self default]!
-
- ^ self localeID: localeID!
Item was changed:
----- Method: NaturalLanguageTranslator class>>forLocaleID:ifAbsent: (in category 'accessing') -----
forLocaleID: localeID ifAbsent: aBlock
+ "Answer a translator available for localeID. If no translator can be found, try the localeID's generic parent. Otherwise, evaluate aBlock."
+
+ ^ self translators
+ at: localeID
+ ifAbsent: [localeID hasParent
+ ifTrue: [self translators at: localeID parent ifAbsent: aBlock]
+ ifFalse: [aBlock value]]!
-
- ^ self localeID: localeID!
Item was changed:
----- Method: NaturalLanguageTranslator class>>isoLanguage:isoCountry: (in category 'accessing') -----
isoLanguage: isoLanguage isoCountry: isoCountry
+
+ ^ (LocaleID isoLanguage: isoLanguage isoCountry: isoCountry) languageTranslator!
- ^self localeID: (LocaleID isoLanguage: isoLanguage isoCountry: isoCountry)!
Item was added:
+ ----- Method: NaturalLanguageTranslator class>>isoString: (in category 'accessing') -----
+ isoString: aString
+
+ ^ (LocaleID isoString: aString) languageTranslator!
Item was changed:
----- 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 |
- | stream localeID translator gs rbStream s currentPlatform |
s := Base64MimeConverter mimeDecodeToBytes: mimeString readStream.
gs := GZipReadStream on: s.
rbStream := MultiByteBinaryOrTextStream with: gs contents asString.
rbStream converter: UTF8TextConverter new.
rbStream reset.
localeID := LocaleID isoString: localeString.
+ Locale
+ currentPlatform: (Locale localeID: localeID)
+ during: [stream := ReadStream on: rbStream contents].
- currentPlatform := Locale currentPlatform.
- [Locale
- currentPlatform: (Locale localeID: localeID).
- stream := ReadStream on: rbStream contents]
- ensure: [Locale currentPlatform: currentPlatform].
translator := self localeID: localeID.
+ translator loadFromStream: stream.!
- translator loadFromStream: stream.
- LanguageEnvironment resetKnownEnvironments!
Item was changed:
+ ----- Method: NaturalLanguageTranslator class>>localeChanged (in category 'updates') -----
- ----- 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."
+
- "notify some project starts to use this locale.
- this facility may use the event to load translation data dynamically"
self current localeChanged.
+ self current: nil. "Use locale-specific translator again."!
- !
Item was changed:
+ ----- Method: NaturalLanguageTranslator class>>localeID: (in category 'instance creation') -----
- ----- Method: NaturalLanguageTranslator class>>localeID: (in category 'accessing') -----
localeID: localeID
+ "For backward compatibility, see NaturalLanguageTranslator >> fileOutHeaderOn:."
+
+ self flag: #deprecated.
+ ^ self ensureForLocaleID: localeID!
- ^ self cachedTranslations
- at: localeID
- ifAbsentPut: [self new localeID: localeID]!
Item was changed:
----- Method: NaturalLanguageTranslator class>>mergeTranslationFileNamed: (in category 'file-services') -----
mergeTranslationFileNamed: fileFullNameString
"merge the translation in the file named fileFullNameString"
FileStream readOnlyFileNamed: fileFullNameString do: [:stream |
+ (self isoString: stream localName sansPeriodSuffix)
+ loadFromStream: stream].!
- | localeID translator |
- localeID := LocaleID isoString: stream localName sansPeriodSuffix.
- translator := self localeID: localeID.
- translator loadFromStream: stream].
- LanguageEnvironment resetKnownEnvironments.
-
- !
Item was added:
+ ----- Method: NaturalLanguageTranslator class>>newForLocaleID: (in category 'instance creation') -----
+ newForLocaleID: localeID
+ "Create a new translator. Do not cache it."
+
+ ^ self defaultClass new localeID: localeID!
Item was changed:
----- Method: NaturalLanguageTranslator class>>privateStartUp (in category 'class initialization') -----
privateStartUp
+
+ GetTextTranslator resetCaches; privateStartUp.
+ InternalTranslator resetCaches; privateStartUp.!
- self resetCaches.
- GetTextTranslator privateStartUp.
- InternalTranslator privateStartUp.
- self localeChanged.!
Item was changed:
----- Method: NaturalLanguageTranslator class>>resetCaches (in category 'class initialization') -----
resetCaches
+ translators := nil.!
- Translators := nil.!
Item was changed:
----- Method: NaturalLanguageTranslator class>>translate:toLocaleID: (in category 'translation') -----
translate: aString toLocaleID: localeID
+ "Find a translator for localeID and translate aString in the default domain."
+
+ ^ localeID languageTranslator translate: aString!
- "translate for default domain"
- ^ (self availableForLocaleID: localeID)
- translate: aString!
Item was changed:
----- Method: NaturalLanguageTranslator class>>translate:toLocaleID:inDomain: (in category 'translation') -----
translate: aString toLocaleID: localeID inDomain: aDomainName
+
+ ^ localeID languageTranslator translate: aString inDomain: aDomainName!
- ^ (self availableForLocaleID: localeID)
- translate: aString inDomain: aDomainName!
Item was changed:
----- Method: NaturalLanguageTranslator class>>translateWithoutLoading:toLocaleID: (in category 'translation') -----
translateWithoutLoading: aString toLocaleID: localeID
"translate for default domain"
+
+ self deprecated.
+ ^ self translate: aString toLocaleID: localeID inDomain: TextDomainManager defaultDomain!
- ^self translateWithoutLoading: aString toLocaleID: localeID inDomain: TextDomainManager defaultDomain.
- !
Item was changed:
----- Method: NaturalLanguageTranslator class>>translateWithoutLoading:toLocaleID:inDomain: (in category 'translation') -----
translateWithoutLoading: aString toLocaleID: localeID inDomain: aDomainName
+
+ self deprecated.
+ ^ self translate: 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 changed:
----- Method: NaturalLanguageTranslator class>>translators (in category 'accessing') -----
translators
+
+ ^ self == NaturalLanguageTranslator
+ ifTrue: [InternalTranslator translators]
+ ifFalse: [translators ifNil: [translators := Dictionary new]]!
- ^ Translators ifNil: [Translators := Dictionary new] !
Item was changed:
----- Method: NaturalLanguageTranslator>>checkPhrase:translation: (in category 'translation') -----
+ checkPhrase: phrase translation: translation
+ "Check the translation. Answer a string with a comment or empty meaning no-comments."
+
+ ^ ''!
- checkPhrase: phrase translation: translation!
Item was changed:
----- Method: NaturalLanguageTranslator>>scanFrom:environment: (in category 'fileIn/fileOut') -----
scanFrom: aStream environment: anEnvironment
"Read a definition of dictionary.
Make sure current locale corresponds my locale id"
+
+ | newTranslations |
- | newTranslations currentPlatform |
newTranslations := Dictionary new.
+ Locale
+ currentPlatform: (Locale localeID: id)
+ during: [ | aString assoc |
+ [aString := aStream nextChunk withSqueakLineEndings.
+ aString size > 0] whileTrue:
+ [assoc := Compiler evaluate: aString environment: anEnvironment.
+ assoc value = ''
+ ifTrue: [self class registerPhrase: assoc key]
+ ifFalse: [newTranslations add: assoc]] ].
- currentPlatform := Locale currentPlatform.
- [| aString assoc |
- Locale currentPlatform: (Locale localeID: id).
- [aString := aStream nextChunk withSqueakLineEndings.
- aString size > 0] whileTrue:
- [assoc := Compiler evaluate: aString environment: anEnvironment.
- assoc value = ''
- ifTrue: [self class registerPhrase: assoc key]
- ifFalse: [newTranslations add: assoc]]]
- ensure: [Locale currentPlatform: currentPlatform].
self mergeTranslations: newTranslations!
Item was changed:
----- Method: Project>>storeAttributesOn: (in category 'file in/out') -----
storeAttributesOn: aStream
| details |
self storeAttributeKey: 'Squeak-Version' value: SystemVersion current version on: aStream.
self storeAttributeKey: 'Squeak-LatestUpdate' value: SystemVersion current highestUpdate printString on: aStream.
+ self storeAttributeKey: 'File-Name-Encoding' value: Locale currentPlatform fileNameEncodingName on: aStream.
- self storeAttributeKey: 'File-Name-Encoding' value: LanguageEnvironment defaultFileNameConverter class encodingNames first on: aStream.
details := self world valueOfProperty: #ProjectDetails ifAbsent: [Dictionary new].
details associationsDo: [:assoc |
self storeAttributeKey: assoc key asString value: assoc value asString on: aStream.].
!
Item was changed:
----- Method: Project>>updateLocaleDependents (in category 'language') -----
updateLocaleDependents
"Set the project's natural language as indicated"
+ Locale localeChanged.!
- LanguageEnvironment localeChanged.!
Item was changed:
----- Method: String>>translated (in category '*System-Localization') -----
translated
"Note that we cannot call #translatedTo: because the sender context encodes the domain name."
+ ^ self translatedInDomain: (TextDomainManager domainOfMethod: thisContext sender method)!
- ^ self
- translatedTo: LocaleID current
- inDomain: (TextDomainManager domainOfMethod: thisContext sender method)!
Item was changed:
----- Method: String>>translatedInDomain: (in category '*System-Localization') -----
translatedInDomain: aDomainName
+ "Answer the receiver translated to the given locale id in the textdomain. If no translation can be found, try to lookup all domains for a translation."
+ | translator translation |
+ translator := NaturalLanguageTranslator current.
+ translation := translator translate: self inDomain: aDomainName.
+ translation == self ifTrue: [^ translator translateInAllDomains: self].
+ ^ translation!
- ^ self
- translatedTo: LocaleID current
- inDomain: aDomainName!
Item was changed:
----- Method: String>>translatedTo:inDomain: (in category '*System-Localization') -----
translatedTo: localeID inDomain: aDomainName
+ "Answer the receiver translated to the given locale id in the textdomain. If no translation can be found, try to lookup all domains for a translation. NOTE THAT this is about 20 times slower than #translatedInDomain:, which uses the system's default translator."
- "Answer the receiver translated to the given locale id in the textdomain. If no translation can be found, try to lookup all domains for a translation."
| translator translation |
+ translator := localeID languageTranslator.
- translator := NaturalLanguageTranslator availableForLocaleID: localeID.
translation := translator translate: self inDomain: aDomainName.
translation == self ifTrue: [^ translator translateInAllDomains: self].
^ translation!
Item was changed:
Object subclass: #TextDomainManager
instanceVariableNames: ''
classVariableNames: 'ClassCategories Classes DefaultDomain DomainInfos LoneClasses Packages'
poolDictionaries: ''
category: 'System-Localization'!
- TextDomainManager class
- instanceVariableNames: 'defaultDomain'!
!TextDomainManager commentStamp: 'fbs 5/12/2013 13:04' prior: 0!
I manage mapping from class category to textdomain.
Class variables:
ClassCategories IdentityDictionary -- classCategory -> domainName
Classes IdentityDictionary -- class name (a Symbol) -> domainName (a cache only!!)
DefaultDomain String -- the default domain name
DomainInfos Dictionary -- domainName -> a TextDomainInfo
LoneClasses IdentityDictionary -- class name (a Symbol) -> domainName. For classes whose entire category are not all in the same domain (BookMorph and QuickGuideMorph)
TextDomainManager registerCategoryPrefix: 'DrGeoII' domain: 'DrGeoII'.
TextDomainManager unregisterDomain: 'DrGeoII'.
TextDomainManager registerClass: #QuickGuideMorph domain: 'quickguides'.
TextDomainManager registerClass: #QuickGuideHolderMorph domain: 'quickguides'.
!
- TextDomainManager class
- instanceVariableNames: 'defaultDomain'!
Item was changed:
----- Method: TextDomainManager class>>defaultDomain (in category 'accessing') -----
defaultDomain
+
+ ^ '.default'!
- "I'm not sure we still need a default domain. AFAIK the default domain will only be used when no domain is found. In that case, wouldn't it be better to just look for a translation in all domains?"
- ^defaultDomain!
Item was removed:
- ----- Method: TextDomainManager class>>defaultDomain: (in category 'accessing') -----
- defaultDomain: aDomainName
- defaultDomain := aDomainName!
Item was removed:
- ----- Method: TextDomainManager class>>initialize (in category 'class initialization') -----
- initialize
- " TextDomainManager initialize "
- self defaultDomain: 'Etoys'!
Item was changed:
----- Method: TranslatedReceiverFinder class>>makeJapaneseTranslationFile (in category 'japanese locale') -----
makeJapaneseTranslationFile
| t n |
+ InternalTranslator initializeKnownPhrases.
- NaturalLanguageTranslator initializeKnownPhrases.
t := TranslatedReceiverFinder new senders.
+ n := InternalTranslator newForLocaleID: (LocaleID isoLanguage: 'ja').
- n := NaturalLanguageTranslator
- localeID: (LocaleID isoLanguage: 'ja').
t
do: [:w |
+ InternalTranslator registerPhrase: w.
- NaturalLanguageTranslator registerPhrase: w.
self
at: w
ifPresent: [:k | n phrase: w translation: k]].
n saveToFileNamed: 'ja.translation'!
More information about the Squeak-dev
mailing list
|