author | Claus Gittinger <cg@exept.de> |
Fri, 15 Jun 2018 02:40:48 +0200 | |
changeset 3566 | 278888b1ca84 |
parent 3522 | 2a319ce12319 |
child 3594 | cfbc0a29b030 |
permissions | -rw-r--r-- |
2015 | 1 |
"{ Package: 'stx:libtool2' }" |
2 |
||
3 |
"{ NameSpace: Tools }" |
|
4 |
||
5 |
ApplicationModel subclass:#InternationalLanguageTranslationEditor |
|
6 |
instanceVariableNames:'languagesList keyStringsToLanguageMappings languageTextHolder |
|
7 |
originalTextHolder modified shownLanguages selectedKeyRow |
|
8 |
showMissingTranslationsOnly |
|
9 |
keyStringAndLanguageSelectionTableColumnDescriptionHolder |
|
10 |
languageShownHolders dataSetView lastExtractedClass |
|
11 |
lastExtractedApplicationClass stopApplicationIconVisibleHolder |
|
12 |
monitoredApplication originalTextModifiedHolder |
|
2048 | 13 |
languageTextModifiedHolder languageTextAcceptHolder |
14 |
inSingleFileMode lastExtractedProject lastLanguage |
|
2050 | 15 |
lastSelectedKey autoAcceptHolder languageEditor |
16 |
selectedColIndexHolder exampleLanguageSelectionHolder |
|
2051 | 17 |
exampleLanguageTextHolder pastePreviousTranslationEnableHolder |
2163 | 18 |
searchForSimilarTranslationEnableHolder alwaysWriteUTF8Holder |
2327 | 19 |
lastNameSpace pasteOriginalEnableHolder ignoreCaseHolder |
20 |
closeSearchBar searchTextModifiedHolder searchNextText |
|
21 |
searchBarImageInfoLabelHolder searchPreviousText searchBoxVisible |
|
22 |
searchBarInfoLabelHolder searchTextHolder searchTextView |
|
3286 | 23 |
searchBoxView translationsPanel lastPackage methodsUsingKey' |
2032 | 24 |
classVariableNames:'LastExtractedClass LastExtractedApplicationClass |
2410 | 25 |
LastExtractedProject LastProject' |
2015 | 26 |
poolDictionaries:'' |
27 |
category:'Interface-UIPainter' |
|
28 |
! |
|
29 |
||
30 |
Object subclass:#AccessCollectingPseudoResourcePack |
|
3286 | 31 |
instanceVariableNames:'collectedKeys realResourcePack watchingTranslationEditor' |
2015 | 32 |
classVariableNames:'' |
33 |
poolDictionaries:'' |
|
34 |
privateIn:InternationalLanguageTranslationEditor |
|
35 |
! |
|
36 |
||
37 |
Collection subclass:#KeyStringsToLanguageMappings |
|
2032 | 38 |
instanceVariableNames:'keys keyInfo perLanguageInfo perLanguageMappings languageMappings |
2049 | 39 |
languages rowPerKey' |
2015 | 40 |
classVariableNames:'' |
41 |
poolDictionaries:'' |
|
42 |
privateIn:InternationalLanguageTranslationEditor |
|
43 |
! |
|
44 |
||
45 |
Object subclass:#LanguageMappingRow |
|
46 |
instanceVariableNames:'key mappings' |
|
47 |
classVariableNames:'' |
|
48 |
poolDictionaries:'' |
|
49 |
privateIn:InternationalLanguageTranslationEditor |
|
50 |
! |
|
51 |
||
52 |
Visitor subclass:#UISpecVisitor |
|
53 |
instanceVariableNames:'translatedLabels' |
|
54 |
classVariableNames:'' |
|
55 |
poolDictionaries:'' |
|
56 |
privateIn:InternationalLanguageTranslationEditor |
|
57 |
! |
|
58 |
||
59 |
!InternationalLanguageTranslationEditor class methodsFor:'documentation'! |
|
60 |
||
61 |
documentation |
|
62 |
" |
|
63 |
documentation to be added. |
|
64 |
||
65 |
[author:] |
|
2434 | 66 |
cg (cg@FUSI) |
2015 | 67 |
|
68 |
[instance variables:] |
|
69 |
||
70 |
[class variables:] |
|
71 |
||
72 |
[see also:] |
|
73 |
||
74 |
" |
|
75 |
! |
|
76 |
||
77 |
examples |
|
78 |
" |
|
79 |
Starting the application: |
|
2434 | 80 |
[exBegin] |
2015 | 81 |
InternationalLanguageTranslationEditor open |
82 |
||
2434 | 83 |
[exEnd] |
2015 | 84 |
|
85 |
more examples to be added: |
|
2434 | 86 |
[exBegin] |
87 |
... add code fragment for |
|
2015 | 88 |
... executable example here ... |
2434 | 89 |
[exEnd] |
2015 | 90 |
" |
91 |
! |
|
92 |
||
93 |
history |
|
94 |
"Created: / 04-03-2006 / 09:07:19 / cg" |
|
95 |
! ! |
|
96 |
||
3286 | 97 |
!InternationalLanguageTranslationEditor class methodsFor:'help spec'! |
98 |
||
3522 | 99 |
helpSpec |
3286 | 100 |
<resource: #help> |
101 |
||
3522 | 102 |
^ super helpSpec addPairsFrom:#( |
3286 | 103 |
|
104 |
#searchBox |
|
105 |
'Show a search box at the bottom to search for substrings in the string keys' |
|
106 |
||
107 |
#browseReferringMethods |
|
108 |
'Browse methods which refer to this string' |
|
109 |
||
110 |
) |
|
111 |
! ! |
|
112 |
||
2327 | 113 |
!InternationalLanguageTranslationEditor class methodsFor:'image specs'! |
114 |
||
115 |
closeSearchBarIcon |
|
116 |
"This resource specification was automatically generated |
|
117 |
by the ImageEditor of ST/X." |
|
118 |
||
119 |
"Do not manually edit this!! If it is corrupted, |
|
120 |
the ImageEditor may not be able to read the specification." |
|
121 |
||
122 |
" |
|
123 |
self closeSearchBar inspect |
|
124 |
ImageEditor openOnClass:self andSelector:#closeSearchBar |
|
125 |
Icon flushCachedIcons |
|
126 |
" |
|
127 |
||
128 |
<resource: #image> |
|
129 |
||
130 |
^Icon |
|
2434 | 131 |
constantNamed:#'Psiware::SystemManagement class closeSearchBar' |
132 |
ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:' |
|
2327 | 133 |
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@GQ\SD1LSD1LSD1LSD1LWGP@@@@@@ |
134 |
@ATGA@HA@PDA@PDA@PHDA1T@@@@@@@@TAENG!!(VB XA?_''57QPPT@@@@@@@@E NJ^V)&X%)UTT5IV7 KE @@@@@@@A A"7Q,#&9VS%^MQ$E<DQ @@@@@@@@Z |
|
135 |
@X%-#9NRX52R$80:^1@Z@@@@@@@@F0FHY6>R$9JR$9ION''(PF0@@@@@@@A<A 5ABT)FS$9D=KR13C1<@@@@@@@@)@WUCND*Q$9NQM"T!!XP8)@@@@@@@@K E2 |
|
136 |
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%( |
|
137 |
YVQ W59]VU 4CD @@@@@@@AGFP4F@PDA@PDA@PDFCQ%G@@@@@@@@K41TUEQTUEQTUEQTUEQLK0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ |
|
138 |
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@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] |
|
139 |
||
140 |
"Created: / 15-06-2007 / 18:04:38 / Administrador" |
|
141 |
! |
|
142 |
||
143 |
restartSearchBarIcon |
|
144 |
"This resource specification was automatically generated |
|
145 |
by the ImageEditor of ST/X." |
|
146 |
||
147 |
"Do not manually edit this!! If it is corrupted, |
|
148 |
the ImageEditor may not be able to read the specification." |
|
149 |
||
150 |
" |
|
151 |
self restartSearchBarIcon inspect |
|
152 |
ImageEditor openOnClass:self andSelector:#restartSearchBarIcon |
|
153 |
Icon flushCachedIcons |
|
154 |
" |
|
155 |
||
156 |
<resource: #image> |
|
157 |
||
158 |
^Icon |
|
2434 | 159 |
constantNamed:#'Psiware::SystemManagement class restartSearchBarIcon' |
160 |
ifAbsentPut:[(Depth24Image new) width: 20; height: 20; photometric:(#rgb); bitsPerSample:(#[8 8 8]); samplesPerPixel:(3); bits:(ByteArray fromPackedString:' |
|
2327 | 161 |
@@@@@@@@@@@@@@@@@@@@@@@@?>SX?>''V?>;)?>O!!?>G]?>WY@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@?=3\:[>''5;JF/Y-.+XY),(U. |
162 |
6JZK?=J1?>V<>.+I@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@?>?'':+:!!19]U6*-Q?]Y/?>RC?>*!!?>F_>+=939UL2Y!!L>MJT??W[@@@@@@@@@@@@@@@@@@@@ |
|
163 |
@@@@??[-=\^&1IEP=<Q[?>1/?=5$?=52?>NT?=^Q?>BP?>FG>;1]6JEO8;^H?]3I@@@@@@@@@@@@@@@@@@@@?\*95Y-)<+!!$??.F?>)17+-U8,E40Y-.09I) |
|
164 |
:Z1-?=I??=)8?<1.>K597;NL??K,@@@@@@@@@@@@?=#M6I>B>+:@?>2U=,]]5[IN7,^C5LB[<MWL?]#O=,BZ7)=\>;Y[??FP?=>O1YEW8<B$;=WH@@@@@@@@ |
|
165 |
>,"%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?=?/? |
|
166 |
>^_''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 |
|
167 |
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 |
|
168 |
??[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^ |
|
169 |
=+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''? |
|
170 |
>/C???K??NK/??[1???#9M?B??3;(IV#/[WD;^_5@@@@;KR]<[10?=Q68[9,8,>W@@@@TU9&;/??9__9:.;/?_#<??/?>?[==?79>_?=<_S9T5M[0,WN7^G* |
|
171 |
@@@@@@@@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 |
|
172 |
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 |
|
173 |
@@@@@@@@@@@@@@@@@@@@?\*_7*]>3))5/II9+9FF+9> 0;7I5-#-7NO?7^#?8^/?:/G?7NK07>W3@@@@@@@@@@@@@@@@@@@@@@@@?>N;?>N;?=:9?>7T?>#X |
|
174 |
>^_%=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] |
|
175 |
! |
|
176 |
||
177 |
searchNextIcon |
|
178 |
"This resource specification was automatically generated |
|
179 |
by the ImageEditor of ST/X." |
|
180 |
||
181 |
"Do not manually edit this!! If it is corrupted, |
|
182 |
the ImageEditor may not be able to read the specification." |
|
183 |
||
184 |
" |
|
185 |
self searchNextIcon inspect |
|
186 |
ImageEditor openOnClass:self andSelector:#searchNextIcon |
|
187 |
Icon flushCachedIcons |
|
188 |
" |
|
189 |
||
190 |
<resource: #image> |
|
191 |
||
192 |
^Icon |
|
2434 | 193 |
constantNamed:#'Psiware::SystemManagement class searchNextIcon' |
194 |
ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:' |
|
2327 | 195 |
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ZE)ZZ@@@@@@@@@@@@@@@ |
196 |
@@@@@@AFF XA@PXUQ @@@@@@@@@@@@@@@@@*@Q5G^WX6E0D*@@@@@@@@@@@@@@@,AVQ?\&1#W&X8@20@@@@@@@@@@@A[@U==\F-"VUQOUSLAV0@@@@@@@@@@ |
|
197 |
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 |
|
198 |
]F$<II&YH3H>N2 H# @@@@@@@@@''GG)*Y2$9NRIDO4DQHP@@@@@@@@@@!!@EP[6U]I"UIQTL.@XP@@@@@@@@@@@ALAD-.XE]VS$(/@$0@@@@@@@@@@@@@@EDA |
|
199 |
FSQ!!VC@T@UD@@@@@@@@@@@@@@@@@#R,I@PDIJ84@@@@@@@@@@@@@@@@@@@@@%)^W% @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ |
|
200 |
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@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] |
|
201 |
! |
|
202 |
||
203 |
searchPreviousIcon |
|
204 |
"This resource specification was automatically generated |
|
205 |
by the ImageEditor of ST/X." |
|
206 |
||
207 |
"Do not manually edit this!! If it is corrupted, |
|
208 |
the ImageEditor may not be able to read the specification." |
|
209 |
||
210 |
" |
|
211 |
self searchPreviousIcon inspect |
|
212 |
ImageEditor openOnClass:self andSelector:#searchPreviousIcon |
|
213 |
Icon flushCachedIcons |
|
214 |
" |
|
215 |
||
216 |
<resource: #image> |
|
217 |
||
218 |
^Icon |
|
2434 | 219 |
constantNamed:#'Psiware::SystemManagement class searchPreviousIcon' |
220 |
ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:' |
|
2327 | 221 |
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%)^W% @@@@@@@@@@@@@@ |
222 |
@@@@@@BMJ0$A@P$+#P@@@@@@@@@@@@@@@@AQ@Q$4XU 0E@EQ@@@@@@@@@@@@@@ALAD-.XE]VS$(/@$0@@@@@@@@@@@BD@UA/YU4&IT%EP28A!!@@@@@@@@@@@ |
|
223 |
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 |
|
224 |
T5JY&Y&Y&Y%RLR4G @@@@@@@@@_G&4RC08MC@,JDC\SG0@@@@@@@@@@V0E__WA+X%%TS5T3@U,@@@@@@@@@@@@,AVQ?\&1#W&X8@20@@@@@@@@@@@@@@B(A |
|
225 |
GT]9]#XW@R(@@@@@@@@@@@@@@@@@Q!!(F@PDFETX@@@@@@@@@@@@@@@@@@@@@ZE)ZZ@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ |
|
226 |
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@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] |
|
227 |
! |
|
228 |
||
229 |
searchToolBarIcon |
|
230 |
"This resource specification was automatically generated |
|
231 |
by the ImageEditor of ST/X." |
|
232 |
||
233 |
"Do not manually edit this!! If it is corrupted, |
|
234 |
the ImageEditor may not be able to read the specification." |
|
235 |
||
236 |
" |
|
237 |
self searchToolBarIcon inspect |
|
238 |
ImageEditor openOnClass:self andSelector:#searchToolBarIcon |
|
239 |
Icon flushCachedIcons |
|
240 |
" |
|
241 |
||
242 |
<resource: #image> |
|
243 |
||
244 |
^Icon |
|
2434 | 245 |
constantNamed:#'Psiware::SystemManagement class searchToolBarIcon' |
246 |
ifAbsentPut:[(Depth24Image new) width: 22; height: 22; photometric:(#rgb); bitsPerSample:(#[8 8 8]); samplesPerPixel:(3); bits:(ByteArray fromPackedString:' |
|
2327 | 247 |
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ |
248 |
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ |
|
249 |
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@4][>4][>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ |
|
250 |
@@@@@@@@@@@@@@@@@@@@@@@@@@@@;>#8/L#+!!:KS!!:KS/,'',;>''9@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@2];>^)WH |
|
251 |
NE:+KU*:J5&9NE6*_I#K4^S>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@4][>RV3DLER"SWR6$K#0#;[.SGJ4L5"''UG_N4][>@@@@ |
|
252 |
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*K''\JT*,U6Z7:^S?>/C*;.3,6>C>RFF(KEZ"3-_-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ |
|
253 |
@@@@@@@@@@@@&Z''HFTF &Z7">N#:7NK?7NK?6=W>!!Y''YH4N -+3T@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%I>;FDV)#ZWU??''57NK? |
|
254 |
7NK?:>_?\8WKFCN".K#T@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1L;.A#V[O5")3=W;=/[4</W:1,??K$JVI4Z\7-''4@@@@@@@@@@@@ |
|
255 |
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7NK?-,[1E#:&C"ZZH3F U6_EU63FHS^XHS.K JOX7-''4@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7NK? |
|
256 |
,K_*O5ZTCRBLPU&0FCBHDB&RDR6RH$NI Y#I4][>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7NK?-;#%ND&KC">BYV.*4=;>7.+>-<K!!,K/!!7NK? |
|
257 |
:^C;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7NK?/K3^PT%<CBI/NE>==O;8@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ |
|
258 |
@@@@@@@@@@@@7NK? (J9GB1SZV>W:M3?@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@5MS&++3H6M/#@@@@ |
|
259 |
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7NK?@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ |
|
260 |
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ |
|
261 |
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ |
|
262 |
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ |
|
263 |
@@@@@@@@@@@@@@@@') ; 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] |
|
264 |
! |
|
265 |
||
266 |
warningSearchBarIcon |
|
267 |
"This resource specification was automatically generated |
|
268 |
by the ImageEditor of ST/X." |
|
269 |
||
270 |
"Do not manually edit this!! If it is corrupted, |
|
271 |
the ImageEditor may not be able to read the specification." |
|
272 |
||
273 |
" |
|
274 |
self warningSearchBarIcon inspect |
|
275 |
ImageEditor openOnClass:self andSelector:#warningSearchBarIcon |
|
276 |
Icon flushCachedIcons |
|
277 |
" |
|
278 |
||
279 |
<resource: #image> |
|
280 |
||
281 |
^Icon |
|
2434 | 282 |
constantNamed:#'Psiware::SystemManagement class warningSearchBarIcon' |
283 |
ifAbsentPut:[(Depth24Image new) width: 22; height: 19; photometric:(#rgb); bitsPerSample:(#[8 8 8]); samplesPerPixel:(3); bits:(ByteArray fromPackedString:' |
|
2327 | 284 |
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@?:.+<Y"P??C\@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@>_;?@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ |
285 |
@@@@?]SZ)5]X.6!! -HM2??''*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@?>39-7*B4H&G>[N+%%MJ>\#A@@@@@@@@ |
|
286 |
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@<+R?*U1&?=CN?>W^4HJ@+FY$?>+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ |
|
287 |
@@@@@@@@@@@@@@@@@@@@?>G_)U!!^>Z^->,B><+"4?*^-%C8?;;Z+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@??#1-(E;.65+?<#H |
|
288 |
?=_T?=GP?::65W-=(EQF?>WQ@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@?\#D*VAY?;61<;"0;,C@6J^+;*"0>ZN$&CX)6(-:@@@@@@@@ |
|
289 |
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@?>#+/7Q148E6?<"4<L&:W#(:G@@@392!!48^G9WM(%24_?=WN@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ |
|
290 |
??C?7Y&$.E5\?;V*=<:8??K_R3X5DP@@4+R49ZZ!!7VIZ/#85)%UR??G/@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@?=7.2&)6=IJQ?;..=]W@??7*PS$7E@,N |
|
291 |
4<OC?>K^>(M=1S8;)$ID8Y6^@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@;HNR4U%%<)&S?<^9??_(??;3REEN@P,J2<[C??K/?:R!!/C8?&R(0(T-N?>GZ@@@@ |
|
292 |
@@@@@@@@@@@@@@@@@@@@?<;H,31B3T9U2'')1?L3@?>3&=^7*XWE0@@<M7=;\??S3?=_U46-,#Q(!!$B,/18"A@@@@@@@@@@@@@@@@@@@@??G&1G!!*,S03)SP, |
|
293 |
3()?>=WL??_:<>33[G:@D2T%;^/,??#8??K19Y6^&R(0!!QPX#S8:;K22@@@@@@@@@@@@@@@@<*RZ+5I@*$D+*T48<[N&?>C_7,+U??3?7N''/(J.-?/+;??W5 |
|
294 |
;.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@@@@ |
|
295 |
?>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<= |
|
296 |
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 |
|
297 |
(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] |
|
298 |
! ! |
|
299 |
||
2015 | 300 |
!InternationalLanguageTranslationEditor class methodsFor:'interface specs'! |
301 |
||
302 |
windowSpec |
|
303 |
"This resource specification was automatically generated |
|
304 |
by the UIPainter of ST/X." |
|
305 |
||
306 |
"Do not manually edit this!! If it is corrupted, |
|
307 |
the UIPainter may not be able to read the specification." |
|
308 |
||
309 |
" |
|
2048 | 310 |
UIPainter new openOnClass:Tools::InternationalLanguageTranslationEditor andSelector:#windowSpec |
311 |
Tools::InternationalLanguageTranslationEditor new openInterface:#windowSpec |
|
312 |
Tools::InternationalLanguageTranslationEditor open |
|
2015 | 313 |
" |
314 |
||
315 |
<resource: #canvas> |
|
316 |
||
3522 | 317 |
^ |
3245 | 318 |
#(FullSpec |
319 |
name: windowSpec |
|
3522 | 320 |
window: |
3245 | 321 |
(WindowSpec |
3522 | 322 |
label: 'InternationalLanguageTranslationEditor' |
323 |
name: 'InternationalLanguageTranslationEditor' |
|
324 |
min: (Point 10 10) |
|
325 |
bounds: (Rectangle 0 0 774 610) |
|
326 |
menu: mainMenu |
|
3245 | 327 |
) |
3522 | 328 |
component: |
3245 | 329 |
(SpecCollection |
3522 | 330 |
collection: ( |
331 |
(MenuPanelSpec |
|
332 |
name: 'ToolBar' |
|
333 |
layout: (LayoutFrame 0 0 0 0 0 1 30 0) |
|
334 |
menu: menuToolBar |
|
335 |
textDefault: true |
|
336 |
) |
|
337 |
(VariableVerticalPanelSpec |
|
338 |
name: 'TranslationsVariableVerticalPanel' |
|
339 |
layout: (LayoutFrame 0 0 30 0 0 1 -32 1) |
|
340 |
component: |
|
341 |
(SpecCollection |
|
342 |
collection: ( |
|
343 |
(DataSetSpec |
|
344 |
name: 'KeyStringAndLanguageSelectionTable' |
|
345 |
model: selectedKeyRow |
|
346 |
menu: keyStringAndLanguageSelectionTableMenu |
|
347 |
hasHorizontalScrollBar: true |
|
348 |
hasVerticalScrollBar: true |
|
349 |
dataList: keyStringAndLanguageSelectionTable |
|
350 |
columnHolder: keyStringAndLanguageSelectionTableColumnDescriptionHolder |
|
351 |
beDependentOfRows: true |
|
352 |
columnAdaptor: yourself |
|
353 |
postBuildCallback: postBuildDataSet: |
|
354 |
) |
|
355 |
(VariableVerticalPanelSpec |
|
356 |
name: 'VariableVerticalPanel1' |
|
357 |
component: |
|
358 |
(SpecCollection |
|
359 |
collection: ( |
|
360 |
(ViewSpec |
|
361 |
name: 'Box1' |
|
362 |
component: |
|
363 |
(SpecCollection |
|
364 |
collection: ( |
|
365 |
(LabelSpec |
|
366 |
label: 'Original String (Key):' |
|
367 |
name: 'Label2' |
|
368 |
layout: (LayoutFrame 0 0 -2 0 0 1 28 0) |
|
369 |
translateLabel: true |
|
370 |
adjust: left |
|
371 |
) |
|
372 |
(TextEditorSpec |
|
373 |
name: 'OriginalText' |
|
374 |
layout: (LayoutFrame 0 0 27 0 0 1 -2 1) |
|
375 |
model: originalTextHolder |
|
376 |
hasHorizontalScrollBar: true |
|
377 |
hasVerticalScrollBar: true |
|
378 |
modifiedChannel: originalTextModifiedHolder |
|
379 |
acceptCallBack: languageTextAccepted |
|
380 |
hasKeyboardFocusInitially: false |
|
381 |
) |
|
382 |
) |
|
383 |
||
384 |
) |
|
385 |
) |
|
386 |
(ViewSpec |
|
387 |
name: 'Box3' |
|
388 |
component: |
|
389 |
(SpecCollection |
|
390 |
collection: ( |
|
391 |
(LabelSpec |
|
392 |
label: 'Select Another Language as example:' |
|
393 |
name: 'Label3' |
|
394 |
layout: (LayoutFrame 0 0 -6 0 0 1 24 0) |
|
395 |
translateLabel: true |
|
396 |
adjust: left |
|
397 |
) |
|
398 |
(ComboBoxSpec |
|
399 |
name: 'ComboBox1' |
|
400 |
layout: (LayoutFrame 281 0 -2 0 406 0 18 0) |
|
401 |
model: exampleLanguageSelectionHolder |
|
402 |
immediateAccept: false |
|
403 |
acceptOnLeave: true |
|
404 |
acceptOnLostFocus: true |
|
405 |
acceptOnPointerLeave: false |
|
406 |
comboList: shownLanguages |
|
407 |
useIndex: false |
|
408 |
) |
|
409 |
(TextEditorSpec |
|
410 |
name: 'ExampleLanguageText' |
|
411 |
layout: (LayoutFrame 0 0 30 0 0 1 0 1) |
|
412 |
model: exampleLanguageTextHolder |
|
413 |
hasHorizontalScrollBar: true |
|
414 |
hasVerticalScrollBar: true |
|
415 |
isReadOnly: true |
|
416 |
hasKeyboardFocusInitially: false |
|
417 |
) |
|
418 |
) |
|
419 |
||
420 |
) |
|
421 |
) |
|
422 |
(ViewSpec |
|
423 |
name: 'Box2' |
|
424 |
component: |
|
425 |
(SpecCollection |
|
426 |
collection: ( |
|
427 |
(LabelSpec |
|
428 |
label: 'Translated String:' |
|
429 |
name: 'Label1' |
|
430 |
layout: (LayoutFrame 0 0 0 0 0 1 30 0) |
|
431 |
translateLabel: true |
|
432 |
adjust: left |
|
433 |
) |
|
434 |
(TextEditorSpec |
|
435 |
name: 'LanguageText' |
|
436 |
layout: (LayoutFrame 0 0 30 0 0 1 0 1) |
|
437 |
model: languageTextHolder |
|
438 |
hasHorizontalScrollBar: true |
|
439 |
hasVerticalScrollBar: true |
|
440 |
acceptChannel: languageTextAcceptHolder |
|
441 |
modifiedChannel: languageTextModifiedHolder |
|
442 |
acceptCallBack: languageTextAccepted |
|
443 |
hasKeyboardFocusInitially: false |
|
444 |
postBuildCallback: languageEditorBuilt: |
|
445 |
) |
|
446 |
(ActionButtonSpec |
|
447 |
label: 'Paste Previous' |
|
448 |
name: 'pastePreviousTranslation' |
|
449 |
layout: (LayoutOrigin 0 0.83085250338295003 0 0.034482758620689995) |
|
450 |
translateLabel: true |
|
451 |
model: pastePreviousTranslationInLanguageText |
|
452 |
enableChannel: pastePreviousTranslationEnableHolder |
|
453 |
disabledLogo: 'Paste Previous' |
|
454 |
) |
|
455 |
(ActionButtonSpec |
|
456 |
label: 'Paste Original' |
|
457 |
name: 'Button1' |
|
458 |
layout: (LayoutOrigin -95 0.83085250338295003 0 0.034482758620689995) |
|
459 |
translateLabel: true |
|
460 |
model: pasteOriginalInLanguageText |
|
461 |
enableChannel: pasteOriginalEnableHolder |
|
462 |
disabledLogo: 'Paste Original' |
|
463 |
) |
|
464 |
) |
|
465 |
||
466 |
) |
|
467 |
) |
|
468 |
) |
|
469 |
||
470 |
) |
|
471 |
handles: (Any 0.3333333333333301 0.66666666666667018 1.0) |
|
472 |
) |
|
473 |
) |
|
474 |
||
475 |
) |
|
476 |
handles: (Any 0.5 1.0) |
|
477 |
postBuildCallback: postBuildTranslationsPanel: |
|
478 |
) |
|
479 |
(ViewSpec |
|
480 |
name: 'SearchBox' |
|
481 |
layout: (LayoutFrame 0 0 -32 1 0 1 0 1) |
|
482 |
level: -1 |
|
483 |
visibilityChannel: searchBoxVisible |
|
484 |
component: |
|
485 |
(SpecCollection |
|
486 |
collection: ( |
|
487 |
(ActionButtonSpec |
|
488 |
label: 'closeSearchBarIcon' |
|
489 |
name: 'closeSearchBarButton' |
|
490 |
layout: (LayoutFrame 4 0 5 0 25 0 26 0) |
|
491 |
hasCharacterOrientedLabel: false |
|
492 |
translateLabel: true |
|
493 |
model: closeSearchBar |
|
494 |
) |
|
495 |
(LabelSpec |
|
496 |
label: 'Search:' |
|
497 |
name: 'SearchLabel' |
|
498 |
layout: (LayoutFrame 30 0 5 0 100 0 27 0) |
|
499 |
translateLabel: true |
|
500 |
adjust: right |
|
501 |
) |
|
502 |
(InputFieldSpec |
|
503 |
name: 'SearchEntryField' |
|
504 |
layout: (LayoutFrame 100 0 5 0 257 0 27 0) |
|
505 |
model: searchTextHolder |
|
506 |
immediateAccept: true |
|
507 |
acceptOnReturn: true |
|
508 |
acceptOnTab: true |
|
509 |
acceptOnLostFocus: true |
|
510 |
modifiedChannel: searchTextModifiedHolder |
|
511 |
acceptOnPointerLeave: false |
|
512 |
postBuildCallback: postBuildSearchTextView: |
|
513 |
) |
|
514 |
(ActionButtonSpec |
|
515 |
label: 'searchNextIcon' |
|
516 |
name: 'SearchNextButton' |
|
517 |
layout: (LayoutFrame 264 0 5 0 285 0 26 0) |
|
518 |
hasCharacterOrientedLabel: false |
|
519 |
translateLabel: true |
|
520 |
model: searchNextText |
|
521 |
) |
|
522 |
(ActionButtonSpec |
|
523 |
label: 'searchPreviousIcon' |
|
524 |
name: 'searchPreviousButton' |
|
525 |
layout: (LayoutFrame 292 0 5 0 313 0 26 0) |
|
526 |
hasCharacterOrientedLabel: false |
|
527 |
translateLabel: true |
|
528 |
model: searchPreviousText |
|
529 |
) |
|
530 |
(CheckBoxSpec |
|
531 |
label: 'Ignore case' |
|
532 |
name: 'IgnoreCaseCheckBox' |
|
533 |
layout: (LayoutFrame 322 0 5 0 518 0 27 0) |
|
534 |
model: ignoreCaseHolder |
|
535 |
translateLabel: true |
|
536 |
) |
|
537 |
(LabelSpec |
|
538 |
label: 'SearchBarImageInfoLabel' |
|
539 |
name: 'SearchBarImageInfoLabel' |
|
540 |
layout: (LayoutFrame 524 0 5 0 548 0 27 0) |
|
541 |
hasCharacterOrientedLabel: false |
|
542 |
translateLabel: true |
|
543 |
labelChannel: searchBarImageInfoLabelHolder |
|
544 |
) |
|
545 |
(LabelSpec |
|
546 |
label: 'SearchBarInfoLabel' |
|
547 |
name: 'SearchBarInfoLabel' |
|
548 |
layout: (LayoutFrame 551 0 5 0 829 0 27 0) |
|
549 |
translateLabel: true |
|
550 |
labelChannel: searchBarInfoLabelHolder |
|
551 |
adjust: left |
|
552 |
) |
|
553 |
) |
|
554 |
||
555 |
) |
|
556 |
postBuildCallback: postBuildSearchBoxView: |
|
557 |
) |
|
558 |
) |
|
559 |
||
3245 | 560 |
) |
561 |
) |
|
2015 | 562 |
! ! |
563 |
||
564 |
!InternationalLanguageTranslationEditor class methodsFor:'menu specs'! |
|
565 |
||
2163 | 566 |
keyStringAndLanguageSelectionTableMenu |
567 |
"This resource specification was automatically generated |
|
568 |
by the MenuEditor of ST/X." |
|
569 |
||
570 |
"Do not manually edit this!! If it is corrupted, |
|
571 |
the MenuEditor may not be able to read the specification." |
|
572 |
||
3448 | 573 |
|
2163 | 574 |
" |
575 |
MenuEditor new openOnClass:Tools::InternationalLanguageTranslationEditor andSelector:#keyStringAndLanguageSelectionTableMenu |
|
576 |
(Menu new fromLiteralArrayEncoding:(Tools::InternationalLanguageTranslationEditor keyStringAndLanguageSelectionTableMenu)) startUp |
|
577 |
" |
|
578 |
||
579 |
<resource: #menu> |
|
580 |
||
3522 | 581 |
^ |
2163 | 582 |
#(Menu |
3522 | 583 |
( |
584 |
(MenuItem |
|
585 |
label: 'Browse Methods Containing this String' |
|
586 |
itemValue: browseReferringMethods |
|
587 |
) |
|
588 |
(MenuItem |
|
589 |
label: '-' |
|
590 |
) |
|
591 |
(MenuItem |
|
592 |
label: 'Set Current NameSpace...' |
|
593 |
itemValue: changeLastNameSpace |
|
594 |
) |
|
595 |
(MenuItem |
|
596 |
label: 'Search String in Current NameSpace' |
|
597 |
itemValue: searchStringInLastNameSpace |
|
598 |
) |
|
599 |
(MenuItem |
|
600 |
label: '-' |
|
601 |
isVisible: false |
|
602 |
) |
|
603 |
(MenuItem |
|
604 |
label: 'Set Current Package...' |
|
605 |
itemValue: changeLastPackage |
|
606 |
isVisible: false |
|
607 |
) |
|
608 |
(MenuItem |
|
609 |
label: 'Search String in Current Package' |
|
610 |
itemValue: searchStringInLastPackage |
|
611 |
isVisible: false |
|
612 |
) |
|
613 |
) |
|
614 |
nil |
|
615 |
nil |
|
2163 | 616 |
) |
617 |
! |
|
618 |
||
2015 | 619 |
mainMenu |
620 |
"This resource specification was automatically generated |
|
621 |
by the MenuEditor of ST/X." |
|
622 |
||
623 |
"Do not manually edit this!! If it is corrupted, |
|
624 |
the MenuEditor may not be able to read the specification." |
|
625 |
||
3189
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
626 |
|
2015 | 627 |
" |
2050 | 628 |
MenuEditor new openOnClass:Tools::InternationalLanguageTranslationEditor andSelector:#mainMenu |
629 |
(Menu new fromLiteralArrayEncoding:(Tools::InternationalLanguageTranslationEditor mainMenu)) startUp |
|
2015 | 630 |
" |
631 |
||
632 |
<resource: #menu> |
|
633 |
||
3522 | 634 |
^ |
2015 | 635 |
#(Menu |
3522 | 636 |
( |
637 |
(MenuItem |
|
638 |
label: 'File' |
|
639 |
submenu: |
|
640 |
(Menu |
|
641 |
( |
|
642 |
(MenuItem |
|
643 |
label: 'New' |
|
644 |
itemValue: menuNew |
|
645 |
) |
|
646 |
(MenuItem |
|
647 |
label: '-' |
|
648 |
) |
|
649 |
(MenuItem |
|
650 |
label: 'Open Resources for Package or Project...' |
|
651 |
itemValue: menuOpenByPackage |
|
652 |
) |
|
653 |
(MenuItem |
|
654 |
label: 'Open Resource File...' |
|
655 |
itemValue: menuOpen |
|
656 |
) |
|
657 |
(MenuItem |
|
658 |
label: '-' |
|
659 |
) |
|
660 |
(MenuItem |
|
661 |
label: 'Save All Resource Files' |
|
662 |
itemValue: menuSaveAll |
|
663 |
) |
|
664 |
(MenuItem |
|
665 |
label: 'Save Resource File' |
|
666 |
itemValue: menuSave |
|
667 |
) |
|
668 |
(MenuItem |
|
669 |
label: 'Save Resource File As...' |
|
670 |
itemValue: menuSaveAs |
|
671 |
) |
|
672 |
(MenuItem |
|
673 |
label: '-' |
|
674 |
) |
|
675 |
(MenuItem |
|
676 |
label: 'Import existing translations from file...' |
|
677 |
itemValue: importExistingTranslationsFromFile |
|
678 |
) |
|
679 |
(MenuItem |
|
680 |
label: '-' |
|
681 |
) |
|
682 |
(MenuItem |
|
683 |
label: 'Set Current NameSpace' |
|
684 |
itemValue: changeLastNameSpace |
|
685 |
) |
|
686 |
(MenuItem |
|
687 |
label: 'Set Current Package' |
|
688 |
itemValue: changeLastPackage |
|
689 |
isVisible: false |
|
690 |
) |
|
691 |
(MenuItem |
|
692 |
label: '-' |
|
693 |
) |
|
694 |
(MenuItem |
|
695 |
label: 'Exit' |
|
696 |
itemValue: closeRequest |
|
697 |
) |
|
698 |
) |
|
699 |
nil |
|
700 |
nil |
|
701 |
) |
|
702 |
) |
|
703 |
(MenuItem |
|
704 |
label: 'View' |
|
705 |
submenu: |
|
706 |
(Menu |
|
707 |
( |
|
708 |
(MenuItem |
|
709 |
label: 'Show Missing Translations Only' |
|
710 |
indication: showMissingTranslationsOnly |
|
711 |
) |
|
712 |
(MenuItem |
|
713 |
label: 'Show Search Box' |
|
714 |
indication: searchBoxVisible |
|
715 |
) |
|
716 |
(MenuItem |
|
717 |
label: '-' |
|
718 |
) |
|
719 |
(MenuItem |
|
720 |
label: 'Shown Languages' |
|
721 |
submenuChannel: shownLanguagesMenu |
|
722 |
) |
|
723 |
) |
|
724 |
nil |
|
725 |
nil |
|
726 |
) |
|
727 |
) |
|
728 |
(MenuItem |
|
729 |
label: 'Languages' |
|
730 |
submenu: |
|
731 |
(Menu |
|
732 |
( |
|
733 |
(MenuItem |
|
734 |
label: 'Add Language...' |
|
735 |
itemValue: addLanguage |
|
736 |
) |
|
737 |
(MenuItem |
|
738 |
label: 'Remove Language...' |
|
739 |
itemValue: removeLanguage |
|
740 |
) |
|
741 |
) |
|
742 |
nil |
|
743 |
nil |
|
744 |
) |
|
745 |
) |
|
746 |
(MenuItem |
|
747 |
label: 'Translations' |
|
748 |
submenuChannel: translationsMenuSpec |
|
749 |
) |
|
750 |
(MenuItem |
|
751 |
label: 'Preferences' |
|
752 |
submenu: |
|
753 |
(Menu |
|
754 |
( |
|
755 |
(MenuItem |
|
756 |
label: 'Auto Accept Changes' |
|
757 |
indication: autoAcceptHolder |
|
758 |
) |
|
759 |
(MenuItem |
|
760 |
label: 'Search For Similar Translations' |
|
761 |
indication: searchForSimilarTranslationEnableHolder |
|
762 |
) |
|
763 |
(MenuItem |
|
764 |
label: 'Always Write UTF8' |
|
765 |
indication: alwaysWriteUTF8Holder |
|
766 |
) |
|
767 |
) |
|
768 |
nil |
|
769 |
nil |
|
770 |
) |
|
771 |
) |
|
772 |
(MenuItem |
|
773 |
label: 'Help' |
|
774 |
startGroup: right |
|
775 |
submenu: |
|
776 |
(Menu |
|
777 |
( |
|
778 |
(MenuItem |
|
779 |
label: 'Documentation' |
|
780 |
itemValue: openDocumentation |
|
781 |
) |
|
782 |
(MenuItem |
|
783 |
label: '-' |
|
784 |
) |
|
785 |
(MenuItem |
|
786 |
label: 'About this Application...' |
|
787 |
itemValue: openAboutThisApplication |
|
788 |
) |
|
789 |
) |
|
790 |
nil |
|
791 |
nil |
|
792 |
) |
|
793 |
) |
|
794 |
) |
|
795 |
nil |
|
796 |
nil |
|
2015 | 797 |
) |
798 |
! |
|
799 |
||
2051 | 800 |
menuItemsEditLanguage |
801 |
"This resource specification was automatically generated |
|
802 |
by the MenuEditor of ST/X." |
|
803 |
||
804 |
"Do not manually edit this!! If it is corrupted, |
|
805 |
the MenuEditor may not be able to read the specification." |
|
806 |
||
807 |
" |
|
808 |
MenuEditor new openOnClass:Tools::InternationalLanguageTranslationEditor andSelector:#menu |
|
809 |
(Menu new fromLiteralArrayEncoding:(Tools::InternationalLanguageTranslationEditor menu)) startUp |
|
810 |
" |
|
811 |
||
812 |
<resource: #menu> |
|
813 |
||
2434 | 814 |
^ |
2051 | 815 |
#(Menu |
2434 | 816 |
( |
817 |
(MenuItem |
|
818 |
enabled: pastePreviousTranslationEnableHolder |
|
819 |
label: 'Paste Previous Translation' |
|
820 |
itemValue: pastePreviousTranslationInLanguageText |
|
821 |
nameKey: pastePreviousTranslationInLanguageText |
|
822 |
translateLabel: true |
|
823 |
) |
|
824 |
) |
|
825 |
nil |
|
826 |
nil |
|
2051 | 827 |
) |
828 |
! |
|
829 |
||
2015 | 830 |
menuToolBar |
831 |
"This resource specification was automatically generated |
|
832 |
by the MenuEditor of ST/X." |
|
833 |
||
834 |
"Do not manually edit this!! If it is corrupted, |
|
835 |
the MenuEditor may not be able to read the specification." |
|
836 |
||
2880 | 837 |
|
2015 | 838 |
" |
2051 | 839 |
MenuEditor new openOnClass:Tools::InternationalLanguageTranslationEditor andSelector:#menuToolBar |
840 |
(Menu new fromLiteralArrayEncoding:(Tools::InternationalLanguageTranslationEditor menuToolBar)) startUp |
|
2015 | 841 |
" |
842 |
||
843 |
<resource: #menu> |
|
844 |
||
3522 | 845 |
^ |
2015 | 846 |
#(Menu |
3522 | 847 |
( |
848 |
(MenuItem |
|
849 |
label: 'Save' |
|
850 |
itemValue: menuSave |
|
851 |
isButton: true |
|
852 |
labelImage: (ResourceRetriever XPToolbarIconLibrary saveImageIcon) |
|
853 |
) |
|
854 |
(MenuItem |
|
855 |
label: '-' |
|
856 |
) |
|
857 |
(MenuItem |
|
858 |
label: 'Add Translation' |
|
859 |
itemValue: addTranslation |
|
860 |
isButton: true |
|
861 |
labelImage: (ResourceRetriever XPToolbarIconLibrary newRowIcon) |
|
862 |
) |
|
863 |
(MenuItem |
|
864 |
label: 'Remove Translation' |
|
865 |
itemValue: removeTranslation |
|
866 |
isButton: true |
|
867 |
labelImage: (ResourceRetriever XPToolbarIconLibrary removeRowIcon) |
|
868 |
) |
|
869 |
(MenuItem |
|
870 |
label: '-' |
|
871 |
) |
|
872 |
(MenuItem |
|
873 |
activeHelpKey: browseReferringMethods |
|
874 |
label: 'Browse' |
|
875 |
itemValue: browseReferringMethods |
|
876 |
labelImage: (ResourceRetriever ToolbarIconLibrary systemBrowserIcon) |
|
877 |
) |
|
878 |
(MenuItem |
|
879 |
label: '' |
|
880 |
) |
|
881 |
(MenuItem |
|
882 |
label: 'Stop Application' |
|
883 |
itemValue: stopApplication |
|
884 |
isButton: true |
|
885 |
isVisible: stopApplicationIconVisibleHolder |
|
886 |
labelImage: (ResourceRetriever XPToolbarIconLibrary stop16x16Icon) |
|
887 |
) |
|
888 |
(MenuItem |
|
889 |
activeHelpKey: searchBox |
|
890 |
label: 'Search' |
|
891 |
isButton: true |
|
892 |
startGroup: right |
|
893 |
hideMenuOnActivated: false |
|
894 |
indication: searchBoxVisible |
|
895 |
shortcutKey: Ctrlf |
|
896 |
labelImage: (ResourceRetriever #'Tools::InternationalLanguageTranslationEditor' searchToolBarIcon) |
|
897 |
) |
|
898 |
) |
|
899 |
nil |
|
900 |
nil |
|
2015 | 901 |
) |
3189
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
902 |
! |
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
903 |
|
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
904 |
translationsMenuSpec |
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
905 |
"This resource specification was automatically generated |
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
906 |
by the MenuEditor of ST/X." |
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
907 |
|
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
908 |
"Do not manually edit this!! If it is corrupted, |
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
909 |
the MenuEditor may not be able to read the specification." |
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
910 |
|
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
911 |
|
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
912 |
" |
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
913 |
MenuEditor new openOnClass:Tools::InternationalLanguageTranslationEditor andSelector:#translationsMenuSpec |
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
914 |
(Menu new fromLiteralArrayEncoding:(Tools::InternationalLanguageTranslationEditor translationsMenuSpec)) startUp |
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
915 |
" |
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
916 |
|
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
917 |
<resource: #menu> |
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
918 |
|
3522 | 919 |
^ |
3189
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
920 |
#(Menu |
3522 | 921 |
( |
922 |
(MenuItem |
|
923 |
label: 'Add Translation...' |
|
924 |
itemValue: addTranslation |
|
925 |
) |
|
926 |
(MenuItem |
|
927 |
label: 'Remove Translation...' |
|
928 |
itemValue: removeTranslation |
|
929 |
) |
|
930 |
(MenuItem |
|
931 |
label: '-' |
|
932 |
) |
|
933 |
(MenuItem |
|
934 |
label: 'Extract from Package...' |
|
935 |
itemValue: extractTranslationsFromProject |
|
936 |
) |
|
937 |
(MenuItem |
|
938 |
label: 'Extract from Class...' |
|
939 |
itemValue: extractTranslationsFromClass |
|
940 |
) |
|
941 |
(MenuItem |
|
942 |
label: 'Extract from NameSpace...' |
|
943 |
itemValue: extractTranslationsFromNameSpace |
|
944 |
) |
|
945 |
(MenuItem |
|
946 |
label: '-' |
|
947 |
) |
|
948 |
(MenuItem |
|
949 |
label: 'Run Application and Collect Translations...' |
|
950 |
itemValue: runApplicationAndCollectTranslations |
|
951 |
) |
|
952 |
(MenuItem |
|
953 |
label: '-' |
|
954 |
) |
|
955 |
(MenuItem |
|
956 |
label: 'Generate Missing Translations' |
|
957 |
itemValue: generateMissingTranslations |
|
958 |
) |
|
959 |
(MenuItem |
|
960 |
label: 'Generate Missing Translations Slice' |
|
961 |
submenuChannel: menuSliceTranslateGenerate |
|
962 |
isMenuSlice: true |
|
963 |
) |
|
964 |
) |
|
965 |
nil |
|
966 |
nil |
|
3189
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
967 |
) |
2015 | 968 |
! ! |
969 |
||
2433 | 970 |
!InternationalLanguageTranslationEditor class methodsFor:'startup'! |
971 |
||
972 |
openOnFile:aFilename |
|
973 |
|fn| |
|
974 |
||
975 |
fn := aFilename asFilename. |
|
976 |
||
3077
48211023a3c7
class: Tools::InternationalLanguageTranslationEditor
Claus Gittinger <cg@exept.de>
parents:
2880
diff
changeset
|
977 |
^ self new |
3522 | 978 |
allButOpen; |
979 |
readResourceFile:fn asLanguage:fn withoutSuffix baseName; |
|
980 |
openWindow; |
|
981 |
yourself. |
|
3077
48211023a3c7
class: Tools::InternationalLanguageTranslationEditor
Claus Gittinger <cg@exept.de>
parents:
2880
diff
changeset
|
982 |
! |
48211023a3c7
class: Tools::InternationalLanguageTranslationEditor
Claus Gittinger <cg@exept.de>
parents:
2880
diff
changeset
|
983 |
|
48211023a3c7
class: Tools::InternationalLanguageTranslationEditor
Claus Gittinger <cg@exept.de>
parents:
2880
diff
changeset
|
984 |
openOnPackage:aPackageId |
48211023a3c7
class: Tools::InternationalLanguageTranslationEditor
Claus Gittinger <cg@exept.de>
parents:
2880
diff
changeset
|
985 |
^ self new |
3522 | 986 |
allButOpen; |
987 |
readResourceFileForPackage:aPackageId; |
|
988 |
openWindow; |
|
989 |
yourself. |
|
2433 | 990 |
! ! |
991 |
||
2047 | 992 |
!InternationalLanguageTranslationEditor class methodsFor:'tableColumns specs'! |
993 |
||
994 |
keyTableColumn |
|
995 |
"This resource specification was automatically generated |
|
996 |
by the DataSetBuilder of ST/X." |
|
997 |
||
998 |
"Do not manually edit this!! If it is corrupted, |
|
999 |
the DataSetBuilder may not be able to read the specification." |
|
1000 |
||
1001 |
" |
|
1002 |
DataSetBuilder new openOnClass:Tools::InternationalLanguageTranslationEditor andSelector:#keyTableColumn |
|
1003 |
" |
|
1004 |
||
1005 |
<resource: #tableColumns> |
|
1006 |
||
1007 |
^#( |
|
1008 |
(DataSetColumnSpec |
|
2434 | 1009 |
label: 'Key' |
1010 |
labelButtonType: Button |
|
1011 |
minWidth: 50 |
|
1012 |
model: keyStringInRow: |
|
2047 | 1013 |
) |
1014 |
) |
|
1015 |
! |
|
1016 |
||
1017 |
languageTableColumn |
|
1018 |
"This resource specification was automatically generated |
|
1019 |
by the DataSetBuilder of ST/X." |
|
1020 |
||
1021 |
"Do not manually edit this!! If it is corrupted, |
|
1022 |
the DataSetBuilder may not be able to read the specification." |
|
1023 |
||
1024 |
" |
|
2049 | 1025 |
DataSetBuilder new openOnClass:Tools::InternationalLanguageTranslationEditor andSelector:#languageTableColumn |
2047 | 1026 |
" |
1027 |
||
1028 |
<resource: #tableColumns> |
|
1029 |
||
1030 |
^#( |
|
2049 | 1031 |
(DataSetColumnSpec |
2434 | 1032 |
label: lang |
1033 |
labelButtonType: Button |
|
1034 |
minWidth: 50 |
|
1035 |
editorType: None |
|
1036 |
model: columnInRow:at: |
|
1037 |
backgroundSelector: getBackgroundForRow:rowNr:col: |
|
2049 | 1038 |
) |
1039 |
) |
|
1040 |
! ! |
|
1041 |
||
1042 |
!InternationalLanguageTranslationEditor methodsFor:'accessing'! |
|
2047 | 1043 |
|
2434 | 1044 |
currentSelectionIndex |
2327 | 1045 |
|
1046 |
^ self selectedKeyRow value |
|
1047 |
||
1048 |
"Created: / 16-06-2007 / 09:04:11 / Administrador" |
|
1049 |
"Modified: / 19-06-2007 / 17:28:38 / Administrador" |
|
1050 |
! |
|
1051 |
||
1052 |
exists: anObject |
|
1053 |
||
1054 |
^self objectsList includes: anObject |
|
1055 |
||
1056 |
"Created: / 19-06-2007 / 16:42:22 / Administrador" |
|
1057 |
! |
|
1058 |
||
1059 |
indexOf: anObject |
|
1060 |
||
1061 |
^self objectsList indexOf: anObject |
|
1062 |
||
1063 |
"Created: / 19-06-2007 / 16:39:44 / Administrador" |
|
1064 |
! |
|
1065 |
||
2049 | 1066 |
newLanguageText |
1067 |
"/ languageEditor accept |
|
3245 | 1068 |
^self languageTextHolder value isEmptyOrNil |
3522 | 1069 |
ifTrue:[''] |
1070 |
ifFalse:[self languageTextHolder value asCollectionOfLines first.] |
|
2050 | 1071 |
! |
1072 |
||
2327 | 1073 |
objectsList |
1074 |
||
2434 | 1075 |
^ keyStringsToLanguageMappings |
2327 | 1076 |
! |
1077 |
||
1078 |
selectListIndex: rowIndex |
|
1079 |
"/ |selection list| |
|
1080 |
"/ list := self objectsList. |
|
1081 |
"/ list isEmpty ifTrue:[^self]. |
|
1082 |
"/ selection := list at:rowIndex ifAbsent:nil. |
|
1083 |
self selectedKeyRow value: rowIndex. |
|
1084 |
||
1085 |
"Created: / 16-06-2007 / 09:06:46 / Administrador" |
|
1086 |
"Modified: / 22-06-2007 / 13:45:54 / Administrador" |
|
1087 |
! |
|
1088 |
||
2434 | 1089 |
selectedKey |
2050 | 1090 |
"Returns the current selected key if there is one row seleted. Otherwise, returns nil" |
1091 |
|rowSelectionIndex | |
|
1092 |
||
2163 | 1093 |
keyStringsToLanguageMappings isNil ifTrue:[^nil]. |
1094 |
self selectedKeyRow value isNil ifTrue:[^nil]. |
|
2050 | 1095 |
rowSelectionIndex := self selectedKeyRow value. |
1096 |
rowSelectionIndex == 0 ifTrue:[^nil]. |
|
1097 |
^ keyStringsToLanguageMappings keyAt:rowSelectionIndex. |
|
2327 | 1098 |
! |
1099 |
||
1100 |
tableView |
|
1101 |
||
1102 |
^dataSetView scrolledView |
|
1103 |
||
1104 |
"Created: / 15-06-2007 / 18:59:51 / Administrador" |
|
2047 | 1105 |
! ! |
1106 |
||
2051 | 1107 |
!InternationalLanguageTranslationEditor methodsFor:'additionalFuncionalities'! |
1108 |
||
1109 |
searchForSimilarTranslation |
|
2163 | 1110 |
"Looks for a quite similar translation for the key and display a dialog with available options" |
2327 | 1111 |
|similarTranslationsAssociations selectedTranslation key| |
2051 | 1112 |
|
2434 | 1113 |
self shouldSearchForSimilarTranslation ifFalse:[^self]. |
2051 | 1114 |
|
2327 | 1115 |
key := self selectedKey. |
1116 |
key isNil ifTrue:[^ self.]. |
|
1117 |
similarTranslationsAssociations := keyStringsToLanguageMappings searchForSimilarTranslation: key in: self currentLanguage. |
|
2434 | 1118 |
similarTranslationsAssociations isEmpty ifTrue:[^self]. |
2051 | 1119 |
|
2163 | 1120 |
similarTranslationsAssociations := similarTranslationsAssociations associations inject: OrderedCollection new into:[:collection :association | |
2434 | 1121 |
collection detect:[:selectedAssociation | |
1122 |
selectedAssociation value sameAs: association value] ifNone:[collection add: association]. |
|
1123 |
collection]. |
|
1124 |
selectedTranslation := Dialog |
|
3455 | 1125 |
choose:'Choose one if you consider it´s usefull to translate: |
2434 | 1126 |
', |
1127 |
'<', key, '> ', (self currentExampleLanguageText ifNil:['']) |
|
1128 |
fromList: (similarTranslationsAssociations collect:[:each | '<', each key, '> ', each value]) |
|
1129 |
values: (similarTranslationsAssociations collect:[:each | each value]) |
|
1130 |
lines:10 |
|
1131 |
cancel: nil. |
|
1132 |
||
1133 |
selectedTranslation notNil ifTrue:[self languageTextHolderValue: selectedTranslation]. |
|
2051 | 1134 |
! ! |
1135 |
||
2015 | 1136 |
!InternationalLanguageTranslationEditor methodsFor:'aspects'! |
1137 |
||
2053 | 1138 |
alwaysWriteUTF8Holder |
2434 | 1139 |
alwaysWriteUTF8Holder isNil ifTrue:[alwaysWriteUTF8Holder := true asValue]. |
2053 | 1140 |
^ alwaysWriteUTF8Holder |
1141 |
! |
|
1142 |
||
2050 | 1143 |
autoAcceptHolder |
2434 | 1144 |
autoAcceptHolder isNil ifTrue:[autoAcceptHolder := true asValue]. |
2050 | 1145 |
^ autoAcceptHolder |
1146 |
! |
|
1147 |
||
1148 |
exampleLanguageSelectionHolder |
|
1149 |
exampleLanguageSelectionHolder isNil ifTrue:[ |
|
2434 | 1150 |
exampleLanguageSelectionHolder := self exampleLanguageByDefault asValue. |
1151 |
exampleLanguageSelectionHolder addDependent:self. |
|
1152 |
]. |
|
2050 | 1153 |
^ exampleLanguageSelectionHolder |
1154 |
! |
|
1155 |
||
1156 |
exampleLanguageTextHolder |
|
1157 |
exampleLanguageTextHolder isNil ifTrue:[ |
|
2434 | 1158 |
exampleLanguageTextHolder := '' asValue. |
2050 | 1159 |
]. |
1160 |
^ exampleLanguageTextHolder. |
|
1161 |
! |
|
1162 |
||
2327 | 1163 |
ignoreCaseHolder |
1164 |
||
1165 |
ignoreCaseHolder isNil ifTrue:[ |
|
2434 | 1166 |
ignoreCaseHolder := false asValue. |
2327 | 1167 |
"/ if your app needs to be notified of changes, uncomment one of the lines below: |
1168 |
"/ ignoreCaseHolder addDependent:self. |
|
2434 | 1169 |
ignoreCaseHolder onChangeSend:#ignoreCaseHolderChanged to:self. |
2327 | 1170 |
|
1171 |
]. |
|
1172 |
^ ignoreCaseHolder. |
|
1173 |
||
1174 |
"Created: / 16-06-2007 / 06:45:04 / Administrador" |
|
1175 |
"Modified: / 16-06-2007 / 19:32:15 / Administrador" |
|
1176 |
! |
|
1177 |
||
2015 | 1178 |
keyStringAndLanguageSelectionTable |
1179 |
keyStringsToLanguageMappings isNil ifTrue:[ |
|
2434 | 1180 |
keyStringsToLanguageMappings := KeyStringsToLanguageMappings new. |
2015 | 1181 |
]. |
1182 |
^ keyStringsToLanguageMappings. |
|
1183 |
! |
|
1184 |
||
1185 |
keyStringAndLanguageSelectionTableColumnDescriptionHolder |
|
1186 |
keyStringAndLanguageSelectionTableColumnDescriptionHolder isNil ifTrue:[ |
|
2434 | 1187 |
keyStringAndLanguageSelectionTableColumnDescriptionHolder := ValueHolder new. |
1188 |
keyStringAndLanguageSelectionTableColumnDescriptionHolder value:(self keyStringAndLanguageSelectionTableColumnDescription). |
|
2015 | 1189 |
]. |
1190 |
^ keyStringAndLanguageSelectionTableColumnDescriptionHolder. |
|
1191 |
! |
|
1192 |
||
1193 |
languageAtCol:colNr |
|
1194 |
^ shownLanguages at:colNr-1. |
|
1195 |
! |
|
1196 |
||
1197 |
languageShownHolderFor:lang |
|
1198 |
|holder| |
|
1199 |
||
1200 |
languageShownHolders isNil ifTrue:[ |
|
2434 | 1201 |
languageShownHolders := Dictionary new |
2015 | 1202 |
]. |
2434 | 1203 |
holder := languageShownHolders |
1204 |
at:lang |
|
1205 |
ifAbsentPut:[ |
|
1206 |
|h| |
|
1207 |
||
1208 |
h := true asValue. |
|
1209 |
h onChangeEvaluate:[ |
|
1210 |
h value ifTrue:[ |
|
1211 |
self enableLanguageDisplayFor:lang |
|
1212 |
] ifFalse:[ |
|
1213 |
self disableLanguageDisplayFor:lang |
|
1214 |
]. |
|
1215 |
]. |
|
1216 |
h |
|
1217 |
]. |
|
2015 | 1218 |
^ holder. |
1219 |
! |
|
1220 |
||
2048 | 1221 |
languageTextAcceptHolder |
1222 |
languageTextAcceptHolder isNil ifTrue:[ |
|
2434 | 1223 |
languageTextAcceptHolder := false asValue. |
2048 | 1224 |
]. |
1225 |
^ languageTextAcceptHolder. |
|
1226 |
! |
|
1227 |
||
2015 | 1228 |
languageTextHolder |
1229 |
languageTextHolder isNil ifTrue:[ |
|
2434 | 1230 |
languageTextHolder := '' asValue. |
2015 | 1231 |
]. |
1232 |
^ languageTextHolder. |
|
1233 |
! |
|
1234 |
||
1235 |
languageTextModifiedHolder |
|
1236 |
languageTextModifiedHolder isNil ifTrue:[ |
|
2434 | 1237 |
languageTextModifiedHolder := false asValue. |
2015 | 1238 |
]. |
1239 |
^ languageTextModifiedHolder. |
|
1240 |
! |
|
1241 |
||
1242 |
languagesList |
|
1243 |
languagesList isNil ifTrue:[ |
|
2434 | 1244 |
languagesList := List withAll:(self keyStringAndLanguageSelectionTable languages). |
2015 | 1245 |
]. |
1246 |
^ languagesList. |
|
1247 |
! |
|
1248 |
||
1249 |
originalTextHolder |
|
1250 |
originalTextHolder isNil ifTrue:[ |
|
2434 | 1251 |
originalTextHolder := '' asValue. |
2015 | 1252 |
]. |
1253 |
^ originalTextHolder. |
|
1254 |
! |
|
1255 |
||
1256 |
originalTextModifiedHolder |
|
1257 |
originalTextModifiedHolder isNil ifTrue:[ |
|
2434 | 1258 |
originalTextModifiedHolder := false asValue. |
2015 | 1259 |
]. |
1260 |
^ originalTextModifiedHolder. |
|
1261 |
! |
|
1262 |
||
2323 | 1263 |
pasteOriginalEnableHolder |
2434 | 1264 |
pasteOriginalEnableHolder isNil ifTrue:[pasteOriginalEnableHolder := false asValue]. |
2323 | 1265 |
^ pasteOriginalEnableHolder |
1266 |
! |
|
1267 |
||
2051 | 1268 |
pastePreviousTranslationEnableHolder |
2434 | 1269 |
pastePreviousTranslationEnableHolder isNil ifTrue:[pastePreviousTranslationEnableHolder := false asValue]. |
2051 | 1270 |
^ pastePreviousTranslationEnableHolder |
1271 |
! |
|
1272 |
||
2327 | 1273 |
searchBarImageInfoLabelHolder |
1274 |
||
1275 |
searchBarImageInfoLabelHolder isNil ifTrue:[ |
|
2434 | 1276 |
searchBarImageInfoLabelHolder := nil asValue . |
2327 | 1277 |
]. |
1278 |
^ searchBarImageInfoLabelHolder. |
|
1279 |
||
1280 |
"Created: / 16-06-2007 / 10:06:28 / Administrador" |
|
1281 |
! |
|
1282 |
||
1283 |
searchBarInfoLabelHolder |
|
1284 |
||
1285 |
searchBarInfoLabelHolder isNil ifTrue:[ |
|
2434 | 1286 |
searchBarInfoLabelHolder := '' asValue . |
2327 | 1287 |
]. |
1288 |
^ searchBarInfoLabelHolder. |
|
1289 |
||
1290 |
"Created: / 16-06-2007 / 06:20:49 / Administrador" |
|
1291 |
! |
|
1292 |
||
1293 |
searchBoxVisible |
|
1294 |
||
1295 |
searchBoxVisible isNil ifTrue:[ |
|
3522 | 1296 |
searchBoxVisible := false asValue. |
1297 |
searchBoxVisible |
|
1298 |
onChangeEvaluate:[ |
|
1299 |
self updateToolVisibility. |
|
1300 |
searchBoxVisible value ifTrue:[ |
|
1301 |
searchTextView takeFocus. |
|
1302 |
]. |
|
1303 |
]. |
|
2327 | 1304 |
]. |
1305 |
^ searchBoxVisible. |
|
1306 |
||
1307 |
"Created: / 15-06-2007 / 18:15:52 / Administrador" |
|
1308 |
! |
|
1309 |
||
2051 | 1310 |
searchForSimilarTranslationEnableHolder |
2434 | 1311 |
searchForSimilarTranslationEnableHolder isNil |
1312 |
ifTrue:[searchForSimilarTranslationEnableHolder := true asValue]. |
|
2051 | 1313 |
^ searchForSimilarTranslationEnableHolder |
1314 |
! |
|
1315 |
||
2327 | 1316 |
searchTextHolder |
1317 |
||
1318 |
searchTextHolder isNil ifTrue:[ |
|
2434 | 1319 |
searchTextHolder := ValueHolder new. |
2327 | 1320 |
"/ if your app needs to be notified of changes, uncomment one of the lines below: |
1321 |
"/ userSelectedHolder addDependent:self. |
|
1322 |
"/ userSelectedHolder onChangeSend:#searchTextHolderChanged to:self. |
|
1323 |
]. |
|
1324 |
^ searchTextHolder. |
|
1325 |
||
1326 |
"Created: / 15-06-2007 / 18:06:08 / Administrador" |
|
1327 |
! |
|
1328 |
||
1329 |
searchTextModifiedHolder |
|
1330 |
||
1331 |
searchTextModifiedHolder isNil ifTrue:[ |
|
2434 | 1332 |
searchTextModifiedHolder := false asValue . |
2327 | 1333 |
"/ if your app needs to be notified of changes, uncomment one of the lines below: |
1334 |
"/ searchTextModifiedHolder addDependent:self. |
|
1335 |
searchTextModifiedHolder onChangeSend:#searchTextModifiedHolderChanged to:self. |
|
1336 |
]. |
|
1337 |
^ searchTextModifiedHolder. |
|
1338 |
||
1339 |
"Created: / 15-06-2007 / 18:07:19 / Administrador" |
|
1340 |
! |
|
1341 |
||
2015 | 1342 |
selectedKeyRow |
1343 |
selectedKeyRow isNil ifTrue:[ |
|
2434 | 1344 |
selectedKeyRow := ValueHolder new. |
1345 |
selectedKeyRow onChangeSend:#selectionChanged to:self. |
|
2015 | 1346 |
]. |
1347 |
^ selectedKeyRow. |
|
1348 |
! |
|
1349 |
||
1350 |
showMissingTranslationsOnly |
|
1351 |
showMissingTranslationsOnly isNil ifTrue:[ |
|
2434 | 1352 |
showMissingTranslationsOnly := false asValue. |
1353 |
showMissingTranslationsOnly onChangeSend:#showMissingTranslationsOnlyChanged to:self. |
|
2015 | 1354 |
]. |
1355 |
^ showMissingTranslationsOnly. |
|
1356 |
! |
|
1357 |
||
1358 |
shownLanguages |
|
1359 |
shownLanguages isNil ifTrue:[ |
|
2434 | 1360 |
shownLanguages := List new. |
1361 |
shownLanguages addAll:(self languagesList). |
|
1362 |
shownLanguages onChangeSend:#shownLanguagesChanged to:self. |
|
2015 | 1363 |
]. |
1364 |
^ shownLanguages. |
|
1365 |
! |
|
1366 |
||
1367 |
stopApplicationIconVisibleHolder |
|
1368 |
stopApplicationIconVisibleHolder isNil ifTrue:[ |
|
2434 | 1369 |
stopApplicationIconVisibleHolder := false asValue. |
2015 | 1370 |
]. |
1371 |
^ stopApplicationIconVisibleHolder. |
|
1372 |
! ! |
|
1373 |
||
2048 | 1374 |
!InternationalLanguageTranslationEditor methodsFor:'change & update'! |
1375 |
||
2051 | 1376 |
languageTextHolderValue: aString |
1377 |
||
2163 | 1378 |
self languageTextHolder value: aString. |
1379 |
self languageTextModifiedHolder value:true. |
|
2051 | 1380 |
! |
1381 |
||
2048 | 1382 |
update:something with:aParameter from:changedObject |
1383 |
changedObject == shownLanguages ifTrue:[ |
|
2434 | 1384 |
self shownLanguagesChanged. |
1385 |
^ self. |
|
2048 | 1386 |
]. |
2049 | 1387 |
changedObject == languageTextAcceptHolder ifTrue:[ |
2434 | 1388 |
self updateLanguageTextModification. |
1389 |
^ self. |
|
2049 | 1390 |
]. |
2050 | 1391 |
changedObject == exampleLanguageSelectionHolder ifTrue:[ |
2434 | 1392 |
self updateExampleLanguageText. |
1393 |
^ self. |
|
1394 |
]. |
|
2051 | 1395 |
changedObject == showMissingTranslationsOnly ifTrue:[ |
2434 | 1396 |
self showMissingTranslationsOnlyChanged. |
1397 |
^ self. |
|
1398 |
]. |
|
2051 | 1399 |
! |
1400 |
||
1401 |
updateCopyPreviousTranslationButtonEnabled |
|
1402 |
||
2163 | 1403 |
self pastePreviousTranslationEnableHolder value: self shouldCopyPreviousTranslationButtonBeEnabled |
2050 | 1404 |
! |
1405 |
||
1406 |
updateExampleLanguageText |
|
1407 |
||
1408 |
self selectedKeyRow value isNil ifTrue:[^ self]. |
|
1409 |
self exampleLanguageTextHolder value:self currentExampleLanguageText |
|
2049 | 1410 |
! |
1411 |
||
2434 | 1412 |
updateKeyStringsToLanguageMappings |
1413 |
||
1414 |
keyStringsToLanguageMappings |
|
1415 |
at:lastSelectedKey |
|
1416 |
language:lastLanguage |
|
1417 |
put: self newLanguageText. |
|
2049 | 1418 |
! |
1419 |
||
2050 | 1420 |
updateLanguageAndKeySelection |
1421 |
||
1422 |
self originalTextHolder value: self selectedKey. |
|
2051 | 1423 |
self languageTextHolder value: (self languageTextFromSelectedKeyFor: self currentLanguage). |
1424 |
lastLanguage := self currentLanguage. |
|
2434 | 1425 |
lastSelectedKey := self selectedKey. |
2050 | 1426 |
! |
1427 |
||
2434 | 1428 |
updateLanguageTextModification |
1429 |
self languageTextModifiedHolder value ifTrue:[ |
|
1430 |
(self autoAccept or:[Dialog confirm:'Accept changed translation ?']) ifTrue:[ |
|
1431 |
self languageTextModifiedHolder value:false. |
|
1432 |
self languageTextHolder value:languageEditor contents. |
|
1433 |
lastLanguage notNil ifTrue:[self updateKeyStringsToLanguageMappings.] |
|
1434 |
] |
|
2049 | 1435 |
]. |
1436 |
! |
|
1437 |
||
1438 |
updateOriginalTextModification |
|
1439 |
||
2163 | 1440 |
|answer| |
2049 | 1441 |
|
3522 | 1442 |
self originalTextModifiedHolder value ifTrue:[ |
1443 |
answer := OptionBox |
|
1444 |
request:'Accept changed original text (key) ?' |
|
1445 |
label:'Original text (key) changed' |
|
1446 |
image:(WarningBox iconBitmap) |
|
1447 |
buttonLabels:#('Cancel' 'Accept' 'Accept As New') |
|
1448 |
values:#(nil #accept #acceptAsNew) |
|
1449 |
default:#acceptAsNew. |
|
1450 |
||
1451 |
answer isNil ifTrue:[^ self originalTextModifiedHolder value:false. ]. |
|
1452 |
answer == #accept ifTrue:[ |
|
3245 | 1453 |
self shouldImplement. ]. |
3522 | 1454 |
answer == #acceptAsNew ifTrue:[ |
3245 | 1455 |
self shouldImplement. ]. |
3522 | 1456 |
]. |
2323 | 1457 |
! |
1458 |
||
1459 |
updatePasteOriginalButtonEnabled |
|
1460 |
||
1461 |
self pasteOriginalEnableHolder value: self shouldPasteOriginalButtonBeEnabled |
|
2048 | 1462 |
! ! |
1463 |
||
2050 | 1464 |
!InternationalLanguageTranslationEditor methodsFor:'dialogs'! |
1465 |
||
2051 | 1466 |
requestEncoderDialog |
1467 |
||
1468 |
|box val characterCollection| |
|
2050 | 1469 |
|
2051 | 1470 |
val := '' asValue. |
1471 |
box := Dialog new. |
|
1472 |
(box addTextLabel:'Select or write the encoder') adjust:#left. |
|
1473 |
box addVerticalSpace. |
|
2434 | 1474 |
characterCollection := CharacterEncoder supportedExternalEncodings |
1475 |
inject: OrderedCollection new |
|
1476 |
into:[:collection :each | |
|
1477 |
collection add: each first; |
|
1478 |
yourself]. |
|
2051 | 1479 |
(box addComboBoxOn:val) list: characterCollection. |
1480 |
box addOkButton. |
|
1481 |
box open. |
|
1482 |
^val value |
|
1483 |
! |
|
1484 |
||
1485 |
requestEncoderStringFor: lang |
|
1486 |
"Returns an encoder string and updates the language's info" |
|
1487 |
|encoderString encoder| |
|
1488 |
encoderString := self requestEncoderDialog. |
|
1489 |
encoderString notEmpty ifTrue:[ |
|
2434 | 1490 |
encoder := CharacterEncoder encoderFor: encoderString ifAbsent:nil. |
1491 |
encoder notNil ifTrue:[keyStringsToLanguageMappings atLanguage: lang putEncoder: encoder.]. |
|
2051 | 1492 |
]. |
1493 |
^encoderString |
|
2050 | 1494 |
! |
1495 |
||
2434 | 1496 |
requestFilename |
2050 | 1497 |
|
1498 |
|aFilename| |
|
1499 |
||
2434 | 1500 |
aFilename := Dialog |
1501 |
requestFileName:(resources string:'Name of resource file:') |
|
1502 |
default:nil |
|
1503 |
pattern:'*.rs'. |
|
2050 | 1504 |
|
1505 |
aFilename isEmptyOrNil ifTrue:[^ nil ]. |
|
1506 |
^aFilename asFilename |
|
1507 |
! |
|
1508 |
||
2434 | 1509 |
requestFilenameFor: lang |
2051 | 1510 |
"Returns a filename to save the language resource and updates the language's info" |
1511 |
|aFilename| |
|
1512 |
||
2434 | 1513 |
aFilename := Dialog |
1514 |
requestFileName:(resources string:'Name of resource file to save %1:' with:lang asString) |
|
1515 |
default:nil |
|
1516 |
pattern:'*.rs'. |
|
2051 | 1517 |
|
1518 |
aFilename isEmptyOrNil ifTrue:[^ nil ]. |
|
1519 |
keyStringsToLanguageMappings atLanguage: lang putFilename: aFilename. |
|
1520 |
^aFilename asFilename |
|
1521 |
! |
|
1522 |
||
2050 | 1523 |
requestLanguage |
2434 | 1524 |
^ Dialog |
1525 |
choose:(resources string:'For which language ?') |
|
1526 |
fromList:languagesList |
|
1527 |
lines:10. |
|
2327 | 1528 |
! |
1529 |
||
1530 |
requestLanguageToSave |
|
2434 | 1531 |
^ Dialog |
1532 |
choose:'Which language do you want to save?' |
|
1533 |
fromList:languagesList |
|
1534 |
lines:10 |
|
2410 | 1535 |
! |
1536 |
||
1537 |
requestPackage |
|
2419 | 1538 |
|package allProjects projectsWithResources| |
1539 |
||
3264 | 1540 |
allProjects := Smalltalk allPackageIDs. |
2419 | 1541 |
projectsWithResources := allProjects |
3522 | 1542 |
select:[:pID | |
1543 |
|dir| |
|
1544 |
dir := Smalltalk projectDirectoryForPackage:pID. |
|
1545 |
dir notNil and:[ |
|
1546 |
(dir asFilename construct:'resources') exists] |
|
1547 |
]. |
|
2410 | 1548 |
|
1549 |
package := Dialog |
|
3522 | 1550 |
requestProject:(resources string:'Name of Package:') |
1551 |
from:projectsWithResources |
|
1552 |
initialAnswer:LastProject |
|
1553 |
suggestions:nil. |
|
2410 | 1554 |
|
1555 |
package isEmptyOrNil ifTrue:[^ nil ]. |
|
1556 |
LastProject := package. |
|
1557 |
^ package |
|
2050 | 1558 |
! ! |
1559 |
||
2327 | 1560 |
!InternationalLanguageTranslationEditor methodsFor:'images'! |
1561 |
||
1562 |
restartSearchBarIcon |
|
1563 |
||
1564 |
^ self class restartSearchBarIcon |
|
1565 |
! |
|
1566 |
||
1567 |
warningSearchBarIcon |
|
1568 |
||
1569 |
^ self class warningSearchBarIcon |
|
1570 |
! ! |
|
1571 |
||
2015 | 1572 |
!InternationalLanguageTranslationEditor methodsFor:'initialization & release'! |
1573 |
||
1574 |
closeRequest |
|
1575 |
"asks for permission before closing" |
|
1576 |
||
1577 |
self hasUnsavedChanges ifTrue:[ |
|
2434 | 1578 |
(Dialog |
1579 |
confirm:(resources string:'Close without saving ?') |
|
1580 |
default:false) ifFalse:[ |
|
1581 |
^ self |
|
1582 |
] |
|
2015 | 1583 |
]. |
1584 |
||
1585 |
super closeRequest |
|
1586 |
! |
|
1587 |
||
1588 |
initialize |
|
1589 |
modified := false. |
|
2031 | 1590 |
inSingleFileMode := false. |
3286 | 1591 |
methodsUsingKey := Dictionary new. |
2015 | 1592 |
super initialize |
1593 |
! |
|
1594 |
||
2049 | 1595 |
languageEditorBuilt:aView |
1596 |
languageEditor := aView. |
|
1597 |
! |
|
1598 |
||
2015 | 1599 |
postBuildDataSet:aView |
2049 | 1600 |
dataSetView := aView. |
1601 |
aView selectedColIndexHolder onChangeSend:#selectionChanged to:self. |
|
2015 | 1602 |
! ! |
1603 |
||
2327 | 1604 |
!InternationalLanguageTranslationEditor methodsFor:'initialize'! |
1605 |
||
1606 |
postBuildSearchBoxView: aBoxView |
|
1607 |
||
1608 |
searchBoxView := aBoxView |
|
1609 |
||
1610 |
"Created: / 15-06-2007 / 18:02:38 / Administrador" |
|
1611 |
! |
|
1612 |
||
1613 |
postBuildSearchTextView: anEditFieldView |
|
1614 |
||
1615 |
searchTextView := anEditFieldView |
|
1616 |
||
1617 |
"Created: / 15-06-2007 / 18:17:15 / Administrador" |
|
1618 |
! |
|
1619 |
||
1620 |
postBuildTranslationsPanel: aPanel |
|
1621 |
||
1622 |
translationsPanel := aPanel |
|
1623 |
! |
|
1624 |
||
1625 |
postBuildWith:aBuilder |
|
1626 |
||
1627 |
super postBuildWith:aBuilder. |
|
1628 |
self updateToolVisibility. |
|
1629 |
! ! |
|
1630 |
||
2015 | 1631 |
!InternationalLanguageTranslationEditor methodsFor:'menu actions'! |
1632 |
||
1633 |
addLanguage |
|
1634 |
|lang| |
|
1635 |
||
2410 | 1636 |
lang := Dialog request:(resources string:'New language (ISO symbol):'). |
2015 | 1637 |
lang isEmptyOrNil ifTrue:[^ self]. |
2410 | 1638 |
self addLanguage:lang |
1639 |
! |
|
1640 |
||
1641 |
addLanguage:langArg |
|
1642 |
|lang| |
|
1643 |
||
1644 |
lang := langArg asSymbol. |
|
2015 | 1645 |
(keyStringsToLanguageMappings includesLanguage:lang) ifTrue:[^ self ]. |
1646 |
||
1647 |
keyStringsToLanguageMappings addLanguage:lang. |
|
1648 |
self languagesList add:lang. |
|
1649 |
self shownLanguages add:lang. |
|
1650 |
modified := true. |
|
1651 |
! |
|
1652 |
||
1653 |
addTranslation |
|
1654 |
|key index| |
|
1655 |
||
1656 |
key := Dialog request:'New Key:'. |
|
2051 | 1657 |
key isEmpty ifTrue:[^self]. |
2163 | 1658 |
(self includesKey:key) ifFalse:[ |
2434 | 1659 |
keyStringsToLanguageMappings addKey:key. |
1660 |
modified := true. |
|
2015 | 1661 |
]. |
2051 | 1662 |
index := keyStringsToLanguageMappings indexOfKey:key. |
1663 |
self selectedKeyRow value:index |
|
2015 | 1664 |
! |
1665 |
||
3286 | 1666 |
browseReferringMethods |
1667 |
|selectedKey methods browser| |
|
1668 |
||
1669 |
selectedKey := self selectedKey. |
|
1670 |
selectedKey isNil ifTrue:[^ Dialog information: 'No selected key']. |
|
1671 |
||
1672 |
methods := methodsUsingKey at:selectedKey ifAbsent:nil. |
|
1673 |
methods isEmptyOrNil ifTrue:[ |
|
3522 | 1674 |
Dialog information:(resources stringWithCRs:'oops - no method remembered.\Please rerun the extract from XXX menu operation'). |
1675 |
^ self. |
|
1676 |
]. |
|
3286 | 1677 |
browser := UserPreferences systemBrowserClass browseMethods:methods. |
1678 |
browser autoSearch:selectedKey ignoreCase:true. |
|
1679 |
! |
|
1680 |
||
2163 | 1681 |
changeLastNameSpace |
1682 |
||
1683 |
|nameSpace defaultNameSpace| |
|
1684 |
||
1685 |
lastNameSpace notNil ifTrue:[defaultNameSpace := lastNameSpace name]. |
|
1686 |
nameSpace := Dialog requestNameSpace:'NameSpace:' title:'Search String in Name Space:' initialAnswer:defaultNameSpace. |
|
1687 |
nameSpace isNil ifTrue:[^self]. |
|
1688 |
nameSpace := Smalltalk at:nameSpace asSymbol. |
|
1689 |
nameSpace isNil ifTrue:[ |
|
2434 | 1690 |
^Dialog information:(resources string:'No such nameSpace exists.') |
2163 | 1691 |
]. |
1692 |
lastNameSpace := nameSpace. |
|
1693 |
! |
|
1694 |
||
2327 | 1695 |
changeLastPackage |
1696 |
||
1697 |
|package defaultPackage| |
|
1698 |
||
1699 |
lastPackage notNil ifTrue:[defaultPackage := lastPackage]. |
|
1700 |
package := Dialog |
|
2434 | 1701 |
requestProject:'Package:' |
1702 |
initialAnswer:defaultPackage |
|
1703 |
suggestions:#('foo' 'bar' 'baz'). |
|
2327 | 1704 |
package isNil ifTrue:[ |
2434 | 1705 |
^ self "/ Dialog information:(resources string:'No such package exists.') |
2327 | 1706 |
]. |
1707 |
lastPackage := package. |
|
1708 |
! |
|
1709 |
||
2015 | 1710 |
extractTranslationsFromClass |
1711 |
|aClass newTranslations| |
|
1712 |
||
2434 | 1713 |
aClass := Dialog |
1714 |
requestClass:'Class to extract translations from:' |
|
1715 |
okLabel:'OK' |
|
1716 |
initialAnswer:(lastExtractedClass ? LastExtractedClass). |
|
2015 | 1717 |
aClass isNil ifTrue:[^ self ]. |
1718 |
||
1719 |
lastExtractedClass := LastExtractedClass := aClass. |
|
1720 |
||
2032 | 1721 |
newTranslations := self extractTranslationsFromClass:aClass. |
1722 |
self addAllTranslations:newTranslations. |
|
1723 |
! |
|
1724 |
||
2163 | 1725 |
extractTranslationsFromNameSpace |
1726 |
||
1727 |
|newTranslations| |
|
1728 |
||
1729 |
self changeLastNameSpace. |
|
1730 |
lastNameSpace isNil ifTrue:[^self.]. |
|
1731 |
newTranslations := OrderedCollection new. |
|
1732 |
lastNameSpace allClassesDo:[:eachClass | |
|
2434 | 1733 |
newTranslations addAll:( self extractTranslationsFromClass:eachClass theNonMetaclass). |
2163 | 1734 |
]. |
1735 |
self addAllTranslations:newTranslations. |
|
1736 |
! |
|
1737 |
||
2032 | 1738 |
extractTranslationsFromProject |
3455 | 1739 |
|projectID newTranslations initialAnswer suggestions| |
1740 |
||
1741 |
initialAnswer := lastExtractedProject ? LastExtractedProject. |
|
1742 |
suggestions := initialAnswer isNil ifTrue:[ |
|
3522 | 1743 |
OrderedCollection new |
3455 | 1744 |
] ifFalse:[ |
3522 | 1745 |
OrderedCollection with:initialAnswer |
3455 | 1746 |
]. |
1747 |
projectID := Dialog requestProject:(resources string:'Package to extract translations from:') initialAnswer:initialAnswer suggestions:suggestions. |
|
2032 | 1748 |
projectID notNil ifTrue:[ |
3522 | 1749 |
projectID := projectID withoutSeparators asSymbol. |
2032 | 1750 |
]. |
1751 |
projectID isEmptyOrNil ifTrue:[^ self ]. |
|
1752 |
||
1753 |
lastExtractedProject := LastExtractedProject := projectID. |
|
1754 |
||
2015 | 1755 |
newTranslations := Set new. |
3282 | 1756 |
self withWaitCursorDo:[ |
3522 | 1757 |
Smalltalk allClassesDo:[:eachClass | |
1758 |
eachClass theNonMetaclass instAndClassMethodsDo:[:eachMethod | |
|
1759 |
eachMethod package == projectID ifTrue:[ |
|
1760 |
newTranslations addAll:( self extractTranslationsFromMethod:eachMethod ). |
|
1761 |
] |
|
1762 |
]. |
|
1763 |
]. |
|
1764 |
||
1765 |
self addAllTranslations:newTranslations. |
|
2015 | 1766 |
]. |
3454 | 1767 |
|
3189
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
1768 |
"Modified: / 19-02-2015 / 11:44:24 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
3455 | 1769 |
"Modified: / 16-08-2017 / 12:29:21 / mawalch" |
3189
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
1770 |
! |
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
1771 |
|
3522 | 1772 |
generateMissingTranslations: keys for: languages using: translator |
3189
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
1773 |
keys do:[:string | |
3522 | 1774 |
languages do:[:lang | |
1775 |
| translation | |
|
1776 |
||
1777 |
translation := keyStringsToLanguageMappings at:string language:lang. |
|
1778 |
translation isNil ifTrue:[ |
|
1779 |
translation := translator value: lang value: string. |
|
1780 |
translation notNil ifTrue:[ |
|
1781 |
keyStringsToLanguageMappings at: string language: lang put: translation. |
|
1782 |
]. |
|
1783 |
]. |
|
1784 |
]. |
|
3189
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
1785 |
]. |
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
1786 |
|
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
1787 |
"Created: / 19-02-2015 / 12:31:25 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
1788 |
! |
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
1789 |
|
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
1790 |
generateMissingTranslationsFor: languages |
3522 | 1791 |
self |
1792 |
generateMissingTranslations: keyStringsToLanguageMappings keys |
|
1793 |
for: languages |
|
1794 |
using: [ :lang :string | '**%1** %2' bindWith: lang asUppercase with: string ] |
|
3189
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
1795 |
|
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
1796 |
"Created: / 19-02-2015 / 12:39:46 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
1797 |
! |
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
1798 |
|
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
1799 |
generateMissingTranslationsForAll |
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
1800 |
self generateMissingTranslationsFor: keyStringsToLanguageMappings languages |
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
1801 |
|
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
1802 |
"Created: / 19-02-2015 / 12:40:01 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
2015 | 1803 |
! |
1804 |
||
2327 | 1805 |
importExistingTranslationsFromFile |
2410 | 1806 |
self information:'The import function is not available in this release'. |
2327 | 1807 |
! |
1808 |
||
2163 | 1809 |
inspectCanvasMissingStrings |
1810 |
||
1811 |
|spec nameSpace missingStrings| |
|
1812 |
||
1813 |
missingStrings := OrderedCollection new. |
|
1814 |
nameSpace := Dialog requestNameSpace:'NameSpace:' title:'Specify NameSpace to look for missing strings' initialAnswer:nil. |
|
1815 |
nameSpace := Smalltalk at:nameSpace asSymbol. |
|
1816 |
nameSpace isNil ifTrue:[ |
|
2434 | 1817 |
^Dialog information:(resources string:'No such nameSpace exists.?') |
2163 | 1818 |
]. |
1819 |
||
1820 |
nameSpace allClassesDo:[:cls | |
|
2434 | 1821 |
cls theMetaclass methodsDo:[:m | |
1822 |
m hasResource ifTrue:[ |
|
1823 |
(m resources includesKey:#canvas) ifTrue:[ |
|
1824 |
spec := (cls perform:m selector) decodeAsLiteralArray. |
|
1825 |
spec do:[:eachComponent | |
|
1826 |
eachComponent translationKeysDo:[:k | |
|
1827 |
(self includesKey: k) ifFalse:[ |
|
1828 |
missingStrings add: k. |
|
1829 |
Transcript showCR: k storeString, ' ', m printString]] |
|
1830 |
] |
|
1831 |
] |
|
1832 |
] |
|
1833 |
] |
|
2163 | 1834 |
]. |
1835 |
missingStrings asSet inspect |
|
1836 |
! |
|
1837 |
||
2015 | 1838 |
menuNew |
1839 |
modified ifTrue:[ |
|
2434 | 1840 |
(Dialog |
1841 |
confirm:(resources stringWithCRs:'Modified translations have not been changed.\\Create new translations set anyway ?') |
|
1842 |
default:false) ifFalse:[^ self]. |
|
2015 | 1843 |
]. |
1844 |
||
1845 |
keyStringsToLanguageMappings initialize. |
|
1846 |
keyStringsToLanguageMappings changed. |
|
1847 |
||
1848 |
self languagesList contents:self keyStringAndLanguageSelectionTable languages. |
|
1849 |
self shownLanguages contents:self keyStringAndLanguageSelectionTable languages. |
|
1850 |
modified := false. |
|
1851 |
! |
|
1852 |
||
1853 |
menuOpen |
|
2050 | 1854 |
|aFilename| |
2015 | 1855 |
|
2163 | 1856 |
self withWaitCursorDo:[ |
2434 | 1857 |
aFilename := self requestFilename. |
1858 |
aFilename isNil ifTrue:[^ self ]. |
|
1859 |
self readResourceFile:aFilename. |
|
2163 | 1860 |
] |
2015 | 1861 |
! |
1862 |
||
2410 | 1863 |
menuOpenByPackage |
1864 |
|package| |
|
1865 |
||
1866 |
self withWaitCursorDo:[ |
|
2434 | 1867 |
package := self requestPackage. |
1868 |
package isNil ifTrue:[^ self ]. |
|
1869 |
self readResourceFileForPackage:package. |
|
2410 | 1870 |
] |
1871 |
! |
|
1872 |
||
2015 | 1873 |
menuSave |
2050 | 1874 |
"Saves the language selected in the fileName from where the language resource was obtained." |
2053 | 1875 |
|lang| |
2015 | 1876 |
|
2327 | 1877 |
lang := self requestLanguageToSave. |
2050 | 1878 |
lang isNil ifTrue:[^ self]. |
2053 | 1879 |
self saveLanguage: lang |
1880 |
! |
|
1881 |
||
1882 |
menuSaveAll |
|
1883 |
"Saves all the languages in the fileName from where the language resource was obtained." |
|
2434 | 1884 |
keyStringsToLanguageMappings languagesInUse do:[:each | self saveLanguage: each]. |
2015 | 1885 |
! |
1886 |
||
1887 |
menuSaveAs |
|
2050 | 1888 |
"Saves the language selected in the specified fileName." |
1889 |
|lang aFilename| |
|
2015 | 1890 |
|
2327 | 1891 |
lang := self requestLanguageToSave. |
2434 | 1892 |
lang isNil ifTrue:[^ self]. |
2053 | 1893 |
aFilename := self requestFilenameFor:lang. |
2050 | 1894 |
aFilename isNil ifTrue:[^ self]. |
1895 |
self saveResourceFile:aFilename for:lang asSymbol |
|
2015 | 1896 |
! |
1897 |
||
1898 |
openAboutThisApplication |
|
1899 |
"This method was generated by the Browser. |
|
1900 |
It will be invoked when the menu-item 'help-about' is selected." |
|
1901 |
||
1902 |
"/ could open a customized aboutBox here ... |
|
1903 |
super openAboutThisApplication |
|
1904 |
! |
|
1905 |
||
1906 |
openDocumentation |
|
1907 |
"This method was generated by the Browser. |
|
1908 |
It will be invoked when the menu-item 'help-documentation' is selected." |
|
1909 |
||
1910 |
"/ change below as required ... |
|
1911 |
||
1912 |
"/ to open an HTML viewer on some document (under 'doc/online/<language>/' ): |
|
2413 | 1913 |
HTMLDocumentView openFullOnDocumentationFile:'tools/languageEditor/TOP.html'. |
2015 | 1914 |
|
1915 |
"/ add application-specific help files under the 'doc/online/<language>/help/appName' |
|
1916 |
"/ directory, and open a viewer with: |
|
1917 |
"/ HTMLDocumentView openFullOnDocumentationFile:'help/<MyApplication>/TOP.html'. |
|
1918 |
! |
|
1919 |
||
1920 |
readResourceFile:aFilename |
|
2031 | 1921 |
|lang| |
1922 |
||
2327 | 1923 |
lang := self requestLanguage. |
2031 | 1924 |
lang isNil ifTrue:[^ self ]. |
1925 |
||
1926 |
self readResourceFile:aFilename asLanguage:lang asSymbol |
|
1927 |
! |
|
1928 |
||
2410 | 1929 |
readResourceFileForPackage:aPackage |
1930 |
|allLanguages lang packageDir resourceDir langFile| |
|
1931 |
||
1932 |
packageDir := Smalltalk packageDirectoryForPackageId:aPackage. |
|
1933 |
resourceDir := packageDir asFilename construct:'resources'. |
|
1934 |
||
1935 |
allLanguages := Set new. |
|
1936 |
resourceDir directoryContentsAsFilenamesDo:[:eachFile | |
|
2434 | 1937 |
eachFile suffix = 'rs' ifTrue:[ |
1938 |
(('##.rs' match:eachFile baseName) |
|
1939 |
or:[('##-##.rs' match:eachFile baseName)]) ifTrue:[ |
|
1940 |
allLanguages add:(eachFile withoutSuffix baseName) |
|
1941 |
]. |
|
1942 |
]. |
|
2410 | 1943 |
]. |
1944 |
||
1945 |
allLanguages addAll:languagesList. |
|
1946 |
allLanguages := allLanguages asSortedCollection. |
|
1947 |
||
2434 | 1948 |
lang := Dialog |
1949 |
choose:(resources string:'For which language ?') |
|
1950 |
fromList:allLanguages |
|
1951 |
values:allLanguages |
|
1952 |
buttons:(resources array:#('All')) |
|
1953 |
values:#(all) |
|
1954 |
lines:10 |
|
1955 |
cancel:nil. |
|
2410 | 1956 |
|
1957 |
lang isNil ifTrue:[^ self ]. |
|
1958 |
||
1959 |
langFile := resourceDir construct:lang,'.rs'. |
|
1960 |
||
1961 |
lang == #all ifTrue:[ |
|
2434 | 1962 |
allLanguages do:[:lang | |
1963 |
self addLanguage:lang. |
|
1964 |
self readResourceFile:(resourceDir construct:lang,'.rs') asLanguage:lang. |
|
1965 |
]. |
|
2410 | 1966 |
] ifFalse:[ |
2434 | 1967 |
self readResourceFile:langFile asLanguage:lang asSymbol |
2410 | 1968 |
]. |
1969 |
! |
|
1970 |
||
2050 | 1971 |
removeLanguage |
3246 | 1972 |
|languagesToRemove| |
1973 |
||
1974 |
languagesToRemove := Dialog chooseMultiple:'Which language(s) do you want to remove?' fromList:languagesList lines:10. |
|
1975 |
languagesToRemove isEmptyOrNil ifTrue:[^ self ]. |
|
1976 |
(Dialog confirm: 'Are you sure to remove the languages: ', languagesToRemove printString) ifTrue:[ |
|
3522 | 1977 |
self languagesList removeAll:languagesToRemove. |
1978 |
self shownLanguages removeAll:languagesToRemove. |
|
2434 | 1979 |
]. |
2015 | 1980 |
! |
1981 |
||
1982 |
removeTranslation |
|
1983 |
|rowSelectionIndex selectedKey| |
|
1984 |
||
1985 |
rowSelectionIndex := self selectedKeyRow value. |
|
2163 | 1986 |
rowSelectionIndex isNil ifTrue:[^self]. |
2015 | 1987 |
rowSelectionIndex ~~ 0 ifTrue:[ |
2434 | 1988 |
selectedKey := keyStringsToLanguageMappings keyAt:rowSelectionIndex ifAbsent:nil. |
1989 |
selectedKey isNil ifTrue:[^self]. |
|
1990 |
(Dialog confirm:(resources string:'Really remove key %1' with:selectedKey)) ifTrue:[ |
|
1991 |
keyStringsToLanguageMappings removeKey:selectedKey. |
|
1992 |
]. |
|
2015 | 1993 |
]. |
1994 |
! |
|
1995 |
||
1996 |
runApplicationAndCollectTranslations |
|
2047 | 1997 |
|applicationClass newTranslations pseudoPack app startSelector| |
2015 | 1998 |
|
1999 |
monitoredApplication notNil ifTrue:[ |
|
3522 | 2000 |
monitoredApplication terminate. |
2001 |
[monitoredApplication notNil] whileTrue:[ |
|
2002 |
Delay waitForSeconds:0.1 |
|
2003 |
]. |
|
2015 | 2004 |
]. |
2005 |
||
2434 | 2006 |
applicationClass := Dialog |
3522 | 2007 |
requestClass:'Application class to start and collect translations from:' |
2008 |
okLabel:'OK' |
|
2009 |
initialAnswer:(lastExtractedApplicationClass ? LastExtractedApplicationClass ). |
|
2015 | 2010 |
applicationClass isNil ifTrue:[^ self ]. |
3286 | 2011 |
applicationClass isNameSpace ifTrue:[ |
3522 | 2012 |
Dialog warn:'Entered class is a NameSpace'. |
2013 |
^ self. |
|
2047 | 2014 |
]. |
2015 |
||
2016 |
applicationClass isVisualStartable ifTrue:[ |
|
3522 | 2017 |
startSelector := #open |
2047 | 2018 |
] ifFalse:[ |
3522 | 2019 |
startSelector := Dialog |
2020 |
request:'Entered class seems to be no application class. Ok to start using selector:' |
|
2021 |
initialAnswer:((applicationClass respondsTo:#'start') |
|
2022 |
ifTrue:#'start' |
|
2023 |
ifFalse:#'new') |
|
2024 |
okLabel:'START' |
|
2025 |
title:'Start Application'. |
|
2026 |
startSelector isNil ifTrue:[ |
|
2027 |
^ self |
|
2028 |
]. |
|
2029 |
startSelector := startSelector asSymbol. |
|
2047 | 2030 |
]. |
2015 | 2031 |
|
2032 |
lastExtractedApplicationClass := LastExtractedApplicationClass := applicationClass. |
|
2033 |
||
2034 |
newTranslations := Set new. |
|
2035 |
||
2036 |
pseudoPack := AccessCollectingPseudoResourcePack new. |
|
2037 |
pseudoPack realResourcePack:(applicationClass classResources). |
|
3286 | 2038 |
pseudoPack watchingTranslationEditor:self. |
2015 | 2039 |
|
2040 |
self stopApplicationIconVisibleHolder value:true. |
|
2041 |
||
3522 | 2042 |
monitoredApplication := |
2043 |
[ |
|
2044 |
[ |
|
2045 |
app := applicationClass new. |
|
2046 |
app resources:pseudoPack. |
|
2047 |
||
2048 |
app perform:startSelector. |
|
2049 |
app window waitUntilVisible. |
|
2050 |
app window waitUntilClosed. |
|
2051 |
] ensure:[ |
|
2052 |
app closeRequest. |
|
2053 |
self stopApplicationIconVisibleHolder value:false. |
|
2054 |
monitoredApplication := nil. |
|
2055 |
]. |
|
2056 |
] fork. |
|
2163 | 2057 |
! |
2058 |
||
2059 |
searchStringInLastNameSpace |
|
2060 |
||
2323 | 2061 |
|selectedKey browser lastSearchPatterns| |
2163 | 2062 |
|
2063 |
selectedKey := self selectedKey. |
|
2064 |
selectedKey isNil ifTrue:[^Dialog information: 'No selected key']. |
|
2065 |
browser := NewSystemBrowser new "open". |
|
2066 |
browser allButOpen. |
|
2323 | 2067 |
lastSearchPatterns := browser lastSearchPatterns. |
2068 |
(lastSearchPatterns notNil and:[lastSearchPatterns first ~= selectedKey]) ifTrue:[ |
|
2434 | 2069 |
browser lastSearchPatterns addFirst: selectedKey |
2163 | 2070 |
]. |
2327 | 2071 |
SearchDialog lastStringSearchArea: #currentNameSpace. |
2163 | 2072 |
lastNameSpace isNil ifTrue:[ |
2434 | 2073 |
self changeLastNameSpace. |
2163 | 2074 |
]. |
2075 |
lastNameSpace notNil ifTrue:[ |
|
2076 |
"/ browser navigationState selectedClasses value: lastNameSpace allClasses. |
|
2434 | 2077 |
browser navigationState nameSpaceFilter value: (OrderedCollection with:lastNameSpace name). |
2078 |
browser navigationState selectedNamespaces value: (OrderedCollection with:lastNameSpace name). |
|
2163 | 2079 |
]. |
2080 |
self withWaitCursorDo:[ |
|
2434 | 2081 |
browser browseMenuMethodsWithString |
2163 | 2082 |
]. |
2327 | 2083 |
! |
2084 |
||
2085 |
searchStringInLastPackage |
|
2086 |
||
2087 |
| selectedKey browser lastSearchPatterns| |
|
2088 |
||
2089 |
selectedKey := self selectedKey. |
|
3286 | 2090 |
selectedKey isNil ifTrue:[^ Dialog information: 'No selected key']. |
2091 |
||
2327 | 2092 |
browser := NewSystemBrowser new "open". |
2093 |
browser allButOpen. |
|
3522 | 2094 |
|
2327 | 2095 |
lastSearchPatterns := browser lastSearchPatterns. |
2096 |
(lastSearchPatterns notNil and:[lastSearchPatterns first ~= selectedKey]) ifTrue:[ |
|
3522 | 2097 |
browser lastSearchPatterns addFirst: selectedKey |
2327 | 2098 |
]. |
2099 |
SearchDialog lastStringSearchArea: #currentPackage. |
|
2100 |
lastPackage isNil ifTrue:[ |
|
3522 | 2101 |
self changeLastPackage. |
2327 | 2102 |
]. |
2103 |
lastPackage notNil ifTrue:[ |
|
2104 |
"/ browser navigationState selectedClasses value: lastNameSpace allClasses. |
|
3522 | 2105 |
browser navigationState packageFilter value: (OrderedCollection with:lastPackage). |
2106 |
browser navigationState selectedProjects value: (OrderedCollection with:lastPackage). |
|
2327 | 2107 |
]. |
2108 |
self withWaitCursorDo:[ |
|
3522 | 2109 |
browser |
2110 |
askForMethodAndSpawnSearchTitle:'String to Search for in Sources:' |
|
2111 |
browserLabel:'Methods containing "%1"' |
|
2112 |
searchWith:#( #'findString:in:ignoreCase:match:' #'findString:inMethods:ignoreCase:match:' ) |
|
2113 |
searchWhat:#string |
|
2114 |
searchArea:#currentPackage |
|
2115 |
withCaseIgnore:false |
|
2116 |
withTextEntry:false |
|
2117 |
withMatch:true |
|
2118 |
withMethodList:false |
|
2119 |
setSearchPattern:[:brwsr :string :ignoreCase :doMatch| |
|
2120 |
brwsr autoSearchPattern:string ignoreCase:ignoreCase. |
|
2121 |
] |
|
2122 |
initialText:selectedKey "/ does not work: ('''*',selectedKey,'*''') check match!! |
|
2327 | 2123 |
]. |
2015 | 2124 |
! ! |
2125 |
||
2126 |
!InternationalLanguageTranslationEditor methodsFor:'menus dynamic'! |
|
2127 |
||
2128 |
disableLanguageDisplayFor:lang |
|
2129 |
self shownLanguages remove:lang ifAbsent:[] |
|
2130 |
! |
|
2131 |
||
2132 |
enableLanguageDisplayFor:newLang |
|
2133 |
|shownLanguagesInOrder| |
|
2134 |
||
2135 |
(self shownLanguages includes:newLang) ifFalse:[ |
|
2048 | 2136 |
"/ shownLanguagesInOrder := self languagesList |
2137 |
"/ select:[:lang | (self shownLanguages includes:lang) |
|
2138 |
"/ or:[ lang = newLang ]]. |
|
2139 |
"/ self shownLanguages contents:shownLanguagesInOrder. |
|
2434 | 2140 |
self shownLanguages add:newLang. |
2015 | 2141 |
] |
2142 |
! |
|
2143 |
||
2144 |
isLanguageShown:lang |
|
2145 |
^ self shownLanguages includes:lang |
|
2146 |
! |
|
2147 |
||
3189
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
2148 |
menuSliceTranslateGenerate |
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
2149 |
| menu | |
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
2150 |
|
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
2151 |
menu := Menu new. |
3522 | 2152 |
keyStringsToLanguageMappings notNil ifTrue:[ |
2153 |
keyStringsToLanguageMappings languages do:[:lang | |
|
2154 |
menu addItem: |
|
2155 |
(MenuItem |
|
2156 |
label: (resources string: 'Generate Missing Translations - %1' with: lang asUppercase) |
|
2157 |
itemValue: [ self generateMissingTranslationsFor: (Array with: lang) ]) |
|
2158 |
]. |
|
3189
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
2159 |
]. |
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
2160 |
^ menu |
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
2161 |
|
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
2162 |
"Created: / 19-02-2015 / 12:44:13 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
2163 |
! |
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
2164 |
|
2015 | 2165 |
shownLanguagesMenu |
2166 |
<resource: #programMenu > |
|
2167 |
||
2168 |
^ [ |
|
2434 | 2169 |
|m selected| |
2170 |
||
2171 |
m := Menu new. |
|
2172 |
||
2173 |
self languagesList do:[:lang | |
|
2174 |
|item| |
|
2175 |
||
2176 |
item := MenuItem label:lang. |
|
2177 |
item indication:(self languageShownHolderFor:lang). |
|
2178 |
item hideMenuOnActivated:false. |
|
2179 |
m addItem:item. |
|
2180 |
]. |
|
2181 |
m |
|
2015 | 2182 |
]. |
2183 |
! |
|
2184 |
||
2185 |
toggleLanguageDisplayFor:lang |
|
2186 |
(self shownLanguages includes:lang) ifTrue:[ |
|
2434 | 2187 |
self disableLanguageDisplayFor:lang |
2015 | 2188 |
] ifFalse:[ |
2434 | 2189 |
self enableLanguageDisplayFor:lang |
2015 | 2190 |
]. |
2191 |
! ! |
|
2192 |
||
2193 |
!InternationalLanguageTranslationEditor methodsFor:'private-key extraction'! |
|
2194 |
||
2032 | 2195 |
addAllTranslations:newTranslations |
3286 | 2196 |
"merge found xlations into the list of already present xlations" |
3522 | 2197 |
|
2034 | 2198 |
|newTranslationKeys stringKeys nonStringKeys| |
2032 | 2199 |
|
3245 | 2200 |
newTranslationKeys := newTranslations select:[:k | k notEmptyOrNil and:[k isString not or:[k isBlank not]]]. |
2032 | 2201 |
newTranslationKeys := newTranslationKeys select:[:k | (keyStringsToLanguageMappings includesKey:k) not]. |
3286 | 2202 |
"/ follow the common-xlations algrithm of ResourcePack |
2203 |
"/ (which knows how to xlate strings with additional special chars.) |
|
3522 | 2204 |
newTranslationKeys := |
2205 |
newTranslationKeys collect:[:oldKey | |
|
2206 |
|newKey methods| |
|
2207 |
||
2208 |
(oldKey endsWith:' ...') ifTrue:[ |
|
2209 |
newKey := oldKey copyButLast:4. |
|
2210 |
] ifFalse:[ (oldKey endsWith:'...') ifTrue:[ |
|
2211 |
newKey := oldKey copyButLast:3. |
|
2212 |
] ifFalse:[ ('\.:?=,!! ' includes:oldKey last) ifTrue:[ |
|
2213 |
newKey := oldKey copyButLast:1. |
|
2214 |
] ifFalse:[ ((oldKey first == $() and:[ oldKey last == $) ]) ifTrue:[ |
|
2215 |
newKey := oldKey copyFrom:2 to:oldKey size - 1 |
|
2216 |
] ifFalse:[ ((oldKey first == $[) and:[ oldKey last == $] ]) ifTrue:[ |
|
2217 |
newKey := oldKey copyFrom:2 to:oldKey size - 1 |
|
2218 |
] ifFalse:[ |
|
2219 |
newKey :=oldKey |
|
2220 |
]]]]]. |
|
2221 |
"/ must attach oldKey-methods to newKey |
|
2222 |
methods := methodsUsingKey at:oldKey ifAbsent:nil. |
|
2223 |
methods notNil ifTrue:[ |
|
2224 |
(methodsUsingKey at:newKey ifAbsentPut:[Set new]) addAll:methods |
|
2225 |
]. |
|
2226 |
newKey |
|
2227 |
]. |
|
2228 |
||
2034 | 2229 |
newTranslationKeys := newTranslationKeys asSet. |
3246 | 2230 |
newTranslationKeys := newTranslationKeys select:[:k | (keyStringsToLanguageMappings includesKey:k) not]. |
2034 | 2231 |
|
2032 | 2232 |
newTranslationKeys notEmpty ifTrue:[ |
3522 | 2233 |
stringKeys := newTranslationKeys select:[:k | k isString]. |
2234 |
nonStringKeys := newTranslationKeys select:[:k | k isString not]. |
|
2235 |
||
2236 |
stringKeys := stringKeys asSortedCollection. |
|
2237 |
keyStringsToLanguageMappings addKeys:stringKeys. |
|
2238 |
keyStringsToLanguageMappings addKeys:nonStringKeys. |
|
2239 |
modified := true. |
|
2032 | 2240 |
]. |
2241 |
! |
|
2242 |
||
2243 |
extractTranslationsFromClass:aClass |
|
2244 |
|newTranslations| |
|
2245 |
||
2246 |
newTranslations := Set new. |
|
2247 |
||
2248 |
self withWaitCursorDo:[ |
|
3522 | 2249 |
"/ now, the hard part: |
2250 |
"/ possible translations are in the specs, |
|
2251 |
"/ and all arguments to (resources string:) messages. |
|
2252 |
aClass instAndClassMethodsDo:[:eachMethod | |
|
2253 |
newTranslations addAll:( self extractTranslationsFromMethod:eachMethod ). |
|
2254 |
]. |
|
3248 | 2255 |
]. |
3522 | 2256 |
|
2257 |
newTranslations := |
|
2258 |
newTranslations select:[:eachTranslation| |
|
2259 |
(aClass resources at:eachTranslation ifAbsent:nil) isNil |
|
2260 |
]. |
|
2032 | 2261 |
^ newTranslations |
2262 |
! |
|
2263 |
||
2015 | 2264 |
extractTranslationsFromHelpSpecMethod:aMethod |
3286 | 2265 |
"return strings which need translation from a help-spec method" |
2266 |
||
2015 | 2267 |
|codeStrings matcher parseTree resourceKeys| |
2268 |
||
2434 | 2269 |
parseTree := RBParser |
3522 | 2270 |
parseMethod:aMethod source |
2271 |
onError: [:str :pos | Transcript showCR:str. Transcript showCR:pos. |
|
2272 |
nil]. |
|
2015 | 2273 |
parseTree isNil ifTrue:[^ #() ]. |
2274 |
||
2434 | 2275 |
codeStrings := |
3522 | 2276 |
#( |
2277 |
'`@dict addPairsFrom: `#helpKeysAndStrings' |
|
2278 |
'^ `#lit' |
|
2279 |
). |
|
2015 | 2280 |
|
2281 |
resourceKeys := Set new. |
|
2282 |
||
2283 |
matcher := ParseTreeSearcher new. |
|
2434 | 2284 |
matcher |
3522 | 2285 |
matchesAnyOf: codeStrings |
2286 |
do: [:aNode :answer | |
|
2287 |
|sel argNode arg| |
|
2288 |
||
2289 |
aNode isReturn ifTrue:[ |
|
2290 |
"/ a ^ #(...) |
|
2291 |
aNode value isLiteralArray ifTrue:[ |
|
2292 |
aNode value value pairWiseDo:[:helpKey :helpString | |
|
2293 |
self rememberMethod:aMethod usingKey:helpString. |
|
2294 |
resourceKeys add:helpString. |
|
2295 |
]. |
|
2296 |
]. |
|
2297 |
] ifFalse:[ |
|
2298 |
sel := aNode selector. |
|
2299 |
(sel startsWith:'addPairsFrom:') ifTrue:[ |
|
2300 |
argNode := aNode arguments at:1. |
|
2301 |
argNode isLiteralArray ifTrue:[ |
|
2302 |
arg := argNode value. |
|
2303 |
arg doWithIndex:[:el :index | |
|
2304 |
index even ifTrue:[ |
|
2305 |
el isString ifTrue:[ |
|
2306 |
self rememberMethod:aMethod usingKey:el. |
|
2307 |
resourceKeys add:el. |
|
2308 |
] |
|
2309 |
]. |
|
2310 |
]. |
|
2311 |
] ifFalse:[ |
|
2312 |
Transcript halt |
|
2313 |
showCR:(resources |
|
2314 |
string:'Cannot derive resourceKey from non-literal array: %1 in %2' |
|
2315 |
with:argNode formattedCode |
|
2316 |
with:aMethod selector). |
|
2317 |
]. |
|
2318 |
]. |
|
2319 |
]. |
|
2320 |
aNode |
|
2321 |
]. |
|
2015 | 2322 |
|
2323 |
matcher executeTree: parseTree initialAnswer: nil. |
|
2324 |
^ resourceKeys |
|
2325 |
! |
|
2326 |
||
2327 |
extractTranslationsFromMenuSpecMethod:aMethod |
|
3286 | 2328 |
"return strings which need translation from a menu-spec method" |
2329 |
||
2015 | 2330 |
|menu resourceKeys| |
2331 |
||
2332 |
menu := aMethod mclass theNonMetaclass perform:aMethod selector. |
|
2333 |
menu isNil ifTrue:[ ^ #() ]. |
|
2334 |
||
2335 |
(menu isKindOf:Menu) ifFalse:[ |
|
3522 | 2336 |
menu := Menu new fromLiteralArrayEncoding:menu |
2015 | 2337 |
]. |
2338 |
||
2339 |
resourceKeys := Set new. |
|
2340 |
menu allItemsDo:[:aMenuItem | |
|
3522 | 2341 |
aMenuItem translateLabel ifTrue:[ |
2342 |
(aMenuItem isSeparatorItem or:[aMenuItem isMenuSlice]) ifFalse:[ |
|
2343 |
self rememberMethod:aMethod usingKey:aMenuItem label. |
|
2344 |
resourceKeys add:aMenuItem label. |
|
2345 |
] |
|
2346 |
] |
|
2015 | 2347 |
]. |
2348 |
^ resourceKeys |
|
2349 |
! |
|
2350 |
||
2351 |
extractTranslationsFromMethod:aMethod |
|
3286 | 2352 |
"return strings which need translation from a method." |
3522 | 2353 |
|
2015 | 2354 |
|mResources| |
2355 |
||
2356 |
mResources := aMethod resources. |
|
2357 |
mResources notNil ifTrue:[ |
|
3522 | 2358 |
(mResources includesKey:#menu) ifTrue:[ |
2359 |
^ self extractTranslationsFromMenuSpecMethod:aMethod. |
|
2360 |
]. |
|
2361 |
(mResources includesKey:#canvas) ifTrue:[ |
|
2362 |
^ self extractTranslationsFromUISpecMethod:aMethod. |
|
2363 |
]. |
|
2364 |
(mResources includesKey:#help) ifTrue:[ |
|
2365 |
^ self extractTranslationsFromHelpSpecMethod:aMethod. |
|
2366 |
]. |
|
2367 |
(mResources includesKey:#tableColumns) ifTrue:[ |
|
2368 |
^ self extractTranslationsFromTableColumnsSpecMethod:aMethod. |
|
2369 |
]. |
|
2370 |
||
2371 |
^ self extractTranslationsFromSpecMethod:aMethod. |
|
2015 | 2372 |
]. |
2373 |
^ self extractTranslationsFromMethodsCode:aMethod |
|
2374 |
! |
|
2375 |
||
2376 |
extractTranslationsFromMethodsCode:aMethod |
|
3286 | 2377 |
"return strings which need translation from a normal method. |
2378 |
detects messages to the resource translation mechanism" |
|
2379 |
||
2015 | 2380 |
|codeStrings matcher parseTree resourceKeys| |
2381 |
||
2434 | 2382 |
parseTree := RBParser |
3522 | 2383 |
parseMethod:aMethod source |
2384 |
onError: [:str :pos | Transcript showCR:str. Transcript showCR:pos. |
|
2385 |
nil]. |
|
2015 | 2386 |
parseTree isNil ifTrue:[^ #() ]. |
2387 |
||
2434 | 2388 |
codeStrings := |
3522 | 2389 |
#( |
2390 |
'resources `@msg: `@args' |
|
2391 |
'self resources `@msg: `@args' |
|
2392 |
'self class resources `@msg: `@args' |
|
2393 |
'self class classResources `@msg: `@args' |
|
2394 |
'self classResources `@msg: `@args' |
|
2395 |
'`V classResources `@msg: `@args' |
|
2396 |
). |
|
2015 | 2397 |
|
2398 |
resourceKeys := Set new. |
|
2399 |
||
2400 |
matcher := ParseTreeSearcher new. |
|
2434 | 2401 |
matcher |
3522 | 2402 |
matchesAnyOf: codeStrings |
2403 |
do: [:aNode :answer | |
|
2404 |
|sel keyStringArgNode keyStringArg| |
|
2405 |
||
2406 |
sel := aNode selector. |
|
2407 |
((sel startsWith:'string:') or:[(sel startsWith:'at:') or:[sel startsWith:'stringWithCRs:']]) ifTrue:[ |
|
2408 |
keyStringArgNode := aNode arguments at:1. |
|
2409 |
(keyStringArg := self literalStringOrStringConcatenation:keyStringArgNode) notNil ifTrue:[ |
|
2410 |
self rememberMethod:aMethod usingKey:keyStringArg. |
|
2411 |
resourceKeys add:keyStringArg. |
|
2412 |
] ifFalse:[ |
|
2413 |
Transcript |
|
2414 |
showCR:(resources |
|
2415 |
string:'[LanguageTranslator] warning: Cannot derive resourceKey from non-string: %1 in %2' |
|
2416 |
with:keyStringArgNode formattedCode |
|
2417 |
with:aMethod whoString). |
|
2418 |
]. |
|
2419 |
]. |
|
2420 |
aNode |
|
2421 |
]. |
|
2015 | 2422 |
|
2423 |
matcher executeTree: parseTree initialAnswer: nil. |
|
2424 |
^ resourceKeys |
|
3189
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
2425 |
|
4f828e688bf5
Support to automatically generate translations (for testing only)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3187
diff
changeset
|
2426 |
"Modified: / 19-02-2015 / 11:42:04 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
2015 | 2427 |
! |
2428 |
||
2429 |
extractTranslationsFromSpecMethod:aMethod |
|
2430 |
^ #() |
|
2431 |
! |
|
2432 |
||
2433 |
extractTranslationsFromTableColumnsSpecMethod:aMethod |
|
3286 | 2434 |
"return strings which need translation from a table-spec method" |
2435 |
||
2015 | 2436 |
|columnDescription resourceKeys| |
2437 |
||
2438 |
columnDescription := aMethod mclass theNonMetaclass perform:aMethod selector. |
|
2439 |
columnDescription isNil ifTrue:[ ^ #() ]. |
|
2440 |
||
2441 |
(columnDescription first isKindOf:DataSetColumnSpec) ifFalse:[ |
|
3522 | 2442 |
columnDescription := columnDescription collect:[:el | DataSetColumnSpec new fromLiteralArrayEncoding:el]. |
2015 | 2443 |
]. |
2444 |
||
2445 |
resourceKeys := Set new. |
|
2446 |
columnDescription do:[:aColumnSpec | |
|
3522 | 2447 |
aColumnSpec translateLabel ifTrue:[ |
2448 |
self rememberMethod:aMethod usingKey:aColumnSpec label. |
|
2449 |
resourceKeys add:aColumnSpec label. |
|
2450 |
] |
|
2015 | 2451 |
]. |
2452 |
^ resourceKeys |
|
2453 |
! |
|
2454 |
||
2455 |
extractTranslationsFromUISpecMethod:aMethod |
|
3286 | 2456 |
"return strings which need translation from a UI-spec method" |
3522 | 2457 |
|
2015 | 2458 |
|spec resourceKeys visitor| |
2459 |
||
2460 |
spec := aMethod mclass theNonMetaclass perform:aMethod selector. |
|
2461 |
spec isNil ifTrue:[ ^ #() ]. |
|
2462 |
||
2463 |
(spec isKindOf:UISpecification) ifFalse:[ |
|
3522 | 2464 |
spec := UISpecification from:spec |
2015 | 2465 |
]. |
2466 |
||
2467 |
resourceKeys := Set new. |
|
2468 |
||
2469 |
visitor := UISpecVisitor new. |
|
2470 |
spec acceptVisitor:visitor. |
|
3286 | 2471 |
visitor translatedLabels do:[:each | |
3522 | 2472 |
self rememberMethod:aMethod usingKey:each. |
3286 | 2473 |
]. |
2015 | 2474 |
^ visitor translatedLabels |
3284 | 2475 |
! |
2476 |
||
2477 |
literalStringOrStringConcatenation:aParseNode |
|
2478 |
"nil if not a literal or a string concatenation" |
|
3522 | 2479 |
|
3284 | 2480 |
aParseNode isLiteralString ifTrue:[^ aParseNode value]. |
2481 |
(aParseNode isMessage and:[aParseNode selector == #,]) ifTrue:[ |
|
3522 | 2482 |
|leftString rightString| |
2483 |
||
2484 |
aParseNode receiver isLiteralString ifTrue:[ |
|
2485 |
leftString := aParseNode receiver value |
|
2486 |
] ifFalse:[ |
|
2487 |
leftString := self literalStringOrStringConcatenation:aParseNode receiver. |
|
2488 |
]. |
|
2489 |
aParseNode arguments first isLiteralString ifTrue:[ |
|
2490 |
rightString := aParseNode arguments first value |
|
2491 |
] ifFalse:[ |
|
2492 |
rightString := self literalStringOrStringConcatenation:aParseNode arguments first. |
|
2493 |
]. |
|
2494 |
(leftString notNil and:[rightString notNil]) ifTrue:[ |
|
2495 |
^ leftString , rightString |
|
2496 |
]. |
|
3284 | 2497 |
]. |
2498 |
^ nil |
|
3286 | 2499 |
! |
2500 |
||
2501 |
recordNewTranslation:aString |
|
2502 |
"called from recorder, when the monitored application does a translation" |
|
3522 | 2503 |
|
3286 | 2504 |
self addAllTranslations:{ aString } |
2505 |
! |
|
2506 |
||
2507 |
rememberMethod:aMethod usingKey:aKey |
|
2508 |
(methodsUsingKey at:aKey ifAbsentPut:[Set new]) add:aMethod |
|
2015 | 2509 |
! ! |
2510 |
||
2511 |
!InternationalLanguageTranslationEditor methodsFor:'queries'! |
|
2512 |
||
2434 | 2513 |
autoAccept |
2050 | 2514 |
|
2515 |
^ self autoAcceptHolder value |
|
2516 |
! |
|
2517 |
||
2434 | 2518 |
currentExampleLanguageText |
2050 | 2519 |
"Returns the language text corresponding for the current selected key and the example language selection" |
2520 |
||
2521 |
^self languageTextFromSelectedKeyFor: self exampleLanguageSelectionHolder value |
|
2522 |
! |
|
2523 |
||
2051 | 2524 |
currentLanguage |
2525 |
||
2163 | 2526 |
|colSelectionIndex | |
2051 | 2527 |
|
2528 |
colSelectionIndex := dataSetView selectedColIndex. |
|
2529 |
^colSelectionIndex > 1 ifTrue:[ shownLanguages at:colSelectionIndex-1 ] ifFalse:nil. |
|
2530 |
! |
|
2531 |
||
2050 | 2532 |
exampleLanguageByDefault |
2533 |
||
2163 | 2534 |
^self shownLanguages isEmpty |
2434 | 2535 |
ifTrue:[nil] |
2536 |
ifFalse:[self shownLanguages first] |
|
2050 | 2537 |
! |
2538 |
||
2051 | 2539 |
hasFirstRowSelection |
2540 |
self selectedKeyRow isNil ifTrue:[^false]. |
|
2541 |
^ self selectedKeyRow value > 1 |
|
2542 |
! |
|
2543 |
||
2544 |
hasLanguageSelection |
|
2545 |
dataSetView selectedColIndex isNil ifTrue:[^false]. |
|
2546 |
^ dataSetView selectedColIndex > 1 |
|
2547 |
! |
|
2548 |
||
2015 | 2549 |
hasUnsavedChanges |
2550 |
^ modified |
|
2050 | 2551 |
! |
2552 |
||
2163 | 2553 |
includesKey: aKey |
2554 |
keyStringsToLanguageMappings isNil ifTrue:[^false]. |
|
2555 |
^keyStringsToLanguageMappings includesKey:aKey |
|
2556 |
! |
|
2557 |
||
2051 | 2558 |
isSearchForSimilarTranslationEnabled |
2559 |
||
2163 | 2560 |
^self searchForSimilarTranslationEnableHolder value |
2051 | 2561 |
! |
2562 |
||
2563 |
languageTextFromKey: aKeyIndex for: language |
|
2434 | 2564 |
"Returns the language text corresponding for the aKeyIndex and the received language" |
2051 | 2565 |
|
2566 |
language isNil ifTrue:[^'']. |
|
2434 | 2567 |
^keyStringsToLanguageMappings at: aKeyIndex language:language. |
2051 | 2568 |
! |
2569 |
||
2050 | 2570 |
languageTextFromSelectedKeyFor: language |
2434 | 2571 |
"Returns the language text corresponding for the current selected key and the received language" |
2572 |
||
2573 |
^self languageTextFromKey: self selectedKey for: language |
|
2051 | 2574 |
! |
2575 |
||
2576 |
shouldCopyPreviousTranslationButtonBeEnabled |
|
2434 | 2577 |
^ self hasLanguageSelection |
2578 |
and:[self hasFirstRowSelection] |
|
2051 | 2579 |
! |
2580 |
||
2323 | 2581 |
shouldPasteOriginalButtonBeEnabled |
2434 | 2582 |
^ self hasLanguageSelection |
2583 |
and:[self hasFirstRowSelection] |
|
2323 | 2584 |
! |
2585 |
||
2051 | 2586 |
shouldSearchForSimilarTranslation |
2587 |
||
2163 | 2588 |
self isSearchForSimilarTranslationEnabled ifFalse:[^false]. |
2589 |
(self languageTextHolder value notNil and:[self languageTextHolder value notEmpty]) ifTrue:[^false]. |
|
2590 |
(self hasLanguageSelection and:[self selectedKeyRow notNil]) ifFalse:[^false]. |
|
2591 |
^true |
|
2050 | 2592 |
! ! |
2593 |
||
2594 |
!InternationalLanguageTranslationEditor methodsFor:'read/write resourceFile'! |
|
2595 |
||
2053 | 2596 |
encoderAt: lang |
2597 |
||
2163 | 2598 |
self alwaysWriteUTF8Holder value ifTrue:[^CharacterEncoder encoderForUTF8]. |
2599 |
^keyStringsToLanguageMappings encoderAt: lang. |
|
2053 | 2600 |
! |
2601 |
||
2050 | 2602 |
printEditingWarningOn: aStream |
2603 |
||
2163 | 2604 |
aStream nextPutAll: ';'; |
3522 | 2605 |
cr; |
2606 |
nextPutAll: '; WARNING:'; |
|
2607 |
cr; |
|
2608 |
nextPutAll: '; this file contains national characters.'; |
|
2609 |
cr; |
|
2610 |
nextPutAll: '; DO NOT EDIT this file with an old vi!!'; |
|
2611 |
cr; |
|
2612 |
nextPutAll: ';'; |
|
2613 |
cr; |
|
2614 |
cr. |
|
2050 | 2615 |
! |
2616 |
||
2617 |
printEncoderFor: lang on: aStream |
|
2163 | 2618 |
|characterEncoder encoderString| |
2050 | 2619 |
|
2163 | 2620 |
characterEncoder := self encoderAt: lang. |
2434 | 2621 |
encoderString := characterEncoder isNil |
2622 |
ifTrue:[self requestEncoderStringFor: lang] |
|
2623 |
ifFalse:[characterEncoder nameOfEncoding printString]. |
|
2050 | 2624 |
|
2163 | 2625 |
aStream nextPutAll: '#encoding'; |
2434 | 2626 |
space; |
2627 |
nextPutAll: encoderString; |
|
2628 |
cr; |
|
2629 |
cr. |
|
2050 | 2630 |
! |
2631 |
||
2632 |
printLanguage: lang on: aStream |
|
2633 |
||
2163 | 2634 |
self printEncoderFor: lang on: aStream. |
2635 |
self printEditingWarningOn: aStream. |
|
2636 |
self printLanguageMappingsFor: lang on: aStream. |
|
2050 | 2637 |
! |
2638 |
||
2639 |
printLanguageMappingsFor: lang on: aStream |
|
2640 |
||
2434 | 2641 |
|orderedAssociations maxKeySize characterEncoder| |
2050 | 2642 |
|
2163 | 2643 |
characterEncoder := self encoderAt: lang. |
2644 |
characterEncoder isNil ifTrue:[ characterEncoder := CharacterEncoder::NullEncoder ]. |
|
2434 | 2645 |
orderedAssociations := keyStringsToLanguageMappings orderedLanguageMappingsAssociationsFor: lang. |
2646 |
||
2647 |
maxKeySize := keyStringsToLanguageMappings maxKeySizeForLanguage: lang. |
|
2050 | 2648 |
|
2163 | 2649 |
orderedAssociations do:[:association | |
3522 | 2650 |
"use #basicStoreString to avoid implicit utf8Encoding for UnicodeStrings" |
2651 |
aStream nextPutAll: ((characterEncoder encodeString:association key basicStoreString) paddedTo: maxKeySize) ; |
|
2652 |
tab; |
|
2653 |
nextPutAll: (characterEncoder encodeString: association value basicStoreString); |
|
2654 |
cr. |
|
2655 |
]. |
|
2050 | 2656 |
! |
2657 |
||
2658 |
readResourceFile:aFilename asLanguage:lang |
|
2659 |
|resourcePack inStream lineString encoding decoder sortedKeys remainingKeys| |
|
2660 |
||
2410 | 2661 |
aFilename exists ifFalse:[ |
3522 | 2662 |
Dialog information:(resources string:'Language file: "%1" does not exist' with:aFilename baseName). |
2663 |
^ self |
|
2410 | 2664 |
]. |
2050 | 2665 |
|
2666 |
resourcePack := ResourcePack new. |
|
2667 |
||
2668 |
inStream := aFilename readStream. |
|
2669 |
[inStream atEnd] whileFalse:[ |
|
3522 | 2670 |
lineString := inStream nextLine. |
2671 |
(lineString notEmpty |
|
2672 |
and:[ (lineString startsWith:';') not and:[ (lineString startsWith:'"/') not]]) ifTrue:[ |
|
2673 |
((lineString startsWith:'#') and:[(lineString startsWith:'#(') not]) ifTrue:[ |
|
2674 |
lineString := (lineString copyFrom:2) withoutSeparators. |
|
2675 |
(lineString startsWith:'encoding ') ifTrue:[ |
|
2676 |
encoding := ResourcePack extractEncodingFromLine:lineString. |
|
2677 |
decoder := CharacterEncoder encoderFor:encoding ifAbsent:nil. |
|
2678 |
]. |
|
2679 |
] ifFalse:[ |
|
2680 |
ResourcePack |
|
2681 |
processResourceLine:lineString |
|
2682 |
encoding:decoder |
|
2683 |
file:aFilename pathName |
|
2684 |
printErrorWith:[:msg | Transcript showCR:msg ] |
|
2685 |
for:resourcePack |
|
2686 |
keepUselessTranslations:true. |
|
2687 |
]. |
|
2688 |
]. |
|
2050 | 2689 |
]. |
2434 | 2690 |
inStream close. |
2050 | 2691 |
|
2692 |
sortedKeys := (resourcePack keys select:[:k | k isString]) asSortedCollection. |
|
2693 |
remainingKeys := resourcePack keys select:[:k | k isString not]. |
|
2694 |
||
2695 |
keyStringsToLanguageMappings atLanguage: lang putFilename: aFilename. |
|
2410 | 2696 |
keyStringsToLanguageMappings atLanguage: lang putEncoder: decoder. |
2050 | 2697 |
|
2698 |
sortedKeys do:[:k | |
|
3522 | 2699 |
keyStringsToLanguageMappings at:k language:lang put:(resourcePack at:k) sendChange:false |
2050 | 2700 |
]. |
2701 |
remainingKeys do:[:k | |
|
3522 | 2702 |
keyStringsToLanguageMappings at:k language:lang put:(resourcePack at:k) sendChange:false |
2050 | 2703 |
]. |
2410 | 2704 |
keyStringsToLanguageMappings changed. |
2050 | 2705 |
! |
2706 |
||
2053 | 2707 |
saveLanguage: lang |
2708 |
"Saves the language in the fileName from where the language resource was obtained." |
|
2709 |
|aFilename| |
|
2710 |
||
2711 |
lang isNil ifTrue:[^ self]. |
|
2712 |
aFilename := keyStringsToLanguageMappings filenameAt:lang. |
|
2713 |
aFilename isNil ifTrue:[ |
|
2434 | 2714 |
aFilename := self requestFilenameFor: lang. |
2715 |
aFilename isNil ifTrue:[^ self]. |
|
2053 | 2716 |
]. |
2717 |
self saveResourceFile:aFilename for:lang asSymbol |
|
2718 |
! |
|
2719 |
||
2050 | 2720 |
saveResourceFile: aFilename for: lang |
2721 |
||
2163 | 2722 |
|aStream | |
2050 | 2723 |
|
2163 | 2724 |
keyStringsToLanguageMappings atLanguage: lang putFilename: aFilename. |
2434 | 2725 |
aStream := FileStream newFileNamed: aFilename. |
2163 | 2726 |
self printLanguage: lang on: aStream. |
2727 |
aStream flush; |
|
2434 | 2728 |
close. |
2163 | 2729 |
DialogBox information: 'The resource file for the language ', lang printString storeString, ' was saved in the file: ', aFilename nameString |
2015 | 2730 |
! ! |
2731 |
||
2327 | 2732 |
!InternationalLanguageTranslationEditor methodsFor:'searching'! |
2733 |
||
2734 |
ignoreCaseHolderChanged |
|
2735 |
||
2736 |
self searchNextTextIncludingCurrentSelection: true. |
|
2737 |
||
2738 |
"Created: / 16-06-2007 / 09:33:33 / Administrador" |
|
2739 |
! |
|
2740 |
||
2741 |
searchNextText |
|
2742 |
||
2743 |
self searchNextTextIncludingCurrentSelection: false. |
|
2744 |
||
2745 |
"Modified: / 16-06-2007 / 09:21:14 / Administrador" |
|
2746 |
! |
|
2747 |
||
2748 |
searchNextTextFromBeginning |
|
2749 |
|searchText rowFoundIndex| |
|
2750 |
||
2751 |
searchText := searchTextView contents. |
|
2752 |
searchText isEmptyOrNil ifTrue:[^self]. |
|
2753 |
self objectsList isEmpty ifTrue:[^self]. |
|
2434 | 2754 |
rowFoundIndex := self tableView findFirstRowWithString: searchText |
2755 |
from:1 |
|
2756 |
to:self objectsList size |
|
2757 |
ignoreCase:self ignoreCaseHolder value. |
|
2327 | 2758 |
rowFoundIndex isNil ifTrue:[ |
2434 | 2759 |
self searchTextNotFound. |
2760 |
^self |
|
2327 | 2761 |
]. |
2762 |
self selectListIndex: rowFoundIndex |
|
2763 |
||
2764 |
"Created: / 16-06-2007 / 10:54:51 / Administrador" |
|
2765 |
"Modified: / 19-06-2007 / 15:38:59 / Administrador" |
|
2766 |
! |
|
2767 |
||
2768 |
searchNextTextIncludingCurrentSelection: includeCurrentSelection |
|
2769 |
|searchText currentSelectionIndex rowFoundIndex fromIndex listSize| |
|
2770 |
||
2771 |
self searchTextStarted. |
|
2772 |
searchText := searchTextView contents. |
|
2773 |
searchText isEmptyOrNil ifTrue:[^self]. |
|
2774 |
self objectsList isEmpty ifTrue:[^self]. |
|
2775 |
currentSelectionIndex := self currentSelectionIndex. |
|
2776 |
(currentSelectionIndex isNil or:[currentSelectionIndex == 0]) ifTrue:[ |
|
2434 | 2777 |
self searchNextTextFromBeginning. |
2778 |
^self. |
|
2327 | 2779 |
]. |
2780 |
listSize := self objectsList size. |
|
2781 |
(currentSelectionIndex == listSize and:[includeCurrentSelection not]) ifTrue:[ |
|
2434 | 2782 |
self searchNextTextReachEnd. |
2783 |
^self. |
|
2327 | 2784 |
]. |
2785 |
fromIndex := includeCurrentSelection |
|
2434 | 2786 |
ifTrue:[currentSelectionIndex] |
2787 |
ifFalse:[currentSelectionIndex + 1]. |
|
2788 |
rowFoundIndex := self tableView findFirstRowWithString: searchText |
|
2789 |
from:fromIndex |
|
2790 |
to:listSize |
|
2791 |
ignoreCase:self ignoreCaseHolder value. |
|
2327 | 2792 |
rowFoundIndex isNil ifTrue:[ |
2434 | 2793 |
self searchNextTextReachEnd. |
2794 |
^self |
|
2327 | 2795 |
]. |
2796 |
self selectListIndex: rowFoundIndex |
|
2797 |
||
2798 |
"Created: / 16-06-2007 / 09:20:57 / Administrador" |
|
2799 |
"Modified: / 19-06-2007 / 15:38:06 / Administrador" |
|
2800 |
! |
|
2801 |
||
2802 |
searchNextTextReachEnd |
|
2803 |
|message| |
|
2804 |
message := 'End of list reached, starting from the beginning'. |
|
2805 |
self searchTextRestarted: message. |
|
2330 | 2806 |
Smalltalk beep. |
2327 | 2807 |
self searchNextTextFromBeginning. |
2808 |
||
2809 |
"Created: / 16-06-2007 / 11:00:59 / Administrador" |
|
2810 |
! |
|
2811 |
||
2812 |
searchPreviousText |
|
2813 |
||
2814 |
|searchText currentSelectionIndex rowFoundIndex fromIndex| |
|
2815 |
||
2816 |
self searchTextStarted. |
|
2817 |
searchText := searchTextView contents. |
|
2818 |
searchText isEmptyOrNil ifTrue:[^self]. |
|
2819 |
self objectsList isEmpty ifTrue:[^self]. |
|
2820 |
currentSelectionIndex := self currentSelectionIndex. |
|
2821 |
currentSelectionIndex == 1 ifTrue:[ |
|
2434 | 2822 |
self searchPreviousTextReachBeginning. |
2823 |
^self. |
|
2327 | 2824 |
]. |
2825 |
(currentSelectionIndex isNil or:[currentSelectionIndex == 0]) |
|
2434 | 2826 |
ifTrue:[ |
2827 |
self searchPreviousTextFromEnd. |
|
2828 |
^self. |
|
2829 |
] |
|
2830 |
ifFalse:[fromIndex := currentSelectionIndex - 1]. |
|
2831 |
rowFoundIndex := self tableView findFirstRowWithString: searchText |
|
2832 |
from: fromIndex |
|
2833 |
to: 1 |
|
2834 |
by: -1 |
|
2835 |
ignoreCase:self ignoreCaseHolder value. |
|
2327 | 2836 |
rowFoundIndex isNil ifTrue:[ |
2434 | 2837 |
self searchPreviousTextReachBeginning. |
2838 |
^self |
|
2327 | 2839 |
]. |
2840 |
self selectListIndex: rowFoundIndex. |
|
2841 |
||
2842 |
"Modified: / 19-06-2007 / 15:38:16 / Administrador" |
|
2843 |
! |
|
2844 |
||
2845 |
searchPreviousTextFromEnd |
|
2846 |
||
2847 |
|searchText rowFoundIndex| |
|
2848 |
||
2849 |
searchText := searchTextView contents. |
|
2850 |
searchText isEmptyOrNil ifTrue:[^self]. |
|
2851 |
self objectsList isEmpty ifTrue:[^self]. |
|
2434 | 2852 |
rowFoundIndex := self tableView findFirstRowWithString: searchText |
2853 |
from: self objectsList size |
|
2854 |
to: 1 |
|
2855 |
by: -1 |
|
2856 |
ignoreCase:self ignoreCaseHolder value. |
|
2327 | 2857 |
rowFoundIndex isNil ifTrue:[ |
2434 | 2858 |
self searchTextNotFound. |
2859 |
^self |
|
2327 | 2860 |
]. |
2861 |
self selectListIndex: rowFoundIndex. |
|
2862 |
||
2863 |
"Created: / 16-06-2007 / 10:55:43 / Administrador" |
|
2864 |
"Modified: / 19-06-2007 / 15:38:26 / Administrador" |
|
2865 |
! |
|
2866 |
||
2867 |
searchPreviousTextReachBeginning |
|
2868 |
|message| |
|
2869 |
message := 'Beginning of list reached, starting from the end'. |
|
2870 |
self searchTextRestarted: message. |
|
2330 | 2871 |
Smalltalk beep. |
2327 | 2872 |
self searchPreviousTextFromEnd. |
2873 |
||
2874 |
"Created: / 16-06-2007 / 11:01:23 / Administrador" |
|
2875 |
! |
|
2876 |
||
2877 |
searchTextModifiedHolderChanged |
|
2878 |
||
2879 |
self searchNextTextIncludingCurrentSelection: true. |
|
2880 |
self searchTextModifiedHolder setValue: false. |
|
2881 |
||
2882 |
"/Transcript showCR: 'searchTextModifiedHolderChanged: ',(self searchTextHolder value ? ''). |
|
2883 |
"/Transcript showCR: 'searchTextView contents: ',(searchTextView contents ? ''). |
|
2884 |
||
2885 |
"Created: / 15-06-2007 / 18:07:57 / Administrador" |
|
2886 |
"Modified: / 16-06-2007 / 09:21:27 / Administrador" |
|
2887 |
! |
|
2888 |
||
2889 |
searchTextNotFound |
|
2890 |
||
2891 |
self selectListIndex: 0. |
|
2892 |
self searchBarImageInfoLabelHolder value: self warningSearchBarIcon. |
|
2893 |
self searchBarInfoLabelHolder value: 'Text not found'. |
|
2894 |
self setSearchTextNotFoundColors. |
|
2895 |
||
2896 |
"Created: / 16-06-2007 / 06:51:01 / Administrador" |
|
2897 |
"Modified: / 16-06-2007 / 11:43:53 / Administrador" |
|
2898 |
! |
|
2899 |
||
2900 |
searchTextRestarted: message |
|
2901 |
||
2902 |
self searchBarImageInfoLabelHolder value: self restartSearchBarIcon. |
|
2903 |
self searchBarInfoLabelHolder value: message. |
|
2904 |
"/ self setSearchTextNotFoundColors. |
|
2905 |
||
2906 |
"Created: / 16-06-2007 / 11:02:06 / Administrador" |
|
2907 |
! |
|
2908 |
||
2909 |
searchTextStarted |
|
2910 |
||
2911 |
self searchBarImageInfoLabelHolder value: nil. |
|
2912 |
self searchBarInfoLabelHolder value: ''. |
|
2913 |
self setSearchTextFoundColors. |
|
2914 |
||
2915 |
"Created: / 16-06-2007 / 06:54:03 / Administrador" |
|
2916 |
"Modified: / 16-06-2007 / 10:07:06 / Administrador" |
|
2917 |
! |
|
2918 |
||
2919 |
setSearchTextFoundColors |
|
2920 |
||
2921 |
searchTextView foregroundColor: Color black. |
|
2922 |
searchTextView backgroundColor: Color white. |
|
2923 |
||
2924 |
"Created: / 16-06-2007 / 06:28:32 / Administrador" |
|
2925 |
! |
|
2926 |
||
2927 |
setSearchTextNotFoundColors |
|
2928 |
||
2929 |
searchTextView foregroundColor: Color white. |
|
2930 |
searchTextView backgroundColor: Color lightRed. |
|
2931 |
||
2932 |
"Created: / 16-06-2007 / 06:29:00 / Administrador" |
|
2933 |
! ! |
|
2934 |
||
2015 | 2935 |
!InternationalLanguageTranslationEditor methodsFor:'specs-dynamic'! |
2936 |
||
2937 |
columnInRow:row at:colIndex |
|
2938 |
|lang| |
|
2939 |
||
2940 |
lang := self languageAtCol:colIndex. |
|
2941 |
^ row atLanguage:lang |
|
2942 |
! |
|
2943 |
||
2944 |
getBackgroundForRow:row rowNr:rowNr col:colIndex |
|
2945 |
|lang| |
|
2946 |
||
2947 |
colIndex == 1 ifTrue:[^ nil]. |
|
2948 |
lang := self languageAtCol:colIndex. |
|
2949 |
^ (row atLanguage:lang) isNil ifTrue:[Color red lightened] ifFalse:nil |
|
2950 |
! |
|
2951 |
||
2952 |
keyStringAndLanguageSelectionTableColumnDescription |
|
2953 |
|spec| |
|
2954 |
||
2955 |
spec := OrderedCollection new. |
|
2956 |
||
2047 | 2957 |
spec add:(self class keyTableColumn first). |
2015 | 2958 |
|
2959 |
self shownLanguages do:[:lang | |
|
2434 | 2960 |
|entry| |
2961 |
||
2962 |
entry := self class languageTableColumn first. |
|
2963 |
entry := entry copy replaceAll:#lang with:lang. |
|
2964 |
spec add: entry |
|
2015 | 2965 |
]. |
2966 |
^ spec |
|
2967 |
! |
|
2968 |
||
2969 |
keyStringInRow:row |
|
2970 |
^ row keyString |
|
2971 |
! ! |
|
2972 |
||
2327 | 2973 |
!InternationalLanguageTranslationEditor methodsFor:'update'! |
2974 |
||
2975 |
updateToolVisibility |
|
2976 |
| bottomOffset searchBarVisible | |
|
2977 |
||
2978 |
bottomOffset := 0. |
|
2979 |
||
2980 |
searchBarVisible := self searchBoxVisible value. |
|
2981 |
searchBarVisible ifTrue:[ |
|
2434 | 2982 |
bottomOffset := bottomOffset - searchBoxView height. |
2327 | 2983 |
]. |
2984 |
translationsPanel layout bottomOffset:bottomOffset-1. |
|
2985 |
translationsPanel container notNil ifTrue:[ |
|
2434 | 2986 |
translationsPanel containerChangedSize. |
2327 | 2987 |
]. |
2988 |
||
2989 |
"Created: / 16-06-2007 / 11:58:25 / Administrador" |
|
2990 |
! ! |
|
2991 |
||
2015 | 2992 |
!InternationalLanguageTranslationEditor methodsFor:'user actions'! |
2993 |
||
2327 | 2994 |
closeSearchBar |
2995 |
||
2996 |
self searchBoxVisible value: false. |
|
2997 |
self updateToolVisibility. |
|
2998 |
||
2999 |
"Created: / 15-06-2007 / 18:03:05 / Administrador" |
|
3000 |
"Modified: / 16-06-2007 / 11:58:52 / Administrador" |
|
3001 |
! |
|
3002 |
||
2050 | 3003 |
exampleLanguageSelectionChanged |
3004 |
||
3005 |
self updateExampleLanguageText. |
|
3006 |
! |
|
3007 |
||
2434 | 3008 |
languageTextAccepted |
2416
98dbabd36558
changed #languageTextAccepted
Claus Gittinger <cg@exept.de>
parents:
2413
diff
changeset
|
3009 |
|nextRowIndex selRow| |
98dbabd36558
changed #languageTextAccepted
Claus Gittinger <cg@exept.de>
parents:
2413
diff
changeset
|
3010 |
|
98dbabd36558
changed #languageTextAccepted
Claus Gittinger <cg@exept.de>
parents:
2413
diff
changeset
|
3011 |
selRow := self selectedKeyRow value. |
98dbabd36558
changed #languageTextAccepted
Claus Gittinger <cg@exept.de>
parents:
2413
diff
changeset
|
3012 |
selRow notNil ifTrue:[ |
2434 | 3013 |
keyStringsToLanguageMappings size = selRow |
3014 |
ifTrue:[ self updateLanguageTextModification.] |
|
3015 |
ifFalse:[ |
|
3016 |
nextRowIndex := selRow + 1. |
|
3017 |
self selectedKeyRow value: nextRowIndex] |
|
2416
98dbabd36558
changed #languageTextAccepted
Claus Gittinger <cg@exept.de>
parents:
2413
diff
changeset
|
3018 |
]. |
2051 | 3019 |
! |
3020 |
||
2323 | 3021 |
pasteOriginalInLanguageText |
3022 |
<resource: #uiCallback> |
|
3023 |
||
3024 |
| originalText| |
|
3025 |
||
3026 |
originalText := self selectedKey. |
|
3027 |
languageEditor selectAll. |
|
3028 |
languageEditor pasteOrReplace:originalText. |
|
3029 |
self languageTextModifiedHolder value:true. |
|
3030 |
! |
|
3031 |
||
2051 | 3032 |
pastePreviousTranslationInLanguageText |
3033 |
"Obtain the text from the previous translation and paste it into the languageTextEditor" |
|
2434 | 3034 |
|
2051 | 3035 |
| previousLanguageText previousLanguageRow| |
3036 |
||
3037 |
previousLanguageRow := dataSetView at:self selectedKeyRow value - 1 |
|
2434 | 3038 |
ifAbsent:[^self]. |
2051 | 3039 |
previousLanguageText := previousLanguageRow atLanguage: self currentLanguage. |
3040 |
languageEditor selectAll. |
|
3041 |
languageEditor pasteOrReplace:previousLanguageText. |
|
3042 |
self languageTextModifiedHolder value:true. |
|
3043 |
! |
|
3044 |
||
2327 | 3045 |
search |
3286 | 3046 |
"make the searchbox visible" |
3522 | 3047 |
|
2327 | 3048 |
self searchBoxVisible value: true. |
3049 |
self updateToolVisibility. |
|
3050 |
searchTextView takeFocus. |
|
3051 |
||
3052 |
"Modified: / 16-06-2007 / 11:58:44 / Administrador" |
|
3053 |
! |
|
3054 |
||
2434 | 3055 |
selectionChanged |
2048 | 3056 |
|
2049 | 3057 |
self updateOriginalTextModification. |
3058 |
self updateLanguageTextModification. |
|
3059 |
self updateLanguageAndKeySelection. |
|
2050 | 3060 |
self updateExampleLanguageText. |
2015 | 3061 |
|
2051 | 3062 |
self updateCopyPreviousTranslationButtonEnabled. |
2323 | 3063 |
self updatePasteOriginalButtonEnabled. |
2051 | 3064 |
|
2049 | 3065 |
self originalTextModifiedHolder value:false. |
3066 |
self languageTextModifiedHolder value:false. |
|
2051 | 3067 |
|
3068 |
self searchForSimilarTranslation. |
|
3069 |
! |
|
3070 |
||
3071 |
showMissingTranslationsOnlyChanged |
|
2015 | 3072 |
! |
3073 |
||
3074 |
shownLanguagesChanged |
|
2434 | 3075 |
self keyStringAndLanguageSelectionTableColumnDescriptionHolder |
3076 |
value:(self keyStringAndLanguageSelectionTableColumnDescription). |
|
2015 | 3077 |
! |
3078 |
||
3079 |
stopApplication |
|
3080 |
|p| |
|
3081 |
||
3082 |
(p := monitoredApplication) notNil ifTrue:[ |
|
2434 | 3083 |
p terminate. |
2015 | 3084 |
]. |
3085 |
! ! |
|
3086 |
||
3087 |
!InternationalLanguageTranslationEditor::AccessCollectingPseudoResourcePack methodsFor:'accessing'! |
|
3088 |
||
3089 |
realResourcePack:something |
|
3090 |
realResourcePack := something. |
|
3286 | 3091 |
! |
3092 |
||
3093 |
watchingTranslationEditor:something |
|
3094 |
watchingTranslationEditor := something. |
|
3095 |
! ! |
|
3096 |
||
3097 |
!InternationalLanguageTranslationEditor::AccessCollectingPseudoResourcePack methodsFor:'resource pack protocol'! |
|
3098 |
||
3099 |
forwardFor:aString |
|
3100 |
collectedKeys isNil ifTrue:[ |
|
3522 | 3101 |
collectedKeys := Set new. |
3286 | 3102 |
]. |
3103 |
collectedKeys add:aString. |
|
3104 |
watchingTranslationEditor notNil ifTrue:[ |
|
3522 | 3105 |
watchingTranslationEditor recordNewTranslation:aString. |
3286 | 3106 |
]. |
3107 |
^ realResourcePack perform:(thisContext sender selector) withArguments:(thisContext sender args). |
|
3108 |
! |
|
3109 |
||
3110 |
string:aString |
|
3111 |
^ self forwardFor:aString |
|
2015 | 3112 |
! ! |
3113 |
||
3114 |
!InternationalLanguageTranslationEditor::KeyStringsToLanguageMappings class methodsFor:'instance creation'! |
|
3115 |
||
3116 |
new |
|
3117 |
^ self basicNew initialize |
|
3118 |
! ! |
|
3119 |
||
3120 |
!InternationalLanguageTranslationEditor::KeyStringsToLanguageMappings methodsFor:'accessing'! |
|
3121 |
||
3122 |
addKey:aKey |
|
2410 | 3123 |
self addKey:aKey sendChange:true |
3124 |
! |
|
3125 |
||
3126 |
addKey:aKey sendChange:aBoolean |
|
2031 | 3127 |
(keys includes:aKey) ifFalse:[ |
2434 | 3128 |
keys add:aKey. |
3129 |
aBoolean ifTrue:[ self changed ]. |
|
2031 | 3130 |
] |
2015 | 3131 |
! |
3132 |
||
3133 |
addKeys:aCollectionOfKey |
|
3134 |
keys addAll:aCollectionOfKey. |
|
3135 |
self changed. |
|
3136 |
! |
|
3137 |
||
3138 |
addLanguage:lang |
|
2031 | 3139 |
(languages includes:lang) ifFalse:[ |
2434 | 3140 |
languages add:lang. |
3141 |
perLanguageMappings at:lang put:(OrderedDictionary new). |
|
2031 | 3142 |
] |
2015 | 3143 |
! |
3144 |
||
3145 |
at:aKey language:language |
|
2032 | 3146 |
^ (perLanguageMappings at:language) at:aKey ifAbsent:nil |
2015 | 3147 |
! |
3148 |
||
3149 |
at:aKey language:language put:value |
|
3150 |
self addKey:aKey. |
|
2049 | 3151 |
(perLanguageMappings at:language) at:aKey put:value. |
3152 |
(self rowForKey:aKey) changed |
|
2015 | 3153 |
! |
3154 |
||
2410 | 3155 |
at:aKey language:language put:value sendChange:sendChange |
3156 |
self addKey:aKey sendChange:sendChange. |
|
3157 |
(perLanguageMappings at:language) at:aKey put:value. |
|
3158 |
(self rowForKey:aKey) changed |
|
3159 |
! |
|
3160 |
||
2050 | 3161 |
atLanguage: lang putEncoder: aDecoder |
3162 |
||
3163 |
^(self languageInfoAt: lang) at: self encoderKey put: aDecoder |
|
3164 |
! |
|
3165 |
||
3166 |
atLanguage: lang putFilename: aFilename |
|
3167 |
||
3168 |
^(self languageInfoAt: lang) at: self fileNameKey put: aFilename |
|
3169 |
! |
|
3170 |
||
3171 |
decoderKey |
|
3172 |
^#decoder |
|
3173 |
! |
|
3174 |
||
2434 | 3175 |
encoderAt:lang |
2050 | 3176 |
^ (self languageInfoAt:lang) at: self encoderKey ifAbsent:[nil] |
3177 |
! |
|
3178 |
||
3179 |
encoderKey |
|
3180 |
^#encoder |
|
3181 |
! |
|
3182 |
||
3183 |
fileNameKey |
|
3184 |
^ #filename |
|
3185 |
! |
|
3186 |
||
2434 | 3187 |
filenameAt:lang |
2050 | 3188 |
^ (self languageInfoAt:lang) at: self fileNameKey ifAbsent:[nil] |
3189 |
! |
|
3190 |
||
2015 | 3191 |
keyAt:index |
2051 | 3192 |
^ keys at:index ifAbsent:[nil]. |
2015 | 3193 |
! |
3194 |
||
3195 |
keyAt:index ifAbsent:exceptionalValue |
|
3196 |
^ keys at:index ifAbsent:exceptionalValue. |
|
3197 |
! |
|
3198 |
||
3199 |
keys |
|
3200 |
^ keys |
|
3201 |
! |
|
3202 |
||
2434 | 3203 |
languageInfoAt: lang |
2050 | 3204 |
|
3205 |
^self perLanguageInfo at: lang ifAbsentPut:[Dictionary new] |
|
3206 |
! |
|
3207 |
||
2015 | 3208 |
languages |
3209 |
^ languages |
|
3210 |
! |
|
3211 |
||
2053 | 3212 |
languagesInUse |
3213 |
"Returns a collection of symbols for the languages that have mappings" |
|
3214 |
||
3215 |
^self languages select:[:each | (self atLanguage: each) notEmpty] |
|
3216 |
! |
|
3217 |
||
2051 | 3218 |
orderedLanguageMappingsAssociationsFor: language |
3219 |
"Returns a collection of languageMappings associations (alphabetically ordered by keys) " |
|
3522 | 3220 |
^(self atLanguage: language) associations |
3221 |
asSortedCollection:[:a :b | a key isArray or:[b key isArray or:[a key < b key]]]. |
|
2051 | 3222 |
! |
3223 |
||
2050 | 3224 |
perLanguageInfo |
3225 |
^ perLanguageInfo |
|
3226 |
! |
|
3227 |
||
3228 |
perLanguageInfo:something |
|
3229 |
perLanguageInfo := something. |
|
3230 |
! |
|
3231 |
||
2015 | 3232 |
removeKey:aKey |
3233 |
keys remove:aKey ifAbsent:[]. |
|
2032 | 3234 |
perLanguageMappings do:[:eachMapping | |
2434 | 3235 |
eachMapping removeKey:aKey ifAbsent:[]. |
2015 | 3236 |
]. |
3237 |
self changed. |
|
3238 |
! |
|
3239 |
||
2049 | 3240 |
rowForKey:aKey |
2434 | 3241 |
^ rowPerKey |
3242 |
at:aKey |
|
3243 |
ifAbsentPut:[InternationalLanguageTranslationEditor::LanguageMappingRow new |
|
3244 |
key:aKey; mappings:self]. |
|
2049 | 3245 |
! |
3246 |
||
2015 | 3247 |
size |
3248 |
^ keys size |
|
3249 |
! ! |
|
3250 |
||
3251 |
!InternationalLanguageTranslationEditor::KeyStringsToLanguageMappings methodsFor:'enumerating'! |
|
3252 |
||
3253 |
do:aBlock |
|
3254 |
keys do:[:eachKey | |
|
2434 | 3255 |
aBlock value:(self rowForKey:eachKey). |
2015 | 3256 |
]. |
3257 |
! ! |
|
3258 |
||
3259 |
!InternationalLanguageTranslationEditor::KeyStringsToLanguageMappings methodsFor:'initialization'! |
|
3260 |
||
3261 |
initialize |
|
3262 |
super initialize. |
|
3263 |
||
3264 |
keys := OrderedSet new. |
|
3265 |
languages := OrderedCollection new. |
|
2032 | 3266 |
perLanguageMappings := Dictionary new. |
2434 | 3267 |
perLanguageInfo := Dictionary new. |
2049 | 3268 |
rowPerKey := Dictionary new. |
2015 | 3269 |
|
2031 | 3270 |
self addLanguage:#'de'. |
3271 |
self addLanguage:#'fr'. |
|
3077
48211023a3c7
class: Tools::InternationalLanguageTranslationEditor
Claus Gittinger <cg@exept.de>
parents:
2880
diff
changeset
|
3272 |
self addLanguage:#'en'. |
48211023a3c7
class: Tools::InternationalLanguageTranslationEditor
Claus Gittinger <cg@exept.de>
parents:
2880
diff
changeset
|
3273 |
self addLanguage:#'it'. |
2031 | 3274 |
self addLanguage:#'es'. |
3275 |
self addLanguage:(Smalltalk language). |
|
3276 |
||
3277 |
"/ self initializeDemoMappings. |
|
3278 |
! |
|
3279 |
||
3280 |
initializeDemoMappings |
|
2015 | 3281 |
keys add:'open'. |
3282 |
keys add:'close'. |
|
3283 |
keys add:'yes'. |
|
3284 |
keys add:'no'. |
|
3285 |
||
3286 |
self addLanguage:#'de'. |
|
3287 |
self addLanguage:#'fr'. |
|
3288 |
||
3455 | 3289 |
self at:'open' language:#'de' put:'öffnen'. |
3290 |
self at:'close' language:#'de' put:'schließen'. |
|
2434 | 3291 |
self at:'yes' language:#'de' put:'ja'. |
3292 |
self at:'no' language:#'de' put:'nein'. |
|
3293 |
self at:'cancel' language:#'de' put:'abbrechen'. |
|
3294 |
||
3295 |
self at:'open' language:#'fr' put:'ouvrir'. |
|
3296 |
self at:'close' language:#'fr' put:'fermer'. |
|
3297 |
self at:'yes' language:#'fr' put:'oui'. |
|
3298 |
self at:'no' language:#'fr' put:'non'. |
|
2015 | 3299 |
! ! |
3300 |
||
3301 |
!InternationalLanguageTranslationEditor::KeyStringsToLanguageMappings methodsFor:'private'! |
|
3302 |
||
3303 |
atLanguage:lang |
|
2032 | 3304 |
^ perLanguageMappings at:lang |
2015 | 3305 |
! |
3306 |
||
3307 |
atLanguageIndex:idx |
|
3308 |
|lang| |
|
3309 |
||
3310 |
lang := languages at:idx. |
|
3311 |
^ self atLanguage:lang. |
|
2032 | 3312 |
! |
3313 |
||
3314 |
mappingAtLanguage:lang |
|
3315 |
^ perLanguageMappings at:lang |
|
3316 |
! |
|
3317 |
||
3318 |
mappingAtLanguageIndex:idx |
|
3319 |
|lang| |
|
3320 |
||
3321 |
lang := languages at:idx. |
|
3322 |
^ self mappingAtLanguage:lang. |
|
2015 | 3323 |
! ! |
3324 |
||
3325 |
!InternationalLanguageTranslationEditor::KeyStringsToLanguageMappings methodsFor:'queries'! |
|
3326 |
||
3327 |
includesKey:aKey |
|
3328 |
^ keys includes:aKey |
|
3329 |
! |
|
3330 |
||
3331 |
includesLanguage:lang |
|
3332 |
^ languages includes:lang |
|
3333 |
! |
|
3334 |
||
3335 |
indexOfKey:aKey |
|
3336 |
^ keys indexOf:aKey |
|
2050 | 3337 |
! |
3338 |
||
3339 |
maxKeySizeForLanguage: lang |
|
3340 |
||
3341 |
^(self atLanguage: lang) keys inject: 0 into:[:maxSize :each | |
|
2051 | 3342 |
(maxSize < each size and:[each size < 100]) |
2434 | 3343 |
ifTrue:[each size] |
3344 |
ifFalse:[maxSize].]. |
|
2051 | 3345 |
! |
3346 |
||
3347 |
searchForSimilarTranslation: aKey in: language |
|
2327 | 3348 |
"Returns a collection of translation associations that corresponds to a quite similar key comparing with aKey" |
3349 |
||
3350 |
|similarAssociations| |
|
2434 | 3351 |
|
3352 |
similarAssociations:= |
|
2327 | 3353 |
(self mappingAtLanguage: language) associationsSelect:[:each | |
3522 | 3354 |
|eachKey| |
3355 |
||
3356 |
eachKey := eachKey. |
|
3357 |
eachKey isString |
|
3358 |
and:[(eachKey sameAs: aKey) |
|
3359 |
or:[(aKey asUppercase startsWith: eachKey asUppercase) |
|
3360 |
or:[((eachKey asUppercase levenshteinTo: aKey asUppercase)/ eachKey size) < 0.3 |
|
3361 |
]]] |
|
3362 |
and:[each value notEmptyOrNil] |
|
2327 | 3363 |
]. |
3364 |
^similarAssociations |
|
2015 | 3365 |
! ! |
3366 |
||
3367 |
!InternationalLanguageTranslationEditor::LanguageMappingRow methodsFor:'accessing'! |
|
3368 |
||
3369 |
atLanguage:language |
|
2032 | 3370 |
|translation| |
3371 |
||
3372 |
translation := (mappings mappingAtLanguage:language) at:key ifAbsent:nil. |
|
3373 |
^ translation isNil ifTrue:nil ifFalse:[translation printString] |
|
2015 | 3374 |
! |
3375 |
||
3376 |
columnAt:columnNr |
|
2032 | 3377 |
^ (mappings mappingAtLanguageIndex:columnNr-1) at: key ifAbsent:nil |
2015 | 3378 |
! |
3379 |
||
3380 |
key:something |
|
3381 |
key := something. |
|
3382 |
! |
|
3383 |
||
3384 |
keyString |
|
2032 | 3385 |
^ key printString |
2015 | 3386 |
! |
3387 |
||
3388 |
mappings:something |
|
3389 |
mappings := something. |
|
3390 |
! ! |
|
3391 |
||
3392 |
!InternationalLanguageTranslationEditor::UISpecVisitor methodsFor:'accessing'! |
|
3393 |
||
3394 |
translatedLabels |
|
3395 |
^ translatedLabels ? #() |
|
3396 |
! ! |
|
3397 |
||
3398 |
!InternationalLanguageTranslationEditor::UISpecVisitor methodsFor:'visiting'! |
|
3399 |
||
3400 |
visitObject:anObject with:aParameter |
|
2033 | 3401 |
|l| |
3402 |
||
2015 | 3403 |
(anObject isKindOf:UISpecification) ifTrue:[ |
2434 | 3404 |
(anObject respondsTo:#translateLabel) ifTrue:[ |
3405 |
anObject translateLabel == true ifTrue:[ |
|
3406 |
translatedLabels isNil ifTrue:[ |
|
3407 |
translatedLabels := Set new. |
|
3408 |
]. |
|
3409 |
l := anObject perform:#label ifNotUnderstood:nil. |
|
3410 |
l notNil ifTrue:[ |
|
3411 |
translatedLabels add:l. |
|
3412 |
]. |
|
3413 |
]. |
|
3414 |
]. |
|
2015 | 3415 |
]. |
3416 |
self visitChildrenOf:anObject. |
|
3417 |
! ! |
|
3418 |
||
3419 |
!InternationalLanguageTranslationEditor class methodsFor:'documentation'! |
|
3420 |
||
3421 |
version |
|
3422 |
^ '$Header$' |
|
3246 | 3423 |
! |
3424 |
||
3425 |
version_CVS |
|
3426 |
^ '$Header$' |
|
2015 | 3427 |
! ! |