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