Tools__InternationalLanguageTranslationEditor.st
author Claus Gittinger <cg@exept.de>
Tue, 07 Oct 2008 15:40:43 +0200
changeset 2410 a3b53393dcf3
parent 2330 58ace5744c59
child 2413 655f1c52504c
permissions -rw-r--r--
added open by project
cg@2015
     1
"{ Package: 'stx:libtool2' }"
cg@2015
     2
cg@2015
     3
"{ NameSpace: Tools }"
cg@2015
     4
cg@2015
     5
ApplicationModel subclass:#InternationalLanguageTranslationEditor
cg@2015
     6
	instanceVariableNames:'languagesList keyStringsToLanguageMappings languageTextHolder
cg@2015
     7
		originalTextHolder modified shownLanguages selectedKeyRow
cg@2015
     8
		showMissingTranslationsOnly
cg@2015
     9
		keyStringAndLanguageSelectionTableColumnDescriptionHolder
cg@2015
    10
		languageShownHolders dataSetView lastExtractedClass
cg@2015
    11
		lastExtractedApplicationClass stopApplicationIconVisibleHolder
cg@2015
    12
		monitoredApplication originalTextModifiedHolder
cg@2048
    13
		languageTextModifiedHolder languageTextAcceptHolder
cg@2048
    14
		inSingleFileMode lastExtractedProject lastLanguage
fm@2050
    15
		lastSelectedKey autoAcceptHolder languageEditor
fm@2050
    16
		selectedColIndexHolder exampleLanguageSelectionHolder
fm@2051
    17
		exampleLanguageTextHolder pastePreviousTranslationEnableHolder
fm@2163
    18
		searchForSimilarTranslationEnableHolder alwaysWriteUTF8Holder
fm@2327
    19
		lastNameSpace pasteOriginalEnableHolder ignoreCaseHolder
fm@2327
    20
		closeSearchBar searchTextModifiedHolder searchNextText
fm@2327
    21
		searchBarImageInfoLabelHolder searchPreviousText searchBoxVisible
fm@2327
    22
		searchBarInfoLabelHolder searchTextHolder searchTextView
fm@2327
    23
		searchBoxView translationsPanel lastPackage'
cg@2032
    24
	classVariableNames:'LastExtractedClass LastExtractedApplicationClass
cg@2410
    25
		LastExtractedProject LastProject'
cg@2015
    26
	poolDictionaries:''
cg@2015
    27
	category:'Interface-UIPainter'
cg@2015
    28
!
cg@2015
    29
cg@2015
    30
Object subclass:#AccessCollectingPseudoResourcePack
cg@2015
    31
	instanceVariableNames:'collectedKeys realResourcePack'
cg@2015
    32
	classVariableNames:''
cg@2015
    33
	poolDictionaries:''
cg@2015
    34
	privateIn:InternationalLanguageTranslationEditor
cg@2015
    35
!
cg@2015
    36
cg@2015
    37
Collection subclass:#KeyStringsToLanguageMappings
cg@2032
    38
	instanceVariableNames:'keys keyInfo perLanguageInfo perLanguageMappings languageMappings
fm@2049
    39
		languages rowPerKey'
cg@2015
    40
	classVariableNames:''
cg@2015
    41
	poolDictionaries:''
cg@2015
    42
	privateIn:InternationalLanguageTranslationEditor
cg@2015
    43
!
cg@2015
    44
cg@2015
    45
Object subclass:#LanguageMappingRow
cg@2015
    46
	instanceVariableNames:'key mappings'
cg@2015
    47
	classVariableNames:''
cg@2015
    48
	poolDictionaries:''
cg@2015
    49
	privateIn:InternationalLanguageTranslationEditor
cg@2015
    50
!
cg@2015
    51
cg@2015
    52
Visitor subclass:#UISpecVisitor
cg@2015
    53
	instanceVariableNames:'translatedLabels'
cg@2015
    54
	classVariableNames:''
cg@2015
    55
	poolDictionaries:''
cg@2015
    56
	privateIn:InternationalLanguageTranslationEditor
cg@2015
    57
!
cg@2015
    58
cg@2015
    59
!InternationalLanguageTranslationEditor class methodsFor:'documentation'!
cg@2015
    60
cg@2015
    61
documentation
cg@2015
    62
"
cg@2015
    63
    documentation to be added.
cg@2015
    64
cg@2015
    65
    [author:]
cg@2015
    66
        cg (cg@FUSI)
cg@2015
    67
cg@2015
    68
    [instance variables:]
cg@2015
    69
cg@2015
    70
    [class variables:]
cg@2015
    71
cg@2015
    72
    [see also:]
cg@2015
    73
cg@2015
    74
"
cg@2015
    75
!
cg@2015
    76
cg@2015
    77
examples
cg@2015
    78
"
cg@2015
    79
  Starting the application:
cg@2015
    80
                                                                [exBegin]
cg@2015
    81
    InternationalLanguageTranslationEditor open
cg@2015
    82
cg@2015
    83
                                                                [exEnd]
cg@2015
    84
cg@2015
    85
  more examples to be added:
cg@2015
    86
                                                                [exBegin]
cg@2015
    87
    ... add code fragment for 
cg@2015
    88
    ... executable example here ...
cg@2015
    89
                                                                [exEnd]
cg@2015
    90
"
cg@2015
    91
!
cg@2015
    92
cg@2015
    93
history
cg@2015
    94
    "Created: / 04-03-2006 / 09:07:19 / cg"
cg@2015
    95
! !
cg@2015
    96
fm@2327
    97
!InternationalLanguageTranslationEditor class methodsFor:'image specs'!
fm@2327
    98
fm@2327
    99
closeSearchBarIcon
fm@2327
   100
    "This resource specification was automatically generated
fm@2327
   101
     by the ImageEditor of ST/X."
fm@2327
   102
fm@2327
   103
    "Do not manually edit this!! If it is corrupted,
fm@2327
   104
     the ImageEditor may not be able to read the specification."
fm@2327
   105
fm@2327
   106
    "
fm@2327
   107
     self closeSearchBar inspect
fm@2327
   108
     ImageEditor openOnClass:self andSelector:#closeSearchBar
fm@2327
   109
     Icon flushCachedIcons
fm@2327
   110
    "
fm@2327
   111
fm@2327
   112
    <resource: #image>
fm@2327
   113
fm@2327
   114
    ^Icon
fm@2327
   115
        constantNamed:#'Psiware::SystemManagement class closeSearchBar'
fm@2327
   116
        ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
fm@2327
   117
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@GQ\SD1LSD1LSD1LSD1LWGP@@@@@@
fm@2327
   118
@ATGA@HA@PDA@PDA@PHDA1T@@@@@@@@TAENG!!(VB XA?_''57QPPT@@@@@@@@E NJ^V)&X%)UTT5IV7 KE @@@@@@@A A"7Q,#&9VS%^MQ$E<DQ @@@@@@@@Z
fm@2327
   119
@X%-#9NRX52R$80:^1@Z@@@@@@@@F0FHY6>R$9JR$9ION''(PF0@@@@@@@A<A 5ABT)FS$9D=KR13C1<@@@@@@@@)@WUCND*Q$9NQM"T!!XP8)@@@@@@@@K E2
fm@2327
   120
O4RQ$9FQ$9@2G%8JK @@@@@@@CLA\S2D$9D9M)BS]!!1]BSL@@@@@@@@7@W@5LXP6J2\2]"P"VP 7@@@@@@@@O U+R3@*I2T#HA0&N5 RO @@@@@@@D LPF%(
fm@2327
   121
YVQ W59]VU 4CD @@@@@@@AGFP4F@PDA@PDA@PDFCQ%G@@@@@@@@K41TUEQTUEQTUEQTUEQLK0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
fm@2327
   122
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 167 25 15 170 49 40 171 50 39 174 68 60 176 56 48 176 58 49 183 118 110 184 45 32 184 46 32 184 47 34 184 71 58 184 85 78 184 86 79 185 53 39 186 57 42 186 59 43 186 60 45 186 68 58 190 187 180 192 188 181 193 189 182 194 190 183 195 192 184 197 194 186 202 148 142 202 199 191 205 202 195 207 64 48 207 203 195 208 65 49 208 205 198 209 65 49 209 66 49 209 69 52 210 66 49 210 78 64 211 67 51 211 71 54 212 69 51 212 208 200 212 208 202 213 69 52 213 70 52 213 79 57 215 80 59 215 212 206 217 214 207 218 79 62 218 84 67 219 107 95 219 216 210 221 84 63 221 84 67 221 109 96 221 218 213 222 76 56 222 110 96 222 113 79 223 87 67 223 87 70 223 115 99 224 221 216 225 89 72 225 105 91 225 117 84 227 89 64 227 91 73 227 112 98 227 115 95 227 122 92 227 224 219 227 225 219 228 113 83 228 113 99 229 102 87 229 226 221 230 115 84 230 117 81 230 142 117 231 102 80 231 116 86 231 120 103 231 131 119 231 228 224 232 118 88 232 119 82 233 143 117 234 99 76 234 102 79 234 119 89 234 127 100 234 145 119 235 104 82 235 106 86 236 108 89 236 110 92 236 113 92 236 121 91 236 146 119 237 113 95 237 115 98 237 122 92 237 132 100 238 117 101 238 119 104 238 123 93 238 123 109 238 131 98 238 133 102 238 146 120 238 148 121 239 125 112 239 127 115 239 129 118 239 131 105 239 134 102 240 135 122 240 200 196 242 135 113 242 141 116 242 141 119 242 145 116 242 147 118 242 148 120 243 137 115 243 138 118 243 141 121 243 142 123 243 144 126 243 145 129 243 151 134 243 202 197 244 147 132 244 149 135 244 152 137 244 163 142 244 164 145 245 160 143 245 164 146 245 213 204 246 213 203 248 215 205 249 215 206 252 244 243 253 244 243 253 247 245 255 255 255]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@G?? G?? G?? G?? G?? G?? G?? G?? G?? G?? G?? G?? G?? G?? G?? G?? @@@@@@@@@@@@') ; yourself); yourself]
fm@2327
   123
fm@2327
   124
    "Created: / 15-06-2007 / 18:04:38 / Administrador"
fm@2327
   125
!
fm@2327
   126
fm@2327
   127
restartSearchBarIcon
fm@2327
   128
    "This resource specification was automatically generated
fm@2327
   129
     by the ImageEditor of ST/X."
fm@2327
   130
fm@2327
   131
    "Do not manually edit this!! If it is corrupted,
fm@2327
   132
     the ImageEditor may not be able to read the specification."
fm@2327
   133
fm@2327
   134
    "
fm@2327
   135
     self restartSearchBarIcon inspect
fm@2327
   136
     ImageEditor openOnClass:self andSelector:#restartSearchBarIcon
fm@2327
   137
     Icon flushCachedIcons
fm@2327
   138
    "
fm@2327
   139
fm@2327
   140
    <resource: #image>
fm@2327
   141
fm@2327
   142
    ^Icon
fm@2327
   143
        constantNamed:#'Psiware::SystemManagement class restartSearchBarIcon'
fm@2327
   144
        ifAbsentPut:[(Depth24Image new) width: 20; height: 20; photometric:(#rgb); bitsPerSample:(#[8 8 8]); samplesPerPixel:(3); bits:(ByteArray fromPackedString:'
fm@2327
   145
@@@@@@@@@@@@@@@@@@@@@@@@?>SX?>''V?>;)?>O!!?>G]?>WY@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@?=3\:[>''5;JF/Y-.+XY),(U.
fm@2327
   146
6JZK?=J1?>V<>.+I@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@?>?'':+:!!19]U6*-Q?]Y/?>RC?>*!!?>F_>+=939UL2Y!!L>MJT??W[@@@@@@@@@@@@@@@@@@@@
fm@2327
   147
@@@@??[-=\^&1IEP=<Q[?>1/?=5$?=52?>NT?=^Q?>BP?>FG>;1]6JEO8;^H?]3I@@@@@@@@@@@@@@@@@@@@?\*95Y-)<+!!$??.F?>)17+-U8,E40Y-.09I)
fm@2327
   148
:Z1-?=I??=)8?<1.>K597;NL??K,@@@@@@@@@@@@?=#M6I>B>+:@?>2U=,]]5[IN7,^C5LB[<MWL?]#O=,BZ7)=\>;Y[??FP?=>O1YEW8<B$;=WH@@@@@@@@
fm@2327
   149
>,"%8Z:A?>N#?>._5KA$9-JW7=+FX6M+V%U3"''*T0Y>V4ZA7595T=;1"?=&D?=&L,W(93IU\:KE9=LBG9[Q9;K1<?=^R:K591*-6??''[@@@@RE%37>7?=?/?
fm@2327
   150
>^_''3*.M0YAU<K5,?>ZO?=>G?<!!6?<Y6>+U(69YI3:IG?=Z@?>NU5:=19,6%@@@@@@@@OU5*2.+7;O??5-KF2;JS?=*&?>&"?=.E?>2R?=&F?>"X8I-N5)ED
fm@2327
   151
29$&?>M:?=*F3:E&>]/A@@@@@@@@O5=.7O??5^/(?O++<M.>0I-/;LNE??2)?=&B?>^%,W)A8:14?=FX3)TR?>U/?=Q:3IAZ?=?T@@@@@@@@P5Y68_#?7.70
fm@2327
   152
??[1??C_:,F%6;A=>MJA?>6":,6+&G91?>+^?>+]79<$?<1\?=:C5IM[?<;F@@@@@@@@Q$1>6N_?<?+?<.W.?>3*??S(=,.(2Z!!#=-:^+9>P4,[P<>''46=O^
fm@2327
   153
=+MX;Z)O?>^Q:Z]*;+Z''@@@@@@@@TD:O9^/?;/C??>???>/:?>71?>7Z;]^%0+JA7=CI8]O"0+[D8=#&?<&V79="?=2L?\E88[BG@@@@@@@@VU&M=_3?9N''?
fm@2327
   154
>/C???K??NK/??[1???#9M?B??3;(IV#/[WD;^_5@@@@;KR]<[10?=Q68[9,8,>W@@@@TU9&;/??9__9:.;/?_#<??/?>?[==?79>_?=<_S9T5M[0,WN7^G*
fm@2327
   155
@@@@@@@@1Y= >=!!>9,]-3[],6]B''TEH=;O_''=O?6>O77>O''=>//?=_+?:O_?:_''?>O??SEM[/<[P6.O,@@@@@@@@8-F%1*%/9[>@?>R(7+VG_%,;\E]CW$=H
fm@2327
   156
U5AWV5%.U5);R5M:Q5M;S%-=TE]*[GI>):696M;*@@@@@@@@@@@@6\F[2Y914)9.;[VF?L"!!8[^_3J>''0KB:0;?V0,_''-<C),K/(,;7!!+[OI,K[D2=G_9N+8
fm@2327
   157
@@@@@@@@@@@@@@@@@@@@?\*_7*]>3))5/II9+9FF+9> 0;7I5-#-7NO?7^#?8^/?:/G?7NK07>W3@@@@@@@@@@@@@@@@@@@@@@@@?>N;?>N;?=:9?>7T?>#X
fm@2327
   158
>^_%=N?6<OK?@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; mask:((Depth1Image new) width: 20; height: 20; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@?@OC?0OO?8O_?<O_?>O???O?????_??>_??>_??>_??>_??>_??>_??__??O???O???G???A??/A? O') ; yourself); yourself]
fm@2327
   159
!
fm@2327
   160
fm@2327
   161
searchNextIcon
fm@2327
   162
    "This resource specification was automatically generated
fm@2327
   163
     by the ImageEditor of ST/X."
fm@2327
   164
fm@2327
   165
    "Do not manually edit this!! If it is corrupted,
fm@2327
   166
     the ImageEditor may not be able to read the specification."
fm@2327
   167
fm@2327
   168
    "
fm@2327
   169
     self searchNextIcon inspect
fm@2327
   170
     ImageEditor openOnClass:self andSelector:#searchNextIcon
fm@2327
   171
     Icon flushCachedIcons
fm@2327
   172
    "
fm@2327
   173
fm@2327
   174
    <resource: #image>
fm@2327
   175
fm@2327
   176
    ^Icon
fm@2327
   177
        constantNamed:#'Psiware::SystemManagement class searchNextIcon'
fm@2327
   178
        ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
fm@2327
   179
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ZE)ZZ@@@@@@@@@@@@@@@
fm@2327
   180
@@@@@@AFF XA@PXUQ @@@@@@@@@@@@@@@@@*@Q5G^WX6E0D*@@@@@@@@@@@@@@@,AVQ?\&1#W&X8@20@@@@@@@@@@@A[@U==\F-"VUQOUSLAV0@@@@@@@@@@
fm@2327
   181
G19-D <NCP0KB!!@7D1<@@@@@@@@@  ]MT5JY&Y&Y&Y%RLR4G  @@@@@@@H\A WL $)&Y&Y&RF35B@X\@@@@@@@BK@XA1WA"X&Y&XE#T:P@FK@@@@@@@@# !!H
fm@2327
   182
]F$<II&YH3H>N2 H# @@@@@@@@@''GG)*Y2$9NRIDO4DQHP@@@@@@@@@@!!@EP[6U]I"UIQTL.@XP@@@@@@@@@@@ALAD-.XE]VS$(/@$0@@@@@@@@@@@@@@EDA
fm@2327
   183
FSQ!!VC@T@UD@@@@@@@@@@@@@@@@@#R,I@PDIJ84@@@@@@@@@@@@@@@@@@@@@%)^W% @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
fm@2327
   184
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 48 54 77 55 63 87 56 64 89 57 67 90 59 67 90 64 69 89 71 74 92 72 76 96 76 81 100 80 89 118 82 90 119 83 91 120 84 92 122 86 94 123 87 96 124 89 97 126 92 104 132 97 106 136 97 110 138 97 112 138 100 102 112 101 107 130 104 118 144 105 113 135 105 124 146 107 109 118 107 116 144 110 127 148 112 126 148 113 129 148 117 119 129 118 130 156 119 123 133 125 140 174 127 131 146 127 132 148 127 146 178 130 151 181 131 132 143 133 149 185 133 152 182 134 134 138 137 140 150 138 138 142 139 156 191 141 160 195 143 164 199 143 169 198 144 157 197 144 158 197 152 173 208 153 184 209 155 167 210 156 180 208 157 179 215 157 180 211 160 162 171 160 173 216 160 174 216 160 182 214 161 173 217 161 174 217 161 176 219 161 179 220 161 180 220 163 182 222 163 184 222 164 182 222 164 184 223 166 164 161 166 189 212 166 194 211 167 190 228 167 194 229 167 200 221 169 170 174 169 195 212 169 196 232 170 181 228 170 203 221 171 171 176 171 173 182 171 193 220 173 182 232 173 192 232 173 200 234 175 206 239 175 210 240 176 188 237 178 175 168 178 175 173 178 202 234 178 206 240 179 195 238 180 205 223 180 214 243 180 216 244 181 193 242 181 195 239 181 204 223 181 212 243 182 206 242 182 209 243 184 180 173 184 211 244 184 215 245 185 198 246 185 200 244 188 215 233 188 225 249 189 226 249 190 206 250 190 219 248 191 209 249 191 217 248 191 222 248 192 188 181 192 221 249 194 190 184 195 191 184 196 226 251 196 232 251 199 196 189 202 198 191 202 226 253 203 199 193 203 229 253 203 237 252 203 237 253 204 202 196 206 202 195 206 205 204 207 203 196 208 204 197 208 205 201 212 208 200 212 208 201 212 208 202 212 209 205 213 210 202 213 212 213 214 211 206 215 212 207 216 213 206 218 215 210 220 221 223 221 219 214 222 219 215 222 220 215 230 228 225 236 235 232 243 243 244 255 255 255]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@C@@@C@@@C@G C@_8C@?<CA?>CC??CC??CG??#G??#G??#G??#C??CC??CA?>C@?<C@_8C@G C@@@C@@@C@@@C') ; yourself); yourself]
fm@2327
   185
!
fm@2327
   186
fm@2327
   187
searchPreviousIcon
fm@2327
   188
    "This resource specification was automatically generated
fm@2327
   189
     by the ImageEditor of ST/X."
fm@2327
   190
fm@2327
   191
    "Do not manually edit this!! If it is corrupted,
fm@2327
   192
     the ImageEditor may not be able to read the specification."
fm@2327
   193
fm@2327
   194
    "
fm@2327
   195
     self searchPreviousIcon inspect
fm@2327
   196
     ImageEditor openOnClass:self andSelector:#searchPreviousIcon
fm@2327
   197
     Icon flushCachedIcons
fm@2327
   198
    "
fm@2327
   199
fm@2327
   200
    <resource: #image>
fm@2327
   201
fm@2327
   202
    ^Icon
fm@2327
   203
        constantNamed:#'Psiware::SystemManagement class searchPreviousIcon'
fm@2327
   204
        ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
fm@2327
   205
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%)^W% @@@@@@@@@@@@@@
fm@2327
   206
@@@@@@BMJ0$A@P$+#P@@@@@@@@@@@@@@@@AQ@Q$4XU 0E@EQ@@@@@@@@@@@@@@ALAD-.XE]VS$(/@$0@@@@@@@@@@@BD@UA/YU4&IT%EP28A!!@@@@@@@@@@@
fm@2327
   207
I11:Z&\)NS$"QC=ADRD@@@@@@@@@# !!H]F$<II&YH3H>N2 H# @@@@@@@H,A GE\FI"Y&Y VMS)@@X,@@@@@@@BG@XE3HIJY&Y&Y$!!,=P FG@@@@@@@@  ]M
fm@2327
   208
T5JY&Y&Y&Y%RLR4G  @@@@@@@@@_G&4RC08MC@,JDC\SG0@@@@@@@@@@V0E__WA+X%%TS5T3@U,@@@@@@@@@@@@,AVQ?\&1#W&X8@20@@@@@@@@@@@@@@B(A
fm@2327
   209
GT]9]#XW@R(@@@@@@@@@@@@@@@@@Q!!(F@PDFETX@@@@@@@@@@@@@@@@@@@@@ZE)ZZ@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
fm@2327
   210
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 48 54 77 55 63 87 56 64 89 57 67 90 59 67 90 64 69 89 71 74 92 72 76 96 76 81 100 80 89 118 82 90 119 83 91 120 84 92 122 86 94 123 87 96 124 89 97 126 92 104 132 97 106 136 97 110 138 97 112 138 100 102 112 101 107 130 104 118 144 105 113 135 105 124 146 107 109 118 107 116 144 110 127 148 112 126 148 113 129 148 117 119 129 118 130 156 119 123 133 125 140 174 127 131 146 127 132 148 127 146 178 130 151 181 131 132 143 133 149 185 133 152 182 134 134 138 137 140 150 138 138 142 139 156 191 141 160 195 143 164 199 143 169 198 144 157 197 144 158 197 152 173 208 153 184 209 155 167 210 156 180 208 157 179 215 157 180 211 160 162 171 160 173 216 160 174 216 160 182 214 161 173 217 161 174 217 161 176 219 161 179 220 161 180 220 163 182 222 163 184 222 164 182 222 164 184 223 166 164 161 166 189 212 166 194 211 167 190 228 167 194 229 167 200 221 169 170 174 169 195 212 169 196 232 170 181 228 170 203 221 171 171 176 171 173 182 171 193 220 173 182 232 173 192 232 173 200 234 175 206 239 175 210 240 176 188 237 178 175 168 178 175 173 178 202 234 178 206 240 179 195 238 180 205 223 180 214 243 180 216 244 181 193 242 181 195 239 181 204 223 181 212 243 182 206 242 182 209 243 184 180 173 184 211 244 184 215 245 185 198 246 185 200 244 188 215 233 188 225 249 189 226 249 190 206 250 190 219 248 191 209 249 191 217 248 191 222 248 192 188 181 192 221 249 194 190 184 195 191 184 196 226 251 196 232 251 199 196 189 202 198 191 202 226 253 203 199 193 203 229 253 203 237 252 203 237 253 204 202 196 206 202 195 206 205 204 207 203 196 208 204 197 208 205 201 212 208 200 212 208 201 212 208 202 212 209 205 213 210 202 213 212 213 214 211 206 215 212 207 216 213 206 218 215 210 220 221 223 221 219 214 222 219 215 222 220 215 230 228 225 236 235 232 243 243 244 255 255 255]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@C@@@C@@@C@G C@_8C@?<CA?>CC??CC??CG??#G??#G??#G??#C??CC??CA?>C@?<C@_8C@G C@@@C@@@C@@@C') ; yourself); yourself]
fm@2327
   211
!
fm@2327
   212
fm@2327
   213
searchToolBarIcon
fm@2327
   214
    "This resource specification was automatically generated
fm@2327
   215
     by the ImageEditor of ST/X."
fm@2327
   216
fm@2327
   217
    "Do not manually edit this!! If it is corrupted,
fm@2327
   218
     the ImageEditor may not be able to read the specification."
fm@2327
   219
fm@2327
   220
    "
fm@2327
   221
     self searchToolBarIcon inspect
fm@2327
   222
     ImageEditor openOnClass:self andSelector:#searchToolBarIcon
fm@2327
   223
     Icon flushCachedIcons
fm@2327
   224
    "
fm@2327
   225
fm@2327
   226
    <resource: #image>
fm@2327
   227
fm@2327
   228
    ^Icon
fm@2327
   229
        constantNamed:#'Psiware::SystemManagement class searchToolBarIcon'
fm@2327
   230
        ifAbsentPut:[(Depth24Image new) width: 22; height: 22; photometric:(#rgb); bitsPerSample:(#[8 8 8]); samplesPerPixel:(3); bits:(ByteArray fromPackedString:'
fm@2327
   231
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
fm@2327
   232
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
fm@2327
   233
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@4][>4][>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
fm@2327
   234
@@@@@@@@@@@@@@@@@@@@@@@@@@@@;>#8/L#+!!:KS!!:KS/,'',;>''9@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@2];>^)WH
fm@2327
   235
NE:+KU*:J5&9NE6*_I#K4^S>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@4][>RV3DLER"SWR6$K#0#;[.SGJ4L5"''UG_N4][>@@@@
fm@2327
   236
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*K''\JT*,U6Z7:^S?>/C*;.3,6>C>RFF(KEZ"3-_-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
fm@2327
   237
@@@@@@@@@@@@&Z''HFTF &Z7">N#:7NK?7NK?6=W>!!Y''YH4N -+3T@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%I>;FDV)#ZWU??''57NK?
fm@2327
   238
7NK?:>_?\8WKFCN".K#T@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1L;.A#V[O5")3=W;=/[4</W:1,??K$JVI4Z\7-''4@@@@@@@@@@@@
fm@2327
   239
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7NK?-,[1E#:&C"ZZH3F U6_EU63FHS^XHS.K JOX7-''4@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7NK?
fm@2327
   240
,K_*O5ZTCRBLPU&0FCBHDB&RDR6RH$NI Y#I4][>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7NK?-;#%ND&KC">BYV.*4=;>7.+>-<K!!,K/!!7NK?
fm@2327
   241
:^C;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7NK?/K3^PT%<CBI/NE>==O;8@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
fm@2327
   242
@@@@@@@@@@@@7NK? (J9GB1SZV>W:M3?@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@5MS&++3H6M/#@@@@
fm@2327
   243
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7NK?@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
fm@2327
   244
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
fm@2327
   245
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
fm@2327
   246
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
fm@2327
   247
@@@@@@@@@@@@@@@@') ; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@C@@@C@@@C@A C@G8C@O<C@_>C@_>C@_>C@_>C@_>C@?>CA?<CC?8CG8@CG0@CC @CA@@C@@@C@@@C@@@C@@@C') ; yourself); yourself]
fm@2327
   248
!
fm@2327
   249
fm@2327
   250
warningSearchBarIcon
fm@2327
   251
    "This resource specification was automatically generated
fm@2327
   252
     by the ImageEditor of ST/X."
fm@2327
   253
fm@2327
   254
    "Do not manually edit this!! If it is corrupted,
fm@2327
   255
     the ImageEditor may not be able to read the specification."
fm@2327
   256
fm@2327
   257
    "
fm@2327
   258
     self warningSearchBarIcon inspect
fm@2327
   259
     ImageEditor openOnClass:self andSelector:#warningSearchBarIcon
fm@2327
   260
     Icon flushCachedIcons
fm@2327
   261
    "
fm@2327
   262
fm@2327
   263
    <resource: #image>
fm@2327
   264
fm@2327
   265
    ^Icon
fm@2327
   266
        constantNamed:#'Psiware::SystemManagement class warningSearchBarIcon'
fm@2327
   267
        ifAbsentPut:[(Depth24Image new) width: 22; height: 19; photometric:(#rgb); bitsPerSample:(#[8 8 8]); samplesPerPixel:(3); bits:(ByteArray fromPackedString:'
fm@2327
   268
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@?:.+<Y"P??C\@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@>_;?@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
fm@2327
   269
@@@@?]SZ)5]X.6!! -HM2??''*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@?>39-7*B4H&G>[N+%%MJ>\#A@@@@@@@@
fm@2327
   270
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@<+R?*U1&?=CN?>W^4HJ@+FY$?>+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
fm@2327
   271
@@@@@@@@@@@@@@@@@@@@?>G_)U!!^>Z^->,B><+"4?*^-%C8?;;Z+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@??#1-(E;.65+?<#H
fm@2327
   272
?=_T?=GP?::65W-=(EQF?>WQ@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@?\#D*VAY?;61<;"0;,C@6J^+;*"0>ZN$&CX)6(-:@@@@@@@@
fm@2327
   273
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@?>#+/7Q148E6?<"4<L&:W#(:G@@@392!!48^G9WM(%24_?=WN@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
fm@2327
   274
??C?7Y&$.E5\?;V*=<:8??K_R3X5DP@@4+R49ZZ!!7VIZ/#85)%UR??G/@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@?=7.2&)6=IJQ?;..=]W@??7*PS$7E@,N
fm@2327
   275
4<OC?>K^>(M=1S8;)$ID8Y6^@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@;HNR4U%%<)&S?<^9??_(??;3REEN@P,J2<[C??K/?:R!!/C8?&R(0(T-N?>GZ@@@@
fm@2327
   276
@@@@@@@@@@@@@@@@@@@@?<;H,31B3T9U2'')1?L3@?>3&=^7*XWE0@@<M7=;\??S3?=_U46-,#Q(!!$B,/18"A@@@@@@@@@@@@@@@@@@@@??G&1G!!*,S03)SP,
fm@2327
   277
3()?>=WL??_:<>33[G:@D2T%;^/,??#8??K19Y6^&R(0!!QPX#S8:;K22@@@@@@@@@@@@@@@@<*RZ+5I@*$D+*T48<[N&?>C_7,+U??3?7N''/(J.-?/+;??W5
fm@2327
   278
;.O!!?>G_3&]+ 0(O#B8.(U9X@@@@@@@@@@@@?<?Y/%MM.487%$P^7I)7?<&=?=+ <^W3;?C?YV]3JR .-*60=/W35.[#<>W"?:*+*3@3$R\)^R ''2)^T@@@@
fm@2327
   279
?>K2;(ZO2DQ@-SP!!,5H/?<F!!?<V=?;3B?=_"?>7:)72EUBT+<,GD?>?,<M;Z>]GO?<#J8VM& P4P_A0^ C(:?>+''?:"+34%H13L/02("13T(13\,5$H>3S<=
fm@2327
   280
1TMC0DQD/$IB/D@>.S4;-S,8,C(:,C 9-3X:(A4""@4R_1DT RH&/6%*?82D/S8503873C<85C<923H,23@+/RP\-"HX,"HW+"DX*"@V)10U)1(S)!!XU)AXU
fm@2327
   281
(Q0_$1XZ#1X["A(]^QPX&34>?;&).&-Z/6]Y06MU1&AR/5UG15-N0EYF1&EO0&EN/&EP.6AN.%5N.5-M.5%P/UYQ.$)I.4)L0UQW/U-\+5YX5XFA') ; mask:((Depth1Image new) width: 22; height: 19; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@C G@G0C@O0C@O8C@_8C@?<C@?<CA?>CC??CC??CC??#G??#O??3O??3_??;????????????????') ; yourself); yourself]
fm@2327
   282
! !
fm@2327
   283
cg@2015
   284
!InternationalLanguageTranslationEditor class methodsFor:'interface specs'!
cg@2015
   285
cg@2015
   286
windowSpec
cg@2015
   287
    "This resource specification was automatically generated
cg@2015
   288
     by the UIPainter of ST/X."
cg@2015
   289
cg@2015
   290
    "Do not manually edit this!! If it is corrupted,
cg@2015
   291
     the UIPainter may not be able to read the specification."
cg@2015
   292
cg@2015
   293
    "
cg@2048
   294
     UIPainter new openOnClass:Tools::InternationalLanguageTranslationEditor andSelector:#windowSpec
cg@2048
   295
     Tools::InternationalLanguageTranslationEditor new openInterface:#windowSpec
cg@2048
   296
     Tools::InternationalLanguageTranslationEditor open
cg@2015
   297
    "
cg@2015
   298
cg@2015
   299
    <resource: #canvas>
cg@2015
   300
cg@2015
   301
    ^ 
cg@2015
   302
     #(FullSpec
cg@2015
   303
        name: windowSpec
cg@2015
   304
        window: 
cg@2015
   305
       (WindowSpec
cg@2015
   306
          label: 'InternationalLanguageTranslationEditor'
cg@2015
   307
          name: 'InternationalLanguageTranslationEditor'
cg@2015
   308
          min: (Point 10 10)
fm@2327
   309
          bounds: (Rectangle 0 0 774 610)
cg@2015
   310
          menu: mainMenu
cg@2015
   311
        )
cg@2015
   312
        component: 
cg@2015
   313
       (SpecCollection
cg@2015
   314
          collection: (
cg@2015
   315
           (MenuPanelSpec
cg@2015
   316
              name: 'ToolBar'
cg@2015
   317
              layout: (LayoutFrame 0 0 0 0 0 1 30 0)
cg@2015
   318
              menu: menuToolBar
cg@2015
   319
              textDefault: true
cg@2015
   320
            )
cg@2015
   321
           (VariableVerticalPanelSpec
fm@2327
   322
              name: 'TranslationsVariableVerticalPanel'
fm@2327
   323
              layout: (LayoutFrame 0 0 30 0 0 1 -32 1)
cg@2015
   324
              component: 
cg@2015
   325
             (SpecCollection
cg@2015
   326
                collection: (
cg@2015
   327
                 (DataSetSpec
cg@2015
   328
                    name: 'KeyStringAndLanguageSelectionTable'
cg@2015
   329
                    model: selectedKeyRow
fm@2163
   330
                    menu: keyStringAndLanguageSelectionTableMenu
cg@2015
   331
                    hasHorizontalScrollBar: true
cg@2015
   332
                    hasVerticalScrollBar: true
cg@2015
   333
                    dataList: keyStringAndLanguageSelectionTable
cg@2015
   334
                    columnHolder: keyStringAndLanguageSelectionTableColumnDescriptionHolder
fm@2049
   335
                    beDependentOfRows: true
cg@2015
   336
                    columnAdaptor: yourself
cg@2015
   337
                    postBuildCallback: postBuildDataSet:
cg@2015
   338
                  )
fm@2050
   339
                 (VariableVerticalPanelSpec
fm@2050
   340
                    name: 'VariableVerticalPanel1'
cg@2015
   341
                    component: 
cg@2015
   342
                   (SpecCollection
cg@2015
   343
                      collection: (
fm@2050
   344
                       (ViewSpec
fm@2050
   345
                          name: 'Box1'
fm@2050
   346
                          component: 
fm@2050
   347
                         (SpecCollection
fm@2050
   348
                            collection: (
fm@2050
   349
                             (LabelSpec
fm@2050
   350
                                label: 'Original String (Key):'
fm@2050
   351
                                name: 'Label2'
fm@2050
   352
                                layout: (LayoutFrame 0 0 -2 0 0 1 28 0)
fm@2050
   353
                                translateLabel: true
fm@2050
   354
                                adjust: left
fm@2050
   355
                              )
fm@2050
   356
                             (TextEditorSpec
fm@2050
   357
                                name: 'OriginalText'
fm@2050
   358
                                layout: (LayoutFrame 0 0 27 0 0 1 -2 1)
fm@2050
   359
                                model: originalTextHolder
fm@2050
   360
                                hasHorizontalScrollBar: true
fm@2050
   361
                                hasVerticalScrollBar: true
fm@2050
   362
                                modifiedChannel: originalTextModifiedHolder
fm@2050
   363
                                acceptCallBack: languageTextAccepted
fm@2050
   364
                              )
fm@2050
   365
                             )
fm@2050
   366
                           
fm@2050
   367
                          )
cg@2015
   368
                        )
fm@2050
   369
                       (ViewSpec
fm@2050
   370
                          name: 'Box3'
fm@2050
   371
                          component: 
fm@2050
   372
                         (SpecCollection
fm@2050
   373
                            collection: (
fm@2050
   374
                             (LabelSpec
fm@2051
   375
                                label: 'Select Another Language as example:'
fm@2050
   376
                                name: 'Label3'
fm@2050
   377
                                layout: (LayoutFrame 0 0 -6 0 0 1 24 0)
fm@2050
   378
                                translateLabel: true
fm@2050
   379
                                adjust: left
fm@2050
   380
                              )
fm@2050
   381
                             (ComboBoxSpec
fm@2050
   382
                                name: 'ComboBox1'
fm@2050
   383
                                layout: (LayoutFrame 197 0 -2 0 322 0 18 0)
fm@2050
   384
                                model: exampleLanguageSelectionHolder
fm@2050
   385
                                immediateAccept: false
fm@2050
   386
                                acceptOnLeave: true
fm@2050
   387
                                acceptOnLostFocus: true
fm@2050
   388
                                acceptOnPointerLeave: false
fm@2050
   389
                                comboList: shownLanguages
fm@2050
   390
                                useIndex: false
fm@2050
   391
                              )
fm@2050
   392
                             (TextEditorSpec
fm@2050
   393
                                name: 'ExampleLanguageText'
fm@2051
   394
                                layout: (LayoutFrame 0 0 30 0 0 1 0 1)
fm@2050
   395
                                model: exampleLanguageTextHolder
fm@2050
   396
                                hasHorizontalScrollBar: true
fm@2050
   397
                                hasVerticalScrollBar: true
fm@2050
   398
                                isReadOnly: true
fm@2050
   399
                              )
fm@2050
   400
                             )
fm@2050
   401
                           
fm@2050
   402
                          )
fm@2050
   403
                        )
fm@2050
   404
                       (ViewSpec
fm@2050
   405
                          name: 'Box2'
fm@2050
   406
                          component: 
fm@2050
   407
                         (SpecCollection
fm@2050
   408
                            collection: (
fm@2050
   409
                             (LabelSpec
fm@2050
   410
                                label: 'Translated String:'
fm@2050
   411
                                name: 'Label1'
fm@2050
   412
                                layout: (LayoutFrame 0 0 0 0 0 1 30 0)
fm@2050
   413
                                translateLabel: true
fm@2050
   414
                                adjust: left
fm@2050
   415
                              )
fm@2050
   416
                             (TextEditorSpec
fm@2050
   417
                                name: 'LanguageText'
fm@2050
   418
                                layout: (LayoutFrame 0 0 30 0 0 1 0 1)
fm@2050
   419
                                model: languageTextHolder
fm@2050
   420
                                hasHorizontalScrollBar: true
fm@2050
   421
                                hasVerticalScrollBar: true
fm@2050
   422
                                acceptChannel: languageTextAcceptHolder
fm@2050
   423
                                modifiedChannel: languageTextModifiedHolder
fm@2050
   424
                                acceptCallBack: languageTextAccepted
fm@2050
   425
                                postBuildCallback: languageEditorBuilt:
fm@2050
   426
                              )
fm@2051
   427
                             (ActionButtonSpec
fm@2051
   428
                                label: 'Paste Previous'
fm@2051
   429
                                name: 'pastePreviousTranslation'
fm@2051
   430
                                layout: (LayoutOrigin 0 0.83085250338295 0 0.03448275862069)
fm@2051
   431
                                translateLabel: true
fm@2051
   432
                                model: pastePreviousTranslationInLanguageText
fm@2051
   433
                                enableChannel: pastePreviousTranslationEnableHolder
fm@2051
   434
                                disabledLogo: 'Paste Previous'
fm@2051
   435
                              )
fm@2323
   436
                             (ActionButtonSpec
fm@2323
   437
                                label: 'Paste Original'
fm@2323
   438
                                name: 'Button1'
fm@2323
   439
                                layout: (LayoutOrigin -95 0.83085250338295 0 0.03448275862069)
fm@2323
   440
                                translateLabel: true
fm@2323
   441
                                model: pasteOriginalInLanguageText
fm@2323
   442
                                enableChannel: pasteOriginalEnableHolder
fm@2323
   443
                                disabledLogo: 'Paste Original'
fm@2323
   444
                              )
fm@2050
   445
                             )
fm@2050
   446
                           
fm@2050
   447
                          )
cg@2015
   448
                        )
cg@2015
   449
                       )
cg@2015
   450
                     
cg@2015
   451
                    )
fm@2050
   452
                    handles: (Any 0.33333333333333 0.66666666666667 1.0)
cg@2015
   453
                  )
cg@2015
   454
                 )
cg@2015
   455
               
cg@2015
   456
              )
fm@2050
   457
              handles: (Any 0.5 1.0)
fm@2327
   458
              postBuildCallback: postBuildTranslationsPanel:
fm@2327
   459
            )
fm@2327
   460
           (ViewSpec
fm@2327
   461
              name: 'SearchBox'
fm@2327
   462
              layout: (LayoutFrame 0 0 -32 1 0 1 0 1)
fm@2327
   463
              level: -1
fm@2327
   464
              visibilityChannel: searchBoxVisible
fm@2327
   465
              component: 
fm@2327
   466
             (SpecCollection
fm@2327
   467
                collection: (
fm@2327
   468
                 (ActionButtonSpec
fm@2327
   469
                    label: 'closeSearchBarIcon'
fm@2327
   470
                    name: 'closeSearchBarButton'
fm@2327
   471
                    layout: (LayoutFrame 4 0 5 0 25 0 26 0)
fm@2327
   472
                    hasCharacterOrientedLabel: false
fm@2327
   473
                    translateLabel: true
fm@2327
   474
                    model: closeSearchBar
fm@2327
   475
                  )
fm@2327
   476
                 (LabelSpec
fm@2327
   477
                    label: 'Search:'
fm@2327
   478
                    name: 'SearchLabel'
fm@2327
   479
                    layout: (LayoutFrame 30 0 5 0 81 0 27 0)
fm@2327
   480
                    translateLabel: true
fm@2327
   481
                    adjust: right
fm@2327
   482
                  )
fm@2327
   483
                 (InputFieldSpec
fm@2327
   484
                    name: 'SearchEntryField'
fm@2327
   485
                    layout: (LayoutFrame 87 0 5 0 244 0 27 0)
fm@2327
   486
                    model: searchTextHolder
fm@2327
   487
                    immediateAccept: true
fm@2327
   488
                    acceptOnReturn: true
fm@2327
   489
                    acceptOnTab: true
fm@2327
   490
                    acceptOnLostFocus: true
fm@2327
   491
                    modifiedChannel: searchTextModifiedHolder
fm@2327
   492
                    acceptOnPointerLeave: false
fm@2327
   493
                    postBuildCallback: postBuildSearchTextView:
fm@2327
   494
                  )
fm@2327
   495
                 (ActionButtonSpec
fm@2327
   496
                    label: 'searchNextIcon'
fm@2327
   497
                    name: 'SearchNextButton'
fm@2327
   498
                    layout: (LayoutFrame 251 0 5 0 272 0 26 0)
fm@2327
   499
                    hasCharacterOrientedLabel: false
fm@2327
   500
                    translateLabel: true
fm@2327
   501
                    model: searchNextText
fm@2327
   502
                  )
fm@2327
   503
                 (ActionButtonSpec
fm@2327
   504
                    label: 'searchPreviousIcon'
fm@2327
   505
                    name: 'searchPreviousButton'
fm@2327
   506
                    layout: (LayoutFrame 279 0 5 0 300 0 26 0)
fm@2327
   507
                    hasCharacterOrientedLabel: false
fm@2327
   508
                    translateLabel: true
fm@2327
   509
                    model: searchPreviousText
fm@2327
   510
                  )
fm@2327
   511
                 (CheckBoxSpec
fm@2327
   512
                    label: 'Ignore case'
fm@2327
   513
                    name: 'IgnoreCaseCheckBox'
fm@2329
   514
                    layout: (LayoutFrame 309 0 5 0 505 0 27 0)
fm@2327
   515
                    model: ignoreCaseHolder
fm@2327
   516
                    translateLabel: true
fm@2327
   517
                  )
fm@2327
   518
                 (LabelSpec
fm@2327
   519
                    label: 'SearchBarImageInfoLabel'
fm@2327
   520
                    name: 'SearchBarImageInfoLabel'
fm@2329
   521
                    layout: (LayoutFrame 511 0 5 0 535 0 27 0)
fm@2327
   522
                    hasCharacterOrientedLabel: false
fm@2327
   523
                    translateLabel: true
fm@2327
   524
                    labelChannel: searchBarImageInfoLabelHolder
fm@2327
   525
                  )
fm@2327
   526
                 (LabelSpec
fm@2327
   527
                    label: 'SearchBarInfoLabel'
fm@2327
   528
                    name: 'SearchBarInfoLabel'
fm@2329
   529
                    layout: (LayoutFrame 538 0 5 0 816 0 27 0)
fm@2327
   530
                    translateLabel: true
fm@2327
   531
                    labelChannel: searchBarInfoLabelHolder
fm@2327
   532
                    adjust: left
fm@2327
   533
                  )
fm@2327
   534
                 )
fm@2327
   535
               
fm@2327
   536
              )
fm@2327
   537
              postBuildCallback: postBuildSearchBoxView:
cg@2015
   538
            )
cg@2015
   539
           )
cg@2015
   540
         
cg@2015
   541
        )
cg@2015
   542
      )
cg@2015
   543
! !
cg@2015
   544
cg@2015
   545
!InternationalLanguageTranslationEditor class methodsFor:'menu specs'!
cg@2015
   546
fm@2163
   547
keyStringAndLanguageSelectionTableMenu
fm@2163
   548
    "This resource specification was automatically generated
fm@2163
   549
     by the MenuEditor of ST/X."
fm@2163
   550
fm@2163
   551
    "Do not manually edit this!! If it is corrupted,
fm@2163
   552
     the MenuEditor may not be able to read the specification."
fm@2163
   553
fm@2163
   554
    "
fm@2163
   555
     MenuEditor new openOnClass:Tools::InternationalLanguageTranslationEditor andSelector:#keyStringAndLanguageSelectionTableMenu
fm@2163
   556
     (Menu new fromLiteralArrayEncoding:(Tools::InternationalLanguageTranslationEditor keyStringAndLanguageSelectionTableMenu)) startUp
fm@2163
   557
    "
fm@2163
   558
fm@2163
   559
    <resource: #menu>
fm@2163
   560
fm@2163
   561
    ^ 
fm@2163
   562
     #(Menu
fm@2163
   563
        (
fm@2163
   564
         (MenuItem
fm@2327
   565
            label: 'Set Current NameSpace'
fm@2163
   566
            itemValue: changeLastNameSpace
fm@2163
   567
            translateLabel: true
fm@2163
   568
          )
fm@2163
   569
         (MenuItem
fm@2327
   570
            label: 'Search String in Current NameSpace'
fm@2163
   571
            itemValue: searchStringInLastNameSpace
fm@2163
   572
            translateLabel: true
fm@2163
   573
          )
fm@2327
   574
         (MenuItem
fm@2327
   575
            label: '-'
fm@2327
   576
            isVisible: #false
fm@2327
   577
          )
fm@2327
   578
         (MenuItem
fm@2327
   579
            label: 'Set Current Package'
fm@2327
   580
            itemValue: changeLastPackage
fm@2327
   581
            translateLabel: true
fm@2327
   582
            isVisible: #false
fm@2327
   583
          )
fm@2327
   584
         (MenuItem
fm@2327
   585
            label: 'Search String in Current Package'
fm@2327
   586
            itemValue: searchStringInLastPackage
fm@2327
   587
            translateLabel: true
fm@2327
   588
            isVisible: #false
fm@2327
   589
          )
fm@2163
   590
         )
fm@2163
   591
        nil
fm@2163
   592
        nil
fm@2163
   593
      )
fm@2163
   594
!
fm@2163
   595
cg@2015
   596
mainMenu
cg@2015
   597
    "This resource specification was automatically generated
cg@2015
   598
     by the MenuEditor of ST/X."
cg@2015
   599
cg@2015
   600
    "Do not manually edit this!! If it is corrupted,
cg@2015
   601
     the MenuEditor may not be able to read the specification."
cg@2015
   602
cg@2015
   603
    "
fm@2050
   604
     MenuEditor new openOnClass:Tools::InternationalLanguageTranslationEditor andSelector:#mainMenu
fm@2050
   605
     (Menu new fromLiteralArrayEncoding:(Tools::InternationalLanguageTranslationEditor mainMenu)) startUp
cg@2015
   606
    "
cg@2015
   607
cg@2015
   608
    <resource: #menu>
cg@2015
   609
cg@2015
   610
    ^ 
cg@2015
   611
     #(Menu
cg@2015
   612
        (
cg@2015
   613
         (MenuItem
cg@2015
   614
            label: 'File'
cg@2015
   615
            translateLabel: true
cg@2015
   616
            submenu: 
cg@2015
   617
           (Menu
cg@2015
   618
              (
cg@2015
   619
               (MenuItem
cg@2015
   620
                  label: 'New'
cg@2015
   621
                  itemValue: menuNew
cg@2015
   622
                  translateLabel: true
cg@2015
   623
                )
cg@2015
   624
               (MenuItem
cg@2015
   625
                  label: '-'
cg@2015
   626
                )
cg@2015
   627
               (MenuItem
cg@2410
   628
                  label: 'Open Resources for Package or Project...'
cg@2410
   629
                  itemValue: menuOpenByPackage
cg@2410
   630
                  translateLabel: true
cg@2410
   631
                )
cg@2410
   632
               (MenuItem
cg@2015
   633
                  label: 'Open Resource File...'
cg@2015
   634
                  itemValue: menuOpen
cg@2015
   635
                  translateLabel: true
cg@2015
   636
                )
cg@2015
   637
               (MenuItem
cg@2015
   638
                  label: '-'
cg@2015
   639
                )
cg@2015
   640
               (MenuItem
fm@2053
   641
                  label: 'Save All Resource Files'
fm@2053
   642
                  itemValue: menuSaveAll
fm@2053
   643
                  translateLabel: true
fm@2053
   644
                )
fm@2053
   645
               (MenuItem
cg@2015
   646
                  label: 'Save Resource File'
cg@2015
   647
                  itemValue: menuSave
cg@2015
   648
                  translateLabel: true
cg@2015
   649
                )
cg@2015
   650
               (MenuItem
cg@2015
   651
                  label: 'Save Resource File As...'
cg@2015
   652
                  itemValue: menuSaveAs
cg@2015
   653
                  translateLabel: true
cg@2015
   654
                )
cg@2015
   655
               (MenuItem
cg@2015
   656
                  label: '-'
cg@2015
   657
                )
cg@2015
   658
               (MenuItem
cg@2410
   659
                  label: 'Import existing translations from file...'
fm@2327
   660
                  itemValue: importExistingTranslationsFromFile
fm@2327
   661
                  translateLabel: true
fm@2327
   662
                )
fm@2327
   663
               (MenuItem
fm@2327
   664
                  label: '-'
fm@2327
   665
                )
fm@2327
   666
               (MenuItem
fm@2327
   667
                  label: 'Set Current NameSpace'
fm@2163
   668
                  itemValue: changeLastNameSpace
fm@2163
   669
                  translateLabel: true
fm@2163
   670
                )
fm@2163
   671
               (MenuItem
fm@2327
   672
                  label: 'Set Current Package'
fm@2327
   673
                  itemValue: changeLastPackage
fm@2327
   674
                  translateLabel: true
fm@2327
   675
                  isVisible: #false
fm@2327
   676
                )
fm@2327
   677
               (MenuItem
fm@2163
   678
                  label: '-'
fm@2163
   679
                )
fm@2163
   680
               (MenuItem
cg@2015
   681
                  label: 'Exit'
cg@2015
   682
                  itemValue: closeRequest
cg@2015
   683
                  translateLabel: true
cg@2015
   684
                )
cg@2015
   685
               )
cg@2015
   686
              nil
cg@2015
   687
              nil
cg@2015
   688
            )
cg@2015
   689
          )
cg@2015
   690
         (MenuItem
cg@2015
   691
            label: 'View'
cg@2015
   692
            translateLabel: true
cg@2015
   693
            submenu: 
cg@2015
   694
           (Menu
cg@2015
   695
              (
cg@2015
   696
               (MenuItem
cg@2015
   697
                  label: 'Show Missing Translations Only'
cg@2015
   698
                  translateLabel: true
cg@2015
   699
                  indication: showMissingTranslationsOnly
cg@2015
   700
                )
cg@2015
   701
               (MenuItem
cg@2015
   702
                  label: '-'
cg@2015
   703
                )
cg@2015
   704
               (MenuItem
cg@2015
   705
                  label: 'Shown Languages'
cg@2015
   706
                  translateLabel: true
cg@2015
   707
                  submenuChannel: shownLanguagesMenu
cg@2015
   708
                )
cg@2015
   709
               )
cg@2015
   710
              nil
cg@2015
   711
              nil
cg@2015
   712
            )
cg@2015
   713
          )
cg@2015
   714
         (MenuItem
cg@2015
   715
            label: 'Languages'
cg@2015
   716
            translateLabel: true
cg@2015
   717
            submenu: 
cg@2015
   718
           (Menu
cg@2015
   719
              (
cg@2015
   720
               (MenuItem
cg@2015
   721
                  label: 'Add Language...'
cg@2015
   722
                  itemValue: addLanguage
cg@2015
   723
                  translateLabel: true
cg@2015
   724
                )
cg@2015
   725
               (MenuItem
cg@2015
   726
                  label: 'Remove Language...'
cg@2015
   727
                  itemValue: removeLanguage
cg@2015
   728
                  translateLabel: true
cg@2015
   729
                )
cg@2015
   730
               )
cg@2015
   731
              nil
cg@2015
   732
              nil
cg@2015
   733
            )
cg@2015
   734
          )
cg@2015
   735
         (MenuItem
cg@2015
   736
            label: 'Translations'
cg@2015
   737
            translateLabel: true
cg@2015
   738
            submenu: 
cg@2015
   739
           (Menu
cg@2015
   740
              (
cg@2015
   741
               (MenuItem
cg@2015
   742
                  label: 'Add Translation...'
cg@2015
   743
                  itemValue: addTranslation
cg@2015
   744
                  translateLabel: true
cg@2015
   745
                )
cg@2015
   746
               (MenuItem
cg@2015
   747
                  label: 'Remove Translation...'
cg@2015
   748
                  itemValue: removeTranslation
cg@2015
   749
                  translateLabel: true
cg@2015
   750
                )
cg@2015
   751
               (MenuItem
cg@2015
   752
                  label: '-'
cg@2015
   753
                )
cg@2015
   754
               (MenuItem
cg@2015
   755
                  label: 'Extract from Class...'
cg@2015
   756
                  itemValue: extractTranslationsFromClass
cg@2015
   757
                  translateLabel: true
cg@2015
   758
                )
cg@2015
   759
               (MenuItem
cg@2032
   760
                  label: 'Extract from Project...'
cg@2032
   761
                  itemValue: extractTranslationsFromProject
cg@2032
   762
                  translateLabel: true
cg@2032
   763
                )
cg@2032
   764
               (MenuItem
fm@2163
   765
                  label: 'Extract from NameSpace...'
fm@2163
   766
                  itemValue: extractTranslationsFromNameSpace
fm@2163
   767
                  translateLabel: true
fm@2163
   768
                )
fm@2163
   769
               (MenuItem
cg@2032
   770
                  label: '-'
cg@2032
   771
                )
cg@2032
   772
               (MenuItem
cg@2015
   773
                  label: 'Run Application and Collect Translations...'
cg@2015
   774
                  itemValue: runApplicationAndCollectTranslations
cg@2015
   775
                  translateLabel: true
cg@2015
   776
                )
cg@2015
   777
               )
cg@2015
   778
              nil
cg@2015
   779
              nil
cg@2015
   780
            )
cg@2015
   781
          )
cg@2015
   782
         (MenuItem
fm@2050
   783
            label: 'Preferences'
fm@2050
   784
            translateLabel: true
fm@2050
   785
            submenu: 
fm@2050
   786
           (Menu
fm@2050
   787
              (
fm@2050
   788
               (MenuItem
fm@2050
   789
                  label: 'Auto Accept Changes'
fm@2050
   790
                  translateLabel: true
fm@2050
   791
                  indication: autoAcceptHolder
fm@2050
   792
                )
fm@2051
   793
               (MenuItem
fm@2051
   794
                  label: 'Search For Similar Translations'
fm@2051
   795
                  translateLabel: true
fm@2051
   796
                  indication: searchForSimilarTranslationEnableHolder
fm@2051
   797
                )
fm@2053
   798
               (MenuItem
fm@2053
   799
                  label: 'Always Write UTF8'
fm@2053
   800
                  translateLabel: true
fm@2053
   801
                  indication: alwaysWriteUTF8Holder
fm@2053
   802
                )
fm@2050
   803
               )
fm@2050
   804
              nil
fm@2050
   805
              nil
fm@2050
   806
            )
fm@2050
   807
          )
fm@2050
   808
         (MenuItem
cg@2015
   809
            label: 'Help'
cg@2015
   810
            translateLabel: true
cg@2015
   811
            startGroup: right
cg@2015
   812
            submenu: 
cg@2015
   813
           (Menu
cg@2015
   814
              (
cg@2015
   815
               (MenuItem
cg@2015
   816
                  label: 'Documentation'
cg@2015
   817
                  itemValue: openDocumentation
cg@2015
   818
                  translateLabel: true
cg@2015
   819
                )
cg@2015
   820
               (MenuItem
cg@2015
   821
                  label: '-'
cg@2015
   822
                )
cg@2015
   823
               (MenuItem
cg@2015
   824
                  label: 'About this Application...'
cg@2015
   825
                  itemValue: openAboutThisApplication
cg@2015
   826
                  translateLabel: true
cg@2015
   827
                )
cg@2015
   828
               )
cg@2015
   829
              nil
cg@2015
   830
              nil
cg@2015
   831
            )
cg@2015
   832
          )
cg@2015
   833
         )
cg@2015
   834
        nil
cg@2015
   835
        nil
cg@2015
   836
      )
cg@2015
   837
!
cg@2015
   838
fm@2051
   839
menuItemsEditLanguage
fm@2051
   840
    "This resource specification was automatically generated
fm@2051
   841
     by the MenuEditor of ST/X."
fm@2051
   842
fm@2051
   843
    "Do not manually edit this!! If it is corrupted,
fm@2051
   844
     the MenuEditor may not be able to read the specification."
fm@2051
   845
fm@2051
   846
    "
fm@2051
   847
     MenuEditor new openOnClass:Tools::InternationalLanguageTranslationEditor andSelector:#menu
fm@2051
   848
     (Menu new fromLiteralArrayEncoding:(Tools::InternationalLanguageTranslationEditor menu)) startUp
fm@2051
   849
    "
fm@2051
   850
fm@2051
   851
    <resource: #menu>
fm@2051
   852
fm@2051
   853
    ^ 
fm@2051
   854
     #(Menu
fm@2051
   855
        (
fm@2051
   856
         (MenuItem
fm@2051
   857
            enabled: pastePreviousTranslationEnableHolder
fm@2051
   858
            label: 'Paste Previous Translation'
fm@2051
   859
            itemValue: pastePreviousTranslationInLanguageText
fm@2051
   860
            nameKey: pastePreviousTranslationInLanguageText
fm@2051
   861
            translateLabel: true
fm@2051
   862
          )
fm@2051
   863
         )
fm@2051
   864
        nil
fm@2051
   865
        nil
fm@2051
   866
      )
fm@2051
   867
!
fm@2051
   868
cg@2015
   869
menuToolBar
cg@2015
   870
    "This resource specification was automatically generated
cg@2015
   871
     by the MenuEditor of ST/X."
cg@2015
   872
cg@2015
   873
    "Do not manually edit this!! If it is corrupted,
cg@2015
   874
     the MenuEditor may not be able to read the specification."
cg@2015
   875
cg@2015
   876
    "
fm@2051
   877
     MenuEditor new openOnClass:Tools::InternationalLanguageTranslationEditor andSelector:#menuToolBar
fm@2051
   878
     (Menu new fromLiteralArrayEncoding:(Tools::InternationalLanguageTranslationEditor menuToolBar)) startUp
cg@2015
   879
    "
cg@2015
   880
cg@2015
   881
    <resource: #menu>
cg@2015
   882
cg@2015
   883
    ^ 
cg@2015
   884
     #(Menu
cg@2015
   885
        (
cg@2015
   886
         (MenuItem
cg@2015
   887
            label: 'Save'
fm@2051
   888
            itemValue: menuSave
cg@2015
   889
            translateLabel: true
cg@2015
   890
            labelImage: (ResourceRetriever XPToolbarIconLibrary saveImageIcon)
cg@2015
   891
          )
cg@2015
   892
         (MenuItem
cg@2015
   893
            label: '-'
cg@2015
   894
          )
cg@2015
   895
         (MenuItem
cg@2015
   896
            label: 'Add Translation'
cg@2015
   897
            itemValue: addTranslation
cg@2015
   898
            translateLabel: true
cg@2015
   899
            labelImage: (ResourceRetriever XPToolbarIconLibrary newRowIcon)
cg@2015
   900
          )
cg@2015
   901
         (MenuItem
cg@2015
   902
            label: 'Remove Translation'
cg@2015
   903
            itemValue: removeTranslation
cg@2015
   904
            translateLabel: true
cg@2015
   905
            labelImage: (ResourceRetriever XPToolbarIconLibrary removeRowIcon)
cg@2015
   906
          )
cg@2015
   907
         (MenuItem
fm@2327
   908
            label: '-'
fm@2327
   909
          )
fm@2327
   910
         (MenuItem
fm@2327
   911
            label: 'Search'
fm@2327
   912
            itemValue: search
fm@2327
   913
            translateLabel: true
fm@2327
   914
            shortcutKey: Ctrlf
fm@2327
   915
            labelImage: (ResourceRetriever #'Tools::InternationalLanguageTranslationEditor' searchToolBarIcon)
fm@2327
   916
          )
fm@2327
   917
         (MenuItem
cg@2015
   918
            label: ''
cg@2015
   919
          )
cg@2015
   920
         (MenuItem
cg@2015
   921
            label: 'Stop Application'
cg@2015
   922
            itemValue: stopApplication
cg@2015
   923
            translateLabel: true
cg@2015
   924
            isVisible: stopApplicationIconVisibleHolder
cg@2015
   925
            labelImage: (ResourceRetriever XPToolbarIconLibrary stop16x16Icon)
cg@2015
   926
          )
cg@2015
   927
         )
cg@2015
   928
        nil
cg@2015
   929
        nil
cg@2015
   930
      )
cg@2015
   931
! !
cg@2015
   932
cg@2047
   933
!InternationalLanguageTranslationEditor class methodsFor:'tableColumns specs'!
cg@2047
   934
cg@2047
   935
keyTableColumn
cg@2047
   936
    "This resource specification was automatically generated
cg@2047
   937
     by the DataSetBuilder of ST/X."
cg@2047
   938
cg@2047
   939
    "Do not manually edit this!! If it is corrupted,
cg@2047
   940
     the DataSetBuilder may not be able to read the specification."
cg@2047
   941
cg@2047
   942
    "
cg@2047
   943
     DataSetBuilder new openOnClass:Tools::InternationalLanguageTranslationEditor andSelector:#keyTableColumn
cg@2047
   944
    "
cg@2047
   945
cg@2047
   946
    <resource: #tableColumns>
cg@2047
   947
cg@2047
   948
    ^#(
cg@2047
   949
      (DataSetColumnSpec
cg@2047
   950
         label: 'Key'
cg@2047
   951
         labelButtonType: Button
cg@2047
   952
         minWidth: 50
cg@2047
   953
         model: keyStringInRow:
cg@2047
   954
       )
cg@2047
   955
      )
cg@2047
   956
!
cg@2047
   957
cg@2047
   958
languageTableColumn
cg@2047
   959
    "This resource specification was automatically generated
cg@2047
   960
     by the DataSetBuilder of ST/X."
cg@2047
   961
cg@2047
   962
    "Do not manually edit this!! If it is corrupted,
cg@2047
   963
     the DataSetBuilder may not be able to read the specification."
cg@2047
   964
cg@2047
   965
    "
fm@2049
   966
     DataSetBuilder new openOnClass:Tools::InternationalLanguageTranslationEditor andSelector:#languageTableColumn
cg@2047
   967
    "
cg@2047
   968
cg@2047
   969
    <resource: #tableColumns>
cg@2047
   970
cg@2047
   971
    ^#(
fm@2049
   972
      (DataSetColumnSpec
fm@2049
   973
         label: lang
fm@2049
   974
         labelButtonType: Button
fm@2049
   975
         minWidth: 50
fm@2049
   976
         editorType: None
fm@2049
   977
         model: columnInRow:at:
fm@2049
   978
         backgroundSelector: getBackgroundForRow:rowNr:col:
fm@2049
   979
       )
fm@2049
   980
      )
fm@2049
   981
! !
cg@2047
   982
fm@2049
   983
!InternationalLanguageTranslationEditor methodsFor:'accessing'!
fm@2049
   984
fm@2327
   985
currentSelectionIndex 
fm@2327
   986
fm@2327
   987
    ^ self selectedKeyRow value
fm@2327
   988
fm@2327
   989
    "Created: / 16-06-2007 / 09:04:11 / Administrador"
fm@2327
   990
    "Modified: / 19-06-2007 / 17:28:38 / Administrador"
fm@2327
   991
!
fm@2327
   992
fm@2327
   993
exists: anObject
fm@2327
   994
fm@2327
   995
    ^self objectsList includes: anObject
fm@2327
   996
fm@2327
   997
    "Created: / 19-06-2007 / 16:42:22 / Administrador"
fm@2327
   998
!
fm@2327
   999
fm@2327
  1000
indexOf: anObject
fm@2327
  1001
fm@2327
  1002
    ^self objectsList indexOf: anObject
fm@2327
  1003
fm@2327
  1004
    "Created: / 19-06-2007 / 16:39:44 / Administrador"
fm@2327
  1005
!
fm@2327
  1006
fm@2049
  1007
newLanguageText
fm@2049
  1008
"/   languageEditor accept
fm@2163
  1009
    ^self languageTextHolder value isNil 
fm@2163
  1010
        ifTrue:['']
fm@2163
  1011
        ifFalse:[self languageTextHolder value asCollectionOfLines first.]
fm@2050
  1012
!
fm@2050
  1013
fm@2327
  1014
objectsList
fm@2327
  1015
fm@2327
  1016
    ^ keyStringsToLanguageMappings 
fm@2327
  1017
!
fm@2327
  1018
fm@2327
  1019
selectListIndex: rowIndex
fm@2327
  1020
"/    |selection list|
fm@2327
  1021
"/    list := self objectsList.
fm@2327
  1022
"/    list isEmpty ifTrue:[^self].
fm@2327
  1023
"/    selection := list at:rowIndex ifAbsent:nil.
fm@2327
  1024
    self selectedKeyRow value: rowIndex.
fm@2327
  1025
fm@2327
  1026
    "Created: / 16-06-2007 / 09:06:46 / Administrador"
fm@2327
  1027
    "Modified: / 22-06-2007 / 13:45:54 / Administrador"
fm@2327
  1028
!
fm@2327
  1029
fm@2050
  1030
selectedKey  
fm@2050
  1031
   "Returns the current selected key if there is one row seleted. Otherwise, returns nil"
fm@2050
  1032
     |rowSelectionIndex |
fm@2050
  1033
fm@2163
  1034
    keyStringsToLanguageMappings isNil ifTrue:[^nil].
fm@2163
  1035
    self selectedKeyRow value isNil ifTrue:[^nil].
fm@2050
  1036
    rowSelectionIndex := self selectedKeyRow value.
fm@2050
  1037
    rowSelectionIndex == 0 ifTrue:[^nil].
fm@2050
  1038
    ^ keyStringsToLanguageMappings keyAt:rowSelectionIndex.
fm@2327
  1039
!
fm@2327
  1040
fm@2327
  1041
tableView
fm@2327
  1042
fm@2327
  1043
    ^dataSetView scrolledView
fm@2327
  1044
fm@2327
  1045
    "Created: / 15-06-2007 / 18:59:51 / Administrador"
cg@2047
  1046
! !
cg@2047
  1047
fm@2051
  1048
!InternationalLanguageTranslationEditor methodsFor:'additionalFuncionalities'!
fm@2051
  1049
fm@2051
  1050
searchForSimilarTranslation
fm@2163
  1051
    "Looks for a quite similar translation for the key and display a dialog with available options"
fm@2327
  1052
    |similarTranslationsAssociations selectedTranslation key|
fm@2051
  1053
fm@2163
  1054
    self shouldSearchForSimilarTranslation ifFalse:[^self]. 
fm@2051
  1055
fm@2327
  1056
    key := self selectedKey.
fm@2327
  1057
    key isNil ifTrue:[^ self.].
fm@2327
  1058
    similarTranslationsAssociations := keyStringsToLanguageMappings searchForSimilarTranslation: key in: self currentLanguage.
fm@2163
  1059
    similarTranslationsAssociations isEmpty ifTrue:[^self].    
fm@2051
  1060
fm@2163
  1061
    similarTranslationsAssociations := similarTranslationsAssociations associations inject: OrderedCollection new into:[:collection :association |
fm@2163
  1062
        collection detect:[:selectedAssociation |
fm@2163
  1063
            selectedAssociation value sameAs: association value] ifNone:[collection add: association].
fm@2163
  1064
        collection].
fm@2163
  1065
    selectedTranslation := Dialog 
fm@2163
  1066
        choose:'Choose one if you consider itīs usefull to translate: 
fm@2163
  1067
    ', 
fm@2327
  1068
        '<', key, '>  ', (self currentExampleLanguageText ifNil:[''])
fm@2163
  1069
        fromList: (similarTranslationsAssociations collect:[:each |  '<', each key, '>  ', each value])
fm@2163
  1070
        values: (similarTranslationsAssociations collect:[:each | each value])
fm@2163
  1071
        lines:10
fm@2163
  1072
        cancel: nil.      
fm@2051
  1073
fm@2163
  1074
    selectedTranslation notNil ifTrue:[self languageTextHolderValue: selectedTranslation]. 
fm@2051
  1075
! !
fm@2051
  1076
cg@2015
  1077
!InternationalLanguageTranslationEditor methodsFor:'aspects'!
cg@2015
  1078
fm@2053
  1079
alwaysWriteUTF8Holder
fm@2053
  1080
    alwaysWriteUTF8Holder isNil ifTrue:[alwaysWriteUTF8Holder := true asValue]. 
fm@2053
  1081
    ^ alwaysWriteUTF8Holder
fm@2053
  1082
!
fm@2053
  1083
fm@2050
  1084
autoAcceptHolder
fm@2050
  1085
    autoAcceptHolder isNil ifTrue:[autoAcceptHolder := true asValue]. 
fm@2050
  1086
    ^ autoAcceptHolder
fm@2050
  1087
!
fm@2050
  1088
fm@2050
  1089
exampleLanguageSelectionHolder
fm@2050
  1090
    exampleLanguageSelectionHolder isNil ifTrue:[
fm@2050
  1091
        exampleLanguageSelectionHolder := self exampleLanguageByDefault asValue.         
fm@2050
  1092
        exampleLanguageSelectionHolder addDependent:self.
fm@2050
  1093
    ]. 
fm@2050
  1094
    ^ exampleLanguageSelectionHolder
fm@2050
  1095
!
fm@2050
  1096
fm@2050
  1097
exampleLanguageTextHolder
fm@2050
  1098
    exampleLanguageTextHolder isNil ifTrue:[
fm@2050
  1099
        exampleLanguageTextHolder := '' asValue.
fm@2050
  1100
    ].
fm@2050
  1101
    ^ exampleLanguageTextHolder.
fm@2050
  1102
!
fm@2050
  1103
fm@2327
  1104
ignoreCaseHolder
fm@2327
  1105
fm@2327
  1106
    ignoreCaseHolder isNil ifTrue:[
fm@2327
  1107
        ignoreCaseHolder := false asValue.
fm@2327
  1108
"/ if your app needs to be notified of changes, uncomment one of the lines below:
fm@2327
  1109
"/       ignoreCaseHolder addDependent:self.
fm@2327
  1110
        ignoreCaseHolder onChangeSend:#ignoreCaseHolderChanged to:self.
fm@2327
  1111
fm@2327
  1112
    ].
fm@2327
  1113
    ^ ignoreCaseHolder.
fm@2327
  1114
fm@2327
  1115
    "Created: / 16-06-2007 / 06:45:04 / Administrador"
fm@2327
  1116
    "Modified: / 16-06-2007 / 19:32:15 / Administrador"
fm@2327
  1117
!
fm@2327
  1118
cg@2015
  1119
keyStringAndLanguageSelectionTable
cg@2015
  1120
    keyStringsToLanguageMappings isNil ifTrue:[
cg@2015
  1121
        keyStringsToLanguageMappings := KeyStringsToLanguageMappings new.
cg@2015
  1122
    ].
cg@2015
  1123
    ^ keyStringsToLanguageMappings.
cg@2015
  1124
!
cg@2015
  1125
cg@2015
  1126
keyStringAndLanguageSelectionTableColumnDescriptionHolder
cg@2015
  1127
    keyStringAndLanguageSelectionTableColumnDescriptionHolder isNil ifTrue:[
cg@2015
  1128
        keyStringAndLanguageSelectionTableColumnDescriptionHolder := ValueHolder new.
cg@2015
  1129
        keyStringAndLanguageSelectionTableColumnDescriptionHolder value:(self keyStringAndLanguageSelectionTableColumnDescription).
cg@2015
  1130
    ].
cg@2015
  1131
    ^ keyStringAndLanguageSelectionTableColumnDescriptionHolder.
cg@2015
  1132
!
cg@2015
  1133
cg@2015
  1134
languageAtCol:colNr
cg@2015
  1135
    ^ shownLanguages at:colNr-1.
cg@2015
  1136
!
cg@2015
  1137
cg@2015
  1138
languageShownHolderFor:lang
cg@2015
  1139
    |holder|
cg@2015
  1140
cg@2015
  1141
    languageShownHolders isNil ifTrue:[
cg@2015
  1142
        languageShownHolders := Dictionary new
cg@2015
  1143
    ].
cg@2015
  1144
    holder := languageShownHolders 
cg@2015
  1145
                at:lang 
cg@2015
  1146
                ifAbsentPut:[ 
cg@2015
  1147
                    |h|
cg@2015
  1148
cg@2015
  1149
                    h := true asValue.
cg@2015
  1150
                    h onChangeEvaluate:[ 
cg@2015
  1151
                        h value ifTrue:[
cg@2015
  1152
                           self enableLanguageDisplayFor:lang     
cg@2015
  1153
                        ] ifFalse:[
cg@2015
  1154
                           self disableLanguageDisplayFor:lang     
cg@2015
  1155
                        ].
cg@2015
  1156
                    ].
cg@2015
  1157
                    h
cg@2015
  1158
                ].
cg@2015
  1159
    ^ holder.
cg@2015
  1160
!
cg@2015
  1161
cg@2048
  1162
languageTextAcceptHolder
cg@2048
  1163
    languageTextAcceptHolder isNil ifTrue:[
fm@2050
  1164
        languageTextAcceptHolder := false asValue.                        
cg@2048
  1165
    ].
cg@2048
  1166
    ^ languageTextAcceptHolder.
cg@2048
  1167
!
cg@2048
  1168
cg@2015
  1169
languageTextHolder
cg@2015
  1170
    languageTextHolder isNil ifTrue:[
cg@2015
  1171
        languageTextHolder := '' asValue.
cg@2015
  1172
    ].
cg@2015
  1173
    ^ languageTextHolder.
cg@2015
  1174
!
cg@2015
  1175
cg@2015
  1176
languageTextModifiedHolder
cg@2015
  1177
    languageTextModifiedHolder isNil ifTrue:[
cg@2015
  1178
        languageTextModifiedHolder := false asValue.
cg@2015
  1179
    ].
cg@2015
  1180
    ^ languageTextModifiedHolder.
cg@2015
  1181
!
cg@2015
  1182
cg@2015
  1183
languagesList
cg@2015
  1184
    languagesList isNil ifTrue:[
cg@2015
  1185
        languagesList := List withAll:(self keyStringAndLanguageSelectionTable languages).
cg@2015
  1186
    ].
cg@2015
  1187
    ^ languagesList.
cg@2015
  1188
!
cg@2015
  1189
cg@2015
  1190
originalTextHolder
cg@2015
  1191
    originalTextHolder isNil ifTrue:[
cg@2015
  1192
        originalTextHolder := '' asValue.
cg@2015
  1193
    ].
cg@2015
  1194
    ^ originalTextHolder.
cg@2015
  1195
!
cg@2015
  1196
cg@2015
  1197
originalTextModifiedHolder
cg@2015
  1198
    originalTextModifiedHolder isNil ifTrue:[
cg@2015
  1199
        originalTextModifiedHolder := false asValue.
cg@2015
  1200
    ].
cg@2015
  1201
    ^ originalTextModifiedHolder.
cg@2015
  1202
!
cg@2015
  1203
fm@2323
  1204
pasteOriginalEnableHolder
fm@2323
  1205
   pasteOriginalEnableHolder isNil ifTrue:[pasteOriginalEnableHolder := false asValue]. 
fm@2323
  1206
    ^ pasteOriginalEnableHolder
fm@2323
  1207
!
fm@2323
  1208
fm@2051
  1209
pastePreviousTranslationEnableHolder
fm@2051
  1210
   pastePreviousTranslationEnableHolder isNil ifTrue:[pastePreviousTranslationEnableHolder := false asValue]. 
fm@2051
  1211
    ^ pastePreviousTranslationEnableHolder
fm@2051
  1212
!
fm@2051
  1213
fm@2327
  1214
searchBarImageInfoLabelHolder
fm@2327
  1215
fm@2327
  1216
    searchBarImageInfoLabelHolder isNil ifTrue:[
fm@2327
  1217
        searchBarImageInfoLabelHolder := nil asValue .
fm@2327
  1218
    ].
fm@2327
  1219
    ^ searchBarImageInfoLabelHolder.
fm@2327
  1220
fm@2327
  1221
    "Created: / 16-06-2007 / 10:06:28 / Administrador"
fm@2327
  1222
!
fm@2327
  1223
fm@2327
  1224
searchBarInfoLabelHolder
fm@2327
  1225
fm@2327
  1226
    searchBarInfoLabelHolder isNil ifTrue:[
fm@2327
  1227
        searchBarInfoLabelHolder := '' asValue .
fm@2327
  1228
    ].
fm@2327
  1229
    ^ searchBarInfoLabelHolder.
fm@2327
  1230
fm@2327
  1231
    "Created: / 16-06-2007 / 06:20:49 / Administrador"
fm@2327
  1232
!
fm@2327
  1233
fm@2327
  1234
searchBoxVisible
fm@2327
  1235
fm@2327
  1236
    searchBoxVisible isNil ifTrue:[
fm@2327
  1237
        searchBoxVisible := false asValue.
fm@2327
  1238
    ].
fm@2327
  1239
    ^ searchBoxVisible.
fm@2327
  1240
fm@2327
  1241
    "Created: / 15-06-2007 / 18:15:52 / Administrador"
fm@2327
  1242
!
fm@2327
  1243
fm@2051
  1244
searchForSimilarTranslationEnableHolder
fm@2051
  1245
   searchForSimilarTranslationEnableHolder isNil 
fm@2051
  1246
        ifTrue:[searchForSimilarTranslationEnableHolder := true asValue]. 
fm@2051
  1247
    ^ searchForSimilarTranslationEnableHolder
fm@2051
  1248
!
fm@2051
  1249
fm@2327
  1250
searchTextHolder
fm@2327
  1251
fm@2327
  1252
    searchTextHolder isNil ifTrue:[
fm@2327
  1253
        searchTextHolder := ValueHolder new.
fm@2327
  1254
"/ if your app needs to be notified of changes, uncomment one of the lines below:
fm@2327
  1255
"/       userSelectedHolder addDependent:self.
fm@2327
  1256
"/       userSelectedHolder onChangeSend:#searchTextHolderChanged to:self.
fm@2327
  1257
    ].
fm@2327
  1258
    ^ searchTextHolder.
fm@2327
  1259
fm@2327
  1260
    "Created: / 15-06-2007 / 18:06:08 / Administrador"
fm@2327
  1261
!
fm@2327
  1262
fm@2327
  1263
searchTextModifiedHolder
fm@2327
  1264
fm@2327
  1265
    searchTextModifiedHolder isNil ifTrue:[
fm@2327
  1266
        searchTextModifiedHolder := false asValue .
fm@2327
  1267
"/ if your app needs to be notified of changes, uncomment one of the lines below:
fm@2327
  1268
"/       searchTextModifiedHolder addDependent:self.
fm@2327
  1269
       searchTextModifiedHolder onChangeSend:#searchTextModifiedHolderChanged to:self.
fm@2327
  1270
    ].
fm@2327
  1271
    ^ searchTextModifiedHolder.
fm@2327
  1272
fm@2327
  1273
    "Created: / 15-06-2007 / 18:07:19 / Administrador"
fm@2327
  1274
!
fm@2327
  1275
cg@2015
  1276
selectedKeyRow
cg@2015
  1277
    selectedKeyRow isNil ifTrue:[
cg@2015
  1278
        selectedKeyRow := ValueHolder new.
cg@2015
  1279
        selectedKeyRow onChangeSend:#selectionChanged to:self.
cg@2015
  1280
    ].
cg@2015
  1281
    ^ selectedKeyRow.
cg@2015
  1282
!
cg@2015
  1283
cg@2015
  1284
showMissingTranslationsOnly
cg@2015
  1285
    showMissingTranslationsOnly isNil ifTrue:[
cg@2015
  1286
        showMissingTranslationsOnly := false asValue.
fm@2051
  1287
        showMissingTranslationsOnly onChangeSend:#showMissingTranslationsOnlyChanged to:self.
cg@2015
  1288
    ].
cg@2015
  1289
    ^ showMissingTranslationsOnly.
cg@2015
  1290
!
cg@2015
  1291
cg@2015
  1292
shownLanguages
cg@2015
  1293
    shownLanguages isNil ifTrue:[
cg@2015
  1294
        shownLanguages := List new.
cg@2015
  1295
        shownLanguages addAll:(self languagesList).
cg@2015
  1296
        shownLanguages onChangeSend:#shownLanguagesChanged to:self.
cg@2015
  1297
    ].
cg@2015
  1298
    ^ shownLanguages.
cg@2015
  1299
!
cg@2015
  1300
cg@2015
  1301
stopApplicationIconVisibleHolder
cg@2015
  1302
    stopApplicationIconVisibleHolder isNil ifTrue:[
cg@2015
  1303
        stopApplicationIconVisibleHolder := false asValue.
cg@2015
  1304
    ].
cg@2015
  1305
    ^ stopApplicationIconVisibleHolder.
cg@2015
  1306
! !
cg@2015
  1307
cg@2048
  1308
!InternationalLanguageTranslationEditor methodsFor:'change & update'!
cg@2048
  1309
fm@2051
  1310
languageTextHolderValue: aString
fm@2051
  1311
fm@2163
  1312
    self languageTextHolder value: aString.
fm@2163
  1313
    self languageTextModifiedHolder value:true.
fm@2051
  1314
!
fm@2051
  1315
cg@2048
  1316
update:something with:aParameter from:changedObject
cg@2048
  1317
    changedObject == shownLanguages ifTrue:[
cg@2048
  1318
         self shownLanguagesChanged.
cg@2048
  1319
         ^ self.
cg@2048
  1320
    ].
fm@2049
  1321
    changedObject == languageTextAcceptHolder ifTrue:[
fm@2049
  1322
         self updateLanguageTextModification.
fm@2049
  1323
         ^ self.
fm@2049
  1324
    ].
fm@2050
  1325
    changedObject == exampleLanguageSelectionHolder ifTrue:[
fm@2050
  1326
        self updateExampleLanguageText.
fm@2050
  1327
        ^ self.
fm@2051
  1328
    ].    
fm@2051
  1329
    changedObject == showMissingTranslationsOnly ifTrue:[
fm@2051
  1330
        self showMissingTranslationsOnlyChanged.
fm@2051
  1331
        ^ self.
fm@2051
  1332
    ]. 
fm@2051
  1333
!
fm@2051
  1334
fm@2051
  1335
updateCopyPreviousTranslationButtonEnabled
fm@2051
  1336
fm@2163
  1337
     self pastePreviousTranslationEnableHolder value: self shouldCopyPreviousTranslationButtonBeEnabled
fm@2050
  1338
!
fm@2050
  1339
fm@2050
  1340
updateExampleLanguageText
fm@2050
  1341
fm@2050
  1342
    self selectedKeyRow value isNil ifTrue:[^ self].
fm@2050
  1343
    self exampleLanguageTextHolder value:self currentExampleLanguageText
fm@2049
  1344
!
fm@2049
  1345
fm@2049
  1346
updateKeyStringsToLanguageMappings           
fm@2049
  1347
fm@2049
  1348
      keyStringsToLanguageMappings 
fm@2049
  1349
        at:lastSelectedKey 
fm@2049
  1350
        language:lastLanguage 
fm@2049
  1351
        put: self newLanguageText.
fm@2049
  1352
!
fm@2049
  1353
fm@2050
  1354
updateLanguageAndKeySelection
fm@2050
  1355
fm@2050
  1356
    self originalTextHolder value: self selectedKey.
fm@2051
  1357
    self languageTextHolder value: (self languageTextFromSelectedKeyFor: self currentLanguage).
fm@2051
  1358
    lastLanguage := self currentLanguage.
fm@2050
  1359
    lastSelectedKey := self selectedKey. 
fm@2050
  1360
!
fm@2050
  1361
fm@2049
  1362
updateLanguageTextModification 
fm@2049
  1363
     self languageTextModifiedHolder value ifTrue:[ 
fm@2049
  1364
        (self autoAccept or:[Dialog confirm:'Accept changed translation ?']) ifTrue:[
fm@2049
  1365
            self languageTextModifiedHolder value:false.
fm@2049
  1366
            self languageTextHolder value:languageEditor contents.
fm@2049
  1367
            lastLanguage notNil ifTrue:[self updateKeyStringsToLanguageMappings.]
fm@2049
  1368
        ]
fm@2049
  1369
    ].
fm@2049
  1370
!
fm@2049
  1371
fm@2049
  1372
updateOriginalTextModification
fm@2049
  1373
fm@2163
  1374
    |answer|
fm@2049
  1375
fm@2163
  1376
        self originalTextModifiedHolder value ifTrue:[ 
fm@2163
  1377
            answer := OptionBox 
fm@2163
  1378
                          request:'Accept changed original text (key) ?' 
fm@2163
  1379
                          label:'Original text (key) changed'
fm@2163
  1380
                          image:(WarningBox iconBitmap)
fm@2163
  1381
                          buttonLabels:#('Cancel' 'Accept' 'Accept As New')
fm@2163
  1382
                          values:#(nil #accept #acceptAsNew)
fm@2163
  1383
                          default:#acceptAsNew.
fm@2049
  1384
fm@2163
  1385
            answer isNil ifTrue:[^ self originalTextModifiedHolder value:false. ].
fm@2163
  1386
            answer == #accept ifTrue:[
fm@2163
  1387
    self halt.        ].
fm@2163
  1388
            answer == #acceptAsNew ifTrue:[
fm@2163
  1389
    self halt.        ].
fm@2163
  1390
        ].
fm@2323
  1391
!
fm@2323
  1392
fm@2323
  1393
updatePasteOriginalButtonEnabled
fm@2323
  1394
fm@2323
  1395
     self pasteOriginalEnableHolder value: self shouldPasteOriginalButtonBeEnabled
cg@2048
  1396
! !
cg@2048
  1397
fm@2050
  1398
!InternationalLanguageTranslationEditor methodsFor:'dialogs'!
fm@2050
  1399
fm@2051
  1400
requestEncoderDialog
fm@2050
  1401
fm@2051
  1402
   |box val characterCollection|
fm@2051
  1403
fm@2051
  1404
    val := '' asValue.
fm@2051
  1405
    box := Dialog new.
fm@2051
  1406
    (box addTextLabel:'Select or write the encoder') adjust:#left.
fm@2051
  1407
    box addVerticalSpace.
fm@2051
  1408
    characterCollection := CharacterEncoder supportedExternalEncodings 
fm@2051
  1409
        inject: OrderedCollection new
fm@2051
  1410
        into:[:collection :each |
fm@2051
  1411
            collection add: each first;
fm@2051
  1412
                        yourself].
fm@2051
  1413
    (box addComboBoxOn:val) list: characterCollection.
fm@2051
  1414
    box addOkButton.
fm@2051
  1415
    box open.
fm@2051
  1416
    ^val value
fm@2051
  1417
!
fm@2051
  1418
fm@2051
  1419
requestEncoderStringFor: lang
fm@2051
  1420
  "Returns an encoder string and updates the language's info"
fm@2051
  1421
    |encoderString encoder|
fm@2051
  1422
    encoderString := self requestEncoderDialog.
fm@2051
  1423
    encoderString notEmpty ifTrue:[
fm@2051
  1424
        encoder := CharacterEncoder encoderFor: encoderString ifAbsent:nil.
fm@2051
  1425
        encoder notNil ifTrue:[keyStringsToLanguageMappings atLanguage: lang putEncoder: encoder.].
fm@2051
  1426
    ].
fm@2051
  1427
    ^encoderString
fm@2050
  1428
!
fm@2050
  1429
fm@2050
  1430
requestFilename  
fm@2050
  1431
fm@2050
  1432
    |aFilename|
fm@2050
  1433
fm@2050
  1434
    aFilename := Dialog 
cg@2410
  1435
        requestFileName:(resources string:'Name of resource file:')
fm@2050
  1436
        default:nil 
fm@2050
  1437
        pattern:'*.rs'.
fm@2050
  1438
fm@2050
  1439
    aFilename isEmptyOrNil ifTrue:[^ nil ].
fm@2050
  1440
    ^aFilename asFilename
fm@2050
  1441
!
fm@2050
  1442
fm@2051
  1443
requestFilenameFor: lang  
fm@2051
  1444
  "Returns a filename to save the language resource and updates the language's info"
fm@2051
  1445
    |aFilename|
fm@2051
  1446
fm@2051
  1447
    aFilename := Dialog 
cg@2410
  1448
        requestFileName:(resources string:'Name of resource file to save %1:' with:lang asString)
fm@2051
  1449
        default:nil 
fm@2051
  1450
        pattern:'*.rs'.
fm@2051
  1451
fm@2051
  1452
    aFilename isEmptyOrNil ifTrue:[^ nil ].
fm@2051
  1453
    keyStringsToLanguageMappings atLanguage: lang putFilename: aFilename.
fm@2051
  1454
    ^aFilename asFilename
fm@2051
  1455
!
fm@2051
  1456
fm@2050
  1457
requestLanguage
cg@2410
  1458
    ^ Dialog 
cg@2410
  1459
        choose:(resources string:'For which language ?') 
cg@2410
  1460
        fromList:languagesList 
cg@2410
  1461
        lines:10.
fm@2327
  1462
!
fm@2327
  1463
fm@2327
  1464
requestLanguageToSave
fm@2050
  1465
    ^ Dialog 
fm@2050
  1466
        choose:'Which language do you want to save?'
fm@2050
  1467
        fromList:languagesList
fm@2050
  1468
        lines:10
cg@2410
  1469
!
cg@2410
  1470
cg@2410
  1471
requestPackage
cg@2410
  1472
    |package|
cg@2410
  1473
cg@2410
  1474
    package := Dialog
cg@2410
  1475
        requestProject:(resources string:'Name of Package:') 
cg@2410
  1476
        initialAnswer:LastProject 
cg@2410
  1477
        suggestions:nil.
cg@2410
  1478
cg@2410
  1479
    package isEmptyOrNil ifTrue:[^ nil ].
cg@2410
  1480
    LastProject := package.
cg@2410
  1481
    ^ package
fm@2050
  1482
! !
fm@2050
  1483
fm@2327
  1484
!InternationalLanguageTranslationEditor methodsFor:'images'!
fm@2327
  1485
fm@2327
  1486
restartSearchBarIcon
fm@2327
  1487
fm@2327
  1488
    ^ self class restartSearchBarIcon
fm@2327
  1489
!
fm@2327
  1490
fm@2327
  1491
warningSearchBarIcon
fm@2327
  1492
fm@2327
  1493
    ^ self class warningSearchBarIcon
fm@2327
  1494
! !
fm@2327
  1495
cg@2015
  1496
!InternationalLanguageTranslationEditor methodsFor:'initialization & release'!
cg@2015
  1497
cg@2015
  1498
closeRequest
cg@2015
  1499
    "asks for permission before closing"
cg@2015
  1500
cg@2015
  1501
    self hasUnsavedChanges ifTrue:[
cg@2015
  1502
        (Dialog 
cg@2015
  1503
            confirm:(resources string:'Close without saving ?')
cg@2015
  1504
            default:false) ifFalse:[
cg@2015
  1505
            ^ self
cg@2015
  1506
        ]
cg@2015
  1507
    ].
cg@2015
  1508
cg@2015
  1509
    super closeRequest
cg@2015
  1510
!
cg@2015
  1511
cg@2015
  1512
initialize
cg@2015
  1513
    modified := false.
cg@2031
  1514
    inSingleFileMode := false.
cg@2015
  1515
    super initialize
cg@2015
  1516
!
cg@2015
  1517
fm@2049
  1518
languageEditorBuilt:aView
fm@2049
  1519
    languageEditor := aView.
fm@2049
  1520
!
fm@2049
  1521
cg@2015
  1522
postBuildDataSet:aView
fm@2049
  1523
    dataSetView := aView.
fm@2049
  1524
    aView selectedColIndexHolder onChangeSend:#selectionChanged to:self.
cg@2015
  1525
! !
cg@2015
  1526
fm@2327
  1527
!InternationalLanguageTranslationEditor methodsFor:'initialize'!
fm@2327
  1528
fm@2327
  1529
postBuildSearchBoxView: aBoxView
fm@2327
  1530
fm@2327
  1531
    searchBoxView := aBoxView
fm@2327
  1532
fm@2327
  1533
    "Created: / 15-06-2007 / 18:02:38 / Administrador"
fm@2327
  1534
!
fm@2327
  1535
fm@2327
  1536
postBuildSearchTextView: anEditFieldView
fm@2327
  1537
fm@2327
  1538
    searchTextView := anEditFieldView
fm@2327
  1539
fm@2327
  1540
    "Created: / 15-06-2007 / 18:17:15 / Administrador"
fm@2327
  1541
!
fm@2327
  1542
fm@2327
  1543
postBuildTranslationsPanel: aPanel
fm@2327
  1544
fm@2327
  1545
    translationsPanel := aPanel
fm@2327
  1546
!
fm@2327
  1547
fm@2327
  1548
postBuildWith:aBuilder
fm@2327
  1549
fm@2327
  1550
    super postBuildWith:aBuilder.
fm@2327
  1551
    self updateToolVisibility.
fm@2327
  1552
! !
fm@2327
  1553
cg@2015
  1554
!InternationalLanguageTranslationEditor methodsFor:'menu actions'!
cg@2015
  1555
cg@2015
  1556
addLanguage
cg@2015
  1557
    |lang|
cg@2015
  1558
cg@2410
  1559
    lang := Dialog request:(resources string:'New language (ISO symbol):').
cg@2015
  1560
    lang isEmptyOrNil ifTrue:[^ self].
cg@2410
  1561
    self addLanguage:lang
cg@2410
  1562
!
cg@2410
  1563
cg@2410
  1564
addLanguage:langArg
cg@2410
  1565
    |lang|
cg@2410
  1566
cg@2410
  1567
    lang := langArg asSymbol.
cg@2015
  1568
    (keyStringsToLanguageMappings includesLanguage:lang) ifTrue:[^ self ].
cg@2015
  1569
cg@2015
  1570
    keyStringsToLanguageMappings addLanguage:lang.
cg@2015
  1571
    self languagesList add:lang.
cg@2015
  1572
    self shownLanguages add:lang.
cg@2015
  1573
    modified := true.
cg@2015
  1574
!
cg@2015
  1575
cg@2015
  1576
addTranslation
cg@2015
  1577
    |key index|
cg@2015
  1578
cg@2015
  1579
    key := Dialog request:'New Key:'.
fm@2051
  1580
    key isEmpty ifTrue:[^self].
fm@2163
  1581
    (self includesKey:key) ifFalse:[
cg@2015
  1582
        keyStringsToLanguageMappings addKey:key.
cg@2015
  1583
        modified := true.
cg@2015
  1584
    ].
fm@2051
  1585
   index := keyStringsToLanguageMappings indexOfKey:key.
fm@2051
  1586
   self selectedKeyRow value:index
cg@2015
  1587
!
cg@2015
  1588
fm@2163
  1589
changeLastNameSpace
fm@2163
  1590
fm@2163
  1591
    |nameSpace defaultNameSpace|
fm@2163
  1592
fm@2163
  1593
    lastNameSpace notNil ifTrue:[defaultNameSpace := lastNameSpace name].
fm@2163
  1594
    nameSpace := Dialog requestNameSpace:'NameSpace:' title:'Search String in Name Space:' initialAnswer:defaultNameSpace.
fm@2163
  1595
    nameSpace isNil ifTrue:[^self].
fm@2163
  1596
    nameSpace := Smalltalk at:nameSpace asSymbol.
fm@2163
  1597
    nameSpace isNil ifTrue:[
fm@2327
  1598
        ^Dialog information:(resources string:'No such nameSpace exists.') 
fm@2163
  1599
    ].
fm@2163
  1600
    lastNameSpace := nameSpace.
fm@2163
  1601
!
fm@2163
  1602
fm@2327
  1603
changeLastPackage
fm@2327
  1604
fm@2327
  1605
    |package defaultPackage|
fm@2327
  1606
fm@2327
  1607
    lastPackage notNil ifTrue:[defaultPackage := lastPackage].
fm@2327
  1608
    package := Dialog
fm@2327
  1609
            requestProject:'Package:'
fm@2327
  1610
            initialAnswer:defaultPackage 
fm@2327
  1611
            suggestions:#('foo' 'bar' 'baz').
fm@2327
  1612
    package isNil ifTrue:[
cg@2410
  1613
        ^ self "/ Dialog information:(resources string:'No such package exists.') 
fm@2327
  1614
    ].
fm@2327
  1615
    lastPackage := package.
fm@2327
  1616
!
fm@2327
  1617
cg@2015
  1618
extractTranslationsFromClass
cg@2015
  1619
    |aClass newTranslations|
cg@2015
  1620
cg@2015
  1621
    aClass := Dialog 
cg@2015
  1622
                requestClass:'Class to extract translations from:'
cg@2015
  1623
                okLabel:'OK' 
cg@2015
  1624
                initialAnswer:(lastExtractedClass ? LastExtractedClass).
cg@2015
  1625
    aClass isNil ifTrue:[^ self ].
cg@2015
  1626
cg@2015
  1627
    lastExtractedClass := LastExtractedClass := aClass.
cg@2015
  1628
cg@2032
  1629
    newTranslations := self extractTranslationsFromClass:aClass.
cg@2032
  1630
    self addAllTranslations:newTranslations.
cg@2032
  1631
!
cg@2032
  1632
fm@2163
  1633
extractTranslationsFromNameSpace
fm@2163
  1634
fm@2163
  1635
    |newTranslations|
fm@2163
  1636
fm@2163
  1637
    self changeLastNameSpace.
fm@2163
  1638
    lastNameSpace isNil ifTrue:[^self.].
fm@2163
  1639
    newTranslations := OrderedCollection new.
fm@2163
  1640
    lastNameSpace allClassesDo:[:eachClass |
fm@2163
  1641
        newTranslations addAll:( self extractTranslationsFromClass:eachClass theNonMetaclass).
fm@2163
  1642
    ].
fm@2163
  1643
    self addAllTranslations:newTranslations.
fm@2163
  1644
!
fm@2163
  1645
cg@2032
  1646
extractTranslationsFromProject
cg@2032
  1647
    |box projectID newTranslations|
cg@2032
  1648
cg@2032
  1649
    box := ListSelectionBox new.
cg@2032
  1650
"/    box useComboBoxWithList:(Smalltalk allProjectIDs).
cg@2032
  1651
    box title:(resources string:'Project to extract translations from:').
cg@2032
  1652
    box list:Smalltalk allProjectIDs.
cg@2032
  1653
    box okAction:[:sel | projectID := sel].
cg@2032
  1654
    box initialText:(lastExtractedProject ? LastExtractedProject).
cg@2032
  1655
    box label:'Find Translations in Project'.
cg@2032
  1656
cg@2032
  1657
    box showAtPointer.
cg@2032
  1658
cg@2032
  1659
    projectID notNil ifTrue:[
cg@2032
  1660
        projectID := projectID withoutSeparators asSymbol.
cg@2032
  1661
    ].
cg@2032
  1662
    projectID isEmptyOrNil ifTrue:[^ self ].
cg@2032
  1663
cg@2032
  1664
    lastExtractedProject := LastExtractedProject := projectID.
cg@2032
  1665
cg@2015
  1666
    newTranslations := Set new.
cg@2015
  1667
cg@2032
  1668
    Smalltalk allClassesDo:[:eachClass |
cg@2032
  1669
        eachClass theNonMetaclass package == projectID ifTrue:[
cg@2032
  1670
"/ eachClass isLoaded ifTrue:[ self halt. ].
cg@2032
  1671
            newTranslations addAll:( self extractTranslationsFromClass:eachClass theNonMetaclass).
cg@2032
  1672
        ]
cg@2015
  1673
    ].
cg@2015
  1674
cg@2032
  1675
    self addAllTranslations:newTranslations.
cg@2015
  1676
!
cg@2015
  1677
fm@2327
  1678
importExistingTranslationsFromFile
cg@2410
  1679
    self information:'The import function is not available in this release'.
fm@2327
  1680
!
fm@2327
  1681
fm@2163
  1682
inspectCanvasMissingStrings
fm@2163
  1683
fm@2163
  1684
    |spec nameSpace missingStrings|
fm@2163
  1685
fm@2163
  1686
    missingStrings := OrderedCollection new.
fm@2163
  1687
    nameSpace := Dialog requestNameSpace:'NameSpace:' title:'Specify NameSpace to look for missing strings' initialAnswer:nil.
fm@2163
  1688
    nameSpace := Smalltalk at:nameSpace asSymbol.
fm@2163
  1689
    nameSpace isNil ifTrue:[
fm@2163
  1690
        ^Dialog information:(resources string:'No such nameSpace exists.?') 
fm@2163
  1691
    ].
fm@2163
  1692
fm@2163
  1693
    nameSpace allClassesDo:[:cls |
fm@2163
  1694
        cls theMetaclass methodsDo:[:m |
fm@2163
  1695
            m hasResource ifTrue:[
fm@2163
  1696
                (m resources includesKey:#canvas) ifTrue:[
fm@2163
  1697
                    spec := (cls perform:m selector) decodeAsLiteralArray.
fm@2163
  1698
                    spec do:[:eachComponent |
fm@2163
  1699
                        eachComponent translationKeysDo:[:k | 
fm@2163
  1700
                            (self includesKey: k) ifFalse:[
fm@2163
  1701
                                missingStrings add: k. 
fm@2163
  1702
                                Transcript showCR: k storeString, '                         ', m printString]]
fm@2163
  1703
                    ]
fm@2163
  1704
                ]
fm@2163
  1705
            ]
fm@2163
  1706
        ]
fm@2163
  1707
    ].
fm@2163
  1708
    missingStrings asSet inspect
fm@2163
  1709
!
fm@2163
  1710
cg@2015
  1711
menuNew
cg@2015
  1712
    modified ifTrue:[
cg@2015
  1713
        (Dialog 
cg@2015
  1714
            confirm:(resources stringWithCRs:'Modified translations have not been changed.\\Create new translations set anyway ?')
cg@2015
  1715
            default:false) ifFalse:[^ self].
cg@2015
  1716
    ].
cg@2015
  1717
cg@2015
  1718
    keyStringsToLanguageMappings initialize.
cg@2015
  1719
    keyStringsToLanguageMappings changed.
cg@2015
  1720
cg@2015
  1721
    self languagesList contents:self keyStringAndLanguageSelectionTable languages.
cg@2015
  1722
    self shownLanguages contents:self keyStringAndLanguageSelectionTable languages.
cg@2015
  1723
    modified := false.
cg@2015
  1724
!
cg@2015
  1725
cg@2015
  1726
menuOpen
fm@2050
  1727
    |aFilename|
cg@2015
  1728
fm@2163
  1729
    self withWaitCursorDo:[
fm@2163
  1730
        aFilename := self requestFilename.
fm@2163
  1731
        aFilename isNil ifTrue:[^ self ].
fm@2163
  1732
        self readResourceFile:aFilename.
fm@2163
  1733
    ]
cg@2015
  1734
!
cg@2015
  1735
cg@2410
  1736
menuOpenByPackage
cg@2410
  1737
    |package|
cg@2410
  1738
cg@2410
  1739
    self withWaitCursorDo:[
cg@2410
  1740
        package := self requestPackage.
cg@2410
  1741
        package isNil ifTrue:[^ self ].
cg@2410
  1742
        self readResourceFileForPackage:package.
cg@2410
  1743
    ]
cg@2410
  1744
!
cg@2410
  1745
cg@2015
  1746
menuSave
fm@2050
  1747
"Saves the language selected in the fileName from where the language resource was obtained."
fm@2053
  1748
    |lang|
cg@2015
  1749
fm@2327
  1750
    lang := self requestLanguageToSave.
fm@2050
  1751
    lang isNil ifTrue:[^ self].
fm@2053
  1752
    self saveLanguage: lang
fm@2053
  1753
!
fm@2053
  1754
fm@2053
  1755
menuSaveAll
fm@2053
  1756
"Saves all the languages in the fileName from where the language resource was obtained."
fm@2053
  1757
    keyStringsToLanguageMappings languagesInUse do:[:each | self saveLanguage: each]. 
cg@2015
  1758
!
cg@2015
  1759
cg@2015
  1760
menuSaveAs
fm@2050
  1761
"Saves the language selected in the specified fileName."
fm@2050
  1762
     |lang aFilename|
cg@2015
  1763
fm@2327
  1764
    lang := self requestLanguageToSave.
fm@2050
  1765
    lang isNil ifTrue:[^ self]. 
fm@2053
  1766
    aFilename := self requestFilenameFor:lang.
fm@2050
  1767
    aFilename isNil ifTrue:[^ self].
fm@2050
  1768
    self saveResourceFile:aFilename for:lang asSymbol
cg@2015
  1769
!
cg@2015
  1770
cg@2015
  1771
openAboutThisApplication
cg@2015
  1772
    "This method was generated by the Browser.
cg@2015
  1773
     It will be invoked when the menu-item 'help-about' is selected."
cg@2015
  1774
cg@2015
  1775
    "/ could open a customized aboutBox here ...
cg@2015
  1776
    super openAboutThisApplication
cg@2015
  1777
!
cg@2015
  1778
cg@2015
  1779
openDocumentation
cg@2015
  1780
    "This method was generated by the Browser.
cg@2015
  1781
     It will be invoked when the menu-item 'help-documentation' is selected."
cg@2015
  1782
cg@2015
  1783
    "/ change below as required ...
cg@2015
  1784
cg@2015
  1785
    "/ to open an HTML viewer on some document (under 'doc/online/<language>/' ):
cg@2015
  1786
    HTMLDocumentView openFullOnDocumentationFile:'TOP.html'.
cg@2015
  1787
cg@2015
  1788
    "/ add application-specific help files under the 'doc/online/<language>/help/appName'
cg@2015
  1789
    "/ directory, and open a viewer with:
cg@2015
  1790
    "/ HTMLDocumentView openFullOnDocumentationFile:'help/<MyApplication>/TOP.html'.
cg@2015
  1791
!
cg@2015
  1792
cg@2015
  1793
readResourceFile:aFilename
cg@2031
  1794
    |lang|
cg@2031
  1795
fm@2327
  1796
    lang := self requestLanguage.
cg@2031
  1797
    lang isNil ifTrue:[^ self ].
cg@2031
  1798
cg@2031
  1799
    self readResourceFile:aFilename asLanguage:lang asSymbol
cg@2031
  1800
!
cg@2031
  1801
cg@2410
  1802
readResourceFileForPackage:aPackage
cg@2410
  1803
    |allLanguages lang packageDir resourceDir langFile|
cg@2410
  1804
cg@2410
  1805
    packageDir := Smalltalk packageDirectoryForPackageId:aPackage.
cg@2410
  1806
    resourceDir := packageDir asFilename construct:'resources'.
cg@2410
  1807
cg@2410
  1808
    allLanguages := Set new.
cg@2410
  1809
    resourceDir directoryContentsAsFilenamesDo:[:eachFile |
cg@2410
  1810
        eachFile suffix = 'rs' ifTrue:[
cg@2410
  1811
            (('##.rs' match:eachFile baseName)
cg@2410
  1812
            or:[('##-##.rs' match:eachFile baseName)]) ifTrue:[
cg@2410
  1813
                allLanguages add:(eachFile withoutSuffix baseName)
cg@2410
  1814
            ].
cg@2410
  1815
        ].
cg@2410
  1816
    ].
cg@2410
  1817
cg@2410
  1818
    allLanguages addAll:languagesList.
cg@2410
  1819
    allLanguages := allLanguages asSortedCollection.
cg@2410
  1820
cg@2410
  1821
    lang := Dialog 
cg@2410
  1822
        choose:(resources string:'For which language ?')
cg@2410
  1823
        fromList:allLanguages 
cg@2410
  1824
        values:allLanguages 
cg@2410
  1825
        buttons:(resources array:#('All')) 
cg@2410
  1826
        values:#(all) 
cg@2410
  1827
        lines:10 
cg@2410
  1828
        cancel:nil.
cg@2410
  1829
cg@2410
  1830
    lang isNil ifTrue:[^ self ].
cg@2410
  1831
cg@2410
  1832
    langFile := resourceDir construct:lang,'.rs'.
cg@2410
  1833
cg@2410
  1834
    lang == #all ifTrue:[
cg@2410
  1835
        allLanguages do:[:lang |
cg@2410
  1836
            self addLanguage:lang.
cg@2410
  1837
            self readResourceFile:(resourceDir construct:lang,'.rs') asLanguage:lang.
cg@2410
  1838
        ].
cg@2410
  1839
    ] ifFalse:[
cg@2410
  1840
        self readResourceFile:langFile asLanguage:lang asSymbol
cg@2410
  1841
    ].
cg@2410
  1842
!
cg@2410
  1843
fm@2050
  1844
removeLanguage
fm@2050
  1845
    |lang|
cg@2015
  1846
fm@2050
  1847
    lang := Dialog choose:'Which language do you want to remove?' fromList:languagesList lines:10.
fm@2050
  1848
    lang isNil ifTrue:[^ self ].
fm@2050
  1849
    (Dialog confirm: 'Are you sure to remove the language ', lang ) ifTrue:[
fm@2050
  1850
          self languagesList remove:lang.
fm@2050
  1851
          self shownLanguages remove:lang.
fm@2050
  1852
    ].      
cg@2015
  1853
!
cg@2015
  1854
cg@2015
  1855
removeTranslation
cg@2015
  1856
    |rowSelectionIndex selectedKey|
cg@2015
  1857
cg@2015
  1858
    rowSelectionIndex := self selectedKeyRow value.
fm@2163
  1859
    rowSelectionIndex isNil ifTrue:[^self].
cg@2015
  1860
    rowSelectionIndex ~~ 0 ifTrue:[
cg@2015
  1861
        selectedKey := keyStringsToLanguageMappings keyAt:rowSelectionIndex ifAbsent:nil.
fm@2163
  1862
        selectedKey isNil ifTrue:[^self].
cg@2015
  1863
        (Dialog confirm:(resources string:'Really remove key %1' with:selectedKey)) ifTrue:[
cg@2015
  1864
            keyStringsToLanguageMappings removeKey:selectedKey.
cg@2015
  1865
        ].
cg@2015
  1866
    ].
cg@2015
  1867
!
cg@2015
  1868
cg@2015
  1869
runApplicationAndCollectTranslations
cg@2047
  1870
    |applicationClass newTranslations pseudoPack app startSelector|
cg@2015
  1871
cg@2015
  1872
    monitoredApplication notNil ifTrue:[
cg@2015
  1873
        monitoredApplication terminate.
cg@2015
  1874
        [monitoredApplication notNil] whileTrue:[
cg@2015
  1875
            Delay waitForSeconds:0.1
cg@2015
  1876
        ].
cg@2015
  1877
    ].
cg@2015
  1878
cg@2015
  1879
    applicationClass := Dialog 
cg@2015
  1880
                requestClass:'Application class to start and collect translations from:'
cg@2015
  1881
                okLabel:'OK' 
cg@2015
  1882
                initialAnswer:(lastExtractedApplicationClass ? LastExtractedApplicationClass ).
cg@2015
  1883
    applicationClass isNil ifTrue:[^ self ].
cg@2047
  1884
    applicationClass isNamespace ifTrue:[
cg@2047
  1885
        Dialog warn:'Entered class is a NameSpace'.
cg@2047
  1886
        ^ self.
cg@2047
  1887
    ].
cg@2047
  1888
cg@2047
  1889
    applicationClass isVisualStartable ifTrue:[
cg@2047
  1890
        startSelector := #open
cg@2047
  1891
    ] ifFalse:[
cg@2047
  1892
        startSelector := Dialog
cg@2047
  1893
                    request:'Entered class seems to be no application class. Ok to start using selector:'
cg@2047
  1894
                    initialAnswer:((applicationClass respondsTo:#'start')
cg@2047
  1895
                                        ifTrue:#'start'
cg@2047
  1896
                                        ifFalse:#'new')
cg@2047
  1897
                    okLabel:'START'
cg@2047
  1898
                    title:'Start Application'.
cg@2047
  1899
        startSelector isNil ifTrue:[
cg@2047
  1900
            ^ self
cg@2047
  1901
        ].
cg@2047
  1902
        startSelector := startSelector asSymbol.
cg@2047
  1903
    ].
cg@2015
  1904
cg@2015
  1905
    lastExtractedApplicationClass := LastExtractedApplicationClass := applicationClass.
cg@2015
  1906
cg@2015
  1907
    newTranslations := Set new.
cg@2015
  1908
cg@2015
  1909
    pseudoPack := AccessCollectingPseudoResourcePack new.
cg@2015
  1910
    pseudoPack realResourcePack:(applicationClass classResources).
cg@2015
  1911
cg@2015
  1912
    self stopApplicationIconVisibleHolder value:true.
cg@2015
  1913
cg@2015
  1914
    monitoredApplication := [
cg@2015
  1915
        [
cg@2015
  1916
            app := applicationClass new.
cg@2047
  1917
            app perform:startSelector.
cg@2015
  1918
            app window waitUntilVisible.
cg@2015
  1919
            app window waitUntilClosed.
cg@2015
  1920
        ] ensure:[
cg@2015
  1921
            app closeRequest.
cg@2015
  1922
            self stopApplicationIconVisibleHolder value:false.
cg@2015
  1923
            monitoredApplication := nil.
cg@2015
  1924
        ].
cg@2015
  1925
    ] fork.
fm@2163
  1926
!
fm@2163
  1927
fm@2163
  1928
searchStringInLastNameSpace
fm@2163
  1929
fm@2323
  1930
    |selectedKey browser lastSearchPatterns|
fm@2163
  1931
fm@2163
  1932
    selectedKey := self selectedKey.
fm@2163
  1933
    selectedKey isNil ifTrue:[^Dialog information: 'No selected key'].
fm@2163
  1934
    browser := NewSystemBrowser new "open".
fm@2163
  1935
    browser allButOpen.
fm@2323
  1936
    lastSearchPatterns := browser lastSearchPatterns.
fm@2323
  1937
    (lastSearchPatterns notNil and:[lastSearchPatterns first ~= selectedKey]) ifTrue:[
fm@2163
  1938
        browser lastSearchPatterns addFirst: selectedKey
fm@2163
  1939
    ].
fm@2327
  1940
    SearchDialog lastStringSearchArea: #currentNameSpace.
fm@2163
  1941
    lastNameSpace isNil ifTrue:[
fm@2163
  1942
        self changeLastNameSpace.
fm@2163
  1943
    ].
fm@2163
  1944
    lastNameSpace notNil ifTrue:[
fm@2163
  1945
"/        browser navigationState selectedClasses value: lastNameSpace allClasses.
fm@2163
  1946
        browser navigationState nameSpaceFilter value: (OrderedCollection with:lastNameSpace name).
fm@2163
  1947
        browser navigationState selectedNamespaces value: (OrderedCollection with:lastNameSpace name).
fm@2163
  1948
    ].
fm@2163
  1949
    self withWaitCursorDo:[
fm@2163
  1950
        browser browseMenuMethodsWithString
fm@2163
  1951
    ].
fm@2327
  1952
!
fm@2327
  1953
fm@2327
  1954
searchStringInLastPackage
fm@2327
  1955
fm@2327
  1956
    | selectedKey browser lastSearchPatterns|
fm@2327
  1957
fm@2327
  1958
    selectedKey := self selectedKey.
fm@2327
  1959
    selectedKey isNil ifTrue:[^Dialog information: 'No selected key'].
fm@2327
  1960
    browser := NewSystemBrowser new "open".
fm@2327
  1961
    browser allButOpen.
fm@2327
  1962
    lastSearchPatterns := browser lastSearchPatterns.
fm@2327
  1963
    (lastSearchPatterns notNil and:[lastSearchPatterns first ~= selectedKey]) ifTrue:[
fm@2327
  1964
        browser lastSearchPatterns addFirst: selectedKey
fm@2327
  1965
    ].
fm@2327
  1966
    SearchDialog lastStringSearchArea: #currentPackage.
fm@2327
  1967
    lastPackage isNil ifTrue:[
fm@2327
  1968
        self changeLastPackage.
fm@2327
  1969
    ].
fm@2327
  1970
    lastPackage notNil ifTrue:[
fm@2327
  1971
"/        browser navigationState selectedClasses value: lastNameSpace allClasses.
fm@2327
  1972
        browser navigationState packageFilter value: (OrderedCollection with:lastPackage).
fm@2327
  1973
        browser navigationState selectedProjects value: (OrderedCollection with:lastPackage).
fm@2327
  1974
    ].
fm@2327
  1975
    self withWaitCursorDo:[
fm@2327
  1976
        browser browseMenuMethodsWithString
fm@2327
  1977
    ].
cg@2015
  1978
! !
cg@2015
  1979
cg@2015
  1980
!InternationalLanguageTranslationEditor methodsFor:'menus dynamic'!
cg@2015
  1981
cg@2015
  1982
disableLanguageDisplayFor:lang
cg@2015
  1983
    self shownLanguages remove:lang ifAbsent:[]
cg@2015
  1984
!
cg@2015
  1985
cg@2015
  1986
enableLanguageDisplayFor:newLang
cg@2015
  1987
    |shownLanguagesInOrder|
cg@2015
  1988
cg@2015
  1989
    (self shownLanguages includes:newLang) ifFalse:[
cg@2048
  1990
"/        shownLanguagesInOrder := self languagesList
cg@2048
  1991
"/                                    select:[:lang | (self shownLanguages includes:lang)
cg@2048
  1992
"/                                                    or:[ lang = newLang ]].
cg@2048
  1993
"/        self shownLanguages contents:shownLanguagesInOrder.
cg@2048
  1994
        self shownLanguages add:newLang.
cg@2015
  1995
    ]
cg@2015
  1996
!
cg@2015
  1997
cg@2015
  1998
isLanguageShown:lang
cg@2015
  1999
    ^ self shownLanguages includes:lang
cg@2015
  2000
!
cg@2015
  2001
cg@2015
  2002
shownLanguagesMenu
cg@2015
  2003
    <resource: #programMenu >
cg@2015
  2004
cg@2015
  2005
    ^ [
cg@2015
  2006
        |m selected|
cg@2015
  2007
cg@2015
  2008
        m := Menu new.
cg@2015
  2009
cg@2015
  2010
        self languagesList do:[:lang |
cg@2015
  2011
            |item|
cg@2015
  2012
cg@2015
  2013
            item := MenuItem label:lang.
cg@2015
  2014
            item indication:(self languageShownHolderFor:lang).
cg@2015
  2015
            item hideMenuOnActivated:false.    
cg@2015
  2016
            m addItem:item.
cg@2015
  2017
        ].
cg@2015
  2018
        m
cg@2015
  2019
    ].
cg@2015
  2020
!
cg@2015
  2021
cg@2015
  2022
toggleLanguageDisplayFor:lang
cg@2015
  2023
    (self shownLanguages includes:lang) ifTrue:[
cg@2015
  2024
        self disableLanguageDisplayFor:lang
cg@2015
  2025
    ] ifFalse:[
cg@2015
  2026
        self enableLanguageDisplayFor:lang
cg@2015
  2027
    ].
cg@2015
  2028
! !
cg@2015
  2029
cg@2015
  2030
!InternationalLanguageTranslationEditor methodsFor:'private-key extraction'!
cg@2015
  2031
cg@2032
  2032
addAllTranslations:newTranslations
cg@2034
  2033
    |newTranslationKeys stringKeys nonStringKeys|
cg@2032
  2034
cg@2034
  2035
    newTranslationKeys := newTranslations select:[:k | k notEmpty and:[k isString not or:[k isBlank not]]].
cg@2032
  2036
    newTranslationKeys := newTranslationKeys select:[:k | (keyStringsToLanguageMappings includesKey:k) not].
cg@2034
  2037
    newTranslationKeys := newTranslationKeys 
cg@2034
  2038
                                collect:[:k | 
cg@2034
  2039
                                        (k endsWith:'...') ifTrue:[
cg@2034
  2040
                                            k copyWithoutLast:3.
cg@2034
  2041
                                        ] ifFalse:[
cg@2035
  2042
                                            ('.:?' includes:k last) ifTrue:[
cg@2034
  2043
                                                k copyWithoutLast:1.
cg@2034
  2044
                                            ] ifFalse:[
cg@2034
  2045
                                                k
cg@2034
  2046
                                        ]]].
cg@2034
  2047
    newTranslationKeys := newTranslationKeys asSet.
cg@2034
  2048
cg@2032
  2049
    newTranslationKeys notEmpty ifTrue:[
cg@2034
  2050
        stringKeys := newTranslationKeys select:[:k | k isString].
cg@2034
  2051
        nonStringKeys := newTranslationKeys select:[:k | k isString not].
cg@2034
  2052
cg@2034
  2053
        stringKeys := stringKeys asSortedCollection.
cg@2034
  2054
        keyStringsToLanguageMappings addKeys:stringKeys.
cg@2034
  2055
        keyStringsToLanguageMappings addKeys:nonStringKeys.
cg@2032
  2056
        modified := true.
cg@2032
  2057
    ].
cg@2032
  2058
!
cg@2032
  2059
cg@2032
  2060
extractTranslationsFromClass:aClass
cg@2032
  2061
    |newTranslations|
cg@2032
  2062
cg@2032
  2063
    newTranslations := Set new.
cg@2032
  2064
cg@2032
  2065
    self withWaitCursorDo:[
cg@2032
  2066
        "/ now, the hard part:
cg@2032
  2067
        "/ possible translations are in the specs,
cg@2032
  2068
        "/ and all arguments to (resources string:) messages.
cg@2032
  2069
        aClass instAndClassMethodsDo:[:eachMethod |
cg@2032
  2070
            newTranslations addAll:( self extractTranslationsFromMethod:eachMethod ).
cg@2032
  2071
        ].
cg@2032
  2072
    ].
cg@2032
  2073
    ^ newTranslations
cg@2032
  2074
!
cg@2032
  2075
cg@2015
  2076
extractTranslationsFromHelpSpecMethod:aMethod
cg@2015
  2077
    |codeStrings matcher parseTree resourceKeys|
cg@2015
  2078
cg@2015
  2079
    parseTree := RBParser 
cg@2015
  2080
            parseMethod:aMethod source 
cg@2015
  2081
            onError: [:str :pos | Transcript showCR:str. Transcript showCR:pos.
cg@2015
  2082
                                  nil].
cg@2015
  2083
    parseTree isNil ifTrue:[^ #() ].
cg@2015
  2084
cg@2015
  2085
    codeStrings  := 
cg@2015
  2086
        #(
cg@2015
  2087
                '`@dict addPairsFrom: `#helpKeysAndStrings'
cg@2015
  2088
        ).
cg@2015
  2089
cg@2015
  2090
    resourceKeys := Set new.
cg@2015
  2091
cg@2015
  2092
    matcher := ParseTreeSearcher new.
cg@2015
  2093
    matcher 
cg@2015
  2094
        matchesAnyOf: codeStrings 
cg@2015
  2095
        do: [:aNode :answer |
cg@2015
  2096
                |sel argNode arg|
cg@2015
  2097
cg@2015
  2098
                sel := aNode selector.
cg@2015
  2099
                (sel startsWith:'addPairsFrom:') ifTrue:[
cg@2015
  2100
                    argNode := aNode arguments at:1.
cg@2015
  2101
                    argNode isLiteral ifTrue:[
cg@2015
  2102
                        arg := argNode value.
cg@2015
  2103
                        arg isArray ifTrue:[
cg@2015
  2104
                            arg doWithIndex:[:el :index |
cg@2015
  2105
                                index even ifTrue:[
cg@2015
  2106
                                    el isString ifTrue:[    
cg@2015
  2107
                                        resourceKeys add:el.
cg@2015
  2108
                                    ]
cg@2015
  2109
                                ].
cg@2015
  2110
                            ].
cg@2015
  2111
                        ] ifFalse:[
cg@2015
  2112
                            Transcript 
cg@2015
  2113
                                showCR:(resources 
cg@2015
  2114
                                        string:'Cannot derive resourceKey from non-array in %1 in %2'
cg@2015
  2115
                                        with:argNode formattedCode
cg@2015
  2116
                                        with:aMethod selector).
cg@2015
  2117
                        ].
cg@2015
  2118
                    ] ifFalse:[
cg@2015
  2119
                        Transcript 
cg@2015
  2120
                            showCR:(resources 
cg@2015
  2121
                                        string:'Cannot derive resourceKey from non-literal: %1 in %2'
cg@2015
  2122
                                        with:argNode formattedCode
cg@2015
  2123
                                        with:aMethod selector).
cg@2015
  2124
                    ].
cg@2015
  2125
                ].
cg@2015
  2126
                aNode
cg@2015
  2127
            ].
cg@2015
  2128
cg@2015
  2129
    matcher executeTree: parseTree initialAnswer: nil.
cg@2015
  2130
    ^ resourceKeys
cg@2015
  2131
!
cg@2015
  2132
cg@2015
  2133
extractTranslationsFromMenuSpecMethod:aMethod
cg@2015
  2134
    |menu resourceKeys|
cg@2015
  2135
cg@2015
  2136
    menu := aMethod mclass theNonMetaclass perform:aMethod selector.
cg@2015
  2137
    menu isNil ifTrue:[ ^ #() ].
cg@2015
  2138
cg@2015
  2139
    (menu isKindOf:Menu) ifFalse:[
cg@2015
  2140
        menu := Menu new fromLiteralArrayEncoding:menu
cg@2015
  2141
    ].
cg@2015
  2142
cg@2015
  2143
    resourceKeys := Set new.
cg@2015
  2144
    menu allItemsDo:[:aMenuItem |
cg@2015
  2145
        aMenuItem translateLabel ifTrue:[
cg@2015
  2146
            aMenuItem isSeparatorItem ifFalse:[
cg@2015
  2147
                resourceKeys add:aMenuItem label.
cg@2015
  2148
            ]
cg@2015
  2149
        ]
cg@2015
  2150
    ].
cg@2015
  2151
    ^ resourceKeys
cg@2015
  2152
!
cg@2015
  2153
cg@2015
  2154
extractTranslationsFromMethod:aMethod
cg@2015
  2155
    |mResources|
cg@2015
  2156
cg@2015
  2157
    mResources := aMethod resources.
cg@2015
  2158
    mResources notNil ifTrue:[
cg@2015
  2159
        (mResources includesKey:#menu) ifTrue:[
cg@2015
  2160
             ^ self extractTranslationsFromMenuSpecMethod:aMethod.
cg@2015
  2161
        ].
cg@2015
  2162
        (mResources includesKey:#canvas) ifTrue:[
cg@2015
  2163
             ^ self extractTranslationsFromUISpecMethod:aMethod.
cg@2015
  2164
        ].
cg@2015
  2165
        (mResources includesKey:#help) ifTrue:[
cg@2015
  2166
             ^ self extractTranslationsFromHelpSpecMethod:aMethod.
cg@2015
  2167
        ].
cg@2015
  2168
        (mResources includesKey:#tableColumns) ifTrue:[
cg@2015
  2169
             ^ self extractTranslationsFromTableColumnsSpecMethod:aMethod.
cg@2015
  2170
        ].
cg@2015
  2171
cg@2015
  2172
        ^ self extractTranslationsFromSpecMethod:aMethod.
cg@2015
  2173
    ].
cg@2015
  2174
    ^ self extractTranslationsFromMethodsCode:aMethod
cg@2015
  2175
!
cg@2015
  2176
cg@2015
  2177
extractTranslationsFromMethodsCode:aMethod
cg@2015
  2178
"/method:mthd selector:sel inClass:cls matchesParseTreeMatcher:aMatcher
cg@2015
  2179
    |codeStrings matcher parseTree resourceKeys|
cg@2015
  2180
cg@2015
  2181
    parseTree := RBParser 
cg@2015
  2182
            parseMethod:aMethod source 
cg@2015
  2183
            onError: [:str :pos | Transcript showCR:str. Transcript showCR:pos.
cg@2015
  2184
                                  nil].
cg@2015
  2185
    parseTree isNil ifTrue:[^ #() ].
cg@2015
  2186
cg@2015
  2187
    codeStrings  := 
cg@2015
  2188
        #(
cg@2015
  2189
                'resources `@msg: `@args'
cg@2015
  2190
                'self resources `@msg: `@args'
cg@2015
  2191
                'self class resources `@msg: `@args'
cg@2015
  2192
                'self classResources `@msg: `@args'
cg@2015
  2193
        ).
cg@2015
  2194
cg@2015
  2195
    resourceKeys := Set new.
cg@2015
  2196
cg@2015
  2197
    matcher := ParseTreeSearcher new.
cg@2015
  2198
    matcher 
cg@2015
  2199
        matchesAnyOf: codeStrings 
cg@2015
  2200
        do: [:aNode :answer |
cg@2015
  2201
                |sel keyStringArgNode keyStringArg|
cg@2015
  2202
cg@2015
  2203
                sel := aNode selector.
cg@2015
  2204
                ((sel startsWith:'string:') or:[(sel startsWith:'at:')]) ifTrue:[
cg@2015
  2205
                    keyStringArgNode := aNode arguments at:1.
cg@2015
  2206
                    keyStringArgNode isLiteral ifTrue:[
cg@2015
  2207
                        keyStringArg := keyStringArgNode value.
cg@2015
  2208
                        keyStringArg isString ifTrue:[
cg@2015
  2209
                            resourceKeys add:keyStringArg.
cg@2015
  2210
                        ] ifFalse:[
cg@2015
  2211
                            Transcript 
cg@2015
  2212
                                showCR:(resources 
cg@2015
  2213
                                        string:'Cannot derive resourceKey from non-string: %1 in %2'
cg@2015
  2214
                                        with:keyStringArgNode formattedCode
cg@2015
  2215
                                        with:aMethod selector).
cg@2015
  2216
                        ].
cg@2015
  2217
                    ] ifFalse:[
cg@2015
  2218
                        Transcript 
cg@2015
  2219
                            showCR:(resources 
cg@2015
  2220
                                        string:'Cannot derive resourceKey from non-literal: %1 in %2'
cg@2015
  2221
                                        with:keyStringArgNode formattedCode
cg@2015
  2222
                                        with:aMethod selector).
cg@2015
  2223
                    ].
cg@2015
  2224
                ].
cg@2015
  2225
                aNode
cg@2015
  2226
            ].
cg@2015
  2227
cg@2015
  2228
    matcher executeTree: parseTree initialAnswer: nil.
cg@2015
  2229
    ^ resourceKeys
cg@2015
  2230
!
cg@2015
  2231
cg@2015
  2232
extractTranslationsFromSpecMethod:aMethod
cg@2015
  2233
    ^ #()
cg@2015
  2234
!
cg@2015
  2235
cg@2015
  2236
extractTranslationsFromTableColumnsSpecMethod:aMethod
cg@2015
  2237
    |columnDescription resourceKeys|
cg@2015
  2238
cg@2015
  2239
    columnDescription := aMethod mclass theNonMetaclass perform:aMethod selector.
cg@2015
  2240
    columnDescription isNil ifTrue:[ ^ #() ].
cg@2015
  2241
cg@2015
  2242
    (columnDescription first isKindOf:DataSetColumnSpec) ifFalse:[
cg@2015
  2243
        columnDescription := columnDescription collect:[:el | DataSetColumnSpec new fromLiteralArrayEncoding:el].
cg@2015
  2244
    ].
cg@2015
  2245
cg@2015
  2246
    resourceKeys := Set new.
cg@2015
  2247
    columnDescription do:[:aColumnSpec |
cg@2015
  2248
        aColumnSpec translateLabel ifTrue:[
cg@2015
  2249
            resourceKeys add:aColumnSpec label.
cg@2015
  2250
        ]
cg@2015
  2251
    ].
cg@2015
  2252
    ^ resourceKeys
cg@2015
  2253
!
cg@2015
  2254
cg@2015
  2255
extractTranslationsFromUISpecMethod:aMethod
cg@2015
  2256
    |spec resourceKeys visitor|
cg@2015
  2257
cg@2015
  2258
    spec := aMethod mclass theNonMetaclass perform:aMethod selector.
cg@2015
  2259
    spec isNil ifTrue:[ ^ #() ].
cg@2015
  2260
cg@2015
  2261
    (spec isKindOf:UISpecification) ifFalse:[
cg@2015
  2262
        spec := UISpecification from:spec
cg@2015
  2263
    ].
cg@2015
  2264
cg@2015
  2265
    resourceKeys := Set new.
cg@2015
  2266
cg@2015
  2267
    visitor := UISpecVisitor new.
cg@2015
  2268
    spec acceptVisitor:visitor.
cg@2015
  2269
cg@2015
  2270
    ^ visitor translatedLabels
cg@2015
  2271
! !
cg@2015
  2272
cg@2015
  2273
!InternationalLanguageTranslationEditor methodsFor:'queries'!
cg@2015
  2274
fm@2050
  2275
autoAccept                                                   
fm@2050
  2276
fm@2050
  2277
    ^ self autoAcceptHolder value
fm@2050
  2278
!
fm@2050
  2279
fm@2050
  2280
currentExampleLanguageText           
fm@2050
  2281
   "Returns the language text corresponding for the current selected key and the example language selection"
fm@2050
  2282
fm@2050
  2283
  ^self languageTextFromSelectedKeyFor: self exampleLanguageSelectionHolder value
fm@2050
  2284
!
fm@2050
  2285
fm@2051
  2286
currentLanguage
fm@2051
  2287
fm@2163
  2288
    |colSelectionIndex |
fm@2051
  2289
fm@2051
  2290
    colSelectionIndex := dataSetView selectedColIndex.
fm@2051
  2291
    ^colSelectionIndex > 1 ifTrue:[ shownLanguages at:colSelectionIndex-1 ] ifFalse:nil.
fm@2051
  2292
!
fm@2051
  2293
fm@2050
  2294
exampleLanguageByDefault
fm@2050
  2295
fm@2163
  2296
    ^self shownLanguages isEmpty
fm@2163
  2297
        ifTrue:[nil]
fm@2163
  2298
        ifFalse:[self shownLanguages first]
fm@2050
  2299
!
fm@2050
  2300
fm@2051
  2301
hasFirstRowSelection
fm@2051
  2302
    self selectedKeyRow isNil ifTrue:[^false].
fm@2051
  2303
    ^ self selectedKeyRow value > 1
fm@2051
  2304
!
fm@2051
  2305
fm@2051
  2306
hasLanguageSelection
fm@2051
  2307
    dataSetView selectedColIndex isNil ifTrue:[^false].
fm@2051
  2308
    ^ dataSetView selectedColIndex > 1
fm@2051
  2309
!
fm@2051
  2310
cg@2015
  2311
hasUnsavedChanges
cg@2015
  2312
    ^ modified
fm@2050
  2313
!
fm@2050
  2314
fm@2163
  2315
includesKey: aKey
fm@2163
  2316
    keyStringsToLanguageMappings isNil ifTrue:[^false].
fm@2163
  2317
    ^keyStringsToLanguageMappings includesKey:aKey
fm@2163
  2318
!
fm@2163
  2319
fm@2051
  2320
isSearchForSimilarTranslationEnabled
fm@2051
  2321
fm@2163
  2322
    ^self searchForSimilarTranslationEnableHolder value
fm@2051
  2323
!
fm@2051
  2324
fm@2051
  2325
languageTextFromKey: aKeyIndex for: language
fm@2051
  2326
    "Returns the language text corresponding for the aKeyIndex and the received language"    
fm@2051
  2327
fm@2051
  2328
    language isNil ifTrue:[^''].
fm@2051
  2329
    ^keyStringsToLanguageMappings at: aKeyIndex language:language.   
fm@2051
  2330
!
fm@2051
  2331
fm@2050
  2332
languageTextFromSelectedKeyFor: language
fm@2050
  2333
    "Returns the language text corresponding for the current selected key and the received language"    
fm@2050
  2334
fm@2051
  2335
    ^self languageTextFromKey: self selectedKey for: language 
fm@2051
  2336
!
fm@2051
  2337
fm@2051
  2338
shouldCopyPreviousTranslationButtonBeEnabled
fm@2051
  2339
    ^ self hasLanguageSelection 
fm@2051
  2340
        and:[self hasFirstRowSelection]
fm@2051
  2341
!
fm@2051
  2342
fm@2323
  2343
shouldPasteOriginalButtonBeEnabled
fm@2323
  2344
    ^ self hasLanguageSelection 
fm@2323
  2345
        and:[self hasFirstRowSelection]
fm@2323
  2346
!
fm@2323
  2347
fm@2051
  2348
shouldSearchForSimilarTranslation
fm@2051
  2349
fm@2163
  2350
    self isSearchForSimilarTranslationEnabled ifFalse:[^false].
fm@2163
  2351
    (self languageTextHolder value notNil and:[self languageTextHolder value notEmpty]) ifTrue:[^false].
fm@2163
  2352
    (self hasLanguageSelection and:[self selectedKeyRow notNil]) ifFalse:[^false].
fm@2163
  2353
    ^true
fm@2050
  2354
! !
fm@2050
  2355
fm@2050
  2356
!InternationalLanguageTranslationEditor methodsFor:'read/write resourceFile'!
fm@2050
  2357
fm@2053
  2358
encoderAt: lang
fm@2053
  2359
fm@2163
  2360
    self alwaysWriteUTF8Holder value ifTrue:[^CharacterEncoder encoderForUTF8].
fm@2163
  2361
    ^keyStringsToLanguageMappings encoderAt: lang.
fm@2053
  2362
!
fm@2053
  2363
fm@2050
  2364
printEditingWarningOn: aStream
fm@2050
  2365
fm@2163
  2366
    aStream nextPutAll: ';';
fm@2163
  2367
            cr;
fm@2163
  2368
            nextPutAll: '; WARNING:';
fm@2163
  2369
            cr;
fm@2163
  2370
            nextPutAll: '; this file contains national characters';
fm@2163
  2371
            cr;
fm@2163
  2372
            nextPutAll: '; DONT EDIT this file with an old vi !!';
fm@2163
  2373
            cr;
fm@2163
  2374
            nextPutAll: ';';
fm@2163
  2375
            cr; 
fm@2163
  2376
            cr.
fm@2050
  2377
!
fm@2050
  2378
fm@2050
  2379
printEncoderFor: lang on: aStream
fm@2163
  2380
    |characterEncoder encoderString|
fm@2050
  2381
fm@2163
  2382
    characterEncoder := self encoderAt: lang.
fm@2163
  2383
    encoderString := characterEncoder isNil 
fm@2163
  2384
        ifTrue:[self requestEncoderStringFor: lang]
fm@2163
  2385
        ifFalse:[characterEncoder nameOfEncoding printString].
fm@2050
  2386
fm@2163
  2387
    aStream nextPutAll: '#encoding';
fm@2163
  2388
            space;
fm@2163
  2389
            nextPutAll: encoderString;
fm@2163
  2390
            cr;
fm@2163
  2391
            cr.
fm@2050
  2392
!
fm@2050
  2393
fm@2050
  2394
printLanguage: lang on: aStream
fm@2050
  2395
fm@2163
  2396
    self printEncoderFor: lang on: aStream.
fm@2163
  2397
    self printEditingWarningOn: aStream.
fm@2163
  2398
    self printLanguageMappingsFor: lang on: aStream.
fm@2050
  2399
!
fm@2050
  2400
fm@2050
  2401
printLanguageMappingsFor: lang on: aStream
fm@2050
  2402
fm@2163
  2403
    |orderedAssociations maxKeySize characterEncoder|   
fm@2050
  2404
fm@2163
  2405
    characterEncoder := self encoderAt: lang.
fm@2163
  2406
    characterEncoder isNil ifTrue:[ characterEncoder := CharacterEncoder::NullEncoder ].
fm@2163
  2407
    orderedAssociations := keyStringsToLanguageMappings orderedLanguageMappingsAssociationsFor: lang. 
fm@2050
  2408
fm@2163
  2409
    maxKeySize := keyStringsToLanguageMappings maxKeySizeForLanguage: lang.     
fm@2050
  2410
fm@2163
  2411
    orderedAssociations do:[:association |
fm@2163
  2412
        aStream nextPutAll: (association key storeString paddedTo: maxKeySize) ; 
fm@2163
  2413
            nextPutAll: (String new: 10);
fm@2163
  2414
            nextPutAll: (characterEncoder encodeString: association value) storeString;
fm@2163
  2415
            cr.
fm@2163
  2416
        ].
fm@2050
  2417
!
fm@2050
  2418
fm@2050
  2419
readResourceFile:aFilename asLanguage:lang
fm@2050
  2420
    |resourcePack inStream lineString encoding decoder sortedKeys remainingKeys|
fm@2050
  2421
cg@2410
  2422
    aFilename exists ifFalse:[
cg@2410
  2423
        Dialog information:(resources string:'Language file: "%1" does not exist' with:aFilename baseName).
cg@2410
  2424
        ^ self 
cg@2410
  2425
    ].
fm@2050
  2426
fm@2050
  2427
    resourcePack := ResourcePack new.
fm@2050
  2428
fm@2050
  2429
    inStream := aFilename readStream.
fm@2050
  2430
    [inStream atEnd] whileFalse:[
fm@2050
  2431
        lineString := inStream nextLine.
fm@2050
  2432
        (lineString notEmpty 
fm@2050
  2433
        and:[ (lineString startsWith:';') not ]) ifTrue:[
fm@2050
  2434
            ((lineString startsWith:'#') and:[(lineString startsWith:'#(') not]) ifTrue:[
fm@2050
  2435
                lineString := (lineString copyFrom:2) withoutSeparators.
fm@2050
  2436
                (lineString startsWith:'encoding ') ifTrue:[
fm@2050
  2437
                    encoding := ResourcePack extractEncodingFromLine:lineString.
fm@2050
  2438
                    decoder := CharacterEncoder encoderFor:encoding ifAbsent:nil.
fm@2050
  2439
                ].
fm@2050
  2440
            ] ifFalse:[
fm@2050
  2441
                ResourcePack
fm@2050
  2442
                    processResourceLine:lineString 
fm@2050
  2443
                    encoding:decoder 
fm@2050
  2444
                    file:aFilename pathName 
fm@2050
  2445
                    printErrorWith:[:msg | Transcript showCR:msg ] 
fm@2050
  2446
                    for:resourcePack
fm@2050
  2447
                    keepUselessTranslations:true.
fm@2050
  2448
            ].
fm@2050
  2449
        ].
fm@2050
  2450
    ].
fm@2050
  2451
    inStream close.                                                  
fm@2050
  2452
fm@2050
  2453
    sortedKeys := (resourcePack keys select:[:k | k isString]) asSortedCollection.
fm@2050
  2454
    remainingKeys := resourcePack keys select:[:k | k isString not].
fm@2050
  2455
fm@2050
  2456
    keyStringsToLanguageMappings atLanguage: lang putFilename: aFilename.
cg@2410
  2457
    keyStringsToLanguageMappings atLanguage: lang putEncoder: decoder.
fm@2050
  2458
fm@2050
  2459
    sortedKeys do:[:k |
cg@2410
  2460
        keyStringsToLanguageMappings at:k language:lang put:(resourcePack at:k) sendChange:false
fm@2050
  2461
    ].
fm@2050
  2462
    remainingKeys do:[:k |
cg@2410
  2463
        keyStringsToLanguageMappings at:k language:lang put:(resourcePack at:k) sendChange:false
fm@2050
  2464
    ].
cg@2410
  2465
    keyStringsToLanguageMappings changed.
fm@2050
  2466
!
fm@2050
  2467
fm@2053
  2468
saveLanguage: lang
fm@2053
  2469
"Saves the language in the fileName from where the language resource was obtained."
fm@2053
  2470
    |aFilename|
fm@2053
  2471
fm@2053
  2472
    lang isNil ifTrue:[^ self].
fm@2053
  2473
    aFilename := keyStringsToLanguageMappings filenameAt:lang.
fm@2053
  2474
    aFilename isNil ifTrue:[
fm@2053
  2475
        aFilename := self requestFilenameFor: lang.
fm@2053
  2476
        aFilename isNil ifTrue:[^ self].
fm@2053
  2477
    ].
fm@2053
  2478
    self saveResourceFile:aFilename for:lang asSymbol
fm@2053
  2479
!
fm@2053
  2480
fm@2050
  2481
saveResourceFile: aFilename for: lang
fm@2050
  2482
fm@2163
  2483
    |aStream |
fm@2050
  2484
fm@2163
  2485
    keyStringsToLanguageMappings atLanguage: lang putFilename: aFilename.
fm@2163
  2486
    aStream := FileStream newFileNamed: aFilename.  
fm@2163
  2487
    self printLanguage: lang on: aStream.
fm@2163
  2488
    aStream flush;
fm@2163
  2489
            close.
fm@2163
  2490
    DialogBox information: 'The resource file for the language ', lang printString storeString, ' was saved in the file: ', aFilename nameString
cg@2015
  2491
! !
cg@2015
  2492
fm@2327
  2493
!InternationalLanguageTranslationEditor methodsFor:'searching'!
fm@2327
  2494
fm@2327
  2495
ignoreCaseHolderChanged
fm@2327
  2496
fm@2327
  2497
    self searchNextTextIncludingCurrentSelection: true.
fm@2327
  2498
fm@2327
  2499
    "Created: / 16-06-2007 / 09:33:33 / Administrador"
fm@2327
  2500
!
fm@2327
  2501
fm@2327
  2502
searchNextText
fm@2327
  2503
fm@2327
  2504
    self searchNextTextIncludingCurrentSelection: false.
fm@2327
  2505
fm@2327
  2506
    "Modified: / 16-06-2007 / 09:21:14 / Administrador"
fm@2327
  2507
!
fm@2327
  2508
fm@2327
  2509
searchNextTextFromBeginning
fm@2327
  2510
    |searchText rowFoundIndex|
fm@2327
  2511
fm@2327
  2512
    searchText := searchTextView contents.
fm@2327
  2513
    searchText isEmptyOrNil ifTrue:[^self].
fm@2327
  2514
    self objectsList isEmpty ifTrue:[^self].
fm@2327
  2515
    rowFoundIndex := self tableView findFirstRowWithString: searchText 
fm@2327
  2516
                from:1
fm@2327
  2517
                to:self objectsList size
fm@2327
  2518
                ignoreCase:self ignoreCaseHolder value.
fm@2327
  2519
    rowFoundIndex isNil ifTrue:[
fm@2327
  2520
        self searchTextNotFound.
fm@2327
  2521
        ^self
fm@2327
  2522
    ].
fm@2327
  2523
    self selectListIndex: rowFoundIndex
fm@2327
  2524
fm@2327
  2525
    "Created: / 16-06-2007 / 10:54:51 / Administrador"
fm@2327
  2526
    "Modified: / 19-06-2007 / 15:38:59 / Administrador"
fm@2327
  2527
!
fm@2327
  2528
fm@2327
  2529
searchNextTextIncludingCurrentSelection: includeCurrentSelection
fm@2327
  2530
    |searchText currentSelectionIndex rowFoundIndex fromIndex listSize|
fm@2327
  2531
fm@2327
  2532
    self searchTextStarted.
fm@2327
  2533
    searchText := searchTextView contents.
fm@2327
  2534
    searchText isEmptyOrNil ifTrue:[^self].
fm@2327
  2535
    self objectsList isEmpty ifTrue:[^self].
fm@2327
  2536
    currentSelectionIndex := self currentSelectionIndex.
fm@2327
  2537
    (currentSelectionIndex isNil or:[currentSelectionIndex == 0]) ifTrue:[
fm@2327
  2538
        self searchNextTextFromBeginning.
fm@2327
  2539
        ^self.
fm@2327
  2540
    ].
fm@2327
  2541
    listSize := self objectsList size.
fm@2327
  2542
    (currentSelectionIndex == listSize and:[includeCurrentSelection not]) ifTrue:[
fm@2327
  2543
        self searchNextTextReachEnd.
fm@2327
  2544
        ^self.
fm@2327
  2545
    ].
fm@2327
  2546
    fromIndex := includeCurrentSelection
fm@2327
  2547
        ifTrue:[currentSelectionIndex]
fm@2327
  2548
        ifFalse:[currentSelectionIndex + 1].
fm@2327
  2549
    rowFoundIndex := self tableView findFirstRowWithString: searchText 
fm@2327
  2550
                from:fromIndex
fm@2327
  2551
                to:listSize
fm@2327
  2552
                ignoreCase:self ignoreCaseHolder value.
fm@2327
  2553
    rowFoundIndex isNil ifTrue:[
fm@2327
  2554
        self searchNextTextReachEnd.
fm@2327
  2555
        ^self
fm@2327
  2556
    ].
fm@2327
  2557
    self selectListIndex: rowFoundIndex
fm@2327
  2558
fm@2327
  2559
    "Created: / 16-06-2007 / 09:20:57 / Administrador"
fm@2327
  2560
    "Modified: / 19-06-2007 / 15:38:06 / Administrador"
fm@2327
  2561
!
fm@2327
  2562
fm@2327
  2563
searchNextTextReachEnd
fm@2327
  2564
    |message|
fm@2327
  2565
    message := 'End of list reached, starting from the beginning'.
fm@2327
  2566
    self searchTextRestarted: message.
fm@2330
  2567
    Smalltalk beep.
fm@2327
  2568
    self searchNextTextFromBeginning.
fm@2327
  2569
fm@2327
  2570
    "Created: / 16-06-2007 / 11:00:59 / Administrador"
fm@2327
  2571
!
fm@2327
  2572
fm@2327
  2573
searchPreviousText
fm@2327
  2574
fm@2327
  2575
    |searchText currentSelectionIndex rowFoundIndex fromIndex|
fm@2327
  2576
fm@2327
  2577
    self searchTextStarted.
fm@2327
  2578
    searchText := searchTextView contents.
fm@2327
  2579
    searchText isEmptyOrNil ifTrue:[^self].
fm@2327
  2580
    self objectsList isEmpty ifTrue:[^self].
fm@2327
  2581
    currentSelectionIndex := self currentSelectionIndex.
fm@2327
  2582
    currentSelectionIndex == 1 ifTrue:[
fm@2327
  2583
        self searchPreviousTextReachBeginning.
fm@2327
  2584
        ^self.
fm@2327
  2585
    ].
fm@2327
  2586
    (currentSelectionIndex isNil or:[currentSelectionIndex == 0])
fm@2327
  2587
        ifTrue:[
fm@2327
  2588
            self searchPreviousTextFromEnd.
fm@2327
  2589
            ^self.
fm@2327
  2590
        ]
fm@2327
  2591
        ifFalse:[fromIndex := currentSelectionIndex - 1].
fm@2327
  2592
    rowFoundIndex := self tableView findFirstRowWithString: searchText 
fm@2327
  2593
                from: fromIndex
fm@2327
  2594
                to: 1
fm@2327
  2595
                by: -1
fm@2327
  2596
                ignoreCase:self ignoreCaseHolder value.
fm@2327
  2597
    rowFoundIndex isNil ifTrue:[
fm@2327
  2598
        self searchPreviousTextReachBeginning.
fm@2327
  2599
        ^self
fm@2327
  2600
    ].
fm@2327
  2601
    self selectListIndex: rowFoundIndex.
fm@2327
  2602
fm@2327
  2603
    "Modified: / 19-06-2007 / 15:38:16 / Administrador"
fm@2327
  2604
!
fm@2327
  2605
fm@2327
  2606
searchPreviousTextFromEnd
fm@2327
  2607
fm@2327
  2608
    |searchText rowFoundIndex|
fm@2327
  2609
fm@2327
  2610
    searchText := searchTextView contents.
fm@2327
  2611
    searchText isEmptyOrNil ifTrue:[^self].
fm@2327
  2612
    self objectsList isEmpty ifTrue:[^self].
fm@2327
  2613
    rowFoundIndex := self tableView findFirstRowWithString: searchText 
fm@2327
  2614
                from: self objectsList size
fm@2327
  2615
                to: 1
fm@2327
  2616
                by: -1
fm@2327
  2617
                ignoreCase:self ignoreCaseHolder value.
fm@2327
  2618
    rowFoundIndex isNil ifTrue:[
fm@2327
  2619
        self searchTextNotFound.
fm@2327
  2620
        ^self
fm@2327
  2621
    ].
fm@2327
  2622
    self selectListIndex: rowFoundIndex.
fm@2327
  2623
fm@2327
  2624
    "Created: / 16-06-2007 / 10:55:43 / Administrador"
fm@2327
  2625
    "Modified: / 19-06-2007 / 15:38:26 / Administrador"
fm@2327
  2626
!
fm@2327
  2627
fm@2327
  2628
searchPreviousTextReachBeginning
fm@2327
  2629
    |message|
fm@2327
  2630
    message := 'Beginning of list reached, starting from the end'.
fm@2327
  2631
    self searchTextRestarted: message.