DEADSOFTWARE

i10n: use resourcestring and gettext for localization
authorDeaDDooMER <deaddoomer@deadsoftware.ru>
Fri, 26 May 2023 22:19:21 +0000 (01:19 +0300)
committerDeaDDooMER <deaddoomer@deadsoftware.ru>
Fri, 26 May 2023 22:19:21 +0000 (01:19 +0300)
20 files changed:
lang/editor.en_US.po [new file with mode: 0644]
lang/editor.ru_RU.po [new file with mode: 0644]
src/editor/Editor.lpr
src/editor/f_addresource.pas
src/editor/f_addresource_sky.pas
src/editor/f_addresource_sound.pas
src/editor/f_addresource_texture.pas
src/editor/f_main.pas
src/editor/f_mapcheck.pas
src/editor/f_mapoptimization.pas
src/editor/f_options.lfm
src/editor/f_options.pas
src/editor/f_packmap.pas
src/editor/f_savemap.pas
src/editor/f_selectlang.lfm [deleted file]
src/editor/f_selectlang.pas [deleted file]
src/editor/g_language.pas
src/editor/g_map.pas
src/editor/g_options.pas
src/editor/spectrum.pas

diff --git a/lang/editor.en_US.po b/lang/editor.en_US.po
new file mode 100644 (file)
index 0000000..0713a81
--- /dev/null
@@ -0,0 +1,2458 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: g_language:msgnotaccessible
+msgid "N/A"
+msgstr ""
+
+#: g_language:msgarrayboolfalse
+msgid "No"
+msgstr ""
+
+#: g_language:msgarraybooltrue
+msgid "Yes"
+msgstr ""
+
+#: g_language:msgarraydirleft
+msgid "Left"
+msgstr ""
+
+#: g_language:msgarraydirright
+msgid "Right"
+msgstr ""
+
+#: g_language:msgarraydirsame
+msgid "Don't change"
+msgstr ""
+
+#: g_language:msgarraydirreversed
+msgid "Reversed"
+msgstr ""
+
+#: g_language:msgarraydirbtnleft
+msgid "Left"
+msgstr ""
+
+#: g_language:msgarraydirbtnright
+msgid "Right"
+msgstr ""
+
+#: g_language:msgarraydirbtnup
+msgid "Up"
+msgstr ""
+
+#: g_language:msgarraydirbtndown
+msgid "Down"
+msgstr ""
+
+#: g_language:msgarraypanelwall
+msgid "Wall"
+msgstr ""
+
+#: g_language:msgarraypanelback
+msgid "Background"
+msgstr ""
+
+#: g_language:msgarraypanelfront
+msgid "Foreground"
+msgstr ""
+
+#: g_language:msgarraypaneldooropen
+msgid "Open Door"
+msgstr ""
+
+#: g_language:msgarraypaneldoorclose
+msgid "Closed Door"
+msgstr ""
+
+#: g_language:msgarraypanelstair
+msgid "Step"
+msgstr ""
+
+#: g_language:msgarraypanelwater
+msgid "Water"
+msgstr ""
+
+#: g_language:msgarraypanelacid1
+msgid "Acid 1"
+msgstr ""
+
+#: g_language:msgarraypanelacid2
+msgid "Acid 2"
+msgstr ""
+
+#: g_language:msgarraypanelliftup
+msgid "Stream Up"
+msgstr ""
+
+#: g_language:msgarraypanelliftdown
+msgid "Stream Down"
+msgstr ""
+
+#: g_language:msgarraypanelliftleft
+msgid "Stream Left"
+msgstr ""
+
+#: g_language:msgarraypanelliftright
+msgid "Stream Right"
+msgstr ""
+
+#: g_language:msgarraypanelblockmon
+msgid "Monster Boundary"
+msgstr ""
+
+#: g_language:msgarrayfxnone
+msgid "None"
+msgstr ""
+
+#: g_language:msgarrayfxteleport
+msgid "Teleport"
+msgstr ""
+
+#: g_language:msgarrayfxrespawn
+msgid "Respawn"
+msgstr ""
+
+#: g_language:msgarrayfxfire
+msgid "Arch-Vile Fire"
+msgstr ""
+
+#: g_language:msgarrayitemmedkit
+msgid "Stimpack"
+msgstr ""
+
+#: g_language:msgarrayitemlargemedkit
+msgid "Medikit"
+msgstr ""
+
+#: g_language:msgarrayitemblackmedkit
+msgid "Berserk Pack"
+msgstr ""
+
+#: g_language:msgarrayitemgreenarmor
+msgid "Green Armor"
+msgstr ""
+
+#: g_language:msgarrayitembluearmor
+msgid "Blue Armor"
+msgstr ""
+
+#: g_language:msgarrayitembluesphere
+msgid "Soulsphere"
+msgstr ""
+
+#: g_language:msgarrayitemmegasphere
+msgid "Megasphere"
+msgstr ""
+
+#: g_language:msgarrayitemhazsuit
+msgid "Envirosuit"
+msgstr ""
+
+#: g_language:msgarrayitemoxygen
+msgid "Scuba"
+msgstr ""
+
+#: g_language:msgarrayiteminvulnerability
+msgid "Invulnerability"
+msgstr ""
+
+#: g_language:msgarrayitemchainsaw
+msgid "Chainsaw"
+msgstr ""
+
+#: g_language:msgarrayitemshotgun
+msgid "Shotgun"
+msgstr ""
+
+#: g_language:msgarrayitemdbshotgun
+msgid "Super Shotgun"
+msgstr ""
+
+#: g_language:msgarrayitemchaingun
+msgid "Chaingun"
+msgstr ""
+
+#: g_language:msgarrayitemrocketlauncher
+msgid "Rocket Launcher"
+msgstr ""
+
+#: g_language:msgarrayitemplasmarifle
+msgid "Plasma Rifle"
+msgstr ""
+
+#: g_language:msgarrayitembfg
+msgid "BFG9000"
+msgstr ""
+
+#: g_language:msgarrayitemsuperminigun
+msgid "Super Chaingun"
+msgstr ""
+
+#: g_language:msgarrayitemflamethrower
+msgid "Flamethrower"
+msgstr ""
+
+#: g_language:msgarrayitemclip
+msgid "Clip"
+msgstr ""
+
+#: g_language:msgarrayitemammobox
+msgid "Box of Bullets"
+msgstr ""
+
+#: g_language:msgarrayitem4shells
+msgid "4 Shells"
+msgstr ""
+
+#: g_language:msgarrayitem25shells
+msgid "Box of Shells"
+msgstr ""
+
+#: g_language:msgarrayitem1rocket
+msgid "Rocket"
+msgstr ""
+
+#: g_language:msgarrayitemrocketbox
+msgid "Box of Rockets"
+msgstr ""
+
+#: g_language:msgarrayitemcell
+msgid "Energy Cell"
+msgstr ""
+
+#: g_language:msgarrayitemlargecell
+msgid "Energy Cell Pack"
+msgstr ""
+
+#: g_language:msgarrayitemfuelcan
+msgid "Fuel Canister"
+msgstr ""
+
+#: g_language:msgarrayitembackpack
+msgid "Backpack"
+msgstr ""
+
+#: g_language:msgarrayitemkeyred
+msgid "Red Key"
+msgstr ""
+
+#: g_language:msgarrayitemkeygreen
+msgid "Green Key"
+msgstr ""
+
+#: g_language:msgarrayitemkeyblue
+msgid "Blue Key"
+msgstr ""
+
+#: g_language:msgarrayitembottle
+msgid "Health Globe"
+msgstr ""
+
+#: g_language:msgarrayitemhelmet
+msgid "Armor Shard"
+msgstr ""
+
+#: g_language:msgarrayitemjetpack
+msgid "Jetpack"
+msgstr ""
+
+#: g_language:msgarrayiteminvis
+msgid "Invisibility"
+msgstr ""
+
+#: g_language:msgarrayshotpistol
+msgid "Pistol shot"
+msgstr ""
+
+#: g_language:msgarrayshotbullet
+msgid "Chaingun shot"
+msgstr ""
+
+#: g_language:msgarrayshotshotgun
+msgid "Shotgun shot"
+msgstr ""
+
+#: g_language:msgarrayshotssg
+msgid "Super Shotgun shot"
+msgstr ""
+
+#: g_language:msgarrayshotimp
+msgid "Imp fireball"
+msgstr ""
+
+#: g_language:msgarrayshotplasma
+msgid "Blue plasma"
+msgstr ""
+
+#: g_language:msgarrayshotspider
+msgid "Arachnotron plasma"
+msgstr ""
+
+#: g_language:msgarrayshotcaco
+msgid "Cacodemon fireball"
+msgstr ""
+
+#: g_language:msgarrayshotbaron
+msgid "Hell Baron projectile"
+msgstr ""
+
+#: g_language:msgarrayshotmancub
+msgid "Mancubus gunshot"
+msgstr ""
+
+#: g_language:msgarrayshotrev
+msgid "Revenant projectile"
+msgstr ""
+
+#: g_language:msgarrayshotrocket
+msgid "Rocket"
+msgstr ""
+
+#: g_language:msgarrayshotbfg
+msgid "BFG ball"
+msgstr ""
+
+#: g_language:msgarrayshotexpl
+msgid "Explosion"
+msgstr ""
+
+#: g_language:msgarrayshotbfgexpl
+msgid "BFG explosion"
+msgstr ""
+
+#: g_language:msgarrayshotflame
+msgid "Flame"
+msgstr ""
+
+#: g_language:msgarraymondemon
+msgid "Pinky"
+msgstr ""
+
+#: g_language:msgarraymonimp
+msgid "Imp"
+msgstr ""
+
+#: g_language:msgarraymonzombie
+msgid "Zombie"
+msgstr ""
+
+#: g_language:msgarraymonsergeant
+msgid "Sergeant"
+msgstr ""
+
+#: g_language:msgarraymoncyber
+msgid "Cyberdemon"
+msgstr ""
+
+#: g_language:msgarraymoncgun
+msgid "Commando"
+msgstr ""
+
+#: g_language:msgarraymonhellbaron
+msgid "Hell Baron"
+msgstr ""
+
+#: g_language:msgarraymonhellknight
+msgid "Hell Knight"
+msgstr ""
+
+#: g_language:msgarraymoncacodemon
+msgid "Cacodemon"
+msgstr ""
+
+#: g_language:msgarraymonlostsoul
+msgid "Lost Soul"
+msgstr ""
+
+#: g_language:msgarraymonpainelemental
+msgid "Pain Elemental"
+msgstr ""
+
+#: g_language:msgarraymonmastermind
+msgid "Spider Mastermind"
+msgstr ""
+
+#: g_language:msgarraymonarachnatron
+msgid "Arachnotron"
+msgstr ""
+
+#: g_language:msgarraymonmancubus
+msgid "Mancubus"
+msgstr ""
+
+#: g_language:msgarraymonrevenant
+msgid "Revenant"
+msgstr ""
+
+#: g_language:msgarraymonarchvile
+msgid "Arch-Vile"
+msgstr ""
+
+#: g_language:msgarraymonfish
+msgid "Piranha"
+msgstr ""
+
+#: g_language:msgarraymonbarrel
+msgid "Barrel"
+msgstr ""
+
+#: g_language:msgarraymonrobot
+msgid "Robot"
+msgstr ""
+
+#: g_language:msgarraymonprikolist
+msgid "Prikolist"
+msgstr ""
+
+#: g_language:msgarrayareaplayerone
+msgid "Player 1"
+msgstr ""
+
+#: g_language:msgarrayareaplayertwo
+msgid "Player 2"
+msgstr ""
+
+#: g_language:msgarrayareadm
+msgid "DM Spawn Point"
+msgstr ""
+
+#: g_language:msgarrayareaflagred
+msgid "Red Flag"
+msgstr ""
+
+#: g_language:msgarrayareaflagblue
+msgid "Blue Flag"
+msgstr ""
+
+#: g_language:msgarrayareaflagdom
+msgid "Domination Flag"
+msgstr ""
+
+#: g_language:msgarrayareateamred
+msgid "Red Team"
+msgstr ""
+
+#: g_language:msgarrayareateamblue
+msgid "Blue Team"
+msgstr ""
+
+#: g_language:msgarraytrexit
+msgid "Exit"
+msgstr ""
+
+#: g_language:msgarraytrteleport
+msgid "Teleport"
+msgstr ""
+
+#: g_language:msgarraytrdooropen
+msgid "Open Door"
+msgstr ""
+
+#: g_language:msgarraytrdoorclose
+msgid "Close Door"
+msgstr ""
+
+#: g_language:msgarraytrdoorswitch
+msgid "Door"
+msgstr ""
+
+#: g_language:msgarraytrdoor5sec
+msgid "Door (5 sec)"
+msgstr ""
+
+#: g_language:msgarraytrtrapclose
+msgid "Close Trap"
+msgstr ""
+
+#: g_language:msgarraytrtrap
+msgid "Trap"
+msgstr ""
+
+#: g_language:msgarraytrextend
+msgid "Extender"
+msgstr ""
+
+#: g_language:msgarraytrsecret
+msgid "Secret"
+msgstr ""
+
+#: g_language:msgarraytrliftup
+msgid "Turn stream up/left"
+msgstr ""
+
+#: g_language:msgarraytrliftdown
+msgid "Turn stream down/right"
+msgstr ""
+
+#: g_language:msgarraytrliftswitch
+msgid "Revert stream"
+msgstr ""
+
+#: g_language:msgarraytrtexture
+msgid "Change Texture"
+msgstr ""
+
+#: g_language:msgarraytron
+msgid "Enable Trigger"
+msgstr ""
+
+#: g_language:msgarraytroff
+msgid "Disable Trigger"
+msgstr ""
+
+#: g_language:msgarraytrswitch
+msgid "Trigger Toggle"
+msgstr ""
+
+#: g_language:msgarraytrsound
+msgid "Play Sound"
+msgstr ""
+
+#: g_language:msgarraytrspawnmonster
+msgid "Spawn Monster"
+msgstr ""
+
+#: g_language:msgarraytrspawnitem
+msgid "Spawn Item"
+msgstr ""
+
+#: g_language:msgarraytrmusic
+msgid "Play Music"
+msgstr ""
+
+#: g_language:msgarraytrpush
+msgid "Push"
+msgstr ""
+
+#: g_language:msgarraytrscore
+msgid "Team Score"
+msgstr ""
+
+#: g_language:msgarraytrmessage
+msgid "Message"
+msgstr ""
+
+#: g_language:msgarraytrdamage
+msgid "Damage"
+msgstr ""
+
+#: g_language:msgarraytrhealth
+msgid "Healer"
+msgstr ""
+
+#: g_language:msgarraytrshot
+msgid "Turret"
+msgstr ""
+
+#: g_language:msgarraytreffect
+msgid "Effect"
+msgstr ""
+
+#: g_language:msgpropid
+msgid "ID"
+msgstr ""
+
+#: g_language:msgpropx
+msgid "X"
+msgstr ""
+
+#: g_language:msgpropy
+msgid "Y"
+msgstr ""
+
+#: g_language:msgpropwidth
+msgid "Width"
+msgstr ""
+
+#: g_language:msgpropheight
+msgid "Height"
+msgstr ""
+
+#: g_language:msgproppaneltype
+msgid "Panel Type"
+msgstr ""
+
+#: g_language:msgproppaneltex
+msgid "Texture"
+msgstr ""
+
+#: g_language:msgproppanelalpha
+msgid "Transparency"
+msgstr ""
+
+#: g_language:msgproppanelblend
+msgid "Blending"
+msgstr ""
+
+#: g_language:msgpropdmonly
+msgid "DM Only"
+msgstr ""
+
+#: g_language:msgpropitemfalls
+msgid "Falls"
+msgstr ""
+
+#: g_language:msgpropdirection
+msgid "Direction"
+msgstr ""
+
+#: g_language:msgproptrtype
+msgid "Trigger Type"
+msgstr ""
+
+#: g_language:msgproptrenabled
+msgid "Enabled"
+msgstr ""
+
+#: g_language:msgproptrtexturepanel
+msgid "Textured Panel"
+msgstr ""
+
+#: g_language:msgproptractivation
+msgid "Activation Type"
+msgstr ""
+
+#: g_language:msgproptrkeys
+msgid "Keys"
+msgstr ""
+
+#: g_language:msgproptrd2d
+msgid "D2D-like"
+msgstr ""
+
+#: g_language:msgproptrsilent
+msgid "Silent"
+msgstr ""
+
+#: g_language:msgproptrcount
+msgid "Count"
+msgstr ""
+
+#: g_language:msgproptrinterval
+msgid "Interval (in ticks)"
+msgstr ""
+
+#: g_language:msgproptrhealth
+msgid "Health"
+msgstr ""
+
+#: g_language:msgproptrnextmap
+msgid "Next Map"
+msgstr ""
+
+#: g_language:msgproptrteleportto
+msgid "Teleport to"
+msgstr ""
+
+#: g_language:msgproptrteleportsilent
+msgid "Silent"
+msgstr ""
+
+#: g_language:msgproptrteleportdir
+msgid "New Direction"
+msgstr ""
+
+#: g_language:msgproptrdoorpanel
+msgid "Door Panel"
+msgstr ""
+
+#: g_language:msgproptrtrappanel
+msgid "Trap Panel"
+msgstr ""
+
+#: g_language:msgproptrexarea
+msgid "Action Area"
+msgstr ""
+
+#: g_language:msgproptrexdelay
+msgid "Delay"
+msgstr ""
+
+#: g_language:msgproptrexcount
+msgid "Count"
+msgstr ""
+
+#: g_language:msgproptrexmonster
+msgid "Monster ID"
+msgstr ""
+
+#: g_language:msgproptrexrandom
+msgid "Random"
+msgstr ""
+
+#: g_language:msgproptrliftpanel
+msgid "Stream Panel"
+msgstr ""
+
+#: g_language:msgproptrtextureonce
+msgid "Once"
+msgstr ""
+
+#: g_language:msgproptrtextureanimonce
+msgid "Animate Once"
+msgstr ""
+
+#: g_language:msgproptrsoundname
+msgid "Sound                              (snd)"
+msgstr ""
+
+#: g_language:msgproptrsoundvolume
+msgid "Volume"
+msgstr ""
+
+#: g_language:msgproptrsoundpan
+msgid "Pan"
+msgstr ""
+
+#: g_language:msgproptrsoundcount
+msgid "Loops"
+msgstr ""
+
+#: g_language:msgproptrsoundlocal
+msgid "Local"
+msgstr ""
+
+#: g_language:msgproptrsoundswitch
+msgid "Switch"
+msgstr ""
+
+#: g_language:msgproptrfxtype
+msgid "Effect"
+msgstr ""
+
+#: g_language:msgproptrspawnto
+msgid "Spawn at"
+msgstr ""
+
+#: g_language:msgproptrspawnmax
+msgid "Maximum"
+msgstr ""
+
+#: g_language:msgproptrspawndelay
+msgid "Autospawn (in ticks)"
+msgstr ""
+
+#: g_language:msgproptrmonstertype
+msgid "Monster"
+msgstr ""
+
+#: g_language:msgproptrmonsteractive
+msgid "Active"
+msgstr ""
+
+#: g_language:msgproptrmonsterbehaviour
+msgid "Behaviour"
+msgstr ""
+
+#: g_language:msgproptrmonsterbehaviour0
+msgid "Normal"
+msgstr ""
+
+#: g_language:msgproptrmonsterbehaviour1
+msgid "Killer"
+msgstr ""
+
+#: g_language:msgproptrmonsterbehaviour2
+msgid "Maniac"
+msgstr ""
+
+#: g_language:msgproptrmonsterbehaviour3
+msgid "Insane"
+msgstr ""
+
+#: g_language:msgproptrmonsterbehaviour4
+msgid "Cannibal"
+msgstr ""
+
+#: g_language:msgproptrmonsterbehaviour5
+msgid "Good"
+msgstr ""
+
+#: g_language:msgproptritemtype
+msgid "Item"
+msgstr ""
+
+#: g_language:msgproptrmusicname
+msgid "Music"
+msgstr ""
+
+#: g_language:msgproptrmusicact
+msgid "Action                             (m)"
+msgstr ""
+
+#: g_language:msgproptrmusicon
+msgid "Play"
+msgstr ""
+
+#: g_language:msgproptrmusicoff
+msgid "Pause"
+msgstr ""
+
+#: g_language:msgproptrpushangle
+msgid "Angle"
+msgstr ""
+
+#: g_language:msgproptrpushforce
+msgid "Force"
+msgstr ""
+
+#: g_language:msgproptrpushreset
+msgid "Reset velocity"
+msgstr ""
+
+#: g_language:msgproptrscoreact
+msgid "Action                             (s)"
+msgstr ""
+
+#: g_language:msgproptrscoreact0
+msgid "Add points"
+msgstr ""
+
+#: g_language:msgproptrscoreact1
+msgid "Subtract points"
+msgstr ""
+
+#: g_language:msgproptrscoreact2
+msgid "Team Wins"
+msgstr ""
+
+#: g_language:msgproptrscoreact3
+msgid "Team Loses"
+msgstr ""
+
+#: g_language:msgproptrscoreteam
+msgid "Team"
+msgstr ""
+
+#: g_language:msgproptrscoreteam0
+msgid "My"
+msgstr ""
+
+#: g_language:msgproptrscoreteam1
+msgid "Enemy"
+msgstr ""
+
+#: g_language:msgproptrscoreteam2
+msgid "Red"
+msgstr ""
+
+#: g_language:msgproptrscoreteam3
+msgid "Blue"
+msgstr ""
+
+#: g_language:msgproptrscorecon
+msgid "Console message"
+msgstr ""
+
+#: g_language:msgproptrscoremsg
+msgid "Game message"
+msgstr ""
+
+#: g_language:msgproptrdamagevalue
+msgid "Damage"
+msgstr ""
+
+#: g_language:msgproptrdamagekind
+msgid "Damage type"
+msgstr ""
+
+#: g_language:msgproptrdamagekind0
+msgid "HIT_SOME"
+msgstr ""
+
+#: g_language:msgproptrdamagekind3
+msgid "HIT_TRAP"
+msgstr ""
+
+#: g_language:msgproptrdamagekind4
+msgid "HIT_FALL"
+msgstr ""
+
+#: g_language:msgproptrdamagekind5
+msgid "HIT_WATER"
+msgstr ""
+
+#: g_language:msgproptrdamagekind6
+msgid "HIT_ACID"
+msgstr ""
+
+#: g_language:msgproptrdamagekind7
+msgid "HIT_ELECTRO"
+msgstr ""
+
+#: g_language:msgproptrdamagekind8
+msgid "HIT_FLAME"
+msgstr ""
+
+#: g_language:msgproptrhealthmax
+msgid "To maximum"
+msgstr ""
+
+#: g_language:msgproptrshottype
+msgid "Projectile"
+msgstr ""
+
+#: g_language:msgproptrshotsound
+msgid "Shot sound"
+msgstr ""
+
+#: g_language:msgproptrshotangle
+msgid "Angle"
+msgstr ""
+
+#: g_language:msgproptrshotacc
+msgid "Spread"
+msgstr ""
+
+#: g_language:msgproptrshotto
+msgid "Auto targeting"
+msgstr ""
+
+#: g_language:msgproptrshotto0
+msgid "None"
+msgstr ""
+
+#: g_language:msgproptrshotto1
+msgid "Monsters"
+msgstr ""
+
+#: g_language:msgproptrshotto2
+msgid "Players"
+msgstr ""
+
+#: g_language:msgproptrshotto3
+msgid "Red team"
+msgstr ""
+
+#: g_language:msgproptrshotto4
+msgid "Blue team"
+msgstr ""
+
+#: g_language:msgproptrshotto5
+msgid "Monsters, players"
+msgstr ""
+
+#: g_language:msgproptrshotto6
+msgid "Players, monsters"
+msgstr ""
+
+#: g_language:msgproptrshotaim
+msgid "Auto-aiming mode"
+msgstr ""
+
+#: g_language:msgproptrshotaim0
+msgid "Trigger area"
+msgstr ""
+
+#: g_language:msgproptrshotaim1
+msgid "Entire map"
+msgstr ""
+
+#: g_language:msgproptrshotaim2
+msgid "Trace trigger area"
+msgstr ""
+
+#: g_language:msgproptrshotaim3
+msgid "Trace entire map"
+msgstr ""
+
+#: g_language:msgproptrshotammo
+msgid "Ammo limit"
+msgstr ""
+
+#: g_language:msgproptrshotreload
+msgid "Reload interval (in ticks)"
+msgstr ""
+
+#: g_language:msgproptrshotsight
+msgid "Sight interval (in ticks)"
+msgstr ""
+
+#: g_language:msgproptrshotpanel
+msgid "Indicator panel"
+msgstr ""
+
+#: g_language:msgproptrmessagekind
+msgid "Message kind"
+msgstr ""
+
+#: g_language:msgproptrmessagekind0
+msgid "Console message"
+msgstr ""
+
+#: g_language:msgproptrmessagekind1
+msgid "Event message"
+msgstr ""
+
+#: g_language:msgproptrmessageto
+msgid "Send to"
+msgstr ""
+
+#: g_language:msgproptrmessageto0
+msgid "Me"
+msgstr ""
+
+#: g_language:msgproptrmessageto1
+msgid "My team"
+msgstr ""
+
+#: g_language:msgproptrmessageto2
+msgid "Enemy team"
+msgstr ""
+
+#: g_language:msgproptrmessageto3
+msgid "Red team"
+msgstr ""
+
+#: g_language:msgproptrmessageto4
+msgid "Blue team"
+msgstr ""
+
+#: g_language:msgproptrmessageto5
+msgid "Everyone"
+msgstr ""
+
+#: g_language:msgproptrmessagetext
+msgid "Message text"
+msgstr ""
+
+#: g_language:msgproptrmessagetime
+msgid "Time (in ticks)"
+msgstr ""
+
+#: g_language:msgproptreffecttype
+msgid "Effect type"
+msgstr ""
+
+#: g_language:msgproptreffectsubtype
+msgid "Effect subtype"
+msgstr ""
+
+#: g_language:msgproptreffectcolor
+msgid "Effect color"
+msgstr ""
+
+#: g_language:msgproptreffectcenter
+msgid "Trigger center"
+msgstr ""
+
+#: g_language:msgproptreffectvelx
+msgid "Horizontal speed"
+msgstr ""
+
+#: g_language:msgproptreffectvely
+msgid "Vertical speed"
+msgstr ""
+
+#: g_language:msgproptreffectspl
+msgid "Speed variance left"
+msgstr ""
+
+#: g_language:msgproptreffectspr
+msgid "Speed variance right"
+msgstr ""
+
+#: g_language:msgproptreffectspu
+msgid "Speed variance up"
+msgstr ""
+
+#: g_language:msgproptreffectspd
+msgid "Speed variance down"
+msgstr ""
+
+#: g_language:msgproptreffectparticle
+msgid "Particle generator"
+msgstr ""
+
+#: g_language:msgproptreffectanimation
+msgid "Animation"
+msgstr ""
+
+#: g_language:msgproptreffectsliquid
+msgid "Water splash"
+msgstr ""
+
+#: g_language:msgproptreffectlliquid
+msgid "Light colored splash"
+msgstr ""
+
+#: g_language:msgproptreffectdliquid
+msgid "Dark colored splash"
+msgstr ""
+
+#: g_language:msgproptreffectblood
+msgid "Blood"
+msgstr ""
+
+#: g_language:msgproptreffectspark
+msgid "Sparks"
+msgstr ""
+
+#: g_language:msgproptreffectbubble
+msgid "Bubbles"
+msgstr ""
+
+#: g_language:msgmsgerror
+msgid "Error"
+msgstr ""
+
+#: g_language:msgmsgwrongtexwidth
+msgid "Panel Width must be a multiple of Texture Width (%d)"
+msgstr ""
+
+#: g_language:msgmsgwrongtexheight
+msgid "Panel Height must be a multiple of Texture Height (%d)"
+msgstr ""
+
+#: g_language:msgmsgwrongalpha
+msgid "Transparency must be in [0..255] interval"
+msgstr ""
+
+#: g_language:msgmsgwrongsize
+msgid "Width and Height must be greater than 0"
+msgstr ""
+
+#: g_language:msgmsgwrongxy
+msgid "X or Y coordinate hasn't been set"
+msgstr ""
+
+#: g_language:msgmsgtexturealready
+msgid "Texture \"%s\" already exists"
+msgstr ""
+
+#: g_language:msgmsgresname64
+msgid "Resource \"%s\" name must not be longer than 64 chars"
+msgstr ""
+
+#: g_language:msgmsgchooseitem
+msgid "Select Item"
+msgstr ""
+
+#: g_language:msgmsgchoosemonster
+msgid "Select Monster"
+msgstr ""
+
+#: g_language:msgmsgchoosearea
+msgid "Select Area"
+msgstr ""
+
+#: g_language:msgmsgchoosetexture
+msgid "Select Texture"
+msgstr ""
+
+#: g_language:msgmsgchooseres
+msgid "Resource hasn't been selected"
+msgstr ""
+
+#: g_language:msgmsgexit
+msgid "Exit"
+msgstr ""
+
+#: g_language:msgmsgexitpromt
+msgid "Leaving so soon?"
+msgstr ""
+
+#: g_language:msgmsgdeltexture
+msgid "Delete the texture"
+msgstr ""
+
+#: g_language:msgmsgdeltexturepromt
+msgid "Delete the texture \"%s\" ?"
+msgstr ""
+
+#: g_language:msgmsgdeltexturecant
+msgid "Can't delete texture in use. Replace it on all panels with this texture."
+msgstr ""
+
+#: g_language:msgmsgdelrecent
+msgid "File does not longer exist"
+msgstr ""
+
+#: g_language:msgmsgdelrecentpromt
+msgid "Remove entry from recent list?"
+msgstr ""
+
+#: g_language:msgmsgclearmap
+msgid "New map"
+msgstr ""
+
+#: g_language:msgmsgclearmappromt
+msgid "Clear the entire map?"
+msgstr ""
+
+#: g_language:msgmsgdeletemap
+msgid "Delete the map"
+msgstr ""
+
+#: g_language:msgmsgdeletemappromt
+msgid "Delete the map \"%s\" from \"%s\" ?"
+msgstr ""
+
+#: g_language:msgmsgmapdeleted
+msgid "Map is deleted"
+msgstr ""
+
+#: g_language:msgmsgmapdeletedpromt
+msgid "Map \"%s\" is deleted"
+msgstr ""
+
+#: g_language:msgmsgreopenmappromt
+msgid "Reopen this map?"
+msgstr ""
+
+#: g_language:msgmsgexecerror
+msgid "Game start error"
+msgstr ""
+
+#: g_language:msgmsgsounderror
+msgid "Can't play sound"
+msgstr ""
+
+#: g_language:msgmsgwaderror
+msgid "Can't open WAD: %s"
+msgstr ""
+
+#: g_language:msgmsgreserror
+msgid "Can't read resource: %s:%s\\%s"
+msgstr ""
+
+#: g_language:msgmsgpacked
+msgid "Map \"%s\" with resources saved to \"%s\""
+msgstr ""
+
+#: g_language:msgmsgmapexists
+msgid "Map \"%s\" already exists. Overwrite?"
+msgstr ""
+
+#: g_language:msgmsgsavemap
+msgid "Save the map"
+msgstr ""
+
+#: g_language:msghintteleport
+msgid "Choose destination of Teleport"
+msgstr ""
+
+#: g_language:msghintspawn
+msgid "Choose Spawn point"
+msgstr ""
+
+#: g_language:msghintpaneldoor
+msgid "Choose Door"
+msgstr ""
+
+#: g_language:msghintpaneltexture
+msgid "Choose textured Panel"
+msgstr ""
+
+#: g_language:msghintpanelshot
+msgid "Choose textured shot indicator Panel"
+msgstr ""
+
+#: g_language:msghintpanellift
+msgid "Choose Stream Panel"
+msgstr ""
+
+#: g_language:msghintmonster
+msgid "Choose Monster"
+msgstr ""
+
+#: g_language:msghintextarea
+msgid "Specify action Area"
+msgstr ""
+
+#: g_language:msghintwidth
+msgid "Width: %d"
+msgstr ""
+
+#: g_language:msghintheight
+msgid "Height: %d"
+msgstr ""
+
+#: g_language:msgmenufile
+msgid "File"
+msgstr ""
+
+#: g_language:msgmenufilenew
+msgid "New"
+msgstr ""
+
+#: g_language:msgmenufileopen
+msgid "Open..."
+msgstr ""
+
+#: g_language:msgmenufilesave
+msgid "Save"
+msgstr ""
+
+#: g_language:msgmenufilesaveas
+msgid "Save As..."
+msgstr ""
+
+#: g_language:msgmenufileopenwad
+msgid "Select Map..."
+msgstr ""
+
+#: g_language:msgmenufilereopen
+msgid "Revert to Saved"
+msgstr ""
+
+#: g_language:msgmenufilesavemini
+msgid "Save Minimap..."
+msgstr ""
+
+#: g_language:msgmenufiledelete
+msgid "Delete from WAD..."
+msgstr ""
+
+#: g_language:msgmenufilepackmap
+msgid "Pack to WAD..."
+msgstr ""
+
+#: g_language:msgmenufileexit
+msgid "Exit"
+msgstr ""
+
+#: g_language:msgmenuedit
+msgid "Edit"
+msgstr ""
+
+#: g_language:msgmenueditundo
+msgid "Undo"
+msgstr ""
+
+#: g_language:msgmenueditcopy
+msgid "Copy"
+msgstr ""
+
+#: g_language:msgmenueditcut
+msgid "Cut"
+msgstr ""
+
+#: g_language:msgmenueditpaste
+msgid "Paste"
+msgstr ""
+
+#: g_language:msgmenueditselectall
+msgid "Select All"
+msgstr ""
+
+#: g_language:msgmenuedittofore
+msgid "Bring to Front"
+msgstr ""
+
+#: g_language:msgmenuedittoback
+msgid "Send to Back"
+msgstr ""
+
+#: g_language:msgmenutools
+msgid "Tools"
+msgstr ""
+
+#: g_language:msgmenutoolssnapgrid
+msgid "Snap to Grid"
+msgstr ""
+
+#: g_language:msgmenutoolsminimap
+msgid "Show Minimap"
+msgstr ""
+
+#: g_language:msgmenutoolsstepgrid
+msgid "Switch Grid Granularity"
+msgstr ""
+
+#: g_language:msgmenutoolsshowedges
+msgid "Show Map Bounds"
+msgstr ""
+
+#: g_language:msgmenutoolslayers
+msgid "Layers"
+msgstr ""
+
+#: g_language:msgmenuserv
+msgid "Service"
+msgstr ""
+
+#: g_language:msgmenuservtest
+msgid "Analyse Map..."
+msgstr ""
+
+#: g_language:msgmenuservopt
+msgid "Optimize Map..."
+msgstr ""
+
+#: g_language:msgmenuservpreview
+msgid "Preview Mode"
+msgstr ""
+
+#: g_language:msgmenuservlaunch
+msgid "Run Test"
+msgstr ""
+
+#: g_language:msgmenusets
+msgid "Settings"
+msgstr ""
+
+#: g_language:msgmenusetsmap
+msgid "Map Properties..."
+msgstr ""
+
+#: g_language:msgmenusetseditor
+msgid "Preferences..."
+msgstr ""
+
+#: g_language:msgmenusetslaunch
+msgid "In-game test settings"
+msgstr ""
+
+#: g_language:msgmenuhelp
+msgid "Help"
+msgstr ""
+
+#: g_language:msgmenuhelpabout
+msgid "About"
+msgstr ""
+
+#: g_language:msgmenulayerback
+msgid "1. Background"
+msgstr ""
+
+#: g_language:msgmenulayerwall
+msgid "2. Walls"
+msgstr ""
+
+#: g_language:msgmenulayerfore
+msgid "3. Foreground"
+msgstr ""
+
+#: g_language:msgmenulayerstair
+msgid "4. Steps"
+msgstr ""
+
+#: g_language:msgmenulayerwater
+msgid "5. Liquids"
+msgstr ""
+
+#: g_language:msgmenulayeritem
+msgid "6. Items"
+msgstr ""
+
+#: g_language:msgmenulayermonster
+msgid "7. Monsters"
+msgstr ""
+
+#: g_language:msgmenulayerarea
+msgid "8. Areas"
+msgstr ""
+
+#: g_language:msgmenulayertrigger
+msgid "9. Triggers"
+msgstr ""
+
+#: g_language:msgmenutbnew
+msgid "New Map"
+msgstr ""
+
+#: g_language:msgmenutbopen
+msgid "Open Map"
+msgstr ""
+
+#: g_language:msgmenutbsave
+msgid "Save Map"
+msgstr ""
+
+#: g_language:msgmenutbopenwad
+msgid "Open another Map from same WAD"
+msgstr ""
+
+#: g_language:msgmenutbminimap
+msgid "Show Mini-map"
+msgstr ""
+
+#: g_language:msgmenutblayers
+msgid "Show/Hide Objects"
+msgstr ""
+
+#: g_language:msgmenutbgrid
+msgid "Grid On/Off"
+msgstr ""
+
+#: g_language:msgmenutbgridstep
+msgid "Switch Grid step"
+msgstr ""
+
+#: g_language:msgmenutblaunch
+msgid "Run Test"
+msgstr ""
+
+#: g_language:msgmenulaunchsets
+msgid "Settings..."
+msgstr ""
+
+#: g_language:msgcapfxtype
+msgid "Select Effect type"
+msgstr ""
+
+#: g_language:msgcapmonstertype
+msgid "Select Monster type"
+msgstr ""
+
+#: g_language:msgcapitemtype
+msgid "Select Item type"
+msgstr ""
+
+#: g_language:msgcapabout
+msgid "About Map Editor"
+msgstr ""
+
+#: g_language:msgcapact
+msgid "Activation type"
+msgstr ""
+
+#: g_language:msgcapaddsky
+msgid "Select Sky Texture"
+msgstr ""
+
+#: g_language:msgcapaddsound
+msgid "Select Sound/Music"
+msgstr ""
+
+#: g_language:msgcapaddtexture
+msgid "Select Texture"
+msgstr ""
+
+#: g_language:msgcapkeys
+msgid "Keys"
+msgstr ""
+
+#: g_language:msgcaptest
+msgid "Analyse Map"
+msgstr ""
+
+#: g_language:msgcapopt
+msgid "Optimize Map"
+msgstr ""
+
+#: g_language:msgcapsets
+msgid "Map Properties"
+msgstr ""
+
+#: g_language:msgcaplaunch
+msgid "In-game test Settings"
+msgstr ""
+
+#: g_language:msgcapes
+msgid "Editor Preferences"
+msgstr ""
+
+#: g_language:msgcappack
+msgid "Pack Map"
+msgstr ""
+
+#: g_language:msgcapsave
+msgid "Save Map"
+msgstr ""
+
+#: g_language:msgcapmini
+msgid "Save Minimap"
+msgstr ""
+
+#: g_language:msgcapselect
+msgid "Select Map"
+msgstr ""
+
+#: g_language:msgcapopen
+msgid "Open Map"
+msgstr ""
+
+#: g_language:msgcapremove
+msgid "Remove Map"
+msgstr ""
+
+#: g_language:msgcaptexture
+msgid "Texture: %dx%d"
+msgstr ""
+
+#: g_language:msgcapanimation
+msgid "Animation: %dx%d, %d frames"
+msgstr ""
+
+#: g_language:msgcapstatselected
+msgid "Selected objects: %d"
+msgstr ""
+
+#: g_language:msgctrlpropkey
+msgid "Property"
+msgstr ""
+
+#: g_language:msgctrlpropvalue
+msgid "Value"
+msgstr ""
+
+#: g_language:msgctrlpanels
+msgid "Panels"
+msgstr ""
+
+#: g_language:msgctrlitems
+msgid "Items"
+msgstr ""
+
+#: g_language:msgctrlmonsters
+msgid "Monsters"
+msgstr ""
+
+#: g_language:msgctrlareas
+msgid "Areas"
+msgstr ""
+
+#: g_language:msgctrltriggers
+msgid "Triggers"
+msgstr ""
+
+#: g_language:msgctrllisttexture
+msgid "Texture List"
+msgstr ""
+
+#: g_language:msgctrllistitem
+msgid "Item List"
+msgstr ""
+
+#: g_language:msgctrllistmonster
+msgid "Monster List"
+msgstr ""
+
+#: g_language:msgctrllistarea
+msgid "Area List"
+msgstr ""
+
+#: g_language:msgctrllisttrigger
+msgid "Trigger List"
+msgstr ""
+
+#: g_language:msgctrllistactive
+msgid "Activation Type"
+msgstr ""
+
+#: g_language:msgctrllistkeys
+msgid "Keys Needed"
+msgstr ""
+
+#: g_language:msgctrlpreview
+msgid "Texture Preview"
+msgstr ""
+
+#: g_language:msgctrlitemdm
+msgid "DM Only"
+msgstr ""
+
+#: g_language:msgctrlitemfalls
+msgid "Falls"
+msgstr ""
+
+#: g_language:msgctrlleft
+msgid "Left"
+msgstr ""
+
+#: g_language:msgctrlright
+msgid "Right"
+msgstr ""
+
+#: g_language:msgctrlactplayerclose
+msgid "Player Collides"
+msgstr ""
+
+#: g_language:msgctrlactmonsterclose
+msgid "Monster Collides"
+msgstr ""
+
+#: g_language:msgctrlactplayerpress
+msgid "Player Pressed"
+msgstr ""
+
+#: g_language:msgctrlactmonsterpress
+msgid "Monster Pressed"
+msgstr ""
+
+#: g_language:msgctrlactshot
+msgid "Shot"
+msgstr ""
+
+#: g_language:msgctrlactnomonster
+msgid "No Monsters"
+msgstr ""
+
+#: g_language:msgctrlkeysred
+msgid "Red Key"
+msgstr ""
+
+#: g_language:msgctrlkeysgreen
+msgid "Green Key"
+msgstr ""
+
+#: g_language:msgctrlkeysblue
+msgid "Blue Key"
+msgstr ""
+
+#: g_language:msgctrlkeysteamred
+msgid "Red Team"
+msgstr ""
+
+#: g_language:msgctrlkeysteamblue
+msgid "Blue Team"
+msgstr ""
+
+#: g_language:msgctrloptgb
+msgid "Optimization"
+msgstr ""
+
+#: g_language:msgctrlopttexture
+msgid "Texture Optimization"
+msgstr ""
+
+#: g_language:msgctrloptpanel
+msgid "Panel Optimization"
+msgstr ""
+
+#: g_language:msgctrloptwall
+msgid "Walls"
+msgstr ""
+
+#: g_language:msgctrloptfore
+msgid "Foreground"
+msgstr ""
+
+#: g_language:msgctrloptback
+msgid "Background"
+msgstr ""
+
+#: g_language:msgctrloptstair
+msgid "Steps"
+msgstr ""
+
+#: g_language:msgctrloptwater
+msgid "Water"
+msgstr ""
+
+#: g_language:msgctrloptacid1
+msgid "Acid 1"
+msgstr ""
+
+#: g_language:msgctrloptacid2
+msgid "Acid 2"
+msgstr ""
+
+#: g_language:msgctrloptlift
+msgid "Streams"
+msgstr ""
+
+#: g_language:msgctrloptblockmon
+msgid "Monster Boundary"
+msgstr ""
+
+#: g_language:msgctrloptdesctexture
+msgid "Deletes unused textures from texture list."
+msgstr ""
+
+#: g_language:msgctrloptdescpanel
+msgid "Merges nearby panels of same type. Increases game performance."
+msgstr ""
+
+#: g_language:msgctrlsetsstats
+msgid "Statistics:"
+msgstr ""
+
+#: g_language:msgctrlsetssizes
+msgid "Map Size:"
+msgstr ""
+
+#: g_language:msgctrllaunchdm
+msgid "Deathmatch"
+msgstr ""
+
+#: g_language:msgctrllaunchtdm
+msgid "Team Deathmatch"
+msgstr ""
+
+#: g_language:msgctrllaunchctf
+msgid "Capture the Flag"
+msgstr ""
+
+#: g_language:msgctrllaunchcoop
+msgid "Cooperative"
+msgstr ""
+
+#: g_language:msgctrllaunch2p
+msgid "Two Players"
+msgstr ""
+
+#: g_language:msgctrllaunchff
+msgid "Friendly Fire"
+msgstr ""
+
+#: g_language:msgctrllaunchexit
+msgid "Enable Exit"
+msgstr ""
+
+#: g_language:msgctrllaunchweapons
+msgid "Weapons Stay"
+msgstr ""
+
+#: g_language:msgctrllaunchmonsters
+msgid "Enable Monsters"
+msgstr ""
+
+#: g_language:msgctrllaunchclose
+msgid "Close the game after exiting the map"
+msgstr ""
+
+#: g_language:msgctrllaunchopen
+msgid "Select Doom 2D: Forever executable"
+msgstr ""
+
+#: g_language:msgctrlesgrid
+msgid "Show Grid"
+msgstr ""
+
+#: g_language:msgctrlestexture
+msgid "Show Panel Texture"
+msgstr ""
+
+#: g_language:msgctrlespanelsize
+msgid "Show Panel Size"
+msgstr ""
+
+#: g_language:msgctrlescheckerboard
+msgid "Use Checkerboard"
+msgstr ""
+
+#: g_language:msgctrlpacktextures
+msgid "Textures"
+msgstr ""
+
+#: g_language:msgctrlpacksky
+msgid "Sky"
+msgstr ""
+
+#: g_language:msgctrlpackmusic
+msgid "Music"
+msgstr ""
+
+#: g_language:msgctrlpackadd
+msgid "Don't overwrite WAD"
+msgstr ""
+
+#: g_language:msgctrlpacknonstd
+msgid "Non-standard Resources only"
+msgstr ""
+
+#: g_language:msglabtexwidth
+msgid "Texture Width:"
+msgstr ""
+
+#: g_language:msglabtexheight
+msgid "Texture Height:"
+msgstr ""
+
+#: g_language:msglabspectrum
+msgid "Show the Spectrum"
+msgstr ""
+
+#: g_language:msglababoutver
+msgid "Version 2.1.5"
+msgstr ""
+
+#: g_language:msglababoutauthor
+msgid "Author: rs.falcon"
+msgstr ""
+
+#: g_language:msglababoutauthor2
+msgid "Additions: Pss"
+msgstr ""
+
+#: g_language:msglababoutmail
+msgid "rmw.falcon@mail.ru"
+msgstr ""
+
+#: g_language:msglababoutmail2
+msgid "pssxx@mail.ru"
+msgstr ""
+
+#: g_language:msglababoutsite
+msgid "Doom 2D: Forever Web-site"
+msgstr ""
+
+#: g_language:msglababouthttp
+msgid "www.doom2d.org"
+msgstr ""
+
+#: g_language:msglabaddwads
+msgid "WAD Files:"
+msgstr ""
+
+#: g_language:msglabaddsections
+msgid "WAD Sections:"
+msgstr ""
+
+#: g_language:msglabsetsname
+msgid "Map Name:"
+msgstr ""
+
+#: g_language:msglabsetsdesc
+msgid "Map Description"
+msgstr ""
+
+#: g_language:msglabsetsauthor
+msgid "Author:"
+msgstr ""
+
+#: g_language:msglabsetsback
+msgid "Background/Sky:"
+msgstr ""
+
+#: g_language:msglabsetsmusic
+msgid "Music:"
+msgstr ""
+
+#: g_language:msglabsetstextures
+msgid "Textures:"
+msgstr ""
+
+#: g_language:msglabsetspanels
+msgid "Panels:"
+msgstr ""
+
+#: g_language:msglabsetsitems
+msgid "Items:"
+msgstr ""
+
+#: g_language:msglabsetsmonsters
+msgid "Monsters:"
+msgstr ""
+
+#: g_language:msglabsetsareas
+msgid "Areas:"
+msgstr ""
+
+#: g_language:msglabsetstriggers
+msgid "Triggers:"
+msgstr ""
+
+#: g_language:msglabsetssizes
+msgid "Current:"
+msgstr ""
+
+#: g_language:msglabsetswidth
+msgid "Width:"
+msgstr ""
+
+#: g_language:msglabsetsheight
+msgid "Height:"
+msgstr ""
+
+#: g_language:msglabsetsmapmove
+msgid "Direction to shift map objects:"
+msgstr ""
+
+#: g_language:msglabsetssnapping
+msgid "Preserve snapping"
+msgstr ""
+
+#: g_language:msglablaunchtime
+msgid "Time Limit:"
+msgstr ""
+
+#: g_language:msglablaunchsecs
+msgid "seconds"
+msgstr ""
+
+#: g_language:msglablaunchscore
+msgid "Score Limit:"
+msgstr ""
+
+#: g_language:msglablaunchpath
+msgid "Path to Doom2DF.exe:"
+msgstr ""
+
+#: g_language:msglablaunchargs
+msgid "Launch Arguments:"
+msgstr ""
+
+#: g_language:msglabesgrid
+msgid "Grid Step:"
+msgstr ""
+
+#: g_language:msglabesgridcolor
+msgid "Grid Color:"
+msgstr ""
+
+#: g_language:msglabesgridsize
+msgid "Grid Dot Size:"
+msgstr ""
+
+#: g_language:msglabesback
+msgid "Background Color:"
+msgstr ""
+
+#: g_language:msglabespreview
+msgid "Texture Preview Background Color:"
+msgstr ""
+
+#: g_language:msglabesminimap
+msgid "Mini-map Scale:"
+msgstr ""
+
+#: g_language:msglabesrecent
+msgid "Recent Maps List Contains:"
+msgstr ""
+
+#: g_language:msglabeslanguage
+msgid "Language:"
+msgstr ""
+
+#: g_language:msglabescompress
+msgid "Compress archive when save"
+msgstr ""
+
+#: g_language:msglabesbackup
+msgid "Make backup before save"
+msgstr ""
+
+#: g_language:msglabpacksaveto
+msgid "Save to:"
+msgstr ""
+
+#: g_language:msglabpackmapname
+msgid "Map Resource Name:"
+msgstr ""
+
+#: g_language:msglabpacktextures
+msgid "Texture Section:"
+msgstr ""
+
+#: g_language:msglabpacksky
+msgid "Sky Section:"
+msgstr ""
+
+#: g_language:msglabpackmusic
+msgid "Music Section:"
+msgstr ""
+
+#: g_language:msglabminiscale
+msgid "Scale:"
+msgstr ""
+
+#: g_language:msgbtnapplyprops
+msgid "Apply Properties"
+msgstr ""
+
+#: g_language:msgbtnok
+msgid "OK"
+msgstr ""
+
+#: g_language:msgbtncancel
+msgid "Cancel"
+msgstr ""
+
+#: g_language:msgbtnadd
+msgid "Add"
+msgstr ""
+
+#: g_language:msgbtnclose
+msgid "Close"
+msgstr ""
+
+#: g_language:msgbtnaddclose
+msgid "Add and Close"
+msgstr ""
+
+#: g_language:msgbtntestagain
+msgid "Check"
+msgstr ""
+
+#: g_language:msgbtnstart
+msgid "Run"
+msgstr ""
+
+#: g_language:msgbtnpack
+msgid "Pack"
+msgstr ""
+
+#: g_language:msgbtnsave
+msgid "Save"
+msgstr ""
+
+#: g_language:msgbtnnosound
+msgid "No sound"
+msgstr ""
+
+#: g_language:msgbtntextureadd
+msgid "Add texture to the list"
+msgstr ""
+
+#: g_language:msgbtntexturedelete
+msgid "Delete texture from the list"
+msgstr ""
+
+#: g_language:msgbtntextureempty
+msgid "Deselect texture"
+msgstr ""
+
+#: g_language:msgloadwad
+msgid "Reading WAD"
+msgstr ""
+
+#: g_language:msgloadmap
+msgid "Loading Map"
+msgstr ""
+
+#: g_language:msgloadtextures
+msgid "Reading Textures"
+msgstr ""
+
+#: g_language:msgloadpanels
+msgid "Reading Panels"
+msgstr ""
+
+#: g_language:msgloaditems
+msgid "Reading Items"
+msgstr ""
+
+#: g_language:msgloadmonsters
+msgid "Reading Monsters"
+msgstr ""
+
+#: g_language:msgloadareas
+msgid "Reading Areas"
+msgstr ""
+
+#: g_language:msgloadtriggers
+msgid "Reading Triggers"
+msgstr ""
+
+#: g_language:msgtestareawall
+msgid "Player collides with the wall and will be stuck."
+msgstr ""
+
+#: g_language:msgtestareawallstr
+msgid "Area #%d collides with Map (%d:%d)"
+msgstr ""
+
+#: g_language:msgtestspawns1
+msgid "There are several spawn points for First Player on the map"
+msgstr ""
+
+#: g_language:msgtestspawns2
+msgid "There are several spawn points for Second Player on the map"
+msgstr ""
+
+#: g_language:msgtestspawns
+msgid "There are several spawn points on the map. Random one will be used."
+msgstr ""
+
+#: g_language:msgtestnodm
+msgid "There are no DM spawn points on the map"
+msgstr ""
+
+#: g_language:msgtestnodmex
+msgid "There are no DM spawn points on the map. Only \"Single Player\" mode available."
+msgstr ""
+
+#: g_language:msgtestmonsterwall
+msgid "Monster collides with the wall and will be stuck."
+msgstr ""
+
+#: g_language:msgtestmonsterwallstr
+msgid "Monster #%d collides with a map (%d:%d)"
+msgstr ""
+
+#: g_language:msgoptnotextures
+msgid "Texture list is empty"
+msgstr ""
+
+#: g_language:msgoptdeletedtextures
+msgid "Deleted Textures:"
+msgstr ""
+
+#: g_language:msgopttotaltextures
+msgid "Textures Total:"
+msgstr ""
+
+#: g_language:msgopttexdeleted
+msgid "Textures Deleted:"
+msgstr ""
+
+#: g_language:msgoptpanelsopt
+msgid "Panels Optimized:"
+msgstr ""
+
+#: g_language:msgoptwalls
+msgid "Walls Optimization..."
+msgstr ""
+
+#: g_language:msgoptfores
+msgid "Foreground Optimization..."
+msgstr ""
+
+#: g_language:msgoptbacks
+msgid "Background Optimization..."
+msgstr ""
+
+#: g_language:msgoptstairs
+msgid "Steps Optimization..."
+msgstr ""
+
+#: g_language:msgoptwater
+msgid "Water Optimization..."
+msgstr ""
+
+#: g_language:msgoptacid1
+msgid "Acid 1 Optimization..."
+msgstr ""
+
+#: g_language:msgoptacid2
+msgid "Acid 2 Optimization..."
+msgstr ""
+
+#: g_language:msgoptlifts
+msgid "Streams Optimization..."
+msgstr ""
+
+#: g_language:msgoptblockmon
+msgid "Monster Boundaries Optimization..."
+msgstr ""
+
+#: g_language:msgopttotalpanels
+msgid "Panels Total:"
+msgstr ""
+
+#: g_language:msgoptpanelsafter
+msgid "Panels after Optimization:"
+msgstr ""
+
+#: g_language:msgwadspecialmap
+msgid "<MAP WAD-FILE>"
+msgstr ""
+
+#: g_language:msgwadspecialtexs
+msgid "<EXTRA TEXTURES>"
+msgstr ""
+
+#: g_language:msgfilefilterall
+msgid "Doom 2D: Forever Maps (*.dfz, *.dfzip, *.zip, *.wad)|*.dfz;*.dfzip;*.zip;*.wad|Doom 2D: Forever 0.30 Maps (*.ini)|*.ini|All Files (*.*)|*.*"
+msgstr ""
+
+#: g_language:msgfilefilterwad
+msgid "Doom 2D: Forever Maps (*.dfz)|*.dfz|Doom 2D: Forever Maps (*.dfzip)|*.dfzip|Doom 2D: Forever Maps (*.zip)|*.zip|Doom 2D: Forever Maps (*.wad)|*.wad|All Files (*.*)|*.*"
+msgstr ""
+
+#: g_language:msgeditortitle
+msgid "Doom 2D: Forever Map Editor"
+msgstr ""
+
+#: imagingcanvases:sconstructorinvalidpointer
+msgid "Invalid pointer (%p) to TImageData passed to TImagingCanvas constructor."
+msgstr ""
+
+#: imagingcanvases:sconstructorinvalidimage
+msgid "Invalid image data passed to TImagingCanvas constructor (%s)."
+msgstr ""
+
+#: imagingcanvases:sconstructorunsupportedformat
+msgid "Image passed to TImagingCanvas constructor is in unsupported format (%s)"
+msgstr ""
+
+#: imaginggif:sgifdecodingerror
+msgid "Error when decoding GIF LZW data"
+msgstr ""
+
+#: imagingjpeg:sjpegerror
+msgid "JPEG Error"
+msgstr ""
+
+#: imagingnetworkgraphics:serrorloadingchunk
+msgid "Error when reading %s chunk data. File may be corrupted."
+msgstr ""
+
+#: imaging:sexceptmsg
+msgid "Exception Message"
+msgstr ""
+
+#: imaging:sallfilter
+msgid "All Images"
+msgstr ""
+
+#: imaging:sunknownformat
+msgid "Unknown and unsupported format"
+msgstr ""
+
+#: imaging:serrorfreeimage
+msgid "Error while freeing image. %s"
+msgstr ""
+
+#: imaging:serrorcloneimage
+msgid "Error while cloning image. %s"
+msgstr ""
+
+#: imaging:serrorflipimage
+msgid "Error while flipping image. %s"
+msgstr ""
+
+#: imaging:serrormirrorimage
+msgid "Error while mirroring image. %s"
+msgstr ""
+
+#: imaging:serrorresizeimage
+msgid "Error while resizing image.  %s"
+msgstr ""
+
+#: imaging:serrorswapimage
+msgid "Error while swapping channels of image. %s"
+msgstr ""
+
+#: imaging:sfileformatcannotload
+msgid "Image Format \"%s\" does not support loading images."
+msgstr ""
+
+#: imaging:sfileformatcannotsave
+msgid "Image Format \"%s\" does not support saving images."
+msgstr ""
+
+#: imaging:serrornewimage
+msgid "Error while creating image data with params: Width=%d Height=%d Format=%s."
+msgstr ""
+
+#: imaging:serrorconvertimage
+msgid "Error while converting image to format \"%s\". %s"
+msgstr ""
+
+#: imaging:simageinfo
+msgid "Image @%p info: Width = %dpx, Height = %dpx, Format = %s, Size = %.0n %s, Bits @%p, Palette @%p."
+msgstr ""
+
+#: imaging:simageinfoinvalid
+msgid "Access violation encountered when getting info on image at address %p."
+msgstr ""
+
+#: imaging:sfilenotvalid
+msgid "File \"%s\" is not valid image in \"%s\" format."
+msgstr ""
+
+#: imaging:sstreamnotvalid
+msgid "Stream %p does not contain valid image in \"%s\" format."
+msgstr ""
+
+#: imaging:smemorynotvalid
+msgid "Memory %p (%d Bytes) does not contain valid image in \"%s\" format."
+msgstr ""
+
+#: imaging:serrorloadingfile
+msgid "Error while loading images from file \"%s\" (file format: %s)."
+msgstr ""
+
+#: imaging:serrorloadingstream
+msgid "Error while loading images from stream %p (file format: %s)."
+msgstr ""
+
+#: imaging:serrorloadingmemory
+msgid "Error while loading images from memory %p (%d Bytes) (file format: %s)."
+msgstr ""
+
+#: imaging:serrorsavingfile
+msgid "Error while saving images to file \"%s\" (file format: %s)."
+msgstr ""
+
+#: imaging:serrorsavingstream
+msgid "Error while saving images to stream %p (file format: %s)."
+msgstr ""
+
+#: imaging:serrorsavingmemory
+msgid "Error while saving images to memory %p (%d Bytes) (file format: %s)."
+msgstr ""
+
+#: imaging:serrorfindcolor
+msgid "Error while finding color in palette @%p with %d entries."
+msgstr ""
+
+#: imaging:serrorgrayscalepalette
+msgid "Error while filling grayscale palette @%p with %d entries."
+msgstr ""
+
+#: imaging:serrorcustompalette
+msgid "Error while filling custom palette @%p with %d entries."
+msgstr ""
+
+#: imaging:serrorswappalette
+msgid "Error while swapping channels of palette @%p with %d entries."
+msgstr ""
+
+#: imaging:serrorreducecolors
+msgid "Error while reducing number of colors of image to %d. %s"
+msgstr ""
+
+#: imaging:serrorgeneratemipmaps
+msgid "Error while generating %d mipmap levels for image %s"
+msgstr ""
+
+#: imaging:simagesnotvalid
+msgid "One or more images are not valid."
+msgstr ""
+
+#: imaging:serrorcopyrect
+msgid "Error while copying rect from image %s to image %s."
+msgstr ""
+
+#: imaging:serrormapimage
+msgid "Error while mapping image %s to palette."
+msgstr ""
+
+#: imaging:serrorfillrect
+msgid "Error while filling rectangle X:%d Y:%d W:%d H:%d in image %s"
+msgstr ""
+
+#: imaging:serrorsplitimage
+msgid "Error while splitting image %s to %dx%d sized chunks."
+msgstr ""
+
+#: imaging:serrormakepaletteforimages
+msgid "Error while making %d color palette for %d images."
+msgstr ""
+
+#: imaging:serrornewpalette
+msgid "Error while creating new palette with %d entries"
+msgstr ""
+
+#: imaging:serrorfreepalette
+msgid "Error while freeing palette @%p"
+msgstr ""
+
+#: imaging:serrorcopypalette
+msgid "Error while copying %d entries from palette @%p to @%p"
+msgstr ""
+
+#: imaging:serrorreplacecolor
+msgid "Error while replacing colors in rectangle X:%d Y:%d W:%d H:%d of image %s"
+msgstr ""
+
+#: imaging:serrorrotateimage
+msgid "Error while rotating image %s by %.2n degrees"
+msgstr ""
+
+#: imaging:serrorstretchrect
+msgid "Error while stretching rect from image %s to image %s."
+msgstr ""
+
+#: imaging:serroremptystream
+msgid "Input stream has no data. Check Position property."
+msgstr ""
+
+#: imaging:serrorinvalidinputimage
+msgid "Invalid input image."
+msgstr ""
+
+#: imaging:serrorbadimage
+msgid "Bad image detected."
+msgstr ""
+
diff --git a/lang/editor.ru_RU.po b/lang/editor.ru_RU.po
new file mode 100644 (file)
index 0000000..5f69aef
--- /dev/null
@@ -0,0 +1,2254 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: g_language:msgnotaccessible
+msgid "N/A"
+msgstr "Н/Д"
+
+#: g_language:msgarrayboolfalse
+msgid "No"
+msgstr "Нет"
+
+#: g_language:msgarraybooltrue
+msgid "Yes"
+msgstr "Да"
+
+#: g_language:msgarraydirleft
+msgid "Left"
+msgstr "Влево"
+
+#: g_language:msgarraydirright
+msgid "Right"
+msgstr "Вправо"
+
+#: g_language:msgarraydirsame
+msgid "Don''t change"
+msgstr "Не менять"
+
+#: g_language:msgarraydirreversed
+msgid "Reversed"
+msgstr "Обратное"
+
+#: g_language:msgarraydirbtnleft
+msgid "Left"
+msgstr "Влево"
+
+#: g_language:msgarraydirbtnright
+msgid "Right"
+msgstr "Вправо"
+
+#: g_language:msgarraydirbtnup
+msgid "Up"
+msgstr "Вверх"
+
+#: g_language:msgarraydirbtndown
+msgid "Down"
+msgstr "Вниз"
+
+#: g_language:msgarraypanelwall
+msgid "Wall"
+msgstr "Стена"
+
+#: g_language:msgarraypanelback
+msgid "Background"
+msgstr "Фон"
+
+#: g_language:msgarraypanelfront
+msgid "Foreground"
+msgstr "Передний план"
+
+#: g_language:msgarraypaneldooropen
+msgid "Open Door"
+msgstr "Открытая дверь"
+
+#: g_language:msgarraypaneldoorclose
+msgid "Closed Door"
+msgstr "Закрытая дверь"
+
+#: g_language:msgarraypanelstair
+msgid "Step"
+msgstr "Ступень"
+
+#: g_language:msgarraypanelwater
+msgid "Water"
+msgstr "Вода"
+
+#: g_language:msgarraypanelacid1
+msgid "Acid 1"
+msgstr "Кислота 1"
+
+#: g_language:msgarraypanelacid2
+msgid "Acid 2"
+msgstr "Кислота 2"
+
+#: g_language:msgarraypanelliftup
+msgid "Stream Up"
+msgstr "Лифт вверх"
+
+#: g_language:msgarraypanelliftdown
+msgid "Stream Down"
+msgstr "Лифт вниз"
+
+#: g_language:msgarraypanelliftleft
+msgid "Stream Left"
+msgstr "Поток влево"
+
+#: g_language:msgarraypanelliftright
+msgid "Stream Right"
+msgstr "Поток вправо"
+
+#: g_language:msgarraypanelblockmon
+msgid "Monster Boundary"
+msgstr "Блокиратор монстров"
+
+#: g_language:msgarrayfxnone
+msgid "None"
+msgstr "Нет"
+
+#: g_language:msgarrayfxteleport
+msgid "Teleport"
+msgstr "Телепортация"
+
+#: g_language:msgarrayfxrespawn
+msgid "Respawn"
+msgstr "Респаун"
+
+#: g_language:msgarrayfxfire
+msgid "Arch-Vile Fire"
+msgstr "Огонь колдуна"
+
+#: g_language:msgarrayitemmedkit
+msgid "Stimpack"
+msgstr "Аптечка"
+
+#: g_language:msgarrayitemlargemedkit
+msgid "Medikit"
+msgstr "Большая аптечка"
+
+#: g_language:msgarrayitemblackmedkit
+msgid "Berserk Pack"
+msgstr "Чёрная аптечка"
+
+#: g_language:msgarrayitemgreenarmor
+msgid "Green Armor"
+msgstr "Зелёная броня"
+
+#: g_language:msgarrayitembluearmor
+msgid "Blue Armor"
+msgstr "Синяя броня"
+
+#: g_language:msgarrayitembluesphere
+msgid "Soulsphere"
+msgstr "Шарик 100%"
+
+#: g_language:msgarrayitemmegasphere
+msgid "Megasphere"
+msgstr "Мегасфера"
+
+#: g_language:msgarrayitemhazsuit
+msgid "Envirosuit"
+msgstr "Защитный костюм"
+
+#: g_language:msgarrayitemoxygen
+msgid "Scuba"
+msgstr "Акваланг"
+
+#: g_language:msgarrayiteminvulnerability
+msgid "Invulnerability"
+msgstr "Неуязвимость"
+
+#: g_language:msgarrayitemchainsaw
+msgid "Chainsaw"
+msgstr "Бензопила"
+
+#: g_language:msgarrayitemshotgun
+msgid "Shotgun"
+msgstr "Ружьё"
+
+#: g_language:msgarrayitemdbshotgun
+msgid "Super Shotgun"
+msgstr "Двустволка"
+
+#: g_language:msgarrayitemchaingun
+msgid "Chaingun"
+msgstr "Пулемёт"
+
+#: g_language:msgarrayitemrocketlauncher
+msgid "Rocket Launcher"
+msgstr "Ракетница"
+
+#: g_language:msgarrayitemplasmarifle
+msgid "Plasma Rifle"
+msgstr "Плазмаган"
+
+#: g_language:msgarrayitembfg
+msgid "BFG9000"
+msgstr "BFG9000"
+
+#: g_language:msgarrayitemsuperminigun
+msgid "Super Chaingun"
+msgstr "Суперпулемёт"
+
+#: g_language:msgarrayitemflamethrower
+msgid "Flamethrower"
+msgstr "Огнемёт"
+
+#: g_language:msgarrayitemclip
+msgid "Clip"
+msgstr "Патроны"
+
+#: g_language:msgarrayitemammobox
+msgid "Box of Bullets"
+msgstr "Ящик патронов"
+
+#: g_language:msgarrayitem4shells
+msgid "4 Shells"
+msgstr "4 гильзы"
+
+#: g_language:msgarrayitem25shells
+msgid "Box of Shells"
+msgstr "25 гильз"
+
+#: g_language:msgarrayitem1rocket
+msgid "Rocket"
+msgstr "1 ракета"
+
+#: g_language:msgarrayitemrocketbox
+msgid "Box of Rockets"
+msgstr "5 ракет"
+
+#: g_language:msgarrayitemcell
+msgid "Energy Cell"
+msgstr "Батарейка"
+
+#: g_language:msgarrayitemlargecell
+msgid "Energy Cell Pack"
+msgstr "Батарея"
+
+#: g_language:msgarrayitemfuelcan
+msgid "Fuel Canister"
+msgstr "Канистра"
+
+#: g_language:msgarrayitembackpack
+msgid "Backpack"
+msgstr "Рюкзак"
+
+#: g_language:msgarrayitemkeyred
+msgid "Red Key"
+msgstr "Красный ключ"
+
+#: g_language:msgarrayitemkeygreen
+msgid "Green Key"
+msgstr "Зелёный ключ"
+
+#: g_language:msgarrayitemkeyblue
+msgid "Blue Key"
+msgstr "Синий ключ"
+
+#: g_language:msgarrayitembottle
+msgid "Health Globe"
+msgstr "Живая вода"
+
+#: g_language:msgarrayitemhelmet
+msgid "Armor Shard"
+msgstr "Бронешлем"
+
+#: g_language:msgarrayitemjetpack
+msgid "Jetpack"
+msgstr "Реактивный ранец"
+
+#: g_language:msgarrayiteminvis
+msgid "Invisibility"
+msgstr "Невидимость"
+
+#: g_language:msgarrayshotpistol
+msgid "Pistol shot"
+msgstr "Выстрел пистолета"
+
+#: g_language:msgarrayshotbullet
+msgid "Chaingun shot"
+msgstr "Выстрел пулемёта"
+
+#: g_language:msgarrayshotshotgun
+msgid "Shotgun shot"
+msgstr "Выстрел ружья"
+
+#: g_language:msgarrayshotssg
+msgid "Super Shotgun shot"
+msgstr "Выстрел двустволки"
+
+#: g_language:msgarrayshotimp
+msgid "Imp fireball"
+msgstr "Шар беса"
+
+#: g_language:msgarrayshotplasma
+msgid "Blue plasma"
+msgstr "Синяя плазма"
+
+#: g_language:msgarrayshotspider
+msgid "Arachnotron plasma"
+msgstr "Плазма арахнотрона"
+
+#: g_language:msgarrayshotcaco
+msgid "Cacodemon fireball"
+msgstr "Шар какодемона"
+
+#: g_language:msgarrayshotbaron
+msgid "Hell Baron projectile"
+msgstr "Выстрел барона ада"
+
+#: g_language:msgarrayshotmancub
+msgid "Mancubus gunshot"
+msgstr "Снаряд манкубуса"
+
+#: g_language:msgarrayshotrev
+msgid "Revenant projectile"
+msgstr "Снаряд скелета"
+
+#: g_language:msgarrayshotrocket
+msgid "Rocket"
+msgstr "Ракета"
+
+#: g_language:msgarrayshotbfg
+msgid "BFG ball"
+msgstr "Шар BFG"
+
+#: g_language:msgarrayshotexpl
+msgid "Explosion"
+msgstr "Взрыв"
+
+#: g_language:msgarrayshotbfgexpl
+msgid "BFG explosion"
+msgstr "Взрыв BFG"
+
+#: g_language:msgarrayshotflame
+msgid "Flame"
+msgstr "Огонь"
+
+#: g_language:msgarraymondemon
+msgid "Pinky"
+msgstr "Демон"
+
+#: g_language:msgarraymonimp
+msgid "Imp"
+msgstr "Бес"
+
+#: g_language:msgarraymonzombie
+msgid "Zombie"
+msgstr "Зомби"
+
+#: g_language:msgarraymonsergeant
+msgid "Sergeant"
+msgstr "Сержант"
+
+#: g_language:msgarraymoncyber
+msgid "Cyberdemon"
+msgstr "Кибердемон"
+
+#: g_language:msgarraymoncgun
+msgid "Commando"
+msgstr "Пулемётчик"
+
+#: g_language:msgarraymonhellbaron
+msgid "Hell Baron"
+msgstr "Барон ада"
+
+#: g_language:msgarraymonhellknight
+msgid "Hell Knight"
+msgstr "Рыцарь ада"
+
+#: g_language:msgarraymoncacodemon
+msgid "Cacodemon"
+msgstr "Какодемон"
+
+#: g_language:msgarraymonlostsoul
+msgid "Lost Soul"
+msgstr "Огненный череп"
+
+#: g_language:msgarraymonpainelemental
+msgid "Pain Elemental"
+msgstr "Авиабаза"
+
+#: g_language:msgarraymonmastermind
+msgid "Spider Mastermind"
+msgstr "Большой паук"
+
+#: g_language:msgarraymonarachnatron
+msgid "Arachnotron"
+msgstr "Арахнотрон"
+
+#: g_language:msgarraymonmancubus
+msgid "Mancubus"
+msgstr "Манкубус"
+
+#: g_language:msgarraymonrevenant
+msgid "Revenant"
+msgstr "Скелет"
+
+#: g_language:msgarraymonarchvile
+msgid "Arch-Vile"
+msgstr "Колдун"
+
+#: g_language:msgarraymonfish
+msgid "Piranha"
+msgstr "Рыба"
+
+#: g_language:msgarraymonbarrel
+msgid "Barrel"
+msgstr "Бочка"
+
+#: g_language:msgarraymonrobot
+msgid "Robot"
+msgstr "Робот"
+
+#: g_language:msgarraymonprikolist
+msgid "Prikolist"
+msgstr "Приколист"
+
+#: g_language:msgarrayareaplayerone
+msgid "Player 1"
+msgstr "Первый игрок"
+
+#: g_language:msgarrayareaplayertwo
+msgid "Player 2"
+msgstr "Второй игрок"
+
+#: g_language:msgarrayareadm
+msgid "DM Spawn Point"
+msgstr "Точка DM"
+
+#: g_language:msgarrayareaflagred
+msgid "Red Flag"
+msgstr "Красный флаг"
+
+#: g_language:msgarrayareaflagblue
+msgid "Blue Flag"
+msgstr "Синий флаг"
+
+#: g_language:msgarrayareaflagdom
+msgid "Domination Flag"
+msgstr "DOM флаг"
+
+#: g_language:msgarrayareateamred
+msgid "Red Team"
+msgstr "Красная команда"
+
+#: g_language:msgarrayareateamblue
+msgid "Blue Team"
+msgstr "Синяя команда"
+
+#: g_language:msgarraytrexit
+msgid "Exit"
+msgstr "Выход"
+
+#: g_language:msgarraytrteleport
+msgid "Teleport"
+msgstr "Телепортация"
+
+#: g_language:msgarraytrdooropen
+msgid "Open Door"
+msgstr "Открыть дверь"
+
+#: g_language:msgarraytrdoorclose
+msgid "Close Door"
+msgstr "Закрыть дверь"
+
+#: g_language:msgarraytrdoorswitch
+msgid "Door"
+msgstr "Дверь"
+
+#: g_language:msgarraytrdoor5sec
+msgid "Door (5 sec)"
+msgstr "Дверь (5 секунд)"
+
+#: g_language:msgarraytrtrapclose
+msgid "Close Trap"
+msgstr "Закрыть ловушку"
+
+#: g_language:msgarraytrtrap
+msgid "Trap"
+msgstr "Ловушка"
+
+#: g_language:msgarraytrextend
+msgid "Extender"
+msgstr "Расширитель"
+
+#: g_language:msgarraytrsecret
+msgid "Secret"
+msgstr "Секрет"
+
+#: g_language:msgarraytrliftup
+msgid "Turn stream up/left"
+msgstr "Лифт вверх/поток влево"
+
+#: g_language:msgarraytrliftdown
+msgid "Turn stream down/right"
+msgstr "Лифт вниз/поток вправо"
+
+#: g_language:msgarraytrliftswitch
+msgid "Revert stream"
+msgstr "Лифт"
+
+#: g_language:msgarraytrtexture
+msgid "Change Texture"
+msgstr "Смена текстуры"
+
+#: g_language:msgarraytron
+msgid "Enable Trigger"
+msgstr "Включить триггер"
+
+#: g_language:msgarraytroff
+msgid "Disable Trigger"
+msgstr "Выключить триггер"
+
+#: g_language:msgarraytrswitch
+msgid "Trigger Toggle"
+msgstr "Переключить триггер"
+
+#: g_language:msgarraytrsound
+msgid "Play Sound"
+msgstr "Звук"
+
+#: g_language:msgarraytrspawnmonster
+msgid "Spawn Monster"
+msgstr "Создать монстра"
+
+#: g_language:msgarraytrspawnitem
+msgid "Spawn Item"
+msgstr "Создать предмет"
+
+#: g_language:msgarraytrmusic
+msgid "Play Music"
+msgstr "Музыка"
+
+#: g_language:msgarraytrpush
+msgid "Push"
+msgstr "Ускорение"
+
+#: g_language:msgarraytrscore
+msgid "Team Score"
+msgstr "Начисление очков"
+
+#: g_language:msgarraytrmessage
+msgid "Message"
+msgstr "Сообщение"
+
+#: g_language:msgarraytrdamage
+msgid "Damage"
+msgstr "Урон"
+
+#: g_language:msgarraytrhealth
+msgid "Healer"
+msgstr "Оздоровитель"
+
+#: g_language:msgarraytrshot
+msgid "Turret"
+msgstr "Турель"
+
+#: g_language:msgarraytreffect
+msgid "Effect"
+msgstr "Эффект"
+
+#: g_language:msgpropid
+msgid "ID"
+msgstr "ID"
+
+#: g_language:msgpropx
+msgid "X"
+msgstr "X"
+
+#: g_language:msgpropy
+msgid "Y"
+msgstr "Y"
+
+#: g_language:msgpropwidth
+msgid "Width"
+msgstr "Ширина"
+
+#: g_language:msgpropheight
+msgid "Height"
+msgstr "Высота"
+
+#: g_language:msgproppaneltype
+msgid "Panel Type"
+msgstr "Тип панели"
+
+#: g_language:msgproppaneltex
+msgid "Texture"
+msgstr "Текстура"
+
+#: g_language:msgproppanelalpha
+msgid "Transparency"
+msgstr "Прозрачность"
+
+#: g_language:msgproppanelblend
+msgid "Blending"
+msgstr "Смешивание"
+
+#: g_language:msgpropdmonly
+msgid "DM Only"
+msgstr "Только в DM"
+
+#: g_language:msgpropitemfalls
+msgid "Falls"
+msgstr "Падает"
+
+#: g_language:msgpropdirection
+msgid "Direction"
+msgstr "Направление"
+
+#: g_language:msgproptrtype
+msgid "Trigger Type"
+msgstr "Тип триггера"
+
+#: g_language:msgproptrenabled
+msgid "Enabled"
+msgstr "Включён"
+
+#: g_language:msgproptrtexturepanel
+msgid "Textured Panel"
+msgstr "Панель с текстурой"
+
+#: g_language:msgproptractivation
+msgid "Activation Type"
+msgstr "Тип активации"
+
+#: g_language:msgproptrkeys
+msgid "Keys"
+msgstr "Ключи"
+
+#: g_language:msgproptrd2d
+msgid "D2D-like"
+msgstr "Как в D2D"
+
+#: g_language:msgproptrsilent
+msgid "Silent"
+msgstr "Без звука"
+
+#: g_language:msgproptrcount
+msgid "Count"
+msgstr "Количество"
+
+#: g_language:msgproptrinterval
+msgid "Interval (in ticks)"
+msgstr "Интервал (в тиках)"
+
+#: g_language:msgproptrhealth
+msgid "Health"
+msgstr "Здоровье"
+
+#: g_language:msgproptrnextmap
+msgid "Next Map"
+msgstr "След. карта"
+
+#: g_language:msgproptrteleportto
+msgid "Teleport to"
+msgstr "Точка телепорта"
+
+#: g_language:msgproptrteleportsilent
+msgid "Silent"
+msgstr "Тихий телепорт"
+
+#: g_language:msgproptrteleportdir
+msgid "New Direction"
+msgstr "Направление после"
+
+#: g_language:msgproptrdoorpanel
+msgid "Door Panel"
+msgstr "Панель двери"
+
+#: g_language:msgproptrtrappanel
+msgid "Trap Panel"
+msgstr "Панель ловушки"
+
+#: g_language:msgproptrexarea
+msgid "Action Area"
+msgstr "Область воздействия"
+
+#: g_language:msgproptrexdelay
+msgid "Delay"
+msgstr "Задержка"
+
+#: g_language:msgproptrexcount
+msgid "Count"
+msgstr "Счётчик"
+
+#: g_language:msgproptrexmonster
+msgid "Monster ID"
+msgstr "ID монстра"
+
+#: g_language:msgproptrexrandom
+msgid "Random"
+msgstr "Случайный"
+
+#: g_language:msgproptrliftpanel
+msgid "Stream Panel"
+msgstr "Панель лифта"
+
+#: g_language:msgproptrtextureonce
+msgid "Once"
+msgstr "Один раз"
+
+#: g_language:msgproptrtextureanimonce
+msgid "Animate Once"
+msgstr "Аним. один раз"
+
+#: g_language:msgproptrsoundname
+msgid "Sound                              (snd)"
+msgstr "Звук                               (snd)"
+
+#: g_language:msgproptrsoundvolume
+msgid "Volume"
+msgstr "Громкость"
+
+#: g_language:msgproptrsoundpan
+msgid "Pan"
+msgstr "Стерео"
+
+#: g_language:msgproptrsoundcount
+msgid "Loops"
+msgstr "Играть раз"
+
+#: g_language:msgproptrsoundlocal
+msgid "Local"
+msgstr "Локальный"
+
+#: g_language:msgproptrsoundswitch
+msgid "Switch"
+msgstr "Переключение"
+
+#: g_language:msgproptrfxtype
+msgid "Effect"
+msgstr "Эффект"
+
+#: g_language:msgproptrspawnto
+msgid "Spawn at"
+msgstr "Точка появления"
+
+#: g_language:msgproptrspawnmax
+msgid "Maximum"
+msgstr "Максимум"
+
+#: g_language:msgproptrspawndelay
+msgid "Autospawn (in ticks)"
+msgstr "Автоспаун (в тиках)"
+
+#: g_language:msgproptrmonstertype
+msgid "Monster"
+msgstr "Тип монстра"
+
+#: g_language:msgproptrmonsteractive
+msgid "Active"
+msgstr "Активен"
+
+#: g_language:msgproptrmonsterbehaviour
+msgid "Behaviour"
+msgstr "Поведение"
+
+#: g_language:msgproptrmonsterbehaviour0
+msgid "Normal"
+msgstr "Обычное"
+
+#: g_language:msgproptrmonsterbehaviour1
+msgid "Killer"
+msgstr "Убийца"
+
+#: g_language:msgproptrmonsterbehaviour2
+msgid "Maniac"
+msgstr "Маньяк"
+
+#: g_language:msgproptrmonsterbehaviour3
+msgid "Insane"
+msgstr "Поехавший"
+
+#: g_language:msgproptrmonsterbehaviour4
+msgid "Cannibal"
+msgstr "Каннибал"
+
+#: g_language:msgproptrmonsterbehaviour5
+msgid "Good"
+msgstr "Добрый"
+
+#: g_language:msgproptritemtype
+msgid "Item"
+msgstr "Тип предмета"
+
+#: g_language:msgproptrmusicname
+msgid "Music"
+msgstr "Музыка"
+
+#: g_language:msgproptrmusicact
+msgid "Action                             (m)"
+msgstr "Действие                           (m)"
+
+#: g_language:msgproptrmusicon
+msgid "Play"
+msgstr "Включить"
+
+#: g_language:msgproptrmusicoff
+msgid "Pause"
+msgstr "Выключить"
+
+#: g_language:msgproptrpushangle
+msgid "Angle"
+msgstr "Угол"
+
+#: g_language:msgproptrpushforce
+msgid "Force"
+msgstr "Сила"
+
+#: g_language:msgproptrpushreset
+msgid "Reset velocity"
+msgstr "Сбрасывать скорость"
+
+#: g_language:msgproptrscoreact
+msgid "Action                             (s)"
+msgstr "Действие                           (s)"
+
+#: g_language:msgproptrscoreact0
+msgid "Add points"
+msgstr "Прибавить очки"
+
+#: g_language:msgproptrscoreact1
+msgid "Subtract points"
+msgstr "Отнять очки"
+
+#: g_language:msgproptrscoreact2
+msgid "Team Wins"
+msgstr "Выигрыш"
+
+#: g_language:msgproptrscoreact3
+msgid "Team Loses"
+msgstr "Проигрыш"
+
+#: g_language:msgproptrscoreteam
+msgid "Team"
+msgstr "Команда"
+
+#: g_language:msgproptrscoreteam0
+msgid "My"
+msgstr "Своя"
+
+#: g_language:msgproptrscoreteam1
+msgid "Enemy"
+msgstr "Соперника"
+
+#: g_language:msgproptrscoreteam2
+msgid "Red"
+msgstr "Красная"
+
+#: g_language:msgproptrscoreteam3
+msgid "Blue"
+msgstr "Синяя"
+
+#: g_language:msgproptrscorecon
+msgid "Console message"
+msgstr "Сообщение в консоль"
+
+#: g_language:msgproptrscoremsg
+msgid "Game message"
+msgstr "Сообщение в игру"
+
+#: g_language:msgproptrdamagevalue
+msgid "Damage"
+msgstr "Ущерб"
+
+#: g_language:msgproptrdamagekind
+msgid "Damage type"
+msgstr "Тип урона"
+
+#: g_language:msgproptrdamagekind0
+msgid "HIT_SOME"
+msgstr "HIT_SOME"
+
+#: g_language:msgproptrdamagekind3
+msgid "HIT_TRAP"
+msgstr "HIT_TRAP"
+
+#: g_language:msgproptrdamagekind4
+msgid "HIT_FALL"
+msgstr "HIT_FALL"
+
+#: g_language:msgproptrdamagekind5
+msgid "HIT_WATER"
+msgstr "HIT_WATER"
+
+#: g_language:msgproptrdamagekind6
+msgid "HIT_ACID"
+msgstr "HIT_ACID"
+
+#: g_language:msgproptrdamagekind7
+msgid "HIT_ELECTRO"
+msgstr "HIT_ELECTRO"
+
+#: g_language:msgproptrdamagekind8
+msgid "HIT_FLAME"
+msgstr "HIT_FLAME"
+
+#: g_language:msgproptrhealthmax
+msgid "To maximum"
+msgstr "До максимума"
+
+#: g_language:msgproptrshottype
+msgid "Projectile"
+msgstr "Снаряд"
+
+#: g_language:msgproptrshotsound
+msgid "Shot sound"
+msgstr "Звук выстрела"
+
+#: g_language:msgproptrshotangle
+msgid "Angle"
+msgstr "Угол"
+
+#: g_language:msgproptrshotacc
+msgid "Spread"
+msgstr "Разброс"
+
+#: g_language:msgproptrshotto
+msgid "Auto targeting"
+msgstr "Автонаведение"
+
+#: g_language:msgproptrshotto0
+msgid "None"
+msgstr "Нет"
+
+#: g_language:msgproptrshotto1
+msgid "Monsters"
+msgstr "Монстры"
+
+#: g_language:msgproptrshotto2
+msgid "Players"
+msgstr "Игроки"
+
+#: g_language:msgproptrshotto3
+msgid "Red team"
+msgstr "Красная команда"
+
+#: g_language:msgproptrshotto4
+msgid "Blue team"
+msgstr "Синяя команда"
+
+#: g_language:msgproptrshotto5
+msgid "Monsters, players"
+msgstr "Монстры, игроки"
+
+#: g_language:msgproptrshotto6
+msgid "Players, monsters"
+msgstr "Игроки, монстры"
+
+#: g_language:msgproptrshotaim
+msgid "Auto-aiming mode"
+msgstr "Режим автонаведения"
+
+#: g_language:msgproptrshotaim0
+msgid "Trigger area"
+msgstr "Область триггера"
+
+#: g_language:msgproptrshotaim1
+msgid "Entire map"
+msgstr "По всей карте"
+
+#: g_language:msgproptrshotaim2
+msgid "Trace trigger area"
+msgstr "Область триггера с трассировкой"
+
+#: g_language:msgproptrshotaim3
+msgid "Trace entire map"
+msgstr "Вся карта с трассировкой"
+
+#: g_language:msgproptrshotammo
+msgid "Ammo limit"
+msgstr "Кол-во патронов"
+
+#: g_language:msgproptrshotreload
+msgid "Reload interval (in ticks)"
+msgstr "Перезарядка (в тиках)"
+
+#: g_language:msgproptrshotsight
+msgid "Sight interval (in ticks)"
+msgstr "Реакция (в тиках)"
+
+#: g_language:msgproptrshotpanel
+msgid "Indicator panel"
+msgstr "Панель индикации"
+
+#: g_language:msgproptrmessagekind
+msgid "Message kind"
+msgstr "Тип сообщения"
+
+#: g_language:msgproptrmessagekind0
+msgid "Console message"
+msgstr "Текст в консоли"
+
+#: g_language:msgproptrmessagekind1
+msgid "Event message"
+msgstr "Крупный текст по центру"
+
+#: g_language:msgproptrmessageto
+msgid "Send to"
+msgstr "Получатель"
+
+#: g_language:msgproptrmessageto0
+msgid "Me"
+msgstr "Я"
+
+#: g_language:msgproptrmessageto1
+msgid "My team"
+msgstr "Моя команда"
+
+#: g_language:msgproptrmessageto2
+msgid "Enemy team"
+msgstr "Вражеская команда"
+
+#: g_language:msgproptrmessageto3
+msgid "Red team"
+msgstr "Красная команда"
+
+#: g_language:msgproptrmessageto4
+msgid "Blue team"
+msgstr "Синяя команда"
+
+#: g_language:msgproptrmessageto5
+msgid "Everyone"
+msgstr "Все игроки"
+
+#: g_language:msgproptrmessagetext
+msgid "Message text"
+msgstr "Текст сообщения"
+
+#: g_language:msgproptrmessagetime
+msgid "Time (in ticks)"
+msgstr "Время показа (в тиках)"
+
+#: g_language:msgproptreffecttype
+msgid "Effect type"
+msgstr "Тип эффекта"
+
+#: g_language:msgproptreffectsubtype
+msgid "Effect subtype"
+msgstr "Подтип эффекта"
+
+#: g_language:msgproptreffectcolor
+msgid "Effect color"
+msgstr "Цвет эффекта"
+
+#: g_language:msgproptreffectcenter
+msgid "Trigger center"
+msgstr "По центру"
+
+#: g_language:msgproptreffectvelx
+msgid "Horizontal speed"
+msgstr "Скорость по горизонтали"
+
+#: g_language:msgproptreffectvely
+msgid "Vertical speed"
+msgstr "Скорость по вертикали"
+
+#: g_language:msgproptreffectspl
+msgid "Speed variance left"
+msgstr "Отклонение влево"
+
+#: g_language:msgproptreffectspr
+msgid "Speed variance right"
+msgstr "Отклонение вправо"
+
+#: g_language:msgproptreffectspu
+msgid "Speed variance up"
+msgstr "Отклонение вверх"
+
+#: g_language:msgproptreffectspd
+msgid "Speed variance down"
+msgstr "Отклонение вниз"
+
+#: g_language:msgproptreffectparticle
+msgid "Particle generator"
+msgstr "Генератор частиц"
+
+#: g_language:msgproptreffectanimation
+msgid "Animation"
+msgstr "Анимация"
+
+#: g_language:msgproptreffectsliquid
+msgid "Water splash"
+msgstr "Брызги воды"
+
+#: g_language:msgproptreffectlliquid
+msgid "Light colored splash"
+msgstr "Цветные брызги (светлее)"
+
+#: g_language:msgproptreffectdliquid
+msgid "Dark colored splash"
+msgstr "Цветные брызги (темнее)"
+
+#: g_language:msgproptreffectblood
+msgid "Blood"
+msgstr "Кровь"
+
+#: g_language:msgproptreffectspark
+msgid "Sparks"
+msgstr "Искры"
+
+#: g_language:msgproptreffectbubble
+msgid "Bubbles"
+msgstr "Пузырьки"
+
+#: g_language:msgmsgerror
+msgid "Error"
+msgstr "Ошибка"
+
+#: g_language:msgmsgwrongtexwidth
+msgid "Panel Width must be a multiple of Texture Width (%d)"
+msgstr "Ширина панели должна быть кратна ширине текстуры (%d)"
+
+#: g_language:msgmsgwrongtexheight
+msgid "Panel Height must be a multiple of Texture Height (%d)"
+msgstr "Высота панели должна быть кратна высоте текстуры (%d)"
+
+#: g_language:msgmsgwrongalpha
+msgid "Transparency must be in [0..255] interval"
+msgstr "Прозрачность должна быть в интервале [0..255]"
+
+#: g_language:msgmsgwrongsize
+msgid "Width and Height must be greater than 0"
+msgstr "Ширина и высота должны быть больше 0"
+
+#: g_language:msgmsgwrongxy
+msgid "X or Y coordinate hasn''t been set"
+msgstr "Не задана X или Y координата"
+
+#: g_language:msgmsgtexturealready
+msgid "Texture \"%s\" already exists"
+msgstr "Текстура \"%s\" уже добавлена"
+
+#: g_language:msgmsgresname64
+msgid "Resource \"%s\" name must not be longer than 64 chars"
+msgstr "Имя ресурса \"%s\" должно быть не длиннее 64 символов"
+
+#: g_language:msgmsgchooseitem
+msgid "Select Item"
+msgstr "Выберите предмет"
+
+#: g_language:msgmsgchoosemonster
+msgid "Select Monster"
+msgstr "Выберите монстра"
+
+#: g_language:msgmsgchoosearea
+msgid "Select Area"
+msgstr "Выберите область"
+
+#: g_language:msgmsgchoosetexture
+msgid "Select Texture"
+msgstr "Выберите текстуру"
+
+#: g_language:msgmsgchooseres
+msgid "Resource hasn''t been selected"
+msgstr "Не выбран ресурс"
+
+#: g_language:msgmsgexit
+msgid "Exit"
+msgstr "Выход"
+
+#: g_language:msgmsgexitpromt
+msgid "Leaving so soon?"
+msgstr "Уже уходите?"
+
+#: g_language:msgmsgdeltexture
+msgid "Delete the texture"
+msgstr "Удалить текстуру"
+
+#: g_language:msgmsgdeltexturepromt
+msgid "Delete the texture \"%s\" ?"
+msgstr "Удалить текстуру \"%s\" ?"
+
+#: g_language:msgmsgdeltexturecant
+msgid "Can''t delete texture in use. Replace it on all panels with this texture."
+msgstr "Нельзя удалить используемую текстуру. Замените её на каждой панели с ней."
+
+#: g_language:msgmsgdelrecent
+msgid "File does not longer exist"
+msgstr "Этого файла больше нет"
+
+#: g_language:msgmsgdelrecentpromt
+msgid "Remove entry from recent list?"
+msgstr "Убрать запись из истории?"
+
+#: g_language:msgmsgclearmap
+msgid "New map"
+msgstr "Новая карта"
+
+#: g_language:msgmsgclearmappromt
+msgid "Clear the entire map?"
+msgstr "Очистить всю карту?"
+
+#: g_language:msgmsgdeletemap
+msgid "Delete the map"
+msgstr "Удалить карту"
+
+#: g_language:msgmsgdeletemappromt
+msgid "Delete the map \"%s\" from \"%s\" ?"
+msgstr "Удалить карту \"%s\" из \"%s\" ?"
+
+#: g_language:msgmsgmapdeleted
+msgid "Map is deleted"
+msgstr "Карта удалена"
+
+#: g_language:msgmsgmapdeletedpromt
+msgid "Map \"%s\" is deleted"
+msgstr "Карта \"%s\" удалена"
+
+#: g_language:msgmsgreopenmappromt
+msgid "Reopen this map?"
+msgstr "Загрузить карту заново?"
+
+#: g_language:msgmsgexecerror
+msgid "Game start error"
+msgstr "Ошибка запуска игры"
+
+#: g_language:msgmsgsounderror
+msgid "Can''t play sound"
+msgstr "Не удалось проиграть звук"
+
+#: g_language:msgmsgwaderror
+msgid "Can''t open WAD: %s"
+msgstr "Ошибка при открытии WAD: %s"
+
+#: g_language:msgmsgreserror
+msgid "Can''t read resource: %s:%s\\%s"
+msgstr "Ошибка при чтении ресурса: %s:%s\\%s"
+
+#: g_language:msgmsgpacked
+msgid "Map \"%s\" with resources saved to \"%s\""
+msgstr "Карта \"%s\" вместе с ресурсами сохранена в \"%s\""
+
+#: g_language:msgmsgmapexists
+msgid "Map \"%s\" already exists. Overwrite?"
+msgstr "Карта \"%s\" уже существует. Заменить?"
+
+#: g_language:msgmsgsavemap
+msgid "Save the map"
+msgstr "Сохранить карту"
+
+#: g_language:msghintteleport
+msgid "Choose destination of Teleport"
+msgstr "Выберите точку телепорта"
+
+#: g_language:msghintspawn
+msgid "Choose Spawn point"
+msgstr "Выберите точку появления"
+
+#: g_language:msghintpaneldoor
+msgid "Choose Door"
+msgstr "Выберите панель двери"
+
+#: g_language:msghintpaneltexture
+msgid "Choose textured Panel"
+msgstr "Выберите панель с текстурой"
+
+#: g_language:msghintpanelshot
+msgid "Choose textured shot indicator Panel"
+msgstr "Выберите панель индикации выстрела с текстурой"
+
+#: g_language:msghintpanellift
+msgid "Choose Stream Panel"
+msgstr "Выберите панель лифта"
+
+#: g_language:msghintmonster
+msgid "Choose Monster"
+msgstr "Выберите монстра"
+
+#: g_language:msghintextarea
+msgid "Specify action Area"
+msgstr "Укажите область воздействия"
+
+#: g_language:msghintwidth
+msgid "Width: %d"
+msgstr "Ширина: %d"
+
+#: g_language:msghintheight
+msgid "Height: %d"
+msgstr "Высота: %d"
+
+#: g_language:msgmenufile
+msgid "File"
+msgstr "Файл"
+
+#: g_language:msgmenufilenew
+msgid "New"
+msgstr "Создать"
+
+#: g_language:msgmenufileopen
+msgid "Open..."
+msgstr "Открыть..."
+
+#: g_language:msgmenufilesave
+msgid "Save"
+msgstr "Сохранить"
+
+#: g_language:msgmenufilesaveas
+msgid "Save As..."
+msgstr "Сохранить как..."
+
+#: g_language:msgmenufileopenwad
+msgid "Select Map..."
+msgstr "Выбрать карту..."
+
+#: g_language:msgmenufilereopen
+msgid "Revert to Saved"
+msgstr "Открыть заново"
+
+#: g_language:msgmenufilesavemini
+msgid "Save Minimap..."
+msgstr "Сохранить мини-карту..."
+
+#: g_language:msgmenufiledelete
+msgid "Delete from WAD..."
+msgstr "Удалить из WAD..."
+
+#: g_language:msgmenufilepackmap
+msgid "Pack to WAD..."
+msgstr "Упаковать в WAD..."
+
+#: g_language:msgmenufileexit
+msgid "Exit"
+msgstr "Выход"
+
+#: g_language:msgmenuedit
+msgid "Edit"
+msgstr "Правка"
+
+#: g_language:msgmenueditundo
+msgid "Undo"
+msgstr "Отменить"
+
+#: g_language:msgmenueditcopy
+msgid "Copy"
+msgstr "Копировать"
+
+#: g_language:msgmenueditcut
+msgid "Cut"
+msgstr "Вырезать"
+
+#: g_language:msgmenueditpaste
+msgid "Paste"
+msgstr "Вставить"
+
+#: g_language:msgmenueditselectall
+msgid "Select All"
+msgstr "Выделить всё"
+
+#: g_language:msgmenuedittofore
+msgid "Bring to Front"
+msgstr "Передвинуть вперёд"
+
+#: g_language:msgmenuedittoback
+msgid "Send to Back"
+msgstr "Передвинуть назад"
+
+#: g_language:msgmenutools
+msgid "Tools"
+msgstr "Инструменты"
+
+#: g_language:msgmenutoolssnapgrid
+msgid "Snap to Grid"
+msgstr "Привязка к сетке"
+
+#: g_language:msgmenutoolsminimap
+msgid "Show Minimap"
+msgstr "Показать Мини-карту"
+
+#: g_language:msgmenutoolsstepgrid
+msgid "Switch Grid Granularity"
+msgstr "Переключить шаг сетки"
+
+#: g_language:msgmenutoolsshowedges
+msgid "Show Map Bounds"
+msgstr "Показывать границы карты"
+
+#: g_language:msgmenutoolslayers
+msgid "Layers"
+msgstr "Слои"
+
+#: g_language:msgmenuserv
+msgid "Service"
+msgstr "Сервис"
+
+#: g_language:msgmenuservtest
+msgid "Analyse Map..."
+msgstr "Проверка карты..."
+
+#: g_language:msgmenuservopt
+msgid "Optimize Map..."
+msgstr "Оптимизация карты..."
+
+#: g_language:msgmenuservpreview
+msgid "Preview Mode"
+msgstr "Предварительный просмотр"
+
+#: g_language:msgmenuservlaunch
+msgid "Run Test"
+msgstr "Тест карты в игре"
+
+#: g_language:msgmenusets
+msgid "Settings"
+msgstr "Настройка"
+
+#: g_language:msgmenusetsmap
+msgid "Map Properties..."
+msgstr "Свойства карты..."
+
+#: g_language:msgmenusetseditor
+msgid "Preferences..."
+msgstr "Настройки..."
+
+#: g_language:msgmenusetslaunch
+msgid "In-game test settings"
+msgstr "Настройки теста в игре"
+
+#: g_language:msgmenuhelp
+msgid "Help"
+msgstr "Справка"
+
+#: g_language:msgmenuhelpabout
+msgid "About"
+msgstr "О программе"
+
+#: g_language:msgmenulayerback
+msgid "1. Background"
+msgstr "1. Фон"
+
+#: g_language:msgmenulayerwall
+msgid "2. Walls"
+msgstr "2. Стены"
+
+#: g_language:msgmenulayerfore
+msgid "3. Foreground"
+msgstr "3. Передний план"
+
+#: g_language:msgmenulayerstair
+msgid "4. Steps"
+msgstr "4. Ступени"
+
+#: g_language:msgmenulayerwater
+msgid "5. Liquids"
+msgstr "5. Жидкости"
+
+#: g_language:msgmenulayeritem
+msgid "6. Items"
+msgstr "6. Предметы"
+
+#: g_language:msgmenulayermonster
+msgid "7. Monsters"
+msgstr "7. Монстры"
+
+#: g_language:msgmenulayerarea
+msgid "8. Areas"
+msgstr "8. Области"
+
+#: g_language:msgmenulayertrigger
+msgid "9. Triggers"
+msgstr "9. Триггеры"
+
+#: g_language:msgmenutbnew
+msgid "New Map"
+msgstr "Новая карта"
+
+#: g_language:msgmenutbopen
+msgid "Open Map"
+msgstr "Открыть карту"
+
+#: g_language:msgmenutbsave
+msgid "Save Map"
+msgstr "Сохранить карту"
+
+#: g_language:msgmenutbopenwad
+msgid "Open another Map from same WAD"
+msgstr "Открыть другую карту из этого же WAD''а"
+
+#: g_language:msgmenutbminimap
+msgid "Show Mini-map"
+msgstr "Показать мини-карту"
+
+#: g_language:msgmenutblayers
+msgid "Show/Hide Objects"
+msgstr "Отрисовка панелей/объектов"
+
+#: g_language:msgmenutbgrid
+msgid "Grid On/Off"
+msgstr "Включить/Отключить отображение сетки"
+
+#: g_language:msgmenutbgridstep
+msgid "Switch Grid step"
+msgstr "Изменить шаг сетки"
+
+#: g_language:msgmenutblaunch
+msgid "Run Test"
+msgstr "Тест карты в игре"
+
+#: g_language:msgmenulaunchsets
+msgid "Settings..."
+msgstr "Параметры..."
+
+#: g_language:msgcapfxtype
+msgid "Select Effect type"
+msgstr "Выберите тип эффекта"
+
+#: g_language:msgcapmonstertype
+msgid "Select Monster type"
+msgstr "Выберите тип монстра"
+
+#: g_language:msgcapitemtype
+msgid "Select Item type"
+msgstr "Выберите тип предмета"
+
+#: g_language:msgcapabout
+msgid "About Map Editor"
+msgstr "О программе"
+
+#: g_language:msgcapact
+msgid "Activation type"
+msgstr "Тип активации"
+
+#: g_language:msgcapaddsky
+msgid "Select Sky Texture"
+msgstr "Выберите текстуру неба"
+
+#: g_language:msgcapaddsound
+msgid "Select Sound/Music"
+msgstr "Выберите звук/музыку"
+
+#: g_language:msgcapaddtexture
+msgid "Select Texture"
+msgstr "Выберите текстуру"
+
+#: g_language:msgcapkeys
+msgid "Keys"
+msgstr "Ключи"
+
+#: g_language:msgcaptest
+msgid "Analyse Map"
+msgstr "Проверка карты"
+
+#: g_language:msgcapopt
+msgid "Optimize Map"
+msgstr "Оптимизация карты"
+
+#: g_language:msgcapsets
+msgid "Map Properties"
+msgstr "Свойства карты"
+
+#: g_language:msgcaplaunch
+msgid "In-game test Settings"
+msgstr "Настройки теста в игре"
+
+#: g_language:msgcapes
+msgid "Editor Preferences"
+msgstr "Настройки редактора"
+
+#: g_language:msgcappack
+msgid "Pack Map"
+msgstr "Упаковать карту"
+
+#: g_language:msgcapsave
+msgid "Save Map"
+msgstr "Сохранить карту"
+
+#: g_language:msgcapmini
+msgid "Save Minimap"
+msgstr "Сохранить мини-карту"
+
+#: g_language:msgcapselect
+msgid "Select Map"
+msgstr "Выберите карту"
+
+#: g_language:msgcapopen
+msgid "Open Map"
+msgstr "Открыть карту"
+
+#: g_language:msgcapremove
+msgid "Remove Map"
+msgstr "Удалить карту"
+
+#: g_language:msgcaptexture
+msgid "Texture: %dx%d"
+msgstr "Текстура: %dx%d"
+
+#: g_language:msgcapanimation
+msgid "Animation: %dx%d, %d frames"
+msgstr "Анимация: %dx%d, %d кадров"
+
+#: g_language:msgcapstatselected
+msgid "Selected objects: %d"
+msgstr "Выделено объектов: %d"
+
+#: g_language:msgctrlpropkey
+msgid "Property"
+msgstr "Свойство"
+
+#: g_language:msgctrlpropvalue
+msgid "Value"
+msgstr "Значение"
+
+#: g_language:msgctrlpanels
+msgid "Panels"
+msgstr "Панели"
+
+#: g_language:msgctrlitems
+msgid "Items"
+msgstr "Предметы"
+
+#: g_language:msgctrlmonsters
+msgid "Monsters"
+msgstr "Монстры"
+
+#: g_language:msgctrlareas
+msgid "Areas"
+msgstr "Области"
+
+#: g_language:msgctrltriggers
+msgid "Triggers"
+msgstr "Триггеры"
+
+#: g_language:msgctrllisttexture
+msgid "Texture List"
+msgstr "Список текстур"
+
+#: g_language:msgctrllistitem
+msgid "Item List"
+msgstr "Список предметов"
+
+#: g_language:msgctrllistmonster
+msgid "Monster List"
+msgstr "Список монстров"
+
+#: g_language:msgctrllistarea
+msgid "Area List"
+msgstr "Список областей"
+
+#: g_language:msgctrllisttrigger
+msgid "Trigger List"
+msgstr "Список триггеров"
+
+#: g_language:msgctrllistactive
+msgid "Activation Type"
+msgstr "Тип активации триггера"
+
+#: g_language:msgctrllistkeys
+msgid "Keys Needed"
+msgstr "Ключи для активации"
+
+#: g_language:msgctrlpreview
+msgid "Texture Preview"
+msgstr "Предварительный просмотр"
+
+#: g_language:msgctrlitemdm
+msgid "DM Only"
+msgstr "Только в DM"
+
+#: g_language:msgctrlitemfalls
+msgid "Falls"
+msgstr "Падает"
+
+#: g_language:msgctrlleft
+msgid "Left"
+msgstr "Влево"
+
+#: g_language:msgctrlright
+msgid "Right"
+msgstr "Вправо"
+
+#: g_language:msgctrlactplayerclose
+msgid "Player Collides"
+msgstr "Игрок близко"
+
+#: g_language:msgctrlactmonsterclose
+msgid "Monster Collides"
+msgstr "Монстр близко"
+
+#: g_language:msgctrlactplayerpress
+msgid "Player Pressed"
+msgstr "Игрок нажал"
+
+#: g_language:msgctrlactmonsterpress
+msgid "Monster Pressed"
+msgstr "Монстр нажал"
+
+#: g_language:msgctrlactshot
+msgid "Shot"
+msgstr "Выстрел"
+
+#: g_language:msgctrlactnomonster
+msgid "No Monsters"
+msgstr "Монстров нет"
+
+#: g_language:msgctrlkeysred
+msgid "Red Key"
+msgstr "Красный ключ"
+
+#: g_language:msgctrlkeysgreen
+msgid "Green Key"
+msgstr "Зелёный ключ"
+
+#: g_language:msgctrlkeysblue
+msgid "Blue Key"
+msgstr "Синий ключ"
+
+#: g_language:msgctrlkeysteamred
+msgid "Red Team"
+msgstr "Красная команда"
+
+#: g_language:msgctrlkeysteamblue
+msgid "Blue Team"
+msgstr "Синяя команда"
+
+#: g_language:msgctrloptgb
+msgid "Optimization"
+msgstr "Оптимизация"
+
+#: g_language:msgctrlopttexture
+msgid "Texture Optimization"
+msgstr "Оптимизация текстур"
+
+#: g_language:msgctrloptpanel
+msgid "Panel Optimization"
+msgstr "Оптимизация панелей"
+
+#: g_language:msgctrloptwall
+msgid "Walls"
+msgstr "Стены"
+
+#: g_language:msgctrloptfore
+msgid "Foreground"
+msgstr "Передний план"
+
+#: g_language:msgctrloptback
+msgid "Background"
+msgstr "Фон"
+
+#: g_language:msgctrloptstair
+msgid "Steps"
+msgstr "Ступени"
+
+#: g_language:msgctrloptwater
+msgid "Water"
+msgstr "Вода"
+
+#: g_language:msgctrloptacid1
+msgid "Acid 1"
+msgstr "Кислота 1"
+
+#: g_language:msgctrloptacid2
+msgid "Acid 2"
+msgstr "Кислота 2"
+
+#: g_language:msgctrloptlift
+msgid "Streams"
+msgstr "Лифты"
+
+#: g_language:msgctrloptblockmon
+msgid "Monster Boundary"
+msgstr "Блокиратор монстров"
+
+#: g_language:msgctrloptdesctexture
+msgid "Deletes unused textures from texture list."
+msgstr "Удаляет неиспользуемые текстуры из списка."
+
+#: g_language:msgctrloptdescpanel
+msgid "Merges nearby panels of same type. Increases game performance."
+msgstr "Объединяет одинаковые панели, расположенные вплотную друг к другу, увеличивая тем самым производительность игры."
+
+#: g_language:msgctrlsetsstats
+msgid "Statistics:"
+msgstr "Статистика:"
+
+#: g_language:msgctrlsetssizes
+msgid "Map Size:"
+msgstr "Размеры:"
+
+#: g_language:msgctrllaunchdm
+msgid "Deathmatch"
+msgstr "Deathmatch"
+
+#: g_language:msgctrllaunchtdm
+msgid "Team Deathmatch"
+msgstr "Team Deathmatch"
+
+#: g_language:msgctrllaunchctf
+msgid "Capture the Flag"
+msgstr "Capture the Flag"
+
+#: g_language:msgctrllaunchcoop
+msgid "Cooperative"
+msgstr "Cooperative"
+
+#: g_language:msgctrllaunch2p
+msgid "Two Players"
+msgstr "Два игрока"
+
+#: g_language:msgctrllaunchff
+msgid "Friendly Fire"
+msgstr "Урон своих"
+
+#: g_language:msgctrllaunchexit
+msgid "Enable Exit"
+msgstr "Включить выход"
+
+#: g_language:msgctrllaunchweapons
+msgid "Weapons Stay"
+msgstr "Оружие остаётся"
+
+#: g_language:msgctrllaunchmonsters
+msgid "Enable Monsters"
+msgstr "Монстры в DM"
+
+#: g_language:msgctrllaunchclose
+msgid "Close the game after exiting the map"
+msgstr "Закрыть игру после выхода из карты"
+
+#: g_language:msgctrllaunchopen
+msgid "Select Doom 2D: Forever executable"
+msgstr "Выберите файл игры Doom 2D: Forever"
+
+#: g_language:msgctrlesgrid
+msgid "Show Grid"
+msgstr "Показывать сетку"
+
+#: g_language:msgctrlestexture
+msgid "Show Panel Texture"
+msgstr "Показывать текстуру панели"
+
+#: g_language:msgctrlespanelsize
+msgid "Show Panel Size"
+msgstr "Показывать размеры панели "
+
+#: g_language:msgctrlescheckerboard
+msgid "Use Checkerboard"
+msgstr "Использовать шахматку"
+
+#: g_language:msgctrlpacktextures
+msgid "Textures"
+msgstr "Текстуры"
+
+#: g_language:msgctrlpacksky
+msgid "Sky"
+msgstr "Небо"
+
+#: g_language:msgctrlpackmusic
+msgid "Music"
+msgstr "Музыку"
+
+#: g_language:msgctrlpackadd
+msgid "Don''t overwrite WAD"
+msgstr "Не перезаписывать WAD"
+
+#: g_language:msgctrlpacknonstd
+msgid "Non-standard Resources only"
+msgstr "Только нестандартные ресурсы"
+
+#: g_language:msglabtexwidth
+msgid "Texture Width:"
+msgstr "Ширина текстуры:"
+
+#: g_language:msglabtexheight
+msgid "Texture Height:"
+msgstr "Высота текстуры:"
+
+#: g_language:msglabspectrum
+msgid "Show the Spectrum"
+msgstr "Показать спектр"
+
+#: g_language:msglababoutver
+msgid "Version 2.1.5"
+msgstr "Версия 2.1.5"
+
+#: g_language:msglababoutauthor
+msgid "Author: rs.falcon"
+msgstr "Автор: rs.falcon"
+
+#: g_language:msglababoutauthor2
+msgid "Additions: Pss"
+msgstr "Дорабатывал: Pss"
+
+#: g_language:msglababoutmail
+msgid "rmw.falcon@mail.ru"
+msgstr "rmw.falcon@mail.ru"
+
+#: g_language:msglababoutmail2
+msgid "pssxx@mail.ru"
+msgstr "pssxx@mail.ru"
+
+#: g_language:msglababoutsite
+msgid "Doom 2D: Forever Web-site"
+msgstr "Сайт Doom 2D: Forever"
+
+#: g_language:msglababouthttp
+msgid "www.doom2d.org"
+msgstr "www.doom2d.org"
+
+#: g_language:msglabaddwads
+msgid "WAD Files:"
+msgstr "Список WAD-файлов:"
+
+#: g_language:msglabaddsections
+msgid "WAD Sections:"
+msgstr "Список секций WAD-файла:"
+
+#: g_language:msglabsetsname
+msgid "Map Name:"
+msgstr "Название карты:"
+
+#: g_language:msglabsetsdesc
+msgid "Map Description"
+msgstr "Описание карты:"
+
+#: g_language:msglabsetsauthor
+msgid "Author:"
+msgstr "Автор:"
+
+#: g_language:msglabsetsback
+msgid "Background/Sky:"
+msgstr "Фон/Небо:"
+
+#: g_language:msglabsetsmusic
+msgid "Music:"
+msgstr "Музыка:"
+
+#: g_language:msglabsetstextures
+msgid "Textures:"
+msgstr "Текстур:"
+
+#: g_language:msglabsetspanels
+msgid "Panels:"
+msgstr "Панелей:"
+
+#: g_language:msglabsetsitems
+msgid "Items:"
+msgstr "Предметов:"
+
+#: g_language:msglabsetsmonsters
+msgid "Monsters:"
+msgstr "Монстров:"
+
+#: g_language:msglabsetsareas
+msgid "Areas:"
+msgstr "Областей:"
+
+#: g_language:msglabsetstriggers
+msgid "Triggers:"
+msgstr "Триггеров:"
+
+#: g_language:msglabsetssizes
+msgid "Current:"
+msgstr "Текущий:"
+
+#: g_language:msglabsetswidth
+msgid "Width:"
+msgstr "Ширина:"
+
+#: g_language:msglabsetsheight
+msgid "Height:"
+msgstr "Высота:"
+
+#: g_language:msglabsetsmapmove
+msgid "Direction to shift map objects:"
+msgstr "Направление смещения объектов карты:"
+
+#: g_language:msglabsetssnapping
+msgid "Preserve snapping"
+msgstr "Сохранять привязку"
+
+#: g_language:msglablaunchtime
+msgid "Time Limit:"
+msgstr "Лимит времени:"
+
+#: g_language:msglablaunchsecs
+msgid "seconds"
+msgstr "секунд"
+
+#: g_language:msglablaunchscore
+msgid "Score Limit:"
+msgstr "Лимит очков:"
+
+#: g_language:msglablaunchpath
+msgid "Path to Doom2DF.exe:"
+msgstr "Путь к Doom2DF.exe:"
+
+#: g_language:msglablaunchargs
+msgid "Launch Arguments:"
+msgstr "Параметры запуска:"
+
+#: g_language:msglabesgrid
+msgid "Grid Step:"
+msgstr "Шаг сетки:"
+
+#: g_language:msglabesgridcolor
+msgid "Grid Color:"
+msgstr "Цвет сетки:"
+
+#: g_language:msglabesgridsize
+msgid "Grid Dot Size:"
+msgstr "Размер точек сетки:"
+
+#: g_language:msglabesback
+msgid "Background Color:"
+msgstr "Цвет фона:"
+
+#: g_language:msglabespreview
+msgid "Texture Preview Background Color:"
+msgstr "Цвет фона поля предпросмотра текстуры:"
+
+#: g_language:msglabesminimap
+msgid "Mini-map Scale:"
+msgstr "Масштаб мини-карты:"
+
+#: g_language:msglabesrecent
+msgid "Recent Maps List Contains:"
+msgstr "Запоминать последних открытых карт:"
+
+#: g_language:msglabeslanguage
+msgid "Language:"
+msgstr "Язык:"
+
+#: g_language:msglabescompress
+msgid "Compress archive when save"
+msgstr "Сжимать архив при сохранении"
+
+#: g_language:msglabesbackup
+msgid "Make backup before save"
+msgstr "Резервная копия при сохранении"
+
+#: g_language:msglabpacksaveto
+msgid "Save to:"
+msgstr "Сохранить в:"
+
+#: g_language:msglabpackmapname
+msgid "Map Resource Name:"
+msgstr "Название ресурса карты:"
+
+#: g_language:msglabpacktextures
+msgid "Texture Section:"
+msgstr "Секция для текстур:"
+
+#: g_language:msglabpacksky
+msgid "Sky Section:"
+msgstr "Секция для неба:"
+
+#: g_language:msglabpackmusic
+msgid "Music Section:"
+msgstr "Секция для музыки:"
+
+#: g_language:msglabminiscale
+msgid "Scale:"
+msgstr "Масштаб:"
+
+#: g_language:msgbtnapplyprops
+msgid "Apply Properties"
+msgstr "Применить свойства"
+
+#: g_language:msgbtnok
+msgid "OK"
+msgstr "OK"
+
+#: g_language:msgbtncancel
+msgid "Cancel"
+msgstr "Отмена"
+
+#: g_language:msgbtnadd
+msgid "Add"
+msgstr "Добавить"
+
+#: g_language:msgbtnclose
+msgid "Close"
+msgstr "Закрыть"
+
+#: g_language:msgbtnaddclose
+msgid "Add and Close"
+msgstr "Добавить и закрыть"
+
+#: g_language:msgbtntestagain
+msgid "Check"
+msgstr "Проверить"
+
+#: g_language:msgbtnstart
+msgid "Run"
+msgstr "Начать"
+
+#: g_language:msgbtnpack
+msgid "Pack"
+msgstr "Упаковать"
+
+#: g_language:msgbtnsave
+msgid "Save"
+msgstr "Сохранить"
+
+#: g_language:msgbtnnosound
+msgid "No sound"
+msgstr "Нет звука"
+
+#: g_language:msgbtntextureadd
+msgid "Add texture to the list"
+msgstr "Добавить текстуру в список"
+
+#: g_language:msgbtntexturedelete
+msgid "Delete texture from the list"
+msgstr "Удалить текстуру из списка"
+
+#: g_language:msgbtntextureempty
+msgid "Deselect texture"
+msgstr "Снять выбор с текстуры"
+
+#: g_language:msgloadwad
+msgid "Reading WAD"
+msgstr "Чтение WAD"
+
+#: g_language:msgloadmap
+msgid "Loading Map"
+msgstr "Чтение карты"
+
+#: g_language:msgloadtextures
+msgid "Reading Textures"
+msgstr "Чтение текстур"
+
+#: g_language:msgloadpanels
+msgid "Reading Panels"
+msgstr "Чтение панелей"
+
+#: g_language:msgloaditems
+msgid "Reading Items"
+msgstr "Чтение предметов"
+
+#: g_language:msgloadmonsters
+msgid "Reading Monsters"
+msgstr "Чтение монстров"
+
+#: g_language:msgloadareas
+msgid "Reading Areas"
+msgstr "Чтение областей"
+
+#: g_language:msgloadtriggers
+msgid "Reading Triggers"
+msgstr "Чтение триггеров"
+
+#: g_language:msgtestareawall
+msgid "Player collides with the wall and will be stuck."
+msgstr "Если в этой области появится игрок, то он застрянет в стене и не сможет двигаться."
+
+#: g_language:msgtestareawallstr
+msgid "Area #%d collides with Map (%d:%d)"
+msgstr "Область #%d пересекается с картой (%d:%d)"
+
+#: g_language:msgtestspawns1
+msgid "There are several spawn points for First Player on the map"
+msgstr "Несколько точек появления первого игрока"
+
+#: g_language:msgtestspawns2
+msgid "There are several spawn points for Second Player on the map"
+msgstr "Несколько точек появления второго игрока"
+
+#: g_language:msgtestspawns
+msgid "There are several spawn points on the map. Random one will be used."
+msgstr "Несколько точек появления игрока, будет использована случайная."
+
+#: g_language:msgtestnodm
+msgid "There are no DM spawn points on the map"
+msgstr "На карте нет точек DM"
+
+#: g_language:msgtestnodmex
+msgid "There are no DM spawn points on the map. Only \"Single Player\" mode available."
+msgstr "На карте нет точек DM, поиграть получится только в режиме \"Single Player\"."
+
+#: g_language:msgtestmonsterwall
+msgid "Monster collides with the wall and will be stuck."
+msgstr "Монстр пересекается с картой. Он застрянет в стене и не сможет двигаться"
+
+#: g_language:msgtestmonsterwallstr
+msgid "Monster #%d collides with a map (%d:%d)"
+msgstr "Монстр #%d пересекается с картой (%d:%d)"
+
+#: g_language:msgoptnotextures
+msgid "Texture list is empty"
+msgstr "Список текстур пуст"
+
+#: g_language:msgoptdeletedtextures
+msgid "Deleted Textures:"
+msgstr "Удалённые текстуры:"
+
+#: g_language:msgopttotaltextures
+msgid "Textures Total:"
+msgstr "Всего текстур:"
+
+#: g_language:msgopttexdeleted
+msgid "Textures Deleted:"
+msgstr "Удалено текстур:"
+
+#: g_language:msgoptpanelsopt
+msgid "Panels Optimized:"
+msgstr "Оптимизировано панелей:"
+
+#: g_language:msgoptwalls
+msgid "Walls Optimization..."
+msgstr "Оптимизация стен..."
+
+#: g_language:msgoptfores
+msgid "Foreground Optimization..."
+msgstr "Оптимизация переднего плана..."
+
+#: g_language:msgoptbacks
+msgid "Background Optimization..."
+msgstr "Оптимизация фона..."
+
+#: g_language:msgoptstairs
+msgid "Steps Optimization..."
+msgstr "Оптимизация ступеней..."
+
+#: g_language:msgoptwater
+msgid "Water Optimization..."
+msgstr "Оптимизация воды..."
+
+#: g_language:msgoptacid1
+msgid "Acid 1 Optimization..."
+msgstr "Оптимизация кислоты 1..."
+
+#: g_language:msgoptacid2
+msgid "Acid 2 Optimization..."
+msgstr "Оптимизация кислоты 2..."
+
+#: g_language:msgoptlifts
+msgid "Streams Optimization..."
+msgstr "Оптимизация лифтов..."
+
+#: g_language:msgoptblockmon
+msgid "Monster Boundaries Optimization..."
+msgstr "Оптимизация блокираторов монстров.... "
+
+#: g_language:msgopttotalpanels
+msgid "Panels Total:"
+msgstr "Всего панелей:"
+
+#: g_language:msgoptpanelsafter
+msgid "Panels after Optimization:"
+msgstr "Панелей после оптимизации:"
+
+#: g_language:msgwadspecialmap
+msgid "<MAP WAD-FILE>"
+msgstr "<WAD-ФАЙЛ КАРТЫ>"
+
+#: g_language:msgwadspecialtexs
+msgid "<EXTRA TEXTURES>"
+msgstr "<СПЕЦТЕКСТУРЫ>"
+
+#: g_language:msgfilefilterall
+msgid "Doom 2D: Forever Maps (*.dfz, *.dfzip, *.zip, *.wad)|*.dfz;*.dfzip;*.zip;*.wad|Doom 2D: Forever 0.30 Maps (*.ini)|*.ini|All Files (*.*)|*.*"
+msgstr "Карты Doom 2D: Forever (*.dfz, *.dfzip, *.zip, *.wad)|*.dfz;*.dfzip;*.zip;*.wad|Старые карты Doom 2D: Forever 0.30 (*.ini)|*.ini|Все файлы (*.*)|*.*"
+
+#: g_language:msgfilefilterwad
+msgid "Doom 2D: Forever Maps (*.dfz)|*.dfz|Doom 2D: Forever Maps (*.dfzip)|*.dfzip|Doom 2D: Forever Maps (*.zip)|*.zip|Doom 2D: Forever Maps (*.wad)|*.wad|All Files (*.*)|*.*"
+msgstr "Карты Doom 2D: Forever (*.dfz)|*.dfz|Карты Doom 2D: Forever (*.dfzip)|*.dfzip|Карты Doom 2D: Forever (*.zip)|*.zip|Карты Doom 2D: Forever (*.wad)|*.wad|Все файлы (*.*)|*.*"
+
+#: g_language:msgeditortitle
+msgid "Doom 2D: Forever Map Editor"
+msgstr "Редактор карт Doom 2D: Forever"
+
index 1246516f954c714d0183b4f35976c14c6915ced7..1ca2d20f5378c543ada9d7d268f207fec2b88100 100644 (file)
@@ -55,8 +55,7 @@ uses
   Imaging,
   ImagingUtility,
   g_options in 'g_options.pas',
-  g_language in 'g_language.pas',
-  f_selectlang in 'f_selectlang.pas' {SelectLanguageForm};
+  g_language in 'g_language.pas';
 
 {$IFDEF WINDOWS}
   {$R *.res}
@@ -182,6 +181,7 @@ uses
       LogFileName := DFPath + DirectorySeparator + 'Editor.log';
       MapsDir := DocPath + DirectorySeparator + 'Maps';
       WadsDir := BundlePath + DirectorySeparator + 'Contents' + DirectorySeparator + 'Resources' + DirectorySeparator + 'wads';
+      LangDIr := BundlePath + DirectorySeparator + 'Contents' + DirectorySeparator + 'Resources' + DirectorySeparator + 'data' + DirectorySeparator + 'lang';
       GameWad := BundlePath + DirectorySeparator + 'Contents' + DirectorySeparator + 'Resources' + DirectorySeparator + 'data' + DirectorySeparator + 'game.wad';
       EditorWad := BundlePath + DirectorySeparator + 'Contents' + DirectorySeparator + 'Resources' + DirectorySeparator + 'data' + DirectorySeparator + 'editor.wad';
     {$ELSE}
@@ -195,6 +195,7 @@ uses
       LogFileName := EditorDir + DirectorySeparator + 'Editor.log';
       MapsDir := EditorDir + DirectorySeparator + 'maps';
       WadsDir := EditorDir + DirectorySeparator + 'wads';
+      LangDir := EditorDir + DirectorySeparator + 'data' + DirectorySeparator + 'lang';
       GameWad := EditorDir + DirectorySeparator + 'data' + DirectorySeparator + 'game.wad';
       EditorWad := EditorDir + DirectorySeparator + 'data' + DirectorySeparator + 'editor.wad';
     {$ENDIF}
@@ -219,6 +220,7 @@ uses
     e_WriteLog('  LogFileName = ' + LogFileName, MSG_NOTIFY);
     e_WriteLog('  MapsDir     = ' + MapsDir, MSG_NOTIFY);
     e_WriteLog('  WadsDir     = ' + WadsDir, MSG_NOTIFY);
+    e_WriteLog('  LangDir     = ' + LangDir, MSG_NOTIFY);
     e_WriteLog('  GameWad     = ' + GameWad, MSG_NOTIFY);
     e_WriteLog('  EditorWad   = ' + EditorWad, MSG_NOTIFY);
   end;
@@ -253,7 +255,8 @@ begin
   Application.CreateForm(TSaveMiniMapForm, SaveMiniMapForm);
   Application.CreateForm(TPackMapForm, PackMapForm);
   Application.CreateForm(TChooseTypeForm, ChooseTypeForm);
-  Application.CreateForm(TSelectLanguageForm, SelectLanguageForm);
+
+  g_Language_Set(gLanguage);
 
   CheckParamFiles;
 
index f738384273e0e92aa8d74d2656175ef08389f274..103d9b031f3165cb39920cd042a8f4d56c5dcf3f 100644 (file)
@@ -80,15 +80,15 @@ begin
 
 // WAD карты:
   if OpenedMap <> '' then
-    cbWADList.Items.Add(_lc[I_WAD_SPECIAL_MAP]);
+    cbWADList.Items.Add(MsgWadSpecialMap);
 end;
 
 procedure TAddResourceForm.bOKClick(Sender: TObject);
 begin
   if FResourceName = '' then
   begin
-    Application.MessageBox(PChar(_lc[I_MSG_CHOOSE_RES]),
-               PChar(_lc[I_MSG_ERROR]), MB_OK + MB_ICONERROR);
+    Application.MessageBox(PChar(MsgMsgChooseRes),
+               PChar(MsgMsgError), MB_OK + MB_ICONERROR);
     Exit;
   end;
 
@@ -107,7 +107,7 @@ procedure TAddResourceForm.cbWADListChange(Sender: TObject);
     i: Integer;
     FileName, Section, sn, rn: String;
 begin
-  if cbWADList.Text <> _lc[I_WAD_SPECIAL_MAP] then
+  if cbWADList.Text <> MsgWadSpecialMap then
     FileName := WadsDir + DirectorySeparator + cbWADList.Text (* Resource wad *)
   else
     g_ProcessResourceStr(OpenedMap, FileName, sn, rn); (* Map wad *)
@@ -137,7 +137,7 @@ procedure TAddResourceForm.cbSectionsListChange(Sender: TObject);
     i: Integer;
     FileName, Section, SectionName, sn, rn: String;
 begin
-  if cbWADList.Text <> _lc[I_WAD_SPECIAL_MAP] then
+  if cbWADList.Text <> MsgWadSpecialMap then
     FileName := WadsDir + DirectorySeparator + cbWADList.Text (* Resource wad *)
   else
     g_ProcessResourceStr(OpenedMap, FileName, sn, rn); (* Map wad *)
index e4a0f44fd86d0fd26a16b09a37572f0773f75e5b..bb4fa10e2ed6a12d92c739c050b3ea0577d5367c 100644 (file)
@@ -148,7 +148,7 @@ begin
     g_ProcessResourceStr(FSetResource, FileName, SectionName, ResourceName);
 
     if FileName = '' then
-      FileName := _lc[I_WAD_SPECIAL_MAP];
+      FileName := MsgWadSpecialMap;
     if SectionName = '' then
       SectionName := '..';
 
index 15ea34df25db38089339dacd558aafa618435ba1..914f0beccecb9f40143ec24eb9a23836c968da7a 100644 (file)
@@ -182,7 +182,7 @@ begin
     if res <> FMOD_OK then
     begin
       Application.MessageBox(FMOD_ErrorString(res),
-                             PChar(_lc[I_MSG_SOUND_ERROR]),
+                             PChar(MsgMsgSoundError),
                              MB_OK or MB_ICONHAND);
       Exit;
     end;
@@ -299,7 +299,7 @@ begin
     g_ProcessResourceStr(FSetResource, FileName, SectionName, ResourceName);
 
     if FileName = '' then
-      FileName := _lc[I_WAD_SPECIAL_MAP];
+      FileName := MsgWadSpecialMap;
 
     if SectionName = '' then
       SectionName := '..';
index cdd06218b5338bd8c18fc4713f31b29986f30f8f..927017e6de9d6cfba12566faae8c9b5e51eb9d87 100644 (file)
@@ -189,7 +189,7 @@ begin
   Inherited;
 
   lStats.Caption := '';
-  cbWADList.Items.Add(_lc[I_WAD_SPECIAL_TEXS]);
+  cbWADList.Items.Add(MsgWadSpecialTexs);
 
   eTextureName.Text := '';
   iPreview.Canvas.FillRect(iPreview.Canvas.ClipRect);
@@ -212,11 +212,11 @@ begin
     Exit;
   if FResourceName = '' then
     Exit;
-  if cbWADList.Text = _lc[I_WAD_SPECIAL_TEXS] then
+  if cbWADList.Text = MsgWadSpecialTexs then
     Exit;
 
   g_ProcessResourceStr(FFullResourceName, @wad, nil, nil);
-  if wad = _lc[I_WAD_SPECIAL_TEXS] then
+  if wad = MsgWadSpecialTexs then
     Exit;
 
   Anim := IsAnim(FFullResourceName);
@@ -229,9 +229,9 @@ begin
     Exit;
 
   if Anim then
-    lStats.Caption := Format(_lc[I_CAP_ANIMATION], [Texture.Width, Texture.Height, NumFrames])
+    lStats.Caption := Format(MsgCapAnimation, [Texture.Width, Texture.Height, NumFrames])
   else
-    lStats.Caption := Format(_lc[I_CAP_TEXTURE], [Texture.Width, Texture.Height]);
+    lStats.Caption := Format(MsgCapTexture, [Texture.Width, Texture.Height]);
 
   iPreview.Canvas.FillRect(iPreview.Canvas.ClipRect);
   iPreview.Canvas.CopyRect(Texture.Canvas.ClipRect, Texture.Canvas, Texture.Canvas.ClipRect);
@@ -275,7 +275,7 @@ end;
 
 procedure TAddTextureForm.cbWADListChange(Sender: TObject);
 begin
-  if cbWADList.Text = _lc[I_WAD_SPECIAL_TEXS] then
+  if cbWADList.Text = MsgWadSpecialTexs then
   begin
     cbSectionsList.Clear();
     cbSectionsList.Items.Add('..');
@@ -287,7 +287,7 @@ end;
 
 procedure TAddTextureForm.cbSectionsListChange(Sender: TObject);
 begin
-  if cbWADList.Text = _lc[I_WAD_SPECIAL_TEXS] then
+  if cbWADList.Text = MsgWadSpecialTexs then
   begin
     lbResourcesList.Clear();
     lbResourcesList.Items.Add(TEXTURE_NAME_WATER);
index 790a646a334b9ff69700d3237260483e6baf427b..86ec6b4f7681bfe84d94c061e20eaaeeea963337 100644 (file)
@@ -358,7 +358,7 @@ uses
   MAPREADER, f_selectmap, f_savemap, WADEDITOR, MAPDEF,
   g_map, f_saveminimap, f_addresource, CONFIG, f_packmap,
   f_addresource_sound, f_choosetype,
-  g_language, f_selectlang, ClipBrd, g_resources, g_options;
+  g_language, ClipBrd, g_resources, g_options;
 
 const
   UNDO_DELETE_PANEL   = 1;
@@ -767,7 +767,7 @@ begin
     Exit;
 
   with MainForm.vleObjectProperty do
-    with ItemProps[InsertRow(_lc[I_PROP_ID], IntToStr(SelectedObjects[_id].ID), True)] do
+    with ItemProps[InsertRow(MsgPropId, IntToStr(SelectedObjects[_id].ID), True)] do
     begin
       EditStyle := esSimple;
       ReadOnly := True;
@@ -779,31 +779,31 @@ begin
         with MainForm.vleObjectProperty,
              gPanels[SelectedObjects[_id].ID] do
         begin
-          with ItemProps[InsertRow(_lc[I_PROP_X], IntToStr(X), True)] do
+          with ItemProps[InsertRow(MsgPropX, IntToStr(X), True)] do
           begin
             EditStyle := esSimple;
             MaxLength := 5;
           end;
 
-          with ItemProps[InsertRow(_lc[I_PROP_Y], IntToStr(Y), True)] do
+          with ItemProps[InsertRow(MsgPropY, IntToStr(Y), True)] do
           begin
             EditStyle := esSimple;
             MaxLength := 5;
           end;
 
-          with ItemProps[InsertRow(_lc[I_PROP_WIDTH], IntToStr(Width), True)] do
+          with ItemProps[InsertRow(MsgPropWidth, IntToStr(Width), True)] do
           begin
             EditStyle := esSimple;
             MaxLength := 5;
           end;
 
-          with ItemProps[InsertRow(_lc[I_PROP_HEIGHT], IntToStr(Height), True)] do
+          with ItemProps[InsertRow(MsgPropHeight, IntToStr(Height), True)] do
           begin
             EditStyle := esSimple;
             MaxLength := 5;
           end;
 
-          with ItemProps[InsertRow(_lc[I_PROP_PANEL_TYPE], GetPanelName(PanelType), True)] do
+          with ItemProps[InsertRow(MsgPropPanelType, GetPanelName(PanelType), True)] do
           begin
             EditStyle := esEllipsis;
             ReadOnly := True;
@@ -811,7 +811,7 @@ begin
 
           if IsTexturedPanel(PanelType) then
           begin // Может быть текстура
-            with ItemProps[InsertRow(_lc[I_PROP_PANEL_TEX], TextureName, True)] do
+            with ItemProps[InsertRow(MsgPropPanelTex, TextureName, True)] do
             begin
               EditStyle := esEllipsis;
               ReadOnly := True;
@@ -819,13 +819,13 @@ begin
 
             if TextureName <> '' then
             begin // Есть текстура
-              with ItemProps[InsertRow(_lc[I_PROP_PANEL_ALPHA], IntToStr(Alpha), True)] do
+              with ItemProps[InsertRow(MsgPropPanelAlpha, IntToStr(Alpha), True)] do
               begin
                 EditStyle := esSimple;
                 MaxLength := 3;
               end;
 
-              with ItemProps[InsertRow(_lc[I_PROP_PANEL_BLEND], BoolNames[Blending], True)] do
+              with ItemProps[InsertRow(MsgPropPanelBlend, BoolNames[Blending], True)] do
               begin
                 EditStyle := esPickList;
                 ReadOnly := True;
@@ -840,25 +840,25 @@ begin
         with MainForm.vleObjectProperty,
              gItems[SelectedObjects[_id].ID] do
         begin
-          with ItemProps[InsertRow(_lc[I_PROP_X], IntToStr(X), True)] do
+          with ItemProps[InsertRow(MsgPropX, IntToStr(X), True)] do
           begin
             EditStyle := esSimple;
             MaxLength := 5;
           end;
 
-          with ItemProps[InsertRow(_lc[I_PROP_Y], IntToStr(Y), True)] do
+          with ItemProps[InsertRow(MsgPropY, IntToStr(Y), True)] do
           begin
             EditStyle := esSimple;
             MaxLength := 5;
           end;
 
-          with ItemProps[InsertRow(_lc[I_PROP_DM_ONLY], BoolNames[OnlyDM], True)] do
+          with ItemProps[InsertRow(MsgPropDmOnly, BoolNames[OnlyDM], True)] do
           begin
             EditStyle := esPickList;
             ReadOnly := True;
           end;
 
-          with ItemProps[InsertRow(_lc[I_PROP_ITEM_FALLS], BoolNames[Fall], True)] do
+          with ItemProps[InsertRow(MsgPropItemFalls, BoolNames[Fall], True)] do
           begin
             EditStyle := esPickList;
             ReadOnly := True;
@@ -871,19 +871,19 @@ begin
         with MainForm.vleObjectProperty,
              gMonsters[SelectedObjects[_id].ID] do
         begin
-          with ItemProps[InsertRow(_lc[I_PROP_X], IntToStr(X), True)] do
+          with ItemProps[InsertRow(MsgPropX, IntToStr(X), True)] do
           begin
             EditStyle := esSimple;
             MaxLength := 5;
           end;
 
-          with ItemProps[InsertRow(_lc[I_PROP_Y], IntToStr(Y), True)] do
+          with ItemProps[InsertRow(MsgPropY, IntToStr(Y), True)] do
           begin
             EditStyle := esSimple;
             MaxLength := 5;
           end;
 
-          with ItemProps[InsertRow(_lc[I_PROP_DIRECTION], DirNames[Direction], True)] do
+          with ItemProps[InsertRow(MsgPropDirection, DirNames[Direction], True)] do
           begin
             EditStyle := esPickList;
             ReadOnly := True;
@@ -896,19 +896,19 @@ begin
         with MainForm.vleObjectProperty,
              gAreas[SelectedObjects[_id].ID] do
         begin
-          with ItemProps[InsertRow(_lc[I_PROP_X], IntToStr(X), True)] do
+          with ItemProps[InsertRow(MsgPropX, IntToStr(X), True)] do
           begin
             EditStyle := esSimple;
             MaxLength := 5;
           end;
 
-          with ItemProps[InsertRow(_lc[I_PROP_Y], IntToStr(Y), True)] do
+          with ItemProps[InsertRow(MsgPropY, IntToStr(Y), True)] do
           begin
             EditStyle := esSimple;
             MaxLength := 5;
           end;
 
-          with ItemProps[InsertRow(_lc[I_PROP_DIRECTION], DirNames[Direction], True)] do
+          with ItemProps[InsertRow(MsgPropDirection, DirNames[Direction], True)] do
           begin
             EditStyle := esPickList;
             ReadOnly := True;
@@ -921,55 +921,55 @@ begin
         with MainForm.vleObjectProperty,
              gTriggers[SelectedObjects[_id].ID] do
         begin
-          with ItemProps[InsertRow(_lc[I_PROP_TR_TYPE], GetTriggerName(TriggerType), True)] do
+          with ItemProps[InsertRow(MsgPropTrType, GetTriggerName(TriggerType), True)] do
           begin
             EditStyle := esSimple;
             ReadOnly := True;
           end;
 
-          with ItemProps[InsertRow(_lc[I_PROP_X], IntToStr(X), True)] do
+          with ItemProps[InsertRow(MsgPropX, IntToStr(X), True)] do
           begin
             EditStyle := esSimple;
             MaxLength := 5;
           end;
 
-          with ItemProps[InsertRow(_lc[I_PROP_Y], IntToStr(Y), True)] do
+          with ItemProps[InsertRow(MsgPropY, IntToStr(Y), True)] do
           begin
             EditStyle := esSimple;
             MaxLength := 5;
           end;
 
-          with ItemProps[InsertRow(_lc[I_PROP_WIDTH], IntToStr(Width), True)] do
+          with ItemProps[InsertRow(MsgPropWidth, IntToStr(Width), True)] do
           begin
             EditStyle := esSimple;
             MaxLength := 5;
           end;
 
-          with ItemProps[InsertRow(_lc[I_PROP_HEIGHT], IntToStr(Height), True)] do
+          with ItemProps[InsertRow(MsgPropHeight, IntToStr(Height), True)] do
           begin
             EditStyle := esSimple;
             MaxLength := 5;
           end;
 
-          with ItemProps[InsertRow(_lc[I_PROP_TR_ENABLED], BoolNames[Enabled], True)] do
+          with ItemProps[InsertRow(MsgPropTrEnabled, BoolNames[Enabled], True)] do
           begin
             EditStyle := esPickList;
             ReadOnly := True;
           end;
 
-          with ItemProps[InsertRow(_lc[I_PROP_TR_TEXTURE_PANEL], IntToStr(TexturePanel), True)] do
+          with ItemProps[InsertRow(MsgPropTrTexturePanel, IntToStr(TexturePanel), True)] do
           begin
             EditStyle := esEllipsis;
             ReadOnly := True;
           end;
 
-          with ItemProps[InsertRow(_lc[I_PROP_TR_ACTIVATION], ActivateToStr(ActivateType), True)] do
+          with ItemProps[InsertRow(MsgPropTrActivation, ActivateToStr(ActivateType), True)] do
           begin
             EditStyle := esEllipsis;
             ReadOnly := True;
           end;
 
-          with ItemProps[InsertRow(_lc[I_PROP_TR_KEYS], KeyToStr(Key), True)] do
+          with ItemProps[InsertRow(MsgPropTrKeys, KeyToStr(Key), True)] do
           begin
             EditStyle := esEllipsis;
             ReadOnly := True;
@@ -979,7 +979,7 @@ begin
             TRIGGER_EXIT:
               begin
                 str := win2utf(Data.MapName);
-                with ItemProps[InsertRow(_lc[I_PROP_TR_NEXT_MAP], str, True)] do
+                with ItemProps[InsertRow(MsgPropTrNextMap, str, True)] do
                 begin
                   EditStyle := esEllipsis;
                   ReadOnly := True;
@@ -988,25 +988,25 @@ begin
 
             TRIGGER_TELEPORT:
               begin
-                with ItemProps[InsertRow(_lc[I_PROP_TR_TELEPORT_TO], Format('(%d:%d)', [Data.TargetPoint.X, Data.TargetPoint.Y]), True)] do
+                with ItemProps[InsertRow(MsgPropTrTeleportTo, Format('(%d:%d)', [Data.TargetPoint.X, Data.TargetPoint.Y]), True)] do
                 begin
                   EditStyle := esEllipsis;
                   ReadOnly := True;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_TR_D2D], BoolNames[Data.d2d_teleport], True)] do
+                with ItemProps[InsertRow(MsgPropTrD2d, BoolNames[Data.d2d_teleport], True)] do
                 begin
                   EditStyle := esPickList;
                   ReadOnly := True;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_TR_TELEPORT_SILENT], BoolNames[Data.silent_teleport], True)] do
+                with ItemProps[InsertRow(MsgPropTrTeleportSilent, BoolNames[Data.silent_teleport], True)] do
                 begin
                   EditStyle := esPickList;
                   ReadOnly := True;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_TR_TELEPORT_DIR], DirNamesAdv[Data.TlpDir], True)] do
+                with ItemProps[InsertRow(MsgPropTrTeleportDir, DirNamesAdv[Data.TlpDir], True)] do
                 begin
                   EditStyle := esPickList;
                   ReadOnly := True;
@@ -1016,19 +1016,19 @@ begin
             TRIGGER_OPENDOOR, TRIGGER_CLOSEDOOR,
             TRIGGER_DOOR, TRIGGER_DOOR5:
               begin
-                with ItemProps[InsertRow(_lc[I_PROP_TR_DOOR_PANEL], IntToStr(Data.PanelID), True)] do
+                with ItemProps[InsertRow(MsgPropTrDoorPanel, IntToStr(Data.PanelID), True)] do
                 begin
                   EditStyle := esEllipsis;
                   ReadOnly := True;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_TR_SILENT], BoolNames[Data.NoSound], True)] do
+                with ItemProps[InsertRow(MsgPropTrSilent, BoolNames[Data.NoSound], True)] do
                 begin
                   EditStyle := esPickList;
                   ReadOnly := True;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_TR_D2D], BoolNames[Data.d2d_doors], True)] do
+                with ItemProps[InsertRow(MsgPropTrD2d, BoolNames[Data.d2d_doors], True)] do
                 begin
                   EditStyle := esPickList;
                   ReadOnly := True;
@@ -1037,19 +1037,19 @@ begin
 
             TRIGGER_CLOSETRAP, TRIGGER_TRAP:
               begin
-                with ItemProps[InsertRow(_lc[I_PROP_TR_TRAP_PANEL], IntToStr(Data.PanelID), True)] do
+                with ItemProps[InsertRow(MsgPropTrTrapPanel, IntToStr(Data.PanelID), True)] do
                 begin
                   EditStyle := esEllipsis;
                   ReadOnly := True;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_TR_SILENT], BoolNames[Data.NoSound], True)] do
+                with ItemProps[InsertRow(MsgPropTrSilent, BoolNames[Data.NoSound], True)] do
                 begin
                   EditStyle := esPickList;
                   ReadOnly := True;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_TR_D2D], BoolNames[Data.d2d_doors], True)] do
+                with ItemProps[InsertRow(MsgPropTrD2d, BoolNames[Data.d2d_doors], True)] do
                 begin
                   EditStyle := esPickList;
                   ReadOnly := True;
@@ -1059,33 +1059,33 @@ begin
             TRIGGER_PRESS, TRIGGER_ON, TRIGGER_OFF,
             TRIGGER_ONOFF:
               begin
-                with ItemProps[InsertRow(_lc[I_PROP_TR_EX_AREA],
+                with ItemProps[InsertRow(MsgPropTrExArea,
                                  Format('(%d:%d %d:%d)', [Data.tX, Data.tY, Data.tWidth, Data.tHeight]), True)] do
                 begin
                   EditStyle := esEllipsis;
                   ReadOnly := True;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_TR_EX_DELAY], IntToStr(Data.Wait), True)] do
+                with ItemProps[InsertRow(MsgPropTrExDelay, IntToStr(Data.Wait), True)] do
                 begin
                   EditStyle := esSimple;
                   MaxLength := 5;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_TR_EX_COUNT], IntToStr(Data.Count), True)] do
+                with ItemProps[InsertRow(MsgPropTrExCount, IntToStr(Data.Count), True)] do
                 begin
                   EditStyle := esSimple;
                   MaxLength := 5;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_TR_EX_MONSTER], IntToStr(Data.MonsterID-1), True)] do
+                with ItemProps[InsertRow(MsgPropTrExMonster, IntToStr(Data.MonsterID-1), True)] do
                 begin
                   EditStyle := esEllipsis;
                   ReadOnly := True;
                 end;
 
                 if TriggerType = TRIGGER_PRESS then
-                  with ItemProps[InsertRow(_lc[I_PROP_TR_EX_RANDOM], BoolNames[Data.ExtRandom], True)] do
+                  with ItemProps[InsertRow(MsgPropTrExRandom, BoolNames[Data.ExtRandom], True)] do
                   begin
                     EditStyle := esPickList;
                     ReadOnly := True;
@@ -1097,19 +1097,19 @@ begin
 
             TRIGGER_LIFTUP, TRIGGER_LIFTDOWN, TRIGGER_LIFT:
               begin
-                with ItemProps[InsertRow(_lc[I_PROP_TR_LIFT_PANEL], IntToStr(Data.PanelID), True)] do
+                with ItemProps[InsertRow(MsgPropTrLiftPanel, IntToStr(Data.PanelID), True)] do
                 begin
                   EditStyle := esEllipsis;
                   ReadOnly := True;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_TR_SILENT], BoolNames[Data.NoSound], True)] do
+                with ItemProps[InsertRow(MsgPropTrSilent, BoolNames[Data.NoSound], True)] do
                 begin
                   EditStyle := esPickList;
                   ReadOnly := True;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_TR_D2D], BoolNames[Data.d2d_doors], True)] do
+                with ItemProps[InsertRow(MsgPropTrD2d, BoolNames[Data.d2d_doors], True)] do
                 begin
                   EditStyle := esPickList;
                   ReadOnly := True;
@@ -1118,13 +1118,13 @@ begin
 
             TRIGGER_TEXTURE:
               begin
-                with ItemProps[InsertRow(_lc[I_PROP_TR_TEXTURE_ONCE], BoolNames[Data.ActivateOnce], True)] do
+                with ItemProps[InsertRow(MsgPropTrTextureOnce, BoolNames[Data.ActivateOnce], True)] do
                 begin
                   EditStyle := esPickList;
                   ReadOnly := True;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_TR_TEXTURE_ANIM_ONCE], BoolNames[Data.AnimOnce], True)] do
+                with ItemProps[InsertRow(MsgPropTrTextureAnimOnce, BoolNames[Data.AnimOnce], True)] do
                 begin
                   EditStyle := esPickList;
                   ReadOnly := True;
@@ -1134,37 +1134,37 @@ begin
             TRIGGER_SOUND:
               begin
                 str := win2utf(Data.SoundName);
-                with ItemProps[InsertRow(_lc[I_PROP_TR_SOUND_NAME], str, True)] do
+                with ItemProps[InsertRow(MsgPropTrSoundName, str, True)] do
                 begin
                   EditStyle := esEllipsis;
                   ReadOnly := True;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_TR_SOUND_VOLUME], IntToStr(Data.Volume), True)] do
+                with ItemProps[InsertRow(MsgPropTrSoundVolume, IntToStr(Data.Volume), True)] do
                 begin
                   EditStyle := esSimple;
                   MaxLength := 3;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_TR_SOUND_PAN], IntToStr(Data.Pan), True)] do
+                with ItemProps[InsertRow(MsgPropTrSoundPan, IntToStr(Data.Pan), True)] do
                 begin
                   EditStyle := esSimple;
                   MaxLength := 3;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_TR_SOUND_COUNT], IntToStr(Data.PlayCount), True)] do
+                with ItemProps[InsertRow(MsgPropTrSoundCount, IntToStr(Data.PlayCount), True)] do
                 begin
                   EditStyle := esSimple;
                   MaxLength := 3;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_TR_SOUND_LOCAL], BoolNames[Data.Local], True)] do
+                with ItemProps[InsertRow(MsgPropTrSoundLocal, BoolNames[Data.Local], True)] do
                 begin
                   EditStyle := esPickList;
                   ReadOnly := True;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_TR_SOUND_SWITCH], BoolNames[Data.SoundSwitch], True)] do
+                with ItemProps[InsertRow(MsgPropTrSoundSwitch, BoolNames[Data.SoundSwitch], True)] do
                 begin
                   EditStyle := esPickList;
                   ReadOnly := True;
@@ -1173,70 +1173,70 @@ begin
 
             TRIGGER_SPAWNMONSTER:
               begin
-                with ItemProps[InsertRow(_lc[I_PROP_TR_MONSTER_TYPE], MonsterToStr(Data.MonType), True)] do
+                with ItemProps[InsertRow(MsgPropTrMonsterType, MonsterToStr(Data.MonType), True)] do
                 begin
                   EditStyle := esEllipsis;
                   ReadOnly := True;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_TR_SPAWN_TO],
+                with ItemProps[InsertRow(MsgPropTrSpawnTo,
                                  Format('(%d:%d)', [Data.MonPos.X, Data.MonPos.Y]), True)] do
                 begin
                   EditStyle := esEllipsis;
                   ReadOnly := True;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_DIRECTION], DirNames[TDirection(Data.MonDir)], True)] do
+                with ItemProps[InsertRow(MsgPropDirection, DirNames[TDirection(Data.MonDir)], True)] do
                 begin
                   EditStyle := esPickList;
                   ReadOnly := True;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_TR_HEALTH], IntToStr(Data.MonHealth), True)] do
+                with ItemProps[InsertRow(MsgPropTrHealth, IntToStr(Data.MonHealth), True)] do
                 begin
                   EditStyle := esSimple;
                   MaxLength := 5;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_TR_MONSTER_ACTIVE], BoolNames[Data.MonActive], True)] do
+                with ItemProps[InsertRow(MsgPropTrMonsterActive, BoolNames[Data.MonActive], True)] do
                 begin
                   EditStyle := esPickList;
                   ReadOnly := True;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_TR_COUNT], IntToStr(Data.MonCount), True)] do
+                with ItemProps[InsertRow(MsgPropTrCount, IntToStr(Data.MonCount), True)] do
                 begin
                   EditStyle := esSimple;
                   MaxLength := 5;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_TR_FX_TYPE], EffectToStr(Data.MonEffect), True)] do
+                with ItemProps[InsertRow(MsgPropTrFxType, EffectToStr(Data.MonEffect), True)] do
                 begin
                   EditStyle := esEllipsis;
                   ReadOnly := True;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_TR_SPAWN_MAX], IntToStr(Data.MonMax), True)] do
+                with ItemProps[InsertRow(MsgPropTrSpawnMax, IntToStr(Data.MonMax), True)] do
                 begin
                   EditStyle := esSimple;
                   MaxLength := 5;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_TR_SPAWN_DELAY], IntToStr(Data.MonDelay), True)] do
+                with ItemProps[InsertRow(MsgPropTrSpawnDelay, IntToStr(Data.MonDelay), True)] do
                 begin
                   EditStyle := esSimple;
                   MaxLength := 5;
                 end;
 
                 case Data.MonBehav of
-                  1: str := _lc[I_PROP_TR_MONSTER_BEHAVIOUR_1];
-                  2: str := _lc[I_PROP_TR_MONSTER_BEHAVIOUR_2];
-                  3: str := _lc[I_PROP_TR_MONSTER_BEHAVIOUR_3];
-                  4: str := _lc[I_PROP_TR_MONSTER_BEHAVIOUR_4];
-                  5: str := _lc[I_PROP_TR_MONSTER_BEHAVIOUR_5];
-                  else str := _lc[I_PROP_TR_MONSTER_BEHAVIOUR_0];
+                  1: str := MsgPropTrMonsterBehaviour1;
+                  2: str := MsgPropTrMonsterBehaviour2;
+                  3: str := MsgPropTrMonsterBehaviour3;
+                  4: str := MsgPropTrMonsterBehaviour4;
+                  5: str := MsgPropTrMonsterBehaviour5;
+                  else str := MsgPropTrMonsterBehaviour0;
                 end;
-                with ItemProps[InsertRow(_lc[I_PROP_TR_MONSTER_BEHAVIOUR], str, True)] do
+                with ItemProps[InsertRow(MsgPropTrMonsterBehaviour, str, True)] do
                 begin
                   EditStyle := esPickList;
                   ReadOnly := True;
@@ -1245,50 +1245,50 @@ begin
 
             TRIGGER_SPAWNITEM:
               begin
-                with ItemProps[InsertRow(_lc[I_PROP_TR_ITEM_TYPE], ItemToStr(Data.ItemType), True)] do
+                with ItemProps[InsertRow(MsgPropTrItemType, ItemToStr(Data.ItemType), True)] do
                 begin
                   EditStyle := esEllipsis;
                   ReadOnly := True;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_TR_SPAWN_TO],
+                with ItemProps[InsertRow(MsgPropTrSpawnTo,
                                  Format('(%d:%d)', [Data.ItemPos.X, Data.ItemPos.Y]), True)] do
                 begin
                   EditStyle := esEllipsis;
                   ReadOnly := True;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_DM_ONLY], BoolNames[Data.ItemOnlyDM], True)] do
+                with ItemProps[InsertRow(MsgPropDmOnly, BoolNames[Data.ItemOnlyDM], True)] do
                 begin
                   EditStyle := esPickList;
                   ReadOnly := True;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_ITEM_FALLS], BoolNames[Data.ItemFalls], True)] do
+                with ItemProps[InsertRow(MsgPropItemFalls, BoolNames[Data.ItemFalls], True)] do
                 begin
                   EditStyle := esPickList;
                   ReadOnly := True;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_TR_COUNT], IntToStr(Data.ItemCount), True)] do
+                with ItemProps[InsertRow(MsgPropTrCount, IntToStr(Data.ItemCount), True)] do
                 begin
                   EditStyle := esSimple;
                   MaxLength := 5;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_TR_FX_TYPE], EffectToStr(Data.ItemEffect), True)] do
+                with ItemProps[InsertRow(MsgPropTrFxType, EffectToStr(Data.ItemEffect), True)] do
                 begin
                   EditStyle := esEllipsis;
                   ReadOnly := True;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_TR_SPAWN_MAX], IntToStr(Data.ItemMax), True)] do
+                with ItemProps[InsertRow(MsgPropTrSpawnMax, IntToStr(Data.ItemMax), True)] do
                 begin
                   EditStyle := esSimple;
                   MaxLength := 5;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_TR_SPAWN_DELAY], IntToStr(Data.ItemDelay), True)] do
+                with ItemProps[InsertRow(MsgPropTrSpawnDelay, IntToStr(Data.ItemDelay), True)] do
                 begin
                   EditStyle := esSimple;
                   MaxLength := 5;
@@ -1298,18 +1298,18 @@ begin
            TRIGGER_MUSIC:
              begin
                str := win2utf(Data.MusicName);
-               with ItemProps[InsertRow(_lc[I_PROP_TR_MUSIC_NAME], str, True)] do
+               with ItemProps[InsertRow(MsgPropTrMusicName, str, True)] do
                begin
                  EditStyle := esEllipsis;
                  ReadOnly := True;
                end;
 
                if Data.MusicAction = 1 then
-                 str := _lc[I_PROP_TR_MUSIC_ON]
+                 str := MsgPropTrMusicOn
                else
-                 str := _lc[I_PROP_TR_MUSIC_OFF];
+                 str := MsgPropTrMusicOff;
 
-               with ItemProps[InsertRow(_lc[I_PROP_TR_MUSIC_ACT], str, True)] do
+               with ItemProps[InsertRow(MsgPropTrMusicAct, str, True)] do
                begin
                  EditStyle := esPickList;
                  ReadOnly := True;
@@ -1318,17 +1318,17 @@ begin
 
             TRIGGER_PUSH:
               begin
-                with ItemProps[InsertRow(_lc[I_PROP_TR_PUSH_ANGLE], IntToStr(Data.PushAngle), True)] do
+                with ItemProps[InsertRow(MsgPropTrPushAngle, IntToStr(Data.PushAngle), True)] do
                 begin
                   EditStyle := esSimple;
                   MaxLength := 4;
                 end;
-                with ItemProps[InsertRow(_lc[I_PROP_TR_PUSH_FORCE], IntToStr(Data.PushForce), True)] do
+                with ItemProps[InsertRow(MsgPropTrPushForce, IntToStr(Data.PushForce), True)] do
                 begin
                   EditStyle := esSimple;
                   MaxLength := 4;
                 end;
-                with ItemProps[InsertRow(_lc[I_PROP_TR_PUSH_RESET], BoolNames[Data.ResetVel], True)] do
+                with ItemProps[InsertRow(MsgPropTrPushReset, BoolNames[Data.ResetVel], True)] do
                 begin
                   EditStyle := esPickList;
                   ReadOnly := True;
@@ -1338,38 +1338,38 @@ begin
             TRIGGER_SCORE:
               begin
                 case Data.ScoreAction of
-                  1: str := _lc[I_PROP_TR_SCORE_ACT_1];
-                  2: str := _lc[I_PROP_TR_SCORE_ACT_2];
-                  3: str := _lc[I_PROP_TR_SCORE_ACT_3];
-                  else str := _lc[I_PROP_TR_SCORE_ACT_0];
+                  1: str := MsgPropTrScoreAct1;
+                  2: str := MsgPropTrScoreAct2;
+                  3: str := MsgPropTrScoreAct3;
+                  else str := MsgPropTrScoreAct0;
                 end;
-                with ItemProps[InsertRow(_lc[I_PROP_TR_SCORE_ACT], str, True)] do
+                with ItemProps[InsertRow(MsgPropTrScoreAct, str, True)] do
                 begin
                   EditStyle := esPickList;
                   ReadOnly := True;
                 end;
-                with ItemProps[InsertRow(_lc[I_PROP_TR_COUNT], IntToStr(Data.ScoreCount), True)] do
+                with ItemProps[InsertRow(MsgPropTrCount, IntToStr(Data.ScoreCount), True)] do
                 begin
                   EditStyle := esSimple;
                   MaxLength := 3;
                 end;
                 case Data.ScoreTeam of
-                  1: str := _lc[I_PROP_TR_SCORE_TEAM_1];
-                  2: str := _lc[I_PROP_TR_SCORE_TEAM_2];
-                  3: str := _lc[I_PROP_TR_SCORE_TEAM_3];
-                  else str := _lc[I_PROP_TR_SCORE_TEAM_0];
+                  1: str := MsgPropTrScoreTeam1;
+                  2: str := MsgPropTrScoreTeam2;
+                  3: str := MsgPropTrScoreTeam3;
+                  else str := MsgPropTrScoreTeam0;
                 end;
-                with ItemProps[InsertRow(_lc[I_PROP_TR_SCORE_TEAM], str, True)] do
+                with ItemProps[InsertRow(MsgPropTrScoreTeam, str, True)] do
                 begin
                   EditStyle := esPickList;
                   ReadOnly := True;
                 end;
-                with ItemProps[InsertRow(_lc[I_PROP_TR_SCORE_CON], BoolNames[Data.ScoreCon], True)] do
+                with ItemProps[InsertRow(MsgPropTrScoreCon, BoolNames[Data.ScoreCon], True)] do
                 begin
                   EditStyle := esPickList;
                   ReadOnly := True;
                 end;
-                with ItemProps[InsertRow(_lc[I_PROP_TR_SCORE_MSG], BoolNames[Data.ScoreMsg], True)] do
+                with ItemProps[InsertRow(MsgPropTrScoreMsg, BoolNames[Data.ScoreMsg], True)] do
                 begin
                   EditStyle := esPickList;
                   ReadOnly := True;
@@ -1379,34 +1379,34 @@ begin
             TRIGGER_MESSAGE:
               begin
                 case Data.MessageKind of
-                  1: str := _lc[I_PROP_TR_MESSAGE_KIND_1];
-                  else str := _lc[I_PROP_TR_MESSAGE_KIND_0];
+                  1: str := MsgPropTrMessageKind1;
+                  else str := MsgPropTrMessageKind0;
                 end;
-                with ItemProps[InsertRow(_lc[I_PROP_TR_MESSAGE_KIND], str, True)] do
+                with ItemProps[InsertRow(MsgPropTrMessageKind, str, True)] do
                 begin
                   EditStyle := esPickList;
                   ReadOnly := True;
                 end;
                 case Data.MessageSendTo of
-                  1: str := _lc[I_PROP_TR_MESSAGE_TO_1];
-                  2: str := _lc[I_PROP_TR_MESSAGE_TO_2];
-                  3: str := _lc[I_PROP_TR_MESSAGE_TO_3];
-                  4: str := _lc[I_PROP_TR_MESSAGE_TO_4];
-                  5: str := _lc[I_PROP_TR_MESSAGE_TO_5];
-                  else str := _lc[I_PROP_TR_MESSAGE_TO_0];
+                  1: str := MsgPropTrMessageTo1;
+                  2: str := MsgPropTrMessageTo2;
+                  3: str := MsgPropTrMessageTo3;
+                  4: str := MsgPropTrMessageTo4;
+                  5: str := MsgPropTrMessageTo5;
+                  else str := MsgPropTrMessageTo0;
                 end;
-                with ItemProps[InsertRow(_lc[I_PROP_TR_MESSAGE_TO], str, True)] do
+                with ItemProps[InsertRow(MsgPropTrMessageTo, str, True)] do
                 begin
                   EditStyle := esPickList;
                   ReadOnly := True;
                 end;
                 str := win2utf(Data.MessageText);
-                with ItemProps[InsertRow(_lc[I_PROP_TR_MESSAGE_TEXT], str, True)] do
+                with ItemProps[InsertRow(MsgPropTrMessageText, str, True)] do
                 begin
                   EditStyle := esSimple;
                   MaxLength := 100;
                 end;
-                with ItemProps[InsertRow(_lc[I_PROP_TR_MESSAGE_TIME], IntToStr(Data.MessageTime), True)] do
+                with ItemProps[InsertRow(MsgPropTrMessageTime, IntToStr(Data.MessageTime), True)] do
                 begin
                   EditStyle := esSimple;
                   MaxLength := 5;
@@ -1415,26 +1415,26 @@ begin
 
             TRIGGER_DAMAGE:
               begin
-                with ItemProps[InsertRow(_lc[I_PROP_TR_DAMAGE_VALUE], IntToStr(Data.DamageValue), True)] do
+                with ItemProps[InsertRow(MsgPropTrDamageValue, IntToStr(Data.DamageValue), True)] do
                 begin
                   EditStyle := esSimple;
                   MaxLength := 5;
                 end;
-                with ItemProps[InsertRow(_lc[I_PROP_TR_INTERVAL], IntToStr(Data.DamageInterval), True)] do
+                with ItemProps[InsertRow(MsgPropTrInterval, IntToStr(Data.DamageInterval), True)] do
                 begin
                   EditStyle := esSimple;
                   MaxLength := 5;
                 end;
                 case Data.DamageKind of
-                  3: str := _lc[I_PROP_TR_DAMAGE_KIND_3];
-                  4: str := _lc[I_PROP_TR_DAMAGE_KIND_4];
-                  5: str := _lc[I_PROP_TR_DAMAGE_KIND_5];
-                  6: str := _lc[I_PROP_TR_DAMAGE_KIND_6];
-                  7: str := _lc[I_PROP_TR_DAMAGE_KIND_7];
-                  8: str := _lc[I_PROP_TR_DAMAGE_KIND_8];
-                  else str := _lc[I_PROP_TR_DAMAGE_KIND_0];
+                  3: str := MsgPropTrDamageKind3;
+                  4: str := MsgPropTrDamageKind4;
+                  5: str := MsgPropTrDamageKind5;
+                  6: str := MsgPropTrDamageKind6;
+                  7: str := MsgPropTrDamageKind7;
+                  8: str := MsgPropTrDamageKind8;
+                  else str := MsgPropTrDamageKind0;
                 end;
-                with ItemProps[InsertRow(_lc[I_PROP_TR_DAMAGE_KIND], str, True)] do
+                with ItemProps[InsertRow(MsgPropTrDamageKind, str, True)] do
                 begin
                   EditStyle := esPickList;
                   ReadOnly := True;
@@ -1443,22 +1443,22 @@ begin
 
             TRIGGER_HEALTH:
               begin
-                with ItemProps[InsertRow(_lc[I_PROP_TR_HEALTH], IntToStr(Data.HealValue), True)] do
+                with ItemProps[InsertRow(MsgPropTrHealth, IntToStr(Data.HealValue), True)] do
                 begin
                   EditStyle := esSimple;
                   MaxLength := 5;
                 end;
-                with ItemProps[InsertRow(_lc[I_PROP_TR_INTERVAL], IntToStr(Data.HealInterval), True)] do
+                with ItemProps[InsertRow(MsgPropTrInterval, IntToStr(Data.HealInterval), True)] do
                 begin
                   EditStyle := esSimple;
                   MaxLength := 5;
                 end;
-                with ItemProps[InsertRow(_lc[I_PROP_TR_HEALTH_MAX], BoolNames[Data.HealMax], True)] do
+                with ItemProps[InsertRow(MsgPropTrHealthMax, BoolNames[Data.HealMax], True)] do
                 begin
                   EditStyle := esPickList;
                   ReadOnly := True;
                 end;
-                with ItemProps[InsertRow(_lc[I_PROP_TR_SILENT], BoolNames[Data.HealSilent], True)] do
+                with ItemProps[InsertRow(MsgPropTrSilent, BoolNames[Data.HealSilent], True)] do
                 begin
                   EditStyle := esPickList;
                   ReadOnly := True;
@@ -1467,89 +1467,89 @@ begin
 
             TRIGGER_SHOT:
               begin
-                with ItemProps[InsertRow(_lc[I_PROP_TR_SHOT_TYPE], ShotToStr(Data.ShotType), True)] do
+                with ItemProps[InsertRow(MsgPropTrShotType, ShotToStr(Data.ShotType), True)] do
                 begin
                   EditStyle := esEllipsis;
                   ReadOnly := True;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_TR_SHOT_SOUND], BoolNames[Data.ShotSound], True)] do
+                with ItemProps[InsertRow(MsgPropTrShotSound, BoolNames[Data.ShotSound], True)] do
                 begin
                   EditStyle := esPickList;
                   ReadOnly := True;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_TR_SHOT_PANEL], IntToStr(Data.ShotPanelID), True)] do
+                with ItemProps[InsertRow(MsgPropTrShotPanel, IntToStr(Data.ShotPanelID), True)] do
                 begin
                   EditStyle := esEllipsis;
                   ReadOnly := True;
                 end;
 
                 case Data.ShotTarget of
-                  1: str := _lc[I_PROP_TR_SHOT_TO_1];
-                  2: str := _lc[I_PROP_TR_SHOT_TO_2];
-                  3: str := _lc[I_PROP_TR_SHOT_TO_3];
-                  4: str := _lc[I_PROP_TR_SHOT_TO_4];
-                  5: str := _lc[I_PROP_TR_SHOT_TO_5];
-                  6: str := _lc[I_PROP_TR_SHOT_TO_6];
-                  else str := _lc[I_PROP_TR_SHOT_TO_0];
+                  1: str := MsgPropTrShotTo1;
+                  2: str := MsgPropTrShotTo2;
+                  3: str := MsgPropTrShotTo3;
+                  4: str := MsgPropTrShotTo4;
+                  5: str := MsgPropTrShotTo5;
+                  6: str := MsgPropTrShotTo6;
+                  else str := MsgPropTrShotTo0;
                 end;
-                with ItemProps[InsertRow(_lc[I_PROP_TR_SHOT_TO], str, True)] do
+                with ItemProps[InsertRow(MsgPropTrShotTo, str, True)] do
                 begin
                   EditStyle := esPickList;
                   ReadOnly := True;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_TR_SHOT_SIGHT], IntToStr(Data.ShotIntSight), True)] do
+                with ItemProps[InsertRow(MsgPropTrShotSight, IntToStr(Data.ShotIntSight), True)] do
                 begin
                   EditStyle := esSimple;
                   MaxLength := 3;
                 end;
 
                 case Data.ShotAim of
-                  1: str := _lc[I_PROP_TR_SHOT_AIM_1];
-                  2: str := _lc[I_PROP_TR_SHOT_AIM_2];
-                  3: str := _lc[I_PROP_TR_SHOT_AIM_3];
-                  else str := _lc[I_PROP_TR_SHOT_AIM_0];
+                  1: str := MsgPropTrShotAim1;
+                  2: str := MsgPropTrShotAim2;
+                  3: str := MsgPropTrShotAim3;
+                  else str := MsgPropTrShotAim0;
                 end;
-                with ItemProps[InsertRow(_lc[I_PROP_TR_SHOT_AIM], str, True)] do
+                with ItemProps[InsertRow(MsgPropTrShotAim, str, True)] do
                 begin
                   EditStyle := esPickList;
                   ReadOnly := True;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_TR_SPAWN_TO],
+                with ItemProps[InsertRow(MsgPropTrSpawnTo,
                                  Format('(%d:%d)', [Data.ShotPos.X, Data.ShotPos.Y]), True)] do
                 begin
                   EditStyle := esEllipsis;
                   ReadOnly := True;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_TR_SHOT_ANGLE], IntToStr(Data.ShotAngle), True)] do
+                with ItemProps[InsertRow(MsgPropTrShotAngle, IntToStr(Data.ShotAngle), True)] do
                 begin
                   EditStyle := esSimple;
                   MaxLength := 4;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_TR_EX_DELAY], IntToStr(Data.ShotWait), True)] do
+                with ItemProps[InsertRow(MsgPropTrExDelay, IntToStr(Data.ShotWait), True)] do
                 begin
                   EditStyle := esSimple;
                   MaxLength := 5;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_TR_SHOT_ACC], IntToStr(Data.ShotAccuracy), True)] do
+                with ItemProps[InsertRow(MsgPropTrShotAcc, IntToStr(Data.ShotAccuracy), True)] do
                 begin
                   EditStyle := esSimple;
                   MaxLength := 5;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_TR_SHOT_AMMO], IntToStr(Data.ShotAmmo), True)] do
+                with ItemProps[InsertRow(MsgPropTrShotAmmo, IntToStr(Data.ShotAmmo), True)] do
                 begin
                   EditStyle := esSimple;
                   MaxLength := 5;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_TR_SHOT_RELOAD], IntToStr(Data.ShotIntReload), True)] do
+                with ItemProps[InsertRow(MsgPropTrShotReload, IntToStr(Data.ShotIntReload), True)] do
                 begin
                   EditStyle := esSimple;
                   MaxLength := 4;
@@ -1558,17 +1558,17 @@ begin
 
             TRIGGER_EFFECT:
               begin
-                with ItemProps[InsertRow(_lc[I_PROP_TR_COUNT], IntToStr(Data.FXCount), True)] do
+                with ItemProps[InsertRow(MsgPropTrCount, IntToStr(Data.FXCount), True)] do
                 begin
                   EditStyle := esSimple;
                   MaxLength := 3;
                 end;
 
                 if Data.FXType = 0 then
-                  str := _lc[I_PROP_TR_EFFECT_PARTICLE]
+                  str := MsgPropTrEffectParticle
                 else
-                  str := _lc[I_PROP_TR_EFFECT_ANIMATION];
-                with ItemProps[InsertRow(_lc[I_PROP_TR_EFFECT_TYPE], str, True)] do
+                  str := MsgPropTrEffectAnimation;
+                with ItemProps[InsertRow(MsgPropTrEffectType, str, True)] do
                 begin
                   EditStyle := esEllipsis;
                   ReadOnly := True;
@@ -1578,17 +1578,17 @@ begin
                 if Data.FXType = 0 then
                   case Data.FXSubType of
                     TRIGGER_EFFECT_SLIQUID:
-                      str := _lc[I_PROP_TR_EFFECT_SLIQUID];
+                      str := MsgPropTrEffectSliquid;
                     TRIGGER_EFFECT_LLIQUID:
-                      str := _lc[I_PROP_TR_EFFECT_LLIQUID];
+                      str := MsgPropTrEffectLliquid;
                     TRIGGER_EFFECT_DLIQUID:
-                      str := _lc[I_PROP_TR_EFFECT_DLIQUID];
+                      str := MsgPropTrEffectDliquid;
                     TRIGGER_EFFECT_BLOOD:
-                      str := _lc[I_PROP_TR_EFFECT_BLOOD];
+                      str := MsgPropTrEffectBlood;
                     TRIGGER_EFFECT_SPARK:
-                      str := _lc[I_PROP_TR_EFFECT_SPARK];
+                      str := MsgPropTrEffectSpark;
                     TRIGGER_EFFECT_BUBBLE:
-                      str := _lc[I_PROP_TR_EFFECT_BUBBLE];
+                      str := MsgPropTrEffectBubble;
                   end;
                 if Data.FXType = 1 then
                 begin
@@ -1596,61 +1596,61 @@ begin
                     Data.FXSubType := EFFECT_TELEPORT;
                   str := EffectToStr(Data.FXSubType);
                 end;
-                with ItemProps[InsertRow(_lc[I_PROP_TR_EFFECT_SUBTYPE], str, True)] do
+                with ItemProps[InsertRow(MsgPropTrEffectSubtype, str, True)] do
                 begin
                   EditStyle := esEllipsis;
                   ReadOnly := True;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_TR_EFFECT_COLOR], IntToStr(Data.FXColorR or (Data.FXColorG shl 8) or (Data.FXColorB shl 16)), True)] do
+                with ItemProps[InsertRow(MsgPropTrEffectColor, IntToStr(Data.FXColorR or (Data.FXColorG shl 8) or (Data.FXColorB shl 16)), True)] do
                 begin
                   EditStyle := esEllipsis;
                   ReadOnly := True;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_TR_EFFECT_CENTER], BoolNames[Data.FXPos = 0], True)] do
+                with ItemProps[InsertRow(MsgPropTrEffectCenter, BoolNames[Data.FXPos = 0], True)] do
                 begin
                   EditStyle := esPickList;
                   ReadOnly := True;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_TR_EX_DELAY], IntToStr(Data.FXWait), True)] do
+                with ItemProps[InsertRow(MsgPropTrExDelay, IntToStr(Data.FXWait), True)] do
                 begin
                   EditStyle := esSimple;
                   MaxLength := 5;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_TR_EFFECT_VELX], IntToStr(Data.FXVelX), True)] do
+                with ItemProps[InsertRow(MsgPropTrEffectVelx, IntToStr(Data.FXVelX), True)] do
                 begin
                   EditStyle := esSimple;
                   MaxLength := 4;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_TR_EFFECT_VELY], IntToStr(Data.FXVelY), True)] do
+                with ItemProps[InsertRow(MsgPropTrEffectVely, IntToStr(Data.FXVelY), True)] do
                 begin
                   EditStyle := esSimple;
                   MaxLength := 4;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_TR_EFFECT_SPL], IntToStr(Data.FXSpreadL), True)] do
+                with ItemProps[InsertRow(MsgPropTrEffectSpl, IntToStr(Data.FXSpreadL), True)] do
                 begin
                   EditStyle := esSimple;
                   MaxLength := 3;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_TR_EFFECT_SPR], IntToStr(Data.FXSpreadR), True)] do
+                with ItemProps[InsertRow(MsgPropTrEffectSpr, IntToStr(Data.FXSpreadR), True)] do
                 begin
                   EditStyle := esSimple;
                   MaxLength := 3;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_TR_EFFECT_SPU], IntToStr(Data.FXSpreadU), True)] do
+                with ItemProps[InsertRow(MsgPropTrEffectSpu, IntToStr(Data.FXSpreadU), True)] do
                 begin
                   EditStyle := esSimple;
                   MaxLength := 3;
                 end;
 
-                with ItemProps[InsertRow(_lc[I_PROP_TR_EFFECT_SPD], IntToStr(Data.FXSpreadD), True)] do
+                with ItemProps[InsertRow(MsgPropTrEffectSpd, IntToStr(Data.FXSpreadD), True)] do
                 begin
                   EditStyle := esSimple;
                   MaxLength := 3;
@@ -1858,7 +1858,7 @@ end;
 
 procedure ErrorMessageBox(str: String);
 begin
-  Application.MessageBox(PChar(str), PChar(_lc[I_MSG_ERROR]),
+  Application.MessageBox(PChar(str), PChar(MsgMsgError),
              MB_ICONINFORMATION or MB_OK or MB_DEFBUTTON1);
 end;
 
@@ -1874,41 +1874,41 @@ begin
     with gPanels[SelectedObjects[_id].ID] do
     begin
       if TextureWidth <> 0 then
-        if StrToIntDef(MainForm.vleObjectProperty.Values[_lc[I_PROP_WIDTH]], 1) mod TextureWidth <> 0 then
+        if StrToIntDef(MainForm.vleObjectProperty.Values[MsgPropWidth], 1) mod TextureWidth <> 0 then
         begin
-          ErrorMessageBox(Format(_lc[I_MSG_WRONG_TEXWIDTH],
+          ErrorMessageBox(Format(MsgMsgWrongTexwidth,
                                  [TextureWidth]));
           Exit;
         end;
 
       if TextureHeight <> 0 then
-        if StrToIntDef(Trim(MainForm.vleObjectProperty.Values[_lc[I_PROP_HEIGHT]]), 1) mod TextureHeight <> 0 then
+        if StrToIntDef(Trim(MainForm.vleObjectProperty.Values[MsgPropHeight]), 1) mod TextureHeight <> 0 then
         begin
-          ErrorMessageBox(Format(_lc[I_MSG_WRONG_TEXHEIGHT],
+          ErrorMessageBox(Format(MsgMsgWrongTexheight,
                                  [TextureHeight]));
           Exit;
         end;
 
       if IsTexturedPanel(PanelType) and (TextureName <> '') then
-        if not (StrToIntDef(MainForm.vleObjectProperty.Values[_lc[I_PROP_PANEL_ALPHA]], -1) in [0..255]) then
+        if not (StrToIntDef(MainForm.vleObjectProperty.Values[MsgPropPanelAlpha], -1) in [0..255]) then
         begin
-          ErrorMessageBox(_lc[I_MSG_WRONG_ALPHA]);
+          ErrorMessageBox(MsgMsgWrongAlpha);
           Exit;
         end;
     end;
 
   if SelectedObjects[_id].ObjectType in [OBJECT_PANEL, OBJECT_TRIGGER] then
-    if (StrToIntDef(MainForm.vleObjectProperty.Values[_lc[I_PROP_WIDTH]], 0) <= 0) or
-       (StrToIntDef(MainForm.vleObjectProperty.Values[_lc[I_PROP_HEIGHT]], 0) <= 0) then
+    if (StrToIntDef(MainForm.vleObjectProperty.Values[MsgPropWidth], 0) <= 0) or
+       (StrToIntDef(MainForm.vleObjectProperty.Values[MsgPropHeight], 0) <= 0) then
     begin
-      ErrorMessageBox(_lc[I_MSG_WRONG_SIZE]);
+      ErrorMessageBox(MsgMsgWrongSize);
       Exit;
     end;
 
-  if (Trim(MainForm.vleObjectProperty.Values[_lc[I_PROP_X]]) = '') or
-     (Trim(MainForm.vleObjectProperty.Values[_lc[I_PROP_Y]]) = '') then
+  if (Trim(MainForm.vleObjectProperty.Values[MsgPropX]) = '') or
+     (Trim(MainForm.vleObjectProperty.Values[MsgPropY]) = '') then
   begin
-    ErrorMessageBox(_lc[I_MSG_WRONG_XY]);
+    ErrorMessageBox(MsgMsgWrongXy);
     Exit;
   end;
 
@@ -1944,16 +1944,16 @@ begin
     SectionName := aSection;
 
   if aWAD = '' then
-    aWAD := _lc[I_WAD_SPECIAL_MAP];
+    aWAD := MsgWadSpecialMap;
 
-  if aWAD = _lc[I_WAD_SPECIAL_MAP] then
+  if aWAD = MsgWadSpecialMap then
     begin // Файл карты
       g_ProcessResourceStr(OpenedMap, @fn, nil, nil);
       FileName := fn;
       ResourceName := ':'+SectionName+'\'+aTex;
     end
   else
-    if aWAD = _lc[I_WAD_SPECIAL_TEXS] then
+    if aWAD = MsgWadSpecialTexs then
       begin // Спец. текстуры
         FileName := '';
         ResourceName := aTex;
@@ -1971,7 +1971,7 @@ begin
     if ResourceName = MainForm.lbTextureList.Items[a] then
     begin
       if not silent then
-        ErrorMessageBox(Format(_lc[I_MSG_TEXTURE_ALREADY],
+        ErrorMessageBox(Format(MsgMsgTextureAlready,
                                [ResourceName]));
       ok := False;
     end;
@@ -1980,7 +1980,7 @@ begin
   if Length(ResourceName) > 64 then
   begin
     if not silent then
-      ErrorMessageBox(Format(_lc[I_MSG_RES_NAME_64],
+      ErrorMessageBox(Format(MsgMsgResName64,
                              [ResourceName]));
     ok := False;
   end;
@@ -1988,7 +1988,7 @@ begin
   if ok then
   begin
     a := -1;
-    if aWAD = _lc[I_WAD_SPECIAL_TEXS] then
+    if aWAD = MsgWadSpecialTexs then
     begin
       a := MainForm.lbTextureList.Items.Add(ResourceName);
       if not silent then
@@ -2045,7 +2045,7 @@ var
   MapName: String;
   idx: Integer;
 begin
-  SelectMapForm.Caption := _lc[I_CAP_OPEN];
+  SelectMapForm.Caption := MsgCapOpen;
   SelectMapForm.GetMaps(FileName);
 
   if (FileName = OpenedWAD) and
@@ -2591,7 +2591,7 @@ begin
     OpenMap(fn, g_ExtractFilePathName(FPath))
   else
     Application.MessageBox('', 'File not available anymore', MB_OK);
-//  if Application.MessageBox(PChar(_lc[I_MSG_DEL_RECENT_PROMT]), PChar(_lc[I_MSG_DEL_RECENT]), MB_ICONQUESTION or MB_YESNO) = idYes then
+//  if Application.MessageBox(PChar(MsgMsgDelRecentPromt), PChar(MsgMsgDelRecent), MB_ICONQUESTION or MB_YESNO) = idYes then
 //  begin
 //    RecentFiles.Delete(n);
 //    RefreshRecentMenu();
@@ -2901,7 +2901,7 @@ begin
   tbShowMap.Down := ShowMap;
   tbGridOn.Down := DotEnable;
   pcObjects.ActivePageIndex := 0;
-  Application.Title := _lc[I_EDITOR_TITLE];
+  Application.Title := MsgEditorTitle;
 
   Application.OnIdle := OnIdle;
 end;
@@ -3028,7 +3028,7 @@ begin
 
     e_DrawFillQuad(MousePos.X, MousePos.Y, MousePos.X+180, MousePos.Y+18, 192, 192, 192, 127);
     e_DrawQuad(MousePos.X, MousePos.Y, MousePos.X+180, MousePos.Y+18, 255, 255, 255);
-    PrintBlack(MousePos.X+2, MousePos.Y+2, _glc[I_HINT_TELEPORT], gEditorFont);
+    PrintBlack(MousePos.X+2, MousePos.Y+2, utf8to1251(MsgHintTeleport), gEditorFont);
   end;
 
 // Подсказка при выборе точки появления:
@@ -3039,7 +3039,7 @@ begin
                0, 0, 255);
     e_DrawFillQuad(MousePos.X, MousePos.Y, MousePos.X+180, MousePos.Y+18, 192, 192, 192, 127);
     e_DrawQuad(MousePos.X, MousePos.Y, MousePos.X+180, MousePos.Y+18, 255, 255, 255);
-    PrintBlack(MousePos.X+2, MousePos.Y+2, _glc[I_HINT_SPAWN], gEditorFont);
+    PrintBlack(MousePos.X+2, MousePos.Y+2, utf8to1251(MsgHintSpawn), gEditorFont);
   end;
 
 // Подсказка при выборе панели двери:
@@ -3047,7 +3047,7 @@ begin
   begin
     e_DrawFillQuad(MousePos.X, MousePos.Y, MousePos.X+180, MousePos.Y+18, 192, 192, 192, 127);
     e_DrawQuad(MousePos.X, MousePos.Y, MousePos.X+180, MousePos.Y+18, 255, 255, 255);
-    PrintBlack(MousePos.X+2, MousePos.Y+2, _glc[I_HINT_PANEL_DOOR], gEditorFont);
+    PrintBlack(MousePos.X+2, MousePos.Y+2, utf8to1251(MsgHintPanelDoor), gEditorFont);
   end;
 
 // Подсказка при выборе панели с текстурой:
@@ -3055,7 +3055,7 @@ begin
   begin
     e_DrawFillQuad(MousePos.X, MousePos.Y, MousePos.X+196, MousePos.Y+18, 192, 192, 192, 127);
     e_DrawQuad(MousePos.X, MousePos.Y, MousePos.X+196, MousePos.Y+18, 255, 255, 255);
-    PrintBlack(MousePos.X+2, MousePos.Y+2, _glc[I_HINT_PANEL_TEXTURE], gEditorFont);
+    PrintBlack(MousePos.X+2, MousePos.Y+2, utf8to1251(MsgHintPanelTexture), gEditorFont);
   end;
 
 // Подсказка при выборе панели индикации выстрела:
@@ -3063,7 +3063,7 @@ begin
   begin
     e_DrawFillQuad(MousePos.X, MousePos.Y, MousePos.X+316, MousePos.Y+18, 192, 192, 192, 127);
     e_DrawQuad(MousePos.X, MousePos.Y, MousePos.X+316, MousePos.Y+18, 255, 255, 255);
-    PrintBlack(MousePos.X+2, MousePos.Y+2, _glc[I_HINT_PANEL_SHOT], gEditorFont);
+    PrintBlack(MousePos.X+2, MousePos.Y+2, utf8to1251(MsgHintPanelShot), gEditorFont);
   end;
 
 // Подсказка при выборе панели лифта:
@@ -3071,7 +3071,7 @@ begin
   begin
     e_DrawFillQuad(MousePos.X, MousePos.Y, MousePos.X+180, MousePos.Y+18, 192, 192, 192, 127);
     e_DrawQuad(MousePos.X, MousePos.Y, MousePos.X+180, MousePos.Y+18, 255, 255, 255);
-    PrintBlack(MousePos.X+2, MousePos.Y+2, _glc[I_HINT_PANEL_LIFT], gEditorFont);
+    PrintBlack(MousePos.X+2, MousePos.Y+2, utf8to1251(MsgHintPanelLift), gEditorFont);
   end;
 
 // Подсказка при выборе монстра:
@@ -3079,7 +3079,7 @@ begin
   begin
     e_DrawFillQuad(MousePos.X, MousePos.Y, MousePos.X+120, MousePos.Y+18, 192, 192, 192, 127);
     e_DrawQuad(MousePos.X, MousePos.Y, MousePos.X+120, MousePos.Y+18, 255, 255, 255);
-    PrintBlack(MousePos.X+2, MousePos.Y+2, _glc[I_HINT_MONSTER], gEditorFont);
+    PrintBlack(MousePos.X+2, MousePos.Y+2, utf8to1251(MsgHintMonster), gEditorFont);
   end;
 
 // Подсказка при выборе области воздействия:
@@ -3087,7 +3087,7 @@ begin
   begin
     e_DrawFillQuad(MousePos.X, MousePos.Y, MousePos.X+204, MousePos.Y+18, 192, 192, 192, 127);
     e_DrawQuad(MousePos.X, MousePos.Y, MousePos.X+204, MousePos.Y+18, 255, 255, 255);
-    PrintBlack(MousePos.X+2, MousePos.Y+2, _glc[I_HINT_EXT_AREA], gEditorFont);
+    PrintBlack(MousePos.X+2, MousePos.Y+2, utf8to1251(MsgHintExtArea), gEditorFont);
   end;
 
 // Рисуем текстуры, если чертим панель:
@@ -3119,9 +3119,9 @@ begin
 
     if MouseAction in [MOUSEACTION_DRAWPANEL, MOUSEACTION_DRAWTRIGGER] then
       begin // Чертим новый
-        PrintBlack(MousePos.X+2, MousePos.Y+2, Format(_glc[I_HINT_WIDTH],
+        PrintBlack(MousePos.X+2, MousePos.Y+2, Format(utf8to1251(MsgHintWidth),
                           [Abs(MousePos.X-MouseLDownPos.X)]), gEditorFont);
-        PrintBlack(MousePos.X+2, MousePos.Y+16, Format(_glc[I_HINT_HEIGHT],
+        PrintBlack(MousePos.X+2, MousePos.Y+16, Format(utf8to1251(MsgHintHeight),
                           [Abs(MousePos.Y-MouseLDownPos.Y)]), gEditorFont);
       end
     else // Растягиваем существующий
@@ -3138,9 +3138,9 @@ begin
             Height := gTriggers[SelectedObjects[GetFirstSelected].ID].Height;
           end;
 
-        PrintBlack(MousePos.X+2, MousePos.Y+2, Format(_glc[I_HINT_WIDTH], [Width]),
+        PrintBlack(MousePos.X+2, MousePos.Y+2, Format(utf8to1251(MsgHintWidth), [Width]),
                           gEditorFont);
-        PrintBlack(MousePos.X+2, MousePos.Y+16, Format(_glc[I_HINT_HEIGHT], [Height]),
+        PrintBlack(MousePos.X+2, MousePos.Y+16, Format(utf8to1251(MsgHintHeight), [Height]),
                           gEditorFont);
       end;
   end;
@@ -3427,7 +3427,7 @@ begin
           case pcObjects.ActivePageIndex of
             1:
               if lbItemList.ItemIndex = -1 then
-                ErrorMessageBox(_lc[I_MSG_CHOOSE_ITEM])
+                ErrorMessageBox(MsgMsgChooseItem)
               else
                 begin
                   item.ItemType := lbItemList.ItemIndex + ITEM_MEDKIT_SMALL;
@@ -3448,7 +3448,7 @@ begin
                 end;
             2:
               if lbMonsterList.ItemIndex = -1 then
-                ErrorMessageBox(_lc[I_MSG_CHOOSE_MONSTER])
+                ErrorMessageBox(MsgMsgChooseMonster)
               else
                 begin
                   monster.MonsterType := lbMonsterList.ItemIndex + MONSTER_DEMON;
@@ -3469,7 +3469,7 @@ begin
                 end;
             3:
               if lbAreasList.ItemIndex = -1 then
-                ErrorMessageBox(_lc[I_MSG_CHOOSE_AREA])
+                ErrorMessageBox(MsgMsgChooseArea)
               else
                 if (lbAreasList.ItemIndex + 1) <> AREA_DOMFLAG then
                   begin
@@ -3830,7 +3830,7 @@ begin
               // Фон или передний план без текстуры - ошибка:
                 if (lbPanelType.ItemIndex in [1, 2]) and
                    (lbTextureList.ItemIndex = -1) then
-                  ErrorMessageBox(_lc[I_MSG_CHOOSE_TEXTURE])
+                  ErrorMessageBox(MsgMsgChooseTexture)
                 else // Назначаем параметры панели:
                   begin
                     case lbPanelType.ItemIndex of
@@ -4205,7 +4205,7 @@ begin
   if SelectedObjectCount() = 0 then
     StatusBar.Panels[0].Text := ''
   else
-    StatusBar.Panels[0].Text := Format(_lc[I_CAP_STAT_SELECTED], [SelectedObjectCount()]);
+    StatusBar.Panels[0].Text := Format(MsgCapStatSelected, [SelectedObjectCount()]);
 end;
 
 procedure TMainForm.RenderPanelMouseMove(Sender: TObject;
@@ -4384,8 +4384,8 @@ end;
 
 procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
 begin
-  CanClose := Application.MessageBox(PChar(_lc[I_MSG_EXIT_PROMT]),
-                         PChar(_lc[I_MSG_EXIT]),
+  CanClose := Application.MessageBox(PChar(MsgMsgExitPromt),
+                         PChar(MsgMsgExit),
                          MB_ICONQUESTION or MB_YESNO or
                          MB_DEFBUTTON1) = idYes;
 end;
@@ -4425,6 +4425,7 @@ begin
   config.WriteInt('Editor', 'DotStep', DotStep);
   config.WriteStr('Editor', 'LastOpenDir', OpenDialog.InitialDir);
   config.WriteStr('Editor', 'LastSaveDir', SaveDialog.InitialDir);
+  config.WriteStr('Editor', 'Language', gLanguage);
   config.WriteBool('Editor', 'EdgeShow', drEdge[3] < 255);
   config.WriteInt('Editor', 'EdgeColor', gColorEdge);
   config.WriteInt('Editor', 'EdgeAlpha', gAlphaEdge);
@@ -4477,7 +4478,7 @@ begin
     if MapTestProcess.Running = false then
     begin
       if MapTestProcess.ExitCode <> 0 then
-        Application.MessageBox(PChar(_lc[I_MSG_EXEC_ERROR]), 'FIXME', MB_OK or MB_ICONERROR);
+        Application.MessageBox(PChar(MsgMsgExecError), 'FIXME', MB_OK or MB_ICONERROR);
       SysUtils.DeleteFile(MapTestFile);
       MapTestFile := '';
       FreeAndNil(MapTestProcess);
@@ -4739,7 +4740,7 @@ begin
         SelectFlag := SELECTFLAG_NONE;
         Exit;
       end;
-      vleObjectProperty.FindRow(_lc[I_PROP_TR_TEXTURE_PANEL], i);
+      vleObjectProperty.FindRow(MsgPropTrTexturePanel, i);
       if i > 0 then
         SelectFlag := SELECTFLAG_TEXTURE;
     end;
@@ -4755,33 +4756,33 @@ begin
       i := -1;
 
     // Выбор области воздействия, в зависимости от типа триггера
-      vleObjectProperty.FindRow(_lc[I_PROP_TR_EX_AREA], i);
+      vleObjectProperty.FindRow(MsgPropTrExArea, i);
       if i > 0 then
       begin
         DrawPressRect := True;
         Exit;
       end;
-      vleObjectProperty.FindRow(_lc[I_PROP_TR_DOOR_PANEL], i);
+      vleObjectProperty.FindRow(MsgPropTrDoorPanel, i);
       if i <= 0 then
-        vleObjectProperty.FindRow(_lc[I_PROP_TR_TRAP_PANEL], i);
+        vleObjectProperty.FindRow(MsgPropTrTrapPanel, i);
       if i > 0 then
       begin
         SelectFlag := SELECTFLAG_DOOR;
         Exit;
       end;
-      vleObjectProperty.FindRow(_lc[I_PROP_TR_LIFT_PANEL], i);
+      vleObjectProperty.FindRow(MsgPropTrLiftPanel, i);
       if i > 0 then
       begin
         SelectFlag := SELECTFLAG_LIFT;
         Exit;
       end;
-      vleObjectProperty.FindRow(_lc[I_PROP_TR_TELEPORT_TO], i);
+      vleObjectProperty.FindRow(MsgPropTrTeleportTo, i);
       if i > 0 then
       begin
         SelectFlag := SELECTFLAG_TELEPORT;
         Exit;
       end;
-      vleObjectProperty.FindRow(_lc[I_PROP_TR_SPAWN_TO], i);
+      vleObjectProperty.FindRow(MsgPropTrSpawnTo, i);
       if i > 0 then
       begin
         SelectFlag := SELECTFLAG_SPAWNPOINT;
@@ -4789,11 +4790,11 @@ begin
       end;
 
     // Выбор основного параметра, в зависимости от типа триггера
-      vleObjectProperty.FindRow(_lc[I_PROP_TR_NEXT_MAP], i);
+      vleObjectProperty.FindRow(MsgPropTrNextMap, i);
       if i > 0 then
       begin
         g_ProcessResourceStr(OpenedMap, @FileName, nil, nil);
-        SelectMapForm.Caption := _lc[I_CAP_SELECT];
+        SelectMapForm.Caption := MsgCapSelect;
         SelectMapForm.GetMaps(FileName);
 
         if SelectMapForm.ShowModal() = mrOK then
@@ -4803,9 +4804,9 @@ begin
         end;
         Exit;
       end;
-      vleObjectProperty.FindRow(_lc[I_PROP_TR_SOUND_NAME], i);
+      vleObjectProperty.FindRow(MsgPropTrSoundName, i);
       if i <= 0 then
-        vleObjectProperty.FindRow(_lc[I_PROP_TR_MUSIC_NAME], i);
+        vleObjectProperty.FindRow(MsgPropTrMusicName, i);
       if i > 0 then
       begin
         AddSoundForm.OKFunction := nil;
@@ -4819,9 +4820,9 @@ begin
         end;
         Exit;
       end;
-      vleObjectProperty.FindRow(_lc[I_PROP_TR_PUSH_ANGLE], i);
+      vleObjectProperty.FindRow(MsgPropTrPushAngle, i);
       if i <= 0 then
-        vleObjectProperty.FindRow(_lc[I_PROP_TR_MESSAGE_TEXT], i);
+        vleObjectProperty.FindRow(MsgPropTrMessageText, i);
       if i > 0 then
       begin
         vleObjectProperty.Row := i;
@@ -4868,8 +4869,8 @@ begin
         lTextureHeight.Caption := IntToStr(TextureHeight);
       end else
       begin
-        lTextureWidth.Caption := _lc[I_NOT_ACCESSIBLE];
-        lTextureHeight.Caption := _lc[I_NOT_ACCESSIBLE];
+        lTextureWidth.Caption := MsgNotAccessible;
+        lTextureHeight.Caption := MsgNotAccessible;
       end;
     end
   else
@@ -4922,8 +4923,8 @@ begin
   if OpenedMap = '' then
     Exit;
 
-  if Application.MessageBox(PChar(_lc[I_MSG_REOPEN_MAP_PROMT]),
-  PChar(_lc[I_MENU_FILE_REOPEN]), MB_ICONQUESTION or MB_YESNO) <> idYes then
+  if Application.MessageBox(PChar(MsgMsgReopenMapPromt),
+  PChar(MsgMenuFileReopen), MB_ICONQUESTION or MB_YESNO) <> idYes then
     Exit;
 
   g_ProcessResourceStr(OpenedMap, @FileName, nil, @Resource);
@@ -4935,106 +4936,106 @@ procedure TMainForm.vleObjectPropertyGetPickList(Sender: TObject;
 begin
   if vleObjectProperty.ItemProps[KeyName].EditStyle = esPickList then
   begin
-    if KeyName = _lc[I_PROP_DIRECTION] then
+    if KeyName = MsgPropDirection then
       begin
         Values.Add(DirNames[D_LEFT]);
         Values.Add(DirNames[D_RIGHT]);
       end
-    else if KeyName = _lc[I_PROP_TR_TELEPORT_DIR] then
+    else if KeyName = MsgPropTrTeleportDir then
       begin
         Values.Add(DirNamesAdv[0]);
         Values.Add(DirNamesAdv[1]);
         Values.Add(DirNamesAdv[2]);
         Values.Add(DirNamesAdv[3]);
       end
-    else if KeyName = _lc[I_PROP_TR_MUSIC_ACT] then
+    else if KeyName = MsgPropTrMusicAct then
       begin
-        Values.Add(_lc[I_PROP_TR_MUSIC_ON]);
-        Values.Add(_lc[I_PROP_TR_MUSIC_OFF]);
+        Values.Add(MsgPropTrMusicOn);
+        Values.Add(MsgPropTrMusicOff);
       end
-    else if KeyName = _lc[I_PROP_TR_MONSTER_BEHAVIOUR] then
+    else if KeyName = MsgPropTrMonsterBehaviour then
       begin
-        Values.Add(_lc[I_PROP_TR_MONSTER_BEHAVIOUR_0]);
-        Values.Add(_lc[I_PROP_TR_MONSTER_BEHAVIOUR_1]);
-        Values.Add(_lc[I_PROP_TR_MONSTER_BEHAVIOUR_2]);
-        Values.Add(_lc[I_PROP_TR_MONSTER_BEHAVIOUR_3]);
-        Values.Add(_lc[I_PROP_TR_MONSTER_BEHAVIOUR_4]);
-        Values.Add(_lc[I_PROP_TR_MONSTER_BEHAVIOUR_5]);
+        Values.Add(MsgPropTrMonsterBehaviour0);
+        Values.Add(MsgPropTrMonsterBehaviour1);
+        Values.Add(MsgPropTrMonsterBehaviour2);
+        Values.Add(MsgPropTrMonsterBehaviour3);
+        Values.Add(MsgPropTrMonsterBehaviour4);
+        Values.Add(MsgPropTrMonsterBehaviour5);
       end
-    else if KeyName = _lc[I_PROP_TR_SCORE_ACT] then
+    else if KeyName = MsgPropTrScoreAct then
       begin
-        Values.Add(_lc[I_PROP_TR_SCORE_ACT_0]);
-        Values.Add(_lc[I_PROP_TR_SCORE_ACT_1]);
-        Values.Add(_lc[I_PROP_TR_SCORE_ACT_2]);
-        Values.Add(_lc[I_PROP_TR_SCORE_ACT_3]);
+        Values.Add(MsgPropTrScoreAct0);
+        Values.Add(MsgPropTrScoreAct1);
+        Values.Add(MsgPropTrScoreAct2);
+        Values.Add(MsgPropTrScoreAct3);
       end
-    else if KeyName = _lc[I_PROP_TR_SCORE_TEAM] then
+    else if KeyName = MsgPropTrScoreTeam then
       begin
-        Values.Add(_lc[I_PROP_TR_SCORE_TEAM_0]);
-        Values.Add(_lc[I_PROP_TR_SCORE_TEAM_1]);
-        Values.Add(_lc[I_PROP_TR_SCORE_TEAM_2]);
-        Values.Add(_lc[I_PROP_TR_SCORE_TEAM_3]);
+        Values.Add(MsgPropTrScoreTeam0);
+        Values.Add(MsgPropTrScoreTeam1);
+        Values.Add(MsgPropTrScoreTeam2);
+        Values.Add(MsgPropTrScoreTeam3);
       end
-    else if KeyName = _lc[I_PROP_TR_MESSAGE_KIND] then
+    else if KeyName = MsgPropTrMessageKind then
       begin
-        Values.Add(_lc[I_PROP_TR_MESSAGE_KIND_0]);
-        Values.Add(_lc[I_PROP_TR_MESSAGE_KIND_1]);
+        Values.Add(MsgPropTrMessageKind0);
+        Values.Add(MsgPropTrMessageKind1);
       end
-    else if KeyName = _lc[I_PROP_TR_MESSAGE_TO] then
+    else if KeyName = MsgPropTrMessageTo then
       begin
-        Values.Add(_lc[I_PROP_TR_MESSAGE_TO_0]);
-        Values.Add(_lc[I_PROP_TR_MESSAGE_TO_1]);
-        Values.Add(_lc[I_PROP_TR_MESSAGE_TO_2]);
-        Values.Add(_lc[I_PROP_TR_MESSAGE_TO_3]);
-        Values.Add(_lc[I_PROP_TR_MESSAGE_TO_4]);
-        Values.Add(_lc[I_PROP_TR_MESSAGE_TO_5]);
+        Values.Add(MsgPropTrMessageTo0);
+        Values.Add(MsgPropTrMessageTo1);
+        Values.Add(MsgPropTrMessageTo2);
+        Values.Add(MsgPropTrMessageTo3);
+        Values.Add(MsgPropTrMessageTo4);
+        Values.Add(MsgPropTrMessageTo5);
       end
-    else if KeyName = _lc[I_PROP_TR_SHOT_TO] then
+    else if KeyName = MsgPropTrShotTo then
       begin
-        Values.Add(_lc[I_PROP_TR_SHOT_TO_0]);
-        Values.Add(_lc[I_PROP_TR_SHOT_TO_1]);
-        Values.Add(_lc[I_PROP_TR_SHOT_TO_2]);
-        Values.Add(_lc[I_PROP_TR_SHOT_TO_3]);
-        Values.Add(_lc[I_PROP_TR_SHOT_TO_4]);
-        Values.Add(_lc[I_PROP_TR_SHOT_TO_5]);
-        Values.Add(_lc[I_PROP_TR_SHOT_TO_6]);
+        Values.Add(MsgPropTrShotTo0);
+        Values.Add(MsgPropTrShotTo1);
+        Values.Add(MsgPropTrShotTo2);
+        Values.Add(MsgPropTrShotTo3);
+        Values.Add(MsgPropTrShotTo4);
+        Values.Add(MsgPropTrShotTo5);
+        Values.Add(MsgPropTrShotTo6);
       end
-    else if KeyName = _lc[I_PROP_TR_SHOT_AIM] then
+    else if KeyName = MsgPropTrShotAim then
       begin
-        Values.Add(_lc[I_PROP_TR_SHOT_AIM_0]);
-        Values.Add(_lc[I_PROP_TR_SHOT_AIM_1]);
-        Values.Add(_lc[I_PROP_TR_SHOT_AIM_2]);
-        Values.Add(_lc[I_PROP_TR_SHOT_AIM_3]);
+        Values.Add(MsgPropTrShotAim0);
+        Values.Add(MsgPropTrShotAim1);
+        Values.Add(MsgPropTrShotAim2);
+        Values.Add(MsgPropTrShotAim3);
       end
-    else if KeyName = _lc[I_PROP_TR_DAMAGE_KIND] then
+    else if KeyName = MsgPropTrDamageKind then
       begin
-        Values.Add(_lc[I_PROP_TR_DAMAGE_KIND_0]);
-        Values.Add(_lc[I_PROP_TR_DAMAGE_KIND_3]);
-        Values.Add(_lc[I_PROP_TR_DAMAGE_KIND_4]);
-        Values.Add(_lc[I_PROP_TR_DAMAGE_KIND_5]);
-        Values.Add(_lc[I_PROP_TR_DAMAGE_KIND_6]);
-        Values.Add(_lc[I_PROP_TR_DAMAGE_KIND_7]);
-        Values.Add(_lc[I_PROP_TR_DAMAGE_KIND_8]);
+        Values.Add(MsgPropTrDamageKind0);
+        Values.Add(MsgPropTrDamageKind3);
+        Values.Add(MsgPropTrDamageKind4);
+        Values.Add(MsgPropTrDamageKind5);
+        Values.Add(MsgPropTrDamageKind6);
+        Values.Add(MsgPropTrDamageKind7);
+        Values.Add(MsgPropTrDamageKind8);
       end
-    else if (KeyName = _lc[I_PROP_PANEL_BLEND]) or
-            (KeyName = _lc[I_PROP_DM_ONLY]) or
-            (KeyName = _lc[I_PROP_ITEM_FALLS]) or
-            (KeyName = _lc[I_PROP_TR_ENABLED]) or
-            (KeyName = _lc[I_PROP_TR_D2D]) or
-            (KeyName = _lc[I_PROP_TR_SILENT]) or
-            (KeyName = _lc[I_PROP_TR_TELEPORT_SILENT]) or
-            (KeyName = _lc[I_PROP_TR_EX_RANDOM]) or
-            (KeyName = _lc[I_PROP_TR_TEXTURE_ONCE]) or
-            (KeyName = _lc[I_PROP_TR_TEXTURE_ANIM_ONCE]) or
-            (KeyName = _lc[I_PROP_TR_SOUND_LOCAL]) or
-            (KeyName = _lc[I_PROP_TR_SOUND_SWITCH]) or
-            (KeyName = _lc[I_PROP_TR_MONSTER_ACTIVE]) or
-            (KeyName = _lc[I_PROP_TR_PUSH_RESET]) or
-            (KeyName = _lc[I_PROP_TR_SCORE_CON]) or
-            (KeyName = _lc[I_PROP_TR_SCORE_MSG]) or
-            (KeyName = _lc[I_PROP_TR_HEALTH_MAX]) or
-            (KeyName = _lc[I_PROP_TR_SHOT_SOUND]) or
-            (KeyName = _lc[I_PROP_TR_EFFECT_CENTER]) then
+    else if (KeyName = MsgPropPanelBlend) or
+            (KeyName = MsgPropDmOnly) or
+            (KeyName = MsgPropItemFalls) or
+            (KeyName = MsgPropTrEnabled) or
+            (KeyName = MsgPropTrD2d) or
+            (KeyName = MsgPropTrSilent) or
+            (KeyName = MsgPropTrTeleportSilent) or
+            (KeyName = MsgPropTrExRandom) or
+            (KeyName = MsgPropTrTextureOnce) or
+            (KeyName = MsgPropTrTextureAnimOnce) or
+            (KeyName = MsgPropTrSoundLocal) or
+            (KeyName = MsgPropTrSoundSwitch) or
+            (KeyName = MsgPropTrMonsterActive) or
+            (KeyName = MsgPropTrPushReset) or
+            (KeyName = MsgPropTrScoreCon) or
+            (KeyName = MsgPropTrScoreMsg) or
+            (KeyName = MsgPropTrHealthMax) or
+            (KeyName = MsgPropTrShotSound) or
+            (KeyName = MsgPropTrEffectCenter) then
       begin
         Values.Add(BoolNames[True]);
         Values.Add(BoolNames[False]);
@@ -5076,12 +5077,12 @@ begin
       begin
         with gPanels[SelectedObjects[_id].ID] do
         begin
-          X := StrToInt(Trim(vleObjectProperty.Values[_lc[I_PROP_X]]));
-          Y := StrToInt(Trim(vleObjectProperty.Values[_lc[I_PROP_Y]]));
-          Width := StrToInt(Trim(vleObjectProperty.Values[_lc[I_PROP_WIDTH]]));
-          Height := StrToInt(Trim(vleObjectProperty.Values[_lc[I_PROP_HEIGHT]]));
+          X := StrToInt(Trim(vleObjectProperty.Values[MsgPropX]));
+          Y := StrToInt(Trim(vleObjectProperty.Values[MsgPropY]));
+          Width := StrToInt(Trim(vleObjectProperty.Values[MsgPropWidth]));
+          Height := StrToInt(Trim(vleObjectProperty.Values[MsgPropHeight]));
 
-          PanelType := GetPanelType(vleObjectProperty.Values[_lc[I_PROP_PANEL_TYPE]]);
+          PanelType := GetPanelType(vleObjectProperty.Values[MsgPropPanelType]);
 
         // Сброс ссылки на триггеры смены текстуры:
           if not WordBool(PanelType and (PANEL_WALL or PANEL_FORE or PANEL_BACK)) then
@@ -5117,8 +5118,8 @@ begin
             begin // Может быть текстура
               if TextureName <> '' then
                 begin // Была текстура
-                  Alpha := StrToInt(Trim(vleObjectProperty.Values[_lc[I_PROP_PANEL_ALPHA]]));
-                  Blending := NameToBool(vleObjectProperty.Values[_lc[I_PROP_PANEL_BLEND]]);
+                  Alpha := StrToInt(Trim(vleObjectProperty.Values[MsgPropPanelAlpha]));
+                  Blending := NameToBool(vleObjectProperty.Values[MsgPropPanelBlend]);
                 end
               else // Не было
                 begin
@@ -5127,7 +5128,7 @@ begin
                 end;
 
             // Новая текстура:
-              TextureName := vleObjectProperty.Values[_lc[I_PROP_PANEL_TEX]];
+              TextureName := vleObjectProperty.Values[MsgPropPanelTex];
 
               if TextureName <> '' then
                 begin // Есть текстура
@@ -5142,14 +5143,14 @@ begin
                       if TextureWidth <> 0 then
                         if gPanels[SelectedObjects[_id].ID].Width mod TextureWidth <> 0 then
                         begin
-                          ErrorMessageBox(Format(_lc[I_MSG_WRONG_TEXWIDTH],
+                          ErrorMessageBox(Format(MsgMsgWrongTexwidth,
                                           [TextureWidth]));
                           Res := False;
                         end;
                       if Res and (TextureHeight <> 0) then
                         if gPanels[SelectedObjects[_id].ID].Height mod TextureHeight <> 0 then
                         begin
-                          ErrorMessageBox(Format(_lc[I_MSG_WRONG_TEXHEIGHT],
+                          ErrorMessageBox(Format(MsgMsgWrongTexheight,
                                           [TextureHeight]));
                           Res := False;
                         end;
@@ -5209,10 +5210,10 @@ begin
       begin
         with gItems[SelectedObjects[_id].ID] do
         begin
-          X := StrToInt(Trim(vleObjectProperty.Values[_lc[I_PROP_X]]));
-          Y := StrToInt(Trim(vleObjectProperty.Values[_lc[I_PROP_Y]]));
-          OnlyDM := NameToBool(vleObjectProperty.Values[_lc[I_PROP_DM_ONLY]]);
-          Fall := NameToBool(vleObjectProperty.Values[_lc[I_PROP_ITEM_FALLS]]);
+          X := StrToInt(Trim(vleObjectProperty.Values[MsgPropX]));
+          Y := StrToInt(Trim(vleObjectProperty.Values[MsgPropY]));
+          OnlyDM := NameToBool(vleObjectProperty.Values[MsgPropDmOnly]);
+          Fall := NameToBool(vleObjectProperty.Values[MsgPropItemFalls]);
         end;
       end;
 
@@ -5220,9 +5221,9 @@ begin
       begin
         with gMonsters[SelectedObjects[_id].ID] do
         begin
-          X := StrToInt(Trim(vleObjectProperty.Values[_lc[I_PROP_X]]));
-          Y := StrToInt(Trim(vleObjectProperty.Values[_lc[I_PROP_Y]]));
-          Direction := NameToDir(vleObjectProperty.Values[_lc[I_PROP_DIRECTION]]);
+          X := StrToInt(Trim(vleObjectProperty.Values[MsgPropX]));
+          Y := StrToInt(Trim(vleObjectProperty.Values[MsgPropY]));
+          Direction := NameToDir(vleObjectProperty.Values[MsgPropDirection]);
         end;
       end;
 
@@ -5230,9 +5231,9 @@ begin
       begin
         with gAreas[SelectedObjects[_id].ID] do
         begin
-          X := StrToInt(Trim(vleObjectProperty.Values[_lc[I_PROP_X]]));
-          Y := StrToInt(Trim(vleObjectProperty.Values[_lc[I_PROP_Y]]));
-          Direction := NameToDir(vleObjectProperty.Values[_lc[I_PROP_DIRECTION]]);
+          X := StrToInt(Trim(vleObjectProperty.Values[MsgPropX]));
+          Y := StrToInt(Trim(vleObjectProperty.Values[MsgPropY]));
+          Direction := NameToDir(vleObjectProperty.Values[MsgPropDirection]);
         end;
       end;
 
@@ -5240,18 +5241,18 @@ begin
       begin
         with gTriggers[SelectedObjects[_id].ID] do
         begin
-          X := StrToInt(Trim(vleObjectProperty.Values[_lc[I_PROP_X]]));
-          Y := StrToInt(Trim(vleObjectProperty.Values[_lc[I_PROP_Y]]));
-          Width := StrToInt(Trim(vleObjectProperty.Values[_lc[I_PROP_WIDTH]]));
-          Height := StrToInt(Trim(vleObjectProperty.Values[_lc[I_PROP_HEIGHT]]));
-          Enabled := NameToBool(vleObjectProperty.Values[_lc[I_PROP_TR_ENABLED]]);
-          ActivateType := StrToActivate(vleObjectProperty.Values[_lc[I_PROP_TR_ACTIVATION]]);
-          Key := StrToKey(vleObjectProperty.Values[_lc[I_PROP_TR_KEYS]]);
+          X := StrToInt(Trim(vleObjectProperty.Values[MsgPropX]));
+          Y := StrToInt(Trim(vleObjectProperty.Values[MsgPropY]));
+          Width := StrToInt(Trim(vleObjectProperty.Values[MsgPropWidth]));
+          Height := StrToInt(Trim(vleObjectProperty.Values[MsgPropHeight]));
+          Enabled := NameToBool(vleObjectProperty.Values[MsgPropTrEnabled]);
+          ActivateType := StrToActivate(vleObjectProperty.Values[MsgPropTrActivation]);
+          Key := StrToKey(vleObjectProperty.Values[MsgPropTrKeys]);
 
           case TriggerType of
             TRIGGER_EXIT:
               begin
-                s := utf2win(vleObjectProperty.Values[_lc[I_PROP_TR_NEXT_MAP]]);
+                s := utf2win(vleObjectProperty.Values[MsgPropTrNextMap]);
                 FillByte(Data.MapName[0], 16, 0);
                 if s <> '' then
                   Move(s[1], Data.MapName[0], Min(Length(s), 16));
@@ -5259,97 +5260,97 @@ begin
 
             TRIGGER_TEXTURE:
               begin
-                Data.ActivateOnce := NameToBool(vleObjectProperty.Values[_lc[I_PROP_TR_TEXTURE_ONCE]]);
-                Data.AnimOnce := NameToBool(vleObjectProperty.Values[_lc[I_PROP_TR_TEXTURE_ANIM_ONCE]]);
+                Data.ActivateOnce := NameToBool(vleObjectProperty.Values[MsgPropTrTextureOnce]);
+                Data.AnimOnce := NameToBool(vleObjectProperty.Values[MsgPropTrTextureAnimOnce]);
               end;
 
             TRIGGER_PRESS, TRIGGER_ON, TRIGGER_OFF, TRIGGER_ONOFF:
               begin
-                Data.Wait := Min(StrToIntDef(vleObjectProperty.Values[_lc[I_PROP_TR_EX_DELAY]], 0), 65535);
-                Data.Count := Min(StrToIntDef(vleObjectProperty.Values[_lc[I_PROP_TR_EX_COUNT]], 0), 65535);
+                Data.Wait := Min(StrToIntDef(vleObjectProperty.Values[MsgPropTrExDelay], 0), 65535);
+                Data.Count := Min(StrToIntDef(vleObjectProperty.Values[MsgPropTrExCount], 0), 65535);
                 if Data.Count < 1 then
                   Data.Count := 1;
                 if TriggerType = TRIGGER_PRESS then
-                  Data.ExtRandom := NameToBool(vleObjectProperty.Values[_lc[I_PROP_TR_EX_RANDOM]]);
+                  Data.ExtRandom := NameToBool(vleObjectProperty.Values[MsgPropTrExRandom]);
               end;
 
             TRIGGER_OPENDOOR, TRIGGER_CLOSEDOOR, TRIGGER_DOOR, TRIGGER_DOOR5,
             TRIGGER_CLOSETRAP, TRIGGER_TRAP, TRIGGER_LIFTUP, TRIGGER_LIFTDOWN,
             TRIGGER_LIFT:
               begin
-                Data.NoSound := NameToBool(vleObjectProperty.Values[_lc[I_PROP_TR_SILENT]]);
-                Data.d2d_doors := NameToBool(vleObjectProperty.Values[_lc[I_PROP_TR_D2D]]);
+                Data.NoSound := NameToBool(vleObjectProperty.Values[MsgPropTrSilent]);
+                Data.d2d_doors := NameToBool(vleObjectProperty.Values[MsgPropTrD2d]);
               end;
 
             TRIGGER_TELEPORT:
               begin
-                Data.d2d_teleport := NameToBool(vleObjectProperty.Values[_lc[I_PROP_TR_D2D]]);
-                Data.silent_teleport := NameToBool(vleObjectProperty.Values[_lc[I_PROP_TR_TELEPORT_SILENT]]);
-                Data.TlpDir := NameToDirAdv(vleObjectProperty.Values[_lc[I_PROP_TR_TELEPORT_DIR]]);
+                Data.d2d_teleport := NameToBool(vleObjectProperty.Values[MsgPropTrD2d]);
+                Data.silent_teleport := NameToBool(vleObjectProperty.Values[MsgPropTrTeleportSilent]);
+                Data.TlpDir := NameToDirAdv(vleObjectProperty.Values[MsgPropTrTeleportDir]);
               end;
 
             TRIGGER_SOUND:
               begin
-                s := utf2win(vleObjectProperty.Values[_lc[I_PROP_TR_SOUND_NAME]]);
+                s := utf2win(vleObjectProperty.Values[MsgPropTrSoundName]);
                 FillByte(Data.SoundName[0], 64, 0);
                 if s <> '' then
                   Move(s[1], Data.SoundName[0], Min(Length(s), 64));
 
-                Data.Volume := Min(StrToIntDef(vleObjectProperty.Values[_lc[I_PROP_TR_SOUND_VOLUME]], 0), 255);
-                Data.Pan := Min(StrToIntDef(vleObjectProperty.Values[_lc[I_PROP_TR_SOUND_PAN]], 0), 255);
-                Data.PlayCount := Min(StrToIntDef(vleObjectProperty.Values[_lc[I_PROP_TR_SOUND_COUNT]], 0), 255);
-                Data.Local := NameToBool(vleObjectProperty.Values[_lc[I_PROP_TR_SOUND_LOCAL]]);
-                Data.SoundSwitch := NameToBool(vleObjectProperty.Values[_lc[I_PROP_TR_SOUND_SWITCH]]);
+                Data.Volume := Min(StrToIntDef(vleObjectProperty.Values[MsgPropTrSoundVolume], 0), 255);
+                Data.Pan := Min(StrToIntDef(vleObjectProperty.Values[MsgPropTrSoundPan], 0), 255);
+                Data.PlayCount := Min(StrToIntDef(vleObjectProperty.Values[MsgPropTrSoundCount], 0), 255);
+                Data.Local := NameToBool(vleObjectProperty.Values[MsgPropTrSoundLocal]);
+                Data.SoundSwitch := NameToBool(vleObjectProperty.Values[MsgPropTrSoundSwitch]);
               end;
 
             TRIGGER_SPAWNMONSTER:
               begin
-                Data.MonType := StrToMonster(vleObjectProperty.Values[_lc[I_PROP_TR_MONSTER_TYPE]]);
-                Data.MonDir := Byte(NameToDir(vleObjectProperty.Values[_lc[I_PROP_DIRECTION]]));
-                Data.MonHealth := Min(StrToIntDef(vleObjectProperty.Values[_lc[I_PROP_TR_HEALTH]], 0), 1000000);
+                Data.MonType := StrToMonster(vleObjectProperty.Values[MsgPropTrMonsterType]);
+                Data.MonDir := Byte(NameToDir(vleObjectProperty.Values[MsgPropDirection]));
+                Data.MonHealth := Min(StrToIntDef(vleObjectProperty.Values[MsgPropTrHealth], 0), 1000000);
                 if Data.MonHealth < 0 then
                   Data.MonHealth := 0;
-                Data.MonActive := NameToBool(vleObjectProperty.Values[_lc[I_PROP_TR_MONSTER_ACTIVE]]);
-                Data.MonCount := Min(StrToIntDef(vleObjectProperty.Values[_lc[I_PROP_TR_COUNT]], 0), 64);
+                Data.MonActive := NameToBool(vleObjectProperty.Values[MsgPropTrMonsterActive]);
+                Data.MonCount := Min(StrToIntDef(vleObjectProperty.Values[MsgPropTrCount], 0), 64);
                 if Data.MonCount < 1 then
                   Data.MonCount := 1;
-                Data.MonEffect := StrToEffect(vleObjectProperty.Values[_lc[I_PROP_TR_FX_TYPE]]);
-                Data.MonMax := Min(StrToIntDef(vleObjectProperty.Values[_lc[I_PROP_TR_SPAWN_MAX]], 0), 65535);
-                Data.MonDelay := Min(StrToIntDef(vleObjectProperty.Values[_lc[I_PROP_TR_SPAWN_DELAY]], 0), 65535);
+                Data.MonEffect := StrToEffect(vleObjectProperty.Values[MsgPropTrFxType]);
+                Data.MonMax := Min(StrToIntDef(vleObjectProperty.Values[MsgPropTrSpawnMax], 0), 65535);
+                Data.MonDelay := Min(StrToIntDef(vleObjectProperty.Values[MsgPropTrSpawnDelay], 0), 65535);
                 Data.MonBehav := 0;
-                if vleObjectProperty.Values[_lc[I_PROP_TR_MONSTER_BEHAVIOUR]] = _lc[I_PROP_TR_MONSTER_BEHAVIOUR_1] then
+                if vleObjectProperty.Values[MsgPropTrMonsterBehaviour] = MsgPropTrMonsterBehaviour1 then
                   Data.MonBehav := 1;
-                if vleObjectProperty.Values[_lc[I_PROP_TR_MONSTER_BEHAVIOUR]] = _lc[I_PROP_TR_MONSTER_BEHAVIOUR_2] then
+                if vleObjectProperty.Values[MsgPropTrMonsterBehaviour] = MsgPropTrMonsterBehaviour2 then
                   Data.MonBehav := 2;
-                if vleObjectProperty.Values[_lc[I_PROP_TR_MONSTER_BEHAVIOUR]] = _lc[I_PROP_TR_MONSTER_BEHAVIOUR_3] then
+                if vleObjectProperty.Values[MsgPropTrMonsterBehaviour] = MsgPropTrMonsterBehaviour3 then
                   Data.MonBehav := 3;
-                if vleObjectProperty.Values[_lc[I_PROP_TR_MONSTER_BEHAVIOUR]] = _lc[I_PROP_TR_MONSTER_BEHAVIOUR_4] then
+                if vleObjectProperty.Values[MsgPropTrMonsterBehaviour] = MsgPropTrMonsterBehaviour4 then
                   Data.MonBehav := 4;
-                if vleObjectProperty.Values[_lc[I_PROP_TR_MONSTER_BEHAVIOUR]] = _lc[I_PROP_TR_MONSTER_BEHAVIOUR_5] then
+                if vleObjectProperty.Values[MsgPropTrMonsterBehaviour] = MsgPropTrMonsterBehaviour5 then
                   Data.MonBehav := 5;
               end;
 
             TRIGGER_SPAWNITEM:
               begin
-                Data.ItemType := StrToItem(vleObjectProperty.Values[_lc[I_PROP_TR_ITEM_TYPE]]);
-                Data.ItemOnlyDM := NameToBool(vleObjectProperty.Values[_lc[I_PROP_DM_ONLY]]);
-                Data.ItemFalls := NameToBool(vleObjectProperty.Values[_lc[I_PROP_ITEM_FALLS]]);
-                Data.ItemCount := Min(StrToIntDef(vleObjectProperty.Values[_lc[I_PROP_TR_COUNT]], 0), 64);
+                Data.ItemType := StrToItem(vleObjectProperty.Values[MsgPropTrItemType]);
+                Data.ItemOnlyDM := NameToBool(vleObjectProperty.Values[MsgPropDmOnly]);
+                Data.ItemFalls := NameToBool(vleObjectProperty.Values[MsgPropItemFalls]);
+                Data.ItemCount := Min(StrToIntDef(vleObjectProperty.Values[MsgPropTrCount], 0), 64);
                 if Data.ItemCount < 1 then
                   Data.ItemCount := 1;
-                Data.ItemEffect := StrToEffect(vleObjectProperty.Values[_lc[I_PROP_TR_FX_TYPE]]);
-                Data.ItemMax := Min(StrToIntDef(vleObjectProperty.Values[_lc[I_PROP_TR_SPAWN_MAX]], 0), 65535);
-                Data.ItemDelay := Min(StrToIntDef(vleObjectProperty.Values[_lc[I_PROP_TR_SPAWN_DELAY]], 0), 65535);
+                Data.ItemEffect := StrToEffect(vleObjectProperty.Values[MsgPropTrFxType]);
+                Data.ItemMax := Min(StrToIntDef(vleObjectProperty.Values[MsgPropTrSpawnMax], 0), 65535);
+                Data.ItemDelay := Min(StrToIntDef(vleObjectProperty.Values[MsgPropTrSpawnDelay], 0), 65535);
               end;
 
             TRIGGER_MUSIC:
               begin
-                s := utf2win(vleObjectProperty.Values[_lc[I_PROP_TR_MUSIC_NAME]]);
+                s := utf2win(vleObjectProperty.Values[MsgPropTrMusicName]);
                 FillByte(Data.MusicName[0], 64, 0);
                 if s <> '' then
                   Move(s[1], Data.MusicName[0], Min(Length(s), 64));
 
-                if vleObjectProperty.Values[_lc[I_PROP_TR_MUSIC_ACT]] = _lc[I_PROP_TR_MUSIC_ON] then
+                if vleObjectProperty.Values[MsgPropTrMusicAct] = MsgPropTrMusicOn then
                   Data.MusicAction := 1
                 else
                   Data.MusicAction := 0;
@@ -5358,79 +5359,79 @@ begin
             TRIGGER_PUSH:
               begin
                 Data.PushAngle := Min(
-                  StrToIntDef(vleObjectProperty.Values[_lc[I_PROP_TR_PUSH_ANGLE]], 0), 360);
+                  StrToIntDef(vleObjectProperty.Values[MsgPropTrPushAngle], 0), 360);
                 Data.PushForce := Min(
-                  StrToIntDef(vleObjectProperty.Values[_lc[I_PROP_TR_PUSH_FORCE]], 0), 255);
-                Data.ResetVel := NameToBool(vleObjectProperty.Values[_lc[I_PROP_TR_PUSH_RESET]]);
+                  StrToIntDef(vleObjectProperty.Values[MsgPropTrPushForce], 0), 255);
+                Data.ResetVel := NameToBool(vleObjectProperty.Values[MsgPropTrPushReset]);
               end;
 
             TRIGGER_SCORE:
               begin
                 Data.ScoreAction := 0;
-                if vleObjectProperty.Values[_lc[I_PROP_TR_SCORE_ACT]] = _lc[I_PROP_TR_SCORE_ACT_1] then
+                if vleObjectProperty.Values[MsgPropTrScoreAct] = MsgPropTrScoreAct1 then
                   Data.ScoreAction := 1
-                else if vleObjectProperty.Values[_lc[I_PROP_TR_SCORE_ACT]] = _lc[I_PROP_TR_SCORE_ACT_2] then
+                else if vleObjectProperty.Values[MsgPropTrScoreAct] = MsgPropTrScoreAct2 then
                   Data.ScoreAction := 2
-                else if vleObjectProperty.Values[_lc[I_PROP_TR_SCORE_ACT]] = _lc[I_PROP_TR_SCORE_ACT_3] then
+                else if vleObjectProperty.Values[MsgPropTrScoreAct] = MsgPropTrScoreAct3 then
                   Data.ScoreAction := 3;
                 Data.ScoreCount := Min(Max(
-                  StrToIntDef(vleObjectProperty.Values[_lc[I_PROP_TR_COUNT]], 0), 0), 255);
+                  StrToIntDef(vleObjectProperty.Values[MsgPropTrCount], 0), 0), 255);
                 Data.ScoreTeam := 0;
-                if vleObjectProperty.Values[_lc[I_PROP_TR_SCORE_TEAM]] = _lc[I_PROP_TR_SCORE_TEAM_1] then
+                if vleObjectProperty.Values[MsgPropTrScoreTeam] = MsgPropTrScoreTeam1 then
                   Data.ScoreTeam := 1
-                else if vleObjectProperty.Values[_lc[I_PROP_TR_SCORE_TEAM]] = _lc[I_PROP_TR_SCORE_TEAM_2] then
+                else if vleObjectProperty.Values[MsgPropTrScoreTeam] = MsgPropTrScoreTeam2 then
                   Data.ScoreTeam := 2
-                else if vleObjectProperty.Values[_lc[I_PROP_TR_SCORE_TEAM]] = _lc[I_PROP_TR_SCORE_TEAM_3] then
+                else if vleObjectProperty.Values[MsgPropTrScoreTeam] = MsgPropTrScoreTeam3 then
                   Data.ScoreTeam := 3;
-                Data.ScoreCon := NameToBool(vleObjectProperty.Values[_lc[I_PROP_TR_SCORE_CON]]);
-                Data.ScoreMsg := NameToBool(vleObjectProperty.Values[_lc[I_PROP_TR_SCORE_MSG]]);
+                Data.ScoreCon := NameToBool(vleObjectProperty.Values[MsgPropTrScoreCon]);
+                Data.ScoreMsg := NameToBool(vleObjectProperty.Values[MsgPropTrScoreMsg]);
               end;
 
             TRIGGER_MESSAGE:
               begin
                 Data.MessageKind := 0;
-                if vleObjectProperty.Values[_lc[I_PROP_TR_MESSAGE_KIND]] = _lc[I_PROP_TR_MESSAGE_KIND_1] then
+                if vleObjectProperty.Values[MsgPropTrMessageKind] = MsgPropTrMessageKind1 then
                   Data.MessageKind := 1;
 
                 Data.MessageSendTo := 0;
-                if vleObjectProperty.Values[_lc[I_PROP_TR_MESSAGE_TO]] = _lc[I_PROP_TR_MESSAGE_TO_1] then
+                if vleObjectProperty.Values[MsgPropTrMessageTo] = MsgPropTrMessageTo1 then
                   Data.MessageSendTo := 1
-                else if vleObjectProperty.Values[_lc[I_PROP_TR_MESSAGE_TO]] = _lc[I_PROP_TR_MESSAGE_TO_2] then
+                else if vleObjectProperty.Values[MsgPropTrMessageTo] = MsgPropTrMessageTo2 then
                   Data.MessageSendTo := 2
-                else if vleObjectProperty.Values[_lc[I_PROP_TR_MESSAGE_TO]] = _lc[I_PROP_TR_MESSAGE_TO_3] then
+                else if vleObjectProperty.Values[MsgPropTrMessageTo] = MsgPropTrMessageTo3 then
                   Data.MessageSendTo := 3
-                else if vleObjectProperty.Values[_lc[I_PROP_TR_MESSAGE_TO]] = _lc[I_PROP_TR_MESSAGE_TO_4] then
+                else if vleObjectProperty.Values[MsgPropTrMessageTo] = MsgPropTrMessageTo4 then
                   Data.MessageSendTo := 4
-                else if vleObjectProperty.Values[_lc[I_PROP_TR_MESSAGE_TO]] = _lc[I_PROP_TR_MESSAGE_TO_5] then
+                else if vleObjectProperty.Values[MsgPropTrMessageTo] = MsgPropTrMessageTo5 then
                   Data.MessageSendTo := 5;
 
-                s := utf2win(vleObjectProperty.Values[_lc[I_PROP_TR_MESSAGE_TEXT]]);
+                s := utf2win(vleObjectProperty.Values[MsgPropTrMessageText]);
                 FillByte(Data.MessageText[0], 100, 0);
                 if s <> '' then
                   Move(s[1], Data.MessageText[0], Min(Length(s), 100));
 
                 Data.MessageTime := Min(Max(
-                  StrToIntDef(vleObjectProperty.Values[_lc[I_PROP_TR_MESSAGE_TIME]], 0), 0), 65535);
+                  StrToIntDef(vleObjectProperty.Values[MsgPropTrMessageTime], 0), 0), 65535);
               end;
 
             TRIGGER_DAMAGE:
               begin
                 Data.DamageValue := Min(Max(
-                  StrToIntDef(vleObjectProperty.Values[_lc[I_PROP_TR_DAMAGE_VALUE]], 0), 0), 65535);
+                  StrToIntDef(vleObjectProperty.Values[MsgPropTrDamageValue], 0), 0), 65535);
                 Data.DamageInterval := Min(Max(
-                  StrToIntDef(vleObjectProperty.Values[_lc[I_PROP_TR_INTERVAL]], 0), 0), 65535);
-                s := vleObjectProperty.Values[_lc[I_PROP_TR_DAMAGE_KIND]];
-                if s = _lc[I_PROP_TR_DAMAGE_KIND_3] then
+                  StrToIntDef(vleObjectProperty.Values[MsgPropTrInterval], 0), 0), 65535);
+                s := vleObjectProperty.Values[MsgPropTrDamageKind];
+                if s = MsgPropTrDamageKind3 then
                   Data.DamageKind := 3
-                else if s = _lc[I_PROP_TR_DAMAGE_KIND_4] then
+                else if s = MsgPropTrDamageKind4 then
                   Data.DamageKind := 4
-                else if s = _lc[I_PROP_TR_DAMAGE_KIND_5] then
+                else if s = MsgPropTrDamageKind5 then
                   Data.DamageKind := 5
-                else if s = _lc[I_PROP_TR_DAMAGE_KIND_6] then
+                else if s = MsgPropTrDamageKind6 then
                   Data.DamageKind := 6
-                else if s = _lc[I_PROP_TR_DAMAGE_KIND_7] then
+                else if s = MsgPropTrDamageKind7 then
                   Data.DamageKind := 7
-                else if s = _lc[I_PROP_TR_DAMAGE_KIND_8] then
+                else if s = MsgPropTrDamageKind8 then
                   Data.DamageKind := 8
                 else
                   Data.DamageKind := 0;
@@ -5439,99 +5440,99 @@ begin
             TRIGGER_HEALTH:
               begin
                 Data.HealValue := Min(Max(
-                  StrToIntDef(vleObjectProperty.Values[_lc[I_PROP_TR_HEALTH]], 0), 0), 65535);
+                  StrToIntDef(vleObjectProperty.Values[MsgPropTrHealth], 0), 0), 65535);
                 Data.HealInterval := Min(Max(
-                  StrToIntDef(vleObjectProperty.Values[_lc[I_PROP_TR_INTERVAL]], 0), 0), 65535);
-                Data.HealMax := NameToBool(vleObjectProperty.Values[_lc[I_PROP_TR_HEALTH_MAX]]);
-                Data.HealSilent := NameToBool(vleObjectProperty.Values[_lc[I_PROP_TR_SILENT]]);
+                  StrToIntDef(vleObjectProperty.Values[MsgPropTrInterval], 0), 0), 65535);
+                Data.HealMax := NameToBool(vleObjectProperty.Values[MsgPropTrHealthMax]);
+                Data.HealSilent := NameToBool(vleObjectProperty.Values[MsgPropTrSilent]);
               end;
 
             TRIGGER_SHOT:
               begin
-                Data.ShotType := StrToShot(vleObjectProperty.Values[_lc[I_PROP_TR_SHOT_TYPE]]);
-                Data.ShotSound := NameToBool(vleObjectProperty.Values[_lc[I_PROP_TR_SHOT_SOUND]]);
+                Data.ShotType := StrToShot(vleObjectProperty.Values[MsgPropTrShotType]);
+                Data.ShotSound := NameToBool(vleObjectProperty.Values[MsgPropTrShotSound]);
                 Data.ShotTarget := 0;
-                if vleObjectProperty.Values[_lc[I_PROP_TR_SHOT_TO]] = _lc[I_PROP_TR_SHOT_TO_1] then
+                if vleObjectProperty.Values[MsgPropTrShotTo] = MsgPropTrShotTo1 then
                   Data.ShotTarget := 1
-                else if vleObjectProperty.Values[_lc[I_PROP_TR_SHOT_TO]] = _lc[I_PROP_TR_SHOT_TO_2] then
+                else if vleObjectProperty.Values[MsgPropTrShotTo] = MsgPropTrShotTo2 then
                   Data.ShotTarget := 2
-                else if vleObjectProperty.Values[_lc[I_PROP_TR_SHOT_TO]] = _lc[I_PROP_TR_SHOT_TO_3] then
+                else if vleObjectProperty.Values[MsgPropTrShotTo] = MsgPropTrShotTo3 then
                   Data.ShotTarget := 3
-                else if vleObjectProperty.Values[_lc[I_PROP_TR_SHOT_TO]] = _lc[I_PROP_TR_SHOT_TO_4] then
+                else if vleObjectProperty.Values[MsgPropTrShotTo] = MsgPropTrShotTo4 then
                   Data.ShotTarget := 4
-                else if vleObjectProperty.Values[_lc[I_PROP_TR_SHOT_TO]] = _lc[I_PROP_TR_SHOT_TO_5] then
+                else if vleObjectProperty.Values[MsgPropTrShotTo] = MsgPropTrShotTo5 then
                   Data.ShotTarget := 5
-                else if vleObjectProperty.Values[_lc[I_PROP_TR_SHOT_TO]] = _lc[I_PROP_TR_SHOT_TO_6] then
+                else if vleObjectProperty.Values[MsgPropTrShotTo] = MsgPropTrShotTo6 then
                   Data.ShotTarget := 6;
                 Data.ShotIntSight := Min(Max(
-                  StrToIntDef(vleObjectProperty.Values[_lc[I_PROP_TR_SHOT_SIGHT]], 0), 0), 65535);
+                  StrToIntDef(vleObjectProperty.Values[MsgPropTrShotSight], 0), 0), 65535);
                 Data.ShotAim := 0;
-                if vleObjectProperty.Values[_lc[I_PROP_TR_SHOT_AIM]] = _lc[I_PROP_TR_SHOT_AIM_1] then
+                if vleObjectProperty.Values[MsgPropTrShotAim] = MsgPropTrShotAim1 then
                   Data.ShotAim := 1
-                else if vleObjectProperty.Values[_lc[I_PROP_TR_SHOT_AIM]] = _lc[I_PROP_TR_SHOT_AIM_2] then
+                else if vleObjectProperty.Values[MsgPropTrShotAim] = MsgPropTrShotAim2 then
                   Data.ShotAim := 2
-                else if vleObjectProperty.Values[_lc[I_PROP_TR_SHOT_AIM]] = _lc[I_PROP_TR_SHOT_AIM_3] then
+                else if vleObjectProperty.Values[MsgPropTrShotAim] = MsgPropTrShotAim3 then
                   Data.ShotAim := 3;
                 Data.ShotAngle := Min(
-                  StrToIntDef(vleObjectProperty.Values[_lc[I_PROP_TR_SHOT_ANGLE]], 0), 360);
+                  StrToIntDef(vleObjectProperty.Values[MsgPropTrShotAngle], 0), 360);
                 Data.ShotWait := Min(Max(
-                  StrToIntDef(vleObjectProperty.Values[_lc[I_PROP_TR_EX_DELAY]], 0), 0), 65535);
+                  StrToIntDef(vleObjectProperty.Values[MsgPropTrExDelay], 0), 0), 65535);
                 Data.ShotAccuracy := Min(Max(
-                  StrToIntDef(vleObjectProperty.Values[_lc[I_PROP_TR_SHOT_ACC]], 0), 0), 65535);
+                  StrToIntDef(vleObjectProperty.Values[MsgPropTrShotAcc], 0), 0), 65535);
                 Data.ShotAmmo := Min(Max(
-                  StrToIntDef(vleObjectProperty.Values[_lc[I_PROP_TR_SHOT_AMMO]], 0), 0), 65535);
+                  StrToIntDef(vleObjectProperty.Values[MsgPropTrShotAmmo], 0), 0), 65535);
                 Data.ShotIntReload := Min(Max(
-                  StrToIntDef(vleObjectProperty.Values[_lc[I_PROP_TR_SHOT_RELOAD]], 0), 0), 65535);
+                  StrToIntDef(vleObjectProperty.Values[MsgPropTrShotReload], 0), 0), 65535);
               end;
 
             TRIGGER_EFFECT:
               begin
                 Data.FXCount := Min(Max(
-                  StrToIntDef(vleObjectProperty.Values[_lc[I_PROP_TR_COUNT]], 0), 0), 255);
-                if vleObjectProperty.Values[_lc[I_PROP_TR_EFFECT_TYPE]] = _lc[I_PROP_TR_EFFECT_PARTICLE] then
+                  StrToIntDef(vleObjectProperty.Values[MsgPropTrCount], 0), 0), 255);
+                if vleObjectProperty.Values[MsgPropTrEffectType] = MsgPropTrEffectParticle then
                 begin
                   Data.FXType := TRIGGER_EFFECT_PARTICLE;
                   Data.FXSubType := TRIGGER_EFFECT_SLIQUID;
-                  if vleObjectProperty.Values[_lc[I_PROP_TR_EFFECT_SUBTYPE]] = _lc[I_PROP_TR_EFFECT_SLIQUID] then
+                  if vleObjectProperty.Values[MsgPropTrEffectSubtype] = MsgPropTrEffectSliquid then
                     Data.FXSubType := TRIGGER_EFFECT_SLIQUID
-                  else if vleObjectProperty.Values[_lc[I_PROP_TR_EFFECT_SUBTYPE]] = _lc[I_PROP_TR_EFFECT_LLIQUID] then
+                  else if vleObjectProperty.Values[MsgPropTrEffectSubtype] = MsgPropTrEffectLliquid then
                     Data.FXSubType := TRIGGER_EFFECT_LLIQUID
-                  else if vleObjectProperty.Values[_lc[I_PROP_TR_EFFECT_SUBTYPE]] = _lc[I_PROP_TR_EFFECT_DLIQUID] then
+                  else if vleObjectProperty.Values[MsgPropTrEffectSubtype] = MsgPropTrEffectDliquid then
                     Data.FXSubType := TRIGGER_EFFECT_DLIQUID
-                  else if vleObjectProperty.Values[_lc[I_PROP_TR_EFFECT_SUBTYPE]] = _lc[I_PROP_TR_EFFECT_BLOOD] then
+                  else if vleObjectProperty.Values[MsgPropTrEffectSubtype] = MsgPropTrEffectBlood then
                     Data.FXSubType := TRIGGER_EFFECT_BLOOD
-                  else if vleObjectProperty.Values[_lc[I_PROP_TR_EFFECT_SUBTYPE]] = _lc[I_PROP_TR_EFFECT_SPARK] then
+                  else if vleObjectProperty.Values[MsgPropTrEffectSubtype] = MsgPropTrEffectSpark then
                     Data.FXSubType := TRIGGER_EFFECT_SPARK
-                  else if vleObjectProperty.Values[_lc[I_PROP_TR_EFFECT_SUBTYPE]] = _lc[I_PROP_TR_EFFECT_BUBBLE] then
+                  else if vleObjectProperty.Values[MsgPropTrEffectSubtype] = MsgPropTrEffectBubble then
                     Data.FXSubType := TRIGGER_EFFECT_BUBBLE;
                 end else
                 begin
                   Data.FXType := TRIGGER_EFFECT_ANIMATION;
-                  Data.FXSubType := StrToEffect(vleObjectProperty.Values[_lc[I_PROP_TR_EFFECT_SUBTYPE]]);
+                  Data.FXSubType := StrToEffect(vleObjectProperty.Values[MsgPropTrEffectSubtype]);
                 end;
                 a := Min(Max(
-                  StrToIntDef(vleObjectProperty.Values[_lc[I_PROP_TR_EFFECT_COLOR]], 0), 0), $FFFFFF);
+                  StrToIntDef(vleObjectProperty.Values[MsgPropTrEffectColor], 0), 0), $FFFFFF);
                 Data.FXColorR := a and $FF;
                 Data.FXColorG := (a shr 8) and $FF;
                 Data.FXColorB := (a shr 16) and $FF;
-                if NameToBool(vleObjectProperty.Values[_lc[I_PROP_TR_EFFECT_CENTER]]) then
+                if NameToBool(vleObjectProperty.Values[MsgPropTrEffectCenter]) then
                   Data.FXPos := 0
                 else
                   Data.FXPos := 1;
                 Data.FXWait := Min(Max(
-                  StrToIntDef(vleObjectProperty.Values[_lc[I_PROP_TR_EX_DELAY]], 0), 0), 65535);
+                  StrToIntDef(vleObjectProperty.Values[MsgPropTrExDelay], 0), 0), 65535);
                 Data.FXVelX := Min(Max(
-                  StrToIntDef(vleObjectProperty.Values[_lc[I_PROP_TR_EFFECT_VELX]], 0), -128), 127);
+                  StrToIntDef(vleObjectProperty.Values[MsgPropTrEffectVelx], 0), -128), 127);
                 Data.FXVelY := Min(Max(
-                  StrToIntDef(vleObjectProperty.Values[_lc[I_PROP_TR_EFFECT_VELY]], 0), -128), 127);
+                  StrToIntDef(vleObjectProperty.Values[MsgPropTrEffectVely], 0), -128), 127);
                 Data.FXSpreadL := Min(Max(
-                  StrToIntDef(vleObjectProperty.Values[_lc[I_PROP_TR_EFFECT_SPL]], 0), 0), 255);
+                  StrToIntDef(vleObjectProperty.Values[MsgPropTrEffectSpl], 0), 0), 255);
                 Data.FXSpreadR := Min(Max(
-                  StrToIntDef(vleObjectProperty.Values[_lc[I_PROP_TR_EFFECT_SPR]], 0), 0), 255);
+                  StrToIntDef(vleObjectProperty.Values[MsgPropTrEffectSpr], 0), 0), 255);
                 Data.FXSpreadU := Min(Max(
-                  StrToIntDef(vleObjectProperty.Values[_lc[I_PROP_TR_EFFECT_SPU]], 0), 0), 255);
+                  StrToIntDef(vleObjectProperty.Values[MsgPropTrEffectSpu], 0), 0), 255);
                 Data.FXSpreadD := Min(Max(
-                  StrToIntDef(vleObjectProperty.Values[_lc[I_PROP_TR_EFFECT_SPD]], 0), 0), 255);
+                  StrToIntDef(vleObjectProperty.Values[MsgPropTrEffectSpd], 0), 0), 255);
               end;
           end;
         end;
@@ -5552,9 +5553,9 @@ begin
   if i = -1 then
     Exit;
 
-  if Application.MessageBox(PChar(Format(_lc[I_MSG_DEL_TEXTURE_PROMT],
+  if Application.MessageBox(PChar(Format(MsgMsgDelTexturePromt,
                                 [SelectedTexture()])),
-                PChar(_lc[I_MSG_DEL_TEXTURE]),
+                PChar(MsgMsgDelTexture),
                 MB_ICONQUESTION or MB_YESNO or
                 MB_DEFBUTTON1) <> idYes then
     Exit;
@@ -5564,7 +5565,7 @@ begin
       if (gPanels[a].PanelType <> 0) and
          (gPanels[a].TextureName = SelectedTexture()) then
       begin
-        ErrorMessageBox(_lc[I_MSG_DEL_TEXTURE_CANT]);
+        ErrorMessageBox(MsgMsgDelTextureCant);
         Exit;
       end;
 
@@ -5578,7 +5579,7 @@ end;
 
 procedure TMainForm.aNewMapExecute(Sender: TObject);
 begin
-  if Application.MessageBox(PChar(_lc[I_MSG_CLEAR_MAP_PROMT]), PChar(_lc[I_MSG_CLEAR_MAP]), MB_ICONQUESTION or MB_YESNO or MB_DEFBUTTON1) = mrYes then
+  if Application.MessageBox(PChar(MsgMsgClearMapPromt), PChar(MsgMsgClearMap), MB_ICONQUESTION or MB_YESNO or MB_DEFBUTTON1) = mrYes then
     FullClear();
 end;
 
@@ -6048,11 +6049,11 @@ var
 begin
   Key := vleObjectProperty.Keys[vleObjectProperty.Row];
 
-  if Key = _lc[I_PROP_PANEL_TYPE] then
+  if Key = MsgPropPanelType then
     begin
       with ChooseTypeForm, vleObjectProperty do
       begin // Выбор типа панели:
-        Caption := _lc[I_PROP_PANEL_TYPE];
+        Caption := MsgPropPanelType;
         lbTypeSelect.Items.Clear();
 
         for b := 0 to High(PANELNAMES) do
@@ -6070,33 +6071,33 @@ begin
         end;
       end
     end
-  else if Key = _lc[I_PROP_TR_TELEPORT_TO] then
+  else if Key = MsgPropTrTeleportTo then
     SelectFlag := SELECTFLAG_TELEPORT
-  else if Key = _lc[I_PROP_TR_SPAWN_TO] then
+  else if Key = MsgPropTrSpawnTo then
     SelectFlag := SELECTFLAG_SPAWNPOINT
-  else if (Key = _lc[I_PROP_TR_DOOR_PANEL]) or
-          (Key = _lc[I_PROP_TR_TRAP_PANEL]) then
+  else if (Key = MsgPropTrDoorPanel) or
+          (Key = MsgPropTrTrapPanel) then
     SelectFlag := SELECTFLAG_DOOR
-  else if Key = _lc[I_PROP_TR_TEXTURE_PANEL] then
+  else if Key = MsgPropTrTexturePanel then
   begin
     DrawPressRect := False;
     SelectFlag := SELECTFLAG_TEXTURE;
   end
-  else if Key = _lc[I_PROP_TR_SHOT_PANEL] then
+  else if Key = MsgPropTrShotPanel then
     SelectFlag := SELECTFLAG_SHOTPANEL
-  else if Key = _lc[I_PROP_TR_LIFT_PANEL] then
+  else if Key = MsgPropTrLiftPanel then
     SelectFlag := SELECTFLAG_LIFT
-  else if key = _lc[I_PROP_TR_EX_MONSTER] then
+  else if key = MsgPropTrExMonster then
     SelectFlag := SELECTFLAG_MONSTER
-  else if Key = _lc[I_PROP_TR_EX_AREA] then
+  else if Key = MsgPropTrExArea then
   begin
     SelectFlag := SELECTFLAG_NONE;
     DrawPressRect := True;
   end
-  else if Key = _lc[I_PROP_TR_NEXT_MAP] then
+  else if Key = MsgPropTrNextMap then
     begin // Выбор следующей карты:
       g_ProcessResourceStr(OpenedMap, @FileName, nil, nil);
-      SelectMapForm.Caption := _lc[I_CAP_SELECT];
+      SelectMapForm.Caption := MsgCapSelect;
       SelectMapForm.GetMaps(FileName);
 
       if SelectMapForm.ShowModal() = mrOK then
@@ -6105,8 +6106,8 @@ begin
         vleObjectPropertyApply(Sender);
       end;
     end
-  else if (Key = _lc[I_PROP_TR_SOUND_NAME]) or
-          (Key = _lc[I_PROP_TR_MUSIC_NAME]) then
+  else if (Key = MsgPropTrSoundName) or
+          (Key = MsgPropTrMusicName) then
     begin // Выбор файла звука/музыки:
       AddSoundForm.OKFunction := nil;
       AddSoundForm.lbResourcesList.MultiSelect := False;
@@ -6118,7 +6119,7 @@ begin
         vleObjectPropertyApply(Sender);
       end;
     end
-  else if Key = _lc[I_PROP_TR_ACTIVATION] then
+  else if Key = MsgPropTrActivation then
     with ActivationTypeForm, vleObjectProperty do
     begin // Выбор типов активации:
       cbPlayerCollide.Checked := Pos('PC', Values[Key]) > 0;
@@ -6148,7 +6149,7 @@ begin
         vleObjectPropertyApply(Sender);
       end;
     end
-  else if Key = _lc[I_PROP_TR_KEYS] then
+  else if Key = MsgPropTrKeys then
     with KeysForm, vleObjectProperty do
     begin // Выбор необходимых ключей:
       cbRedKey.Checked := Pos('RK', Values[Key]) > 0;
@@ -6175,10 +6176,10 @@ begin
         vleObjectPropertyApply(Sender);
       end;
     end
-  else if Key = _lc[I_PROP_TR_FX_TYPE] then
+  else if Key = MsgPropTrFxType then
     with ChooseTypeForm, vleObjectProperty do
     begin // Выбор типа эффекта:
-      Caption := _lc[I_CAP_FX_TYPE];
+      Caption := MsgCapFxType;
       lbTypeSelect.Items.Clear();
 
       for b := EFFECT_NONE to EFFECT_FIRE do
@@ -6193,10 +6194,10 @@ begin
         vleObjectPropertyApply(Sender);
       end;
     end
-  else if Key = _lc[I_PROP_TR_MONSTER_TYPE] then
+  else if Key = MsgPropTrMonsterType then
     with ChooseTypeForm, vleObjectProperty do
     begin // Выбор типа монстра:
-      Caption := _lc[I_CAP_MONSTER_TYPE];
+      Caption := MsgCapMonsterType;
       lbTypeSelect.Items.Clear();
 
       for b := MONSTER_DEMON to MONSTER_MAN do
@@ -6211,10 +6212,10 @@ begin
         vleObjectPropertyApply(Sender);
       end;
     end
-  else if Key = _lc[I_PROP_TR_ITEM_TYPE] then
+  else if Key = MsgPropTrItemType then
     with ChooseTypeForm, vleObjectProperty do
     begin // Выбор типа предмета:
-      Caption := _lc[I_CAP_ITEM_TYPE];
+      Caption := MsgCapItemType;
       lbTypeSelect.Items.Clear();
 
       for b := ITEM_MEDKIT_SMALL to ITEM_KEY_BLUE do
@@ -6240,10 +6241,10 @@ begin
         vleObjectPropertyApply(Sender);
       end;
     end
-  else if Key = _lc[I_PROP_TR_SHOT_TYPE] then
+  else if Key = MsgPropTrShotType then
     with ChooseTypeForm, vleObjectProperty do
     begin // Выбор типа предмета:
-      Caption := _lc[I_PROP_TR_SHOT_TYPE];
+      Caption := MsgPropTrShotType;
       lbTypeSelect.Items.Clear();
 
       for b := TRIGGER_SHOT_PISTOL to TRIGGER_SHOT_MAX do
@@ -6258,15 +6259,15 @@ begin
         vleObjectPropertyApply(Sender);
       end;
     end
-  else if Key = _lc[I_PROP_TR_EFFECT_TYPE] then
+  else if Key = MsgPropTrEffectType then
     with ChooseTypeForm, vleObjectProperty do
     begin // Выбор типа эффекта:
-      Caption := _lc[I_CAP_FX_TYPE];
+      Caption := MsgCapFxType;
       lbTypeSelect.Items.Clear();
 
-      lbTypeSelect.Items.Add(_lc[I_PROP_TR_EFFECT_PARTICLE]);
-      lbTypeSelect.Items.Add(_lc[I_PROP_TR_EFFECT_ANIMATION]);
-      if Values[Key] = _lc[I_PROP_TR_EFFECT_ANIMATION] then
+      lbTypeSelect.Items.Add(MsgPropTrEffectParticle);
+      lbTypeSelect.Items.Add(MsgPropTrEffectAnimation);
+      if Values[Key] = MsgPropTrEffectAnimation then
         lbTypeSelect.ItemIndex := 1
       else
         lbTypeSelect.ItemIndex := 0;
@@ -6275,19 +6276,19 @@ begin
       begin
         b := lbTypeSelect.ItemIndex;
         if b = 0 then
-          Values[Key] := _lc[I_PROP_TR_EFFECT_PARTICLE]
+          Values[Key] := MsgPropTrEffectParticle
         else
-          Values[Key] := _lc[I_PROP_TR_EFFECT_ANIMATION];
+          Values[Key] := MsgPropTrEffectAnimation;
         vleObjectPropertyApply(Sender);
       end;
     end
-  else if Key = _lc[I_PROP_TR_EFFECT_SUBTYPE] then
+  else if Key = MsgPropTrEffectSubtype then
     with ChooseTypeForm, vleObjectProperty do
     begin // Выбор подтипа эффекта:
-      Caption := _lc[I_CAP_FX_TYPE];
+      Caption := MsgCapFxType;
       lbTypeSelect.Items.Clear();
 
-      if Values[_lc[I_PROP_TR_EFFECT_TYPE]] = _lc[I_PROP_TR_EFFECT_ANIMATION] then
+      if Values[MsgPropTrEffectType] = MsgPropTrEffectAnimation then
       begin
         for b := EFFECT_TELEPORT to EFFECT_FIRE do
           lbTypeSelect.Items.Add(EffectToStr(b));
@@ -6295,22 +6296,22 @@ begin
         lbTypeSelect.ItemIndex := StrToEffect(Values[Key]) - 1;
       end else
       begin
-        lbTypeSelect.Items.Add(_lc[I_PROP_TR_EFFECT_SLIQUID]);
-        lbTypeSelect.Items.Add(_lc[I_PROP_TR_EFFECT_LLIQUID]);
-        lbTypeSelect.Items.Add(_lc[I_PROP_TR_EFFECT_DLIQUID]);
-        lbTypeSelect.Items.Add(_lc[I_PROP_TR_EFFECT_BLOOD]);
-        lbTypeSelect.Items.Add(_lc[I_PROP_TR_EFFECT_SPARK]);
-        lbTypeSelect.Items.Add(_lc[I_PROP_TR_EFFECT_BUBBLE]);
+        lbTypeSelect.Items.Add(MsgPropTrEffectSliquid);
+        lbTypeSelect.Items.Add(MsgPropTrEffectLliquid);
+        lbTypeSelect.Items.Add(MsgPropTrEffectDliquid);
+        lbTypeSelect.Items.Add(MsgPropTrEffectBlood);
+        lbTypeSelect.Items.Add(MsgPropTrEffectSpark);
+        lbTypeSelect.Items.Add(MsgPropTrEffectBubble);
         lbTypeSelect.ItemIndex := TRIGGER_EFFECT_SLIQUID;
-        if Values[Key] = _lc[I_PROP_TR_EFFECT_LLIQUID] then
+        if Values[Key] = MsgPropTrEffectLliquid then
           lbTypeSelect.ItemIndex := TRIGGER_EFFECT_LLIQUID;
-        if Values[Key] = _lc[I_PROP_TR_EFFECT_DLIQUID] then
+        if Values[Key] = MsgPropTrEffectDliquid then
           lbTypeSelect.ItemIndex := TRIGGER_EFFECT_DLIQUID;
-        if Values[Key] = _lc[I_PROP_TR_EFFECT_BLOOD] then
+        if Values[Key] = MsgPropTrEffectBlood then
           lbTypeSelect.ItemIndex := TRIGGER_EFFECT_BLOOD;
-        if Values[Key] = _lc[I_PROP_TR_EFFECT_SPARK] then
+        if Values[Key] = MsgPropTrEffectSpark then
           lbTypeSelect.ItemIndex := TRIGGER_EFFECT_SPARK;
-        if Values[Key] = _lc[I_PROP_TR_EFFECT_BUBBLE] then
+        if Values[Key] = MsgPropTrEffectBubble then
           lbTypeSelect.ItemIndex := TRIGGER_EFFECT_BUBBLE;
       end;
 
@@ -6318,26 +6319,26 @@ begin
       begin
         b := lbTypeSelect.ItemIndex;
 
-        if Values[_lc[I_PROP_TR_EFFECT_TYPE]] = _lc[I_PROP_TR_EFFECT_ANIMATION] then
+        if Values[MsgPropTrEffectType] = MsgPropTrEffectAnimation then
           Values[Key] := EffectToStr(b + 1)
         else begin
-          Values[Key] := _lc[I_PROP_TR_EFFECT_SLIQUID];
+          Values[Key] := MsgPropTrEffectSliquid;
           if b = TRIGGER_EFFECT_LLIQUID then
-            Values[Key] := _lc[I_PROP_TR_EFFECT_LLIQUID];
+            Values[Key] := MsgPropTrEffectLliquid;
           if b = TRIGGER_EFFECT_DLIQUID then
-            Values[Key] := _lc[I_PROP_TR_EFFECT_DLIQUID];
+            Values[Key] := MsgPropTrEffectDliquid;
           if b = TRIGGER_EFFECT_BLOOD then
-            Values[Key] := _lc[I_PROP_TR_EFFECT_BLOOD];
+            Values[Key] := MsgPropTrEffectBlood;
           if b = TRIGGER_EFFECT_SPARK then
-            Values[Key] := _lc[I_PROP_TR_EFFECT_SPARK];
+            Values[Key] := MsgPropTrEffectSpark;
           if b = TRIGGER_EFFECT_BUBBLE then
-            Values[Key] := _lc[I_PROP_TR_EFFECT_BUBBLE];
+            Values[Key] := MsgPropTrEffectBubble;
         end;
 
         vleObjectPropertyApply(Sender);
       end;
     end
-  else if Key = _lc[I_PROP_TR_EFFECT_COLOR] then
+  else if Key = MsgPropTrEffectColor then
     with vleObjectProperty do
     begin // Выбор цвета эффекта:
       ColorDialog.Color := StrToIntDef(Values[Key], 0);
@@ -6347,7 +6348,7 @@ begin
         vleObjectPropertyApply(Sender);
       end;
     end
-  else if Key = _lc[I_PROP_PANEL_TEX] then
+  else if Key = MsgPropPanelTex then
     begin // Смена текстуры:
       vleObjectProperty.Values[Key] := SelectedTexture();
       vleObjectPropertyApply(Sender);
@@ -6379,7 +6380,7 @@ end;
 
 procedure TMainForm.aOpenMapExecute(Sender: TObject);
 begin
-  OpenDialog.Filter := _lc[I_FILE_FILTER_ALL];
+  OpenDialog.Filter := MsgFileFilterAll;
 
   if OpenDialog.Execute() then
   begin
@@ -6415,31 +6416,8 @@ begin
 end;
 
 procedure TMainForm.FormActivate(Sender: TObject);
-var
-  lang: Integer;
-  config: TConfig;
 begin
   MainForm.ActiveControl := RenderPanel;
-
-// Язык:
-  if (gLanguage = '') and not (fsModal in SelectLanguageForm.FormState) then
-  begin
-    lang := SelectLanguageForm.ShowModal();
-    case lang of
-      1:   gLanguage := LANGUAGE_ENGLISH;
-      2:   gLanguage := LANGUAGE_RUSSIAN;
-      else gLanguage := LANGUAGE_ENGLISH;
-    end;
-
-    config := TConfig.CreateFile(CfgFileName);
-    config.WriteStr('Editor', 'Language', gLanguage);
-    config.SaveFile(CfgFileName);
-    config.Free();
-  end;
-
-  //e_WriteLog('Read language file', MSG_NOTIFY);
-  //g_Language_Load(EditorDir+'\data\'+gLanguage+LANGUAGE_FILE_NAME);
-  g_Language_Set(gLanguage);
 end;
 
 procedure TMainForm.aDeleteMap(Sender: TObject);
@@ -6448,13 +6426,13 @@ var
   FileName: String;
   MapName: String;
 begin
-  OpenDialog.Filter := _lc[I_FILE_FILTER_WAD];
+  OpenDialog.Filter := MsgFileFilterWad;
 
   if not OpenDialog.Execute() then
     Exit;
 
   FileName := OpenDialog.FileName;
-  SelectMapForm.Caption := _lc[I_CAP_REMOVE];
+  SelectMapForm.Caption := MsgCapRemove;
   SelectMapForm.lbMapList.Items.Clear();
   SelectMapForm.GetMaps(FileName);
 
@@ -6462,7 +6440,7 @@ begin
     Exit;
 
   MapName := SelectMapForm.lbMapList.Items[SelectMapForm.lbMapList.ItemIndex];
-  if Application.MessageBox(PChar(Format(_lc[I_MSG_DELETE_MAP_PROMT], [MapName, OpenDialog.FileName])), PChar(_lc[I_MSG_DELETE_MAP]), MB_ICONQUESTION or MB_YESNO or MB_DEFBUTTON2) <> mrYes then
+  if Application.MessageBox(PChar(Format(MsgMsgDeleteMapPromt, [MapName, OpenDialog.FileName])), PChar(MsgMsgDeleteMap), MB_ICONQUESTION or MB_YESNO or MB_DEFBUTTON2) <> mrYes then
     Exit;
 
   g_DeleteResource(FileName, '', MapName, res);
@@ -6473,8 +6451,8 @@ begin
   end;
 
   Application.MessageBox(
-    PChar(Format(_lc[I_MSG_MAP_DELETED_PROMT], [MapName])),
-    PChar(_lc[I_MSG_MAP_DELETED]),
+    PChar(Format(MsgMsgMapDeletedPromt, [MapName])),
+    PChar(MsgMsgMapDeleted),
     MB_ICONINFORMATION or MB_OK or MB_DEFBUTTON1
   );
 
@@ -6638,7 +6616,7 @@ procedure TMainForm.aSaveMapAsExecute(Sender: TObject);
 var
   idx: Integer;
 begin
-  SaveDialog.Filter := _lc[I_FILE_FILTER_WAD];
+  SaveDialog.Filter := MsgFileFilterWad;
 
   if not SaveDialog.Execute() then
     Exit;
@@ -7012,7 +6990,7 @@ begin
   end
   else
   begin
-    Application.MessageBox(PChar(_lc[I_MSG_EXEC_ERROR]), 'FIXME', MB_OK or MB_ICONERROR);
+    Application.MessageBox(PChar(MsgMsgExecError), 'FIXME', MB_OK or MB_ICONERROR);
     SysUtils.DeleteFile(newWAD);
     proc.Free();
   end;
index bcb8ecf9cdfba7c230262dcdcbf7de771e6c30bc..6a562838b73f103f5cec73010193eb4083ea225e 100644 (file)
@@ -76,7 +76,7 @@ begin
 
           if c or ObjectCollideLevel(a, OBJECT_AREA, 0, 0) then
           begin
-            lbErrorList.Items.Add(Format(_lc[I_TEST_AREA_WALL_STR], [a, X, Y]));
+            lbErrorList.Items.Add(Format(MsgTestAreaWallStr, [a, X, Y]));
             SetLength(ErrorsNum, Length(ErrorsNum)+1);
             ErrorsNum[High(ErrorsNum)] := 1;
           end;
@@ -104,7 +104,7 @@ begin
 
           if c or ObjectCollideLevel(a, OBJECT_MONSTER, 0, 0) then
           begin
-            lbErrorList.Items.Add(Format(_lc[I_TEST_MONSTER_WALL_STR], [a, X, Y]));
+            lbErrorList.Items.Add(Format(MsgTestMonsterWallStr, [a, X, Y]));
             SetLength(ErrorsNum, Length(ErrorsNum)+1);
             ErrorsNum[High(ErrorsNum)] := 5;
           end;
@@ -126,21 +126,21 @@ begin
 
   if b > 1 then
   begin
-    lbErrorList.Items.Add(_lc[I_TEST_SPAWNS_1]);
+    lbErrorList.Items.Add(MsgTestSpawns1);
     SetLength(ErrorsNum, Length(ErrorsNum)+1);
     ErrorsNum[High(ErrorsNum)] := 2;
   end;
 
   if bb > 1 then
   begin
-    lbErrorList.Items.Add(_lc[I_TEST_SPAWNS_2]);
+    lbErrorList.Items.Add(MsgTestSpawns2);
     SetLength(ErrorsNum, Length(ErrorsNum)+1);
     ErrorsNum[High(ErrorsNum)] := 3;
   end;
 
   if bbb = 0 then
   begin
-    lbErrorList.Items.Add(_lc[I_TEST_NO_DM]);
+    lbErrorList.Items.Add(MsgTestNoDm);
     SetLength(ErrorsNum, Length(ErrorsNum)+1);
     ErrorsNum[High(ErrorsNum)] := 4;
   end;
@@ -150,10 +150,10 @@ procedure TMapCheckForm.lbErrorListClick(Sender: TObject);
 begin
   if lbErrorList.ItemIndex <> -1 then
     case ErrorsNum[lbErrorList.ItemIndex] of
-      1: mErrorDescription.Text := _lc[I_TEST_AREA_WALL];
-      2, 3: mErrorDescription.Text := _lc[I_TEST_SPAWNS];
-      4: mErrorDescription.Text := _lc[I_TEST_NO_DM_EX];
-      5: mErrorDescription.Text := _lc[I_TEST_MONSTER_WALL];
+      1: mErrorDescription.Text := MsgTestAreaWall;
+      2, 3: mErrorDescription.Text := MsgTestSpawns;
+      4: mErrorDescription.Text := MsgTestNoDmEx;
+      5: mErrorDescription.Text := MsgTestMonsterWall;
     end;
 end;
 
index efeac7d6dab3c7668fe0d5fd06613cf08495f87c..4986d0e9f9aa1f3ffb738260d9025f6853de99c4 100644 (file)
@@ -68,13 +68,13 @@ end;
 procedure TMapOptimizationForm.rbTexturesOptimizationClick(Sender: TObject);
 begin
   pcOptimizationOptions.ActivePage := tsTextureOptimization;
-  lOptimizationDescription.Caption := _lc[I_CTRL_OPT_DESC_TEXTURE];
+  lOptimizationDescription.Caption := MsgCtrlOptDescTexture;
 end;
 
 procedure TMapOptimizationForm.rbPanelsOptimizationClick(Sender: TObject);
 begin
   pcOptimizationOptions.ActivePage := tsPanelOptimization;
-  lOptimizationDescription.Caption := _lc[I_CTRL_OPT_DESC_PANEL];
+  lOptimizationDescription.Caption := MsgCtrlOptDescPanel;
 end;
 
 procedure TMapOptimizationForm.bBeginTextureOptimizationClick(
@@ -92,7 +92,7 @@ begin
 
   if MainForm.lbTextureList.Count = 0 then
   begin
-    mOptimizationResult.Lines.Add(_lc[I_OPT_NO_TEXTURES]);
+    mOptimizationResult.Lines.Add(MsgOptNoTextures);
     Exit;
   end;
 
@@ -117,7 +117,7 @@ begin
         g_DeleteTexture(MainForm.lbTextureList.Items[a]);
         if not b then
         begin
-          mOptimizationResult.Lines.Add(_lc[I_OPT_DELETED_TEXTURES]);
+          mOptimizationResult.Lines.Add(MsgOptDeletedTextures);
           b := True;
         end;
         mOptimizationResult.Lines.Add('  '+MainForm.lbTextureList.Items[a]);
@@ -129,8 +129,8 @@ begin
 
   with mOptimizationResult.Lines do
   begin
-    Add(#13#10+_lc[I_OPT_TOTAL_TEXTURES]+' '+#9+IntToStr(c));
-    Add(_lc[I_OPT_TEX_DELETED]+#9+IntToStr(c-MainForm.lbTextureList.Count));
+    Add(#13#10+MsgOptTotalTextures+' '+#9+IntToStr(c));
+    Add(MsgOptTexDeleted+#9+IntToStr(c-MainForm.lbTextureList.Count));
   end;
 end;
 
@@ -272,65 +272,65 @@ begin
 
   if cbOptimizeWalls.Checked then
   begin
-    mOptimizationResult.Lines.Add(_lc[I_OPT_WALLS]);
+    mOptimizationResult.Lines.Add(MsgOptWalls);
     count := OptimizePanels(PANEL_WALL);
-    mOptimizationResult.Lines.Add(_lc[I_OPT_PANELS_OPT]+' '+IntToStr(count)+#13#10);
+    mOptimizationResult.Lines.Add(MsgOptPanelsOpt+' '+IntToStr(count)+#13#10);
   end;
 
   if cbOptimizeForeGround.Checked then
   begin
-    mOptimizationResult.Lines.Add(_lc[I_OPT_FORES]);
+    mOptimizationResult.Lines.Add(MsgOptFores);
     count := OptimizePanels(PANEL_FORE);
-    mOptimizationResult.Lines.Add(_lc[I_OPT_PANELS_OPT]+' '+IntToStr(count)+#13#10);
+    mOptimizationResult.Lines.Add(MsgOptPanelsOpt+' '+IntToStr(count)+#13#10);
   end;
 
   if cbOptimizeBackGround.Checked then
   begin
-    mOptimizationResult.Lines.Add(_lc[I_OPT_BACKS]);
+    mOptimizationResult.Lines.Add(MsgOptBacks);
     count := OptimizePanels(PANEL_BACK);
-    mOptimizationResult.Lines.Add(_lc[I_OPT_PANELS_OPT]+' '+IntToStr(count)+#13#10);
+    mOptimizationResult.Lines.Add(MsgOptPanelsOpt+' '+IntToStr(count)+#13#10);
   end;
 
   if cbOptimizeSteps.Checked then
   begin
-    mOptimizationResult.Lines.Add(_lc[I_OPT_STAIRS]);
+    mOptimizationResult.Lines.Add(MsgOptStairs);
     count := OptimizePanels(PANEL_STEP);
-    mOptimizationResult.Lines.Add(_lc[I_OPT_PANELS_OPT]+' '+IntToStr(count)+#13#10);
+    mOptimizationResult.Lines.Add(MsgOptPanelsOpt+' '+IntToStr(count)+#13#10);
   end;
 
   if cbOptimizeWater.Checked then
   begin
-    mOptimizationResult.Lines.Add(_lc[I_OPT_WATER]);
+    mOptimizationResult.Lines.Add(MsgOptWater);
     count := OptimizePanels(PANEL_WATER);
-    mOptimizationResult.Lines.Add(_lc[I_OPT_PANELS_OPT]+' '+IntToStr(count)+#13#10);
+    mOptimizationResult.Lines.Add(MsgOptPanelsOpt+' '+IntToStr(count)+#13#10);
   end;
 
   if cbOptimizeAcid1.Checked then
   begin
-    mOptimizationResult.Lines.Add(_lc[I_OPT_ACID1]);
+    mOptimizationResult.Lines.Add(MsgOptAcid1);
     count := OptimizePanels(PANEL_ACID1);
-    mOptimizationResult.Lines.Add(_lc[I_OPT_PANELS_OPT]+' '+IntToStr(count)+#13#10);
+    mOptimizationResult.Lines.Add(MsgOptPanelsOpt+' '+IntToStr(count)+#13#10);
   end;
 
   if cbOptimizeAcid2.Checked then
   begin
-    mOptimizationResult.Lines.Add(_lc[I_OPT_ACID2]);
+    mOptimizationResult.Lines.Add(MsgOptAcid2);
     count := OptimizePanels(PANEL_ACID2);
-    mOptimizationResult.Lines.Add(_lc[I_OPT_PANELS_OPT]+' '+IntToStr(count)+#13#10);
+    mOptimizationResult.Lines.Add(MsgOptPanelsOpt+' '+IntToStr(count)+#13#10);
   end;
 
   if cbOptimizeLift.Checked then
   begin
-    mOptimizationResult.Lines.Add(_lc[I_OPT_LIFTS]);
+    mOptimizationResult.Lines.Add(MsgOptLifts);
     count := OptimizePanels(PANEL_LIFTUP)+OptimizePanels(PANEL_LIFTDOWN)+OptimizePanels(PANEL_LIFTLEFT)+OptimizePanels(PANEL_LIFTRIGHT);
-    mOptimizationResult.Lines.Add(_lc[I_OPT_PANELS_OPT]+' '+IntToStr(count)+#13#10);
+    mOptimizationResult.Lines.Add(MsgOptPanelsOpt+' '+IntToStr(count)+#13#10);
   end;
 
   if cbOptimizeBlockMon.Checked then
   begin
-    mOptimizationResult.Lines.Add(_lc[I_OPT_BLOCKMON]);
+    mOptimizationResult.Lines.Add(MsgOptBlockmon);
     count := OptimizePanels(PANEL_BLOCKMON);
-    mOptimizationResult.Lines.Add(_lc[I_OPT_PANELS_OPT]+' '+IntToStr(count)+#13#10);
+    mOptimizationResult.Lines.Add(MsgOptPanelsOpt+' '+IntToStr(count)+#13#10);
   end;
 
   panelcount2 := 0;
@@ -339,9 +339,9 @@ begin
       panelcount2 := panelcount2 + 1;
 
   mOptimizationResult.Lines.Add('-----------------------');
-  mOptimizationResult.Lines.Add(_lc[I_OPT_TOTAL_PANELS]+' '+IntToStr(panelcount1));
-  mOptimizationResult.Lines.Add(_lc[I_OPT_PANELS_AFTER]+' '+IntToStr(panelcount2));
-  mOptimizationResult.Lines.Add(_lc[I_OPT_PANELS_OPT]+' '+IntToStr(panelcount1-panelcount2));
+  mOptimizationResult.Lines.Add(MsgOptTotalPanels+' '+IntToStr(panelcount1));
+  mOptimizationResult.Lines.Add(MsgOptPanelsAfter+' '+IntToStr(panelcount2));
+  mOptimizationResult.Lines.Add(MsgOptPanelsOpt+' '+IntToStr(panelcount1-panelcount2));
 end;
 
 end.
index 3e331173159df91e493bc4aede3224be0434f7eb..4a7a74662f7017164835aaf1fd230892a7ec8bf2 100644 (file)
@@ -1,7 +1,7 @@
 object OptionsForm: TOptionsForm
-  Left = 812
+  Left = 1164
   Height = 360
-  Top = 429
+  Top = 677
   Width = 640
   BorderIcons = [biSystemMenu]
   BorderStyle = bsSingle
@@ -234,23 +234,14 @@ object OptionsForm: TOptionsForm
         Caption = 'Язык:'
         ParentColor = False
       end
-      object rbRussian: TRadioButton
+      object cbLanguage: TComboBox
         Left = 304
-        Height = 21
-        Top = 204
-        Width = 70
-        Caption = 'Русский'
-        Checked = True
+        Height = 26
+        Top = 192
+        Width = 68
+        ItemHeight = 0
+        Style = csDropDownList
         TabOrder = 13
-        TabStop = True
-      end
-      object rbEnglish: TRadioButton
-        Left = 304
-        Height = 21
-        Top = 188
-        Width = 63
-        Caption = 'English'
-        TabOrder = 14
       end
     end
     object TabFiles: TTabSheet
@@ -261,7 +252,7 @@ object OptionsForm: TOptionsForm
         Left = 8
         Height = 21
         Top = 8
-        Width = 208
+        Width = 249
         Caption = 'Сжимать архив при сохранении'
         TabOrder = 2
       end
@@ -269,7 +260,7 @@ object OptionsForm: TOptionsForm
         Left = 8
         Height = 21
         Top = 32
-        Width = 218
+        Width = 258
         Caption = 'Резервная копия при сохранении'
         TabOrder = 3
       end
@@ -355,7 +346,7 @@ object OptionsForm: TOptionsForm
         Left = 8
         Height = 21
         Top = 104
-        Width = 91
+        Width = 103
         Caption = 'Deathmatch'
         Checked = True
         TabOrder = 0
@@ -365,7 +356,7 @@ object OptionsForm: TOptionsForm
         Left = 8
         Height = 21
         Top = 120
-        Width = 124
+        Width = 142
         Caption = 'Team Deathmatch'
         TabOrder = 1
       end
@@ -373,7 +364,7 @@ object OptionsForm: TOptionsForm
         Left = 8
         Height = 21
         Top = 136
-        Width = 114
+        Width = 131
         Caption = 'Capture the Flag'
         TabOrder = 2
       end
@@ -381,7 +372,7 @@ object OptionsForm: TOptionsForm
         Left = 8
         Height = 21
         Top = 152
-        Width = 92
+        Width = 102
         Caption = 'Cooperative'
         TabOrder = 3
       end
@@ -389,7 +380,7 @@ object OptionsForm: TOptionsForm
         Left = 168
         Height = 21
         Top = 104
-        Width = 89
+        Width = 101
         Caption = 'Два игрока'
         TabOrder = 4
       end
@@ -397,7 +388,7 @@ object OptionsForm: TOptionsForm
         Left = 168
         Height = 21
         Top = 120
-        Width = 141
+        Width = 164
         Caption = 'Урон своей команде'
         TabOrder = 5
       end
@@ -405,7 +396,7 @@ object OptionsForm: TOptionsForm
         Left = 168
         Height = 21
         Top = 136
-        Width = 122
+        Width = 141
         Caption = 'Выход из уровня'
         Checked = True
         State = cbChecked
@@ -415,7 +406,7 @@ object OptionsForm: TOptionsForm
         Left = 168
         Height = 21
         Top = 152
-        Width = 125
+        Width = 145
         Caption = 'Оружие остается'
         TabOrder = 7
       end
@@ -423,7 +414,7 @@ object OptionsForm: TOptionsForm
         Left = 168
         Height = 21
         Top = 168
-        Width = 103
+        Width = 124
         Caption = 'Монстры в DM'
         TabOrder = 8
       end
@@ -471,7 +462,7 @@ object OptionsForm: TOptionsForm
         Left = 8
         Height = 21
         Top = 256
-        Width = 241
+        Width = 287
         Caption = 'Закрыть игру после выхода из карты'
         TabOrder = 11
       end
index a663bb20d5fc1200c972a87c0cb26eaec9636122..51f2ea698f63a1d6e8f62ebf069195e0fc95923e 100644 (file)
@@ -7,7 +7,7 @@ interface
 uses
   LCLIntf, LCLType, SysUtils, Variants, Classes,
   Graphics, Controls, Forms, Dialogs, StdCtrls,
-  ExtCtrls, ComCtrls, Registry, Math, Types;
+  ExtCtrls, ComCtrls, ActnList, Registry, Math, Types;
 
 type
 
@@ -19,6 +19,7 @@ type
     cbCheckerboard: TCheckBox;
     cbCompress: TCheckBox;
     cbBackup: TCheckBox;
+    cbLanguage: TComboBox;
     PageControl: TPageControl;
     TabGeneral: TTabSheet;
     TabFiles: TTabSheet;
@@ -54,8 +55,6 @@ type
     eRecent: TEdit;
     UpDown3: TUpDown;
     LabelLanguage: TLabel;
-    rbRussian: TRadioButton;
-    rbEnglish: TRadioButton;
     LabelGridSize: TLabel;
     cbDotSize: TComboBox;
   // Map testing:
@@ -105,7 +104,7 @@ procedure RegisterFileType(ext: String; FileName: String);
 implementation
 
 uses
-  f_main, StdConvs, CONFIG, g_language, g_resources, g_options;
+  LazFileUtils, StrUtils, f_main, StdConvs, CONFIG, g_language, g_resources, g_options;
 
 {$R *.lfm}
 
@@ -146,6 +145,7 @@ begin
 end;
 
 procedure TOptionsForm.FormActivate(Sender: TObject);
+  var info: TSearchRec; s: String; i: Integer;
 begin
   sDotColor.Brush.Color := DotColor;
   cbShowDots.Checked := DotEnable;
@@ -168,17 +168,25 @@ begin
     cbDotSize.ItemIndex := 0;
   eRecent.Text := IntToStr(RecentCount);
 
-// Язык:
-  if gLanguage = LANGUAGE_RUSSIAN then
+  try
+    cbLanguage.Items.BeginUpdate;
+    cbLanguage.Items.Clear;
+    cbLanguage.Items.Add('Auto');
+    if FindFirst(LangDir + DirectorySeparator + '*.mo', faAnyFile, info) = 0 then
     begin
-      rbRussian.Checked := True;
-      rbEnglish.Checked := False;
-    end
-  else
-    begin
-      rbRussian.Checked := False;
-      rbEnglish.Checked := True;
+      repeat
+        s := ExtractFileNameWithoutExt(info.Name);
+        // TODO: check encoding part in name (editor.ru_RU.UTF-8.mo)
+        i := Max(RPos('.', s), 1);
+        s := Copy(s, i + 1, Length(s) - i);
+        cbLanguage.Items.Add(s);
+      until FindNext(info) <> 0;
+      FindClose(info);
     end;
+    cbLanguage.ItemIndex := IfThen(gLanguage = '', 0, cbLanguage.Items.IndexOf(gLanguage));
+  finally
+    cbLanguage.Items.EndUpdate;
+  end;
 
   if TestGameMode = 'TDM' then
     rbTDM.Checked := True
@@ -211,17 +219,10 @@ var
 begin
   // General tab
 
-  if rbRussian.Checked then
-    str := LANGUAGE_RUSSIAN
-  else
-    str := LANGUAGE_ENGLISH;
-
-// Нужно сменить язык:
-  if gLanguage <> str then
+  if cbLanguage.ItemIndex <= 0 then str := '' else str := cbLanguage.Items[cbLanguage.ItemIndex];
+  if (str = '') or (gLanguage <> str) then
   begin
     gLanguage := str;
-    //e_WriteLog('Read language file', MSG_NOTIFY);
-    //g_Language_Load(EditorDir+'\data\'+gLanguage+LANGUAGE_FILE_NAME);
     g_Language_Set(gLanguage);
   end;
   
index a8ad07a7eecc8b9120c3e4d9d6f7512b71c793d9..f06f5c8c6b15e7715131a600304fc5abf2f1c7b3 100644 (file)
@@ -64,7 +64,7 @@ const
 
 procedure TPackMapForm.bSelectWADClick(Sender: TObject);
 begin
-  SaveDialog.Filter := _lc[I_FILE_FILTER_WAD];
+  SaveDialog.Filter := MsgFileFilterWad;
 
   if SaveDialog.Execute() then
     eWAD.Text := SaveDialog.FileName;
@@ -99,8 +99,8 @@ begin
   end
   else
   begin
-    //Application.MessageBox(PChar(Format(_lc[I_MSG_WAD_ERROR], [ExtractFileName(filename)])), PChar(_lc[I_MSG_ERROR]), MB_OK + MB_ICONERROR);
-    Application.MessageBox(PChar(Format(_lc[I_MSG_RES_ERROR], [filename, section, resource])), PChar(_lc[I_MSG_ERROR]), MB_OK + MB_ICONERROR);
+    //Application.MessageBox(PChar(Format(MsgMsgWadError, [ExtractFileName(filename)])), PChar(MsgMsgError), MB_OK + MB_ICONERROR);
+    Application.MessageBox(PChar(Format(MsgMsgResError, [filename, section, resource])), PChar(MsgMsgError), MB_OK + MB_ICONERROR);
     Result := False
   end
 end;
@@ -309,7 +309,7 @@ begin
   Close();
 
   ASSERT(a = 0); (* saved *)
-  MessageDlg(Format(_lc[I_MSG_PACKED], [eResource.Text, ExtractFileName(eWAD.Text)]), mtInformation, [mbOK], 0);
+  MessageDlg(Format(MsgMsgPacked, [eResource.Text, ExtractFileName(eWAD.Text)]), mtInformation, [mbOK], 0);
 end;
 
 procedure TPackMapForm.FormCreate(Sender: TObject);
index c9fff9e176ad1ad4af64556d727649e390d3111f..a508c24bc2a2240d477dab6a5e650c4b6c041c84 100644 (file)
@@ -69,9 +69,9 @@ begin
   for a := 0 to lbMapList.Count-1 do
     if eMapName.Text = lbMapList.Items[a] then
     begin
-      ok := Application.MessageBox(PChar(Format(_lc[I_MSG_MAP_EXISTS],
+      ok := Application.MessageBox(PChar(Format(MsgMsgMapExists,
                                        [eMapName.Text])),
-                       PChar(_lc[I_MSG_SAVE_MAP]),
+                       PChar(MsgMsgSaveMap),
                        MB_ICONQUESTION or MB_YESNO or MB_DEFBUTTON1) = mrYes;
       if not ok then
         Exit;
diff --git a/src/editor/f_selectlang.lfm b/src/editor/f_selectlang.lfm
deleted file mode 100644 (file)
index f01b8d8..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-object SelectLanguageForm: TSelectLanguageForm
-  Left = 365
-  Height = 63
-  Top = 244
-  Width = 193
-  BorderIcons = []
-  BorderStyle = bsSingle
-  Caption = 'Language / Язык'
-  ClientHeight = 63
-  ClientWidth = 193
-  Color = clBtnFace
-  DefaultMonitor = dmMainForm
-  Font.Color = clWindowText
-  Font.Height = -11
-  Font.Name = 'MS Sans Serif'
-  OnActivate = FormActivate
-  Position = poMainFormCenter
-  LCLVersion = '1.6.4.0'
-  object Label1: TLabel
-    Left = 8
-    Height = 13
-    Top = 8
-    Width = 174
-    Caption = 'Select Language / Выберите язык:'
-    ParentColor = False
-  end
-  object Button1: TButton
-    Left = 8
-    Height = 25
-    Top = 32
-    Width = 75
-    Caption = 'English'
-    TabOrder = 1
-  end
-  object Button2: TButton
-    Left = 112
-    Height = 25
-    Top = 32
-    Width = 75
-    Caption = 'Русский'
-    TabOrder = 0
-  end
-end
diff --git a/src/editor/f_selectlang.pas b/src/editor/f_selectlang.pas
deleted file mode 100644 (file)
index bfb9998..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-unit f_selectlang;
-
-{$INCLUDE ../shared/a_modes.inc}
-
-interface
-
-uses
-  LCLIntf, LCLType, LMessages, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
-  Dialogs, StdCtrls;
-
-type
-  TSelectLanguageForm = class(TForm)
-    Button1: TButton;
-    Button2: TButton;
-    Label1: TLabel;
-    procedure FormActivate(Sender: TObject);
-    
-  private
-    { Private declarations }
-  public
-    { Public declarations }
-  end;
-
-var
-  SelectLanguageForm: TSelectLanguageForm;
-
-implementation
-
-{$R *.lfm}
-
-procedure TSelectLanguageForm.FormActivate(Sender: TObject);
-begin
-  Button1.ModalResult := 1;
-  Button2.ModalResult := 2;
-end;
-
-end.
index 4d3ae7ed69acbbee655e126627a2d6ae45f6282f..bcb99cabcaa1d79d4a8a60697b569bd088bfad58 100644 (file)
 
 Interface
 
-Uses
-  g_Basic, MAPDEF;
-
-Type
-  TStrings_Locale = (
-    I_NOT_ACCESSIBLE,
-
-    I_ARRAY_BOOL_FALSE,
-    I_ARRAY_BOOL_TRUE,
-
-    I_ARRAY_DIR_LEFT,
-    I_ARRAY_DIR_RIGHT,
-    I_ARRAY_DIR_SAME,
-    I_ARRAY_DIR_REVERSED,
-
-    I_ARRAY_DIRBTN_LEFT,
-    I_ARRAY_DIRBTN_RIGHT,
-    I_ARRAY_DIRBTN_UP,
-    I_ARRAY_DIRBTN_DOWN,
-
-    I_ARRAY_PANEL_WALL,
-    I_ARRAY_PANEL_BACK,
-    I_ARRAY_PANEL_FRONT,
-    I_ARRAY_PANEL_DOOR_OPEN,
-    I_ARRAY_PANEL_DOOR_CLOSE,
-    I_ARRAY_PANEL_STAIR,
-    I_ARRAY_PANEL_WATER,
-    I_ARRAY_PANEL_ACID_1,
-    I_ARRAY_PANEL_ACID_2,
-    I_ARRAY_PANEL_LIFT_UP,
-    I_ARRAY_PANEL_LIFT_DOWN,
-    I_ARRAY_PANEL_LIFT_LEFT,
-    I_ARRAY_PANEL_LIFT_RIGHT,
-    I_ARRAY_PANEL_BLOCKMON,
-
-    I_ARRAY_FX_NONE,
-    I_ARRAY_FX_TELEPORT,
-    I_ARRAY_FX_RESPAWN,
-    I_ARRAY_FX_FIRE,
-
-    I_ARRAY_ITEM_MEDKIT,
-    I_ARRAY_ITEM_LARGE_MEDKIT,
-    I_ARRAY_ITEM_BLACK_MEDKIT,
-    I_ARRAY_ITEM_GREEN_ARMOR,
-    I_ARRAY_ITEM_BLUE_ARMOR,
-    I_ARRAY_ITEM_BLUE_SPHERE,
-    I_ARRAY_ITEM_MEGASPHERE,
-    I_ARRAY_ITEM_HAZ_SUIT,
-    I_ARRAY_ITEM_OXYGEN,
-    I_ARRAY_ITEM_INVULNERABILITY,
-    I_ARRAY_ITEM_CHAINSAW,
-    I_ARRAY_ITEM_SHOTGUN,
-    I_ARRAY_ITEM_DB_SHOTGUN,
-    I_ARRAY_ITEM_CHAINGUN,
-    I_ARRAY_ITEM_ROCKET_LAUNCHER,
-    I_ARRAY_ITEM_PLASMA_RIFLE,
-    I_ARRAY_ITEM_BFG,
-    I_ARRAY_ITEM_SUPER_MINIGUN,
-    I_ARRAY_ITEM_FLAMETHROWER,
-    I_ARRAY_ITEM_CLIP,
-    I_ARRAY_ITEM_AMMO_BOX,
-    I_ARRAY_ITEM_4_SHELLS,
-    I_ARRAY_ITEM_25_SHELLS,
-    I_ARRAY_ITEM_1_ROCKET,
-    I_ARRAY_ITEM_ROCKET_BOX,
-    I_ARRAY_ITEM_CELL,
-    I_ARRAY_ITEM_LARGE_CELL,
-    I_ARRAY_ITEM_FUELCAN,
-    I_ARRAY_ITEM_BACKPACK,
-    I_ARRAY_ITEM_KEY_RED,
-    I_ARRAY_ITEM_KEY_GREEN,
-    I_ARRAY_ITEM_KEY_BLUE,
-    I_ARRAY_ITEM_BOTTLE,
-    I_ARRAY_ITEM_HELMET,
-    I_ARRAY_ITEM_JETPACK,
-    I_ARRAY_ITEM_INVIS,
-
-    I_ARRAY_SHOT_PISTOL,
-    I_ARRAY_SHOT_BULLET,
-    I_ARRAY_SHOT_SHOTGUN,
-    I_ARRAY_SHOT_SSG,
-    I_ARRAY_SHOT_IMP,
-    I_ARRAY_SHOT_PLASMA,
-    I_ARRAY_SHOT_SPIDER,
-    I_ARRAY_SHOT_CACO,
-    I_ARRAY_SHOT_BARON,
-    I_ARRAY_SHOT_MANCUB,
-    I_ARRAY_SHOT_REV,
-    I_ARRAY_SHOT_ROCKET,
-    I_ARRAY_SHOT_BFG,
-    I_ARRAY_SHOT_EXPL,
-    I_ARRAY_SHOT_BFGEXPL,
-    I_ARRAY_SHOT_FLAME,
-
-    I_ARRAY_MON_DEMON,
-    I_ARRAY_MON_IMP,
-    I_ARRAY_MON_ZOMBIE,
-    I_ARRAY_MON_SERGEANT,
-    I_ARRAY_MON_CYBER,
-    I_ARRAY_MON_CGUN,
-    I_ARRAY_MON_HELL_BARON,
-    I_ARRAY_MON_HELL_KNIGHT,
-    I_ARRAY_MON_CACODEMON,
-    I_ARRAY_MON_LOST_SOUL,
-    I_ARRAY_MON_PAIN_ELEMENTAL,
-    I_ARRAY_MON_MASTERMIND,
-    I_ARRAY_MON_ARACHNATRON,
-    I_ARRAY_MON_MANCUBUS,
-    I_ARRAY_MON_REVENANT,
-    I_ARRAY_MON_ARCHVILE,
-    I_ARRAY_MON_FISH,
-    I_ARRAY_MON_BARREL,
-    I_ARRAY_MON_ROBOT,
-    I_ARRAY_MON_PRIKOLIST,
-
-    I_ARRAY_AREA_PLAYER_ONE,
-    I_ARRAY_AREA_PLAYER_TWO,
-    I_ARRAY_AREA_DM,
-    I_ARRAY_AREA_FLAG_RED,
-    I_ARRAY_AREA_FLAG_BLUE,
-    I_ARRAY_AREA_FLAG_DOM,
-    I_ARRAY_AREA_TEAM_RED,
-    I_ARRAY_AREA_TEAM_BLUE,
-
-    I_ARRAY_TR_EXIT,
-    I_ARRAY_TR_TELEPORT,
-    I_ARRAY_TR_DOOR_OPEN,
-    I_ARRAY_TR_DOOR_CLOSE,
-    I_ARRAY_TR_DOOR_SWITCH,
-    I_ARRAY_TR_DOOR_5_SEC,
-    I_ARRAY_TR_TRAP_CLOSE,
-    I_ARRAY_TR_TRAP,
-    I_ARRAY_TR_EXTEND,
-    I_ARRAY_TR_SECRET,
-    I_ARRAY_TR_LIFT_UP,
-    I_ARRAY_TR_LIFT_DOWN,
-    I_ARRAY_TR_LIFT_SWITCH,
-    I_ARRAY_TR_TEXTURE,
-    I_ARRAY_TR_ON,
-    I_ARRAY_TR_OFF,
-    I_ARRAY_TR_SWITCH,
-    I_ARRAY_TR_SOUND,
-    I_ARRAY_TR_SPAWN_MONSTER,
-    I_ARRAY_TR_SPAWN_ITEM,
-    I_ARRAY_TR_MUSIC,
-    I_ARRAY_TR_PUSH,
-    I_ARRAY_TR_SCORE,
-    I_ARRAY_TR_MESSAGE,
-    I_ARRAY_TR_DAMAGE,
-    I_ARRAY_TR_HEALTH,
-    I_ARRAY_TR_SHOT,
-    I_ARRAY_TR_EFFECT,
-
-    I_PROP_ID,
-    I_PROP_X,
-    I_PROP_Y,
-    I_PROP_WIDTH,
-    I_PROP_HEIGHT,
-    I_PROP_PANEL_TYPE,
-    I_PROP_PANEL_TEX,
-    I_PROP_PANEL_ALPHA,
-    I_PROP_PANEL_BLEND,
-    I_PROP_DM_ONLY,
-    I_PROP_ITEM_FALLS,
-    I_PROP_DIRECTION,
-
-    I_PROP_TR_TYPE,
-    I_PROP_TR_ENABLED,
-    I_PROP_TR_TEXTURE_PANEL,
-    I_PROP_TR_ACTIVATION,
-    I_PROP_TR_KEYS,
-    I_PROP_TR_D2D,
-    I_PROP_TR_SILENT,
-    I_PROP_TR_COUNT,
-    I_PROP_TR_INTERVAL,
-    I_PROP_TR_HEALTH,
-    I_PROP_TR_NEXT_MAP,
-    I_PROP_TR_TELEPORT_TO,
-    I_PROP_TR_TELEPORT_SILENT,
-    I_PROP_TR_TELEPORT_DIR,
-    I_PROP_TR_DOOR_PANEL,
-    I_PROP_TR_TRAP_PANEL,
-    I_PROP_TR_EX_AREA,
-    I_PROP_TR_EX_DELAY,
-    I_PROP_TR_EX_COUNT,
-    I_PROP_TR_EX_MONSTER,
-    I_PROP_TR_EX_RANDOM,
-    I_PROP_TR_LIFT_PANEL,
-    I_PROP_TR_TEXTURE_ONCE,
-    I_PROP_TR_TEXTURE_ANIM_ONCE,
-    I_PROP_TR_SOUND_NAME,
-    I_PROP_TR_SOUND_VOLUME,
-    I_PROP_TR_SOUND_PAN,
-    I_PROP_TR_SOUND_COUNT,
-    I_PROP_TR_SOUND_LOCAL,
-    I_PROP_TR_SOUND_SWITCH,
-    I_PROP_TR_FX_TYPE,
-    I_PROP_TR_SPAWN_TO,
-    I_PROP_TR_SPAWN_MAX,
-    I_PROP_TR_SPAWN_DELAY,
-    I_PROP_TR_MONSTER_TYPE,
-    I_PROP_TR_MONSTER_ACTIVE,
-    I_PROP_TR_MONSTER_BEHAVIOUR,
-    I_PROP_TR_MONSTER_BEHAVIOUR_0,
-    I_PROP_TR_MONSTER_BEHAVIOUR_1,
-    I_PROP_TR_MONSTER_BEHAVIOUR_2,
-    I_PROP_TR_MONSTER_BEHAVIOUR_3,
-    I_PROP_TR_MONSTER_BEHAVIOUR_4,
-    I_PROP_TR_MONSTER_BEHAVIOUR_5,
-    I_PROP_TR_ITEM_TYPE,
-    I_PROP_TR_MUSIC_NAME,
-    I_PROP_TR_MUSIC_ACT,
-    I_PROP_TR_MUSIC_ON,
-    I_PROP_TR_MUSIC_OFF,
-    I_PROP_TR_PUSH_ANGLE,
-    I_PROP_TR_PUSH_FORCE,
-    I_PROP_TR_PUSH_RESET,
-    I_PROP_TR_SCORE_ACT,
-    I_PROP_TR_SCORE_ACT_0,
-    I_PROP_TR_SCORE_ACT_1,
-    I_PROP_TR_SCORE_ACT_2,
-    I_PROP_TR_SCORE_ACT_3,
-    I_PROP_TR_SCORE_TEAM,
-    I_PROP_TR_SCORE_TEAM_0,
-    I_PROP_TR_SCORE_TEAM_1,
-    I_PROP_TR_SCORE_TEAM_2,
-    I_PROP_TR_SCORE_TEAM_3,
-    I_PROP_TR_SCORE_CON,
-    I_PROP_TR_SCORE_MSG,
-    I_PROP_TR_DAMAGE_VALUE,
-    I_PROP_TR_DAMAGE_KIND,
-    I_PROP_TR_DAMAGE_KIND_0,
-    I_PROP_TR_DAMAGE_KIND_3,
-    I_PROP_TR_DAMAGE_KIND_4,
-    I_PROP_TR_DAMAGE_KIND_5,
-    I_PROP_TR_DAMAGE_KIND_6,
-    I_PROP_TR_DAMAGE_KIND_7,
-    I_PROP_TR_DAMAGE_KIND_8,
-    I_PROP_TR_HEALTH_MAX,
-    I_PROP_TR_SHOT_TYPE,
-    I_PROP_TR_SHOT_SOUND,
-    I_PROP_TR_SHOT_ANGLE,
-    I_PROP_TR_SHOT_ACC,
-    I_PROP_TR_SHOT_TO,
-    I_PROP_TR_SHOT_TO_0,
-    I_PROP_TR_SHOT_TO_1,
-    I_PROP_TR_SHOT_TO_2,
-    I_PROP_TR_SHOT_TO_3,
-    I_PROP_TR_SHOT_TO_4,
-    I_PROP_TR_SHOT_TO_5,
-    I_PROP_TR_SHOT_TO_6,
-    I_PROP_TR_SHOT_AIM,
-    I_PROP_TR_SHOT_AIM_0,
-    I_PROP_TR_SHOT_AIM_1,
-    I_PROP_TR_SHOT_AIM_2,
-    I_PROP_TR_SHOT_AIM_3,
-    I_PROP_TR_SHOT_AMMO,
-    I_PROP_TR_SHOT_RELOAD,
-    I_PROP_TR_SHOT_SIGHT,
-    I_PROP_TR_SHOT_PANEL,
-    I_PROP_TR_MESSAGE_KIND,
-    I_PROP_TR_MESSAGE_KIND_0,
-    I_PROP_TR_MESSAGE_KIND_1,
-    I_PROP_TR_MESSAGE_TO,
-    I_PROP_TR_MESSAGE_TO_0,
-    I_PROP_TR_MESSAGE_TO_1,
-    I_PROP_TR_MESSAGE_TO_2,
-    I_PROP_TR_MESSAGE_TO_3,
-    I_PROP_TR_MESSAGE_TO_4,
-    I_PROP_TR_MESSAGE_TO_5,
-    I_PROP_TR_MESSAGE_TEXT,
-    I_PROP_TR_MESSAGE_TIME,
-    I_PROP_TR_EFFECT_TYPE,
-    I_PROP_TR_EFFECT_SUBTYPE,
-    I_PROP_TR_EFFECT_COLOR,
-    I_PROP_TR_EFFECT_CENTER,
-    I_PROP_TR_EFFECT_VELX,
-    I_PROP_TR_EFFECT_VELY,
-    I_PROP_TR_EFFECT_SPL,
-    I_PROP_TR_EFFECT_SPR,
-    I_PROP_TR_EFFECT_SPU,
-    I_PROP_TR_EFFECT_SPD,
-    I_PROP_TR_EFFECT_PARTICLE,
-    I_PROP_TR_EFFECT_ANIMATION,
-    I_PROP_TR_EFFECT_SLIQUID,
-    I_PROP_TR_EFFECT_LLIQUID,
-    I_PROP_TR_EFFECT_DLIQUID,
-    I_PROP_TR_EFFECT_BLOOD,
-    I_PROP_TR_EFFECT_SPARK,
-    I_PROP_TR_EFFECT_BUBBLE,
-
-    I_MSG_ERROR,
-    I_MSG_WRONG_TEXWIDTH,
-    I_MSG_WRONG_TEXHEIGHT,
-    I_MSG_WRONG_ALPHA,
-    I_MSG_WRONG_SIZE,
-    I_MSG_WRONG_XY,
-    I_MSG_TEXTURE_ALREADY,
-    I_MSG_RES_NAME_64,
-    I_MSG_CHOOSE_ITEM,
-    I_MSG_CHOOSE_MONSTER,
-    I_MSG_CHOOSE_AREA,
-    I_MSG_CHOOSE_TEXTURE,
-    I_MSG_CHOOSE_RES,
-    I_MSG_EXIT,
-    I_MSG_EXIT_PROMT,
-    I_MSG_DEL_TEXTURE,
-    I_MSG_DEL_TEXTURE_PROMT,
-    I_MSG_DEL_TEXTURE_CANT,
-    I_MSG_DEL_RECENT,
-    I_MSG_DEL_RECENT_PROMT,
-    I_MSG_CLEAR_MAP,
-    I_MSG_CLEAR_MAP_PROMT,
-    I_MSG_DELETE_MAP,
-    I_MSG_DELETE_MAP_PROMT,
-    I_MSG_MAP_DELETED,
-    I_MSG_MAP_DELETED_PROMT,
-    I_MSG_REOPEN_MAP_PROMT,
-    I_MSG_EXEC_ERROR,
-    I_MSG_SOUND_ERROR,
-    I_MSG_WAD_ERROR,
-    I_MSG_RES_ERROR,
-    I_MSG_PACKED,
-    I_MSG_MAP_EXISTS,
-    I_MSG_SAVE_MAP,
-
-    I_HINT_TELEPORT,
-    I_HINT_SPAWN,
-    I_HINT_PANEL_DOOR,
-    I_HINT_PANEL_TEXTURE,
-    I_HINT_PANEL_SHOT,
-    I_HINT_PANEL_LIFT,
-    I_HINT_MONSTER,
-    I_HINT_EXT_AREA,
-    I_HINT_WIDTH,
-    I_HINT_HEIGHT,
-
-    I_MENU_FILE,
-    I_MENU_FILE_NEW,
-    I_MENU_FILE_OPEN,
-    I_MENU_FILE_SAVE,
-    I_MENU_FILE_SAVE_AS,
-    I_MENU_FILE_OPEN_WAD,
-    I_MENU_FILE_REOPEN,
-    I_MENU_FILE_SAVE_MINI,
-    I_MENU_FILE_DELETE,
-    I_MENU_FILE_PACK_MAP,
-    I_MENU_FILE_EXIT,
-
-    I_MENU_EDIT,
-    I_MENU_EDIT_UNDO,
-    I_MENU_EDIT_COPY,
-    I_MENU_EDIT_CUT,
-    I_MENU_EDIT_PASTE,
-    I_MENU_EDIT_SELECT_ALL,
-    I_MENU_EDIT_TO_FORE,
-    I_MENU_EDIT_TO_BACK,
-
-    I_MENU_TOOLS,
-    I_MENU_TOOLS_SNAP_GRID,
-    I_MENU_TOOLS_MINIMAP,
-    I_MENU_TOOLS_STEP_GRID,
-    I_MENU_TOOLS_SHOW_EDGES,
-    I_MENU_TOOLS_LAYERS,
-
-    I_MENU_SERV,
-    I_MENU_SERV_TEST,
-    I_MENU_SERV_OPT,
-    I_MENU_SERV_PREVIEW,
-    I_MENU_SERV_LAUNCH,
-
-    I_MENU_SETS,
-    I_MENU_SETS_MAP,
-    I_MENU_SETS_EDITOR,
-    I_MENU_SETS_LAUNCH,
-
-    I_MENU_HELP,
-    I_MENU_HELP_ABOUT,
-
-    I_MENU_LAYER_BACK,
-    I_MENU_LAYER_WALL,
-    I_MENU_LAYER_FORE,
-    I_MENU_LAYER_STAIR,
-    I_MENU_LAYER_WATER,
-    I_MENU_LAYER_ITEM,
-    I_MENU_LAYER_MONSTER,
-    I_MENU_LAYER_AREA,
-    I_MENU_LAYER_TRIGGER,
-
-    I_MENU_TB_NEW,
-    I_MENU_TB_OPEN,
-    I_MENU_TB_SAVE,
-    I_MENU_TB_OPEN_WAD,
-    I_MENU_TB_MINIMAP,
-    I_MENU_TB_LAYERS,
-    I_MENU_TB_GRID,
-    I_MENU_TB_GRID_STEP,
-    I_MENU_TB_LAUNCH,
-
-    I_MENU_LAUNCH_SETS,
-
-    I_CAP_FX_TYPE,
-    I_CAP_MONSTER_TYPE,
-    I_CAP_ITEM_TYPE,
-    I_CAP_ABOUT,
-    I_CAP_ACT,
-    I_CAP_ADD_SKY,
-    I_CAP_ADD_SOUND,
-    I_CAP_ADD_TEXTURE,
-    I_CAP_KEYS,
-    I_CAP_TEST,
-    I_CAP_OPT,
-    I_CAP_SETS,
-    I_CAP_LAUNCH,
-    I_CAP_ES,
-    I_CAP_PACK,
-    I_CAP_SAVE,
-    I_CAP_MINI,
-    I_CAP_SELECT,
-    I_CAP_OPEN,
-    I_CAP_REMOVE,
-    I_CAP_TEXTURE,
-    I_CAP_ANIMATION,
-    I_CAP_STAT_SELECTED,
-
-    I_CTRL_PROP_KEY,
-    I_CTRL_PROP_VALUE,
-    I_CTRL_PANELS,
-    I_CTRL_ITEMS,
-    I_CTRL_MONSTERS,
-    I_CTRL_AREAS,
-    I_CTRL_TRIGGERS,
-
-    I_CTRL_LIST_TEXTURE,
-    I_CTRL_LIST_ITEM,
-    I_CTRL_LIST_MONSTER,
-    I_CTRL_LIST_AREA,
-    I_CTRL_LIST_TRIGGER,
-    I_CTRL_LIST_ACTIVE,
-    I_CTRL_LIST_KEYS,
-
-    I_CTRL_PREVIEW,
-    I_CTRL_ITEM_DM,
-    I_CTRL_ITEM_FALLS,
-    I_CTRL_LEFT,
-    I_CTRL_RIGHT,
-
-    I_CTRL_ACT_PLAYER_CLOSE,
-    I_CTRL_ACT_MONSTER_CLOSE,
-    I_CTRL_ACT_PLAYER_PRESS,
-    I_CTRL_ACT_MONSTER_PRESS,
-    I_CTRL_ACT_SHOT,
-    I_CTRL_ACT_NO_MONSTER,
-
-    I_CTRL_KEYS_RED,
-    I_CTRL_KEYS_GREEN,
-    I_CTRL_KEYS_BLUE,
-    I_CTRL_KEYS_TEAM_RED,
-    I_CTRL_KEYS_TEAM_BLUE,
-    
-    I_CTRL_OPT_GB,
-    I_CTRL_OPT_TEXTURE,
-    I_CTRL_OPT_PANEL,
-    I_CTRL_OPT_WALL,
-    I_CTRL_OPT_FORE,
-    I_CTRL_OPT_BACK,
-    I_CTRL_OPT_STAIR,
-    I_CTRL_OPT_WATER,
-    I_CTRL_OPT_ACID1,
-    I_CTRL_OPT_ACID2,
-    I_CTRL_OPT_LIFT,
-    I_CTRL_OPT_BLOCKMON,
-    I_CTRL_OPT_DESC_TEXTURE,
-    I_CTRL_OPT_DESC_PANEL,
-
-    I_CTRL_SETS_STATS,
-    I_CTRL_SETS_SIZES,
-
-    I_CTRL_LAUNCH_DM,
-    I_CTRL_LAUNCH_TDM,
-    I_CTRL_LAUNCH_CTF,
-    I_CTRL_LAUNCH_COOP,
-    I_CTRL_LAUNCH_2P,
-    I_CTRL_LAUNCH_FF,
-    I_CTRL_LAUNCH_EXIT,
-    I_CTRL_LAUNCH_WEAPONS,
-    I_CTRL_LAUNCH_MONSTERS,
-    I_CTRL_LAUNCH_CLOSE,
-    I_CTRL_LAUNCH_OPEN,
-
-    I_CTRL_ES_GRID,
-    I_CTRL_ES_TEXTURE,
-    I_CTRL_ES_PANEL_SIZE,
-    I_CTRL_ES_CHECKERBOARD,
-
-    I_CTRL_PACK_TEXTURES,
-    I_CTRL_PACK_SKY,
-    I_CTRL_PACK_MUSIC,
-    I_CTRL_PACK_ADD,
-    I_CTRL_PACK_NON_STD,
-
-    I_LAB_TEX_WIDTH,
-    I_LAB_TEX_HEIGHT,
-
-    I_LAB_SPECTRUM,
-
-    I_LAB_ABOUT_VER,
-    I_LAB_ABOUT_AUTHOR,
-    I_LAB_ABOUT_AUTHOR_2,
-    I_LAB_ABOUT_MAIL,
-    I_LAB_ABOUT_MAIL_2,
-    I_LAB_ABOUT_SITE,
-    I_LAB_ABOUT_HTTP,
-
-    I_LAB_ADD_WADS,
-    I_LAB_ADD_SECTIONS,
-
-    I_LAB_SETS_NAME,
-    I_LAB_SETS_DESC,
-    I_LAB_SETS_AUTHOR,
-    I_LAB_SETS_BACK,
-    I_LAB_SETS_MUSIC,
-    I_LAB_SETS_TEXTURES,
-    I_LAB_SETS_PANELS,
-    I_LAB_SETS_ITEMS,
-    I_LAB_SETS_MONSTERS,
-    I_LAB_SETS_AREAS,
-    I_LAB_SETS_TRIGGERS,
-    I_LAB_SETS_SIZES,
-    I_LAB_SETS_WIDTH,
-    I_LAB_SETS_HEIGHT,
-    I_LAB_SETS_MAPMOVE,
-    I_LAB_SETS_SNAPPING,
-
-    I_LAB_LAUNCH_TIME,
-    I_LAB_LAUNCH_SECS,
-    I_LAB_LAUNCH_SCORE,
-    I_LAB_LAUNCH_PATH,
-    I_LAB_LAUNCH_ARGS,
-
-    I_LAB_ES_GRID,
-    I_LAB_ES_GRID_COLOR,
-    I_LAB_ES_GRID_SIZE,
-    I_LAB_ES_BACK,
-    I_LAB_ES_PREVIEW,
-    I_LAB_ES_MINIMAP,
-    I_LAB_ES_RECENT,
-    I_LAB_ES_LANGUAGE,
-    I_LAB_ES_COMPRESS,
-    I_LAB_ES_BACKUP,
-
-    I_LAB_PACK_SAVE_TO,
-    I_LAB_PACK_MAP_NAME,
-    I_LAB_PACK_TEXTURES,
-    I_LAB_PACK_SKY,
-    I_LAB_PACK_MUSIC,
-
-    I_LAB_MINI_SCALE,
-    
-    I_BTN_APPLY_PROPS,
-    I_BTN_OK,
-    I_BTN_CANCEL,
-    I_BTN_ADD,
-    I_BTN_CLOSE,
-    I_BTN_ADD_CLOSE,
-    I_BTN_TEST_AGAIN,
-    I_BTN_START,
-    I_BTN_PACK,
-    I_BTN_SAVE,
-    I_BTN_NO_SOUND,
-    I_BTN_TEXTURE_ADD,
-    I_BTN_TEXTURE_DELETE,
-    I_BTN_TEXTURE_EMPTY,
-
-    I_LOAD_WAD,
-    I_LOAD_MAP,
-    I_LOAD_TEXTURES,
-    I_LOAD_PANELS,
-    I_LOAD_ITEMS,
-    I_LOAD_MONSTERS,
-    I_LOAD_AREAS,
-    I_LOAD_TRIGGERS,
-
-    I_TEST_AREA_WALL,
-    I_TEST_AREA_WALL_STR,
-    I_TEST_SPAWNS_1,
-    I_TEST_SPAWNS_2,
-    I_TEST_SPAWNS,
-    I_TEST_NO_DM,
-    I_TEST_NO_DM_EX,
-    I_TEST_MONSTER_WALL,
-    I_TEST_MONSTER_WALL_STR,
-
-    I_OPT_NO_TEXTURES,
-    I_OPT_DELETED_TEXTURES,
-    I_OPT_TOTAL_TEXTURES,
-    I_OPT_TEX_DELETED,
-    I_OPT_PANELS_OPT,
-    I_OPT_WALLS,
-    I_OPT_FORES,
-    I_OPT_BACKS,
-    I_OPT_STAIRS,
-    I_OPT_WATER,
-    I_OPT_ACID1,
-    I_OPT_ACID2,
-    I_OPT_LIFTS,
-    I_OPT_BLOCKMON,
-    I_OPT_TOTAL_PANELS,
-    I_OPT_PANELS_AFTER,
-
-    I_WAD_SPECIAL_MAP,
-    I_WAD_SPECIAL_TEXS,
-
-    I_FILE_FILTER_ALL,
-    I_FILE_FILTER_WAD,
-
-    I_EDITOR_TITLE,
-    
-    I_LAST );
-
-Const
-  LANGUAGE_RUSSIAN = 'Russian';
-  LANGUAGE_ENGLISH = 'English';
-  LANGUAGE_RUSSIAN_N = 3;
-  LANGUAGE_ENGLISH_N = 2;
+  uses g_Basic, MAPDEF;
+
+  resourcestring
+    MsgNotAccessible = 'N/A';
+
+    MsgArrayBoolFalse = 'No';
+    MsgArrayBoolTrue = 'Yes';
+
+    MsgArrayDirLeft = 'Left';
+    MsgArrayDirRight = 'Right';
+    MsgArrayDirSame = 'Don''t change';
+    MsgArrayDirReversed = 'Reversed';
+
+    MsgArrayDirbtnLeft = 'Left';
+    MsgArrayDirbtnRight = 'Right';
+    MsgArrayDirbtnUp = 'Up';
+    MsgArrayDirbtnDown = 'Down';
+
+    MsgArrayPanelWall = 'Wall';
+    MsgArrayPanelBack = 'Background';
+    MsgArrayPanelFront = 'Foreground';
+    MsgArrayPanelDoorOpen = 'Open Door';
+    MsgArrayPanelDoorClose = 'Closed Door';
+    MsgArrayPanelStair = 'Step';
+    MsgArrayPanelWater = 'Water';
+    MsgArrayPanelAcid1 = 'Acid 1';
+    MsgArrayPanelAcid2 = 'Acid 2';
+    MsgArrayPanelLiftUp = 'Stream Up';
+    MsgArrayPanelLiftDown = 'Stream Down';
+    MsgArrayPanelLiftLeft = 'Stream Left';
+    MsgArrayPanelLiftRight = 'Stream Right';
+    MsgArrayPanelBlockmon = 'Monster Boundary';
+
+    MsgArrayFxNone = 'None';
+    MsgArrayFxTeleport = 'Teleport';
+    MsgArrayFxRespawn = 'Respawn';
+    MsgArrayFxFire = 'Arch-Vile Fire';
+
+    MsgArrayItemMedkit = 'Stimpack';
+    MsgArrayItemLargeMedkit = 'Medikit';
+    MsgArrayItemBlackMedkit = 'Berserk Pack';
+    MsgArrayItemGreenArmor = 'Green Armor';
+    MsgArrayItemBlueArmor = 'Blue Armor';
+    MsgArrayItemBlueSphere = 'Soulsphere';
+    MsgArrayItemMegasphere = 'Megasphere';
+    MsgArrayItemHazSuit = 'Envirosuit';
+    MsgArrayItemOxygen = 'Scuba';
+    MsgArrayItemInvulnerability = 'Invulnerability';
+    MsgArrayItemChainsaw = 'Chainsaw';
+    MsgArrayItemShotgun = 'Shotgun';
+    MsgArrayItemDbShotgun = 'Super Shotgun';
+    MsgArrayItemChaingun = 'Chaingun';
+    MsgArrayItemRocketLauncher = 'Rocket Launcher';
+    MsgArrayItemPlasmaRifle = 'Plasma Rifle';
+    MsgArrayItemBfg = 'BFG9000';
+    MsgArrayItemSuperMinigun = 'Super Chaingun';
+    MsgArrayItemFlamethrower = 'Flamethrower';
+    MsgArrayItemClip = 'Clip';
+    MsgArrayItemAmmoBox = 'Box of Bullets';
+    MsgArrayItem4Shells = '4 Shells';
+    MsgArrayItem25Shells = 'Box of Shells';
+    MsgArrayItem1Rocket = 'Rocket';
+    MsgArrayItemRocketBox = 'Box of Rockets';
+    MsgArrayItemCell = 'Energy Cell';
+    MsgArrayItemLargeCell = 'Energy Cell Pack';
+    MsgArrayItemFuelcan = 'Fuel Canister';
+    MsgArrayItemBackpack = 'Backpack';
+    MsgArrayItemKeyRed = 'Red Key';
+    MsgArrayItemKeyGreen = 'Green Key';
+    MsgArrayItemKeyBlue = 'Blue Key';
+    MsgArrayItemBottle = 'Health Globe';
+    MsgArrayItemHelmet = 'Armor Shard';
+    MsgArrayItemJetpack = 'Jetpack';
+    MsgArrayItemInvis = 'Invisibility';
+
+    MsgArrayShotPistol = 'Pistol shot';
+    MsgArrayShotBullet = 'Chaingun shot';
+    MsgArrayShotShotgun = 'Shotgun shot';
+    MsgArrayShotSsg = 'Super Shotgun shot';
+    MsgArrayShotImp = 'Imp fireball';
+    MsgArrayShotPlasma = 'Blue plasma';
+    MsgArrayShotSpider = 'Arachnotron plasma';
+    MsgArrayShotCaco = 'Cacodemon fireball';
+    MsgArrayShotBaron = 'Hell Baron projectile';
+    MsgArrayShotMancub = 'Mancubus gunshot';
+    MsgArrayShotRev = 'Revenant projectile';
+    MsgArrayShotRocket = 'Rocket';
+    MsgArrayShotBfg = 'BFG ball';
+    MsgArrayShotExpl = 'Explosion';
+    MsgArrayShotBfgexpl = 'BFG explosion';
+    MsgArrayShotFlame = 'Flame';
+
+    MsgArrayMonDemon = 'Pinky';
+    MsgArrayMonImp = 'Imp';
+    MsgArrayMonZombie = 'Zombie';
+    MsgArrayMonSergeant = 'Sergeant';
+    MsgArrayMonCyber = 'Cyberdemon';
+    MsgArrayMonCgun = 'Commando';
+    MsgArrayMonHellBaron = 'Hell Baron';
+    MsgArrayMonHellKnight = 'Hell Knight';
+    MsgArrayMonCacodemon = 'Cacodemon';
+    MsgArrayMonLostSoul = 'Lost Soul';
+    MsgArrayMonPainElemental = 'Pain Elemental';
+    MsgArrayMonMastermind = 'Spider Mastermind';
+    MsgArrayMonArachnatron = 'Arachnotron';
+    MsgArrayMonMancubus = 'Mancubus';
+    MsgArrayMonRevenant = 'Revenant';
+    MsgArrayMonArchvile = 'Arch-Vile';
+    MsgArrayMonFish = 'Piranha';
+    MsgArrayMonBarrel = 'Barrel';
+    MsgArrayMonRobot = 'Robot';
+    MsgArrayMonPrikolist = 'Prikolist';
+
+    MsgArrayAreaPlayerOne = 'Player 1';
+    MsgArrayAreaPlayerTwo = 'Player 2';
+    MsgArrayAreaDm = 'DM Spawn Point';
+    MsgArrayAreaFlagRed = 'Red Flag';
+    MsgArrayAreaFlagBlue = 'Blue Flag';
+    MsgArrayAreaFlagDom = 'Domination Flag';
+    MsgArrayAreaTeamRed = 'Red Team';
+    MsgArrayAreaTeamBlue = 'Blue Team';
+
+    MsgArrayTrExit = 'Exit';
+    MsgArrayTrTeleport = 'Teleport';
+    MsgArrayTrDoorOpen = 'Open Door';
+    MsgArrayTrDoorClose = 'Close Door';
+    MsgArrayTrDoorSwitch = 'Door';
+    MsgArrayTrDoor5Sec = 'Door (5 sec)';
+    MsgArrayTrTrapClose = 'Close Trap';
+    MsgArrayTrTrap = 'Trap';
+    MsgArrayTrExtend = 'Extender';
+    MsgArrayTrSecret = 'Secret';
+    MsgArrayTrLiftUp = 'Turn stream up/left';
+    MsgArrayTrLiftDown = 'Turn stream down/right';
+    MsgArrayTrLiftSwitch = 'Revert stream';
+    MsgArrayTrTexture = 'Change Texture';
+    MsgArrayTrOn = 'Enable Trigger';
+    MsgArrayTrOff = 'Disable Trigger';
+    MsgArrayTrSwitch = 'Trigger Toggle';
+    MsgArrayTrSound = 'Play Sound';
+    MsgArrayTrSpawnMonster = 'Spawn Monster';
+    MsgArrayTrSpawnItem = 'Spawn Item';
+    MsgArrayTrMusic = 'Play Music';
+    MsgArrayTrPush = 'Push';
+    MsgArrayTrScore = 'Team Score';
+    MsgArrayTrMessage = 'Message';
+    MsgArrayTrDamage = 'Damage';
+    MsgArrayTrHealth = 'Healer';
+    MsgArrayTrShot = 'Turret';
+    MsgArrayTrEffect = 'Effect';
+
+    MsgPropId = 'ID';
+    MsgPropX = 'X';
+    MsgPropY = 'Y';
+    MsgPropWidth = 'Width';
+    MsgPropHeight = 'Height';
+    MsgPropPanelType = 'Panel Type';
+    MsgPropPanelTex = 'Texture';
+    MsgPropPanelAlpha = 'Transparency';
+    MsgPropPanelBlend = 'Blending';
+    MsgPropDmOnly = 'DM Only';
+    MsgPropItemFalls = 'Falls';
+    MsgPropDirection = 'Direction';
+
+    MsgPropTrType = 'Trigger Type';
+    MsgPropTrEnabled = 'Enabled';
+    MsgPropTrTexturePanel = 'Textured Panel';
+    MsgPropTrActivation = 'Activation Type';
+    MsgPropTrKeys = 'Keys';
+    MsgPropTrD2d = 'D2D-like';
+    MsgPropTrSilent = 'Silent';
+    MsgPropTrCount = 'Count';
+    MsgPropTrInterval = 'Interval (in ticks)';
+    MsgPropTrHealth = 'Health';
+    MsgPropTrNextMap = 'Next Map';
+    MsgPropTrTeleportTo = 'Teleport to';
+    MsgPropTrTeleportSilent = 'Silent';
+    MsgPropTrTeleportDir = 'New Direction';
+    MsgPropTrDoorPanel = 'Door Panel';
+    MsgPropTrTrapPanel = 'Trap Panel';
+    MsgPropTrExArea = 'Action Area';
+    MsgPropTrExDelay = 'Delay';
+    MsgPropTrExCount = 'Count';
+    MsgPropTrExMonster = 'Monster ID';
+    MsgPropTrExRandom = 'Random';
+    MsgPropTrLiftPanel = 'Stream Panel';
+    MsgPropTrTextureOnce = 'Once';
+    MsgPropTrTextureAnimOnce = 'Animate Once';
+    MsgPropTrSoundName = 'Sound                              (snd)';
+    MsgPropTrSoundVolume = 'Volume';
+    MsgPropTrSoundPan = 'Pan';
+    MsgPropTrSoundCount = 'Loops';
+    MsgPropTrSoundLocal = 'Local';
+    MsgPropTrSoundSwitch = 'Switch';
+    MsgPropTrFxType = 'Effect';
+    MsgPropTrSpawnTo = 'Spawn at';
+    MsgPropTrSpawnMax = 'Maximum';
+    MsgPropTrSpawnDelay = 'Autospawn (in ticks)';
+    MsgPropTrMonsterType = 'Monster';
+    MsgPropTrMonsterActive = 'Active';
+    MsgPropTrMonsterBehaviour = 'Behaviour';
+    MsgPropTrMonsterBehaviour0 = 'Normal';
+    MsgPropTrMonsterBehaviour1 = 'Killer';
+    MsgPropTrMonsterBehaviour2 = 'Maniac';
+    MsgPropTrMonsterBehaviour3 = 'Insane';
+    MsgPropTrMonsterBehaviour4 = 'Cannibal';
+    MsgPropTrMonsterBehaviour5 = 'Good';
+    MsgPropTrItemType = 'Item';
+    MsgPropTrMusicName = 'Music';
+    MsgPropTrMusicAct = 'Action                             (m)';
+    MsgPropTrMusicOn = 'Play';
+    MsgPropTrMusicOff = 'Pause';
+    MsgPropTrPushAngle = 'Angle';
+    MsgPropTrPushForce = 'Force';
+    MsgPropTrPushReset = 'Reset velocity';
+    MsgPropTrScoreAct = 'Action                             (s)';
+    MsgPropTrScoreAct0 = 'Add points';
+    MsgPropTrScoreAct1 = 'Subtract points';
+    MsgPropTrScoreAct2 = 'Team Wins';
+    MsgPropTrScoreAct3 = 'Team Loses';
+    MsgPropTrScoreTeam = 'Team';
+    MsgPropTrScoreTeam0 = 'My';
+    MsgPropTrScoreTeam1 = 'Enemy';
+    MsgPropTrScoreTeam2 = 'Red';
+    MsgPropTrScoreTeam3 = 'Blue';
+    MsgPropTrScoreCon = 'Console message';
+    MsgPropTrScoreMsg = 'Game message';
+    MsgPropTrDamageValue = 'Damage';
+    MsgPropTrDamageKind = 'Damage type';
+    MsgPropTrDamageKind0 = 'HIT_SOME';
+    MsgPropTrDamageKind3 = 'HIT_TRAP';
+    MsgPropTrDamageKind4 = 'HIT_FALL';
+    MsgPropTrDamageKind5 = 'HIT_WATER';
+    MsgPropTrDamageKind6 = 'HIT_ACID';
+    MsgPropTrDamageKind7 = 'HIT_ELECTRO';
+    MsgPropTrDamageKind8 = 'HIT_FLAME';
+    MsgPropTrHealthMax = 'To maximum';
+    MsgPropTrShotType = 'Projectile';
+    MsgPropTrShotSound = 'Shot sound';
+    MsgPropTrShotAngle = 'Angle';
+    MsgPropTrShotAcc = 'Spread';
+    MsgPropTrShotTo = 'Auto targeting';
+    MsgPropTrShotTo0 = 'None';
+    MsgPropTrShotTo1 = 'Monsters';
+    MsgPropTrShotTo2 = 'Players';
+    MsgPropTrShotTo3 = 'Red team';
+    MsgPropTrShotTo4 = 'Blue team';
+    MsgPropTrShotTo5 = 'Monsters, players';
+    MsgPropTrShotTo6 = 'Players, monsters';
+    MsgPropTrShotAim = 'Auto-aiming mode';
+    MsgPropTrShotAim0 = 'Trigger area';
+    MsgPropTrShotAim1 = 'Entire map';
+    MsgPropTrShotAim2 = 'Trace trigger area';
+    MsgPropTrShotAim3 = 'Trace entire map';
+    MsgPropTrShotAmmo = 'Ammo limit';
+    MsgPropTrShotReload = 'Reload interval (in ticks)';
+    MsgPropTrShotSight = 'Sight interval (in ticks)';
+    MsgPropTrShotPanel = 'Indicator panel';
+    MsgPropTrMessageKind = 'Message kind';
+    MsgPropTrMessageKind0 = 'Console message';
+    MsgPropTrMessageKind1 = 'Event message';
+    MsgPropTrMessageTo = 'Send to';
+    MsgPropTrMessageTo0 = 'Me';
+    MsgPropTrMessageTo1 = 'My team';
+    MsgPropTrMessageTo2 = 'Enemy team';
+    MsgPropTrMessageTo3 = 'Red team';
+    MsgPropTrMessageTo4 = 'Blue team';
+    MsgPropTrMessageTo5 = 'Everyone';
+    MsgPropTrMessageText = 'Message text';
+    MsgPropTrMessageTime = 'Time (in ticks)';
+    MsgPropTrEffectType = 'Effect type';
+    MsgPropTrEffectSubtype = 'Effect subtype';
+    MsgPropTrEffectColor = 'Effect color';
+    MsgPropTrEffectCenter = 'Trigger center';
+    MsgPropTrEffectVelx = 'Horizontal speed';
+    MsgPropTrEffectVely = 'Vertical speed';
+    MsgPropTrEffectSpl = 'Speed variance left';
+    MsgPropTrEffectSpr = 'Speed variance right';
+    MsgPropTrEffectSpu = 'Speed variance up';
+    MsgPropTrEffectSpd = 'Speed variance down';
+    MsgPropTrEffectParticle = 'Particle generator';
+    MsgPropTrEffectAnimation = 'Animation';
+    MsgPropTrEffectSliquid = 'Water splash';
+    MsgPropTrEffectLliquid = 'Light colored splash';
+    MsgPropTrEffectDliquid = 'Dark colored splash';
+    MsgPropTrEffectBlood = 'Blood';
+    MsgPropTrEffectSpark = 'Sparks';
+    MsgPropTrEffectBubble = 'Bubbles';
+
+    MsgMsgError = 'Error';
+    MsgMsgWrongTexwidth = 'Panel Width must be a multiple of Texture Width (%d)';
+    MsgMsgWrongTexheight = 'Panel Height must be a multiple of Texture Height (%d)';
+    MsgMsgWrongAlpha = 'Transparency must be in [0..255] interval';
+    MsgMsgWrongSize = 'Width and Height must be greater than 0';
+    MsgMsgWrongXy = 'X or Y coordinate hasn''t been set';
+    MsgMsgTextureAlready = 'Texture "%s" already exists';
+    MsgMsgResName64 = 'Resource "%s" name must not be longer than 64 chars';
+    MsgMsgChooseItem = 'Select Item';
+    MsgMsgChooseMonster = 'Select Monster';
+    MsgMsgChooseArea = 'Select Area';
+    MsgMsgChooseTexture = 'Select Texture';
+    MsgMsgChooseRes = 'Resource hasn''t been selected';
+    MsgMsgExit = 'Exit';
+    MsgMsgExitPromt = 'Leaving so soon?';
+    MsgMsgDelTexture = 'Delete the texture';
+    MsgMsgDelTexturePromt = 'Delete the texture "%s" ?';
+    MsgMsgDelTextureCant = 'Can''t delete texture in use. Replace it on all panels with this texture.';
+    MsgMsgDelRecent = 'File does not longer exist';
+    MsgMsgDelRecentPromt = 'Remove entry from recent list?';
+    MsgMsgClearMap = 'New map';
+    MsgMsgClearMapPromt = 'Clear the entire map?';
+    MsgMsgDeleteMap = 'Delete the map';
+    MsgMsgDeleteMapPromt = 'Delete the map "%s" from "%s" ?';
+    MsgMsgMapDeleted = 'Map is deleted';
+    MsgMsgMapDeletedPromt = 'Map "%s" is deleted';
+    MsgMsgReopenMapPromt = 'Reopen this map?';
+    MsgMsgExecError = 'Game start error';
+    MsgMsgSoundError = 'Can''t play sound';
+    MsgMsgWadError = 'Can''t open WAD: %s';
+    MsgMsgResError = 'Can''t read resource: %s:%s\%s';
+    MsgMsgPacked = 'Map "%s" with resources saved to "%s"';
+    MsgMsgMapExists = 'Map "%s" already exists. Overwrite?';
+    MsgMsgSaveMap = 'Save the map';
+
+    MsgHintTeleport = 'Choose destination of Teleport';
+    MsgHintSpawn = 'Choose Spawn point';
+    MsgHintPanelDoor = 'Choose Door';
+    MsgHintPanelTexture = 'Choose textured Panel';
+    MsgHintPanelShot = 'Choose textured shot indicator Panel';
+    MsgHintPanelLift = 'Choose Stream Panel';
+    MsgHintMonster = 'Choose Monster';
+    MsgHintExtArea = 'Specify action Area';
+    MsgHintWidth = 'Width: %d';
+    MsgHintHeight = 'Height: %d';
+
+    MsgMenuFile = 'File';
+    MsgMenuFileNew = 'New';
+    MsgMenuFileOpen = 'Open...';
+    MsgMenuFileSave = 'Save';
+    MsgMenuFileSaveAs = 'Save As...';
+    MsgMenuFileOpenWad = 'Select Map...';
+    MsgMenuFileReopen = 'Revert to Saved';
+    MsgMenuFileSaveMini = 'Save Minimap...';
+    MsgMenuFileDelete = 'Delete from WAD...';
+    MsgMenuFilePackMap = 'Pack to WAD...';
+    MsgMenuFileExit = 'Exit';
+
+    MsgMenuEdit = 'Edit';
+    MsgMenuEditUndo = 'Undo';
+    MsgMenuEditCopy = 'Copy';
+    MsgMenuEditCut = 'Cut';
+    MsgMenuEditPaste = 'Paste';
+    MsgMenuEditSelectAll = 'Select All';
+    MsgMenuEditToFore = 'Bring to Front';
+    MsgMenuEditToBack = 'Send to Back';
+
+    MsgMenuTools = 'Tools';
+    MsgMenuToolsSnapGrid = 'Snap to Grid';
+    MsgMenuToolsMinimap = 'Show Minimap';
+    MsgMenuToolsStepGrid = 'Switch Grid Granularity';
+    MsgMenuToolsShowEdges = 'Show Map Bounds';
+    MsgMenuToolsLayers = 'Layers';
+
+    MsgMenuServ = 'Service';
+    MsgMenuServTest = 'Analyse Map...';
+    MsgMenuServOpt = 'Optimize Map...';
+    MsgMenuServPreview = 'Preview Mode';
+    MsgMenuServLaunch = 'Run Test';
+
+    MsgMenuSets = 'Settings';
+    MsgMenuSetsMap = 'Map Properties...';
+    MsgMenuSetsEditor = 'Preferences...';
+    MsgMenuSetsLaunch = 'In-game test settings';
+
+    MsgMenuHelp = 'Help';
+    MsgMenuHelpAbout = 'About';
+
+    MsgMenuLayerBack = '1. Background';
+    MsgMenuLayerWall = '2. Walls';
+    MsgMenuLayerFore = '3. Foreground';
+    MsgMenuLayerStair = '4. Steps';
+    MsgMenuLayerWater = '5. Liquids';
+    MsgMenuLayerItem = '6. Items';
+    MsgMenuLayerMonster = '7. Monsters';
+    MsgMenuLayerArea = '8. Areas';
+    MsgMenuLayerTrigger = '9. Triggers';
+
+    MsgMenuTbNew = 'New Map';
+    MsgMenuTbOpen = 'Open Map';
+    MsgMenuTbSave = 'Save Map';
+    MsgMenuTbOpenWad = 'Open another Map from same WAD';
+    MsgMenuTbMinimap = 'Show Mini-map';
+    MsgMenuTbLayers = 'Show/Hide Objects';
+    MsgMenuTbGrid = 'Grid On/Off';
+    MsgMenuTbGridStep = 'Switch Grid step';
+    MsgMenuTbLaunch = 'Run Test';
+
+    MsgMenuLaunchSets = 'Settings...';
+
+    MsgCapFxType = 'Select Effect type';
+    MsgCapMonsterType = 'Select Monster type';
+    MsgCapItemType = 'Select Item type';
+    MsgCapAbout = 'About Map Editor';
+    MsgCapAct = 'Activation type';
+    MsgCapAddSky = 'Select Sky Texture';
+    MsgCapAddSound = 'Select Sound/Music';
+    MsgCapAddTexture = 'Select Texture';
+    MsgCapKeys = 'Keys';
+    MsgCapTest = 'Analyse Map';
+    MsgCapOpt = 'Optimize Map';
+    MsgCapSets = 'Map Properties';
+    MsgCapLaunch = 'In-game test Settings';
+    MsgCapEs = 'Editor Preferences';
+    MsgCapPack = 'Pack Map';
+    MsgCapSave = 'Save Map';
+    MsgCapMini = 'Save Minimap';
+    MsgCapSelect = 'Select Map';
+    MsgCapOpen = 'Open Map';
+    MsgCapRemove = 'Remove Map';
+    MsgCapTexture = 'Texture: %dx%d';
+    MsgCapAnimation = 'Animation: %dx%d, %d frames';
+    MsgCapStatSelected = 'Selected objects: %d';
+
+    MsgCtrlPropKey = 'Property';
+    MsgCtrlPropValue = 'Value';
+
+    MsgCtrlPanels = 'Panels';
+    MsgCtrlItems = 'Items';
+    MsgCtrlMonsters = 'Monsters';
+    MsgCtrlAreas = 'Areas';
+    MsgCtrlTriggers = 'Triggers';
+
+    MsgCtrlListTexture = 'Texture List';
+    MsgCtrlListItem = 'Item List';
+    MsgCtrlListMonster = 'Monster List';
+    MsgCtrlListArea = 'Area List';
+    MsgCtrlListTrigger = 'Trigger List';
+    MsgCtrlListActive = 'Activation Type';
+    MsgCtrlListKeys = 'Keys Needed';
+
+    MsgCtrlPreview = 'Texture Preview';
+    MsgCtrlItemDm = 'DM Only';
+    MsgCtrlItemFalls = 'Falls';
+    MsgCtrlLeft = 'Left';
+    MsgCtrlRight = 'Right';
+
+    MsgCtrlActPlayerClose = 'Player Collides';
+    MsgCtrlActMonsterClose = 'Monster Collides';
+    MsgCtrlActPlayerPress = 'Player Pressed';
+    MsgCtrlActMonsterPress = 'Monster Pressed';
+    MsgCtrlActShot = 'Shot';
+    MsgCtrlActNoMonster = 'No Monsters';
+
+    MsgCtrlKeysRed = 'Red Key';
+    MsgCtrlKeysGreen = 'Green Key';
+    MsgCtrlKeysBlue = 'Blue Key';
+    MsgCtrlKeysTeamRed = 'Red Team';
+    MsgCtrlKeysTeamBlue = 'Blue Team';
+
+    MsgCtrlOptGb = 'Optimization';
+    MsgCtrlOptTexture = 'Texture Optimization';
+    MsgCtrlOptPanel = 'Panel Optimization';
+    MsgCtrlOptWall = 'Walls';
+    MsgCtrlOptFore = 'Foreground';
+    MsgCtrlOptBack = 'Background';
+    MsgCtrlOptStair = 'Steps';
+    MsgCtrlOptWater = 'Water';
+    MsgCtrlOptAcid1 = 'Acid 1';
+    MsgCtrlOptAcid2 = 'Acid 2';
+    MsgCtrlOptLift = 'Streams';
+    MsgCtrlOptBlockmon = 'Monster Boundary';
+    MsgCtrlOptDescTexture = 'Deletes unused textures from texture list.';
+    MsgCtrlOptDescPanel = 'Merges nearby panels of same type. Increases game performance.';
+    MsgCtrlSetsStats = 'Statistics:';
+    MsgCtrlSetsSizes = 'Map Size:';
+
+    MsgCtrlLaunchDm = 'Deathmatch';
+    MsgCtrlLaunchTdm = 'Team Deathmatch';
+    MsgCtrlLaunchCtf = 'Capture the Flag';
+    MsgCtrlLaunchCoop = 'Cooperative';
+    MsgCtrlLaunch2p = 'Two Players';
+    MsgCtrlLaunchFf = 'Friendly Fire';
+    MsgCtrlLaunchExit = 'Enable Exit';
+    MsgCtrlLaunchWeapons = 'Weapons Stay';
+    MsgCtrlLaunchMonsters = 'Enable Monsters';
+    MsgCtrlLaunchClose = 'Close the game after exiting the map';
+    MsgCtrlLaunchOpen = 'Select Doom 2D: Forever executable';
+
+    MsgCtrlEsGrid = 'Show Grid';
+    MsgCtrlEsTexture = 'Show Panel Texture';
+    MsgCtrlEsPanelSize = 'Show Panel Size';
+    MsgCtrlEsCheckerboard = 'Use Checkerboard';
+
+    MsgCtrlPackTextures = 'Textures';
+    MsgCtrlPackSky = 'Sky';
+    MsgCtrlPackMusic = 'Music';
+    MsgCtrlPackAdd = 'Don''t overwrite WAD';
+    MsgCtrlPackNonStd = 'Non-standard Resources only';
+
+    MsgLabTexWidth = 'Texture Width:';
+    MsgLabTexHeight = 'Texture Height:';
+
+    MsgLabSpectrum = 'Show the Spectrum';
+
+    MsgLabAboutVer = 'Version 2.1.5';
+    MsgLabAboutAuthor = 'Author: rs.falcon';
+    MsgLabAboutAuthor2 = 'Additions: Pss';
+    MsgLabAboutMail = 'rmw.falcon@mail.ru';
+    MsgLabAboutMail2 = 'pssxx@mail.ru';
+    MsgLabAboutSite = 'Doom 2D: Forever Web-site';
+    MsgLabAboutHttp = 'www.doom2d.org';
+
+    MsgLabAddWads = 'WAD Files:';
+    MsgLabAddSections = 'WAD Sections:';
+
+    MsgLabSetsName = 'Map Name:';
+    MsgLabSetsDesc = 'Map Description';
+    MsgLabSetsAuthor = 'Author:';
+    MsgLabSetsBack = 'Background/Sky:';
+    MsgLabSetsMusic = 'Music:';
+    MsgLabSetsTextures = 'Textures:';
+    MsgLabSetsPanels = 'Panels:';
+    MsgLabSetsItems = 'Items:';
+    MsgLabSetsMonsters = 'Monsters:';
+    MsgLabSetsAreas = 'Areas:';
+    MsgLabSetsTriggers = 'Triggers:';
+    MsgLabSetsSizes = 'Current:';
+    MsgLabSetsWidth = 'Width:';
+    MsgLabSetsHeight = 'Height:';
+    MsgLabSetsMapmove = 'Direction to shift map objects:';
+    MsgLabSetsSnapping = 'Preserve snapping';
+
+    MsgLabLaunchTime = 'Time Limit:';
+    MsgLabLaunchSecs = 'seconds';
+    MsgLabLaunchScore = 'Score Limit:';
+    MsgLabLaunchPath = 'Path to Doom2DF.exe:';
+    MsgLabLaunchArgs = 'Launch Arguments:';
+
+    MsgLabEsGrid = 'Grid Step:';
+    MsgLabEsGridColor = 'Grid Color:';
+    MsgLabEsGridSize = 'Grid Dot Size:';
+    MsgLabEsBack = 'Background Color:';
+    MsgLabEsPreview = 'Texture Preview Background Color:';
+    MsgLabEsMinimap = 'Mini-map Scale:';
+    MsgLabEsRecent = 'Recent Maps List Contains:';
+    MsgLabEsLanguage = 'Language:';
+    MsgLabEsCompress = 'Compress archive when save';
+    MsgLabEsBackup = 'Make backup before save';
+
+    MsgLabPackSaveTo = 'Save to:';
+    MsgLabPackMapName = 'Map Resource Name:';
+    MsgLabPackTextures = 'Texture Section:';
+    MsgLabPackSky = 'Sky Section:';
+    MsgLabPackMusic = 'Music Section:';
+
+    MsgLabMiniScale = 'Scale:';
+
+    MsgBtnApplyProps = 'Apply Properties';
+    MsgBtnOk = 'OK';
+    MsgBtnCancel = 'Cancel';
+    MsgBtnAdd = 'Add';
+    MsgBtnClose = 'Close';
+    MsgBtnAddClose = 'Add and Close';
+    MsgBtnTestAgain = 'Check';
+    MsgBtnStart = 'Run';
+    MsgBtnPack = 'Pack';
+    MsgBtnSave = 'Save';
+    MsgBtnNoSound = 'No sound';
+    MsgBtnTextureAdd = 'Add texture to the list';
+    MsgBtnTextureDelete = 'Delete texture from the list';
+    MsgBtnTextureEmpty = 'Deselect texture';
+
+    MsgLoadWad = 'Reading WAD';
+    MsgLoadMap = 'Loading Map';
+    MsgLoadTextures = 'Reading Textures';
+    MsgLoadPanels = 'Reading Panels';
+    MsgLoadItems = 'Reading Items';
+    MsgLoadMonsters = 'Reading Monsters';
+    MsgLoadAreas = 'Reading Areas';
+    MsgLoadTriggers = 'Reading Triggers';
+
+    MsgTestAreaWall = 'Player collides with the wall and will be stuck.';
+    MsgTestAreaWallStr = 'Area #%d collides with Map (%d:%d)';
+    MsgTestSpawns1 = 'There are several spawn points for First Player on the map';
+    MsgTestSpawns2 = 'There are several spawn points for Second Player on the map';
+    MsgTestSpawns = 'There are several spawn points on the map. Random one will be used.';
+    MsgTestNoDm = 'There are no DM spawn points on the map';
+    MsgTestNoDmEx = 'There are no DM spawn points on the map. Only "Single Player" mode available.';
+    MsgTestMonsterWall = 'Monster collides with the wall and will be stuck.';
+    MsgTestMonsterWallStr = 'Monster #%d collides with a map (%d:%d)';
+
+    MsgOptNoTextures = 'Texture list is empty';
+    MsgOptDeletedTextures = 'Deleted Textures:';
+    MsgOptTotalTextures = 'Textures Total:';
+    MsgOptTexDeleted = 'Textures Deleted:';
+    MsgOptPanelsOpt = 'Panels Optimized:';
+    MsgOptWalls = 'Walls Optimization...';
+    MsgOptFores = 'Foreground Optimization...';
+    MsgOptBacks = 'Background Optimization...';
+    MsgOptStairs = 'Steps Optimization...';
+    MsgOptWater = 'Water Optimization...';
+    MsgOptAcid1 = 'Acid 1 Optimization...';
+    MsgOptAcid2 = 'Acid 2 Optimization...';
+    MsgOptLifts = 'Streams Optimization...';
+    MsgOptBlockmon = 'Monster Boundaries Optimization...';
+    MsgOptTotalPanels = 'Panels Total:';
+    MsgOptPanelsAfter = 'Panels after Optimization:';
+
+    MsgWadSpecialMap = '<MAP WAD-FILE>';
+    MsgWadSpecialTexs = '<EXTRA TEXTURES>';
+
+    MsgFileFilterAll = 'Doom 2D: Forever Maps (*.dfz, *.dfzip, *.zip, *.wad)|*.dfz;*.dfzip;*.zip;*.wad|Doom 2D: Forever 0.30 Maps (*.ini)|*.ini|All Files (*.*)|*.*';
+    MsgFileFilterWad = 'Doom 2D: Forever Maps (*.dfz)|*.dfz|Doom 2D: Forever Maps (*.dfzip)|*.dfzip|Doom 2D: Forever Maps (*.zip)|*.zip|Doom 2D: Forever Maps (*.wad)|*.wad|All Files (*.*)|*.*';
+
+    MsgEditorTitle = 'Doom 2D: Forever Map Editor';
 
 Var
-  _lc: Array [TStrings_Locale] of String;  // for the GUI (in UTF-8)
-  _glc: Array [TStrings_Locale] of String; // for GL text (in CP1251)
-
   BoolNames: Array [False..True] of String;
   DirNames: Array [D_LEFT..D_RIGHT] of String;
   DirNamesAdv: Array [0..3] of String;
@@ -646,1367 +633,184 @@ Var
   AreaNames: Array [AREA_PLAYERPOINT1..AREA_BLUETEAMPOINT] of String;
   TriggerNames: Array [TRIGGER_EXIT..TRIGGER_MAX] of String;
 
-
-procedure g_Language_Load(fileName: String);
 procedure g_Language_Set(lang: String);
-procedure g_Language_Dump(fileName: String);
 
 Implementation
 
 Uses
+  gettext,
   SysUtils, e_log, f_main, f_about, f_activationtype,
   f_addresource_sky, f_addresource_sound,
   f_addresource_texture, f_choosetype, f_keys, f_mapcheck,
   f_mapoptions, f_mapoptimization, f_options,
   f_packmap, f_savemap, f_saveminimap, f_selectmap, Forms, utils;
 
-Const
-  g_lang_default: Array [TStrings_Locale] of Array [1..3] of String = (
-    ('NOT ACCESSIBLE',                 'N/A',
-                                       'Н/Д'),
-
-    ('ARRAY BOOL FALSE',               'No',
-                                       'Нет'),
-    ('ARRAY BOOL TRUE',                'Yes',
-                                       'Да'),
-
-    ('ARRAY DIR LEFT',                 'Left',
-                                       'Влево'),
-    ('ARRAY DIR RIGHT',                'Right',
-                                       'Вправо'),
-    ('ARRAY DIR SAME',                 'Don''t change',
-                                       'Не менять'),
-    ('ARRAY DIR REVERSED',             'Reversed',
-                                       'Обратное'),
-
-    ('ARRAY DIRBTN LEFT',              'Left',
-                                       'Влево'),
-    ('ARRAY DIRBTN RIGHT',             'Right',
-                                       'Вправо'),
-    ('ARRAY DIRBTN UP',                'Up',
-                                       'Вверх'),
-    ('ARRAY DIRBTN DOWN',              'Down',
-                                       'Вниз'),
-
-    ('ARRAY PANEL WALL',               'Wall',
-                                       'Стена'),
-    ('ARRAY PANEL BACK',               'Background',
-                                       'Фон'),
-    ('ARRAY PANEL FRONT',              'Foreground',
-                                       'Передний план'),
-    ('ARRAY PANEL DOOR OPEN',          'Open Door',
-                                       'Открытая дверь'),
-    ('ARRAY PANEL DOOR CLOSE',         'Closed Door',
-                                       'Закрытая дверь'),
-    ('ARRAY PANEL STAIR',              'Step',
-                                       'Ступень'),
-    ('ARRAY PANEL WATER',              'Water',
-                                       'Вода'),
-    ('ARRAY PANEL ACID 1',             'Acid 1',
-                                       'Кислота 1'),
-    ('ARRAY PANEL ACID 2',             'Acid 2',
-                                       'Кислота 2'),
-    ('ARRAY PANEL LIFT UP',            'Stream Up',
-                                       'Лифт вверх'),
-    ('ARRAY PANEL LIFT DOWN',          'Stream Down',
-                                       'Лифт вниз'),
-    ('ARRAY PANEL LIFT LEFT',          'Stream Left',
-                                       'Поток влево'),
-    ('ARRAY PANEL LIFT RIGHT',         'Stream Right',
-                                       'Поток вправо'),
-    ('ARRAY PANEL BLOCKMON',           'Monster Boundary',
-                                       'Блокиратор монстров'),
-
-    ('ARRAY FX NONE',                  'None',
-                                       'Нет'),
-    ('ARRAY FX TELEPORT',              'Teleport',
-                                       'Телепортация'),
-    ('ARRAY FX RESPAWN',               'Respawn',
-                                       'Респаун'),
-    ('ARRAY FX FIRE',                  'Arch-Vile Fire',
-                                       'Огонь колдуна'),
-
-    ('ARRAY ITEM MEDKIT',              'Stimpack',
-                                       'Аптечка'),
-    ('ARRAY ITEM LARGE MEDKIT',        'Medikit',
-                                       'Большая аптечка'),
-    ('ARRAY ITEM BLACK MEDKIT',        'Berserk Pack',
-                                       'Чёрная аптечка'),
-    ('ARRAY ITEM GREEN ARMOR',         'Green Armor',
-                                       'Зелёная броня'),
-    ('ARRAY ITEM BLUE ARMOR',          'Blue Armor',
-                                       'Синяя броня'),
-    ('ARRAY ITEM BLUE SPHERE',         'Soulsphere',
-                                       'Шарик 100%'),
-    ('ARRAY ITEM MEGASPHERE',          'Megasphere',
-                                       'Мегасфера'),
-    ('ARRAY ITEM HAZ SUIT',            'Envirosuit',
-                                       'Защитный костюм'),
-    ('ARRAY ITEM OXYGEN',              'Scuba',
-                                       'Акваланг'),
-    ('ARRAY ITEM INVULNERABILITY',     'Invulnerability',
-                                       'Неуязвимость'),
-    ('ARRAY ITEM CHAINSAW',            'Chainsaw',
-                                       'Бензопила'),
-    ('ARRAY ITEM SHOTGUN',             'Shotgun',
-                                       'Ружьё'),
-    ('ARRAY ITEM DB SHOTGUN',          'Super Shotgun',
-                                       'Двустволка'),
-    ('ARRAY ITEM CHAINGUN',            'Chaingun',
-                                       'Пулемёт'),
-    ('ARRAY ITEM ROCKET LAUNCHER',     'Rocket Launcher',
-                                       'Ракетница'),
-    ('ARRAY ITEM PLASMA RIFLE',        'Plasma Rifle',
-                                       'Плазмаган'),
-    ('ARRAY ITEM BFG',                 'BFG9000',
-                                       'BFG9000'),
-    ('ARRAY ITEM SUPER MINIGUN',       'Super Chaingun',
-                                       'Суперпулемёт'),
-    ('ARRAY ITEM FLAMETHROWER',        'Flamethrower',
-                                       'Огнемёт'),
-    ('ARRAY ITEM CLIP',                'Clip',
-                                       'Патроны'),
-    ('ARRAY ITEM AMMO BOX',            'Box of Bullets',
-                                       'Ящик патронов'),
-    ('ARRAY ITEM 4 SHELLS',            '4 Shells',
-                                       '4 гильзы'),
-    ('ARRAY ITEM 25 SHELLS',           'Box of Shells',
-                                       '25 гильз'),
-    ('ARRAY ITEM 1 ROCKET',            'Rocket',
-                                       '1 ракета'),
-    ('ARRAY ITEM ROCKET BOX',          'Box of Rockets',
-                                       '5 ракет'),
-    ('ARRAY ITEM CELL',                'Energy Cell',
-                                       'Батарейка'),
-    ('ARRAY ITEM LARGE CELL',          'Energy Cell Pack',
-                                       'Батарея'),
-    ('ARRAY ITEM FUELCAN',             'Fuel Canister',
-                                       'Канистра'),
-    ('ARRAY ITEM BACKPACK',            'Backpack',
-                                       'Рюкзак'),
-    ('ARRAY ITEM KEY RED',             'Red Key',
-                                       'Красный ключ'),
-    ('ARRAY ITEM KEY GREEN',           'Green Key',
-                                       'Зелёный ключ'),
-    ('ARRAY ITEM KEY BLUE',            'Blue Key',
-                                       'Синий ключ'),
-    ('ARRAY ITEM BOTTLE',              'Health Globe',
-                                       'Живая вода'),
-    ('ARRAY ITEM HELMET',              'Armor Shard',
-                                       'Бронешлем'),
-    ('ARRAY ITEM JETPACK',             'Jetpack',
-                                       'Реактивный ранец'),
-    ('ARRAY ITEM INVIS',               'Invisibility',
-                                       'Невидимость'),
-
-    ('ARRAY SHOT PISTOL',              'Pistol shot',
-                                       'Выстрел пистолета'),
-    ('ARRAY SHOT BULLET',              'Chaingun shot',
-                                       'Выстрел пулемёта'),
-    ('ARRAY SHOT SHOTGUN',             'Shotgun shot',
-                                       'Выстрел ружья'),
-    ('ARRAY SHOT SSG',                 'Super Shotgun shot',
-                                       'Выстрел двустволки'),
-    ('ARRAY SHOT IMP',                 'Imp fireball',
-                                       'Шар беса'),
-    ('ARRAY SHOT PLASMA',              'Blue plasma',
-                                       'Синяя плазма'),
-    ('ARRAY SHOT SPIDER',              'Arachnotron plasma',
-                                       'Плазма арахнотрона'),
-    ('ARRAY SHOT CACO',                'Cacodemon fireball',
-                                       'Шар какодемона'),
-    ('ARRAY SHOT BARON',               'Hell Baron projectile',
-                                       'Выстрел барона ада'),
-    ('ARRAY SHOT MANCUB',              'Mancubus gunshot',
-                                       'Снаряд манкубуса'),
-    ('ARRAY SHOT REV',                 'Revenant projectile',
-                                       'Снаряд скелета'),
-    ('ARRAY SHOT ROCKET',              'Rocket',
-                                       'Ракета'),
-    ('ARRAY SHOT BFG',                 'BFG ball',
-                                       'Шар BFG'),
-    ('ARRAY SHOT EXPL',                'Explosion',
-                                       'Взрыв'),
-    ('ARRAY SHOT BFGEXPL',             'BFG explosion',
-                                       'Взрыв BFG'),
-    ('ARRAY SHOT FLAME',               'Flame',
-                                       'Огонь'),
-
-    ('ARRAY MON DEMON',                'Pinky',
-                                       'Демон'),
-    ('ARRAY MON IMP',                  'Imp',
-                                       'Бес'),
-    ('ARRAY MON ZOMBIE',               'Zombie',
-                                       'Зомби'),
-    ('ARRAY MON SERGEANT',             'Sergeant',
-                                       'Сержант'),
-    ('ARRAY MON CYBER',                'Cyberdemon',
-                                       'Кибердемон'),
-    ('ARRAY MON CGUN',                 'Commando',
-                                       'Пулемётчик'),
-    ('ARRAY MON HELL BARON',           'Hell Baron',
-                                       'Барон ада'),
-    ('ARRAY MON HELL KNIGHT',          'Hell Knight',
-                                       'Рыцарь ада'),
-    ('ARRAY MON CACODEMON',            'Cacodemon',
-                                       'Какодемон'),
-    ('ARRAY MON LOST SOUL',            'Lost Soul',
-                                       'Огненный череп'),
-    ('ARRAY MON PAIN ELEMENTAL',       'Pain Elemental',
-                                       'Авиабаза'),
-    ('ARRAY MON MASTERMIND',           'Spider Mastermind',
-                                       'Большой паук'),
-    ('ARRAY MON ARACHNATRON',          'Arachnotron',
-                                       'Арахнотрон'),
-    ('ARRAY MON MANCUBUS',             'Mancubus',
-                                       'Манкубус'),
-    ('ARRAY MON REVENANT',             'Revenant',
-                                       'Скелет'),
-    ('ARRAY MON ARCHVILE',             'Arch-Vile',
-                                       'Колдун'),
-    ('ARRAY MON FISH',                 'Piranha',
-                                       'Рыба'),
-    ('ARRAY MON BARREL',               'Barrel',
-                                       'Бочка'),
-    ('ARRAY MON ROBOT',                'Robot',
-                                       'Робот'),
-    ('ARRAY MON PRIKOLIST',            'Prikolist',
-                                       'Приколист'),
-
-    ('ARRAY AREA PLAYER ONE',          'Player 1',
-                                       'Первый игрок'),
-    ('ARRAY AREA PLAYER TWO',          'Player 2',
-                                       'Второй игрок'),
-    ('ARRAY AREA DM',                  'DM Spawn Point',
-                                       'Точка DM'),
-    ('ARRAY AREA FLAG RED',            'Red Flag',
-                                       'Красный флаг'),
-    ('ARRAY AREA FLAG BLUE',           'Blue Flag',
-                                       'Синий флаг'),
-    ('ARRAY AREA FLAG DOM',            'Domination Flag',
-                                       'DOM флаг'),
-    ('ARRAY AREA TEAM RED',            'Red Team',
-                                       'Красная команда'),
-    ('ARRAY AREA TEAM BLUE',           'Blue Team',
-                                       'Синяя команда'),
-
-    ('ARRAY TR EXIT',                  'Exit',
-                                       'Выход'),
-    ('ARRAY TR TELEPORT',              'Teleport',
-                                       'Телепортация'),
-    ('ARRAY TR DOOR OPEN',             'Open Door',
-                                       'Открыть дверь'),
-    ('ARRAY TR DOOR CLOSE',            'Close Door',
-                                       'Закрыть дверь'),
-    ('ARRAY TR DOOR SWITCH',           'Door',
-                                       'Дверь'),
-    ('ARRAY TR DOOR 5 SEC',            'Door (5 sec)',
-                                       'Дверь (5 секунд)'),
-    ('ARRAY TR TRAP CLOSE',            'Close Trap',
-                                       'Закрыть ловушку'),
-    ('ARRAY TR TRAP',                  'Trap',
-                                       'Ловушка'),
-    ('ARRAY TR EXTEND',                'Extender',
-                                       'Расширитель'),
-    ('ARRAY TR SECRET',                'Secret',
-                                       'Секрет'),
-    ('ARRAY TR LIFT UP',               'Turn stream up/left',
-                                       'Лифт вверх/поток влево'),
-    ('ARRAY TR LIFT DOWN',             'Turn stream down/right',
-                                       'Лифт вниз/поток вправо'),
-    ('ARRAY TR LIFT SWITCH',           'Revert stream',
-                                       'Лифт'),
-    ('ARRAY TR TEXTURE',               'Change Texture',
-                                       'Смена текстуры'),
-    ('ARRAY TR ON',                    'Enable Trigger',
-                                       'Включить триггер'),
-    ('ARRAY TR OFF',                   'Disable Trigger',
-                                       'Выключить триггер'),
-    ('ARRAY TR SWITCH',                'Trigger Toggle',
-                                       'Переключить триггер'),
-    ('ARRAY TR SOUND',                 'Play Sound',
-                                       'Звук'),
-    ('ARRAY TR SPAWN MONSTER',         'Spawn Monster',
-                                       'Создать монстра'),
-    ('ARRAY TR SPAWN ITEM',            'Spawn Item',
-                                       'Создать предмет'),
-    ('ARRAY TR MUSIC',                 'Play Music',
-                                       'Музыка'),
-    ('ARRAY TR PUSH',                  'Push',
-                                       'Ускорение'),
-    ('ARRAY TR SCORE',                 'Team Score',
-                                       'Начисление очков'),
-    ('ARRAY TR MESSAGE',               'Message',
-                                       'Сообщение'),
-    ('ARRAY TR DAMAGE',                'Damage',
-                                       'Урон'),
-    ('ARRAY TR HEALTH',                'Healer',
-                                       'Оздоровитель'),
-    ('ARRAY TR SHOT',                  'Turret',
-                                       'Турель'),
-    ('ARRAY TR EFFECT',                'Effect',
-                                       'Эффект'),
-
-    ('PROP ID',                        'ID',
-                                       'ID'),
-    ('PROP X',                         'X',
-                                       'X'),
-    ('PROP Y',                         'Y',
-                                       'Y'),
-    ('PROP WIDTH',                     'Width',
-                                       'Ширина'),
-    ('PROP HEIGHT',                    'Height',
-                                       'Высота'),
-    ('PROP PANEL TYPE',                'Panel Type',
-                                       'Тип панели'),
-    ('PROP PANEL TEX',                 'Texture',
-                                       'Текстура'),
-    ('PROP PANEL ALPHA',               'Transparency',
-                                       'Прозрачность'),
-    ('PROP PANEL BLEND',               'Blending',
-                                       'Смешивание'),
-    ('PROP DM ONLY',                   'DM Only',
-                                       'Только в DM'),
-    ('PROP ITEM FALLS',                'Falls',
-                                       'Падает'),
-    ('PROP DIRECTION',                 'Direction',
-                                       'Направление'),
-
-    ('PROP TR TYPE',                   'Trigger Type',
-                                       'Тип триггера'),
-    ('PROP TR ENABLED',                'Enabled',
-                                       'Включён'),
-    ('PROP TR TEXTURE PANEL',          'Textured Panel',
-                                       'Панель с текстурой'),
-    ('PROP TR ACTIVATION',             'Activation Type',
-                                       'Тип активации'),
-    ('PROP TR KEYS',                   'Keys',
-                                       'Ключи'),
-    ('PROP TR D2D',                    'D2D-like',
-                                       'Как в D2D'),
-    ('PROP TR SILENT',                 'Silent',
-                                       'Без звука'),
-    ('PROP TR COUNT',                  'Count',
-                                       'Количество'),
-    ('PROP TR INTERVAL',               'Interval (in ticks)',
-                                       'Интервал (в тиках)'),
-    ('PROP TR HEALTH',                 'Health',
-                                       'Здоровье'),
-    ('PROP TR NEXT MAP',               'Next Map',
-                                       'След. карта'),
-    ('PROP TR TELEPORT TO',            'Teleport to',
-                                       'Точка телепорта'),
-    ('PROP TR TELEPORT SILENT',        'Silent',
-                                       'Тихий телепорт'),
-    ('PROP TR TELEPORT DIR',           'New Direction',
-                                       'Направление после'),
-    ('PROP TR DOOR PANEL',             'Door Panel',
-                                       'Панель двери'),
-    ('PROP TR TRAP PANEL',             'Trap Panel',
-                                       'Панель ловушки'),
-    ('PROP TR EX AREA',                'Action Area',
-                                       'Область воздействия'),
-    ('PROP TR EX DELAY',               'Delay',
-                                       'Задержка'),
-    ('PROP TR EX COUNT',               'Count',
-                                       'Счётчик'),
-    ('PROP TR EX MONSTER',             'Monster ID',
-                                       'ID монстра'),
-    ('PROP TR EX RANDOM',              'Random',
-                                       'Случайный'),
-    ('PROP TR LIFT PANEL',             'Stream Panel',
-                                       'Панель лифта'),
-    ('PROP TR TEXTURE ONCE',           'Once',
-                                       'Один раз'),
-    ('PROP TR TEXTURE ANIM ONCE',      'Animate Once',
-                                       'Аним. один раз'),
-    ('PROP TR SOUND NAME',             'Sound                              (snd)',
-                                       'Звук                               (snd)'),
-    ('PROP TR SOUND VOLUME',           'Volume',
-                                       'Громкость'),
-    ('PROP TR SOUND PAN',              'Pan',
-                                       'Стерео'),
-    ('PROP TR SOUND COUNT',            'Loops',
-                                       'Играть раз'),
-    ('PROP TR SOUND LOCAL',            'Local',
-                                       'Локальный'),
-    ('PROP TR SOUND SWITCH',           'Switch',
-                                       'Переключение'),
-    ('PROP TR FX TYPE',                'Effect',
-                                       'Эффект'),
-    ('PROP TR SPAWN TO',               'Spawn at',
-                                       'Точка появления'),
-    ('PROP TR SPAWN MAX',              'Maximum',
-                                       'Максимум'),
-    ('PROP TR SPAWN DELAY',            'Autospawn (in ticks)',
-                                       'Автоспаун (в тиках)'),
-    ('PROP TR MONSTER TYPE',           'Monster',
-                                       'Тип монстра'),
-    ('PROP TR MONSTER ACTIVE',         'Active',
-                                       'Активен'),
-    ('PROP TR MONSTER BEHAVIOUR',      'Behaviour',
-                                       'Поведение'),
-    ('PROP TR MONSTER BEHAVIOUR 0',    'Normal',
-                                       'Обычное'),
-    ('PROP TR MONSTER BEHAVIOUR 1',    'Killer',
-                                       'Убийца'),
-    ('PROP TR MONSTER BEHAVIOUR 2',    'Maniac',
-                                       'Маньяк'),
-    ('PROP TR MONSTER BEHAVIOUR 3',    'Insane',
-                                       'Поехавший'),
-    ('PROP TR MONSTER BEHAVIOUR 4',    'Cannibal',
-                                       'Каннибал'),
-    ('PROP TR MONSTER BEHAVIOUR 5',    'Good',
-                                       'Добрый'),
-    ('PROP TR ITEM TYPE',              'Item',
-                                       'Тип предмета'),
-    ('PROP TR MUSIC NAME',             'Music',
-                                       'Музыка'),
-    ('PROP TR MUSIC ACT',              'Action                             (m)',
-                                       'Действие                           (m)'),
-    ('PROP TR MUSIC ON',               'Play',
-                                       'Включить'),
-    ('PROP TR MUSIC OFF',              'Pause',
-                                       'Выключить'),
-    ('PROP TR PUSH ANGLE',             'Angle',
-                                       'Угол'),
-    ('PROP TR PUSH FORCE',             'Force',
-                                       'Сила'),
-    ('PROP TR PUSH RESET',             'Reset velocity',
-                                       'Сбрасывать скорость'),
-    ('PROP TR SCORE ACT',              'Action                             (s)',
-                                       'Действие                           (s)'),
-    ('PROP TR SCORE ACT 0',            'Add points',
-                                       'Прибавить очки'),
-    ('PROP TR SCORE ACT 1',            'Subtract points',
-                                       'Отнять очки'),
-    ('PROP TR SCORE ACT 2',            'Team Wins',
-                                       'Выигрыш'),
-    ('PROP TR SCORE ACT 3',            'Team Loses',
-                                       'Проигрыш'),
-    ('PROP TR SCORE TEAM',             'Team',
-                                       'Команда'),
-    ('PROP TR SCORE TEAM 0',           'My',
-                                       'Своя'),
-    ('PROP TR SCORE TEAM 1',           'Enemy',
-                                       'Соперника'),
-    ('PROP TR SCORE TEAM 2',           'Red',
-                                       'Красная'),
-    ('PROP TR SCORE TEAM 3',           'Blue',
-                                       'Синяя'),
-    ('PROP TR SCORE CON',              'Console message',
-                                       'Сообщение в консоль'),
-    ('PROP TR SCORE MSG',              'Game message',
-                                       'Сообщение в игру'),
-    ('PROP TR DAMAGE VALUE',           'Damage',
-                                       'Ущерб'),
-    ('PROP TR DAMAGE KIND',            'Damage type',
-                                       'Тип урона'),
-    ('PROP TR DAMAGE KIND 0',          'HIT_SOME',
-                                       'HIT_SOME'),
-    ('PROP TR DAMAGE KIND 3',          'HIT_TRAP',
-                                       'HIT_TRAP'),
-    ('PROP TR DAMAGE KIND 4',          'HIT_FALL',
-                                       'HIT_FALL'),
-    ('PROP TR DAMAGE KIND 5',          'HIT_WATER',
-                                       'HIT_WATER'),
-    ('PROP TR DAMAGE KIND 6',          'HIT_ACID',
-                                       'HIT_ACID'),
-    ('PROP TR DAMAGE KIND 7',          'HIT_ELECTRO',
-                                       'HIT_ELECTRO'),
-    ('PROP TR DAMAGE KIND 8',          'HIT_FLAME',
-                                       'HIT_FLAME'),
-    ('PROP TR HEALTH MAX',             'To maximum',
-                                       'До максимума'),
-    ('PROP TR SHOT TYPE',              'Projectile',
-                                       'Снаряд'),
-    ('PROP TR SHOT SOUND',             'Shot sound',
-                                       'Звук выстрела'),
-    ('PROP TR SHOT ANGLE',             'Angle',
-                                       'Угол'),
-    ('PROP TR SHOT ACC',               'Spread',
-                                       'Разброс'),
-    ('PROP TR SHOT TO',                'Auto targeting',
-                                       'Автонаведение'),
-    ('PROP TR SHOT TO 0',              'None',
-                                       'Нет'),
-    ('PROP TR SHOT TO 1',              'Monsters',
-                                       'Монстры'),
-    ('PROP TR SHOT TO 2',              'Players',
-                                       'Игроки'),
-    ('PROP TR SHOT TO 3',              'Red team',
-                                       'Красная команда'),
-    ('PROP TR SHOT TO 4',              'Blue team',
-                                       'Синяя команда'),
-    ('PROP TR SHOT TO 5',              'Monsters, players',
-                                       'Монстры, игроки'),
-    ('PROP TR SHOT TO 6',              'Players, monsters',
-                                       'Игроки, монстры'),
-    ('PROP TR SHOT AIM',               'Auto-aiming mode',
-                                       'Режим автонаведения'),
-    ('PROP TR SHOT AIM 0',             'Trigger area',
-                                       'Область триггера'),
-    ('PROP TR SHOT AIM 1',             'Entire map',
-                                       'По всей карте'),
-    ('PROP TR SHOT AIM 2',             'Trace trigger area',
-                                       'Область триггера с трассировкой'),
-    ('PROP TR SHOT AIM 3',             'Trace entire map',
-                                       'Вся карта с трассировкой'),
-    ('PROP TR SHOT AMMO',              'Ammo limit',
-                                       'Кол-во патронов'),
-    ('PROP TR SHOT RELOAD',            'Reload interval (in ticks)',
-                                       'Перезарядка (в тиках)'),
-    ('PROP TR SHOT SIGHT',             'Sight interval (in ticks)',
-                                       'Реакция (в тиках)'),
-    ('PROP TR SHOT PANEL',             'Indicator panel',
-                                       'Панель индикации'),
-    ('PROP TR MESSAGE KIND',           'Message kind',
-                                       'Тип сообщения'),
-    ('PROP TR MESSAGE KIND 0',         'Console message',
-                                       'Текст в консоли'),
-    ('PROP TR MESSAGE KIND 1',         'Event message',
-                                       'Крупный текст по центру'),
-    ('PROP TR MESSAGE TO',             'Send to',
-                                       'Получатель'),
-    ('PROP TR MESSAGE TO 0',           'Me',
-                                       'Я'),
-    ('PROP TR MESSAGE TO 1',           'My team',
-                                       'Моя команда'),
-    ('PROP TR MESSAGE TO 2',           'Enemy team',
-                                       'Вражеская команда'),
-    ('PROP TR MESSAGE TO 3',           'Red team',
-                                       'Красная команда'),
-    ('PROP TR MESSAGE TO 4',           'Blue team',
-                                       'Синяя команда'),
-    ('PROP TR MESSAGE TO 5',           'Everyone',
-                                       'Все игроки'),
-    ('PROP TR MESSAGE TEXT',           'Message text',
-                                       'Текст сообщения'),
-    ('PROP TR MESSAGE TIME',           'Time (in ticks)',
-                                       'Время показа (в тиках)'),
-    ('PROP TR EFFECT TYPE',            'Effect type',
-                                       'Тип эффекта'),
-    ('PROP TR EFFECT SUBTYPE',         'Effect subtype',
-                                       'Подтип эффекта'),
-    ('PROP TR EFFECT COLOR',           'Effect color',
-                                       'Цвет эффекта'),
-    ('PROP TR EFFECT CENTER',          'Trigger center',
-                                       'По центру'),
-    ('PROP TR EFFECT VELX',            'Horizontal speed',
-                                       'Скорость по горизонтали'),
-    ('PROP TR EFFECT VELY',            'Vertical speed',
-                                       'Скорость по вертикали'),
-    ('PROP TR EFFECT SPL',             'Speed variance left',
-                                       'Отклонение влево'),
-    ('PROP TR EFFECT SPR',             'Speed variance right',
-                                       'Отклонение вправо'),
-    ('PROP TR EFFECT SPU',             'Speed variance up',
-                                       'Отклонение вверх'),
-    ('PROP TR EFFECT SPD',             'Speed variance down',
-                                       'Отклонение вниз'),
-    ('PROP TR EFFECT PARTICLE',        'Particle generator',
-                                       'Генератор частиц'),
-    ('PROP TR EFFECT ANIMATION',       'Animation',
-                                       'Анимация'),
-    ('PROP TR EFFECT SLIQUID',         'Water splash',
-                                       'Брызги воды'),
-    ('PROP TR EFFECT LLIQUID',         'Light colored splash',
-                                       'Цветные брызги (светлее)'),
-    ('PROP TR EFFECT DLIQUID',         'Dark colored splash',
-                                       'Цветные брызги (темнее)'),
-    ('PROP TR EFFECT BLOOD',           'Blood',
-                                       'Кровь'),
-    ('PROP TR EFFECT SPARK',           'Sparks',
-                                       'Искры'),
-    ('PROP TR EFFECT BUBBLE',          'Bubbles',
-                                       'Пузырьки'),
-
-    ('MSG ERROR',                      'Error',
-                                       'Ошибка'),
-    ('MSG WRONG TEXWIDTH',             'Panel Width must be a multiple of Texture Width (%d)',
-                                       'Ширина панели должна быть кратна ширине текстуры (%d)'),
-    ('MSG WRONG TEXHEIGHT',            'Panel Height must be a multiple of Texture Height (%d)',
-                                       'Высота панели должна быть кратна высоте текстуры (%d)'),
-    ('MSG WRONG ALPHA',                'Transparency must be in [0..255] interval',
-                                       'Прозрачность должна быть в интервале [0..255]'),
-    ('MSG WRONG SIZE',                 'Width and Height must be greater than 0',
-                                       'Ширина и высота должны быть больше 0'),
-    ('MSG WRONG XY',                   'X or Y coordinate hasn''t been set',
-                                       'Не задана X или Y координата'),
-    ('MSG TEXTURE ALREADY',            'Texture "%s" already exists',
-                                       'Текстура "%s" уже добавлена'),
-    ('MSG RES NAME 64',                'Resource "%s" name must not be longer than 64 chars',
-                                       'Имя ресурса "%s" должно быть не длиннее 64 символов'),
-    ('MSG CHOOSE ITEM',                'Select Item',
-                                       'Выберите предмет'),
-    ('MSG CHOOSE MONSTER',             'Select Monster',
-                                       'Выберите монстра'),
-    ('MSG CHOOSE AREA',                'Select Area',
-                                       'Выберите область'),
-    ('MSG CHOOSE TEXTURE',             'Select Texture',
-                                       'Выберите текстуру'),
-    ('MSG CHOOSE RES',                 'Resource hasn''t been selected',
-                                       'Не выбран ресурс'),
-    ('MSG EXIT',                       'Exit',
-                                       'Выход'),
-    ('MSG EXIT PROMT',                 'Leaving so soon?',
-                                       'Уже уходите?'),
-    ('MSG DEL TEXTURE',                'Delete the texture',
-                                       'Удалить текстуру'),
-    ('MSG DEL TEXTURE PROMT',          'Delete the texture "%s" ?',
-                                       'Удалить текстуру "%s" ?'),
-    ('MSG DEL TEXTURE CANT',           'Can''t delete texture in use. Replace it on all panels with this texture.',
-                                       'Нельзя удалить используемую текстуру. Замените её на каждой панели с ней.'),
-    ('MSG DEL RECENT',                 'File does not longer exist',
-                                       'Этого файла больше нет'),
-    ('MSG DEL RECENT PROMT',           'Remove entry from recent list?',
-                                       'Убрать запись из истории?'),
-    ('MSG CLEAR MAP',                  'New map',
-                                       'Новая карта'),
-    ('MSG CLEAR MAP PROMT',            'Clear the entire map?',
-                                       'Очистить всю карту?'),
-    ('MSG DELETE MAP',                 'Delete the map',
-                                       'Удалить карту'),
-    ('MSG DELETE MAP PROMT',           'Delete the map "%s" from "%s" ?',
-                                       'Удалить карту "%s" из "%s" ?'),
-    ('MSG MAP DELETED',                'Map is deleted',
-                                       'Карта удалена'),
-    ('MSG MAP DELETED PROMT',          'Map "%s" is deleted',
-                                       'Карта "%s" удалена'),
-    ('MSG REOPEN MAP PROMT',           'Reopen this map?',
-                                       'Загрузить карту заново?'),
-    ('MSG EXEC ERROR',                 'Game start error',
-                                       'Ошибка запуска игры'),
-    ('MSG SOUND ERROR',                'Can''t play sound',
-                                       'Не удалось проиграть звук'),
-    ('MSG WAD ERROR',                  'Can''t open WAD: %s',
-                                       'Ошибка при открытии WAD: %s'),
-    ('MSG RES ERROR',                  'Can''t read resource: %s:%s\%s',
-                                       'Ошибка при чтении ресурса: %s:%s\%s'),
-    ('MSG PACKED',                     'Map "%s" with resources saved to "%s"',
-                                       'Карта "%s" вместе с ресурсами сохранена в "%s"'),
-    ('MSG MAP EXISTS',                 'Map "%s" already exists. Overwrite?',
-                                       'Карта "%s" уже существует. Заменить?'),
-    ('MSG SAVE MAP',                   'Save the map',
-                                       'Сохранить карту'),
-
-    ('HINT TELEPORT',                  'Choose destination of Teleport',
-                                       'Выберите точку телепорта'),
-    ('HINT SPAWN',                     'Choose Spawn point',
-                                       'Выберите точку появления'),
-    ('HINT PANEL DOOR',                'Choose Door',
-                                       'Выберите панель двери'),
-    ('HINT PANEL TEXTURE',             'Choose textured Panel',
-                                       'Выберите панель с текстурой'),
-    ('HINT PANEL SHOT',                'Choose textured shot indicator Panel',
-                                       'Выберите панель индикации выстрела с текстурой'),
-    ('HINT PANEL LIFT',                'Choose Stream Panel',
-                                       'Выберите панель лифта'),
-    ('HINT MONSTER',                   'Choose Monster',
-                                       'Выберите монстра'),
-    ('HINT EXT AREA',                  'Specify action Area',
-                                       'Укажите область воздействия'),
-    ('HINT WIDTH',                     'Width: %d',
-                                       'Ширина: %d'),
-    ('HINT HEIGHT',                    'Height: %d',
-                                       'Высота: %d'),
-
-    ('MENU FILE',                      'File',
-                                       'Файл'),
-    ('MENU FILE NEW',                  'New',
-                                       'Создать'),
-    ('MENU FILE OPEN',                 'Open...',
-                                       'Открыть...'),
-    ('MENU FILE SAVE',                 'Save',
-                                       'Сохранить'),
-    ('MENU FILE SAVE AS',              'Save As...',
-                                       'Сохранить как...'),
-    ('MENU FILE OPEN WAD',             'Select Map...',
-                                       'Выбрать карту...'),
-    ('MENU FILE REOPEN',               'Revert to Saved',
-                                       'Открыть заново'),
-    ('MENU FILE SAVE MINI',            'Save Minimap...',
-                                       'Сохранить мини-карту...'),
-    ('MENU FILE DELETE',               'Delete from WAD...',
-                                       'Удалить из WAD...'),
-    ('MENU FILE PACK MAP',             'Pack to WAD...',
-                                       'Упаковать в WAD...'),
-    ('MENU FILE EXIT',                 'Exit',
-                                       'Выход'),
-
-    ('MENU EDIT',                      'Edit',
-                                       'Правка'),
-    ('MENU EDIT UNDO',                 'Undo',
-                                       'Отменить'),
-    ('MENU EDIT COPY',                 'Copy',
-                                       'Копировать'),
-    ('MENU EDIT CUT',                  'Cut',
-                                       'Вырезать'),
-    ('MENU EDIT PASTE',                'Paste',
-                                       'Вставить'),
-    ('MENU EDIT SELECT ALL',           'Select All',
-                                       'Выделить всё'),
-    ('MENU EDIT TO FORE',              'Bring to Front',
-                                       'Передвинуть вперёд'),
-    ('MENU EDIT TO BACK',              'Send to Back',
-                                       'Передвинуть назад'),
-
-    ('MENU TOOLS',                     'Tools',
-                                       'Инструменты'),
-    ('MENU TOOLS SNAP GRID',           'Snap to Grid',
-                                       'Привязка к сетке'),
-    ('MENU TOOLS MINIMAP',             'Show Minimap',
-                                       'Показать Мини-карту'),
-    ('MENU TOOLS STEP GRID',           'Switch Grid Granularity',
-                                       'Переключить шаг сетки'),
-    ('MENU TOOLS SHOW EDGES',          'Show Map Bounds',
-                                       'Показывать границы карты'),
-    ('MENU TOOLS LAYERS',              'Layers',
-                                       'Слои'),
-
-    ('MENU SERV',                      'Service',
-                                       'Сервис'),
-    ('MENU SERV TEST',                 'Analyse Map...',
-                                       'Проверка карты...'),
-    ('MENU SERV OPT',                  'Optimize Map...',
-                                       'Оптимизация карты...'),
-    ('MENU SERV PREVIEW',              'Preview Mode',
-                                       'Предварительный просмотр'),
-    ('MENU SERV LAUNCH',               'Run Test',
-                                       'Тест карты в игре'),
-
-    ('MENU SETS',                      'Settings',
-                                       'Настройка'),
-    ('MENU SETS MAP',                  'Map Properties...',
-                                       'Свойства карты...'),
-    ('MENU SETS EDITOR',               'Preferences...',
-                                       'Настройки...'),
-    ('MENU SETS LAUNCH',               'In-game test settings',
-                                       'Настройки теста в игре'),
-
-    ('MENU HELP',                      'Help',
-                                       'Справка'),
-    ('MENU HELP ABOUT',                'About',
-                                       'О программе'),
-
-    ('MENU LAYER BACK',                '1. Background',
-                                       '1. Фон'),
-    ('MENU LAYER WALL',                '2. Walls',
-                                       '2. Стены'),
-    ('MENU LAYER FORE',                '3. Foreground',
-                                       '3. Передний план'),
-    ('MENU LAYER STAIR',               '4. Steps',
-                                       '4. Ступени'),
-    ('MENU LAYER WATER',               '5. Liquids',
-                                       '5. Жидкости'),
-    ('MENU LAYER ITEM',                '6. Items',
-                                       '6. Предметы'),
-    ('MENU LAYER MONSTER',             '7. Monsters',
-                                       '7. Монстры'),
-    ('MENU LAYER AREA',                '8. Areas',
-                                       '8. Области'),
-    ('MENU LAYER TRIGGER',             '9. Triggers',
-                                       '9. Триггеры'),
-
-    ('MENU TB NEW',                    'New Map',
-                                       'Новая карта'),
-    ('MENU TB OPEN',                   'Open Map',
-                                       'Открыть карту'),
-    ('MENU TB SAVE',                   'Save Map',
-                                       'Сохранить карту'),
-    ('MENU TB OPEN WAD',               'Open another Map from same WAD',
-                                       'Открыть другую карту из этого же WAD''а'),
-    ('MENU TB MINIMAP',                'Show Mini-map',
-                                       'Показать мини-карту'),
-    ('MENU TB LAYERS',                 'Show/Hide Objects',
-                                       'Отрисовка панелей/объектов'),
-    ('MENU TB GRID',                   'Grid On/Off',
-                                       'Включить/Отключить отображение сетки'),
-    ('MENU TB GRID STEP',              'Switch Grid step',
-                                       'Изменить шаг сетки'),
-    ('MENU TB LAUNCH',                 'Run Test',
-                                       'Тест карты в игре'),
-
-    ('MENU LAUNCH SETS',               'Settings...',
-                                       'Параметры...'),
-
-    ('CAP FX TYPE',                    'Select Effect type',
-                                       'Выберите тип эффекта'),
-    ('CAP MONSTER TYPE',               'Select Monster type',
-                                       'Выберите тип монстра'),
-    ('CAP ITEM TYPE',                  'Select Item type',
-                                       'Выберите тип предмета'),
-    ('CAP ABOUT',                      'About Map Editor',
-                                       'О программе'),
-    ('CAP ACT',                        'Activation type',
-                                       'Тип активации'),
-    ('CAP ADD SKY',                    'Select Sky Texture',
-                                       'Выберите текстуру неба'),
-    ('CAP ADD SOUND',                  'Select Sound/Music',
-                                       'Выберите звук/музыку'),
-    ('CAP ADD TEXTURE',                'Select Texture',
-                                       'Выберите текстуру'),
-    ('CAP KEYS',                       'Keys',
-                                       'Ключи'),
-    ('CAP TEST',                       'Analyse Map',
-                                       'Проверка карты'),
-    ('CAP OPT',                        'Optimize Map',
-                                       'Оптимизация карты'),
-    ('CAP SETS',                       'Map Properties',
-                                       'Свойства карты'),
-    ('CAP LAUNCH',                     'In-game test Settings',
-                                       'Настройки теста в игре'),
-    ('CAP ES',                         'Editor Preferences',
-                                       'Настройки редактора'),
-    ('CAP PACK',                       'Pack Map',
-                                       'Упаковать карту'),
-    ('CAP SAVE',                       'Save Map',
-                                       'Сохранить карту'),
-    ('CAP MINI',                       'Save Minimap',
-                                       'Сохранить мини-карту'),
-    ('CAP SELECT',                     'Select Map',
-                                       'Выберите карту'),
-    ('CAP OPEN',                       'Open Map',
-                                       'Открыть карту'),
-    ('CAP REMOVE',                     'Remove Map',
-                                       'Удалить карту'),
-    ('CAP TEXTURE',                    'Texture: %dx%d',
-                                       'Текстура: %dx%d'),
-    ('CAP ANIMATION',                  'Animation: %dx%d, %d frames',
-                                       'Анимация: %dx%d, %d кадров'),
-    ('CAP STAT SELECTED',              'Selected objects: %d',
-                                       'Выделено объектов: %d'),
-
-    ('CTRL PROP KEY',                  'Property',
-                                       'Свойство'),
-    ('CTRL PROP VALUE',                'Value',
-                                       'Значение'),
-
-    ('CTRL PANELS',                    'Panels',
-                                       'Панели'),
-    ('CTRL ITEMS',                     'Items',
-                                       'Предметы'),
-    ('CTRL MONSTERS',                  'Monsters',
-                                       'Монстры'),
-    ('CTRL AREAS',                     'Areas',
-                                       'Области'),
-    ('CTRL TRIGGERS',                  'Triggers',
-                                       'Триггеры'),
-
-    ('CTRL LIST TEXTURE',              'Texture List',
-                                       'Список текстур'),
-    ('CTRL LIST ITEM',                 'Item List',
-                                       'Список предметов'),
-    ('CTRL LIST MONSTER',              'Monster List',
-                                       'Список монстров'),
-    ('CTRL LIST AREA',                 'Area List',
-                                       'Список областей'),
-    ('CTRL LIST TRIGGER',              'Trigger List',
-                                       'Список триггеров'),
-    ('CTRL LIST ACTIVE',               'Activation Type',
-                                       'Тип активации триггера'),
-    ('CTRL LIST KEYS',                 'Keys Needed',
-                                       'Ключи для активации'),
-
-    ('CTRL PREVIEW',                   'Texture Preview',
-                                       'Предварительный просмотр'),
-    ('CTRL ITEM DM',                   'DM Only',
-                                       'Только в DM'),
-    ('CTRL ITEM FALLS',                'Falls',
-                                       'Падает'),
-    ('CTRL LEFT',                      'Left',
-                                       'Влево'),
-    ('CTRL RIGHT',                     'Right',
-                                       'Вправо'),
-
-    ('CTRL ACT PLAYER CLOSE',          'Player Collides',
-                                       'Игрок близко'),
-    ('CTRL ACT MONSTER CLOSE',         'Monster Collides',
-                                       'Монстр близко'),
-    ('CTRL ACT PLAYER PRESS',          'Player Pressed',
-                                       'Игрок нажал'),
-    ('CTRL ACT MONSTER PRESS',         'Monster Pressed',
-                                       'Монстр нажал'),
-    ('CTRL ACT SHOT',                  'Shot',
-                                       'Выстрел'),
-    ('CTRL ACT NO MONSTER',            'No Monsters',
-                                       'Монстров нет'),
-
-    ('CTRL KEYS RED',                  'Red Key',
-                                       'Красный ключ'),
-    ('CTRL KEYS GREEN',                'Green Key',
-                                       'Зелёный ключ'),
-    ('CTRL KEYS BLUE',                 'Blue Key',
-                                       'Синий ключ'),
-    ('CTRL KEYS TEAM RED',             'Red Team',
-                                       'Красная команда'),
-    ('CTRL KEYS TEAM BLUE',            'Blue Team',
-                                       'Синяя команда'),
-
-    ('CTRL OPT GB',                    'Optimization',
-                                       'Оптимизация'),
-    ('CTRL OPT TEXTURE',               'Texture Optimization',
-                                       'Оптимизация текстур'),
-    ('CTRL OPT PANEL',                 'Panel Optimization',
-                                       'Оптимизация панелей'),
-    ('CTRL OPT WALL',                  'Walls',
-                                       'Стены'),
-    ('CTRL OPT FORE',                  'Foreground',
-                                       'Передний план'),
-    ('CTRL OPT BACK',                  'Background',
-                                       'Фон'),
-    ('CTRL OPT STAIR',                 'Steps',
-                                       'Ступени'),
-    ('CTRL OPT WATER',                 'Water',
-                                       'Вода'),
-    ('CTRL OPT ACID1',                 'Acid 1',
-                                       'Кислота 1'),
-    ('CTRL OPT ACID2',                 'Acid 2',
-                                       'Кислота 2'),
-    ('CTRL OPT LIFT',                  'Streams',
-                                       'Лифты'),
-    ('CTRL OPT BLOCKMON',              'Monster Boundary',
-                                       'Блокиратор монстров'),
-    ('CTRL OPT DESC TEXTURE',          'Deletes unused textures from texture list.',
-                                       'Удаляет неиспользуемые текстуры из списка.'),
-    ('CTRL OPT DESC PANEL',            'Merges nearby panels of same type. Increases game performance.',
-                                       'Объединяет одинаковые панели, расположенные вплотную друг к другу, увеличивая тем самым производительность игры.'),
-    ('CTRL SETS STATS',                'Statistics:',
-                                       'Статистика:'),
-    ('CTRL SETS SIZES',                'Map Size:',
-                                       'Размеры:'),
-
-    ('CTRL LAUNCH DM',                 'Deathmatch',
-                                       'Deathmatch'),
-    ('CTRL LAUNCH TDM',                'Team Deathmatch',
-                                       'Team Deathmatch'),
-    ('CTRL LAUNCH CTF',                'Capture the Flag',
-                                       'Capture the Flag'),
-    ('CTRL LAUNCH COOP',               'Cooperative',
-                                       'Cooperative'),
-    ('CTRL LAUNCH 2P',                 'Two Players',
-                                       'Два игрока'),
-    ('CTRL LAUNCH FF',                 'Friendly Fire',
-                                       'Урон своих'),
-    ('CTRL LAUNCH EXIT',               'Enable Exit',
-                                       'Включить выход'),
-    ('CTRL LAUNCH WEAPONS',            'Weapons Stay',
-                                       'Оружие остаётся'),
-    ('CTRL LAUNCH MONSTERS',           'Enable Monsters',
-                                       'Монстры в DM'),
-    ('CTRL LAUNCH CLOSE',              'Close the game after exiting the map',
-                                       'Закрыть игру после выхода из карты'),
-    ('CTRL LAUNCH OPEN',               'Select Doom 2D: Forever executable',
-                                       'Выберите файл игры Doom 2D: Forever'),
-
-    ('CTRL ES GRID',                   'Show Grid',
-                                       'Показывать сетку'),
-    ('CTRL ES TEXTURE',                'Show Panel Texture',
-                                       'Показывать текстуру панели'),
-    ('CTRL ES PANEL SIZE',             'Show Panel Size',
-                                       'Показывать размеры панели '),
-    ('CTRL ES CHECKERBOARD',           'Use Checkerboard',
-                                       'Использовать шахматку'),
-
-    ('CTRL PACK TEXTURES',             'Textures',
-                                       'Текстуры'),
-    ('CTRL PACK SKY',                  'Sky',
-                                       'Небо'),
-    ('CTRL PACK MUSIC',                'Music',
-                                       'Музыку'),
-    ('CTRL PACK ADD',                  'Don''t overwrite WAD',
-                                       'Не перезаписывать WAD'),
-    ('CTRL PACK NON STD',              'Non-standard Resources only',
-                                       'Только нестандартные ресурсы'),
-
-    ('LAB TEX WIDTH',                  'Texture Width:',
-                                       'Ширина текстуры:'),
-    ('LAB TEX HEIGHT',                 'Texture Height:',
-                                       'Высота текстуры:'),
-
-    ('LAB SPECTRUM',                   'Show the Spectrum',
-                                       'Показать спектр'),
-
-    ('LAB ABOUT VER',                  'Version 2.1.5',
-                                       'Версия 2.1.5'),
-    ('LAB ABOUT AUTHOR',               'Author: rs.falcon',
-                                       'Автор: rs.falcon'),
-    ('LAB ABOUT AUTHOR 2',             'Additions: Pss',
-                                       'Дорабатывал: Pss'),
-    ('LAB ABOUT MAIL',                 'rmw.falcon@mail.ru',
-                                       'rmw.falcon@mail.ru'),
-    ('LAB ABOUT MAIL 2',               'pssxx@mail.ru',
-                                       'pssxx@mail.ru'),
-    ('LAB ABOUT SITE',                 'Doom 2D: Forever Web-site',
-                                       'Сайт Doom 2D: Forever'),
-    ('LAB ABOUT HTTP',                 'www.doom2d.org',
-                                       'www.doom2d.org'),
-
-    ('LAB ADD WADS',                   'WAD Files:',
-                                       'Список WAD-файлов:'),
-    ('LAB ADD SECTIONS',               'WAD Sections:',
-                                       'Список секций WAD-файла:'),
-
-    ('LAB SETS NAME',                  'Map Name:',
-                                       'Название карты:'),
-    ('LAB SETS DESC',                  'Map Description',
-                                       'Описание карты:'),
-    ('LAB SETS AUTHOR',                'Author:',
-                                       'Автор:'),
-    ('LAB SETS BACK',                  'Background/Sky:',
-                                       'Фон/Небо:'),
-    ('LAB SETS MUSIC',                 'Music:',
-                                       'Музыка:'),
-    ('LAB SETS TEXTURES',              'Textures:',
-                                       'Текстур:'),
-    ('LAB SETS PANELS',                'Panels:',
-                                       'Панелей:'),
-    ('LAB SETS ITEMS',                 'Items:',
-                                       'Предметов:'),
-    ('LAB SETS MONSTERS',              'Monsters:',
-                                       'Монстров:'),
-    ('LAB SETS AREAS',                 'Areas:',
-                                       'Областей:'),
-    ('LAB SETS TRIGGERS',              'Triggers:',
-                                       'Триггеров:'),
-    ('LAB SETS SIZES',                 'Current:',
-                                       'Текущий:'),
-    ('LAB SETS WIDTH',                 'Width:',
-                                       'Ширина:'),
-    ('LAB SETS HEIGHT',                'Height:',
-                                       'Высота:'),
-    ('LAB SETS MAPMOVE',               'Direction to shift map objects:',
-                                       'Направление смещения объектов карты:'),
-    ('LAB SETS SNAPPING',              'Preserve snapping',
-                                       'Сохранять привязку'),
-
-    ('LAB LAUNCH TIME',                'Time Limit:',
-                                       'Лимит времени:'),
-    ('LAB LAUNCH SECS',                'seconds',
-                                       'секунд'),
-    ('LAB LAUNCH SCORE',               'Score Limit:',
-                                       'Лимит очков:'),
-    ('LAB LAUNCH PATH',                'Path to Doom2DF.exe:',
-                                       'Путь к Doom2DF.exe:'),
-    ('LAB LAUNCH ARGS',                'Launch Arguments:',
-                                       'Параметры запуска:'),
-
-    ('LAB ES GRID',                    'Grid Step:',
-                                       'Шаг сетки:'),
-    ('LAB ES GRID COLOR',              'Grid Color:',
-                                       'Цвет сетки:'),
-    ('LAB ES GRID SIZE',               'Grid Dot Size:',
-                                       'Размер точек сетки:'),
-    ('LAB ES BACK',                    'Background Color:',
-                                       'Цвет фона:'),
-    ('LAB ES PREVIEW',                 'Texture Preview Background Color:',
-                                       'Цвет фона поля предпросмотра текстуры:'),
-    ('LAB ES MINIMAP',                 'Mini-map Scale:',
-                                       'Масштаб мини-карты:'),
-    ('LAB ES RECENT',                  'Recent Maps List Contains:',
-                                       'Запоминать последних открытых карт:'),
-    ('LAB ES LANGUAGE',                'Language:',
-                                       'Язык:'),
-    ('LAB ES COMPRESS',                'Compress archive when save',
-                                       'Сжимать архив при сохранении'),
-    ('LAB ES BACKUP',                  'Make backup before save',
-                                       'Резервная копия при сохранении'),
-
-    ('LAB PACK SAVE TO',               'Save to:',
-                                       'Сохранить в:'),
-    ('LAB PACK MAP NAME',              'Map Resource Name:',
-                                       'Название ресурса карты:'),
-    ('LAB PACK TEXTURES',              'Texture Section:',
-                                       'Секция для текстур:'),
-    ('LAB PACK SKY',                   'Sky Section:',
-                                       'Секция для неба:'),
-    ('LAB PACK MUSIC',                 'Music Section:',
-                                       'Секция для музыки:'),
-
-    ('LAB MINI SCALE',                 'Scale:',
-                                       'Масштаб:'),
-
-    ('BTN APPLY PROPS',                'Apply Properties',
-                                       'Применить свойства'),
-    ('BTN OK',                         'OK',
-                                       'OK'),
-    ('BTN CANCEL',                     'Cancel',
-                                       'Отмена'),
-    ('BTN ADD',                        'Add',
-                                       'Добавить'),
-    ('BTN CLOSE',                      'Close',
-                                       'Закрыть'),
-    ('BTN ADD CLOSE',                  'Add and Close',
-                                       'Добавить и закрыть'),
-    ('BTN TEST AGAIN',                 'Check',
-                                       'Проверить'),
-    ('BTN START',                      'Run',
-                                       'Начать'),
-    ('BTN PACK',                       'Pack',
-                                       'Упаковать'),
-    ('BTN SAVE',                       'Save',
-                                       'Сохранить'),
-    ('BTN NO SOUND',                   'No sound',
-                                       'Нет звука'),
-    ('BTN TEXTURE ADD',                'Add texture to the list',
-                                       'Добавить текстуру в список'),
-    ('BTN TEXTURE DELETE',             'Delete texture from the list',
-                                       'Удалить текстуру из списка'),
-    ('BTN TEXTURE EMPTY',              'Deselect texture',
-                                       'Снять выбор с текстуры'),
-
-    ('LOAD WAD',                       'Reading WAD',
-                                       'Чтение WAD'),
-    ('LOAD MAP',                       'Loading Map',
-                                       'Чтение карты'),
-    ('LOAD TEXTURES',                  'Reading Textures',
-                                       'Чтение текстур'),
-    ('LOAD PANELS',                    'Reading Panels',
-                                       'Чтение панелей'),
-    ('LOAD ITEMS',                     'Reading Items',
-                                       'Чтение предметов'),
-    ('LOAD MONSTERS',                  'Reading Monsters',
-                                       'Чтение монстров'),
-    ('LOAD AREAS',                     'Reading Areas',
-                                       'Чтение областей'),
-    ('LOAD TRIGGERS',                  'Reading Triggers',
-                                       'Чтение триггеров'),
-
-    ('TEST AREA WALL',                 'Player collides with the wall and will be stuck.',
-                                       'Если в этой области появится игрок, то он застрянет в стене и не сможет двигаться.'),
-    ('TEST AREA WALL STR',             'Area #%d collides with Map (%d:%d)',
-                                       'Область #%d пересекается с картой (%d:%d)'),
-    ('TEST SPAWNS 1',                  'There are several spawn points for First Player on the map',
-                                       'Несколько точек появления первого игрока'),
-    ('TEST SPAWNS 2',                  'There are several spawn points for Second Player on the map',
-                                       'Несколько точек появления второго игрока'),
-    ('TEST SPAWNS',                    'There are several spawn points on the map. Random one will be used.',
-                                       'Несколько точек появления игрока, будет использована случайная.'),
-    ('TEST NO DM',                     'There are no DM spawn points on the map',
-                                       'На карте нет точек DM'),
-    ('TEST NO DM EX',                  'There are no DM spawn points on the map. Only "Single Player" mode available.',
-                                       'На карте нет точек DM, поиграть получится только в режиме "Single Player".'),
-    ('TEST MONSTER WALL',              'Monster collides with the wall and will be stuck.',
-                                       'Монстр пересекается с картой. Он застрянет в стене и не сможет двигаться'),
-    ('TEST MONSTER WALL STR',          'Monster #%d collides with a map (%d:%d)',
-                                       'Монстр #%d пересекается с картой (%d:%d)'),
-
-    ('OPT NO TEXTURES',                'Texture list is empty',
-                                       'Список текстур пуст'),
-    ('OPT DELETED TEXTURES',           'Deleted Textures:',
-                                       'Удалённые текстуры:'),
-    ('OPT TOTAL TEXTURES',             'Textures Total:',
-                                       'Всего текстур:'),
-    ('OPT TEX DELETED',                'Textures Deleted:',
-                                       'Удалено текстур:'),
-    ('OPT PANELS OPT',                 'Panels Optimized:',
-                                       'Оптимизировано панелей:'),
-    ('OPT WALLS',                      'Walls Optimization...',
-                                       'Оптимизация стен...'),
-    ('OPT FORES',                      'Foreground Optimization...',
-                                       'Оптимизация переднего плана...'),
-    ('OPT BACKS',                      'Background Optimization...',
-                                       'Оптимизация фона...'),
-    ('OPT STAIRS',                     'Steps Optimization...',
-                                       'Оптимизация ступеней...'),
-    ('OPT WATER',                      'Water Optimization...',
-                                       'Оптимизация воды...'),
-    ('OPT ACID1',                      'Acid 1 Optimization...',
-                                       'Оптимизация кислоты 1...'),
-    ('OPT ACID2',                      'Acid 2 Optimization...',
-                                       'Оптимизация кислоты 2...'),
-    ('OPT LIFTS',                      'Streams Optimization...',
-                                       'Оптимизация лифтов...'),
-    ('OPT BLOCKMON',                   'Monster Boundaries Optimization...',
-                                       'Оптимизация блокираторов монстров....'), 
-    ('OPT TOTAL PANELS',               'Panels Total:',
-                                       'Всего панелей:'),
-    ('OPT PANELS AFTER',               'Panels after Optimization:',
-                                       'Панелей после оптимизации:'),
-
-    ('WAD SPECIAL MAP',                '<MAP WAD-FILE>',
-                                       '<WAD-ФАЙЛ КАРТЫ>'),
-    ('WAD SPECIAL TEXS',               '<EXTRA TEXTURES>',
-                                       '<СПЕЦТЕКСТУРЫ>'),
-
-    ('FILE FILTER ALL',                'Doom 2D: Forever Maps (*.dfz, *.dfzip, *.zip, *.wad)|*.dfz;*.dfzip;*.zip;*.wad|Doom 2D: Forever 0.30 Maps (*.ini)|*.ini|All Files (*.*)|*.*',
-                                       'Карты Doom 2D: Forever (*.dfz, *.dfzip, *.zip, *.wad)|*.dfz;*.dfzip;*.zip;*.wad|Старые карты Doom 2D: Forever 0.30 (*.ini)|*.ini|Все файлы (*.*)|*.*'),
-    ('FILE FILTER WAD',                'Doom 2D: Forever Maps (*.dfz)|*.dfz|Doom 2D: Forever Maps (*.dfzip)|*.dfzip|Doom 2D: Forever Maps (*.zip)|*.zip|Doom 2D: Forever Maps (*.wad)|*.wad|All Files (*.*)|*.*',
-                                       'Карты Doom 2D: Forever (*.dfz)|*.dfz|Карты Doom 2D: Forever (*.dfzip)|*.dfzip|Карты Doom 2D: Forever (*.zip)|*.zip|Карты Doom 2D: Forever (*.wad)|*.wad|Все файлы (*.*)|*.*'),
-
-    ('EDITOR TITLE',                   'Doom 2D: Forever Map Editor',
-                                       'Редактор карт Doom 2D: Forever'),
-
-                                       
-    ('', '', '') );
-
-
 procedure SetupArrays();
 var
   i: Integer;
 
 begin
 // Да/Нет:
-  BoolNames[False] := _lc[I_ARRAY_BOOL_FALSE];
-  BoolNames[True] := _lc[I_ARRAY_BOOL_TRUE];
+  BoolNames[False] := MsgArrayBoolFalse;
+  BoolNames[True] := MsgArrayBoolTrue;
 
 // Направления:
-  DirNames[D_LEFT] := _lc[I_ARRAY_DIR_LEFT];
-  DirNames[D_RIGHT] := _lc[I_ARRAY_DIR_RIGHT];
+  DirNames[D_LEFT] := MsgArrayDirLeft;
+  DirNames[D_RIGHT] := MsgArrayDirRight;
 
 // Смены направления:
-  DirNamesAdv[0] := _lc[I_ARRAY_DIR_SAME];
-  DirNamesAdv[1] := _lc[I_ARRAY_DIR_LEFT];
-  DirNamesAdv[2] := _lc[I_ARRAY_DIR_RIGHT];
-  DirNamesAdv[3] := _lc[I_ARRAY_DIR_REVERSED];
+  DirNamesAdv[0] := MsgArrayDirSame;
+  DirNamesAdv[1] := MsgArrayDirLeft;
+  DirNamesAdv[2] := MsgArrayDirRight;
+  DirNamesAdv[3] := MsgArrayDirReversed;
 
 // Направление (на кнопках):
-  DirButtonNames[1] := _lc[I_ARRAY_DIRBTN_LEFT];
-  DirButtonNames[2] := _lc[I_ARRAY_DIRBTN_RIGHT];
-  DirButtonNames[3] := _lc[I_ARRAY_DIRBTN_UP];
-  DirButtonNames[4] := _lc[I_ARRAY_DIRBTN_DOWN];
+  DirButtonNames[1] := MsgArrayDirbtnLeft;
+  DirButtonNames[2] := MsgArrayDirbtnRight;
+  DirButtonNames[3] := MsgArrayDirbtnUp;
+  DirButtonNames[4] := MsgArrayDirbtnDown;
 
 // Названия панелей:
-  PANELNAMES[0] := _lc[I_ARRAY_PANEL_WALL];
-  PANELNAMES[1] := _lc[I_ARRAY_PANEL_BACK];
-  PANELNAMES[2] := _lc[I_ARRAY_PANEL_FRONT];
-  PANELNAMES[3] := _lc[I_ARRAY_PANEL_DOOR_OPEN];
-  PANELNAMES[4] := _lc[I_ARRAY_PANEL_DOOR_CLOSE];
-  PANELNAMES[5] := _lc[I_ARRAY_PANEL_STAIR];
-  PANELNAMES[6] := _lc[I_ARRAY_PANEL_WATER];
-  PANELNAMES[7] := _lc[I_ARRAY_PANEL_ACID_1];
-  PANELNAMES[8] := _lc[I_ARRAY_PANEL_ACID_2];
-  PANELNAMES[9] := _lc[I_ARRAY_PANEL_LIFT_UP];
-  PANELNAMES[10] := _lc[I_ARRAY_PANEL_LIFT_DOWN];
-  PANELNAMES[11] := _lc[I_ARRAY_PANEL_LIFT_LEFT];
-  PANELNAMES[12] := _lc[I_ARRAY_PANEL_LIFT_RIGHT];
-  PANELNAMES[13] := _lc[I_ARRAY_PANEL_BLOCKMON];
+  PANELNAMES[0] := MsgArrayPanelWall;
+  PANELNAMES[1] := MsgArrayPanelBack;
+  PANELNAMES[2] := MsgArrayPanelFront;
+  PANELNAMES[3] := MsgArrayPanelDoorOpen;
+  PANELNAMES[4] := MsgArrayPanelDoorClose;
+  PANELNAMES[5] := MsgArrayPanelStair;
+  PANELNAMES[6] := MsgArrayPanelWater;
+  PANELNAMES[7] := MsgArrayPanelAcid1;
+  PANELNAMES[8] := MsgArrayPanelAcid2;
+  PANELNAMES[9] := MsgArrayPanelLiftUp;
+  PANELNAMES[10] := MsgArrayPanelLiftDown;
+  PANELNAMES[11] := MsgArrayPanelLiftLeft;
+  PANELNAMES[12] := MsgArrayPanelLiftRight;
+  PANELNAMES[13] := MsgArrayPanelBlockmon;
 
 // Названия эффектов:
-  EffectNames[EFFECT_NONE] := _lc[I_ARRAY_FX_NONE];
-  EffectNames[EFFECT_TELEPORT] := _lc[I_ARRAY_FX_TELEPORT];
-  EffectNames[EFFECT_RESPAWN] := _lc[I_ARRAY_FX_RESPAWN];
-  EffectNames[EFFECT_FIRE] := _lc[I_ARRAY_FX_FIRE];
+  EffectNames[EFFECT_NONE] := MsgArrayFxNone;
+  EffectNames[EFFECT_TELEPORT] := MsgArrayFxTeleport;
+  EffectNames[EFFECT_RESPAWN] := MsgArrayFxRespawn;
+  EffectNames[EFFECT_FIRE] := MsgArrayFxFire;
 
 // Названия предметов:
-  ItemNames[ITEM_MEDKIT_SMALL] := _lc[I_ARRAY_ITEM_MEDKIT];
-  ItemNames[ITEM_MEDKIT_LARGE] := _lc[I_ARRAY_ITEM_LARGE_MEDKIT];
-  ItemNames[ITEM_MEDKIT_BLACK] := _lc[I_ARRAY_ITEM_BLACK_MEDKIT];
-  ItemNames[ITEM_ARMOR_GREEN] := _lc[I_ARRAY_ITEM_GREEN_ARMOR];
-  ItemNames[ITEM_ARMOR_BLUE] := _lc[I_ARRAY_ITEM_BLUE_ARMOR];
-  ItemNames[ITEM_SPHERE_BLUE] := _lc[I_ARRAY_ITEM_BLUE_SPHERE];
-  ItemNames[ITEM_SPHERE_WHITE] := _lc[I_ARRAY_ITEM_MEGASPHERE];
-  ItemNames[ITEM_SUIT] := _lc[I_ARRAY_ITEM_HAZ_SUIT];
-  ItemNames[ITEM_OXYGEN] := _lc[I_ARRAY_ITEM_OXYGEN];
-  ItemNames[ITEM_INVUL] := _lc[I_ARRAY_ITEM_INVULNERABILITY];
-  ItemNames[ITEM_WEAPON_SAW] := _lc[I_ARRAY_ITEM_CHAINSAW];
-  ItemNames[ITEM_WEAPON_SHOTGUN1] := _lc[I_ARRAY_ITEM_SHOTGUN];
-  ItemNames[ITEM_WEAPON_SHOTGUN2] := _lc[I_ARRAY_ITEM_DB_SHOTGUN];
-  ItemNames[ITEM_WEAPON_CHAINGUN] := _lc[I_ARRAY_ITEM_CHAINGUN];
-  ItemNames[ITEM_WEAPON_ROCKETLAUNCHER] := _lc[I_ARRAY_ITEM_ROCKET_LAUNCHER];
-  ItemNames[ITEM_WEAPON_PLASMA] := _lc[I_ARRAY_ITEM_PLASMA_RIFLE];
-  ItemNames[ITEM_WEAPON_BFG] := _lc[I_ARRAY_ITEM_BFG];
-  ItemNames[ITEM_WEAPON_SUPERPULEMET] := _lc[I_ARRAY_ITEM_SUPER_MINIGUN];
-  ItemNames[ITEM_WEAPON_FLAMETHROWER] := _lc[I_ARRAY_ITEM_FLAMETHROWER];
-  ItemNames[ITEM_AMMO_BULLETS] := _lc[I_ARRAY_ITEM_CLIP];
-  ItemNames[ITEM_AMMO_BULLETS_BOX] := _lc[I_ARRAY_ITEM_AMMO_BOX];
-  ItemNames[ITEM_AMMO_SHELLS] := _lc[I_ARRAY_ITEM_4_SHELLS];
-  ItemNames[ITEM_AMMO_SHELLS_BOX] := _lc[I_ARRAY_ITEM_25_SHELLS];
-  ItemNames[ITEM_AMMO_ROCKET] := _lc[I_ARRAY_ITEM_1_ROCKET];
-  ItemNames[ITEM_AMMO_ROCKET_BOX] := _lc[I_ARRAY_ITEM_ROCKET_BOX];
-  ItemNames[ITEM_AMMO_CELL] := _lc[I_ARRAY_ITEM_CELL];
-  ItemNames[ITEM_AMMO_CELL_BIG] := _lc[I_ARRAY_ITEM_LARGE_CELL];
-  ItemNames[ITEM_AMMO_FUELCAN] := _lc[I_ARRAY_ITEM_FUELCAN];
-  ItemNames[ITEM_AMMO_BACKPACK] := _lc[I_ARRAY_ITEM_BACKPACK];
-  ItemNames[ITEM_KEY_RED] := _lc[I_ARRAY_ITEM_KEY_RED];
-  ItemNames[ITEM_KEY_GREEN] := _lc[I_ARRAY_ITEM_KEY_GREEN];
-  ItemNames[ITEM_KEY_BLUE] := _lc[I_ARRAY_ITEM_KEY_BLUE];
+  ItemNames[ITEM_MEDKIT_SMALL] := MsgArrayItemMedkit;
+  ItemNames[ITEM_MEDKIT_LARGE] := MsgArrayItemLargeMedkit;
+  ItemNames[ITEM_MEDKIT_BLACK] := MsgArrayItemBlackMedkit;
+  ItemNames[ITEM_ARMOR_GREEN] := MsgArrayItemGreenArmor;
+  ItemNames[ITEM_ARMOR_BLUE] := MsgArrayItemBlueArmor;
+  ItemNames[ITEM_SPHERE_BLUE] := MsgArrayItemBlueSphere;
+  ItemNames[ITEM_SPHERE_WHITE] := MsgArrayItemMegasphere;
+  ItemNames[ITEM_SUIT] := MsgArrayItemHazSuit;
+  ItemNames[ITEM_OXYGEN] := MsgArrayItemOxygen;
+  ItemNames[ITEM_INVUL] := MsgArrayItemInvulnerability;
+  ItemNames[ITEM_WEAPON_SAW] := MsgArrayItemChainsaw;
+  ItemNames[ITEM_WEAPON_SHOTGUN1] := MsgArrayItemShotgun;
+  ItemNames[ITEM_WEAPON_SHOTGUN2] := MsgArrayItemDbShotgun;
+  ItemNames[ITEM_WEAPON_CHAINGUN] := MsgArrayItemChaingun;
+  ItemNames[ITEM_WEAPON_ROCKETLAUNCHER] := MsgArrayItemRocketLauncher;
+  ItemNames[ITEM_WEAPON_PLASMA] := MsgArrayItemPlasmaRifle;
+  ItemNames[ITEM_WEAPON_BFG] := MsgArrayItemBfg;
+  ItemNames[ITEM_WEAPON_SUPERPULEMET] := MsgArrayItemSuperMinigun;
+  ItemNames[ITEM_WEAPON_FLAMETHROWER] := MsgArrayItemFlamethrower;
+  ItemNames[ITEM_AMMO_BULLETS] := MsgArrayItemClip;
+  ItemNames[ITEM_AMMO_BULLETS_BOX] := MsgArrayItemAmmoBox;
+  ItemNames[ITEM_AMMO_SHELLS] := MsgArrayItem4Shells;
+  ItemNames[ITEM_AMMO_SHELLS_BOX] := MsgArrayItem25Shells;
+  ItemNames[ITEM_AMMO_ROCKET] := MsgArrayItem1Rocket;
+  ItemNames[ITEM_AMMO_ROCKET_BOX] := MsgArrayItemRocketBox;
+  ItemNames[ITEM_AMMO_CELL] := MsgArrayItemCell;
+  ItemNames[ITEM_AMMO_CELL_BIG] := MsgArrayItemLargeCell;
+  ItemNames[ITEM_AMMO_FUELCAN] := MsgArrayItemFuelcan;
+  ItemNames[ITEM_AMMO_BACKPACK] := MsgArrayItemBackpack;
+  ItemNames[ITEM_KEY_RED] := MsgArrayItemKeyRed;
+  ItemNames[ITEM_KEY_GREEN] := MsgArrayItemKeyGreen;
+  ItemNames[ITEM_KEY_BLUE] := MsgArrayItemKeyBlue;
   ItemNames[ITEM_WEAPON_KASTET] := '?';
   ItemNames[ITEM_WEAPON_PISTOL] := '??';
-  ItemNames[ITEM_BOTTLE] := _lc[I_ARRAY_ITEM_BOTTLE];
-  ItemNames[ITEM_HELMET] := _lc[I_ARRAY_ITEM_HELMET];
-  ItemNames[ITEM_JETPACK] := _lc[I_ARRAY_ITEM_JETPACK];
-  ItemNames[ITEM_INVIS] := _lc[I_ARRAY_ITEM_INVIS];
+  ItemNames[ITEM_BOTTLE] := MsgArrayItemBottle;
+  ItemNames[ITEM_HELMET] := MsgArrayItemHelmet;
+  ItemNames[ITEM_JETPACK] := MsgArrayItemJetpack;
+  ItemNames[ITEM_INVIS] := MsgArrayItemInvis;
 
 // Названия снарядов:
-  ShotNames[TRIGGER_SHOT_PISTOL] := _lc[I_ARRAY_SHOT_PISTOL];
-  ShotNames[TRIGGER_SHOT_BULLET] := _lc[I_ARRAY_SHOT_BULLET];
-  ShotNames[TRIGGER_SHOT_SHOTGUN] := _lc[I_ARRAY_SHOT_SHOTGUN];
-  ShotNames[TRIGGER_SHOT_SSG] := _lc[I_ARRAY_SHOT_SSG];
-  ShotNames[TRIGGER_SHOT_IMP] := _lc[I_ARRAY_SHOT_IMP];
-  ShotNames[TRIGGER_SHOT_PLASMA] := _lc[I_ARRAY_SHOT_PLASMA];
-  ShotNames[TRIGGER_SHOT_SPIDER] := _lc[I_ARRAY_SHOT_SPIDER];
-  ShotNames[TRIGGER_SHOT_CACO] := _lc[I_ARRAY_SHOT_CACO];
-  ShotNames[TRIGGER_SHOT_BARON] := _lc[I_ARRAY_SHOT_BARON];
-  ShotNames[TRIGGER_SHOT_MANCUB] := _lc[I_ARRAY_SHOT_MANCUB];
-  ShotNames[TRIGGER_SHOT_REV] := _lc[I_ARRAY_SHOT_REV];
-  ShotNames[TRIGGER_SHOT_ROCKET] := _lc[I_ARRAY_SHOT_ROCKET];
-  ShotNames[TRIGGER_SHOT_BFG] := _lc[I_ARRAY_SHOT_BFG];
-  ShotNames[TRIGGER_SHOT_EXPL] := _lc[I_ARRAY_SHOT_EXPL];
-  ShotNames[TRIGGER_SHOT_BFGEXPL] := _lc[I_ARRAY_SHOT_BFGEXPL];
-  ShotNames[TRIGGER_SHOT_FLAME] := _lc[I_ARRAY_SHOT_FLAME];
+  ShotNames[TRIGGER_SHOT_PISTOL] := MsgArrayShotPistol;
+  ShotNames[TRIGGER_SHOT_BULLET] := MsgArrayShotBullet;
+  ShotNames[TRIGGER_SHOT_SHOTGUN] := MsgArrayShotShotgun;
+  ShotNames[TRIGGER_SHOT_SSG] := MsgArrayShotSsg;
+  ShotNames[TRIGGER_SHOT_IMP] := MsgArrayShotImp;
+  ShotNames[TRIGGER_SHOT_PLASMA] := MsgArrayShotPlasma;
+  ShotNames[TRIGGER_SHOT_SPIDER] := MsgArrayShotSpider;
+  ShotNames[TRIGGER_SHOT_CACO] := MsgArrayShotCaco;
+  ShotNames[TRIGGER_SHOT_BARON] := MsgArrayShotBaron;
+  ShotNames[TRIGGER_SHOT_MANCUB] := MsgArrayShotMancub;
+  ShotNames[TRIGGER_SHOT_REV] := MsgArrayShotRev;
+  ShotNames[TRIGGER_SHOT_ROCKET] := MsgArrayShotRocket;
+  ShotNames[TRIGGER_SHOT_BFG] := MsgArrayShotBfg;
+  ShotNames[TRIGGER_SHOT_EXPL] := MsgArrayShotExpl;
+  ShotNames[TRIGGER_SHOT_BFGEXPL] := MsgArrayShotBfgexpl;
+  ShotNames[TRIGGER_SHOT_FLAME] := MsgArrayShotFlame;
 
 // Названия монстров:
-  MonsterNames[MONSTER_DEMON] := _lc[I_ARRAY_MON_DEMON];
-  MonsterNames[MONSTER_IMP] := _lc[I_ARRAY_MON_IMP];
-  MonsterNames[MONSTER_ZOMBY] := _lc[I_ARRAY_MON_ZOMBIE];
-  MonsterNames[MONSTER_SERG] := _lc[I_ARRAY_MON_SERGEANT];
-  MonsterNames[MONSTER_CYBER] := _lc[I_ARRAY_MON_CYBER];
-  MonsterNames[MONSTER_CGUN] := _lc[I_ARRAY_MON_CGUN];
-  MonsterNames[MONSTER_BARON] := _lc[I_ARRAY_MON_HELL_BARON];
-  MonsterNames[MONSTER_KNIGHT] := _lc[I_ARRAY_MON_HELL_KNIGHT];
-  MonsterNames[MONSTER_CACO] := _lc[I_ARRAY_MON_CACODEMON];
-  MonsterNames[MONSTER_SOUL] := _lc[I_ARRAY_MON_LOST_SOUL];
-  MonsterNames[MONSTER_PAIN] := _lc[I_ARRAY_MON_PAIN_ELEMENTAL];
-  MonsterNames[MONSTER_SPIDER] := _lc[I_ARRAY_MON_MASTERMIND];
-  MonsterNames[MONSTER_BSP] := _lc[I_ARRAY_MON_ARACHNATRON];
-  MonsterNames[MONSTER_MANCUB] := _lc[I_ARRAY_MON_MANCUBUS];
-  MonsterNames[MONSTER_SKEL] := _lc[I_ARRAY_MON_REVENANT];
-  MonsterNames[MONSTER_VILE] := _lc[I_ARRAY_MON_ARCHVILE];
-  MonsterNames[MONSTER_FISH] := _lc[I_ARRAY_MON_FISH];
-  MonsterNames[MONSTER_BARREL] := _lc[I_ARRAY_MON_BARREL];
-  MonsterNames[MONSTER_ROBO] := _lc[I_ARRAY_MON_ROBOT];
-  MonsterNames[MONSTER_MAN] := _lc[I_ARRAY_MON_PRIKOLIST];
+  MonsterNames[MONSTER_DEMON] := MsgArrayMonDemon;
+  MonsterNames[MONSTER_IMP] := MsgArrayMonImp;
+  MonsterNames[MONSTER_ZOMBY] := MsgArrayMonZombie;
+  MonsterNames[MONSTER_SERG] := MsgArrayMonSergeant;
+  MonsterNames[MONSTER_CYBER] := MsgArrayMonCyber;
+  MonsterNames[MONSTER_CGUN] := MsgArrayMonCgun;
+  MonsterNames[MONSTER_BARON] := MsgArrayMonHellBaron;
+  MonsterNames[MONSTER_KNIGHT] := MsgArrayMonHellKnight;
+  MonsterNames[MONSTER_CACO] := MsgArrayMonCacodemon;
+  MonsterNames[MONSTER_SOUL] := MsgArrayMonLostSoul;
+  MonsterNames[MONSTER_PAIN] := MsgArrayMonPainElemental;
+  MonsterNames[MONSTER_SPIDER] := MsgArrayMonMastermind;
+  MonsterNames[MONSTER_BSP] := MsgArrayMonArachnatron;
+  MonsterNames[MONSTER_MANCUB] := MsgArrayMonMancubus;
+  MonsterNames[MONSTER_SKEL] := MsgArrayMonRevenant;
+  MonsterNames[MONSTER_VILE] := MsgArrayMonArchvile;
+  MonsterNames[MONSTER_FISH] := MsgArrayMonFish;
+  MonsterNames[MONSTER_BARREL] := MsgArrayMonBarrel;
+  MonsterNames[MONSTER_ROBO] := MsgArrayMonRobot;
+  MonsterNames[MONSTER_MAN] := MsgArrayMonPrikolist;
 
 // Названия областей:
-  AreaNames[AREA_PLAYERPOINT1] := _lc[I_ARRAY_AREA_PLAYER_ONE];
-  AreaNames[AREA_PLAYERPOINT2] := _lc[I_ARRAY_AREA_PLAYER_TWO];
-  AreaNames[AREA_DMPOINT] := _lc[I_ARRAY_AREA_DM];
-  AreaNames[AREA_REDFLAG] := _lc[I_ARRAY_AREA_FLAG_RED];
-  AreaNames[AREA_BLUEFLAG] := _lc[I_ARRAY_AREA_FLAG_BLUE];
-  AreaNames[AREA_DOMFLAG] := _lc[I_ARRAY_AREA_FLAG_DOM];
-  AreaNames[AREA_REDTEAMPOINT] := _lc[I_ARRAY_AREA_TEAM_RED];
-  AreaNames[AREA_BLUETEAMPOINT] := _lc[I_ARRAY_AREA_TEAM_BLUE];
+  AreaNames[AREA_PLAYERPOINT1] := MsgArrayAreaPlayerOne;
+  AreaNames[AREA_PLAYERPOINT2] := MsgArrayAreaPlayerTwo;
+  AreaNames[AREA_DMPOINT] := MsgArrayAreaDm;
+  AreaNames[AREA_REDFLAG] := MsgArrayAreaFlagRed;
+  AreaNames[AREA_BLUEFLAG] := MsgArrayAreaFlagBlue;
+  AreaNames[AREA_DOMFLAG] := MsgArrayAreaFlagDom;
+  AreaNames[AREA_REDTEAMPOINT] := MsgArrayAreaTeamRed;
+  AreaNames[AREA_BLUETEAMPOINT] := MsgArrayAreaTeamBlue;
 
 // Названия триггеров:
-  TriggerNames[TRIGGER_EXIT] := _lc[I_ARRAY_TR_EXIT];
-  TriggerNames[TRIGGER_TELEPORT] := _lc[I_ARRAY_TR_TELEPORT];
-  TriggerNames[TRIGGER_OPENDOOR] := _lc[I_ARRAY_TR_DOOR_OPEN];
-  TriggerNames[TRIGGER_CLOSEDOOR] := _lc[I_ARRAY_TR_DOOR_CLOSE];
-  TriggerNames[TRIGGER_DOOR] := _lc[I_ARRAY_TR_DOOR_SWITCH];
-  TriggerNames[TRIGGER_DOOR5] := _lc[I_ARRAY_TR_DOOR_5_SEC];
-  TriggerNames[TRIGGER_CLOSETRAP] := _lc[I_ARRAY_TR_TRAP_CLOSE];
-  TriggerNames[TRIGGER_TRAP] := _lc[I_ARRAY_TR_TRAP];
-  TriggerNames[TRIGGER_PRESS] := _lc[I_ARRAY_TR_EXTEND];
-  TriggerNames[TRIGGER_SECRET] := _lc[I_ARRAY_TR_SECRET];
-  TriggerNames[TRIGGER_LIFTUP] := _lc[I_ARRAY_TR_LIFT_UP];
-  TriggerNames[TRIGGER_LIFTDOWN] := _lc[I_ARRAY_TR_LIFT_DOWN];
-  TriggerNames[TRIGGER_LIFT] := _lc[I_ARRAY_TR_LIFT_SWITCH];
-  TriggerNames[TRIGGER_TEXTURE] := _lc[I_ARRAY_TR_TEXTURE];
-  TriggerNames[TRIGGER_ON] := _lc[I_ARRAY_TR_ON];
-  TriggerNames[TRIGGER_OFF] := _lc[I_ARRAY_TR_OFF];
-  TriggerNames[TRIGGER_ONOFF] := _lc[I_ARRAY_TR_SWITCH];
-  TriggerNames[TRIGGER_SOUND] := _lc[I_ARRAY_TR_SOUND];
-  TriggerNames[TRIGGER_SPAWNMONSTER] := _lc[I_ARRAY_TR_SPAWN_MONSTER];
-  TriggerNames[TRIGGER_SPAWNITEM] := _lc[I_ARRAY_TR_SPAWN_ITEM];
-  TriggerNames[TRIGGER_MUSIC] := _lc[I_ARRAY_TR_MUSIC];
-  TriggerNames[TRIGGER_PUSH] := _lc[I_ARRAY_TR_PUSH];
-  TriggerNames[TRIGGER_SCORE] := _lc[I_ARRAY_TR_SCORE];
-  TriggerNames[TRIGGER_MESSAGE] := _lc[I_ARRAY_TR_MESSAGE];
-  TriggerNames[TRIGGER_DAMAGE] := _lc[I_ARRAY_TR_DAMAGE];
-  TriggerNames[TRIGGER_HEALTH] := _lc[I_ARRAY_TR_HEALTH];
-  TriggerNames[TRIGGER_SHOT] := _lc[I_ARRAY_TR_SHOT];
-  TriggerNames[TRIGGER_EFFECT] := _lc[I_ARRAY_TR_EFFECT];
+  TriggerNames[TRIGGER_EXIT] := MsgArrayTrExit;
+  TriggerNames[TRIGGER_TELEPORT] := MsgArrayTrTeleport;
+  TriggerNames[TRIGGER_OPENDOOR] := MsgArrayTrDoorOpen;
+  TriggerNames[TRIGGER_CLOSEDOOR] := MsgArrayTrDoorClose;
+  TriggerNames[TRIGGER_DOOR] := MsgArrayTrDoorSwitch;
+  TriggerNames[TRIGGER_DOOR5] := MsgArrayTrDoor5Sec;
+  TriggerNames[TRIGGER_CLOSETRAP] := MsgArrayTrTrapClose;
+  TriggerNames[TRIGGER_TRAP] := MsgArrayTrTrap;
+  TriggerNames[TRIGGER_PRESS] := MsgArrayTrExtend;
+  TriggerNames[TRIGGER_SECRET] := MsgArrayTrSecret;
+  TriggerNames[TRIGGER_LIFTUP] := MsgArrayTrLiftUp;
+  TriggerNames[TRIGGER_LIFTDOWN] := MsgArrayTrLiftDown;
+  TriggerNames[TRIGGER_LIFT] := MsgArrayTrLiftSwitch;
+  TriggerNames[TRIGGER_TEXTURE] := MsgArrayTrTexture;
+  TriggerNames[TRIGGER_ON] := MsgArrayTrOn;
+  TriggerNames[TRIGGER_OFF] := MsgArrayTrOff;
+  TriggerNames[TRIGGER_ONOFF] := MsgArrayTrSwitch;
+  TriggerNames[TRIGGER_SOUND] := MsgArrayTrSound;
+  TriggerNames[TRIGGER_SPAWNMONSTER] := MsgArrayTrSpawnMonster;
+  TriggerNames[TRIGGER_SPAWNITEM] := MsgArrayTrSpawnItem;
+  TriggerNames[TRIGGER_MUSIC] := MsgArrayTrMusic;
+  TriggerNames[TRIGGER_PUSH] := MsgArrayTrPush;
+  TriggerNames[TRIGGER_SCORE] := MsgArrayTrScore;
+  TriggerNames[TRIGGER_MESSAGE] := MsgArrayTrMessage;
+  TriggerNames[TRIGGER_DAMAGE] := MsgArrayTrDamage;
+  TriggerNames[TRIGGER_HEALTH] := MsgArrayTrHealth;
+  TriggerNames[TRIGGER_SHOT] := MsgArrayTrShot;
+  TriggerNames[TRIGGER_EFFECT] := MsgArrayTrEffect;
 
 // Установка значений в панели выбора объектов:
   with MainForm do
@@ -2039,19 +843,19 @@ begin
       lbTriggersList.Items.Add(TriggerNames[i]);
 
     clbActivationType.Clear();
-    clbActivationType.Items.Add(_lc[I_CTRL_ACT_PLAYER_CLOSE]);
-    clbActivationType.Items.Add(_lc[I_CTRL_ACT_MONSTER_CLOSE]);
-    clbActivationType.Items.Add(_lc[I_CTRL_ACT_PLAYER_PRESS]);
-    clbActivationType.Items.Add(_lc[I_CTRL_ACT_MONSTER_PRESS]);
-    clbActivationType.Items.Add(_lc[I_CTRL_ACT_SHOT]);
-    clbActivationType.Items.Add(_lc[I_CTRL_ACT_NO_MONSTER]);
+    clbActivationType.Items.Add(MsgCtrlActPlayerClose);
+    clbActivationType.Items.Add(MsgCtrlActMonsterClose);
+    clbActivationType.Items.Add(MsgCtrlActPlayerPress);
+    clbActivationType.Items.Add(MsgCtrlActMonsterPress);
+    clbActivationType.Items.Add(MsgCtrlActShot);
+    clbActivationType.Items.Add(MsgCtrlActNoMonster);
 
     clbKeys.Clear();
-    clbKeys.Items.Add(_lc[I_CTRL_KEYS_RED]);
-    clbKeys.Items.Add(_lc[I_CTRL_KEYS_GREEN]);
-    clbKeys.Items.Add(_lc[I_CTRL_KEYS_BLUE]);
-    clbKeys.Items.Add(_lc[I_CTRL_KEYS_TEAM_RED]);
-    clbKeys.Items.Add(_lc[I_CTRL_KEYS_TEAM_BLUE]);
+    clbKeys.Items.Add(MsgCtrlKeysRed);
+    clbKeys.Items.Add(MsgCtrlKeysGreen);
+    clbKeys.Items.Add(MsgCtrlKeysBlue);
+    clbKeys.Items.Add(MsgCtrlKeysTeamRed);
+    clbKeys.Items.Add(MsgCtrlKeysTeamBlue);
   end;
 end;
 
@@ -2065,7 +869,7 @@ begin
     s := g_GetBuildHash(false);
     if s = 'custom build' then
       s := s + ' by ' + g_GetBuilderName() + ' ' + EDITOR_BUILDDATE + ' ' + EDITOR_BUILDTIME;
-    FormCaption := _lc[I_EDITOR_TITLE] + ' (' + s + ')';
+    FormCaption := MsgEditorTitle + ' (' + s + ')';
     i := Pos('-', Caption);
     if i > 0 then
       begin
@@ -2075,481 +879,368 @@ begin
       Caption := FormCaption;
   // Главное меню:
   // "Файл":
-    miMenuFile.Caption := _lc[I_MENU_FILE];
-    miNewMap.Caption := _lc[I_MENU_FILE_NEW];
-    miOpenMap.Caption := _lc[I_MENU_FILE_OPEN];
-    miSaveMap.Caption := _lc[I_MENU_FILE_SAVE];
-    miSaveMapAs.Caption := _lc[I_MENU_FILE_SAVE_AS];
-    miOpenWadMap.Caption := _lc[I_MENU_FILE_OPEN_WAD];
-    miReopenMap.Caption := _lc[I_MENU_FILE_REOPEN];
-    miSaveMiniMap.Caption := _lc[I_MENU_FILE_SAVE_MINI];
-    miDeleteMap.Caption := _lc[I_MENU_FILE_DELETE];
-    miPackMap.Caption := _lc[I_MENU_FILE_PACK_MAP];
-    miExit.Caption := _lc[I_MENU_FILE_EXIT];
+    miMenuFile.Caption := MsgMenuFile;
+    miNewMap.Caption := MsgMenuFileNew;
+    miOpenMap.Caption := MsgMenuFileOpen;
+    miSaveMap.Caption := MsgMenuFileSave;
+    miSaveMapAs.Caption := MsgMenuFileSaveAs;
+    miOpenWadMap.Caption := MsgMenuFileOpenWad;
+    miReopenMap.Caption := MsgMenuFileReopen;
+    miSaveMiniMap.Caption := MsgMenuFileSaveMini;
+    miDeleteMap.Caption := MsgMenuFileDelete;
+    miPackMap.Caption := MsgMenuFilePackMap;
+    miExit.Caption := MsgMenuFileExit;
   // "Правка":
-    miMenuEdit.Caption := _lc[I_MENU_EDIT];
-    miUndo.Caption := _lc[I_MENU_EDIT_UNDO];
-    miCopy.Caption := _lc[I_MENU_EDIT_COPY];
-    miCut.Caption := _lc[I_MENU_EDIT_CUT];
-    miPaste.Caption := _lc[I_MENU_EDIT_PASTE];
-    miSelectAll.Caption := _lc[I_MENU_EDIT_SELECT_ALL];
-    miToFore.Caption := _lc[I_MENU_EDIT_TO_FORE];
-    miToBack.Caption := _lc[I_MENU_EDIT_TO_BACK];
+    miMenuEdit.Caption := MsgMenuEdit;
+    miUndo.Caption := MsgMenuEditUndo;
+    miCopy.Caption := MsgMenuEditCopy;
+    miCut.Caption := MsgMenuEditCut;
+    miPaste.Caption := MsgMenuEditPaste;
+    miSelectAll.Caption := MsgMenuEditSelectAll;
+    miToFore.Caption := MsgMenuEditToFore;
+    miToBack.Caption := MsgMenuEditToBack;
   // "Инструменты":
-    miSnapToGrid.Caption := _lc[I_MENU_TOOLS_SNAP_GRID];
-    miMiniMap.Caption := _lc[I_MENU_TOOLS_MINIMAP];
-    miSwitchGrid.Caption := _lc[I_MENU_TOOLS_STEP_GRID];
-    miShowEdges.Caption := _lc[I_MENU_TOOLS_SHOW_EDGES];
-    miLayers.Caption := _lc[I_MENU_TOOLS_LAYERS];
-    miLayer1.Caption := _lc[I_MENU_LAYER_BACK];
-    miLayer2.Caption := _lc[I_MENU_LAYER_WALL];
-    miLayer3.Caption := _lc[I_MENU_LAYER_FORE];
-    miLayer4.Caption := _lc[I_MENU_LAYER_STAIR];
-    miLayer5.Caption := _lc[I_MENU_LAYER_WATER];
-    miLayer6.Caption := _lc[I_MENU_LAYER_ITEM];
-    miLayer7.Caption := _lc[I_MENU_LAYER_MONSTER];
-    miLayer8.Caption := _lc[I_MENU_LAYER_AREA];
-    miLayer9.Caption := _lc[I_MENU_LAYER_TRIGGER];
-    miMapOptions.Caption := _lc[I_MENU_SETS_MAP];
-    miOptions.Caption := _lc[I_MENU_SETS_EDITOR];
+    miSnapToGrid.Caption := MsgMenuToolsSnapGrid;
+    miMiniMap.Caption := MsgMenuToolsMinimap;
+    miSwitchGrid.Caption := MsgMenuToolsStepGrid;
+    miShowEdges.Caption := MsgMenuToolsShowEdges;
+    miLayers.Caption := MsgMenuToolsLayers;
+    miLayer1.Caption := MsgMenuLayerBack;
+    miLayer2.Caption := MsgMenuLayerWall;
+    miLayer3.Caption := MsgMenuLayerFore;
+    miLayer4.Caption := MsgMenuLayerStair;
+    miLayer5.Caption := MsgMenuLayerWater;
+    miLayer6.Caption := MsgMenuLayerItem;
+    miLayer7.Caption := MsgMenuLayerMonster;
+    miLayer8.Caption := MsgMenuLayerArea;
+    miLayer9.Caption := MsgMenuLayerTrigger;
+    miMapOptions.Caption := MsgMenuSetsMap;
+    miOptions.Caption := MsgMenuSetsEditor;
   // "Сервис":
-    miMenuService.Caption := _lc[I_MENU_SERV];
-    miCheckMap.Caption := _lc[I_MENU_SERV_TEST];
-    miOptimmization.Caption := _lc[I_MENU_SERV_OPT];
-    miMapPreview.Caption := _lc[I_MENU_SERV_PREVIEW];
-    miTestMap.Caption := _lc[I_MENU_SERV_LAUNCH];
+    miMenuService.Caption := MsgMenuServ;
+    miCheckMap.Caption := MsgMenuServTest;
+    miOptimmization.Caption := MsgMenuServOpt;
+    miMapPreview.Caption := MsgMenuServPreview;
+    miTestMap.Caption := MsgMenuServLaunch;
   // "Справка":
-    miMenuHelp.Caption := _lc[I_MENU_HELP];
-    miAbout.Caption := _lc[I_MENU_HELP_ABOUT];
+    miMenuHelp.Caption := MsgMenuHelp;
+    miAbout.Caption := MsgMenuHelpAbout;
 
   // Панель инструментов:
-    tbNewMap.Hint := _lc[I_MENU_TB_NEW];
-    tbOpenMap.Hint := _lc[I_MENU_TB_OPEN];
-    tbSaveMap.Hint := _lc[I_MENU_TB_SAVE];
-    tbOpenWadMap.Hint := _lc[I_MENU_TB_OPEN_WAD];
-    tbShowMap.Hint := _lc[I_MENU_TB_MINIMAP];
-    tbShow.Hint := _lc[I_MENU_TB_LAYERS];
-    tbGridOn.Hint := _lc[I_MENU_TB_GRID];
-    tbGrid.Hint := _lc[I_MENU_TB_GRID_STEP];
-    tbTestMap.Hint := _lc[I_MENU_TB_LAUNCH];
+    tbNewMap.Hint := MsgMenuTbNew;
+    tbOpenMap.Hint := MsgMenuTbOpen;
+    tbSaveMap.Hint := MsgMenuTbSave;
+    tbOpenWadMap.Hint := MsgMenuTbOpenWad;
+    tbShowMap.Hint := MsgMenuTbMinimap;
+    tbShow.Hint := MsgMenuTbLayers;
+    tbGridOn.Hint := MsgMenuTbGrid;
+    tbGrid.Hint := MsgMenuTbGridStep;
+    tbTestMap.Hint := MsgMenuTbLaunch;
   // Всплывающее меню для кнопки слоев:
-    miLayerP1.Caption := _lc[I_MENU_LAYER_BACK];
-    miLayerP2.Caption := _lc[I_MENU_LAYER_WALL];
-    miLayerP3.Caption := _lc[I_MENU_LAYER_FORE];
-    miLayerP4.Caption := _lc[I_MENU_LAYER_STAIR];
-    miLayerP5.Caption := _lc[I_MENU_LAYER_WATER];
-    miLayerP6.Caption := _lc[I_MENU_LAYER_ITEM];
-    miLayerP7.Caption := _lc[I_MENU_LAYER_MONSTER];
-    miLayerP8.Caption := _lc[I_MENU_LAYER_AREA];
-    miLayerP9.Caption := _lc[I_MENU_LAYER_TRIGGER];
+    miLayerP1.Caption := MsgMenuLayerBack;
+    miLayerP2.Caption := MsgMenuLayerWall;
+    miLayerP3.Caption := MsgMenuLayerFore;
+    miLayerP4.Caption := MsgMenuLayerStair;
+    miLayerP5.Caption := MsgMenuLayerWater;
+    miLayerP6.Caption := MsgMenuLayerItem;
+    miLayerP7.Caption := MsgMenuLayerMonster;
+    miLayerP8.Caption := MsgMenuLayerArea;
+    miLayerP9.Caption := MsgMenuLayerTrigger;
 
   // Кнопка применения свойств:
-    bApplyProperty.Caption := _lc[I_BTN_APPLY_PROPS];
+    bApplyProperty.Caption := MsgBtnApplyProps;
   // Редактор свойств объектов:
-    vleObjectProperty.TitleCaptions[0] := _lc[I_CTRL_PROP_KEY];
-    vleObjectProperty.TitleCaptions[1] := _lc[I_CTRL_PROP_VALUE];
+    vleObjectProperty.TitleCaptions[0] := MsgCtrlPropKey;
+    vleObjectProperty.TitleCaptions[1] := MsgCtrlPropValue;
 
   // Вкладка "Панели":
-    tsPanels.Caption := _lc[I_CTRL_PANELS];
-    lbPanelType.Hint := _lc[I_PROP_PANEL_TYPE];
-    lbTextureList.Hint := _lc[I_CTRL_LIST_TEXTURE];
+    tsPanels.Caption := MsgCtrlPanels;
+    lbPanelType.Hint := MsgPropPanelType;
+    lbTextureList.Hint := MsgCtrlListTexture;
   // Панель настройки текстур:
-    LabelTxW.Caption := _lc[I_LAB_TEX_WIDTH];
-    LabelTxH.Caption := _lc[I_LAB_TEX_HEIGHT];
-    cbPreview.Caption := _lc[I_CTRL_PREVIEW];
-    bbAddTexture.Hint := _lc[I_BTN_TEXTURE_ADD];
-    bbRemoveTexture.Hint := _lc[I_BTN_TEXTURE_DELETE];
-    bClearTexture.Hint := _lc[I_BTN_TEXTURE_EMPTY];
+    LabelTxW.Caption := MsgLabTexWidth;
+    LabelTxH.Caption := MsgLabTexHeight;
+    cbPreview.Caption := MsgCtrlPreview;
+    bbAddTexture.Hint := MsgBtnTextureAdd;
+    bbRemoveTexture.Hint := MsgBtnTextureDelete;
+    bClearTexture.Hint := MsgBtnTextureEmpty;
 
   // Вкладка "Предметы":
-    tsItems.Caption := _lc[I_CTRL_ITEMS];
-    lbItemList.Hint := _lc[I_CTRL_LIST_ITEM];
-    cbOnlyDM.Caption := _lc[I_CTRL_ITEM_DM];
-    cbFall.Caption := _lc[I_CTRL_ITEM_FALLS];
+    tsItems.Caption := MsgCtrlItems;
+    lbItemList.Hint := MsgCtrlListItem;
+    cbOnlyDM.Caption := MsgCtrlItemDm;
+    cbFall.Caption := MsgCtrlItemFalls;
 
   // Вкладка "Монстры":
-    tsMonsters.Caption := _lc[I_CTRL_MONSTERS];
-    lbMonsterList.Hint := _lc[I_CTRL_LIST_MONSTER];
-    rbMonsterLeft.Caption := _lc[I_CTRL_LEFT];
-    rbMonsterRight.Caption := _lc[I_CTRL_RIGHT];
+    tsMonsters.Caption := MsgCtrlMonsters;
+    lbMonsterList.Hint := MsgCtrlListMonster;
+    rbMonsterLeft.Caption := MsgCtrlLeft;
+    rbMonsterRight.Caption := MsgCtrlRight;
 
   // Вкладка "Области":
-    tsAreas.Caption := _lc[I_CTRL_AREAS];
-    lbAreasList.Hint := _lc[I_CTRL_LIST_AREA];
-    rbAreaLeft.Caption := _lc[I_CTRL_LEFT];
-    rbAreaRight.Caption := _lc[I_CTRL_RIGHT];
+    tsAreas.Caption := MsgCtrlAreas;
+    lbAreasList.Hint := MsgCtrlListArea;
+    rbAreaLeft.Caption := MsgCtrlLeft;
+    rbAreaRight.Caption := MsgCtrlRight;
 
   // Вкладка "Триггеры":
-    tsTriggers.Caption := _lc[I_CTRL_TRIGGERS];
-    lbTriggersList.Hint := _lc[I_CTRL_LIST_TRIGGER];
-    clbActivationType.Hint := _lc[I_CTRL_LIST_ACTIVE];
-    clbKeys.Hint := _lc[I_CTRL_LIST_KEYS];
+    tsTriggers.Caption := MsgCtrlTriggers;
+    lbTriggersList.Hint := MsgCtrlListTrigger;
+    clbActivationType.Hint := MsgCtrlListActive;
+    clbKeys.Hint := MsgCtrlListKeys;
   end;
 
 // Форма "О программе":
   with AboutForm do
   begin
-    Caption := _lc[I_CAP_ABOUT];
-    LabelTitle.Caption := _lc[I_EDITOR_TITLE];
-    LabelVer.Caption := _lc[I_LAB_ABOUT_VER];
-    LabelAuthor.Caption := _lc[I_LAB_ABOUT_AUTHOR];
-    LabelAuthor2.Caption := _lc[I_LAB_ABOUT_AUTHOR_2];
-    LabelMail.Caption := _lc[I_LAB_ABOUT_MAIL];
-    LabelMail2.Caption := _lc[I_LAB_ABOUT_MAIL_2];
-    LabelSite.Caption := _lc[I_LAB_ABOUT_SITE];
-    LabelHttp.Caption := _lc[I_LAB_ABOUT_HTTP];
+    Caption := MsgCapAbout;
+    LabelTitle.Caption := MsgEditorTitle;
+    LabelVer.Caption := MsgLabAboutVer;
+    LabelAuthor.Caption := MsgLabAboutAuthor;
+    LabelAuthor2.Caption := MsgLabAboutAuthor2;
+    LabelMail.Caption := MsgLabAboutMail;
+    LabelMail2.Caption := MsgLabAboutMail2;
+    LabelSite.Caption := MsgLabAboutSite;
+    LabelHttp.Caption := MsgLabAboutHttp;
   end;
 
 // Форма "Тип активации":
   with ActivationTypeForm do
   begin
-    Caption := _lc[I_CAP_ACT];
-    cbPlayerCollide.Caption := _lc[I_CTRL_ACT_PLAYER_CLOSE];
-    cbMonsterCollide.Caption := _lc[I_CTRL_ACT_MONSTER_CLOSE];
-    cbPlayerPress.Caption := _lc[I_CTRL_ACT_PLAYER_PRESS];
-    cbMonsterPress.Caption := _lc[I_CTRL_ACT_MONSTER_PRESS];
-    cbShot.Caption := _lc[I_CTRL_ACT_SHOT];
-    cbNoMonster.Caption := _lc[I_CTRL_ACT_NO_MONSTER];
-    bOK.Caption := _lc[I_BTN_OK];
+    Caption := MsgCapAct;
+    cbPlayerCollide.Caption := MsgCtrlActPlayerClose;
+    cbMonsterCollide.Caption := MsgCtrlActMonsterClose;
+    cbPlayerPress.Caption := MsgCtrlActPlayerPress;
+    cbMonsterPress.Caption := MsgCtrlActMonsterPress;
+    cbShot.Caption := MsgCtrlActShot;
+    cbNoMonster.Caption := MsgCtrlActNoMonster;
+    bOK.Caption := MsgBtnOk;
   end;
 
 // Форма "Выбор текстуры для неба":
   with AddSkyForm do
   begin
-    Caption := _lc[I_CAP_ADD_SKY];
-    LabelWADs.Caption := _lc[I_LAB_ADD_WADS];
-    LabelSections.Caption := _lc[I_LAB_ADD_SECTIONS];
-    bOK.Caption := _lc[I_BTN_OK];
-    bCancel.Caption := _lc[I_BTN_CANCEL];
+    Caption := MsgCapAddSky;
+    LabelWADs.Caption := MsgLabAddWads;
+    LabelSections.Caption := MsgLabAddSections;
+    bOK.Caption := MsgBtnOk;
+    bCancel.Caption := MsgBtnCancel;
   end;
 
 // Форма "Выбор звука или музыки":
   with AddSoundForm do
   begin
-    Caption := _lc[I_CAP_ADD_SOUND];
-    LabelWADs.Caption := _lc[I_LAB_ADD_WADS];
-    LabelSections.Caption := _lc[I_LAB_ADD_SECTIONS];
-    bOK.Caption := _lc[I_BTN_OK];
-    bCancel.Caption := _lc[I_BTN_CANCEL];
-    bEmpty.Caption := _lc[I_BTN_NO_SOUND];
+    Caption := MsgCapAddSound;
+    LabelWADs.Caption := MsgLabAddWads;
+    LabelSections.Caption := MsgLabAddSections;
+    bOK.Caption := MsgBtnOk;
+    bCancel.Caption := MsgBtnCancel;
+    bEmpty.Caption := MsgBtnNoSound;
   end;
 
 // Форма "Выбор текстуры":
   with AddTextureForm do
   begin
-    Caption := _lc[I_CAP_ADD_TEXTURE];
-    LabelWADs.Caption := _lc[I_LAB_ADD_WADS];
-    LabelSections.Caption := _lc[I_LAB_ADD_SECTIONS];
-    bAddTexture.Caption := _lc[I_BTN_ADD];
-    bClose.Caption := _lc[I_BTN_CLOSE];
-    bAddClose.Caption := _lc[I_BTN_ADD_CLOSE];
+    Caption := MsgCapAddTexture;
+    LabelWADs.Caption := MsgLabAddWads;
+    LabelSections.Caption := MsgLabAddSections;
+    bAddTexture.Caption := MsgBtnAdd;
+    bClose.Caption := MsgBtnClose;
+    bAddClose.Caption := MsgBtnAddClose;
   end;
 
 // Форма "Выбор типа монстра" / "Выбор типа предмета":
-  ChooseTypeForm.bOK.Caption := _lc[I_BTN_OK];
+  ChooseTypeForm.bOK.Caption := MsgBtnOk;
 
 // Форма "Ключи":
   with KeysForm do
   begin
-    Caption := _lc[I_CAP_KEYS];
-    cbRedKey.Caption := _lc[I_CTRL_KEYS_RED];
-    cbGreenKey.Caption := _lc[I_CTRL_KEYS_GREEN];
-    cbBlueKey.Caption := _lc[I_CTRL_KEYS_BLUE];
-    cbRedTeam.Caption := _lc[I_CTRL_KEYS_TEAM_RED];
-    cbBlueTeam.Caption := _lc[I_CTRL_KEYS_TEAM_BLUE];
-    bOK.Caption := _lc[I_BTN_OK];
+    Caption := MsgCapKeys;
+    cbRedKey.Caption := MsgCtrlKeysRed;
+    cbGreenKey.Caption := MsgCtrlKeysGreen;
+    cbBlueKey.Caption := MsgCtrlKeysBlue;
+    cbRedTeam.Caption := MsgCtrlKeysTeamRed;
+    cbBlueTeam.Caption := MsgCtrlKeysTeamBlue;
+    bOK.Caption := MsgBtnOk;
   end;
 
 // Форма "Проверка карты":
   with MapCheckForm do
   begin
-    Caption := _lc[I_CAP_TEST];
-    bCheckMap.Caption := _lc[I_BTN_TEST_AGAIN];
-    bClose.Caption := _lc[I_BTN_CLOSE];
+    Caption := MsgCapTest;
+    bCheckMap.Caption := MsgBtnTestAgain;
+    bClose.Caption := MsgBtnClose;
   end;
 
 // Форма "Оптимизация карты":
   with MapOptimizationForm do
   begin
-    Caption := _lc[I_CAP_OPT];
+    Caption := MsgCapOpt;
   // Выбор оптимизации:
-    GroupBoxOpt.Caption := _lc[I_CTRL_OPT_GB];
-    rbTexturesOptimization.Caption := _lc[I_CTRL_OPT_TEXTURE];
-    rbPanelsOptimization.Caption := _lc[I_CTRL_OPT_PANEL];
+    GroupBoxOpt.Caption := MsgCtrlOptGb;
+    rbTexturesOptimization.Caption := MsgCtrlOptTexture;
+    rbPanelsOptimization.Caption := MsgCtrlOptPanel;
   // Оптимизация текстур:
-    bBeginTextureOptimization.Caption := _lc[I_BTN_START];
+    bBeginTextureOptimization.Caption := MsgBtnStart;
   // Оптимизация панелей:
-    cbOptimizeWalls.Caption := _lc[I_CTRL_OPT_WALL];
-    cbOptimizeForeGround.Caption := _lc[I_CTRL_OPT_FORE];
-    cbOptimizeBackGround.Caption := _lc[I_CTRL_OPT_BACK];
-    cbOptimizeSteps.Caption := _lc[I_CTRL_OPT_STAIR];
-    cbOptimizeWater.Caption := _lc[I_CTRL_OPT_WATER];
-    cbOptimizeAcid1.Caption := _lc[I_CTRL_OPT_ACID1];
-    cbOptimizeAcid2.Caption := _lc[I_CTRL_OPT_ACID2];
-    cbOptimizeLift.Caption := _lc[I_CTRL_OPT_LIFT];
-    cbOptimizeBlockMon.Caption := _lc[I_CTRL_OPT_BLOCKMON];
-    bBeginPanelsOptimization.Caption := _lc[I_BTN_START];
+    cbOptimizeWalls.Caption := MsgCtrlOptWall;
+    cbOptimizeForeGround.Caption := MsgCtrlOptFore;
+    cbOptimizeBackGround.Caption := MsgCtrlOptBack;
+    cbOptimizeSteps.Caption := MsgCtrlOptStair;
+    cbOptimizeWater.Caption := MsgCtrlOptWater;
+    cbOptimizeAcid1.Caption := MsgCtrlOptAcid1;
+    cbOptimizeAcid2.Caption := MsgCtrlOptAcid2;
+    cbOptimizeLift.Caption := MsgCtrlOptLift;
+    cbOptimizeBlockMon.Caption := MsgCtrlOptBlockmon;
+    bBeginPanelsOptimization.Caption := MsgBtnStart;
   end;
 
 // Форма "Параметры карты":
   with MapOptionsForm do
   begin
-    Caption := _lc[I_CAP_SETS];
+    Caption := MsgCapSets;
   // Основные параметры:
-    LabelName.Caption := _lc[I_LAB_SETS_NAME];
-    LabelDesc.Caption := _lc[I_LAB_SETS_DESC];
-    LabelAuthor.Caption := _lc[I_LAB_SETS_AUTHOR];
-    LabelBack.Caption := _lc[I_LAB_SETS_BACK];
-    LabelMusic.Caption := _lc[I_LAB_SETS_MUSIC];
+    LabelName.Caption := MsgLabSetsName;
+    LabelDesc.Caption := MsgLabSetsDesc;
+    LabelAuthor.Caption := MsgLabSetsAuthor;
+    LabelBack.Caption := MsgLabSetsBack;
+    LabelMusic.Caption := MsgLabSetsMusic;
   // Статистика:
-    GBStats.Caption := _lc[I_CTRL_SETS_STATS];
-    LabelTexs.Caption := _lc[I_LAB_SETS_TEXTURES];
-    LabelPanels.Caption := _lc[I_LAB_SETS_PANELS];
-    LabelItems.Caption := _lc[I_LAB_SETS_ITEMS];
-    LabelMonsters.Caption := _lc[I_LAB_SETS_MONSTERS];
-    LabelAreas.Caption := _lc[I_LAB_SETS_AREAS];
-    LabelTriggers.Caption := _lc[I_LAB_SETS_TRIGGERS];
+    GBStats.Caption := MsgCtrlSetsStats;
+    LabelTexs.Caption := MsgLabSetsTextures;
+    LabelPanels.Caption := MsgLabSetsPanels;
+    LabelItems.Caption := MsgLabSetsItems;
+    LabelMonsters.Caption := MsgLabSetsMonsters;
+    LabelAreas.Caption := MsgLabSetsAreas;
+    LabelTriggers.Caption := MsgLabSetsTriggers;
   // Размеры:
-    GBSizes.Caption := _lc[I_CTRL_SETS_SIZES];
-    LabelWidth.Caption := _lc[I_LAB_SETS_WIDTH];
-    LabelHeight.Caption := _lc[I_LAB_SETS_HEIGHT];
-    LabelCurSize.Caption := _lc[I_LAB_SETS_SIZES];
-    LabelMapMove.Caption := _lc[I_LAB_SETS_MAPMOVE];
-    cbSnapping.Caption := _lc[I_LAB_SETS_SNAPPING];
+    GBSizes.Caption := MsgCtrlSetsSizes;
+    LabelWidth.Caption := MsgLabSetsWidth;
+    LabelHeight.Caption := MsgLabSetsHeight;
+    LabelCurSize.Caption := MsgLabSetsSizes;
+    LabelMapMove.Caption := MsgLabSetsMapmove;
+    cbSnapping.Caption := MsgLabSetsSnapping;
   // Кнопки:
-    bOK.Caption := _lc[I_BTN_OK];
-    bCancel.Caption := _lc[I_BTN_CANCEL];
+    bOK.Caption := MsgBtnOk;
+    bCancel.Caption := MsgBtnCancel;
   end;
 
 // From "Editor settings":
   with OptionsForm do
   begin
-    Caption := _lc[I_CAP_ES];
-    bOK.Caption := _lc[I_BTN_OK];
-    bCancel.Caption := _lc[I_BTN_CANCEL];
+    Caption := MsgCapEs;
+    bOK.Caption := MsgBtnOk;
+    bCancel.Caption := MsgBtnCancel;
   // TabGeneral:
-    cbShowDots.Caption := _lc[I_CTRL_ES_GRID];
-    cbShowTexture.Caption := _lc[I_CTRL_ES_TEXTURE];
-    cbShowSize.Caption := _lc[I_CTRL_ES_PANEL_SIZE];
-    cbCheckerboard.Caption := _lc[I_CTRL_ES_CHECKERBOARD];
-    LabelGrid.Caption := _lc[I_LAB_ES_GRID];
-    LabelGridCol.Caption := _lc[I_LAB_ES_GRID_COLOR];
-    LabelGridSize.Caption := _lc[I_LAB_ES_GRID_SIZE];
-    LabelBack.Caption := _lc[I_LAB_ES_BACK];
-    LabelPreview.Caption := _lc[I_LAB_ES_PREVIEW];
-    LabelMinimap.Caption := _lc[I_LAB_ES_MINIMAP];
-    LabelLanguage.Caption := _lc[I_LAB_ES_LANGUAGE];
+    cbShowDots.Caption := MsgCtrlEsGrid;
+    cbShowTexture.Caption := MsgCtrlEsTexture;
+    cbShowSize.Caption := MsgCtrlEsPanelSize;
+    cbCheckerboard.Caption := MsgCtrlEsCheckerboard;
+    LabelGrid.Caption := MsgLabEsGrid;
+    LabelGridCol.Caption := MsgLabEsGridColor;
+    LabelGridSize.Caption := MsgLabEsGridSize;
+    LabelBack.Caption := MsgLabEsBack;
+    LabelPreview.Caption := MsgLabEsPreview;
+    LabelMinimap.Caption := MsgLabEsMinimap;
+    LabelLanguage.Caption := MsgLabEsLanguage;
   // TabFiles:
-    cbCompress.Caption := _lc[I_LAB_ES_COMPRESS];
-    cbBackup.Caption := _lc[I_LAB_ES_BACKUP];
-    LabelRecent.Caption := _lc[I_LAB_ES_RECENT];
+    cbCompress.Caption := MsgLabEsCompress;
+    cbBackup.Caption := MsgLabEsBackup;
+    LabelRecent.Caption := MsgLabEsRecent;
   // TabTesting:
-    rbDM.Caption := _lc[I_CTRL_LAUNCH_DM];
-    rbTDM.Caption := _lc[I_CTRL_LAUNCH_TDM];
-    rbCTF.Caption := _lc[I_CTRL_LAUNCH_CTF];
-    rbCOOP.Caption := _lc[I_CTRL_LAUNCH_COOP];
-    cbTwoPlayers.Caption := _lc[I_CTRL_LAUNCH_2P];
-    cbTeamDamage.Caption := _lc[I_CTRL_LAUNCH_FF];
-    cbAllowExit.Caption := _lc[I_CTRL_LAUNCH_EXIT];
-    cbWeaponStay.Caption := _lc[I_CTRL_LAUNCH_WEAPONS];
-    cbMonstersDM.Caption := _lc[I_CTRL_LAUNCH_MONSTERS];
-    cbMapOnce.Caption := _lc[I_CTRL_LAUNCH_CLOSE];
-    LabelTime.Caption := _lc[I_LAB_LAUNCH_TIME];
-    LabelSecs.Caption := _lc[I_LAB_LAUNCH_SECS];
-    LabelScore.Caption := _lc[I_LAB_LAUNCH_SCORE];
-    LabelPath.Caption := _lc[I_LAB_LAUNCH_PATH];
-    FindD2dDialog.Title := _lc[I_CTRL_LAUNCH_OPEN];
-    LabelArgs.Caption := _lc[I_LAB_LAUNCH_ARGS];
+    rbDM.Caption := MsgCtrlLaunchDm;
+    rbTDM.Caption := MsgCtrlLaunchTdm;
+    rbCTF.Caption := MsgCtrlLaunchCtf;
+    rbCOOP.Caption := MsgCtrlLaunchCoop;
+    cbTwoPlayers.Caption := MsgCtrlLaunch2p;
+    cbTeamDamage.Caption := MsgCtrlLaunchFf;
+    cbAllowExit.Caption := MsgCtrlLaunchExit;
+    cbWeaponStay.Caption := MsgCtrlLaunchWeapons;
+    cbMonstersDM.Caption := MsgCtrlLaunchMonsters;
+    cbMapOnce.Caption := MsgCtrlLaunchClose;
+    LabelTime.Caption := MsgLabLaunchTime;
+    LabelSecs.Caption := MsgLabLaunchSecs;
+    LabelScore.Caption := MsgLabLaunchScore;
+    LabelPath.Caption := MsgLabLaunchPath;
+    FindD2dDialog.Title := MsgCtrlLaunchOpen;
+    LabelArgs.Caption := MsgLabLaunchArgs;
   end;
 
 // Форма "Упаковать карту":
   with PackMapForm do
   begin
-    Caption := _lc[I_CAP_PACK];
-    bPack.Caption := _lc[I_BTN_PACK];
-    LabelSaveTo.Caption := _lc[I_LAB_PACK_SAVE_TO];
-    LabelMapName.Caption := _lc[I_LAB_PACK_MAP_NAME];
+    Caption := MsgCapPack;
+    bPack.Caption := MsgBtnPack;
+    LabelSaveTo.Caption := MsgLabPackSaveTo;
+    LabelMapName.Caption := MsgLabPackMapName;
   // Что упаковывать:
-    cbTextrures.Caption := _lc[I_CTRL_PACK_TEXTURES];
-    LabelTextures.Caption := _lc[I_LAB_PACK_TEXTURES];
-    cbSky.Caption := _lc[I_CTRL_PACK_SKY];
-    LabelSky.Caption := _lc[I_LAB_PACK_SKY];
-    cbMusic.Caption := _lc[I_CTRL_PACK_MUSIC];
-    LabelMusic.Caption := _lc[I_LAB_PACK_MUSIC];
-    cbAdd.Caption := _lc[I_CTRL_PACK_ADD];
-    cbNonStandart.Caption := _lc[I_CTRL_PACK_NON_STD];
+    cbTextrures.Caption := MsgCtrlPackTextures;
+    LabelTextures.Caption := MsgLabPackTextures;
+    cbSky.Caption := MsgCtrlPackSky;
+    LabelSky.Caption := MsgLabPackSky;
+    cbMusic.Caption := MsgCtrlPackMusic;
+    LabelMusic.Caption := MsgLabPackMusic;
+    cbAdd.Caption := MsgCtrlPackAdd;
+    cbNonStandart.Caption := MsgCtrlPackNonStd;
   end;
 
 // Форма "Сохранить карту":
   with SaveMapForm do
   begin
-    Caption := _lc[I_CAP_SAVE];
-    bOK.Caption := _lc[I_BTN_OK];
-    bCancel.Caption := _lc[I_BTN_CANCEL];
+    Caption := MsgCapSave;
+    bOK.Caption := MsgBtnOk;
+    bCancel.Caption := MsgBtnCancel;
   end;
 
 // Форма "Сохранить мини-карту":
   with SaveMiniMapForm do
   begin
-    Caption := _lc[I_CAP_MINI];
-    LabelScale.Caption := _lc[I_LAB_MINI_SCALE];
-    bSave.Caption := _lc[I_BTN_SAVE];
-    bClose.Caption := _lc[I_BTN_CLOSE];
+    Caption := MsgCapMini;
+    LabelScale.Caption := MsgLabMiniScale;
+    bSave.Caption := MsgBtnSave;
+    bClose.Caption := MsgBtnClose;
   end;
 
 // Форма "Выбор карты":
   with SelectMapForm do
   begin
-    Caption := _lc[I_CAP_SELECT];
-    bOK.Caption := _lc[I_BTN_OK];
-    bCancel.Caption := _lc[I_BTN_CANCEL];
+    Caption := MsgCapSelect;
+    bOK.Caption := MsgBtnOk;
+    bCancel.Caption := MsgBtnCancel;
   end;
 
 // Заголовок приложения:
-  Application.Title := _lc[I_EDITOR_TITLE];
-end;
-
-procedure g_Language_Load(fileName: String);
-var
-  F: TextFile;
-  key, value: String;
-  i: TStrings_Locale;
-  k: Integer;
-  ok: Boolean;
-
-begin
-// Значения по-умолчанию:
-  for i := Low(TStrings_Locale) to High(TStrings_Locale) do
-    _lc[i] := g_lang_default[i][LANGUAGE_ENGLISH_N];
-
-  if FileExists(fileName) then
-    begin
-      AssignFile(F, fileName);
-      ReSet(F);
-      k := 0;
-
-    // Читаем файл:
-      while not EoF(F) do
-      begin
-      // Читаем строку:
-        ReadLn(F, key);
-        key := Trim(key);
-
-      // Строка - ключ перевода:
-        if (key <> '') and
-           (key[1] = '[') and
-           (Pos(']', key) > 2) then
-        begin
-          key := UpperCase(Copy(key, 2, Pos(']', key)-2));
-
-        // Пропускаем пустые строки до строки - перевода:
-          value := '';
-          while (not EoF(F)) and (value = '') do
-          begin
-            ReadLn(F, value);
-            value := Trim(value);
-          end;
-
-        // Есть строка - перевод:
-          if value <> '' then
-          begin
-          // Ищем индекс ключа перевода:
-            ok := False;
-            i := TStrings_Locale(k);
-
-          // От текущего к первому:
-            while i > Low(TStrings_Locale) do
-            begin
-              if g_lang_default[i][1] = key then
-              begin
-                _lc[i] := value;
-                ok := True;
-                Break;
-              end;
-
-              Dec(i);
-            end;
-
-          // Первый:
-            if not ok then
-            begin
-              i := Low(TStrings_Locale);
-
-              if (g_lang_default[i][1] = key) then
-              begin
-                _lc[i] := value;
-                ok := True;
-              end;
-            end;
-
-          // От следующего за текущим до последнего:
-            if not ok then
-            begin
-              i := TStrings_Locale(k);
-
-              while i < High(TStrings_Locale) do
-              begin
-                Inc(i);
-
-                if g_lang_default[i][1] = key then
-                begin
-                  _lc[i] := value;
-                  Break;
-                end;
-              end;
-            end;
-          end;
-
-          Inc(k);
-        end;
-      end;
-
-      CloseFile(F);
-    end
-  else
-    e_WriteLog('Language file "'+fileName+'" not found!', MSG_WARNING);
-
-  SetupArrays();
-  SetupCaptions();
-  RemoveSelectFromObjects();
+  Application.Title := MsgEditorTitle;
 end;
 
 procedure g_Language_Set(lang: String);
-var
-  i: TStrings_Locale;
-  n: Byte;
-
+  var syslang, fallbacklang: String;
 begin
-  if lang = LANGUAGE_ENGLISH then
-    n := LANGUAGE_ENGLISH_N
-  else
-    n := LANGUAGE_RUSSIAN_N;
-
-  for i := Low(TStrings_Locale) to High(TStrings_Locale) do
-  begin
-    _lc[i] := g_lang_default[i][n];
-    // have to cache a CP1251 version for GL text
-    _glc[i] := utf8to1251(g_lang_default[i][n]);
+  e_WriteLog('g_Language_Set: requested lang is "' + lang + '"', MSG_NOTIFY);
+  GetLanguageIDs(syslang, fallbacklang);
+  if lang = '' then lang := syslang;
+
+  ResetResourceTables;
+  try
+    e_WriteLog('g_Language_Set: try language "' + lang + '"', MSG_NOTIFY);
+    TranslateResourceStrings('data/lang/editor.' + lang + '.mo');
+  except
+    try
+      e_WriteLog('g_Language_Set: try system language "' + syslang + '"', MSG_NOTIFY);
+      TranslateResourceStrings('data/lang/editor.' + syslang + '.mo');
+    except
+      try
+        e_WriteLog('g_Language_Set: try fallback language "' + fallbacklang + '"', MSG_NOTIFY);
+        TranslateResourceStrings('data/lang/editor.' + fallbacklang + '.mo');
+      except
+         e_WriteLog('g_Language_Set: use default strings', MSG_NOTIFY);
+      end;
+    end;
   end;
-
+  e_WriteLog('g_Language_Set: ok', MSG_NOTIFY);
   SetupArrays();
   SetupCaptions();
   RemoveSelectFromObjects();
 end;
 
-procedure g_Language_Dump(fileName: String);
-var
-  F: TextFile;
-  i: TStrings_Locale;
-
-begin
-  AssignFile(F, fileName);
-  ReWrite(F);
-
-  for i := Low(TStrings_Locale) to High(TStrings_Locale) do
-    WriteLn(F, _lc[i]);
-
-  CloseFile(F);
-end;
-
 End.
index 3f3b58d2e734b3d82969b930a6e7730e73a6f418..0c35d481384f5164798248af97a007c9244106b7 100644 (file)
@@ -1404,7 +1404,7 @@ begin
   NH := 0;
 
   MainForm.pbLoad.Position := 0;
-  MainForm.lLoad.Caption := _lc[I_LOAD_WAD];
+  MainForm.lLoad.Caption := MsgLoadWad;
   Application.ProcessMessages();
 
 // Читаем ресурс карты
@@ -1414,7 +1414,7 @@ begin
 
   MapReader := TMapReader_1.Create();
 
-  MainForm.lLoad.Caption := _lc[I_LOAD_MAP];
+  MainForm.lLoad.Caption := MsgLoadMap;
   Application.ProcessMessages();
 
   MapReader.LoadMap(pData);
@@ -1426,7 +1426,7 @@ begin
   begin
     MainForm.pbLoad.Position := 0;
     MainForm.pbLoad.Max := Length(textures);
-    MainForm.lLoad.Caption := _lc[I_LOAD_TEXTURES];
+    MainForm.lLoad.Caption := MsgLoadTextures;
 
     for a := 0 to High(textures) do
     begin
@@ -1488,7 +1488,7 @@ begin
   begin
     MainForm.pbLoad.Position := 0;
     MainForm.pbLoad.Max := Length(panels);
-    MainForm.lLoad.Caption := _lc[I_LOAD_PANELS];
+    MainForm.lLoad.Caption := MsgLoadPanels;
 
     for a := 0 to High(panels) do
     begin
@@ -1567,7 +1567,7 @@ begin
   begin
     MainForm.pbLoad.Position := 0;
     MainForm.pbLoad.Max := Length(items);
-    MainForm.lLoad.Caption := _lc[I_LOAD_ITEMS];
+    MainForm.lLoad.Caption := MsgLoadItems;
 
     for a := 0 to High(items) do
     begin
@@ -1591,7 +1591,7 @@ begin
   begin
     MainForm.pbLoad.Position := 0;
     MainForm.pbLoad.Max := Length(monsters);
-    MainForm.lLoad.Caption := _lc[I_LOAD_MONSTERS];
+    MainForm.lLoad.Caption := MsgLoadMonsters;
 
     for a := 0 to High(monsters) do
     begin
@@ -1614,7 +1614,7 @@ begin
   begin
     MainForm.pbLoad.Position := 0;
     MainForm.pbLoad.Max := Length(areas);
-    MainForm.lLoad.Caption := _lc[I_LOAD_AREAS];
+    MainForm.lLoad.Caption := MsgLoadAreas;
 
     for a := 0 to High(areas) do
     begin
@@ -1637,7 +1637,7 @@ begin
   begin
     MainForm.pbLoad.Position := 0;
     MainForm.pbLoad.Max := Length(triggers);
-    MainForm.lLoad.Caption := _lc[I_LOAD_TRIGGERS];
+    MainForm.lLoad.Caption := MsgLoadTriggers;
 
     for a := 0 to High(triggers) do
     begin
@@ -1713,7 +1713,7 @@ begin
 
 // Открытие карты:
   MainForm.pbLoad.Position := 0;
-  MainForm.lLoad.Caption := _lc[I_LOAD_MAP];;
+  MainForm.lLoad.Caption := MsgLoadMap;;
   Application.ProcessMessages();
 
   map := TConfig.CreateFile(_FileName);
@@ -1723,7 +1723,7 @@ begin
 
   MainForm.pbLoad.Max := i;
   MainForm.pbLoad.Position := 0;
-  MainForm.lLoad.Caption := _lc[I_LOAD_TEXTURES];
+  MainForm.lLoad.Caption := MsgLoadTextures;
 
   for a := 1 to i do
   begin
@@ -1753,7 +1753,7 @@ begin
 
   MainForm.pbLoad.Max := i;
   MainForm.pbLoad.Position := 0;
-  MainForm.lLoad.Caption := _lc[I_LOAD_PANELS];
+  MainForm.lLoad.Caption := MsgLoadPanels;
 
   for a := 1 to i do
   begin
@@ -1844,7 +1844,7 @@ begin
 
   MainForm.pbLoad.Max := i;
   MainForm.pbLoad.Position := 0;
-  MainForm.lLoad.Caption := _lc[I_LOAD_ITEMS];
+  MainForm.lLoad.Caption := MsgLoadItems;
 
   for a := 1 to i do
   begin
@@ -1874,7 +1874,7 @@ begin
 
   MainForm.pbLoad.Max := i;
   MainForm.pbLoad.Position := 0;
-  MainForm.lLoad.Caption := _lc[I_LOAD_AREAS];
+  MainForm.lLoad.Caption := MsgLoadAreas;
 
   for a := 1 to i do
   begin
index d1593e14f338a4e154fc977f723c6b1cce00e3a2..6f000d459c87bdfd188f018eb19cf4ffc0151535 100644 (file)
@@ -11,6 +11,7 @@ interface
     EditorWad: AnsiString;
     WadsDir: AnsiString;
     MapsDir: AnsiString;
+    LangDir: AnsiString;
 
 implementation
 
index fcedd73783a9c850afc8794bd5d1a351ed40ae94..f7dfe351ba29ae5a77fb711e3cc9c8ade6ced99b 100644 (file)
@@ -194,7 +194,7 @@ begin
     begin
       FBuffer.Canvas.Font.Color := clWhite;
       ARect := BoundsRect;
-      DrawText(FBuffer.Canvas.Handle, PChar(_lc[I_LAB_SPECTRUM]), -1, ARect,
+      DrawText(FBuffer.Canvas.Handle, PChar(MsgLabSpectrum), -1, ARect,
                DT_WORDBREAK or DT_NOPREFIX or DT_VCENTER or DT_CENTER);
     end;