The Trunk: Multilingual-dtl.67.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

The Trunk: Multilingual-dtl.67.mcz

commits-2
David T. Lewis uploaded a new version of Multilingual to project The Trunk:
http://source.squeak.org/trunk/Multilingual-dtl.67.mcz

==================== Summary ====================

Name: Multilingual-dtl.67
Author: dtl
Time: 29 November 2009, 9:34:12 am
UUID: 674101cf-1ac8-4cc7-9e61-257bbd794434
Ancestors: Multilingual-nice.66

Use Beeper class>>beep rather than deprecated Object>>beep

=============== Diff against Multilingual-nice.66 ===============

Item was changed:
  Object subclass: #LanguageEnvironment
  instanceVariableNames: 'id'
  classVariableNames: 'ClipboardInterpreterClass Current FileNameConverterClass InputInterpreterClass KnownEnvironments SystemConverterClass'
  poolDictionaries: ''
  category: 'Multilingual-Languages'!
 
  !LanguageEnvironment commentStamp: 'bf 8/16/2009 16:52' prior: 0!
  The name multilingualized Squeak suggests that you can use multiple language at one time.  This is true, of course, but the system still how to manage the primary language; that provides the interpretation of data going out or coming in from outside world. It also provides how to render strings, as there rendering rule could be different in one language to another, even if the code points in a string is the same.
 
    Originally, LanguageEnvironment and its subclasses only has class side methods.  After merged with Diego's Babel work, it now has instance side methods.  Since this historical reason, the class side and instance side are not related well.
 
+   When we talk about the interface with the outside of the Squeak world, there are three different "channels"; the keyboard input, clipboard output and input, and filename.  On a not-to-uncommon system such as a Unix system localized to Japan, all of these three can have (and does have) different encodings.  So we need to manage them separately.  Note that the encoding in a file can be anything.  While it is nice to provide a suggested guess for this 'default system file content encoding', it is not critical.
-   When we talk about the interface with the outside of the Squeak world, there are three different "channels"; the keyboard input, clipboard output and input, and filename.  On a not-to-uncommon system such as a Unix system localized to Japan, all of these three can have (and does have) different encodings.  So we need to manage them separately.  Note that the encoding in a file can be anything.  While it is nice to provide a suggested guess for this 'default system file content encoding', it is not critical.
 
    Rendering support is limited basic L-to-R rendering so far.  But you can provide different line-wrap rule, at least.
  !

Item was changed:
  ----- Method: LanguageEditor>>loadFromFile (in category 'gui methods') -----
  loadFromFile
  | fileName |
  fileName := self selectTranslationFileName.
  fileName isNil
  ifTrue: [""
+ Beeper beep.
- self beep.
  ^ self].
  ""
  Cursor wait
  showWhile: [
  self translator loadFromFileNamed: fileName.
  self changed: #translations.
  self changed: #untranslated]!

Item was changed:
  ----- Method: LanguageEditor>>searchUntranslated: (in category 'gui methods') -----
  searchUntranslated: aString
  | untranslateds results index |
  untranslateds := self untranslated.
  results := untranslateds
  select: [:each | '*' , aString , '*' match: each].
  ""
  results isEmpty
  ifTrue: [""
  self inform: 'no matches for' translated , ' ''' , aString , ''''.
  ^ self].
  ""
  results size = 1
  ifTrue: [""
  self selectUntranslatedPhrase: results first.
  ^ self].
  ""
  index := (UIManager default
  chooseFrom: (results
  collect: [:each | each copy replaceAll: Character cr with: $\])
  title: 'select the untranslated phrase...' translated).
  ""
  index isZero
  ifTrue: [""
+ Beeper beep.
- self beep.
  ^ self].
  ""
  self
  selectUntranslatedPhrase: (results at: index)!

Item was changed:
  ----- Method: LanguageEditor>>saveToFile (in category 'gui methods') -----
  saveToFile
  "save the translator to a file"
  | fileName |
  fileName := UIManager default request: 'file name' translated initialAnswer: translator localeID isoString , '.translation'.
  (fileName isNil
  or: [fileName isEmpty])
  ifTrue: [""
+ Beeper beep.
- self beep.
  ^ self].
  ""
  Cursor wait
  showWhile: [
  self translator saveToFileNamed: fileName]!

Item was changed:
  ----- Method: LanguageEditor>>searchUntranslated (in category 'gui methods') -----
  searchUntranslated
  | search |
  search := UIManager default request: 'search for' translated initialAnswer: ''.
  (search isNil
  or: [search isEmpty])
  ifTrue: [""
+ Beeper beep.
- self beep.
  ^ self].
  ""
  self searchUntranslated: search!

Item was changed:
  ----- Method: LanguageEditor>>removeTranslation (in category 'gui methods') -----
  removeTranslation
  "remove the selected translation"
  | translation |
  self selectedTranslation isZero
  ifTrue: [""
+ Beeper beep.
- self beep.
  self inform: 'select the translation to remove' translated.
  ^ self].
  ""
  translation := self translations at: self selectedTranslation.
  ""
  (self
  confirm: ('Removing "{1}".
  Are you sure you want to do this?' translated format: {translation}))
  ifFalse: [^ self].
  ""
  self translator removeTranslationFor: translation.
  self changed: #translations.
  self changed: #untranslated.!

Item was changed:
  ----- Method: LanguageEditor>>searchTranslation (in category 'gui methods') -----
  searchTranslation
  | search |
  search := UIManager default request: 'search for' translated initialAnswer: ''.
  (search isNil
  or: [search isEmpty])
  ifTrue: [""
+ Beeper beep.
- self beep.
  ^ self].
  ""
  self searchTranslation: search!

Item was changed:
  ----- Method: LanguageEditor>>addTranslation (in category 'gui methods') -----
  addTranslation
  "translate a phrase"
  | phrase |
  phrase := UIManager default
  request: 'enter the original:'
  initialAnswer: ''.
 
  (phrase isNil
  or: [phrase = ''])
  ifTrue: [""
+ Beeper beep.
- self beep.
  ^ self].
  ""
  self translatePhrase: phrase!

Item was changed:
  ----- Method: LanguageEditor>>removeUntranslated (in category 'gui methods') -----
  removeUntranslated
  "remove the selected untranslated phrase"
  | untranslated |
  self selectedUntranslated isZero
  ifTrue: [""
+ Beeper beep.
- self beep.
  self inform: 'select the untranslated phrase to remove' translated.
  ^ self].
  ""
  untranslated := self untranslated at: self selectedUntranslated.
  ""
  (self
  confirm: ('Removing "{1}".
  Are you sure you want to do this?' translated format: {untranslated}))
  ifFalse: [^ self].
  ""
  self translator removeUntranslated: untranslated!

Item was changed:
  ----- Method: LanguageEditor>>translate (in category 'gui methods') -----
  translate
  "translate a phrase"
  | phrase |
  phrase := self phraseToTranslate.
  ""
  (phrase isNil
  or: [phrase = ''])
  ifTrue: [""
+ Beeper beep.
- self beep.
  ^ self].
  ""
  self translatePhrase: phrase!

Item was changed:
  ----- Method: LanguageEditor>>searchTranslation: (in category 'gui methods') -----
  searchTranslation: aString
  | translations results index |
  translations := self translations.
  results := translations
  select: [:each | ""
  ('*' , aString , '*' match: each)
  or: ['*' , aString , '*' match: (self translator translationFor: each)]].
  ""
  results isEmpty
  ifTrue: [""
  self inform: 'no matches for' translated , ' ''' , aString , ''''.
  ^ self].
  ""
  results size = 1
  ifTrue: [""
  self selectTranslationPhrase: results first.
  ^ self].
  ""
  index := (UIManager default
  chooseFrom: (results
  collect: [:each | ""
  (each copy replaceAll: Character cr with: $\)
  , ' -> '
  , ((self translator translationFor: each) copy replaceAll: Character cr with: $\)])
  title: 'select the translation...' translated).
  ""
  index isZero
  ifTrue: [""
+ Beeper beep.
- self beep.
  ^ self].
  ""
  self
  selectTranslationPhrase: (results at: index)!

Item was changed:
  ----- Method: LanguageEditor>>mergeFromFile (in category 'gui methods') -----
  mergeFromFile
  | fileName |
  fileName := self selectTranslationFileName.
  fileName isNil
  ifTrue: [""
+ Beeper beep.
- self beep.
  ^ self].
  ""
  Cursor wait
  showWhile: [
  self translator loadFromFileNamed: fileName.
  self changed: #translations.
  self changed: #untranslated]!

Item was changed:
  ----- Method: LanguageEditor>>translatePhrase: (in category 'gui methods') -----
  translatePhrase: aString
  "translate aString"
  | translation |
  translation := UIManager default
  multiLineRequest: 'translation for: ' translated , '''' , aString , ''''
  centerAt: Sensor cursorPoint
  initialAnswer: aString
  answerHeight: 200.
  ""
  (translation isNil
  or: [translation = ''])
  ifTrue: [""
+ Beeper beep.
- self beep.
  ^ self].
  ""
  self phrase: aString translation: translation!

Item was changed:
  ----- Method: LanguageEditor>>browseMethodsWithTranslation (in category 'gui methods') -----
  browseMethodsWithTranslation
  | translation |
  self selectedTranslation isZero
  ifTrue: [""
+ Beeper beep.
- self beep.
  self inform: 'select the translation to look for' translated.
  ^ self].
  ""
  translation := self translations at: self selectedTranslation.
  self systemNavigation browseMethodsWithLiteral: translation!

Item was changed:
  ----- Method: LanguageEditor>>browseMethodsWithUntranslated (in category 'gui methods') -----
  browseMethodsWithUntranslated
  | untranslated |
  self selectedUntranslated isZero
  ifTrue: [""
+ Beeper beep.
- self beep.
  self inform: 'select the untranslated phrase to look for' translated.
  ^ self].
  ""
  untranslated := self untranslated at: self selectedUntranslated.
  SystemNavigation default browseMethodsWithLiteral: untranslated.
  !