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