[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