Tools__InternationalLanguageTranslationEditor.st
author Claus Gittinger <cg@exept.de>
Tue, 30 Oct 2018 16:46:41 +0100
changeset 3629 3b7a40bf90cb
parent 3627 9ee9d719f243
child 3638 0b8614c96523
permissions -rw-r--r--
#FEATURE by cg
class: Tools::InternationalLanguageTranslationEditor
added: #openFileBrowserOnResourceDirectory
comment/format in: #menuSaveAs

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