Tools__InternationalLanguageTranslationEditor.st
author Claus Gittinger <cg@exept.de>
Sat, 15 Sep 2018 12:43:15 +0200
changeset 3594 cfbc0a29b030
parent 3522 2a319ce12319
child 3595 ebf63823c259
permissions -rw-r--r--
#UI_ENHANCEMENT by cg
class: Tools::InternationalLanguageTranslationEditor
comment/format in:
#languageEditorBuilt:
#requestFilenameFor:
#saveLanguage:
changed:
#requestLanguageToSave
#update:with:from:

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