3 {$INCLUDE ../shared/a_modes.inc}
7 uses g_Basic
, MAPDEF
, Classes
;
10 MsgNotAccessible
= 'N/A';
12 MsgArrayBoolFalse
= 'No';
13 MsgArrayBoolTrue
= 'Yes';
15 MsgArrayDirLeft
= 'Left';
16 MsgArrayDirRight
= 'Right';
17 MsgArrayDirSame
= 'Don''t change';
18 MsgArrayDirReversed
= 'Reversed';
20 MsgArrayDirbtnLeft
= 'Left';
21 MsgArrayDirbtnRight
= 'Right';
22 MsgArrayDirbtnUp
= 'Up';
23 MsgArrayDirbtnDown
= 'Down';
25 MsgArrayPanelWall
= 'Wall';
26 MsgArrayPanelBack
= 'Background';
27 MsgArrayPanelFront
= 'Foreground';
28 MsgArrayPanelDoorOpen
= 'Open Door';
29 MsgArrayPanelDoorClose
= 'Closed Door';
30 MsgArrayPanelLadder
= 'Ladder';
31 MsgArrayPanelWater
= 'Water';
32 MsgArrayPanelAcid1
= 'Acid 1';
33 MsgArrayPanelAcid2
= 'Acid 2';
34 MsgArrayPanelLiftUp
= 'Stream Up';
35 MsgArrayPanelLiftDown
= 'Stream Down';
36 MsgArrayPanelLiftLeft
= 'Stream Left';
37 MsgArrayPanelLiftRight
= 'Stream Right';
38 MsgArrayPanelBlockmon
= 'Monster Boundary';
40 MsgArrayFxNone
= 'None';
41 MsgArrayFxTeleport
= 'Teleport';
42 MsgArrayFxRespawn
= 'Respawn';
43 MsgArrayFxFire
= 'Arch-Vile Fire';
45 MsgArrayItemMedkit
= 'Stimpack';
46 MsgArrayItemLargeMedkit
= 'Medikit';
47 MsgArrayItemBlackMedkit
= 'Berserk Pack';
48 MsgArrayItemGreenArmor
= 'Green Armor';
49 MsgArrayItemBlueArmor
= 'Blue Armor';
50 MsgArrayItemBlueSphere
= 'Soulsphere';
51 MsgArrayItemMegasphere
= 'Megasphere';
52 MsgArrayItemHazSuit
= 'Envirosuit';
53 MsgArrayItemOxygen
= 'Scuba';
54 MsgArrayItemInvulnerability
= 'Invulnerability';
55 MsgArrayItemChainsaw
= 'Chainsaw';
56 MsgArrayItemShotgun
= 'Shotgun';
57 MsgArrayItemDbShotgun
= 'Super Shotgun';
58 MsgArrayItemChaingun
= 'Chaingun';
59 MsgArrayItemRocketLauncher
= 'Rocket Launcher';
60 MsgArrayItemPlasmaRifle
= 'Plasma Rifle';
61 MsgArrayItemBfg
= 'BFG9000';
62 MsgArrayItemSuperChaingun
= 'Super Chaingun';
63 MsgArrayItemFlamethrower
= 'Flamethrower';
64 MsgArrayItemClip
= 'Clip';
65 MsgArrayItemAmmoBox
= 'Box of Bullets';
66 MsgArrayItem4Shells
= '4 Shells';
67 MsgArrayItem25Shells
= 'Box of Shells';
68 MsgArrayItem1Rocket
= 'Rocket';
69 MsgArrayItemRocketBox
= 'Box of Rockets';
70 MsgArrayItemCell
= 'Energy Cell';
71 MsgArrayItemLargeCell
= 'Energy Cell Pack';
72 MsgArrayItemFuelcan
= 'Fuel Canister';
73 MsgArrayItemBackpack
= 'Backpack';
74 MsgArrayItemKeyRed
= 'Red Key';
75 MsgArrayItemKeyGreen
= 'Green Key';
76 MsgArrayItemKeyBlue
= 'Blue Key';
77 MsgArrayItemBottle
= 'Health Globe';
78 MsgArrayItemHelmet
= 'Armor Shard';
79 MsgArrayItemJetpack
= 'Jetpack';
80 MsgArrayItemInvis
= 'Invisibility';
82 MsgArrayShotPistol
= 'Pistol shot';
83 MsgArrayShotBullet
= 'Chaingun shot';
84 MsgArrayShotShotgun
= 'Shotgun shot';
85 MsgArrayShotSsg
= 'Super Shotgun shot';
86 MsgArrayShotImp
= 'Imp fireball';
87 MsgArrayShotPlasma
= 'Blue plasma';
88 MsgArrayShotSpider
= 'Arachnotron plasma';
89 MsgArrayShotCaco
= 'Cacodemon fireball';
90 MsgArrayShotBaron
= 'Hell Baron projectile';
91 MsgArrayShotMancub
= 'Mancubus gunshot';
92 MsgArrayShotRev
= 'Revenant projectile';
93 MsgArrayShotRocket
= 'Rocket';
94 MsgArrayShotBfg
= 'BFG ball';
95 MsgArrayShotExpl
= 'Explosion';
96 MsgArrayShotBfgexpl
= 'BFG explosion';
97 MsgArrayShotFlame
= 'Flame';
99 MsgArrayMonDemon
= 'Pinky';
100 MsgArrayMonImp
= 'Imp';
101 MsgArrayMonZombie
= 'Zombie';
102 MsgArrayMonSergeant
= 'Sergeant';
103 MsgArrayMonCyber
= 'Cyberdemon';
104 MsgArrayMonCgun
= 'Commando';
105 MsgArrayMonHellBaron
= 'Hell Baron';
106 MsgArrayMonHellKnight
= 'Hell Knight';
107 MsgArrayMonCacodemon
= 'Cacodemon';
108 MsgArrayMonLostSoul
= 'Lost Soul';
109 MsgArrayMonPainElemental
= 'Pain Elemental';
110 MsgArrayMonMastermind
= 'Spider Mastermind';
111 MsgArrayMonArachnatron
= 'Arachnotron';
112 MsgArrayMonMancubus
= 'Mancubus';
113 MsgArrayMonRevenant
= 'Revenant';
114 MsgArrayMonArchvile
= 'Arch-Vile';
115 MsgArrayMonFish
= 'Piranha';
116 MsgArrayMonBarrel
= 'Barrel';
117 MsgArrayMonRobot
= 'Robot';
118 MsgArrayMonPrikolist
= 'Prikolist';
120 MsgArrayAreaPlayerOne
= 'Player 1';
121 MsgArrayAreaPlayerTwo
= 'Player 2';
122 MsgArrayAreaDm
= 'DM Spawn Point';
123 MsgArrayAreaFlagRed
= 'Red Flag';
124 MsgArrayAreaFlagBlue
= 'Blue Flag';
125 MsgArrayAreaFlagDom
= 'Domination Flag';
126 MsgArrayAreaTeamRed
= 'Red Team';
127 MsgArrayAreaTeamBlue
= 'Blue Team';
129 MsgArrayTrExit
= 'Exit';
130 MsgArrayTrTeleport
= 'Teleport';
131 MsgArrayTrDoorOpen
= 'Open Door';
132 MsgArrayTrDoorClose
= 'Close Door';
133 MsgArrayTrDoorSwitch
= 'Door';
134 MsgArrayTrDoor5Sec
= 'Door (5 sec)';
135 MsgArrayTrTrapClose
= 'Close Trap';
136 MsgArrayTrTrap
= 'Trap';
137 MsgArrayTrExtend
= 'Extender';
138 MsgArrayTrSecret
= 'Secret';
139 MsgArrayTrLiftUp
= 'Turn stream up/left';
140 MsgArrayTrLiftDown
= 'Turn stream down/right';
141 MsgArrayTrLiftSwitch
= 'Revert stream';
142 MsgArrayTrTexture
= 'Change Texture';
143 MsgArrayTrOn
= 'Enable Trigger';
144 MsgArrayTrOff
= 'Disable Trigger';
145 MsgArrayTrSwitch
= 'Trigger Toggle';
146 MsgArrayTrSound
= 'Play Sound';
147 MsgArrayTrSpawnMonster
= 'Spawn Monster';
148 MsgArrayTrSpawnItem
= 'Spawn Item';
149 MsgArrayTrMusic
= 'Play Music';
150 MsgArrayTrPush
= 'Push';
151 MsgArrayTrScore
= 'Team Score';
152 MsgArrayTrMessage
= 'Message';
153 MsgArrayTrDamage
= 'Damage';
154 MsgArrayTrHealth
= 'Healer';
155 MsgArrayTrShot
= 'Turret';
156 MsgArrayTrEffect
= 'Effect';
161 MsgPropWidth
= 'Width';
162 MsgPropHeight
= 'Height';
163 MsgPropPanelType
= 'Panel Type';
164 MsgPropPanelTex
= 'Texture';
165 MsgPropPanelAlpha
= 'Transparency';
166 MsgPropPanelBlend
= 'Blending';
167 MsgPropDmOnly
= 'DM Only';
168 MsgPropItemFalls
= 'Falls';
169 MsgPropDirection
= 'Direction';
171 MsgPropTrType
= 'Trigger Type';
172 MsgPropTrEnabled
= 'Enabled';
173 MsgPropTrTexturePanel
= 'Textured Panel';
174 MsgPropTrActivation
= 'Activation Type';
175 MsgPropTrKeys
= 'Keys';
176 MsgPropTrD2d
= 'D2D-like';
177 MsgPropTrSilent
= 'Silent';
178 MsgPropTrCount
= 'Count';
179 MsgPropTrInterval
= 'Interval (in ticks)';
180 MsgPropTrHealth
= 'Health';
181 MsgPropTrNextMap
= 'Next Map';
182 MsgPropTrTeleportTo
= 'Teleport to';
183 MsgPropTrTeleportSilent
= 'Silent';
184 MsgPropTrTeleportDir
= 'New Direction';
185 MsgPropTrDoorPanel
= 'Door Panel';
186 MsgPropTrTrapPanel
= 'Trap Panel';
187 MsgPropTrExArea
= 'Action Area';
188 MsgPropTrExDelay
= 'Delay';
189 MsgPropTrExCount
= 'Count';
190 MsgPropTrExMonster
= 'Monster ID';
191 MsgPropTrExRandom
= 'Random';
192 MsgPropTrLiftPanel
= 'Stream Panel';
193 MsgPropTrTextureOnce
= 'Once';
194 MsgPropTrTextureAnimOnce
= 'Animate Once';
195 MsgPropTrSoundName
= 'Sound (snd)';
196 MsgPropTrSoundVolume
= 'Volume';
197 MsgPropTrSoundPan
= 'Pan';
198 MsgPropTrSoundCount
= 'Loops';
199 MsgPropTrSoundLocal
= 'Local';
200 MsgPropTrSoundSwitch
= 'Switch';
201 MsgPropTrFxType
= 'Effect';
202 MsgPropTrSpawnTo
= 'Spawn at';
203 MsgPropTrSpawnMax
= 'Maximum';
204 MsgPropTrSpawnDelay
= 'Autospawn (in ticks)';
205 MsgPropTrMonsterType
= 'Monster';
206 MsgPropTrMonsterActive
= 'Active';
207 MsgPropTrMonsterBehaviour
= 'Behaviour';
208 MsgPropTrMonsterBehaviour0
= 'Normal';
209 MsgPropTrMonsterBehaviour1
= 'Killer';
210 MsgPropTrMonsterBehaviour2
= 'Maniac';
211 MsgPropTrMonsterBehaviour3
= 'Insane';
212 MsgPropTrMonsterBehaviour4
= 'Cannibal';
213 MsgPropTrMonsterBehaviour5
= 'Good';
214 MsgPropTrItemType
= 'Item';
215 MsgPropTrMusicName
= 'Music';
216 MsgPropTrMusicAct
= 'Action (m)';
217 MsgPropTrMusicOn
= 'Play';
218 MsgPropTrMusicOff
= 'Pause';
219 MsgPropTrPushAngle
= 'Angle';
220 MsgPropTrPushForce
= 'Force';
221 MsgPropTrPushReset
= 'Reset velocity';
222 MsgPropTrScoreAct
= 'Action (s)';
223 MsgPropTrScoreAct0
= 'Add points';
224 MsgPropTrScoreAct1
= 'Subtract points';
225 MsgPropTrScoreAct2
= 'Team Wins';
226 MsgPropTrScoreAct3
= 'Team Loses';
227 MsgPropTrScoreTeam
= 'Team';
228 MsgPropTrScoreTeam0
= 'My';
229 MsgPropTrScoreTeam1
= 'Enemy';
230 MsgPropTrScoreTeam2
= 'Red';
231 MsgPropTrScoreTeam3
= 'Blue';
232 MsgPropTrScoreCon
= 'Console message';
233 MsgPropTrScoreMsg
= 'Game message';
234 MsgPropTrDamageValue
= 'Damage';
235 MsgPropTrDamageKind
= 'Damage type';
236 MsgPropTrDamageKind0
= 'HIT_SOME';
237 MsgPropTrDamageKind3
= 'HIT_TRAP';
238 MsgPropTrDamageKind4
= 'HIT_FALL';
239 MsgPropTrDamageKind5
= 'HIT_WATER';
240 MsgPropTrDamageKind6
= 'HIT_ACID';
241 MsgPropTrDamageKind7
= 'HIT_ELECTRO';
242 MsgPropTrDamageKind8
= 'HIT_FLAME';
243 MsgPropTrHealthMax
= 'To maximum';
244 MsgPropTrShotType
= 'Projectile';
245 MsgPropTrShotSound
= 'Shot sound';
246 MsgPropTrShotAngle
= 'Angle';
247 MsgPropTrShotAcc
= 'Spread';
248 MsgPropTrShotTo
= 'Auto targeting';
249 MsgPropTrShotTo0
= 'None';
250 MsgPropTrShotTo1
= 'Monsters';
251 MsgPropTrShotTo2
= 'Players';
252 MsgPropTrShotTo3
= 'Red team';
253 MsgPropTrShotTo4
= 'Blue team';
254 MsgPropTrShotTo5
= 'Monsters, players';
255 MsgPropTrShotTo6
= 'Players, monsters';
256 MsgPropTrShotAim
= 'Auto-aiming mode';
257 MsgPropTrShotAim0
= 'Trigger area';
258 MsgPropTrShotAim1
= 'Entire map';
259 MsgPropTrShotAim2
= 'Trace trigger area';
260 MsgPropTrShotAim3
= 'Trace entire map';
261 MsgPropTrShotAmmo
= 'Ammo limit';
262 MsgPropTrShotReload
= 'Reload interval (in ticks)';
263 MsgPropTrShotSight
= 'Sight interval (in ticks)';
264 MsgPropTrShotPanel
= 'Indicator panel';
265 MsgPropTrMessageKind
= 'Message kind';
266 MsgPropTrMessageKind0
= 'Console message';
267 MsgPropTrMessageKind1
= 'Event message';
268 MsgPropTrMessageTo
= 'Send to';
269 MsgPropTrMessageTo0
= 'Me';
270 MsgPropTrMessageTo1
= 'My team';
271 MsgPropTrMessageTo2
= 'Enemy team';
272 MsgPropTrMessageTo3
= 'Red team';
273 MsgPropTrMessageTo4
= 'Blue team';
274 MsgPropTrMessageTo5
= 'Everyone';
275 MsgPropTrMessageText
= 'Message text';
276 MsgPropTrMessageTime
= 'Time (in ticks)';
277 MsgPropTrEffectType
= 'Effect type';
278 MsgPropTrEffectSubtype
= 'Effect subtype';
279 MsgPropTrEffectColor
= 'Effect color';
280 MsgPropTrEffectCenter
= 'Trigger center';
281 MsgPropTrEffectVelx
= 'Horizontal speed';
282 MsgPropTrEffectVely
= 'Vertical speed';
283 MsgPropTrEffectSpl
= 'Speed variance left';
284 MsgPropTrEffectSpr
= 'Speed variance right';
285 MsgPropTrEffectSpu
= 'Speed variance up';
286 MsgPropTrEffectSpd
= 'Speed variance down';
287 MsgPropTrEffectParticle
= 'Particle generator';
288 MsgPropTrEffectAnimation
= 'Animation';
289 MsgPropTrEffectSliquid
= 'Water splash';
290 MsgPropTrEffectLliquid
= 'Light colored splash';
291 MsgPropTrEffectDliquid
= 'Dark colored splash';
292 MsgPropTrEffectBlood
= 'Blood';
293 MsgPropTrEffectSpark
= 'Sparks';
294 MsgPropTrEffectBubble
= 'Bubbles';
296 MsgMsgError
= 'Error';
297 MsgMsgWrongTexwidth
= 'Panel Width must be a multiple of Texture Width (%d)';
298 MsgMsgWrongTexheight
= 'Panel Height must be a multiple of Texture Height (%d)';
299 MsgMsgWrongAlpha
= 'Transparency must be in [0..255] interval';
300 MsgMsgWrongSize
= 'Width and Height must be greater than 0';
301 MsgMsgWrongXy
= 'X or Y coordinate hasn''t been set';
302 MsgMsgTextureAlready
= 'Texture "%s" already exists';
303 MsgMsgResName64
= 'Resource "%s" name must not be longer than 64 chars';
304 MsgMsgChooseItem
= 'Select Item';
305 MsgMsgChooseMonster
= 'Select Monster';
306 MsgMsgChooseArea
= 'Select Area';
307 MsgMsgChooseTexture
= 'Select Texture';
308 MsgMsgChooseRes
= 'Resource hasn''t been selected';
310 MsgMsgExitPrompt
= 'Leaving so soon?';
311 MsgMsgDelTexture
= 'Delete the texture';
312 MsgMsgDelTexturePrompt
= 'Delete the texture "%s" ?';
313 MsgMsgDelTextureCant
= 'Can''t delete texture in use. Replace it on all panels with this texture.';
314 MsgMsgDelRecent
= 'File does not longer exist';
315 MsgMsgDelRecentPrompt
= 'Remove entry from recent list?';
316 MsgMsgClearMap
= 'New map';
317 MsgMsgClearMapPrompt
= 'Clear the entire map?';
318 MsgMsgDeleteMap
= 'Delete the map';
319 MsgMsgDeleteMapPrompt
= 'Delete the map "%s" from "%s" ?';
320 MsgMsgMapDeleted
= 'Map is deleted';
321 MsgMsgMapDeletedPrompt
= 'Map "%s" is deleted';
322 MsgMsgReopenMapPrompt
= 'Reopen this map?';
323 MsgMsgExecError
= 'Game start error';
324 MsgMsgSoundError
= 'Can''t play sound';
325 MsgMsgWadError
= 'Can''t open WAD: %s';
326 MsgMsgResError
= 'Can''t read resource: %s:%s\%s';
327 MsgMsgPacked
= 'Map "%s" with resources saved to "%s"';
328 MsgMsgMapExists
= 'Map "%s" already exists. Overwrite?';
329 MsgMsgSaveMap
= 'Save the map';
331 MsgHintTeleport
= 'Choose destination of Teleport';
332 MsgHintSpawn
= 'Choose Spawn point';
333 MsgHintPanelDoor
= 'Choose Door';
334 MsgHintPanelTexture
= 'Choose textured Panel';
335 MsgHintPanelShot
= 'Choose textured shot indicator Panel';
336 MsgHintPanelLift
= 'Choose Stream Panel';
337 MsgHintMonster
= 'Choose Monster';
338 MsgHintExtArea
= 'Specify action Area';
339 MsgHintWidth
= 'Width: %d';
340 MsgHintHeight
= 'Height: %d';
342 MsgMenuAppleAbout
= 'About Editor';
343 MsgMenuApplePref
= 'Preferences...';
345 MsgMenuFile
= 'File';
346 MsgMenuFileNew
= 'New';
347 MsgMenuFileOpen
= 'Open...';
348 MsgMenuFileRecentMac
= 'Open Recent';
349 MsgMenuFileRecentClearMac
= 'Clear Recent';
350 MsgMenuFileSave
= 'Save';
351 MsgMenuFileSaveAs
= 'Save As...';
352 MsgMenuFileOpenWad
= 'Select Map...';
353 MsgMenuFileReopen
= 'Revert to Saved';
354 MsgMenuFileSaveMini
= 'Save Minimap...';
355 MsgMenuFileDelete
= 'Remove from WAD...';
356 MsgMenuFilePackMap
= 'Pack to WAD...';
357 MsgMenuFileRecentWin
= 'Recent Files';
358 MsgMenuFileExitWin
= 'Exit';
360 MsgMenuEdit
= 'Edit';
361 MsgMenuEditUndo
= 'Undo';
362 MsgMenuEditCopy
= 'Copy';
363 MsgMenuEditCut
= 'Cut';
364 MsgMenuEditPaste
= 'Paste';
365 MsgMenuEditSelectAll
= 'Select All';
366 MsgMenuEditSnapGrid
= 'Snap to Grid';
367 MsgMenuEditGridStep
= 'Switch Grid Step';
368 MsgMenuEditToFore
= 'Bring to Front';
369 MsgMenuEditToBack
= 'Send to Back';
370 MsgMenuEditMapProps
= 'Map Properties...';
371 MsgMenuEditPrefWin
= 'Preferences...';
373 MsgMenuView
= 'View';
374 MsgMenuViewLayers
= 'Layers';
375 MsgMenuViewMinimap
= 'Show Minimap Navigator';
376 MsgMenuViewBounds
= 'Show Map Bounds';
377 MsgMenuViewPreview
= 'Preview Mode';
379 MsgMenuServ
= 'Service';
380 MsgMenuServTest
= 'Analyse Map...';
381 MsgMenuServOpt
= 'Optimize Map...';
382 MsgMenuServLaunch
= 'Run Test';
384 MsgMenuWindow
= 'Window';
385 MsgMenuWindowMinimize
= 'Minimize';
386 MsgMenuWindowZoom
= 'Zoom';
388 MsgMenuHelp
= 'Help';
389 MsgMenuHelpAboutWin
= 'About Editor';
391 MsgMenuLayerBack
= 'Background';
392 MsgMenuLayerFore
= 'Foreground';
393 MsgMenuLayerWalls
= 'Walls';
394 MsgMenuLayerDoors
= 'Doors';
395 MsgMenuLayerLadders
= 'Ladders';
396 MsgMenuLayerLiquids
= 'Liquids';
397 MsgMenuLayerStreams
= 'Streams';
398 MsgMenuLayerZones
= 'Zoning';
399 MsgMenuLayerMonsters
= 'Monsters';
400 MsgMenuLayerAreas
= 'Areas';
401 MsgMenuLayerItems
= 'Items';
402 MsgMenuLayerTriggers
= 'Triggers';
404 MsgMenuTbNew
= 'New Map';
405 MsgMenuTbOpen
= 'Open Map';
406 MsgMenuTbSave
= 'Save Map';
407 MsgMenuTbOpenWad
= 'Open another Map from same WAD';
408 MsgMenuTbMinimap
= 'Show Mini-map';
409 MsgMenuTbLayers
= 'Show/Hide Objects';
410 MsgMenuTbGrid
= 'Grid On/Off';
411 MsgMenuTbGridStep
= 'Switch Grid step';
412 MsgMenuTbLaunch
= 'Run Test';
414 MsgMenuLaunchSets
= 'Settings...';
416 MsgCapFxType
= 'Select Effect type';
417 MsgCapMonsterType
= 'Select Monster type';
418 MsgCapItemType
= 'Select Item type';
419 MsgCapAbout
= 'About Map Editor';
420 MsgCapAct
= 'Activation type';
421 MsgCapAddSky
= 'Select Sky Texture';
422 MsgCapAddSound
= 'Select Sound/Music';
423 MsgCapAddTexture
= 'Select Texture';
425 MsgCapTest
= 'Analyse Map';
426 MsgCapOpt
= 'Optimize Map';
427 MsgCapSets
= 'Map Properties';
428 MsgCapLaunch
= 'In-game test Settings';
429 MsgCapEs
= 'Preferences';
430 MsgCapPack
= 'Pack Map';
431 MsgCapSave
= 'Save Map';
432 MsgCapMini
= 'Save Minimap';
433 MsgCapSelect
= 'Select Map';
434 MsgCapOpen
= 'Open Map';
435 MsgCapRemove
= 'Remove Map';
436 MsgCapTexture
= 'Texture: %dx%d';
437 MsgCapAnimation
= 'Animation: %dx%d, %d frames';
438 MsgCapStatSelected
= 'Selected objects: %d';
440 MsgCtrlPropKey
= 'Property';
441 MsgCtrlPropValue
= 'Value';
443 MsgCtrlPanels
= 'Panels';
444 MsgCtrlItems
= 'Items';
445 MsgCtrlMonsters
= 'Monsters';
446 MsgCtrlAreas
= 'Areas';
447 MsgCtrlTriggers
= 'Triggers';
449 MsgCtrlListTexture
= 'Texture List';
450 MsgCtrlListItem
= 'Item List';
451 MsgCtrlListMonster
= 'Monster List';
452 MsgCtrlListArea
= 'Area List';
453 MsgCtrlListTrigger
= 'Trigger List';
454 MsgCtrlListActive
= 'Activation Type';
455 MsgCtrlListKeys
= 'Keys Needed';
457 MsgCtrlPreview
= 'Texture Preview';
458 MsgCtrlItemDm
= 'DM Only';
459 MsgCtrlItemFalls
= 'Falls';
460 MsgCtrlLeft
= 'Left';
461 MsgCtrlRight
= 'Right';
463 MsgCtrlActPlayerClose
= 'Player Collides';
464 MsgCtrlActMonsterClose
= 'Monster Collides';
465 MsgCtrlActPlayerPress
= 'Player Pressed';
466 MsgCtrlActMonsterPress
= 'Monster Pressed';
467 MsgCtrlActShot
= 'Shot';
468 MsgCtrlActNoMonster
= 'No Monsters';
470 MsgCtrlKeysRed
= 'Red Key';
471 MsgCtrlKeysGreen
= 'Green Key';
472 MsgCtrlKeysBlue
= 'Blue Key';
473 MsgCtrlKeysTeamRed
= 'Red Team';
474 MsgCtrlKeysTeamBlue
= 'Blue Team';
476 MsgCtrlOptGb
= 'Optimization';
477 MsgCtrlOptTexture
= 'Texture Optimization';
478 MsgCtrlOptPanel
= 'Panel Optimization';
479 MsgCtrlOptWall
= 'Walls';
480 MsgCtrlOptFore
= 'Foreground';
481 MsgCtrlOptBack
= 'Background';
482 MsgCtrlOptLadder
= 'Ladders';
483 MsgCtrlOptWater
= 'Water';
484 MsgCtrlOptAcid1
= 'Acid 1';
485 MsgCtrlOptAcid2
= 'Acid 2';
486 MsgCtrlOptLift
= 'Streams';
487 MsgCtrlOptBlockmon
= 'Monster Boundary';
488 MsgCtrlOptDescTexture
= 'Deletes unused textures from texture list.';
489 MsgCtrlOptDescPanel
= 'Merges nearby panels of same type. Increases game performance.';
490 MsgCtrlSetsStats
= 'Statistics:';
491 MsgCtrlSetsSizes
= 'Map Size:';
493 MsgCtrlEsTesting
= 'Testing';
494 MsgCtrlLaunchDm
= 'Deathmatch';
495 MsgCtrlLaunchTdm
= 'Team Deathmatch';
496 MsgCtrlLaunchCtf
= 'Capture the Flag';
497 MsgCtrlLaunchCoop
= 'Cooperative';
498 MsgCtrlLaunch2p
= 'Two Players';
499 MsgCtrlLaunchFf
= 'Friendly Fire';
500 MsgCtrlLaunchExit
= 'Enable Exit';
501 MsgCtrlLaunchWeapons
= 'Weapons Stay';
502 MsgCtrlLaunchMonsters
= 'Enable Monsters';
503 MsgCtrlLaunchClose
= 'Close the game after exiting the map';
504 MsgCtrlLaunchOpen
= 'Select Doom 2D: Forever executable';
506 MsgCtrlEsGeneral
= 'General';
507 MsgCtrlEsGrid
= 'Show Grid';
508 MsgCtrlEsTexture
= 'Show Panel Texture';
509 MsgCtrlEsPanelSize
= 'Show Panel Size';
510 MsgCtrlEsCheckerboard
= 'Use Checkerboard';
512 MsgCtrlPackTextures
= 'Textures';
513 MsgCtrlPackSky
= 'Sky';
514 MsgCtrlPackMusic
= 'Music';
515 MsgCtrlPackAdd
= 'Don''t overwrite WAD';
516 MsgCtrlPackNonStd
= 'Non-standard Resources only';
518 MsgLabTexWidth
= 'Texture Width:';
519 MsgLabTexHeight
= 'Texture Height:';
521 MsgLabSpectrum
= 'Show the Spectrum';
523 MsgLabAboutVer
= 'Version 2.1.5';
524 MsgLabAboutAuthor
= 'Author: rs.falcon';
525 MsgLabAboutAuthor2
= 'Additions: Pss';
526 MsgLabAboutMail
= 'rmw.falcon@mail.ru';
527 MsgLabAboutMail2
= 'pssxx@mail.ru';
528 MsgLabAboutSite
= 'Doom 2D: Forever Web-site';
529 MsgLabAboutHttp
= 'www.doom2d.org';
531 MsgLabAddWads
= 'WAD Files:';
532 MsgLabAddSections
= 'WAD Sections:';
534 MsgLabSetsName
= 'Map Name:';
535 MsgLabSetsDesc
= 'Map Description';
536 MsgLabSetsAuthor
= 'Author:';
537 MsgLabSetsBack
= 'Background/Sky:';
538 MsgLabSetsMusic
= 'Music:';
539 MsgLabSetsTextures
= 'Textures:';
540 MsgLabSetsPanels
= 'Panels:';
541 MsgLabSetsItems
= 'Items:';
542 MsgLabSetsMonsters
= 'Monsters:';
543 MsgLabSetsAreas
= 'Areas:';
544 MsgLabSetsTriggers
= 'Triggers:';
545 MsgLabSetsSizes
= 'Current:';
546 MsgLabSetsWidth
= 'Width:';
547 MsgLabSetsHeight
= 'Height:';
548 MsgLabSetsMapmove
= 'Direction to shift map objects:';
549 MsgLabSetsSnapping
= 'Preserve snapping';
551 MsgLabLaunchTime
= 'Time Limit:';
552 MsgLabLaunchSecs
= 'seconds';
553 MsgLabLaunchScore
= 'Score Limit:';
554 MsgLabLaunchPathWin
= 'Path to Doom2DF.exe:';
555 MsgLabLaunchPathMac
= 'Path to Doom 2D Forever.app:';
556 MsgLabLaunchPathUnix
= 'Path to Doom2DF:';
557 MsgLabLaunchArgs
= 'Launch Arguments:';
559 MsgLabEsGrid
= 'Grid Step:';
560 MsgLabEsGridColor
= 'Grid Color:';
561 MsgLabEsGridSize
= 'Grid Dot Size:';
562 MsgLabEsBack
= 'Background Color:';
563 MsgLabEsPreview
= 'Texture Preview Background Color:';
564 MsgLabEsMinimap
= 'Mini-map Scale:';
565 MsgLabEsRecent
= 'Recent Maps List Contains:';
566 MsgLabEsLanguage
= 'Language:';
567 MsgLabEsLanguageAuto
= 'System Default';
569 MsgCtrlEsFiles
= 'Files';
571 MsgLabPackSaveTo
= 'Save to:';
572 MsgLabPackMapName
= 'Map Resource Name:';
573 MsgLabPackTextures
= 'Texture Section:';
574 MsgLabPackSky
= 'Sky Section:';
575 MsgLabPackMusic
= 'Music Section:';
577 MsgLabMiniScale
= 'Scale:';
579 MsgBtnApplyProps
= 'Apply Properties';
581 MsgBtnCancel
= 'Cancel';
583 MsgBtnClose
= 'Close';
584 MsgBtnAddClose
= 'Add and Close';
585 MsgBtnTestAgain
= 'Check';
589 MsgBtnNoSound
= 'No sound';
590 MsgBtnTextureAdd
= 'Add texture to the list';
591 MsgBtnTextureDelete
= 'Delete texture from the list';
592 MsgBtnTextureEmpty
= 'Deselect texture';
594 MsgLoadWad
= 'Reading WAD';
595 MsgLoadMap
= 'Loading Map';
596 MsgLoadTextures
= 'Reading Textures';
597 MsgLoadPanels
= 'Reading Panels';
598 MsgLoadItems
= 'Reading Items';
599 MsgLoadMonsters
= 'Reading Monsters';
600 MsgLoadAreas
= 'Reading Areas';
601 MsgLoadTriggers
= 'Reading Triggers';
603 MsgTestAreaWall
= 'Player collides with the wall and will be stuck.';
604 MsgTestAreaWallStr
= 'Area #%d collides with Map (%d:%d)';
605 MsgTestSpawns1
= 'There are several spawn points for First Player on the map';
606 MsgTestSpawns2
= 'There are several spawn points for Second Player on the map';
607 MsgTestSpawns
= 'There are several spawn points on the map. Random one will be used.';
608 MsgTestNoDm
= 'There are no DM spawn points on the map';
609 MsgTestNoDmEx
= 'There are no DM spawn points on the map. Only "Single Player" mode available.';
610 MsgTestMonsterWall
= 'Monster collides with the wall and will be stuck.';
611 MsgTestMonsterWallStr
= 'Monster #%d collides with a map (%d:%d)';
613 MsgOptNoTextures
= 'Texture list is empty';
614 MsgOptDeletedTextures
= 'Deleted Textures:';
615 MsgOptTotalTextures
= 'Textures Total:';
616 MsgOptTexDeleted
= 'Textures Deleted:';
617 MsgOptPanelsOpt
= 'Panels Optimized:';
618 MsgOptWalls
= 'Walls Optimization...';
619 MsgOptFores
= 'Foreground Optimization...';
620 MsgOptBacks
= 'Background Optimization...';
621 MsgOptLadders
= 'Ladders Optimization...';
622 MsgOptWater
= 'Water Optimization...';
623 MsgOptAcid1
= 'Acid 1 Optimization...';
624 MsgOptAcid2
= 'Acid 2 Optimization...';
625 MsgOptLifts
= 'Streams Optimization...';
626 MsgOptBlockmon
= 'Monster Boundaries Optimization...';
627 MsgOptTotalPanels
= 'Panels Total:';
628 MsgOptPanelsAfter
= 'Panels after Optimization:';
630 MsgWadSpecialMap
= '<MAP WAD-FILE>';
631 MsgWadSpecialTexs
= '<COLORFILTERS>';
633 MsgFileFilterSaveDFWAD
= 'Doom 2D: Forever Maps in DFWAD packages (*.wad)|*.wad';
634 MsgFileFilterSaveDFZIP
= 'Doom 2D: Forever Maps in DFZIP archives (*.dfz)|*.dfz';
635 MsgFileFilterAll
= 'Doom 2D: Forever Maps (*.dfz, *.wad)|*.wad;*.dfz|Doom 2D: Forever 0.30 Maps (*.ini)|*.ini|All Files (*.*)|*.*';
636 MsgFileFilterWad
= 'Doom 2D: Forever Maps (*.dfz, *.wad)|*.wad;*.dfz|All Files (*.*)|*.*';
637 MsgFileFilterExeMac
= 'Doom 2D Forever.app|*.app|Doom 2D Forever (Unix Executable)|Doom2DF;*';
638 MsgFileFilterExeWin
= 'Doom2DF.exe|Doom2DF.exe;*.exe';
639 MsgFileFilterExeUnix
= 'Doom2DF|Doom2DF;*';
641 MsgEditorTitle
= 'Doom 2D: Forever Map Editor';
644 BoolNames
: Array [False..True] of String;
645 DirNames
: Array [D_LEFT
..D_RIGHT
] of String;
646 DirNamesAdv
: Array [0..3] of String;
647 DirButtonNames
: Array [1..4] of String;
648 PANELNAMES
: Array[0..13] of String;
649 EffectNames
: Array [EFFECT_NONE
..EFFECT_FIRE
] of String;
650 ItemNames
: Array [ITEM_MEDKIT_SMALL
..ITEM_MAX
] of String;
651 ShotNames
: Array [TRIGGER_SHOT_PISTOL
..TRIGGER_SHOT_MAX
] of String;
652 MonsterNames
: Array [MONSTER_DEMON
..MONSTER_MAN
] of String;
653 AreaNames
: Array [AREA_PLAYERPOINT1
..AREA_BLUETEAMPOINT
] of String;
654 TriggerNames
: Array [TRIGGER_EXIT
..TRIGGER_MAX
] of String;
656 function g_Language_GetList (): TStringList
;
657 procedure g_Language_Set(lang
: String);
662 g_options
, IniFiles
, gettext
, LazFileUtils
,
663 SysUtils
, e_log
, f_main
, f_about
, f_activationtype
,
664 f_addresource_sky
, f_addresource_sound
,
665 f_addresource_texture
, f_choosetype
, f_keys
, f_mapcheck
,
666 f_mapoptions
, f_mapoptimization
, f_options
,
667 f_packmap
, f_savemap
, f_saveminimap
, f_selectmap
, Forms
, utils
;
670 InSourceLanguage
= 'en_US';
672 procedure SetupArrays();
678 BoolNames
[False] := MsgArrayBoolFalse
;
679 BoolNames
[True] := MsgArrayBoolTrue
;
682 DirNames
[D_LEFT
] := MsgArrayDirLeft
;
683 DirNames
[D_RIGHT
] := MsgArrayDirRight
;
685 // Смены направления:
686 DirNamesAdv
[0] := MsgArrayDirSame
;
687 DirNamesAdv
[1] := MsgArrayDirLeft
;
688 DirNamesAdv
[2] := MsgArrayDirRight
;
689 DirNamesAdv
[3] := MsgArrayDirReversed
;
691 // Направление (на кнопках):
692 DirButtonNames
[1] := MsgArrayDirbtnLeft
;
693 DirButtonNames
[2] := MsgArrayDirbtnRight
;
694 DirButtonNames
[3] := MsgArrayDirbtnUp
;
695 DirButtonNames
[4] := MsgArrayDirbtnDown
;
698 PANELNAMES
[0] := MsgArrayPanelWall
;
699 PANELNAMES
[1] := MsgArrayPanelBack
;
700 PANELNAMES
[2] := MsgArrayPanelFront
;
701 PANELNAMES
[3] := MsgArrayPanelDoorOpen
;
702 PANELNAMES
[4] := MsgArrayPanelDoorClose
;
703 PANELNAMES
[5] := MsgArrayPanelLadder
;
704 PANELNAMES
[6] := MsgArrayPanelWater
;
705 PANELNAMES
[7] := MsgArrayPanelAcid1
;
706 PANELNAMES
[8] := MsgArrayPanelAcid2
;
707 PANELNAMES
[9] := MsgArrayPanelLiftUp
;
708 PANELNAMES
[10] := MsgArrayPanelLiftDown
;
709 PANELNAMES
[11] := MsgArrayPanelLiftLeft
;
710 PANELNAMES
[12] := MsgArrayPanelLiftRight
;
711 PANELNAMES
[13] := MsgArrayPanelBlockmon
;
713 // Названия эффектов:
714 EffectNames
[EFFECT_NONE
] := MsgArrayFxNone
;
715 EffectNames
[EFFECT_TELEPORT
] := MsgArrayFxTeleport
;
716 EffectNames
[EFFECT_RESPAWN
] := MsgArrayFxRespawn
;
717 EffectNames
[EFFECT_FIRE
] := MsgArrayFxFire
;
719 // Названия предметов:
720 ItemNames
[ITEM_MEDKIT_SMALL
] := MsgArrayItemMedkit
;
721 ItemNames
[ITEM_MEDKIT_LARGE
] := MsgArrayItemLargeMedkit
;
722 ItemNames
[ITEM_MEDKIT_BLACK
] := MsgArrayItemBlackMedkit
;
723 ItemNames
[ITEM_ARMOR_GREEN
] := MsgArrayItemGreenArmor
;
724 ItemNames
[ITEM_ARMOR_BLUE
] := MsgArrayItemBlueArmor
;
725 ItemNames
[ITEM_SPHERE_BLUE
] := MsgArrayItemBlueSphere
;
726 ItemNames
[ITEM_SPHERE_WHITE
] := MsgArrayItemMegasphere
;
727 ItemNames
[ITEM_SUIT
] := MsgArrayItemHazSuit
;
728 ItemNames
[ITEM_OXYGEN
] := MsgArrayItemOxygen
;
729 ItemNames
[ITEM_INVUL
] := MsgArrayItemInvulnerability
;
730 ItemNames
[ITEM_WEAPON_SAW
] := MsgArrayItemChainsaw
;
731 ItemNames
[ITEM_WEAPON_SHOTGUN1
] := MsgArrayItemShotgun
;
732 ItemNames
[ITEM_WEAPON_SHOTGUN2
] := MsgArrayItemDbShotgun
;
733 ItemNames
[ITEM_WEAPON_CHAINGUN
] := MsgArrayItemChaingun
;
734 ItemNames
[ITEM_WEAPON_ROCKETLAUNCHER
] := MsgArrayItemRocketLauncher
;
735 ItemNames
[ITEM_WEAPON_PLASMA
] := MsgArrayItemPlasmaRifle
;
736 ItemNames
[ITEM_WEAPON_BFG
] := MsgArrayItemBfg
;
737 ItemNames
[ITEM_WEAPON_SUPERCHAINGUN
] := MsgArrayItemSuperChaingun
;
738 ItemNames
[ITEM_WEAPON_FLAMETHROWER
] := MsgArrayItemFlamethrower
;
739 ItemNames
[ITEM_AMMO_BULLETS
] := MsgArrayItemClip
;
740 ItemNames
[ITEM_AMMO_BULLETS_BOX
] := MsgArrayItemAmmoBox
;
741 ItemNames
[ITEM_AMMO_SHELLS
] := MsgArrayItem4Shells
;
742 ItemNames
[ITEM_AMMO_SHELLS_BOX
] := MsgArrayItem25Shells
;
743 ItemNames
[ITEM_AMMO_ROCKET
] := MsgArrayItem1Rocket
;
744 ItemNames
[ITEM_AMMO_ROCKET_BOX
] := MsgArrayItemRocketBox
;
745 ItemNames
[ITEM_AMMO_CELL
] := MsgArrayItemCell
;
746 ItemNames
[ITEM_AMMO_CELL_BIG
] := MsgArrayItemLargeCell
;
747 ItemNames
[ITEM_AMMO_FUELCAN
] := MsgArrayItemFuelcan
;
748 ItemNames
[ITEM_AMMO_BACKPACK
] := MsgArrayItemBackpack
;
749 ItemNames
[ITEM_KEY_RED
] := MsgArrayItemKeyRed
;
750 ItemNames
[ITEM_KEY_GREEN
] := MsgArrayItemKeyGreen
;
751 ItemNames
[ITEM_KEY_BLUE
] := MsgArrayItemKeyBlue
;
752 ItemNames
[ITEM_WEAPON_IRONFIST
] := '?';
753 ItemNames
[ITEM_WEAPON_PISTOL
] := '??';
754 ItemNames
[ITEM_BOTTLE
] := MsgArrayItemBottle
;
755 ItemNames
[ITEM_HELMET
] := MsgArrayItemHelmet
;
756 ItemNames
[ITEM_JETPACK
] := MsgArrayItemJetpack
;
757 ItemNames
[ITEM_INVIS
] := MsgArrayItemInvis
;
759 // Названия снарядов:
760 ShotNames
[TRIGGER_SHOT_PISTOL
] := MsgArrayShotPistol
;
761 ShotNames
[TRIGGER_SHOT_BULLET
] := MsgArrayShotBullet
;
762 ShotNames
[TRIGGER_SHOT_SHOTGUN
] := MsgArrayShotShotgun
;
763 ShotNames
[TRIGGER_SHOT_SSG
] := MsgArrayShotSsg
;
764 ShotNames
[TRIGGER_SHOT_IMP
] := MsgArrayShotImp
;
765 ShotNames
[TRIGGER_SHOT_PLASMA
] := MsgArrayShotPlasma
;
766 ShotNames
[TRIGGER_SHOT_SPIDER
] := MsgArrayShotSpider
;
767 ShotNames
[TRIGGER_SHOT_CACO
] := MsgArrayShotCaco
;
768 ShotNames
[TRIGGER_SHOT_BARON
] := MsgArrayShotBaron
;
769 ShotNames
[TRIGGER_SHOT_MANCUB
] := MsgArrayShotMancub
;
770 ShotNames
[TRIGGER_SHOT_REV
] := MsgArrayShotRev
;
771 ShotNames
[TRIGGER_SHOT_ROCKET
] := MsgArrayShotRocket
;
772 ShotNames
[TRIGGER_SHOT_BFG
] := MsgArrayShotBfg
;
773 ShotNames
[TRIGGER_SHOT_EXPL
] := MsgArrayShotExpl
;
774 ShotNames
[TRIGGER_SHOT_BFGEXPL
] := MsgArrayShotBfgexpl
;
775 ShotNames
[TRIGGER_SHOT_FLAME
] := MsgArrayShotFlame
;
777 // Названия монстров:
778 MonsterNames
[MONSTER_DEMON
] := MsgArrayMonDemon
;
779 MonsterNames
[MONSTER_IMP
] := MsgArrayMonImp
;
780 MonsterNames
[MONSTER_ZOMBY
] := MsgArrayMonZombie
;
781 MonsterNames
[MONSTER_SERG
] := MsgArrayMonSergeant
;
782 MonsterNames
[MONSTER_CYBER
] := MsgArrayMonCyber
;
783 MonsterNames
[MONSTER_CGUN
] := MsgArrayMonCgun
;
784 MonsterNames
[MONSTER_BARON
] := MsgArrayMonHellBaron
;
785 MonsterNames
[MONSTER_KNIGHT
] := MsgArrayMonHellKnight
;
786 MonsterNames
[MONSTER_CACO
] := MsgArrayMonCacodemon
;
787 MonsterNames
[MONSTER_SOUL
] := MsgArrayMonLostSoul
;
788 MonsterNames
[MONSTER_PAIN
] := MsgArrayMonPainElemental
;
789 MonsterNames
[MONSTER_SPIDER
] := MsgArrayMonMastermind
;
790 MonsterNames
[MONSTER_BSP
] := MsgArrayMonArachnatron
;
791 MonsterNames
[MONSTER_MANCUB
] := MsgArrayMonMancubus
;
792 MonsterNames
[MONSTER_SKEL
] := MsgArrayMonRevenant
;
793 MonsterNames
[MONSTER_VILE
] := MsgArrayMonArchvile
;
794 MonsterNames
[MONSTER_FISH
] := MsgArrayMonFish
;
795 MonsterNames
[MONSTER_BARREL
] := MsgArrayMonBarrel
;
796 MonsterNames
[MONSTER_ROBO
] := MsgArrayMonRobot
;
797 MonsterNames
[MONSTER_MAN
] := MsgArrayMonPrikolist
;
799 // Названия областей:
800 AreaNames
[AREA_PLAYERPOINT1
] := MsgArrayAreaPlayerOne
;
801 AreaNames
[AREA_PLAYERPOINT2
] := MsgArrayAreaPlayerTwo
;
802 AreaNames
[AREA_DMPOINT
] := MsgArrayAreaDm
;
803 AreaNames
[AREA_REDFLAG
] := MsgArrayAreaFlagRed
;
804 AreaNames
[AREA_BLUEFLAG
] := MsgArrayAreaFlagBlue
;
805 AreaNames
[AREA_DOMFLAG
] := MsgArrayAreaFlagDom
;
806 AreaNames
[AREA_REDTEAMPOINT
] := MsgArrayAreaTeamRed
;
807 AreaNames
[AREA_BLUETEAMPOINT
] := MsgArrayAreaTeamBlue
;
809 // Названия триггеров:
810 TriggerNames
[TRIGGER_EXIT
] := MsgArrayTrExit
;
811 TriggerNames
[TRIGGER_TELEPORT
] := MsgArrayTrTeleport
;
812 TriggerNames
[TRIGGER_OPENDOOR
] := MsgArrayTrDoorOpen
;
813 TriggerNames
[TRIGGER_CLOSEDOOR
] := MsgArrayTrDoorClose
;
814 TriggerNames
[TRIGGER_DOOR
] := MsgArrayTrDoorSwitch
;
815 TriggerNames
[TRIGGER_DOOR5
] := MsgArrayTrDoor5Sec
;
816 TriggerNames
[TRIGGER_CLOSETRAP
] := MsgArrayTrTrapClose
;
817 TriggerNames
[TRIGGER_TRAP
] := MsgArrayTrTrap
;
818 TriggerNames
[TRIGGER_PRESS
] := MsgArrayTrExtend
;
819 TriggerNames
[TRIGGER_SECRET
] := MsgArrayTrSecret
;
820 TriggerNames
[TRIGGER_LIFTUP
] := MsgArrayTrLiftUp
;
821 TriggerNames
[TRIGGER_LIFTDOWN
] := MsgArrayTrLiftDown
;
822 TriggerNames
[TRIGGER_LIFT
] := MsgArrayTrLiftSwitch
;
823 TriggerNames
[TRIGGER_TEXTURE
] := MsgArrayTrTexture
;
824 TriggerNames
[TRIGGER_ON
] := MsgArrayTrOn
;
825 TriggerNames
[TRIGGER_OFF
] := MsgArrayTrOff
;
826 TriggerNames
[TRIGGER_ONOFF
] := MsgArrayTrSwitch
;
827 TriggerNames
[TRIGGER_SOUND
] := MsgArrayTrSound
;
828 TriggerNames
[TRIGGER_SPAWNMONSTER
] := MsgArrayTrSpawnMonster
;
829 TriggerNames
[TRIGGER_SPAWNITEM
] := MsgArrayTrSpawnItem
;
830 TriggerNames
[TRIGGER_MUSIC
] := MsgArrayTrMusic
;
831 TriggerNames
[TRIGGER_PUSH
] := MsgArrayTrPush
;
832 TriggerNames
[TRIGGER_SCORE
] := MsgArrayTrScore
;
833 TriggerNames
[TRIGGER_MESSAGE
] := MsgArrayTrMessage
;
834 TriggerNames
[TRIGGER_DAMAGE
] := MsgArrayTrDamage
;
835 TriggerNames
[TRIGGER_HEALTH
] := MsgArrayTrHealth
;
836 TriggerNames
[TRIGGER_SHOT
] := MsgArrayTrShot
;
837 TriggerNames
[TRIGGER_EFFECT
] := MsgArrayTrEffect
;
839 // Установка значений в панели выбора объектов:
842 lbPanelType
.Items
.Clear();
843 for i
:= 0 to High(PANELNAMES
) do
844 lbPanelType
.Items
.Add(PANELNAMES
[i
]);
845 lbPanelType
.ItemIndex
:= 0;
848 for i
:= ITEM_MEDKIT_SMALL
to ITEM_KEY_BLUE
do
849 lbItemList
.Items
.Add(ItemNames
[i
]);
850 lbItemList
.Items
.Add(ItemNames
[ITEM_BOTTLE
]);
851 lbItemList
.Items
.Add(ItemNames
[ITEM_HELMET
]);
852 lbItemList
.Items
.Add(ItemNames
[ITEM_JETPACK
]);
853 lbItemList
.Items
.Add(ItemNames
[ITEM_INVIS
]);
854 lbItemList
.Items
.Add(ItemNames
[ITEM_WEAPON_FLAMETHROWER
]);
855 lbItemList
.Items
.Add(ItemNames
[ITEM_AMMO_FUELCAN
]);
857 lbMonsterList
.Clear();
858 for i
:= MONSTER_DEMON
to MONSTER_MAN
do
859 lbMonsterList
.Items
.Add(MonsterNames
[i
]);
862 for i
:= AREA_PLAYERPOINT1
to AREA_BLUETEAMPOINT
do
863 lbAreasList
.Items
.Add(AreaNames
[i
]);
865 lbTriggersList
.Clear();
866 for i
:= Low(TriggerNames
) to High(TriggerNames
) do
867 lbTriggersList
.Items
.Add(TriggerNames
[i
]);
869 clbActivationType
.Clear();
870 clbActivationType
.Items
.Add(MsgCtrlActPlayerClose
);
871 clbActivationType
.Items
.Add(MsgCtrlActMonsterClose
);
872 clbActivationType
.Items
.Add(MsgCtrlActPlayerPress
);
873 clbActivationType
.Items
.Add(MsgCtrlActMonsterPress
);
874 clbActivationType
.Items
.Add(MsgCtrlActShot
);
875 clbActivationType
.Items
.Add(MsgCtrlActNoMonster
);
878 clbKeys
.Items
.Add(MsgCtrlKeysRed
);
879 clbKeys
.Items
.Add(MsgCtrlKeysGreen
);
880 clbKeys
.Items
.Add(MsgCtrlKeysBlue
);
881 clbKeys
.Items
.Add(MsgCtrlKeysTeamRed
);
882 clbKeys
.Items
.Add(MsgCtrlKeysTeamBlue
);
886 procedure SetupCaptions();
887 var i
: Integer; s
: AnsiString
;
893 s
:= g_GetBuildHash(false);
894 if s
= 'custom build' then
895 s
:= s
+ ' by ' + g_GetBuilderName() + ' ' + EDITOR_BUILDDATE
+ ' ' + EDITOR_BUILDTIME
;
896 FormCaption
:= MsgEditorTitle
+ ' (' + s
+ ')';
897 i
:= Pos('-', Caption
);
900 Caption
:= FormCaption
+ ' ' + Copy(Caption
, i
, Length(Caption
)-i
+1);
903 Caption
:= FormCaption
;
906 miAppleAbout
.Caption
:= MsgMenuAppleAbout
;
907 miApplePref
.Caption
:= MsgMenuApplePref
;
909 miMenuFile
.Caption
:= MsgMenuFile
;
910 miNewMap
.Caption
:= MsgMenuFileNew
;
911 miOpenMap
.Caption
:= MsgMenuFileOpen
;
912 miMacRecentSubMenu
.Caption
:= MsgMenuFileRecentMac
;
913 miMacRecentClear
.Caption
:= MsgMenuFileRecentClearMac
;
914 miSaveMap
.Caption
:= MsgMenuFileSave
;
915 miSaveMapAs
.Caption
:= MsgMenuFileSaveAs
;
916 miOpenWadMap
.Caption
:= MsgMenuFileOpenWad
;
917 miReopenMap
.Caption
:= MsgMenuFileReopen
;
918 miSaveMiniMap
.Caption
:= MsgMenuFileSaveMini
;
919 miDeleteMap
.Caption
:= MsgMenuFileDelete
;
920 miPackMap
.Caption
:= MsgMenuFilePackMap
;
921 miWinRecent
.Caption
:= MsgMenuFileRecentWin
;
922 miExit
.Caption
:= MsgMenuFileExitWin
;
924 miMenuEdit
.Caption
:= MsgMenuEdit
;
925 miUndo
.Caption
:= MsgMenuEditUndo
;
926 miCopy
.Caption
:= MsgMenuEditCopy
;
927 miCut
.Caption
:= MsgMenuEditCut
;
928 miPaste
.Caption
:= MsgMenuEditPaste
;
929 miSelectAll
.Caption
:= MsgMenuEditSelectAll
;
930 miSnapToGrid
.Caption
:= MsgMenuEditSnapGrid
;
931 miSwitchGrid
.Caption
:= MsgMenuEditGridStep
;
932 miToFore
.Caption
:= MsgMenuEditToFore
;
933 miToBack
.Caption
:= MsgMenuEditToBack
;
934 miMapOptions
.Caption
:= MsgMenuEditMapProps
;
935 miOptions
.Caption
:= MsgMenuEditPrefWin
;
937 miMenuView
.Caption
:= MsgMenuView
;
938 miLayers
.Caption
:= MsgMenuViewLayers
;
939 miLayerBackground
.Caption
:= MsgMenuLayerBack
;
940 miLayerForeground
.Caption
:= MsgMenuLayerFore
;
941 miLayerWalls
.Caption
:= MsgMenuLayerWalls
;
942 miLayerDoors
.Caption
:= MsgMenuLayerDoors
;
943 miLayerLadders
.Caption
:= MsgMenuLayerLadders
;
944 miLayerLiquids
.Caption
:= MsgMenuLayerLiquids
;
945 miLayerStreams
.Caption
:= MsgMenuLayerStreams
;
946 miLayerZones
.Caption
:= MsgMenuLayerZones
;
947 miLayerMonsters
.Caption
:= MsgMenuLayerMonsters
;
948 miLayerAreas
.Caption
:= MsgMenuLayerAreas
;
949 miLayerItems
.Caption
:= MsgMenuLayerItems
;
950 miLayerTriggers
.Caption
:= MsgMenuLayerTriggers
;
951 miMiniMap
.Caption
:= MsgMenuViewMinimap
;
952 miShowEdges
.Caption
:= MsgMenuViewBounds
;
953 miMapPreview
.Caption
:= MsgMenuViewPreview
;
955 miMenuService
.Caption
:= MsgMenuServ
;
956 miCheckMap
.Caption
:= MsgMenuServTest
;
957 miOptimmization
.Caption
:= MsgMenuServOpt
;
958 miTestMap
.Caption
:= MsgMenuServLaunch
;
960 miMenuWindow
.Caption
:= MsgMenuWindow
;
961 miMacMinimize
.Caption
:= MsgMenuWindowMinimize
;
962 miMacZoom
.Caption
:= MsgMenuWindowZoom
;
964 miMenuHelp
.Caption
:= MsgMenuHelp
;
965 miAbout
.Caption
:= MsgMenuHelpAboutWin
;
968 tbNewMap
.Hint
:= MsgMenuTbNew
;
969 tbOpenMap
.Hint
:= MsgMenuTbOpen
;
970 tbSaveMap
.Hint
:= MsgMenuTbSave
;
971 tbOpenWadMap
.Hint
:= MsgMenuTbOpenWad
;
972 tbShowMap
.Hint
:= MsgMenuTbMinimap
;
973 tbShow
.Hint
:= MsgMenuTbLayers
;
974 tbGridOn
.Hint
:= MsgMenuTbGrid
;
975 tbGrid
.Hint
:= MsgMenuTbGridStep
;
976 tbTestMap
.Hint
:= MsgMenuTbLaunch
;
978 // Object property editor:
979 bApplyProperty
.Caption
:= MsgBtnApplyProps
;
980 vleObjectProperty
.TitleCaptions
[0] := MsgCtrlPropKey
;
981 vleObjectProperty
.TitleCaptions
[1] := MsgCtrlPropValue
;
984 tsPanels
.Caption
:= MsgCtrlPanels
;
985 lbPanelType
.Hint
:= MsgPropPanelType
;
986 lbTextureList
.Hint
:= MsgCtrlListTexture
;
987 LabelTxW
.Caption
:= MsgLabTexWidth
;
988 LabelTxH
.Caption
:= MsgLabTexHeight
;
989 cbPreview
.Caption
:= MsgCtrlPreview
;
990 bbAddTexture
.Hint
:= MsgBtnTextureAdd
;
991 bbRemoveTexture
.Hint
:= MsgBtnTextureDelete
;
992 bClearTexture
.Hint
:= MsgBtnTextureEmpty
;
995 tsItems
.Caption
:= MsgCtrlItems
;
996 lbItemList
.Hint
:= MsgCtrlListItem
;
997 cbOnlyDM
.Caption
:= MsgCtrlItemDm
;
998 cbFall
.Caption
:= MsgCtrlItemFalls
;
1001 tsMonsters
.Caption
:= MsgCtrlMonsters
;
1002 lbMonsterList
.Hint
:= MsgCtrlListMonster
;
1003 rbMonsterLeft
.Caption
:= MsgCtrlLeft
;
1004 rbMonsterRight
.Caption
:= MsgCtrlRight
;
1007 tsAreas
.Caption
:= MsgCtrlAreas
;
1008 lbAreasList
.Hint
:= MsgCtrlListArea
;
1009 rbAreaLeft
.Caption
:= MsgCtrlLeft
;
1010 rbAreaRight
.Caption
:= MsgCtrlRight
;
1013 tsTriggers
.Caption
:= MsgCtrlTriggers
;
1014 lbTriggersList
.Hint
:= MsgCtrlListTrigger
;
1015 clbActivationType
.Hint
:= MsgCtrlListActive
;
1016 clbKeys
.Hint
:= MsgCtrlListKeys
;
1019 // Форма "О программе":
1022 Caption
:= MsgCapAbout
;
1023 LabelTitle
.Caption
:= MsgEditorTitle
;
1024 LabelVer
.Caption
:= MsgLabAboutVer
;
1025 LabelAuthor
.Caption
:= MsgLabAboutAuthor
;
1026 LabelAuthor2
.Caption
:= MsgLabAboutAuthor2
;
1027 LabelMail
.Caption
:= MsgLabAboutMail
;
1028 LabelMail2
.Caption
:= MsgLabAboutMail2
;
1029 LabelSite
.Caption
:= MsgLabAboutSite
;
1030 LabelHttp
.Caption
:= MsgLabAboutHttp
;
1033 // Форма "Тип активации":
1034 with ActivationTypeForm
do
1036 Caption
:= MsgCapAct
;
1037 cbPlayerCollide
.Caption
:= MsgCtrlActPlayerClose
;
1038 cbMonsterCollide
.Caption
:= MsgCtrlActMonsterClose
;
1039 cbPlayerPress
.Caption
:= MsgCtrlActPlayerPress
;
1040 cbMonsterPress
.Caption
:= MsgCtrlActMonsterPress
;
1041 cbShot
.Caption
:= MsgCtrlActShot
;
1042 cbNoMonster
.Caption
:= MsgCtrlActNoMonster
;
1043 bOK
.Caption
:= MsgBtnOk
;
1046 // Форма "Выбор текстуры для неба":
1049 Caption
:= MsgCapAddSky
;
1050 LabelWADs
.Caption
:= MsgLabAddWads
;
1051 LabelSections
.Caption
:= MsgLabAddSections
;
1052 bOK
.Caption
:= MsgBtnOk
;
1053 bCancel
.Caption
:= MsgBtnCancel
;
1056 // Форма "Выбор звука или музыки":
1057 with AddSoundForm
do
1059 Caption
:= MsgCapAddSound
;
1060 LabelWADs
.Caption
:= MsgLabAddWads
;
1061 LabelSections
.Caption
:= MsgLabAddSections
;
1062 bOK
.Caption
:= MsgBtnOk
;
1063 bCancel
.Caption
:= MsgBtnCancel
;
1064 bEmpty
.Caption
:= MsgBtnNoSound
;
1067 // Форма "Выбор текстуры":
1068 with AddTextureForm
do
1070 Caption
:= MsgCapAddTexture
;
1071 LabelWADs
.Caption
:= MsgLabAddWads
;
1072 LabelSections
.Caption
:= MsgLabAddSections
;
1073 bAddTexture
.Caption
:= MsgBtnAdd
;
1074 bClose
.Caption
:= MsgBtnClose
;
1075 bAddClose
.Caption
:= MsgBtnAddClose
;
1078 // Форма "Выбор типа монстра" / "Выбор типа предмета":
1079 ChooseTypeForm
.bOK
.Caption
:= MsgBtnOk
;
1084 Caption
:= MsgCapKeys
;
1085 cbRedKey
.Caption
:= MsgCtrlKeysRed
;
1086 cbGreenKey
.Caption
:= MsgCtrlKeysGreen
;
1087 cbBlueKey
.Caption
:= MsgCtrlKeysBlue
;
1088 cbRedTeam
.Caption
:= MsgCtrlKeysTeamRed
;
1089 cbBlueTeam
.Caption
:= MsgCtrlKeysTeamBlue
;
1090 bOK
.Caption
:= MsgBtnOk
;
1093 // Форма "Проверка карты":
1094 with MapCheckForm
do
1096 Caption
:= MsgCapTest
;
1097 bCheckMap
.Caption
:= MsgBtnTestAgain
;
1098 bClose
.Caption
:= MsgBtnClose
;
1101 // Форма "Оптимизация карты":
1102 with MapOptimizationForm
do
1104 Caption
:= MsgCapOpt
;
1105 // Выбор оптимизации:
1106 GroupBoxOpt
.Caption
:= MsgCtrlOptGb
;
1107 rbTexturesOptimization
.Caption
:= MsgCtrlOptTexture
;
1108 rbPanelsOptimization
.Caption
:= MsgCtrlOptPanel
;
1109 // Оптимизация текстур:
1110 bBeginTextureOptimization
.Caption
:= MsgBtnStart
;
1111 // Оптимизация панелей:
1112 cbOptimizeWalls
.Caption
:= MsgCtrlOptWall
;
1113 cbOptimizeForeground
.Caption
:= MsgCtrlOptFore
;
1114 cbOptimizeBackground
.Caption
:= MsgCtrlOptBack
;
1115 cbOptimizeLadders
.Caption
:= MsgCtrlOptLadder
;
1116 cbOptimizeWater
.Caption
:= MsgCtrlOptWater
;
1117 cbOptimizeAcid1
.Caption
:= MsgCtrlOptAcid1
;
1118 cbOptimizeAcid2
.Caption
:= MsgCtrlOptAcid2
;
1119 cbOptimizeLift
.Caption
:= MsgCtrlOptLift
;
1120 cbOptimizeBlockMon
.Caption
:= MsgCtrlOptBlockmon
;
1121 bBeginPanelsOptimization
.Caption
:= MsgBtnStart
;
1124 // Форма "Параметры карты":
1125 with MapOptionsForm
do
1127 Caption
:= MsgCapSets
;
1128 // Основные параметры:
1129 LabelName
.Caption
:= MsgLabSetsName
;
1130 LabelDesc
.Caption
:= MsgLabSetsDesc
;
1131 LabelAuthor
.Caption
:= MsgLabSetsAuthor
;
1132 LabelBack
.Caption
:= MsgLabSetsBack
;
1133 LabelMusic
.Caption
:= MsgLabSetsMusic
;
1135 GBStats
.Caption
:= MsgCtrlSetsStats
;
1136 LabelTexs
.Caption
:= MsgLabSetsTextures
;
1137 LabelPanels
.Caption
:= MsgLabSetsPanels
;
1138 LabelItems
.Caption
:= MsgLabSetsItems
;
1139 LabelMonsters
.Caption
:= MsgLabSetsMonsters
;
1140 LabelAreas
.Caption
:= MsgLabSetsAreas
;
1141 LabelTriggers
.Caption
:= MsgLabSetsTriggers
;
1143 GBSizes
.Caption
:= MsgCtrlSetsSizes
;
1144 LabelWidth
.Caption
:= MsgLabSetsWidth
;
1145 LabelHeight
.Caption
:= MsgLabSetsHeight
;
1146 LabelCurSize
.Caption
:= MsgLabSetsSizes
;
1147 LabelMapMove
.Caption
:= MsgLabSetsMapmove
;
1148 cbSnapping
.Caption
:= MsgLabSetsSnapping
;
1150 bOK
.Caption
:= MsgBtnOk
;
1151 bCancel
.Caption
:= MsgBtnCancel
;
1154 // Form preferences:
1157 Caption
:= MsgCapEs
;
1158 bOK
.Caption
:= MsgBtnOk
;
1159 bCancel
.Caption
:= MsgBtnCancel
;
1161 TabGeneral
.Caption
:= MsgCtrlEsGeneral
;
1162 cbShowDots
.Caption
:= MsgCtrlEsGrid
;
1163 cbShowTexture
.Caption
:= MsgCtrlEsTexture
;
1164 cbShowSize
.Caption
:= MsgCtrlEsPanelSize
;
1165 cbCheckerboard
.Caption
:= MsgCtrlEsCheckerboard
;
1166 LabelGrid
.Caption
:= MsgLabEsGrid
;
1167 LabelGridCol
.Caption
:= MsgLabEsGridColor
;
1168 LabelGridSize
.Caption
:= MsgLabEsGridSize
;
1169 LabelBack
.Caption
:= MsgLabEsBack
;
1170 LabelPreview
.Caption
:= MsgLabEsPreview
;
1171 LabelMinimap
.Caption
:= MsgLabEsMinimap
;
1172 LabelLanguage
.Caption
:= MsgLabEsLanguage
;
1174 TabFiles
.Caption
:= MsgCtrlEsFiles
;
1175 LabelRecent
.Caption
:= MsgLabEsRecent
;
1177 TabTesting
.Caption
:= MsgCtrlEsTesting
;
1178 rbDM
.Caption
:= MsgCtrlLaunchDm
;
1179 rbTDM
.Caption
:= MsgCtrlLaunchTdm
;
1180 rbCTF
.Caption
:= MsgCtrlLaunchCtf
;
1181 rbCOOP
.Caption
:= MsgCtrlLaunchCoop
;
1182 cbTwoPlayers
.Caption
:= MsgCtrlLaunch2p
;
1183 cbTeamDamage
.Caption
:= MsgCtrlLaunchFf
;
1184 cbAllowExit
.Caption
:= MsgCtrlLaunchExit
;
1185 cbWeaponStay
.Caption
:= MsgCtrlLaunchWeapons
;
1186 cbMonstersDM
.Caption
:= MsgCtrlLaunchMonsters
;
1187 cbMapOnce
.Caption
:= MsgCtrlLaunchClose
;
1188 LabelTime
.Caption
:= MsgLabLaunchTime
;
1189 LabelSecs
.Caption
:= MsgLabLaunchSecs
;
1190 LabelScore
.Caption
:= MsgLabLaunchScore
;
1191 {$IF DEFINED(DARWIN)}
1192 LabelPath
.Caption
:= MsgLabLaunchPathMac
;
1193 ExeEdit
.DialogTitle
:= MsgCtrlLaunchOpen
;
1194 ExeEdit
.Filter
:= MsgFileFilterExeMac
;
1195 {$ELSEIF DEFINED(WINDOWS)}
1196 LabelPath
.Caption
:= MsgLabLaunchPathWin
;
1197 ExeEdit
.DialogTitle
:= MsgCtrlLaunchOpen
;
1198 ExeEdit
.Filter
:= MsgFileFilterExeWin
;
1200 LabelPath
.Caption
:= MsgLabLaunchPathUnix
;
1201 ExeEdit
.DialogTitle
:= MsgCtrlLaunchOpen
;
1202 ExeEdit
.Filter
:= MsgFileFilterExeUnix
;
1204 LabelArgs
.Caption
:= MsgLabLaunchArgs
;
1207 // Форма "Упаковать карту":
1210 Caption
:= MsgCapPack
;
1211 bPack
.Caption
:= MsgBtnPack
;
1212 LabelSaveTo
.Caption
:= MsgLabPackSaveTo
;
1213 LabelMapName
.Caption
:= MsgLabPackMapName
;
1215 cbTextrures
.Caption
:= MsgCtrlPackTextures
;
1216 LabelTextures
.Caption
:= MsgLabPackTextures
;
1217 cbSky
.Caption
:= MsgCtrlPackSky
;
1218 LabelSky
.Caption
:= MsgLabPackSky
;
1219 cbMusic
.Caption
:= MsgCtrlPackMusic
;
1220 LabelMusic
.Caption
:= MsgLabPackMusic
;
1221 cbAdd
.Caption
:= MsgCtrlPackAdd
;
1222 cbNonStandart
.Caption
:= MsgCtrlPackNonStd
;
1225 // Форма "Сохранить карту":
1228 Caption
:= MsgCapSave
;
1229 bOK
.Caption
:= MsgBtnOk
;
1230 bCancel
.Caption
:= MsgBtnCancel
;
1233 // Форма "Сохранить мини-карту":
1234 with SaveMiniMapForm
do
1236 Caption
:= MsgCapMini
;
1237 LabelScale
.Caption
:= MsgLabMiniScale
;
1238 bSave
.Caption
:= MsgBtnSave
;
1239 bClose
.Caption
:= MsgBtnClose
;
1242 // Форма "Выбор карты":
1243 with SelectMapForm
do
1245 Caption
:= MsgCapSelect
;
1246 bOK
.Caption
:= MsgBtnOk
;
1247 bCancel
.Caption
:= MsgBtnCancel
;
1250 // Заголовок приложения:
1251 Application
.Title
:= MsgEditorTitle
;
1257 ignored
: TStringList
;
1261 function gResourceIterator (name
, value
: AnsiString
; hash
: LongInt; arg
: Pointer): AnsiString
;
1262 var res
: PResArg
; orig
: AnsiString
;
1264 res
:= PResArg(arg
);
1265 orig
:= res
.ini
.ReadString('resourcestring', name
+ '$', '');
1266 if (orig
= '') or (orig
= value
) then
1268 if res
.ini
.ValueExists('resourcestring', name
) then
1270 result
:= res
.ini
.ReadString('resourcestring', name
, '');
1275 if res
.ignored
.IndexOf(Copy(name
, 1, Pos('.', name
) - 1)) < 0 then
1276 e_WriteLog(' Seems that key ' + name
+ ' not translated', MSG_NOTIFY
);
1281 e_WriteLog(' Original resource string for ' + name
+ ' do not match, translation are outdated?', MSG_WARNING
);
1282 e_WriteLog(' [' + value
+ '] -> [' + orig
+ ']', MSG_WARNING
);
1287 procedure gSetLanguageFromStream (const lang
: AnsiString
; stream
: TStream
; out ok
: Boolean);
1292 res
.ini
:= TIniFile
.Create(stream
, [ifoStripComments
, ifoStripQuotes
, ifoEscapeLineFeeds
]);
1296 if res
.ini
<> nil then
1299 ok
:= res
.ini
.SectionExists('resourcestring');
1302 res
.ignored
:= TStringList
.Create
;
1303 res
.ignored
.CaseSensitive
:= False;
1304 res
.ini
.ReadSection('ignore', res
.ignored
);
1306 SetResourceStrings(gResourceIterator
, @res
);
1307 res
.ignored
.Destroy();
1313 if not ok
then e_WriteLog('Translation file for ' + lang
+ ' are invalid ', MSG_FATALERROR
);
1316 procedure gSetLanguageFromFile (const lang
: AnsiString
; out ok
: Boolean);
1317 const langfilename
= 'editor';
1318 var stream
: TFileStream
; name
: AnsiString
;
1320 name
:= LangDir
+ DirectorySeparator
+ langfilename
+ '.' + lang
+ '.lng';
1322 stream
:= TFileStream
.Create(name
, fmOpenRead
);
1324 gSetLanguageFromStream(lang
, stream
, ok
);
1328 except on E
: EFOpenError
do
1333 procedure gSetLanguage (const lang
: AnsiString
; out ok
: Boolean);
1335 gSetLanguageFromFile(lang
, ok
);
1338 function g_Language_GetList (): TStringList
;
1339 const langfilename
= 'editor';
1340 var list
: TStringList
; info
: TSearchRec
;
1342 list
:= TStringList
.Create
;
1343 list
.Duplicates
:= dupIgnore
;
1344 list
.Add(InSourceLanguage
);
1345 if FindFirst(LangDir
+ DirectorySeparator
+ langfilename
+ '.*.lng', faReadOnly
, info
) = 0 then
1348 list
.Add(Copy(ExtractFileNameWithoutExt(info
.Name
), Length(langfilename
) + 2));
1349 until FindNext(info
) <> 0;
1356 procedure g_Language_Set(lang
: String);
1357 var syslang
, fallbacklang
: String; ok
: Boolean;
1359 ResetResourceTables
;
1363 GetLanguageIDs(syslang
, fallbacklang
); // TODO: remove dependency on gettext
1364 e_WriteLog('g_Language_Set: try strings "' + syslang
+ '" (system)', MSG_NOTIFY
);
1365 gSetLanguage(syslang
, ok
);
1368 e_WriteLog('g_Language_Set: try strings "' + fallbacklang
+ '" (fallback)', MSG_NOTIFY
);
1369 gSetLanguage(syslang
, ok
);
1374 e_WriteLog('g_Language_Set: try strings "' + lang
+ '" (user specified)', MSG_NOTIFY
);
1375 gSetLanguage(lang
, ok
);
1377 if not ok
then e_WriteLog('g_Language_Set: use default strings "' + InSourceLanguage
+ '" (in-source)', MSG_NOTIFY
);
1381 MainForm
.RemoveSelectFromObjects();