Tools__InternationalLanguageTranslationEditor.st
changeset 2050 998f72439bfc
parent 2049 d10762e5d924
child 2051 88d16a7d0bd9
equal deleted inserted replaced
2049:d10762e5d924 2050:998f72439bfc
    10 		languageShownHolders dataSetView lastExtractedClass
    10 		languageShownHolders dataSetView lastExtractedClass
    11 		lastExtractedApplicationClass stopApplicationIconVisibleHolder
    11 		lastExtractedApplicationClass stopApplicationIconVisibleHolder
    12 		monitoredApplication originalTextModifiedHolder
    12 		monitoredApplication originalTextModifiedHolder
    13 		languageTextModifiedHolder languageTextAcceptHolder
    13 		languageTextModifiedHolder languageTextAcceptHolder
    14 		inSingleFileMode lastExtractedProject lastLanguage
    14 		inSingleFileMode lastExtractedProject lastLanguage
    15 		lastSelectedKey autoAccept languageEditor selectedColIndexHolder'
    15 		lastSelectedKey autoAcceptHolder languageEditor
       
    16 		selectedColIndexHolder exampleLanguageSelectionHolder
       
    17 		exampleLanguageTextHolder'
    16 	classVariableNames:'LastExtractedClass LastExtractedApplicationClass
    18 	classVariableNames:'LastExtractedClass LastExtractedApplicationClass
    17 		LastExtractedProject'
    19 		LastExtractedProject'
    18 	poolDictionaries:''
    20 	poolDictionaries:''
    19 	category:'Interface-UIPainter'
    21 	category:'Interface-UIPainter'
    20 !
    22 !
   110        (WindowSpec
   112        (WindowSpec
   111           label: 'InternationalLanguageTranslationEditor'
   113           label: 'InternationalLanguageTranslationEditor'
   112           name: 'InternationalLanguageTranslationEditor'
   114           name: 'InternationalLanguageTranslationEditor'
   113           min: (Point 10 10)
   115           min: (Point 10 10)
   114           max: (Point 1024 768)
   116           max: (Point 1024 768)
   115           bounds: (Rectangle 0 0 636 396)
   117           bounds: (Rectangle 0 0 609 482)
   116           menu: mainMenu
   118           menu: mainMenu
   117         )
   119         )
   118         component: 
   120         component: 
   119        (SpecCollection
   121        (SpecCollection
   120           collection: (
   122           collection: (
   123               layout: (LayoutFrame 0 0 0 0 0 1 30 0)
   125               layout: (LayoutFrame 0 0 0 0 0 1 30 0)
   124               menu: menuToolBar
   126               menu: menuToolBar
   125               textDefault: true
   127               textDefault: true
   126             )
   128             )
   127            (VariableVerticalPanelSpec
   129            (VariableVerticalPanelSpec
   128               name: 'VariableVerticalPanel1'
   130               name: 'VariableVerticalPanel2'
   129               layout: (LayoutFrame 0 0 30 0 0 1 0 1)
   131               layout: (LayoutFrame 0 0 30 0 0 1 0 1)
   130               component: 
   132               component: 
   131              (SpecCollection
   133              (SpecCollection
   132                 collection: (
   134                 collection: (
   133                  (DataSetSpec
   135                  (DataSetSpec
   139                     columnHolder: keyStringAndLanguageSelectionTableColumnDescriptionHolder
   141                     columnHolder: keyStringAndLanguageSelectionTableColumnDescriptionHolder
   140                     beDependentOfRows: true
   142                     beDependentOfRows: true
   141                     columnAdaptor: yourself
   143                     columnAdaptor: yourself
   142                     postBuildCallback: postBuildDataSet:
   144                     postBuildCallback: postBuildDataSet:
   143                   )
   145                   )
   144                  (ViewSpec
   146                  (VariableVerticalPanelSpec
   145                     name: 'Box1'
   147                     name: 'VariableVerticalPanel1'
   146                     component: 
   148                     component: 
   147                    (SpecCollection
   149                    (SpecCollection
   148                       collection: (
   150                       collection: (
   149                        (LabelSpec
   151                        (ViewSpec
   150                           label: 'Original String (Key):'
   152                           name: 'Box1'
   151                           name: 'Label2'
   153                           component: 
   152                           layout: (LayoutFrame 0 0 0 0 0 1 30 0)
   154                          (SpecCollection
   153                           translateLabel: true
   155                             collection: (
   154                           adjust: left
   156                              (LabelSpec
       
   157                                 label: 'Original String (Key):'
       
   158                                 name: 'Label2'
       
   159                                 layout: (LayoutFrame 0 0 -2 0 0 1 28 0)
       
   160                                 translateLabel: true
       
   161                                 adjust: left
       
   162                               )
       
   163                              (TextEditorSpec
       
   164                                 name: 'OriginalText'
       
   165                                 layout: (LayoutFrame 0 0 27 0 0 1 -2 1)
       
   166                                 model: originalTextHolder
       
   167                                 hasHorizontalScrollBar: true
       
   168                                 hasVerticalScrollBar: true
       
   169                                 modifiedChannel: originalTextModifiedHolder
       
   170                                 acceptCallBack: languageTextAccepted
       
   171                               )
       
   172                              )
       
   173                            
       
   174                           )
   155                         )
   175                         )
   156                        (TextEditorSpec
   176                        (ViewSpec
   157                           name: 'OriginalText'
   177                           name: 'Box3'
   158                           layout: (LayoutFrame 0 0 30 0 0 1 0 1)
   178                           component: 
   159                           model: originalTextHolder
   179                          (SpecCollection
   160                           hasHorizontalScrollBar: true
   180                             collection: (
   161                           hasVerticalScrollBar: true
   181                              (LabelSpec
   162                           modifiedChannel: originalTextModifiedHolder
   182                                 label: 'Select Another Traduction as example:'
       
   183                                 name: 'Label3'
       
   184                                 layout: (LayoutFrame 0 0 -6 0 0 1 24 0)
       
   185                                 translateLabel: true
       
   186                                 adjust: left
       
   187                               )
       
   188                              (ComboBoxSpec
       
   189                                 name: 'ComboBox1'
       
   190                                 layout: (LayoutFrame 197 0 -2 0 322 0 18 0)
       
   191                                 model: exampleLanguageSelectionHolder
       
   192                                 immediateAccept: false
       
   193                                 acceptOnLeave: true
       
   194                                 acceptOnLostFocus: true
       
   195                                 acceptOnPointerLeave: false
       
   196                                 comboList: shownLanguages
       
   197                                 useIndex: false
       
   198                               )
       
   199                              (TextEditorSpec
       
   200                                 name: 'ExampleLanguageText'
       
   201                                 layout: (LayoutFrame 0 0 25 0 611 0 66 0)
       
   202                                 model: exampleLanguageTextHolder
       
   203                                 hasHorizontalScrollBar: true
       
   204                                 hasVerticalScrollBar: true
       
   205                                 isReadOnly: true
       
   206                               )
       
   207                              )
       
   208                            
       
   209                           )
       
   210                         )
       
   211                        (ViewSpec
       
   212                           name: 'Box2'
       
   213                           component: 
       
   214                          (SpecCollection
       
   215                             collection: (
       
   216                              (LabelSpec
       
   217                                 label: 'Translated String:'
       
   218                                 name: 'Label1'
       
   219                                 layout: (LayoutFrame 0 0 0 0 0 1 30 0)
       
   220                                 translateLabel: true
       
   221                                 adjust: left
       
   222                               )
       
   223                              (TextEditorSpec
       
   224                                 name: 'LanguageText'
       
   225                                 layout: (LayoutFrame 0 0 30 0 0 1 0 1)
       
   226                                 model: languageTextHolder
       
   227                                 hasHorizontalScrollBar: true
       
   228                                 hasVerticalScrollBar: true
       
   229                                 acceptChannel: languageTextAcceptHolder
       
   230                                 modifiedChannel: languageTextModifiedHolder
       
   231                                 acceptCallBack: languageTextAccepted
       
   232                                 postBuildCallback: languageEditorBuilt:
       
   233                               )
       
   234                              )
       
   235                            
       
   236                           )
   163                         )
   237                         )
   164                        )
   238                        )
   165                      
   239                      
   166                     )
   240                     )
   167                   )
   241                     handles: (Any 0.33333333333333 0.66666666666667 1.0)
   168                  (ViewSpec
       
   169                     name: 'Box2'
       
   170                     component: 
       
   171                    (SpecCollection
       
   172                       collection: (
       
   173                        (LabelSpec
       
   174                           label: 'Translated String:'
       
   175                           name: 'Label1'
       
   176                           layout: (LayoutFrame 0 0 0 0 0 1 30 0)
       
   177                           translateLabel: true
       
   178                           adjust: left
       
   179                         )
       
   180                        (TextEditorSpec
       
   181                           name: 'LanguageText'
       
   182                           layout: (LayoutFrame 0 0 30 0 0 1 0 1)
       
   183                           model: languageTextHolder
       
   184                           hasHorizontalScrollBar: true
       
   185                           hasVerticalScrollBar: true
       
   186                           acceptChannel: languageTextAcceptHolder
       
   187                           modifiedChannel: languageTextModifiedHolder
       
   188                           postBuildCallback: languageEditorBuilt:
       
   189                         )
       
   190                        )
       
   191                      
       
   192                     )
       
   193                   )
   242                   )
   194                  )
   243                  )
   195                
   244                
   196               )
   245               )
   197               handles: (Any 0.33333333333333 0.66666666666667 1.0)
   246               handles: (Any 0.5 1.0)
   198             )
   247             )
   199            )
   248            )
   200          
   249          
   201         )
   250         )
   202       )
   251       )
   210 
   259 
   211     "Do not manually edit this!! If it is corrupted,
   260     "Do not manually edit this!! If it is corrupted,
   212      the MenuEditor may not be able to read the specification."
   261      the MenuEditor may not be able to read the specification."
   213 
   262 
   214     "
   263     "
   215      MenuEditor new openOnClass:InternationalLanguageTranslationEditor andSelector:#mainMenu
   264      MenuEditor new openOnClass:Tools::InternationalLanguageTranslationEditor andSelector:#mainMenu
   216      (Menu new fromLiteralArrayEncoding:(InternationalLanguageTranslationEditor mainMenu)) startUp
   265      (Menu new fromLiteralArrayEncoding:(Tools::InternationalLanguageTranslationEditor mainMenu)) startUp
   217     "
   266     "
   218 
   267 
   219     <resource: #menu>
   268     <resource: #menu>
   220 
   269 
   221     ^ 
   270     ^ 
   345                 )
   394                 )
   346                (MenuItem
   395                (MenuItem
   347                   label: 'Run Application and Collect Translations...'
   396                   label: 'Run Application and Collect Translations...'
   348                   itemValue: runApplicationAndCollectTranslations
   397                   itemValue: runApplicationAndCollectTranslations
   349                   translateLabel: true
   398                   translateLabel: true
       
   399                 )
       
   400                )
       
   401               nil
       
   402               nil
       
   403             )
       
   404           )
       
   405          (MenuItem
       
   406             label: 'Preferences'
       
   407             translateLabel: true
       
   408             submenu: 
       
   409            (Menu
       
   410               (
       
   411                (MenuItem
       
   412                   label: 'Auto Accept Changes'
       
   413                   translateLabel: true
       
   414                   indication: autoAcceptHolder
   350                 )
   415                 )
   351                )
   416                )
   352               nil
   417               nil
   353               nil
   418               nil
   354             )
   419             )
   487       )
   552       )
   488 ! !
   553 ! !
   489 
   554 
   490 !InternationalLanguageTranslationEditor methodsFor:'accessing'!
   555 !InternationalLanguageTranslationEditor methodsFor:'accessing'!
   491 
   556 
   492 autoAccept
       
   493     autoAccept isNil ifTrue:[autoAccept := true].
       
   494     ^ autoAccept
       
   495 !
       
   496 
       
   497 autoAccept:something
       
   498     autoAccept := something.
       
   499 !
       
   500 
       
   501 newLanguageText
   557 newLanguageText
   502 "/   languageEditor accept
   558 "/   languageEditor accept
   503 ^self languageTextHolder value isNil 
   559 ^self languageTextHolder value isNil 
   504     ifTrue:['']
   560     ifTrue:['']
   505     ifFalse:[self languageTextHolder value asCollectionOfLines first.]
   561     ifFalse:[self languageTextHolder value asCollectionOfLines first.]
       
   562 !
       
   563 
       
   564 selectedKey  
       
   565    "Returns the current selected key if there is one row seleted. Otherwise, returns nil"
       
   566      |rowSelectionIndex |
       
   567 
       
   568     rowSelectionIndex := self selectedKeyRow value.
       
   569     rowSelectionIndex == 0 ifTrue:[^nil].
       
   570     ^ keyStringsToLanguageMappings keyAt:rowSelectionIndex.
   506 ! !
   571 ! !
   507 
   572 
   508 !InternationalLanguageTranslationEditor methodsFor:'aspects'!
   573 !InternationalLanguageTranslationEditor methodsFor:'aspects'!
       
   574 
       
   575 autoAcceptHolder
       
   576     autoAcceptHolder isNil ifTrue:[autoAcceptHolder := true asValue]. 
       
   577     ^ autoAcceptHolder
       
   578 !
       
   579 
       
   580 exampleLanguageSelectionHolder
       
   581     exampleLanguageSelectionHolder isNil ifTrue:[
       
   582         exampleLanguageSelectionHolder := self exampleLanguageByDefault asValue.         
       
   583         exampleLanguageSelectionHolder addDependent:self.
       
   584     ]. 
       
   585     ^ exampleLanguageSelectionHolder
       
   586 !
       
   587 
       
   588 exampleLanguageTextHolder
       
   589     exampleLanguageTextHolder isNil ifTrue:[
       
   590         exampleLanguageTextHolder := '' asValue.
       
   591     ].
       
   592     ^ exampleLanguageTextHolder.
       
   593 !
   509 
   594 
   510 keyStringAndLanguageSelectionTable
   595 keyStringAndLanguageSelectionTable
   511     keyStringsToLanguageMappings isNil ifTrue:[
   596     keyStringsToLanguageMappings isNil ifTrue:[
   512         keyStringsToLanguageMappings := KeyStringsToLanguageMappings new.
   597         keyStringsToLanguageMappings := KeyStringsToLanguageMappings new.
   513     ].
   598     ].
   550     ^ holder.
   635     ^ holder.
   551 !
   636 !
   552 
   637 
   553 languageTextAcceptHolder
   638 languageTextAcceptHolder
   554     languageTextAcceptHolder isNil ifTrue:[
   639     languageTextAcceptHolder isNil ifTrue:[
   555         languageTextAcceptHolder := false asValue.
   640         languageTextAcceptHolder := false asValue.                        
   556         languageTextAcceptHolder onChangeSend:#languageTextAccepted to:self.
       
   557     ].
   641     ].
   558     ^ languageTextAcceptHolder.
   642     ^ languageTextAcceptHolder.
   559 !
   643 !
   560 
   644 
   561 languageTextAccepted       
   645 languageTextAccepted                                   
   562                                          "
   646 
   563 self updateLanguageTextModification.    "
       
   564 self selectedKeyRow value: self selectedKeyRow value + 1.
   647 self selectedKeyRow value: self selectedKeyRow value + 1.
   565 !
   648 !
   566 
   649 
   567 languageTextHolder
   650 languageTextHolder
   568     languageTextHolder isNil ifTrue:[
   651     languageTextHolder isNil ifTrue:[
   626 stopApplicationIconVisibleHolder
   709 stopApplicationIconVisibleHolder
   627     stopApplicationIconVisibleHolder isNil ifTrue:[
   710     stopApplicationIconVisibleHolder isNil ifTrue:[
   628         stopApplicationIconVisibleHolder := false asValue.
   711         stopApplicationIconVisibleHolder := false asValue.
   629     ].
   712     ].
   630     ^ stopApplicationIconVisibleHolder.
   713     ^ stopApplicationIconVisibleHolder.
   631 !
       
   632 
       
   633 updateLanguageAndKeySelection
       
   634 
       
   635     |rowSelectionIndex colSelectionIndex language selectedKey originalText languageText|
       
   636 
       
   637     colSelectionIndex := dataSetView selectedColIndex.
       
   638     language := colSelectionIndex > 1 ifTrue:[ shownLanguages at:colSelectionIndex-1 ] ifFalse:nil.
       
   639 
       
   640     rowSelectionIndex := self selectedKeyRow value.
       
   641     rowSelectionIndex ~~ 0 ifTrue:[
       
   642         selectedKey := keyStringsToLanguageMappings keyAt:rowSelectionIndex.
       
   643         originalText := selectedKey storeString.
       
   644         language notNil ifTrue:[
       
   645             languageText := keyStringsToLanguageMappings at:selectedKey language:language.
       
   646             languageText notNil ifTrue:[
       
   647                 languageText := languageText storeString.
       
   648             ]
       
   649         ]
       
   650     ].              
       
   651     self originalTextHolder value:originalText.
       
   652     self languageTextHolder value:languageText.
       
   653     lastLanguage := language.
       
   654     lastSelectedKey := selectedKey. 
       
   655 ! !
   714 ! !
   656 
   715 
   657 !InternationalLanguageTranslationEditor methodsFor:'change & update'!
   716 !InternationalLanguageTranslationEditor methodsFor:'change & update'!
   658 
   717 
   659 update:something with:aParameter from:changedObject
   718 update:something with:aParameter from:changedObject
   663     ].
   722     ].
   664     changedObject == languageTextAcceptHolder ifTrue:[
   723     changedObject == languageTextAcceptHolder ifTrue:[
   665          self updateLanguageTextModification.
   724          self updateLanguageTextModification.
   666          ^ self.
   725          ^ self.
   667     ].
   726     ].
       
   727     changedObject == exampleLanguageSelectionHolder ifTrue:[
       
   728         self updateExampleLanguageText.
       
   729         ^ self.
       
   730     ].
       
   731 !
       
   732 
       
   733 updateExampleLanguageText
       
   734 
       
   735     self selectedKeyRow value isNil ifTrue:[^ self].
       
   736     self exampleLanguageTextHolder value:self currentExampleLanguageText
   668 !
   737 !
   669 
   738 
   670 updateKeyStringsToLanguageMappings           
   739 updateKeyStringsToLanguageMappings           
   671 
   740 
   672       keyStringsToLanguageMappings 
   741       keyStringsToLanguageMappings 
   673         at:lastSelectedKey 
   742         at:lastSelectedKey 
   674         language:lastLanguage 
   743         language:lastLanguage 
   675         put: self newLanguageText.
   744         put: self newLanguageText.
       
   745 !
       
   746 
       
   747 updateLanguageAndKeySelection
       
   748 
       
   749     |colSelectionIndex language|
       
   750 
       
   751     colSelectionIndex := dataSetView selectedColIndex.
       
   752     language := colSelectionIndex > 1 ifTrue:[ shownLanguages at:colSelectionIndex-1 ] ifFalse:nil.
       
   753 
       
   754     self originalTextHolder value: self selectedKey.
       
   755     self languageTextHolder value: (self languageTextFromSelectedKeyFor: language).
       
   756     lastLanguage := language.
       
   757     lastSelectedKey := self selectedKey. 
   676 !
   758 !
   677 
   759 
   678 updateLanguageTextModification 
   760 updateLanguageTextModification 
   679      self languageTextModifiedHolder value ifTrue:[ 
   761      self languageTextModifiedHolder value ifTrue:[ 
   680         (self autoAccept or:[Dialog confirm:'Accept changed translation ?']) ifTrue:[
   762         (self autoAccept or:[Dialog confirm:'Accept changed translation ?']) ifTrue:[
   704         answer == #acceptAsNew ifTrue:[
   786         answer == #acceptAsNew ifTrue:[
   705 self halt.        ].
   787 self halt.        ].
   706     ].
   788     ].
   707 ! !
   789 ! !
   708 
   790 
       
   791 !InternationalLanguageTranslationEditor methodsFor:'dialogs'!
       
   792 
       
   793 requestEncoderString
       
   794 
       
   795     ^Dialog request:'Enter the encoder : '. 
       
   796 !
       
   797 
       
   798 requestFilename  
       
   799 
       
   800     |aFilename|
       
   801 
       
   802     aFilename := Dialog 
       
   803         requestFileName:'Name of resource file:'
       
   804         default:nil 
       
   805         pattern:'*.rs'.
       
   806 
       
   807     aFilename isEmptyOrNil ifTrue:[^ nil ].
       
   808     ^aFilename asFilename
       
   809 !
       
   810 
       
   811 requestLanguage
       
   812     ^ Dialog 
       
   813         choose:'Which language do you want to save?'
       
   814         fromList:languagesList
       
   815         lines:10
       
   816 ! !
       
   817 
   709 !InternationalLanguageTranslationEditor methodsFor:'initialization & release'!
   818 !InternationalLanguageTranslationEditor methodsFor:'initialization & release'!
   710 
   819 
   711 closeRequest
   820 closeRequest
   712     "asks for permission before closing"
   821     "asks for permission before closing"
   713 
   822 
   827     self shownLanguages contents:self keyStringAndLanguageSelectionTable languages.
   936     self shownLanguages contents:self keyStringAndLanguageSelectionTable languages.
   828     modified := false.
   937     modified := false.
   829 !
   938 !
   830 
   939 
   831 menuOpen
   940 menuOpen
   832     |fn|
   941     |aFilename|
   833 
   942 
   834     fn := Dialog 
   943     aFilename := self requestFilename.
   835         requestFileName:'Name of resource file:'
   944     aFilename isNil ifTrue:[^ self ].
   836         default:nil 
   945     self readResourceFile:aFilename
   837         pattern:'*.rs'.
       
   838 
       
   839     fn isEmptyOrNil ifTrue:[^ self ].
       
   840     fn := fn asFilename.
       
   841     fn exists ifFalse:[^ self ].
       
   842 
       
   843     self readResourceFile:fn
       
   844 !
   946 !
   845 
   947 
   846 menuSave
   948 menuSave
   847     "This method was generated by the Browser.
   949 "Saves the language selected in the fileName from where the language resource was obtained."
   848      It will be invoked when the menu-item 'save' is selected."
   950     |lang aFilename|
   849 
   951 
   850     "/ change below and add any actions as required here ...
   952     lang := self requestLanguage.
   851     self warn:'no action for ''save'' available.'.
   953     lang isNil ifTrue:[^ self].
       
   954     aFilename := keyStringsToLanguageMappings filenameAt:lang.
       
   955     aFilename isNil ifTrue:[
       
   956         aFilename := self requestFilename.
       
   957         aFilename isNil ifTrue:[^ self].
       
   958     ].
       
   959     self saveResourceFile:aFilename for:lang asSymbol
   852 !
   960 !
   853 
   961 
   854 menuSaveAs
   962 menuSaveAs
   855     "This method was generated by the Browser.
   963 "Saves the language selected in the specified fileName."
   856      It will be invoked when the menu-item 'saveAs' is selected."
   964      |lang aFilename|
   857 
   965 
   858     "/ change below and add any actions as required here ...
   966     lang := self requestLanguage.
   859     self warn:'no action for ''saveAs'' available.'.
   967     lang isNil ifTrue:[^ self]. 
       
   968     aFilename := self requestFilename.
       
   969     aFilename isNil ifTrue:[^ self].
       
   970     self saveResourceFile:aFilename for:lang asSymbol
   860 !
   971 !
   861 
   972 
   862 openAboutThisApplication
   973 openAboutThisApplication
   863     "This method was generated by the Browser.
   974     "This method was generated by the Browser.
   864      It will be invoked when the menu-item 'help-about' is selected."
   975      It will be invoked when the menu-item 'help-about' is selected."
   888     lang isNil ifTrue:[^ self ].
   999     lang isNil ifTrue:[^ self ].
   889 
  1000 
   890     self readResourceFile:aFilename asLanguage:lang asSymbol
  1001     self readResourceFile:aFilename asLanguage:lang asSymbol
   891 !
  1002 !
   892 
  1003 
   893 readResourceFile:aFilename asLanguage:lang
       
   894     |resourcePack inStream lineString encoding decoder sortedKeys remainingKeys|
       
   895 
       
   896     aFilename exists ifFalse:[^ self ].
       
   897 
       
   898     resourcePack := ResourcePack new.
       
   899 
       
   900     inStream := aFilename readStream.
       
   901     [inStream atEnd] whileFalse:[
       
   902         lineString := inStream nextLine.
       
   903         (lineString notEmpty 
       
   904         and:[ (lineString startsWith:';') not ]) ifTrue:[
       
   905             ((lineString startsWith:'#') and:[(lineString startsWith:'#(') not]) ifTrue:[
       
   906                 lineString := (lineString copyFrom:2) withoutSeparators.
       
   907                 (lineString startsWith:'encoding ') ifTrue:[
       
   908                     encoding := ResourcePack extractEncodingFromLine:lineString.
       
   909                     decoder := CharacterEncoder encoderFor:encoding ifAbsent:nil.
       
   910                 ].
       
   911             ] ifFalse:[
       
   912                 ResourcePack
       
   913                     processResourceLine:lineString 
       
   914                     encoding:decoder 
       
   915                     file:aFilename pathName 
       
   916                     printErrorWith:[:msg | Transcript showCR:msg ] 
       
   917                     for:resourcePack
       
   918                     keepUselessTranslations:true.
       
   919             ].
       
   920         ].
       
   921     ].
       
   922     inStream close.
       
   923 
       
   924     sortedKeys := (resourcePack keys select:[:k | k isString]) asSortedCollection.
       
   925     remainingKeys := resourcePack keys select:[:k | k isString not].
       
   926 
       
   927     sortedKeys do:[:k |
       
   928         keyStringsToLanguageMappings at:k language:lang put:(resourcePack at:k)
       
   929     ].
       
   930     remainingKeys do:[:k |
       
   931         keyStringsToLanguageMappings at:k language:lang put:(resourcePack at:k)
       
   932     ].
       
   933 !
       
   934 
       
   935 removeLanguage
  1004 removeLanguage
   936     "automatically generated by UIEditor ..."
  1005     |lang|
   937 
  1006 
   938     "*** the code below performs no action"
  1007     lang := Dialog choose:'Which language do you want to remove?' fromList:languagesList lines:10.
   939     "*** (except for some feedback on the Transcript)"
  1008     lang isNil ifTrue:[^ self ].
   940     "*** Please change as required and accept in the browser."
  1009     (Dialog confirm: 'Are you sure to remove the language ', lang ) ifTrue:[
   941     "*** (and replace this comment by something more useful ;-)"
  1010           self languagesList remove:lang.
   942 
  1011           self shownLanguages remove:lang.
   943     "action to be added ..."
  1012     ].      
   944 
       
   945     Transcript showCR:self class name, ': action for #removeLanguage ...'.
       
   946 !
  1013 !
   947 
  1014 
   948 removeTranslation
  1015 removeTranslation
   949     |rowSelectionIndex selectedKey|
  1016     |rowSelectionIndex selectedKey|
   950 
  1017 
  1309     ^ visitor translatedLabels
  1376     ^ visitor translatedLabels
  1310 ! !
  1377 ! !
  1311 
  1378 
  1312 !InternationalLanguageTranslationEditor methodsFor:'queries'!
  1379 !InternationalLanguageTranslationEditor methodsFor:'queries'!
  1313 
  1380 
       
  1381 autoAccept                                                   
       
  1382 
       
  1383     ^ self autoAcceptHolder value
       
  1384 !
       
  1385 
       
  1386 currentExampleLanguageText           
       
  1387    "Returns the language text corresponding for the current selected key and the example language selection"
       
  1388 
       
  1389   ^self languageTextFromSelectedKeyFor: self exampleLanguageSelectionHolder value
       
  1390 !
       
  1391 
       
  1392 exampleLanguageByDefault
       
  1393 
       
  1394 ^self shownLanguages isEmpty
       
  1395     ifTrue:[nil]
       
  1396     ifFalse:[self shownLanguages first]
       
  1397 !
       
  1398 
  1314 hasUnsavedChanges
  1399 hasUnsavedChanges
  1315     ^ modified
  1400     ^ modified
       
  1401 !
       
  1402 
       
  1403 languageTextFromSelectedKeyFor: language
       
  1404     "Returns the language text corresponding for the current selected key and the received language"    
       
  1405 
       
  1406     language isNil ifTrue:[^''].
       
  1407     ^keyStringsToLanguageMappings at: self selectedKey language:language.   
       
  1408 ! !
       
  1409 
       
  1410 !InternationalLanguageTranslationEditor methodsFor:'read/write resourceFile'!
       
  1411 
       
  1412 printEditingWarningOn: aStream
       
  1413 
       
  1414 aStream nextPutAll: ';';
       
  1415         cr;
       
  1416         nextPutAll: '; WARNING:';
       
  1417         cr;
       
  1418         nextPutAll: '; this file contains national characters';
       
  1419         cr;
       
  1420         nextPutAll: '; DONT EDIT this file with an old vi !!';
       
  1421         cr;
       
  1422         nextPutAll: ';';
       
  1423         cr.
       
  1424 !
       
  1425 
       
  1426 printEncoderFor: lang on: aStream
       
  1427 |characterEncoder encoderString|
       
  1428 
       
  1429 characterEncoder := keyStringsToLanguageMappings encoderAt: lang.
       
  1430 encoderString := characterEncoder isNil 
       
  1431     ifTrue:[self requestEncoderString]
       
  1432     ifFalse:[characterEncoder nameOfEncoding printString].
       
  1433 
       
  1434 aStream nextPutAll: '#encoding';
       
  1435         space;
       
  1436         nextPutAll: encoderString;
       
  1437         cr;
       
  1438         cr.
       
  1439 !
       
  1440 
       
  1441 printLanguage: lang on: aStream
       
  1442 
       
  1443 self printEncoderFor: lang on: aStream.
       
  1444 self printEditingWarningOn: aStream.
       
  1445 self printLanguageMappingsFor: lang on: aStream.
       
  1446 !
       
  1447 
       
  1448 printLanguageMappingsFor: lang on: aStream
       
  1449 
       
  1450 |languageMappings maxKeySize|   
       
  1451 
       
  1452 languageMappings := keyStringsToLanguageMappings atLanguage: lang.
       
  1453 
       
  1454 maxKeySize := keyStringsToLanguageMappings maxKeySizeForLanguage: lang.  
       
  1455 maxKeySize := maxKeySize + 10.                  "adds the separator between key and value"
       
  1456 
       
  1457 languageMappings keysAndValuesDo:[:key :value |
       
  1458     aStream nextPutAll: (key storeString paddedTo: maxKeySize) ;  
       
  1459         nextPutAll: value storeString;
       
  1460         cr.
       
  1461     ].
       
  1462 !
       
  1463 
       
  1464 readResourceFile:aFilename asLanguage:lang
       
  1465     |resourcePack inStream lineString encoding decoder sortedKeys remainingKeys|
       
  1466 
       
  1467     aFilename exists ifFalse:[^ self ].
       
  1468 
       
  1469     resourcePack := ResourcePack new.
       
  1470 
       
  1471     inStream := aFilename readStream.
       
  1472     [inStream atEnd] whileFalse:[
       
  1473         lineString := inStream nextLine.
       
  1474         (lineString notEmpty 
       
  1475         and:[ (lineString startsWith:';') not ]) ifTrue:[
       
  1476             ((lineString startsWith:'#') and:[(lineString startsWith:'#(') not]) ifTrue:[
       
  1477                 lineString := (lineString copyFrom:2) withoutSeparators.
       
  1478                 (lineString startsWith:'encoding ') ifTrue:[
       
  1479                     encoding := ResourcePack extractEncodingFromLine:lineString.
       
  1480                     decoder := CharacterEncoder encoderFor:encoding ifAbsent:nil.
       
  1481                 ].
       
  1482             ] ifFalse:[
       
  1483                 ResourcePack
       
  1484                     processResourceLine:lineString 
       
  1485                     encoding:decoder 
       
  1486                     file:aFilename pathName 
       
  1487                     printErrorWith:[:msg | Transcript showCR:msg ] 
       
  1488                     for:resourcePack
       
  1489                     keepUselessTranslations:true.
       
  1490             ].
       
  1491         ].
       
  1492     ].
       
  1493     inStream close.                                                  
       
  1494 
       
  1495     sortedKeys := (resourcePack keys select:[:k | k isString]) asSortedCollection.
       
  1496     remainingKeys := resourcePack keys select:[:k | k isString not].
       
  1497 
       
  1498     keyStringsToLanguageMappings atLanguage: lang putFilename: aFilename.
       
  1499     keyStringsToLanguageMappings  atLanguage: lang putEncoder: decoder.
       
  1500 
       
  1501     sortedKeys do:[:k |
       
  1502         keyStringsToLanguageMappings at:k language:lang put:(resourcePack at:k)
       
  1503     ].
       
  1504     remainingKeys do:[:k |
       
  1505         keyStringsToLanguageMappings at:k language:lang put:(resourcePack at:k)
       
  1506     ].
       
  1507 !
       
  1508 
       
  1509 saveResourceFile: aFilename for: lang
       
  1510 
       
  1511 |aStream |
       
  1512 
       
  1513 aStream := FileStream fileNamed: aFilename.  
       
  1514 self printLanguage: lang on: aStream.
       
  1515 aStream flush;
       
  1516         close.
       
  1517 DialogBox information: 'The resource file for the language ', lang printString storeString, ' was saved in the file: ', aFilename nameString
  1316 ! !
  1518 ! !
  1317 
  1519 
  1318 !InternationalLanguageTranslationEditor methodsFor:'specs-dynamic'!
  1520 !InternationalLanguageTranslationEditor methodsFor:'specs-dynamic'!
  1319 
  1521 
  1320 columnInRow:row at:colIndex
  1522 columnInRow:row at:colIndex
  1353     ^ row keyString
  1555     ^ row keyString
  1354 ! !
  1556 ! !
  1355 
  1557 
  1356 !InternationalLanguageTranslationEditor methodsFor:'user actions'!
  1558 !InternationalLanguageTranslationEditor methodsFor:'user actions'!
  1357 
  1559 
       
  1560 exampleLanguageSelectionChanged
       
  1561 
       
  1562    self updateExampleLanguageText.
       
  1563 !
       
  1564 
  1358 selectionChanged                
  1565 selectionChanged                
  1359 
  1566 
  1360    self updateOriginalTextModification.
  1567    self updateOriginalTextModification.
  1361    self updateLanguageTextModification.
  1568    self updateLanguageTextModification.
  1362    self updateLanguageAndKeySelection.
  1569    self updateLanguageAndKeySelection.
       
  1570    self updateExampleLanguageText.
  1363 
  1571 
  1364    self originalTextModifiedHolder value:false.
  1572    self originalTextModifiedHolder value:false.
  1365    self languageTextModifiedHolder value:false.
  1573    self languageTextModifiedHolder value:false.
  1366 !
  1574 !
  1367 
  1575 
  1419     self addKey:aKey.
  1627     self addKey:aKey.
  1420     (perLanguageMappings at:language) at:aKey put:value.
  1628     (perLanguageMappings at:language) at:aKey put:value.
  1421     (self rowForKey:aKey) changed
  1629     (self rowForKey:aKey) changed
  1422 !
  1630 !
  1423 
  1631 
       
  1632 atLanguage: lang putEncoder: aDecoder
       
  1633 
       
  1634 ^(self languageInfoAt: lang) at: self encoderKey put: aDecoder
       
  1635 !
       
  1636 
       
  1637 atLanguage: lang putFilename: aFilename
       
  1638 
       
  1639 ^(self languageInfoAt: lang) at: self fileNameKey put: aFilename
       
  1640 !
       
  1641 
       
  1642 decoderKey
       
  1643    ^#decoder
       
  1644 !
       
  1645 
       
  1646 encoderAt:lang 
       
  1647     ^ (self languageInfoAt:lang) at: self encoderKey ifAbsent:[nil]
       
  1648 !
       
  1649 
       
  1650 encoderKey
       
  1651    ^#encoder
       
  1652 !
       
  1653 
       
  1654 fileNameKey
       
  1655     ^ #filename
       
  1656 !
       
  1657 
       
  1658 filenameAt:lang 
       
  1659     ^ (self languageInfoAt:lang) at: self fileNameKey ifAbsent:[nil]
       
  1660 !
       
  1661 
  1424 keyAt:index
  1662 keyAt:index
  1425     ^ keys at:index.
  1663     ^ keys at:index.
  1426 !
  1664 !
  1427 
  1665 
  1428 keyAt:index ifAbsent:exceptionalValue
  1666 keyAt:index ifAbsent:exceptionalValue
  1431 
  1669 
  1432 keys
  1670 keys
  1433     ^ keys
  1671     ^ keys
  1434 !
  1672 !
  1435 
  1673 
       
  1674 languageInfoAt: lang 
       
  1675 
       
  1676 ^self perLanguageInfo at: lang ifAbsentPut:[Dictionary new]
       
  1677 !
       
  1678 
  1436 languages
  1679 languages
  1437     ^ languages
  1680     ^ languages
       
  1681 !
       
  1682 
       
  1683 perLanguageInfo
       
  1684     ^ perLanguageInfo
       
  1685 !
       
  1686 
       
  1687 perLanguageInfo:something
       
  1688     perLanguageInfo := something.
  1438 !
  1689 !
  1439 
  1690 
  1440 removeKey:aKey
  1691 removeKey:aKey
  1441     keys remove:aKey ifAbsent:[].
  1692     keys remove:aKey ifAbsent:[].
  1442     perLanguageMappings do:[:eachMapping |
  1693     perLanguageMappings do:[:eachMapping |
  1470     super initialize.
  1721     super initialize.
  1471 
  1722 
  1472     keys := OrderedSet new.
  1723     keys := OrderedSet new.
  1473     languages := OrderedCollection new.
  1724     languages := OrderedCollection new.
  1474     perLanguageMappings := Dictionary new.
  1725     perLanguageMappings := Dictionary new.
  1475     perLanguageInfo := Dictionary new.
  1726     perLanguageInfo := Dictionary new.         
  1476     rowPerKey := Dictionary new.
  1727     rowPerKey := Dictionary new.
  1477 
  1728 
  1478     self addLanguage:#'de'.
  1729     self addLanguage:#'de'.
  1479     self addLanguage:#'fr'.
  1730     self addLanguage:#'fr'.
  1480     self addLanguage:#'es'.
  1731     self addLanguage:#'es'.
  1538     ^ languages includes:lang
  1789     ^ languages includes:lang
  1539 !
  1790 !
  1540 
  1791 
  1541 indexOfKey:aKey
  1792 indexOfKey:aKey
  1542     ^ keys indexOf:aKey
  1793     ^ keys indexOf:aKey
       
  1794 !
       
  1795 
       
  1796 maxKeySizeForLanguage: lang
       
  1797 
       
  1798 ^(self atLanguage: lang) keys inject: 0 into:[:maxSize :each |
       
  1799     maxSize < each size 
       
  1800         ifTrue:[each size]
       
  1801         ifFalse:[maxSize].].
  1543 ! !
  1802 ! !
  1544 
  1803 
  1545 !InternationalLanguageTranslationEditor::LanguageMappingRow methodsFor:'accessing'!
  1804 !InternationalLanguageTranslationEditor::LanguageMappingRow methodsFor:'accessing'!
  1546 
  1805 
  1547 atLanguage:language
  1806 atLanguage:language