1 /*
2 * This file is part of the Colobot: Gold Edition source code
3 * Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
4 * http://epsitec.ch; http://colobot.info; http://github.com/colobot
5 *
6 * This program is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
14 * See the GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see http://gnu.org/licenses
18 */
19
20
21 #include "common/restext.h"
22
23 #include "CBot/CBot.h"
24
25 #include "app/input.h"
26
27 #include "common/error.h"
28 #include "common/event.h"
29 #include "common/logger.h"
30 #include "common/stringutils.h"
31
32 #include "object/object_type.h"
33
34 #include <libintl.h>
35 #include <SDL_keyboard.h>
36 #include <boost/regex.hpp>
37
38 const char* stringsText[RT_MAX] = { nullptr };
39 const char* stringsEvent[EVENT_STD_MAX] = { nullptr };
40 const char* stringsObject[OBJECT_MAX] = { nullptr };
41 const char* stringsErr[ERR_MAX] = { nullptr };
42 const char* stringsCbot[CBot::CBotErrMAX] = { nullptr };
43
44 /* Macro to mark which texts are translatable by gettext
45 * It doesn't do anything at compile-time, as all texts represented here are used later
46 * in explicit call to gettext(), but it is used by xgettext executable to filter extracted
47 * texts from this file.
48 */
49 #define TR(x) x
50
51 /* Please run `cmake --build <path_to_build_folder> --target update-pot`
52 * after changing this file in order to update translation files. Thank you.
53 */
54
InitializeRestext()55 void InitializeRestext()
56 {
57 stringsText[RT_WINDOW_MAXIMIZED] = TR("Maximize");
58 stringsText[RT_WINDOW_MINIMIZED] = TR("Minimize");
59 stringsText[RT_WINDOW_STANDARD] = TR("Normal size");
60 stringsText[RT_WINDOW_CLOSE] = TR("Close");
61
62 stringsText[RT_STUDIO_TITLE] = TR("Program editor");
63 stringsText[RT_SCRIPT_NEW] = TR("New");
64 stringsText[RT_NAME_DEFAULT] = TR("Player");
65 stringsText[RT_IO_NEW] = TR("New ...");
66 stringsText[RT_KEY_OR] = TR(" or ");
67
68 stringsText[RT_TITLE_APPNAME] = TR("Colobot: Gold Edition");
69 stringsText[RT_TITLE_TRAINER] = TR("Programming exercises");
70 stringsText[RT_TITLE_DEFI] = TR("Challenges");
71 stringsText[RT_TITLE_MISSION] = TR("Missions");
72 stringsText[RT_TITLE_FREE] = TR("Free game");
73 stringsText[RT_TITLE_USER] = TR("User levels");
74 stringsText[RT_TITLE_CODE_BATTLES] = TR("Code battles");
75 stringsText[RT_TITLE_SETUP] = TR("Options");
76 stringsText[RT_TITLE_NAME] = TR("Player's name");
77 stringsText[RT_TITLE_PERSO] = TR("Customize your appearance");
78 stringsText[RT_TITLE_WRITE] = TR("Save the current mission");
79 stringsText[RT_TITLE_READ] = TR("Load a saved mission");
80 stringsText[RT_TITLE_PLUS] = TR("Missions+");
81 stringsText[RT_TITLE_MODS] = TR("Mods");
82
83 stringsText[RT_PLAY_CHAP_CHAPTERS] = TR("Chapters:");
84 stringsText[RT_PLAY_CHAP_PLANETS] = TR("Planets:");
85 stringsText[RT_PLAY_CHAP_USERLVL] = TR("Custom levels:");
86 stringsText[RT_PLAY_LIST_LEVELS] = TR("Levels in this chapter:");
87 stringsText[RT_PLAY_LIST_EXERCISES] = TR("Exercises in the chapter:");
88 stringsText[RT_PLAY_LIST_CHALLENGES] = TR("Challenges in the chapter:");
89 stringsText[RT_PLAY_LIST_MISSIONS] = TR("Missions on this planet:");
90 stringsText[RT_PLAY_LIST_FREEGAME] = TR("Free game on this planet:");
91 stringsText[RT_PLAY_RESUME] = TR("Summary:");
92
93 stringsText[RT_SETUP_MODE] = TR("Resolution:");
94 stringsText[RT_SETUP_KEY1] = TR("1) First click on the key you want to redefine.");
95 stringsText[RT_SETUP_KEY2] = TR("2) Then press the key you want to use instead.");
96
97 stringsText[RT_PERSO_FACE] = TR("Face type:");
98 stringsText[RT_PERSO_GLASSES] = TR("Eyeglasses:");
99 stringsText[RT_PERSO_HAIR] = TR("Hair color:");
100 stringsText[RT_PERSO_COMBI] = TR("Suit color:");
101 stringsText[RT_PERSO_BAND] = TR("Strip color:");
102
103 stringsText[RT_DIALOG_ABORT] = TR("Abort\\Abort the current mission");
104 stringsText[RT_DIALOG_CONTINUE] = TR("Continue\\Continue the current mission");
105 stringsText[RT_DIALOG_DELOBJ] = TR("Do you really want to destroy the selected building?");
106 stringsText[RT_DIALOG_DELGAME] = TR("Do you want to delete %s's saved games?");
107 stringsText[RT_DIALOG_YES] = TR("Yes");
108 stringsText[RT_DIALOG_NO] = TR("No");
109 stringsText[RT_DIALOG_LOADING] = TR("LOADING");
110 stringsText[RT_DIALOG_OK] = TR("OK");
111 stringsText[RT_DIALOG_NOUSRLVL_TITLE] = TR("No userlevels installed!");
112 stringsText[RT_DIALOG_NOUSRLVL_TEXT] = TR("This menu is for userlevels from mods, but you didn't install any");
113 stringsText[RT_DIALOG_OPEN_PATH_FAILED_TITLE] = TR("Could not open the file explorer!");
114 stringsText[RT_DIALOG_OPEN_PATH_FAILED_TEXT] = TR("The path %s could not be opened in a file explorer.");
115 stringsText[RT_DIALOG_OPEN_WEBSITE_FAILED_TITLE] = TR("Could not open the web browser!");
116 stringsText[RT_DIALOG_OPEN_WEBSITE_FAILED_TEXT] = TR("The address %s could not be opened in a web browser.");
117 stringsText[RT_DIALOG_CHANGES_QUESTION] = TR("There are unsaved changes. Do you want to save them before leaving?");
118
119 stringsText[RT_STUDIO_LISTTT] = TR("Keyword help(\\key cbot;)");
120 stringsText[RT_STUDIO_COMPOK] = TR("Compilation ok (0 errors)");
121 stringsText[RT_STUDIO_PROGSTOP] = TR("Program finished");
122 stringsText[RT_STUDIO_CLONED] = TR("Program cloned");
123
124 stringsText[RT_PROGRAM_READONLY] = TR("This program is read-only, clone it to edit");
125 stringsText[RT_PROGRAM_EXAMPLE] = TR("This is example code that cannot be run directly");
126
127 stringsText[RT_IO_OPEN] = TR("Open");
128 stringsText[RT_IO_SAVE] = TR("Save");
129 stringsText[RT_IO_LIST] = TR("Folder: %s");
130 stringsText[RT_IO_NAME] = TR("Name:");
131 stringsText[RT_IO_DIR] = TR("Folder:");
132 stringsText[RT_IO_PRIVATE] = TR("Private\\Private folder");
133 stringsText[RT_IO_PUBLIC] = TR("Public\\Common folder");
134 stringsText[RT_IO_REPLACE] = TR("Overwrite existing file?");
135 stringsText[RT_IO_SELECT_DIR] = TR("Select Folder");
136
137 stringsText[RT_GENERIC_DEV1] = TR("Original game developed by:");
138 stringsText[RT_GENERIC_DEV2] = TR("epsitec.com");
139 stringsText[RT_GENERIC_EDIT1] = TR("Gold Edition development by:");
140 stringsText[RT_GENERIC_EDIT2] = TR("colobot.info");
141
142 stringsText[RT_INTERFACE_REC] = TR("Recorder");
143
144 stringsText[RT_LOADING_INIT] = TR("Starting...");
145 stringsText[RT_LOADING_PROCESSING] = TR("Processing level file");
146 stringsText[RT_LOADING_LEVEL_SETTINGS] = TR("Loading basic level settings");
147 stringsText[RT_LOADING_MUSIC] = TR("Loading music");
148 stringsText[RT_LOADING_TERRAIN] = TR("Loading terrain");
149 stringsText[RT_LOADING_OBJECTS] = TR("Loading objects");
150 stringsText[RT_LOADING_OBJECTS_SAVED] = TR("Restoring saved objects");
151 stringsText[RT_LOADING_CBOT_SAVE] = TR("Restoring CBot execution state");
152 stringsText[RT_LOADING_FINISHED] = TR("Loading finished!");
153 stringsText[RT_LOADING_TERRAIN_RELIEF] = TR("Terrain relief");
154 stringsText[RT_LOADING_TERRAIN_RES] = TR("Resources");
155 stringsText[RT_LOADING_TERRAIN_TEX] = TR("Textures");
156 stringsText[RT_LOADING_TERRAIN_GEN] = TR("Generating");
157
158 stringsText[RT_SCOREBOARD_RESULTS] = TR("Results");
159 stringsText[RT_SCOREBOARD_RESULTS_TEXT]= TR("The battle has ended");
160 stringsText[RT_SCOREBOARD_RESULTS_TIME]= TR("Time: %s");
161 stringsText[RT_SCOREBOARD_RESULTS_LINE]= TR("%s: %d pts");
162
163 stringsText[RT_MOD_LIST] = TR("Mods:");
164 stringsText[RT_MOD_DETAILS] = TR("Information:");
165 stringsText[RT_MOD_SUMMARY] = TR("Description:");
166 stringsText[RT_MOD_ENABLE] = TR("Enable\\Enable the selected mod");
167 stringsText[RT_MOD_DISABLE] = TR("Disable\\Disable the selected mod");
168 stringsText[RT_MOD_UNKNOWN_AUTHOR] = TR("Unknown author");
169 stringsText[RT_MOD_AUTHOR_FIELD_NAME] = TR("by");
170 stringsText[RT_MOD_VERSION_FIELD_NAME] = TR("Version");
171 stringsText[RT_MOD_WEBSITE_FIELD_NAME] = TR("Website");
172 stringsText[RT_MOD_CHANGES_FIELD_NAME] = TR("Changes");
173 stringsText[RT_MOD_NO_SUMMARY] = TR("No description.");
174 stringsText[RT_MOD_NO_CHANGES] = TR("No changes.");
175
176 stringsEvent[EVENT_LABEL_CODE_BATTLE] = TR("Code battle");
177
178 stringsEvent[EVENT_BUTTON_OK] = TR("OK");
179 stringsEvent[EVENT_BUTTON_CANCEL] = TR("Cancel");
180 stringsEvent[EVENT_BUTTON_NEXT] = TR("Next");
181 stringsEvent[EVENT_BUTTON_PREV] = TR("Previous");
182
183 stringsEvent[EVENT_DIALOG_OK] = TR("OK");
184 stringsEvent[EVENT_DIALOG_CANCEL] = TR("Cancel");
185 stringsEvent[EVENT_DIALOG_NEWDIR] = TR("New Folder");
186
187 stringsEvent[EVENT_INTERFACE_TRAINER] = TR("Exercises\\Programming exercises");
188 stringsEvent[EVENT_INTERFACE_DEFI] = TR("Challenges\\Programming challenges");
189 stringsEvent[EVENT_INTERFACE_MISSION] = TR("Missions\\Select mission");
190 stringsEvent[EVENT_INTERFACE_FREE] = TR("Free game\\Free game without a specific goal");
191 stringsEvent[EVENT_INTERFACE_CODE_BATTLES] = TR("Code battles\\Program your robot to be the best of them all!");
192 stringsEvent[EVENT_INTERFACE_USER] = TR("Custom levels\\Levels from mods created by the users");
193 stringsEvent[EVENT_INTERFACE_SATCOM] = TR("SatCom");
194 stringsEvent[EVENT_INTERFACE_MODS] = TR("Mods\\Mod manager");
195 stringsEvent[EVENT_INTERFACE_NAME] = TR("Change player\\Change player");
196 stringsEvent[EVENT_INTERFACE_SETUP] = TR("Options\\Preferences");
197 stringsEvent[EVENT_INTERFACE_AGAIN] = TR("Restart\\Restart the mission from the beginning");
198 stringsEvent[EVENT_INTERFACE_WRITE] = TR("Save\\Save the current mission");
199 stringsEvent[EVENT_INTERFACE_READ] = TR("Load\\Load a saved mission");
200 stringsEvent[EVENT_INTERFACE_ABORT] = TR("\\Return to Colobot: Gold Edition");
201 stringsEvent[EVENT_INTERFACE_QUIT] = TR("Quit\\Quit Colobot: Gold Edition");
202 stringsEvent[EVENT_INTERFACE_BACK] = TR("<< Back \\Back to the previous screen");
203 stringsEvent[EVENT_INTERFACE_PLUS] = TR("+\\Missions with bonus content and optional challenges");
204 stringsEvent[EVENT_INTERFACE_PLAY] = TR("Play\\Start mission!");
205 stringsEvent[EVENT_INTERFACE_WORKSHOP] = TR("Workshop\\Open the workshop to search for mods");
206 stringsEvent[EVENT_INTERFACE_MODS_DIR] = TR("Open Directory\\Open the mods directory");
207 stringsEvent[EVENT_INTERFACE_MODS_APPLY] = TR("Apply\\Apply the current mod configuration");
208 stringsEvent[EVENT_INTERFACE_MOD_MOVE_UP] = TR("Up\\Move the selected mod up so it's loaded sooner (mods may overwrite files from the mods above them)");
209 stringsEvent[EVENT_INTERFACE_MOD_MOVE_DOWN] = TR("Down\\Move the selected mod down so it's loaded later (mods may overwrite files from the mods above them)");
210 stringsEvent[EVENT_INTERFACE_MODS_REFRESH] = TR("Refresh\\Refresh the list of currently installed mods");
211 stringsEvent[EVENT_INTERFACE_SETUPd] = TR("Device\\Driver and resolution settings");
212 stringsEvent[EVENT_INTERFACE_SETUPg] = TR("Graphics\\Graphics settings");
213 stringsEvent[EVENT_INTERFACE_SETUPp] = TR("Game\\Game settings");
214 stringsEvent[EVENT_INTERFACE_SETUPc] = TR("Controls\\Keyboard, joystick and mouse settings");
215 stringsEvent[EVENT_INTERFACE_SETUPs] = TR("Sound\\Music and game sound volume");
216 stringsEvent[EVENT_INTERFACE_DEVICE] = TR("Unit");
217 stringsEvent[EVENT_INTERFACE_RESOL] = TR("Resolution");
218 stringsEvent[EVENT_INTERFACE_FULL] = TR("Full screen\\Full screen or window mode");
219 stringsEvent[EVENT_INTERFACE_APPLY] = TR("Apply changes\\Activates the changed settings");
220
221 stringsEvent[EVENT_INTERFACE_DIRTY] = TR("Dust\\Dust and dirt on bots and buildings");
222 stringsEvent[EVENT_INTERFACE_FOG] = TR("Fog\\Fog");
223 stringsEvent[EVENT_INTERFACE_LIGHT] = TR("Dynamic lighting\\Mobile light sources");
224 stringsEvent[EVENT_INTERFACE_PARTI] = TR("Number of particles\\Explosions, dust, reflections, etc.");
225 stringsEvent[EVENT_INTERFACE_CLIP] = TR("Render distance\\Maximum visibility");
226 stringsEvent[EVENT_INTERFACE_PAUSE_BLUR]= TR("Pause blur\\Blur the background on the pause screen");
227 stringsEvent[EVENT_INTERFACE_RAIN] = TR("Particles in the interface\\Steam clouds and sparks in the interface");
228 stringsEvent[EVENT_INTERFACE_GLINT] = TR("Reflections on the buttons \\Shiny buttons");
229 stringsEvent[EVENT_INTERFACE_TOOLTIP] = TR("Help balloons\\Explain the function of the buttons");
230 stringsEvent[EVENT_INTERFACE_MOVIES] = TR("Film sequences\\Films before and after the missions");
231 stringsEvent[EVENT_INTERFACE_SCROLL] = TR("Camera border scrolling\\Scrolling when the mouse touches right or left border");
232 stringsEvent[EVENT_INTERFACE_INVERTX] = TR("Mouse inversion X\\Inversion of the scrolling direction on the X axis");
233 stringsEvent[EVENT_INTERFACE_INVERTY] = TR("Mouse inversion Y\\Inversion of the scrolling direction on the Y axis");
234 stringsEvent[EVENT_INTERFACE_EFFECT] = TR("Quake at explosions\\The screen shakes at explosions");
235 stringsEvent[EVENT_INTERFACE_BGPAUSE] = TR("Pause in background\\Pause the game when the window is unfocused");
236 stringsEvent[EVENT_INTERFACE_BGMUTE] = TR("Mute sounds in background\\Mute all game sounds when the window is unfocused");
237 stringsEvent[EVENT_INTERFACE_EDITMODE] = TR("Automatic indent\\When program editing");
238 stringsEvent[EVENT_INTERFACE_EDITVALUE] = TR("Big indent\\Indent 2 or 4 spaces per level defined by braces");
239 stringsEvent[EVENT_INTERFACE_SOLUCE4] = TR("Access to solutions\\Show program \"4: Solution\" in the exercises");
240 stringsEvent[EVENT_INTERFACE_BLOOD] = TR("Blood\\Display blood when the astronaut is hit");
241 stringsEvent[EVENT_INTERFACE_AUTOSAVE_ENABLE] = TR("Autosave\\Enables autosave");
242 stringsEvent[EVENT_INTERFACE_AUTOSAVE_INTERVAL] = TR("Autosave interval\\How often your game will autosave");
243 stringsEvent[EVENT_INTERFACE_AUTOSAVE_SLOTS] = TR("Autosave slots\\How many autosave slots you'll have");
244 stringsEvent[EVENT_INTERFACE_TEXTURE_FILTER] = TR("Texture filtering\\Texture filtering");
245 stringsEvent[EVENT_INTERFACE_TEXTURE_MIPMAP] = TR("Mipmap level\\Mipmap level");
246 stringsEvent[EVENT_INTERFACE_TEXTURE_ANISOTROPY]= TR("Anisotropy level\\Anisotropy level");
247 stringsEvent[EVENT_INTERFACE_MSAA] = TR("MSAA\\Multisample anti-aliasing");
248 stringsEvent[EVENT_INTERFACE_SHADOW_SPOTS] = TR("Simple shadows\\Shadows spots on the ground");
249 stringsEvent[EVENT_INTERFACE_SHADOW_MAPPING] = TR("Dynamic shadows\\Beautiful shadows!");
250 stringsEvent[EVENT_INTERFACE_SHADOW_MAPPING_QUALITY]= TR("Dynamic shadows ++\\Dynamic shadows + self shadowing");
251 stringsEvent[EVENT_INTERFACE_SHADOW_MAPPING_BUFFER] = TR("Shadow resolution\\Higher means better range and quality, but slower");
252 stringsEvent[EVENT_INTERFACE_VSYNC] = TR("Vertical Synchronization\\Limits the number of frames per second to display frequency");
253
254 stringsEvent[EVENT_INTERFACE_KDEF] = TR("Standard controls\\Standard key functions");
255 assert(INPUT_SLOT_MAX < EVENT_INTERFACE_KEY_END-EVENT_INTERFACE_KEY);
256 stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_LEFT] = TR("Turn left\\turns the bot to the left");
257 stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_RIGHT] = TR("Turn right\\turns the bot to the right");
258 stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_UP] = TR("Forward\\Moves forward");
259 stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_DOWN] = TR("Backward\\Moves backward");
260 stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_GUP] = TR("Climb\\Increases the power of the jet");
261 stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_GDOWN] = TR("Descend\\Reduces the power of the jet");
262 stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_CAMERA] = TR("Change camera\\Switches between onboard camera and following camera");
263 stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_DESEL] = TR("Previous object\\Selects the previous object");
264 stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_ACTION] = TR("Standard action\\Standard action of the bot (take/grab, shoot, sniff, etc)");
265 stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_CAM_LEFT] = TR("Camera left\\Turns the camera left");
266 stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_CAM_RIGHT] = TR("Camera right\\Turns the camera right");
267 stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_CAM_UP] = TR("Camera up\\Turns the camera up");
268 stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_CAM_DOWN] = TR("Camera down\\Turns the camera down");
269 stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_CAM_NEAR] = TR("Camera closer\\Moves the camera forward");
270 stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_CAM_AWAY] = TR("Camera back\\Moves the camera backward");
271 stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_CAM_ALT] = TR("Alternative camera mode\\Move sideways instead of rotating (in free camera)");
272 stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_NEXT] = TR("Next object\\Selects the next object");
273 stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_HUMAN] = TR("Select the astronaut\\Selects the astronaut");
274 stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_QUIT] = TR("Quit\\Quit the current mission or exercise");
275 stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_HELP] = TR("Instructions\\Shows the instructions for the current mission");
276 stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_PROG] = TR("Programming help\\Gives more detailed help with programming");
277 stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_VISIT] = TR("Origin of last message\\Shows where the last message was sent from");
278 stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_SPEED_DEC] = TR("Lower speed\\Decrease speed by half");
279 stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_SPEED_RESET] = TR("Standard speed\\Reset speed to normal");
280 stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_SPEED_INC] = TR("Higher speed\\Doubles speed");
281 stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_QUICKSAVE] = TR("Quick save\\Immediately save game");
282 stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_QUICKLOAD] = TR("Quick load\\Immediately load game");
283 stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_PAUSE] = TR("Pause\\Pause the game without opening menu");
284 stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_CMDLINE] = TR("Cheat console\\Show cheat console");
285
286 stringsEvent[EVENT_INTERFACE_VOLSOUND] = TR("Sound effects:\\Volume of engines, voice, shooting, etc.");
287 stringsEvent[EVENT_INTERFACE_VOLMUSIC] = TR("Background sound:\\Volume of audio tracks");
288
289 stringsEvent[EVENT_INTERFACE_MIN] = TR("Lowest\\Minimum graphic quality (highest frame rate)");
290 stringsEvent[EVENT_INTERFACE_NORM] = TR("Normal\\Normal graphic quality");
291 stringsEvent[EVENT_INTERFACE_MAX] = TR("Highest\\Highest graphic quality (lowest frame rate)");
292
293 stringsEvent[EVENT_INTERFACE_SILENT] = TR("Mute\\No sound");
294 stringsEvent[EVENT_INTERFACE_NOISY] = TR("Normal\\Normal sound volume");
295
296 stringsEvent[EVENT_INTERFACE_SOLUCE] = TR("Access to solution\\Shows the solution (detailed instructions for missions)");
297 stringsEvent[EVENT_INTERFACE_JOYSTICK_X_INVERT] = TR("Invert\\Invert values on this axis");
298 stringsEvent[EVENT_INTERFACE_JOYSTICK_Y_INVERT] = TR("Invert\\Invert values on this axis");
299 stringsEvent[EVENT_INTERFACE_JOYSTICK_Z_INVERT] = TR("Invert\\Invert values on this axis");
300 stringsEvent[EVENT_INTERFACE_JOYSTICK_CAM_X_INVERT] = TR("Invert\\Invert values on this axis");
301 stringsEvent[EVENT_INTERFACE_JOYSTICK_CAM_Y_INVERT] = TR("Invert\\Invert values on this axis");
302 stringsEvent[EVENT_INTERFACE_JOYSTICK_CAM_Z_INVERT] = TR("Invert\\Invert values on this axis");
303
304 stringsEvent[EVENT_INTERFACE_PLUS_TRAINER] = TR("Space Programmer\\Disables radio-control");
305 stringsEvent[EVENT_INTERFACE_PLUS_RESEARCH] = TR("Space Researcher\\Disables using all previously researched technologies");
306 stringsEvent[EVENT_INTERFACE_PLUS_EXPLORER] = TR("Space Explorer\\Disables astronaut abilities");
307
308 stringsEvent[EVENT_INTERFACE_NEDIT] = TR("\\New player name");
309 stringsEvent[EVENT_INTERFACE_NOK] = TR("OK\\Choose the selected player");
310 stringsEvent[EVENT_INTERFACE_NDELETE] = TR("Delete player\\Deletes the player from the list");
311 stringsEvent[EVENT_INTERFACE_NLABEL] = TR("Player name");
312
313 stringsEvent[EVENT_INTERFACE_IOWRITE] = TR("Save\\Saves the current mission");
314 stringsEvent[EVENT_INTERFACE_IOREAD] = TR("Load\\Loads the selected mission");
315 stringsEvent[EVENT_INTERFACE_IOLIST] = TR("List of saved missions");
316 stringsEvent[EVENT_INTERFACE_IOLABEL] = TR("Filename:");
317 stringsEvent[EVENT_INTERFACE_IONAME] = TR("Mission name");
318 stringsEvent[EVENT_INTERFACE_IOIMAGE] = TR("Photography");
319 stringsEvent[EVENT_INTERFACE_IODELETE] = TR("Delete\\Deletes the selected file");
320
321 stringsEvent[EVENT_INTERFACE_PERSO] = TR("Appearance\\Choose your appearance");
322 stringsEvent[EVENT_INTERFACE_POK] = TR("OK");
323 stringsEvent[EVENT_INTERFACE_PCANCEL] = TR("Cancel");
324 stringsEvent[EVENT_INTERFACE_PDEF] = TR("Standard\\Standard appearance settings");
325 stringsEvent[EVENT_INTERFACE_PHEAD] = TR("Head\\Face and hair");
326 stringsEvent[EVENT_INTERFACE_PBODY] = TR("Suit\\Astronaut suit");
327 stringsEvent[EVENT_INTERFACE_PLROT] = TR("\\Turn left");
328 stringsEvent[EVENT_INTERFACE_PRROT] = TR("\\Turn right");
329 stringsEvent[EVENT_INTERFACE_PCRa] = TR("Red");
330 stringsEvent[EVENT_INTERFACE_PCGa] = TR("Green");
331 stringsEvent[EVENT_INTERFACE_PCBa] = TR("Blue");
332 stringsEvent[EVENT_INTERFACE_PCRb] = TR("Red");
333 stringsEvent[EVENT_INTERFACE_PCGb] = TR("Green");
334 stringsEvent[EVENT_INTERFACE_PCBb] = TR("Blue");
335 stringsEvent[EVENT_INTERFACE_PFACE1] = TR("\\Face 1");
336 stringsEvent[EVENT_INTERFACE_PFACE2] = TR("\\Face 2");
337 stringsEvent[EVENT_INTERFACE_PFACE3] = TR("\\Face 3");
338 stringsEvent[EVENT_INTERFACE_PFACE4] = TR("\\Face 4");
339 stringsEvent[EVENT_INTERFACE_PGLASS0] = TR("\\No eyeglasses");
340 stringsEvent[EVENT_INTERFACE_PGLASS1] = TR("\\Eyeglasses 1");
341 stringsEvent[EVENT_INTERFACE_PGLASS2] = TR("\\Eyeglasses 2");
342 stringsEvent[EVENT_INTERFACE_PGLASS3] = TR("\\Eyeglasses 3");
343 stringsEvent[EVENT_INTERFACE_PGLASS4] = TR("\\Eyeglasses 4");
344 stringsEvent[EVENT_INTERFACE_PGLASS5] = TR("\\Eyeglasses 5");
345
346 stringsEvent[EVENT_OBJECT_DESELECT] = TR("Previous selection (\\key desel;)");
347 stringsEvent[EVENT_OBJECT_LEFT] = TR("Turn left (\\key left;)");
348 stringsEvent[EVENT_OBJECT_RIGHT] = TR("Turn right (\\key right;)");
349 stringsEvent[EVENT_OBJECT_UP] = TR("Forward (\\key up;)");
350 stringsEvent[EVENT_OBJECT_DOWN] = TR("Backward (\\key down;)");
351 stringsEvent[EVENT_OBJECT_GASUP] = TR("Up (\\key gup;)");
352 stringsEvent[EVENT_OBJECT_GASDOWN] = TR("Down (\\key gdown;)");
353 stringsEvent[EVENT_OBJECT_HTAKE] = TR("Grab or drop (\\key action;)");
354 stringsEvent[EVENT_OBJECT_MTAKE] = TR("Grab or drop (\\key action;)");
355 stringsEvent[EVENT_OBJECT_MFRONT] = TR("..in front");
356 stringsEvent[EVENT_OBJECT_MBACK] = TR("..behind");
357 stringsEvent[EVENT_OBJECT_MPOWER] = TR("..power cell");
358 stringsEvent[EVENT_OBJECT_BHELP] = TR("Instructions for the mission (\\key help;)");
359 stringsEvent[EVENT_OBJECT_BTAKEOFF] = TR("Take off to finish the mission");
360 stringsEvent[EVENT_OBJECT_BDESTROY] = TR("Destroy");
361 stringsEvent[EVENT_OBJECT_BDERRICK] = TR("Build a derrick");
362 stringsEvent[EVENT_OBJECT_BSTATION] = TR("Build a power station");
363 stringsEvent[EVENT_OBJECT_BFACTORY] = TR("Build a bot factory");
364 stringsEvent[EVENT_OBJECT_BREPAIR] = TR("Build a repair center");
365 stringsEvent[EVENT_OBJECT_BCONVERT] = TR("Build a converter");
366 stringsEvent[EVENT_OBJECT_BTOWER] = TR("Build a defense tower");
367 stringsEvent[EVENT_OBJECT_BRESEARCH] = TR("Build a research center");
368 stringsEvent[EVENT_OBJECT_BRADAR] = TR("Build a radar station");
369 stringsEvent[EVENT_OBJECT_BENERGY] = TR("Build a power cell factory");
370 stringsEvent[EVENT_OBJECT_BLABO] = TR("Build an autolab");
371 stringsEvent[EVENT_OBJECT_BNUCLEAR] = TR("Build a nuclear power plant");
372 stringsEvent[EVENT_OBJECT_BPARA] = TR("Build a lightning conductor");
373 stringsEvent[EVENT_OBJECT_BINFO] = TR("Build a exchange post");
374 stringsEvent[EVENT_OBJECT_BSAFE] = TR("Build a vault");
375 stringsEvent[EVENT_OBJECT_GFLAT] = TR("Show if the ground is flat");
376 stringsEvent[EVENT_OBJECT_FCREATE] = TR("Plant a flag");
377 stringsEvent[EVENT_OBJECT_FDELETE] = TR("Remove a flag");
378 stringsEvent[EVENT_OBJECT_FCOLORb] = TR("\\Blue flags");
379 stringsEvent[EVENT_OBJECT_FCOLORr] = TR("\\Red flags");
380 stringsEvent[EVENT_OBJECT_FCOLORg] = TR("\\Green flags");
381 stringsEvent[EVENT_OBJECT_FCOLORy] = TR("\\Yellow flags");
382 stringsEvent[EVENT_OBJECT_FCOLORv] = TR("\\Violet flags");
383 stringsEvent[EVENT_OBJECT_FACTORYfa] = TR("Build a winged grabber");
384 stringsEvent[EVENT_OBJECT_FACTORYta] = TR("Build a tracked grabber");
385 stringsEvent[EVENT_OBJECT_FACTORYwa] = TR("Build a wheeled grabber");
386 stringsEvent[EVENT_OBJECT_FACTORYia] = TR("Build a legged grabber");
387 stringsEvent[EVENT_OBJECT_FACTORYfc] = TR("Build a winged shooter");
388 stringsEvent[EVENT_OBJECT_FACTORYtc] = TR("Build a tracked shooter");
389 stringsEvent[EVENT_OBJECT_FACTORYwc] = TR("Build a wheeled shooter");
390 stringsEvent[EVENT_OBJECT_FACTORYic] = TR("Build a legged shooter");
391 stringsEvent[EVENT_OBJECT_FACTORYfi] = TR("Build a winged orga shooter");
392 stringsEvent[EVENT_OBJECT_FACTORYti] = TR("Build a tracked orga shooter");
393 stringsEvent[EVENT_OBJECT_FACTORYwi] = TR("Build a wheeled orga shooter");
394 stringsEvent[EVENT_OBJECT_FACTORYii] = TR("Build a legged orga shooter");
395 stringsEvent[EVENT_OBJECT_FACTORYfs] = TR("Build a winged sniffer");
396 stringsEvent[EVENT_OBJECT_FACTORYts] = TR("Build a tracked sniffer");
397 stringsEvent[EVENT_OBJECT_FACTORYws] = TR("Build a wheeled sniffer");
398 stringsEvent[EVENT_OBJECT_FACTORYis] = TR("Build a legged sniffer");
399 stringsEvent[EVENT_OBJECT_FACTORYfb] = TR("Build a winged builder");
400 stringsEvent[EVENT_OBJECT_FACTORYtb] = TR("Build a tracked builder");
401 stringsEvent[EVENT_OBJECT_FACTORYwb] = TR("Build a wheeled builder");
402 stringsEvent[EVENT_OBJECT_FACTORYib] = TR("Build a legged builder");
403 stringsEvent[EVENT_OBJECT_FACTORYrt] = TR("Build a thumper");
404 stringsEvent[EVENT_OBJECT_FACTORYrc] = TR("Build a phazer shooter");
405 stringsEvent[EVENT_OBJECT_FACTORYrr] = TR("Build a recycler");
406 stringsEvent[EVENT_OBJECT_FACTORYrs] = TR("Build a shielder");
407 stringsEvent[EVENT_OBJECT_FACTORYsa] = TR("Build a subber");
408 stringsEvent[EVENT_OBJECT_FACTORYtg] = TR("Build a target bot");
409 stringsEvent[EVENT_OBJECT_RTANK] = TR("Run research program for tracked bots");
410 stringsEvent[EVENT_OBJECT_RFLY] = TR("Run research program for winged bots");
411 stringsEvent[EVENT_OBJECT_RTHUMP] = TR("Run research program for thumper");
412 stringsEvent[EVENT_OBJECT_RCANON] = TR("Run research program for shooter");
413 stringsEvent[EVENT_OBJECT_RTOWER] = TR("Run research program for defense tower");
414 stringsEvent[EVENT_OBJECT_RPHAZER] = TR("Run research program for phazer shooter");
415 stringsEvent[EVENT_OBJECT_RSHIELD] = TR("Run research program for shielder");
416 stringsEvent[EVENT_OBJECT_RATOMIC] = TR("Run research program for nuclear power");
417 stringsEvent[EVENT_OBJECT_RiPAW] = TR("Run research program for legged bots");
418 stringsEvent[EVENT_OBJECT_RiGUN] = TR("Run research program for orga shooter");
419 stringsEvent[EVENT_OBJECT_RBUILDER] = TR("Run research program for builder");
420 stringsEvent[EVENT_OBJECT_RTARGET] = TR("Run research program for target bot");
421 stringsEvent[EVENT_OBJECT_RESET] = TR("Return to start");
422 stringsEvent[EVENT_OBJECT_SEARCH] = TR("Sniff (\\key action;)");
423 stringsEvent[EVENT_OBJECT_TERRAFORM] = TR("Thump (\\key action;)");
424 stringsEvent[EVENT_OBJECT_FIRE] = TR("Shoot (\\key action;)");
425 stringsEvent[EVENT_OBJECT_SPIDEREXPLO] = TR("Explode (\\key action;)");
426 stringsEvent[EVENT_OBJECT_BUILD] = TR("Build (\\key action;)");
427 stringsEvent[EVENT_OBJECT_RECOVER] = TR("Recycle (\\key action;)");
428 stringsEvent[EVENT_OBJECT_BEGSHIELD] = TR("Extend shield (\\key action;)");
429 stringsEvent[EVENT_OBJECT_ENDSHIELD] = TR("Withdraw shield (\\key action;)");
430 stringsEvent[EVENT_OBJECT_DIMSHIELD] = TR("Shield radius");
431 stringsEvent[EVENT_OBJECT_DELSEARCH] = TR("Delete mark");
432 stringsEvent[EVENT_OBJECT_PROGRUN] = TR("Execute the selected program");
433 stringsEvent[EVENT_OBJECT_PROGEDIT] = TR("Edit the selected program");
434 stringsEvent[EVENT_OBJECT_PROGADD] = TR("Add new program");
435 stringsEvent[EVENT_OBJECT_PROGREMOVE] = TR("Remove selected program");
436 stringsEvent[EVENT_OBJECT_PROGCLONE] = TR("Clone selected program");
437 stringsEvent[EVENT_OBJECT_PROGMOVEUP] = TR("Move selected program up");
438 stringsEvent[EVENT_OBJECT_PROGMOVEDOWN] = TR("Move selected program down");
439 stringsEvent[EVENT_OBJECT_INFOOK] = TR("\\SatCom on standby");
440 stringsEvent[EVENT_OBJECT_DELETE] = TR("Destroy the building");
441 stringsEvent[EVENT_OBJECT_GENERGY] = TR("Energy level");
442 stringsEvent[EVENT_OBJECT_GSHIELD] = TR("Shield level");
443 stringsEvent[EVENT_OBJECT_GRANGE] = TR("Jet temperature");
444 stringsEvent[EVENT_OBJECT_GPROGRESS] = TR("Still working ...");
445 stringsEvent[EVENT_OBJECT_GRADAR] = TR("Number of insects detected");
446 stringsEvent[EVENT_OBJECT_GINFO] = TR("Transmitted information");
447 stringsEvent[EVENT_OBJECT_MAPZOOM] = TR("Zoom mini-map");
448 stringsEvent[EVENT_OBJECT_CAMERA] = TR("Camera (\\key camera;)");
449 stringsEvent[EVENT_OBJECT_HELP] = TR("Help about selected object");
450 stringsEvent[EVENT_OBJECT_SOLUCE] = TR("Show the solution");
451 stringsEvent[EVENT_OBJECT_SHORTCUT_MODE]= TR("Switch bots <-> buildings");
452 stringsEvent[EVENT_OBJECT_LIMIT] = TR("Show the range");
453 stringsEvent[EVENT_OBJECT_PEN0] = TR("\\Raise the pencil");
454 stringsEvent[EVENT_OBJECT_PEN1] = TR("\\Use the black pencil");
455 stringsEvent[EVENT_OBJECT_PEN2] = TR("\\Use the yellow pencil");
456 stringsEvent[EVENT_OBJECT_PEN3] = TR("\\Use the orange pencil");
457 stringsEvent[EVENT_OBJECT_PEN4] = TR("\\Use the red pencil");
458 stringsEvent[EVENT_OBJECT_PEN5] = TR("\\Use the purple pencil");
459 stringsEvent[EVENT_OBJECT_PEN6] = TR("\\Use the blue pencil");
460 stringsEvent[EVENT_OBJECT_PEN7] = TR("\\Use the green pencil");
461 stringsEvent[EVENT_OBJECT_PEN8] = TR("\\Use the brown pencil");
462 stringsEvent[EVENT_OBJECT_REC] = TR("\\Start recording");
463 stringsEvent[EVENT_OBJECT_STOP] = TR("\\Stop recording");
464 stringsEvent[EVENT_DT_VISIT0] = TR("Show the place");
465 stringsEvent[EVENT_DT_VISIT1] = TR("Show the place");
466 stringsEvent[EVENT_DT_VISIT2] = TR("Show the place");
467 stringsEvent[EVENT_DT_VISIT3] = TR("Show the place");
468 stringsEvent[EVENT_DT_VISIT4] = TR("Show the place");
469 stringsEvent[EVENT_DT_END] = TR("Continue");
470 stringsEvent[EVENT_CMD] = TR("Command line");
471 stringsEvent[EVENT_SPEED] = TR("Game speed");
472
473 stringsEvent[EVENT_HYPER_PREV] = TR("Back");
474 stringsEvent[EVENT_HYPER_NEXT] = TR("Forward");
475 stringsEvent[EVENT_HYPER_HOME] = TR("Home");
476 stringsEvent[EVENT_HYPER_COPY] = TR("Copy");
477 stringsEvent[EVENT_HYPER_SIZE1] = TR("Size 1");
478 stringsEvent[EVENT_HYPER_SIZE2] = TR("Size 2");
479 stringsEvent[EVENT_HYPER_SIZE3] = TR("Size 3");
480 stringsEvent[EVENT_HYPER_SIZE4] = TR("Size 4");
481 stringsEvent[EVENT_HYPER_SIZE5] = TR("Size 5");
482 stringsEvent[EVENT_SATCOM_HUSTON] = TR("Instructions from Houston");
483 stringsEvent[EVENT_SATCOM_SAT] = TR("Satellite report");
484 stringsEvent[EVENT_SATCOM_LOADING] = TR("Programs dispatched by Houston");
485 stringsEvent[EVENT_SATCOM_OBJECT] = TR("List of objects");
486 stringsEvent[EVENT_SATCOM_PROG] = TR("Programming help");
487 stringsEvent[EVENT_SATCOM_SOLUCE] = TR("Solution");
488
489 stringsEvent[EVENT_STUDIO_OK] = TR("OK\\Close program editor and return to game");
490 stringsEvent[EVENT_STUDIO_CANCEL] = TR("Cancel\\Cancel all changes");
491 stringsEvent[EVENT_STUDIO_CLONE] = TR("Clone program");
492 stringsEvent[EVENT_STUDIO_NEW] = TR("New");
493 stringsEvent[EVENT_STUDIO_OPEN] = TR("Open (Ctrl+O)");
494 stringsEvent[EVENT_STUDIO_SAVE] = TR("Save (Ctrl+S)");
495 stringsEvent[EVENT_STUDIO_UNDO] = TR("Undo (Ctrl+Z)");
496 stringsEvent[EVENT_STUDIO_CUT] = TR("Cut (Ctrl+X)");
497 stringsEvent[EVENT_STUDIO_COPY] = TR("Copy (Ctrl+C)");
498 stringsEvent[EVENT_STUDIO_PASTE] = TR("Paste (Ctrl+V)");
499 stringsEvent[EVENT_STUDIO_SIZE] = TR("Font size");
500 stringsEvent[EVENT_STUDIO_TOOL] = TR("Instructions (\\key help;)");
501 stringsEvent[EVENT_STUDIO_HELP] = TR("Programming help (\\key prog;)");
502 stringsEvent[EVENT_STUDIO_COMPILE] = TR("Compile");
503 stringsEvent[EVENT_STUDIO_RUN] = TR("Execute/stop");
504 stringsEvent[EVENT_STUDIO_REALTIME] = TR("Pause/continue");
505 stringsEvent[EVENT_STUDIO_STEP] = TR("One step");
506
507
508
509 stringsObject[OBJECT_PORTICO] = TR("Gantry crane");
510 stringsObject[OBJECT_BASE] = TR("Spaceship");
511 stringsObject[OBJECT_DERRICK] = TR("Derrick");
512 stringsObject[OBJECT_FACTORY] = TR("Bot factory");
513 stringsObject[OBJECT_REPAIR] = TR("Repair center");
514 stringsObject[OBJECT_DESTROYER] = TR("Destroyer");
515 stringsObject[OBJECT_STATION] = TR("Power station");
516 stringsObject[OBJECT_CONVERT] = TR("Converts ore to titanium");
517 stringsObject[OBJECT_TOWER] = TR("Defense tower");
518 stringsObject[OBJECT_NEST] = TR("Nest");
519 stringsObject[OBJECT_RESEARCH] = TR("Research center");
520 stringsObject[OBJECT_RADAR] = TR("Radar station");
521 stringsObject[OBJECT_INFO] = TR("Information exchange post");
522 stringsObject[OBJECT_ENERGY] = TR("Power cell factory");
523 stringsObject[OBJECT_LABO] = TR("Autolab");
524 stringsObject[OBJECT_NUCLEAR] = TR("Nuclear power station");
525 stringsObject[OBJECT_PARA] = TR("Lightning conductor");
526 stringsObject[OBJECT_SAFE] = TR("Vault");
527 stringsObject[OBJECT_HUSTON] = TR("Houston Mission Control");
528 stringsObject[OBJECT_TARGET1] = TR("Target");
529 stringsObject[OBJECT_TARGET2] = TR("Target");
530 stringsObject[OBJECT_START] = TR("Start");
531 stringsObject[OBJECT_END] = TR("Finish");
532 stringsObject[OBJECT_STONE] = TR("Titanium ore");
533 stringsObject[OBJECT_URANIUM] = TR("Uranium ore");
534 stringsObject[OBJECT_BULLET] = TR("Organic matter");
535 stringsObject[OBJECT_METAL] = TR("Titanium");
536 stringsObject[OBJECT_POWER] = TR("Power cell");
537 stringsObject[OBJECT_ATOMIC] = TR("Nuclear power cell");
538 stringsObject[OBJECT_BBOX] = TR("Black box");
539 stringsObject[OBJECT_KEYa] = TR("Key A");
540 stringsObject[OBJECT_KEYb] = TR("Key B");
541 stringsObject[OBJECT_KEYc] = TR("Key C");
542 stringsObject[OBJECT_KEYd] = TR("Key D");
543 stringsObject[OBJECT_TNT] = TR("Explosive");
544 stringsObject[OBJECT_BOMB] = TR("Fixed mine");
545 stringsObject[OBJECT_BAG] = TR("Survival kit");
546 stringsObject[OBJECT_WAYPOINT] = TR("Checkpoint");
547 stringsObject[OBJECT_FLAGb] = TR("Blue flag");
548 stringsObject[OBJECT_FLAGr] = TR("Red flag");
549 stringsObject[OBJECT_FLAGg] = TR("Green flag");
550 stringsObject[OBJECT_FLAGy] = TR("Yellow flag");
551 stringsObject[OBJECT_FLAGv] = TR("Violet flag");
552 stringsObject[OBJECT_MARKPOWER] = TR("Energy deposit (site for power station)");
553 stringsObject[OBJECT_MARKURANIUM] = TR("Uranium deposit (site for derrick)");
554 stringsObject[OBJECT_MARKKEYa] = TR("Found key A (site for derrick)");
555 stringsObject[OBJECT_MARKKEYb] = TR("Found key B (site for derrick)");
556 stringsObject[OBJECT_MARKKEYc] = TR("Found key C (site for derrick)");
557 stringsObject[OBJECT_MARKKEYd] = TR("Found key D (site for derrick)");
558 stringsObject[OBJECT_MARKSTONE] = TR("Titanium deposit (site for derrick)");
559 stringsObject[OBJECT_MOBILEft] = TR("Practice bot");
560 stringsObject[OBJECT_MOBILEtt] = TR("Practice bot");
561 stringsObject[OBJECT_MOBILEwt] = TR("Practice bot");
562 stringsObject[OBJECT_MOBILEit] = TR("Practice bot");
563 stringsObject[OBJECT_MOBILErp] = TR("Practice bot");
564 stringsObject[OBJECT_MOBILEst] = TR("Practice bot");
565 stringsObject[OBJECT_MOBILEfa] = TR("Winged grabber");
566 stringsObject[OBJECT_MOBILEta] = TR("Tracked grabber");
567 stringsObject[OBJECT_MOBILEwa] = TR("Wheeled grabber");
568 stringsObject[OBJECT_MOBILEia] = TR("Legged grabber");
569 stringsObject[OBJECT_MOBILEfb] = TR("Winged builder");
570 stringsObject[OBJECT_MOBILEtb] = TR("Tracked builder");
571 stringsObject[OBJECT_MOBILEwb] = TR("Wheeled builder");
572 stringsObject[OBJECT_MOBILEib] = TR("Legged builder");
573 stringsObject[OBJECT_MOBILEfc] = TR("Winged shooter");
574 stringsObject[OBJECT_MOBILEtc] = TR("Tracked shooter");
575 stringsObject[OBJECT_MOBILEwc] = TR("Wheeled shooter");
576 stringsObject[OBJECT_MOBILEic] = TR("Legged shooter");
577 stringsObject[OBJECT_MOBILEfi] = TR("Winged orga shooter");
578 stringsObject[OBJECT_MOBILEti] = TR("Tracked orga shooter");
579 stringsObject[OBJECT_MOBILEwi] = TR("Wheeled orga shooter");
580 stringsObject[OBJECT_MOBILEii] = TR("Legged orga shooter");
581 stringsObject[OBJECT_MOBILEfs] = TR("Winged sniffer");
582 stringsObject[OBJECT_MOBILEts] = TR("Tracked sniffer");
583 stringsObject[OBJECT_MOBILEws] = TR("Wheeled sniffer");
584 stringsObject[OBJECT_MOBILEis] = TR("Legged sniffer");
585 stringsObject[OBJECT_MOBILErt] = TR("Thumper");
586 stringsObject[OBJECT_MOBILErc] = TR("Phazer shooter");
587 stringsObject[OBJECT_MOBILErr] = TR("Recycler");
588 stringsObject[OBJECT_MOBILErs] = TR("Shielder");
589 stringsObject[OBJECT_MOBILEsa] = TR("Subber");
590 stringsObject[OBJECT_MOBILEtg] = TR("Target bot");
591 stringsObject[OBJECT_MOBILEdr] = TR("Drawer bot");
592 stringsObject[OBJECT_TECH] = TR("Engineer");
593 stringsObject[OBJECT_TOTO] = TR("Robbie");
594 stringsObject[OBJECT_MOTHER] = TR("Alien Queen");
595 stringsObject[OBJECT_ANT] = TR("Ant");
596 stringsObject[OBJECT_SPIDER] = TR("Spider");
597 stringsObject[OBJECT_BEE] = TR("Wasp");
598 stringsObject[OBJECT_WORM] = TR("Worm");
599 stringsObject[OBJECT_EGG] = TR("Egg");
600 stringsObject[OBJECT_RUINmobilew1] = TR("Wreckage");
601 stringsObject[OBJECT_RUINmobilew2] = TR("Wreckage");
602 stringsObject[OBJECT_RUINmobilet1] = TR("Wreckage");
603 stringsObject[OBJECT_RUINmobilet2] = TR("Wreckage");
604 stringsObject[OBJECT_RUINmobiler1] = TR("Wreckage");
605 stringsObject[OBJECT_RUINmobiler2] = TR("Wreckage");
606 stringsObject[OBJECT_RUINfactory] = TR("Ruin");
607 stringsObject[OBJECT_RUINdoor] = TR("Ruin");
608 stringsObject[OBJECT_RUINsupport] = TR("Waste");
609 stringsObject[OBJECT_RUINradar] = TR("Ruin");
610 stringsObject[OBJECT_RUINconvert] = TR("Ruin");
611 stringsObject[OBJECT_RUINbase] = TR("Spaceship ruin");
612 stringsObject[OBJECT_RUINhead] = TR("Spaceship ruin");
613 stringsObject[OBJECT_APOLLO1] = TR("Remains of Apollo mission");
614 stringsObject[OBJECT_APOLLO3] = TR("Remains of Apollo mission");
615 stringsObject[OBJECT_APOLLO4] = TR("Remains of Apollo mission");
616 stringsObject[OBJECT_APOLLO5] = TR("Remains of Apollo mission");
617 stringsObject[OBJECT_APOLLO2] = TR("Lunar Roving Vehicle");
618
619
620
621 stringsErr[ERR_UNKNOWN] = TR("Internal error - tell the developers");
622 stringsErr[ERR_CMD] = TR("Unknown command");
623 stringsErr[ERR_OBJ_BUSY] = TR("This object is currently busy");
624 stringsErr[ERR_MANIP_FLY] = TR("Impossible when flying");
625 stringsErr[ERR_MANIP_BUSY] = TR("Already carrying something");
626 stringsErr[ERR_MANIP_NIL] = TR("Nothing to grab");
627 stringsErr[ERR_MANIP_MOTOR] = TR("Impossible when moving");
628 stringsErr[ERR_MANIP_OCC] = TR("Place occupied");
629 stringsErr[ERR_MANIP_RADIO] = TR("You can not carry a radioactive object");
630 stringsErr[ERR_MANIP_WATER] = TR("You can not carry an object under water");
631 stringsErr[ERR_MANIP_EMPTY] = TR("Nothing to drop");
632 stringsErr[ERR_BUILD_FLY] = TR("Impossible when flying");
633 stringsErr[ERR_BUILD_WATER] = TR("Impossible under water");
634 stringsErr[ERR_BUILD_METALAWAY] = TR("Titanium too far away");
635 stringsErr[ERR_BUILD_METALNEAR] = TR("Titanium too close");
636 stringsErr[ERR_BUILD_METALINEX] = TR("No titanium around");
637 stringsErr[ERR_BUILD_FLAT] = TR("Ground not flat enough");
638 stringsErr[ERR_BUILD_FLATLIT] = TR("Flat ground not large enough");
639 stringsErr[ERR_BUILD_BUSY] = TR("Place occupied");
640 stringsErr[ERR_BUILD_BASE] = TR("Too close to space ship");
641 stringsErr[ERR_BUILD_NARROW] = TR("Too close to a building");
642 stringsErr[ERR_BUILD_MOTOR] = TR("Impossible when moving");
643 stringsErr[ERR_SEARCH_FLY] = TR("Impossible when flying");
644 stringsErr[ERR_BUILD_DISABLED] = TR("Can not produce this object in this mission");
645 stringsErr[ERR_BUILD_RESEARCH] = TR("Can not produce not researched object");
646 stringsErr[ERR_SEARCH_MOTOR] = TR("Impossible when moving");
647 stringsErr[ERR_TERRA_ENERGY] = TR("Not enough energy");
648 stringsErr[ERR_RECOVER_ENERGY] = TR("Not enough energy");
649 stringsErr[ERR_RECOVER_NULL] = TR("Nothing to recycle");
650 stringsErr[ERR_SHIELD_ENERGY] = TR("No more energy");
651 stringsErr[ERR_MOVE_IMPOSSIBLE] = TR("Error in instruction move");
652 stringsErr[ERR_GOTO_IMPOSSIBLE] = TR("Goto: inaccessible destination");
653 stringsErr[ERR_GOTO_ITER] = TR("Goto: inaccessible destination");
654 stringsErr[ERR_GOTO_BUSY] = TR("Goto: destination occupied");
655 stringsErr[ERR_FIRE_ENERGY] = TR("Not enough energy");
656 stringsErr[ERR_CONVERT_EMPTY] = TR("No titanium ore to convert");
657 stringsErr[ERR_DERRICK_NULL] = TR("No ore in the subsoil");
658 stringsErr[ERR_STATION_NULL] = TR("No energy in the subsoil");
659 stringsErr[ERR_TOWER_POWER] = TR("No power cell");
660 stringsErr[ERR_TOWER_ENERGY] = TR("No more energy");
661 stringsErr[ERR_RESEARCH_POWER] = TR("No power cell");
662 stringsErr[ERR_RESEARCH_ENERGY] = TR("Not enough energy");
663 stringsErr[ERR_RESEARCH_TYPE] = TR("Inappropriate cell type");
664 stringsErr[ERR_RESEARCH_ALREADY]= TR("Research program already performed");
665 stringsErr[ERR_ENERGY_NULL] = TR("No energy in the subsoil");
666 stringsErr[ERR_ENERGY_LOW] = TR("Not enough energy yet");
667 stringsErr[ERR_ENERGY_EMPTY] = TR("No titanium to transform");
668 stringsErr[ERR_ENERGY_BAD] = TR("Transforms only titanium");
669 stringsErr[ERR_BASE_DLOCK] = TR("Doors blocked by a robot or another object");
670 stringsErr[ERR_BASE_DHUMAN] = TR("You must get on the spaceship to take off");
671 stringsErr[ERR_LABO_NULL] = TR("Nothing to analyze");
672 stringsErr[ERR_LABO_BAD] = TR("Inappropriate sample");
673 stringsErr[ERR_LABO_ALREADY] = TR("Analysis already performed");
674 stringsErr[ERR_NUCLEAR_EMPTY] = TR("No uranium to transform");
675 stringsErr[ERR_NUCLEAR_BAD] = TR("Transforms only uranium");
676 stringsErr[ERR_FACTORY_NULL] = TR("No titanium");
677 stringsErr[ERR_FACTORY_NEAR] = TR("Object too close");
678 stringsErr[ERR_INFO_NULL] = TR("No information exchange post within range");
679 stringsErr[ERR_VEH_VIRUS] = TR("Program infected by a virus");
680 stringsErr[ERR_BAT_VIRUS] = TR("Infected by a virus; temporarily out of order");
681 stringsErr[ERR_VEH_POWER] = TR("No power cell");
682 stringsErr[ERR_VEH_ENERGY] = TR("No more energy");
683 stringsErr[ERR_FLAG_FLY] = TR("Impossible when flying");
684 stringsErr[ERR_FLAG_WATER] = TR("Impossible when swimming");
685 stringsErr[ERR_FLAG_MOTOR] = TR("Impossible when moving");
686 stringsErr[ERR_FLAG_BUSY] = TR("Impossible when carrying an object");
687 stringsErr[ERR_FLAG_CREATE] = TR("Too many flags of this color (maximum 5)");
688 stringsErr[ERR_FLAG_PROXY] = TR("Too close to an existing flag");
689 stringsErr[ERR_FLAG_DELETE] = TR("No flag nearby");
690 stringsErr[ERR_DESTROY_NOTFOUND]= TR("Not found anything to destroy");
691 stringsErr[ERR_WRONG_OBJ] = TR("Inappropriate object");
692 stringsErr[ERR_MISSION_NOTERM] = TR("The mission is not accomplished yet (press \\key help; for more details)");
693 stringsErr[ERR_DELETEMOBILE] = TR("Bot destroyed");
694 stringsErr[ERR_DELETEBUILDING] = TR("Building destroyed");
695 stringsErr[ERR_ENEMY_OBJECT] = TR("Unable to control enemy objects");
696 stringsErr[ERR_WRONG_BOT] = TR("Inappropriate bot");
697 stringsErr[ERR_NO_QUICK_SLOT] = TR("Quicksave slot not found");
698
699 stringsErr[INFO_BUILD] = TR("Building completed");
700 stringsErr[INFO_CONVERT] = TR("Titanium available");
701 stringsErr[INFO_RESEARCH] = TR("Research program completed");
702 stringsErr[INFO_RESEARCHTANK] = TR("Plans for tracked robots available");
703 stringsErr[INFO_RESEARCHFLY] = TR("You can fly with the keys (\\key gup;) and (\\key gdown;)");
704 stringsErr[INFO_RESEARCHTHUMP] = TR("Plans for thumper available");
705 stringsErr[INFO_RESEARCHCANON] = TR("Plans for shooter available");
706 stringsErr[INFO_RESEARCHTOWER] = TR("Plans for defense tower available");
707 stringsErr[INFO_RESEARCHPHAZER] = TR("Plans for phazer shooter available");
708 stringsErr[INFO_RESEARCHSHIELD] = TR("Plans for shielder available");
709 stringsErr[INFO_RESEARCHATOMIC] = TR("Plans for nuclear power plant available");
710 stringsErr[INFO_RESEARCHBUILDER]= TR("Plans for builder available");
711 stringsErr[INFO_FACTORY] = TR("New bot available");
712 stringsErr[INFO_LABO] = TR("Analysis performed");
713 stringsErr[INFO_ENERGY] = TR("Power cell available");
714 stringsErr[INFO_NUCLEAR] = TR("Nuclear power cell available");
715 stringsErr[INFO_FINDING] = TR("You found a usable object");
716 stringsErr[INFO_MARKPOWER] = TR("Found a site for power station");
717 stringsErr[INFO_MARKURANIUM] = TR("Found a site for a derrick");
718 stringsErr[INFO_MARKSTONE] = TR("Found a site for a derrick");
719 stringsErr[INFO_MARKKEYa] = TR("Found a site for a derrick");
720 stringsErr[INFO_MARKKEYb] = TR("Found a site for a derrick");
721 stringsErr[INFO_MARKKEYc] = TR("Found a site for a derrick");
722 stringsErr[INFO_MARKKEYd] = TR("Found a site for a derrick");
723 stringsErr[INFO_WIN] = TR("<<< Well done; mission accomplished >>>");
724 stringsErr[INFO_LOST] = TR("<<< Sorry; mission failed >>>");
725 stringsErr[INFO_LOSTq] = TR("<<< Sorry; mission failed >>>");
726 stringsErr[INFO_WRITEOK] = TR("Current mission saved");
727 stringsErr[INFO_DELETEMOTHER] = TR("Alien Queen killed");
728 stringsErr[INFO_DELETEANT] = TR("Ant fatally wounded");
729 stringsErr[INFO_DELETEBEE] = TR("Wasp fatally wounded");
730 stringsErr[INFO_DELETEWORM] = TR("Worm fatally wounded");
731 stringsErr[INFO_DELETESPIDER] = TR("Spider fatally wounded");
732 stringsErr[INFO_BEGINSATCOM] = TR("Press \\key help; to read instructions on your SatCom");
733 stringsErr[INFO_TEAM_FINISH] = TR("<<< Team %s finished! >>>");
734 stringsErr[INFO_TEAM_DEAD] = TR("<<< Team %s lost! >>>");
735 stringsErr[INFO_TEAM_SCORE] = TR("<<< Team %s recieved %d points >>>");
736
737
738
739 stringsCbot[CBot::CBotErrOpenPar] = TR("Opening bracket missing");
740 stringsCbot[CBot::CBotErrClosePar] = TR("Closing bracket missing");
741 stringsCbot[CBot::CBotErrNotBoolean] = TR("The expression must return a boolean value");
742 stringsCbot[CBot::CBotErrUndefVar] = TR("Variable not declared");
743 stringsCbot[CBot::CBotErrBadLeft] = TR("Assignment impossible");
744 stringsCbot[CBot::CBotErrNoTerminator] = TR("Semicolon terminator missing");
745 stringsCbot[CBot::CBotErrCaseOut] = TR("Instruction \"case\" outside a block \"switch\"");
746 stringsCbot[CBot::CBotErrNoEnd] = TR("Instructions after the final closing brace");
747 stringsCbot[CBot::CBotErrCloseBlock] = TR("End of block missing");
748 stringsCbot[CBot::CBotErrElseWhitoutIf] = TR("Instruction \"else\" without corresponding \"if\"");
749 stringsCbot[CBot::CBotErrOpenBlock] = TR("Opening brace missing");
750 stringsCbot[CBot::CBotErrBadType1] = TR("Wrong type for the assignment");
751 stringsCbot[CBot::CBotErrRedefVar] = TR("A variable can not be declared twice");
752 stringsCbot[CBot::CBotErrBadType2] = TR("The types of the two operands are incompatible");
753 stringsCbot[CBot::CBotErrUndefCall] = TR("Unknown function");
754 stringsCbot[CBot::CBotErrNoDoubleDots] = TR("Sign \" : \" missing");
755 stringsCbot[CBot::CBotErrNoWhile] = TR("Keyword \"while\" missing");
756 stringsCbot[CBot::CBotErrBreakOutside] = TR("Instruction \"break\" outside a loop");
757 stringsCbot[CBot::CBotErrLabel] = TR("A label must be followed by \"for\"; \"while\"; \"do\" or \"switch\"");
758 stringsCbot[CBot::CBotErrUndefLabel] = TR("This label does not exist");
759 stringsCbot[CBot::CBotErrNoCase] = TR("Instruction \"case\" missing");
760 stringsCbot[CBot::CBotErrBadNum] = TR("Number missing");
761 stringsCbot[CBot::CBotErrVoid] = TR("Void parameter");
762 stringsCbot[CBot::CBotErrNoType] = TR("Type declaration missing");
763 stringsCbot[CBot::CBotErrNoVar] = TR("Variable name missing");
764 stringsCbot[CBot::CBotErrNoFunc] = TR("Function name missing");
765 stringsCbot[CBot::CBotErrOverParam] = TR("Too many parameters");
766 stringsCbot[CBot::CBotErrRedefFunc] = TR("Function already exists");
767 stringsCbot[CBot::CBotErrLowParam] = TR("Parameters missing");
768 stringsCbot[CBot::CBotErrBadParam] = TR("No function with this name accepts this kind of parameter");
769 stringsCbot[CBot::CBotErrNbParam] = TR("No function with this name accepts this number of parameters");
770 stringsCbot[CBot::CBotErrUndefItem] = TR("This is not a member of this class");
771 stringsCbot[CBot::CBotErrUndefClass] = TR("This object is not a member of a class");
772 stringsCbot[CBot::CBotErrNoConstruct] = TR("Appropriate constructor missing");
773 stringsCbot[CBot::CBotErrRedefClass] = TR("This class already exists");
774 stringsCbot[CBot::CBotErrCloseIndex] = TR("\" ] \" missing");
775 stringsCbot[CBot::CBotErrReserved] = TR("Reserved keyword of CBOT language");
776 stringsCbot[CBot::CBotErrBadNew] = TR("Bad argument for \"new\"");
777 stringsCbot[CBot::CBotErrOpenIndex] = TR("\" [ \" expected");
778 stringsCbot[CBot::CBotErrBadString] = TR("String missing");
779 stringsCbot[CBot::CBotErrBadIndex] = TR("Incorrect index type");
780 stringsCbot[CBot::CBotErrPrivate] = TR("Private element");
781 stringsCbot[CBot::CBotErrNoPublic] = TR("Public required");
782 stringsCbot[CBot::CBotErrNoExpression] = TR("Expression expected after =");
783 stringsCbot[CBot::CBotErrAmbiguousCall] = TR("Ambiguous call to overloaded function");
784 stringsCbot[CBot::CBotErrFuncNotVoid] = TR("Function needs return type \"void\"");
785 stringsCbot[CBot::CBotErrNoClassName] = TR("Class name expected");
786 stringsCbot[CBot::CBotErrNoReturn] = TR("Non-void function needs \"return;\"");
787 stringsCbot[CBot::CBotErrDefaultValue] = TR("This parameter needs a default value");
788 stringsCbot[CBot::CBotErrEndQuote] = TR("Missing end quote");
789 stringsCbot[CBot::CBotErrBadEscape] = TR("Unknown escape sequence");
790 stringsCbot[CBot::CBotErrOctalRange] = TR("Octal value out of range");
791 stringsCbot[CBot::CBotErrHexDigits] = TR("Missing hex digits after escape sequence");
792 stringsCbot[CBot::CBotErrHexRange] = TR("Hex value out of range");
793 stringsCbot[CBot::CBotErrUnicodeName] = TR("Invalid universal character name");
794 stringsCbot[CBot::CBotErrCharEmpty] = TR("Empty character constant");
795 stringsCbot[CBot::CBotErrRedefCase] = TR("Duplicate label in switch");
796
797 stringsCbot[CBot::CBotErrZeroDiv] = TR("Dividing by zero");
798 stringsCbot[CBot::CBotErrNotInit] = TR("Variable not initialized");
799 stringsCbot[CBot::CBotErrBadThrow] = TR("Negative value rejected by \"throw\"");
800 stringsCbot[CBot::CBotErrNoRetVal] = TR("The function returned no value");
801 stringsCbot[CBot::CBotErrNoRun] = TR("No function running");
802 stringsCbot[CBot::CBotErrUndefFunc] = TR("Calling an unknown function");
803 stringsCbot[CBot::CBotErrNotClass] = TR("This class does not exist");
804 stringsCbot[CBot::CBotErrNull] = TR("Unknown Object");
805 stringsCbot[CBot::CBotErrNan] = TR("Operation impossible with value \"nan\"");
806 stringsCbot[CBot::CBotErrOutArray] = TR("Access beyond array limit");
807 stringsCbot[CBot::CBotErrStackOver] = TR("Stack overflow");
808 stringsCbot[CBot::CBotErrDeletedPtr] = TR("Illegal object");
809 stringsCbot[CBot::CBotErrFileOpen] = TR("Can't open file");
810 stringsCbot[CBot::CBotErrNotOpen] = TR("File not open");
811 stringsCbot[CBot::CBotErrRead] = TR("Read error");
812 stringsCbot[CBot::CBotErrWrite] = TR("Write error");
813 }
814
815
816 namespace
817 {
818 char g_gamerName[100];
819 } // anonymous namespace
820
SetGlobalGamerName(std::string name)821 void SetGlobalGamerName(std::string name)
822 {
823 strcpy(g_gamerName, name.c_str());
824 }
825
826 // Replaces the commands "\key name;" in a text.
827
828 namespace
829 {
830
PutKeyName(std::string & dst,const char * src)831 void PutKeyName(std::string& dst, const char* src)
832 {
833 dst.clear();
834
835 int s = 0;
836 while ( src[s] != 0 )
837 {
838 if ( src[s+0] == '\\' &&
839 src[s+1] == 'k' &&
840 src[s+2] == 'e' &&
841 src[s+3] == 'y' &&
842 src[s+4] == ' ' )
843 {
844 unsigned int count;
845 for(count = 0; src[s+5+count] != ';'; count++);
846 CInput* input = CInput::GetInstancePointer();
847 InputSlot key = input->SearchKeyById(std::string(&src[s+5], count));
848 if (key != INPUT_SLOT_MAX)
849 {
850 dst.append(input->GetKeysString(key));
851 }
852 s = s+5+count+1;
853 }
854
855 dst.append(1, src[s++]);
856 }
857 }
858
859 // Returns the translated text of a resource that needs key substitution
860
GetResourceBase(ResType type,unsigned int num)861 const char* GetResourceBase(ResType type, unsigned int num)
862 {
863 const char *str = nullptr;
864
865 assert(num >= 0);
866
867 switch (type)
868 {
869 case RES_TEXT:
870 assert(num < RT_MAX);
871 str = stringsText[num];
872 break;
873
874 case RES_EVENT:
875 if (num >= EVENT_STD_MAX)
876 return ""; // can be safely ignored (user events)
877
878 str = stringsEvent[num];
879 break;
880
881 case RES_OBJECT:
882 assert(num < OBJECT_MAX);
883 if (num == OBJECT_HUMAN)
884 return g_gamerName;
885
886 str = stringsObject[num];
887 break;
888
889 case RES_ERR:
890 assert(num < ERR_MAX);
891 str = stringsErr[num];
892 break;
893
894 case RES_CBOT:
895 assert(num < CBot::CBotErrMAX);
896 str = stringsCbot[num];
897 break;
898
899 default:
900 assert(false);
901 }
902
903 return gettext(str);
904 }
905
906 } // anonymous namespace
907
908 // Returns the text of a resource.
909
GetResource(ResType type,unsigned int num,std::string & text)910 bool GetResource(ResType type, unsigned int num, std::string& text)
911 {
912 if(type != RES_KEY)
913 {
914 const char *tmpl = GetResourceBase(type, num);
915
916 if (!tmpl)
917 {
918 text.clear();
919 return false;
920 }
921
922 PutKeyName(text, tmpl);
923 return true;
924 }
925 else
926 {
927 if (num == static_cast<unsigned int>(KEY_INVALID))
928 text.clear();
929 else if (num == static_cast<unsigned int>(VIRTUAL_KMOD(CTRL)))
930 text = "Ctrl";
931 else if (num == static_cast<unsigned int>(VIRTUAL_KMOD(SHIFT)))
932 text = "Shift";
933 else if (num == static_cast<unsigned int>(VIRTUAL_KMOD(ALT)))
934 text = "Alt";
935 else if (num == static_cast<unsigned int>(VIRTUAL_KMOD(GUI)))
936 text = "Win"; // TODO: Better description of this key?
937 else if (num >= static_cast<unsigned int>(VIRTUAL_JOY(0)))
938 {
939 text = gettext("Button %1");
940 text = StrUtils::Replace(text, "%1", StrUtils::ToString<int>(1 + num - VIRTUAL_JOY(0)));
941 }
942 else
943 {
944 text = SDL_GetKeyName(static_cast<SDL_Keycode>(num));
945 }
946 return true;
947 }
948 }
949