aboutsummaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
Diffstat (limited to 'common')
-rw-r--r--common/error.cpp30
-rwxr-xr-xcommon/messages.cpp543
-rw-r--r--common/module.mk8
-rwxr-xr-xcommon/translation.cpp221
-rwxr-xr-xcommon/translation.h126
5 files changed, 914 insertions, 14 deletions
diff --git a/common/error.cpp b/common/error.cpp
index d51774fd3e..6d1e349287 100644
--- a/common/error.cpp
+++ b/common/error.cpp
@@ -26,6 +26,8 @@
#include "common/error.h"
#include "common/util.h"
+#include "common/translation.h"
+
namespace Common {
/**
@@ -38,24 +40,24 @@ struct ErrorMessage {
};
static const ErrorMessage _errMsgTable[] = {
- { kInvalidPathError, "Invalid Path" },
- { kNoGameDataFoundError, "Game Data not found" },
- { kUnsupportedGameidError, "Game Id not supported" },
- { kUnsupportedColorMode, "Unsupported Color Mode" },
+ { kInvalidPathError, _s("Invalid Path") },
+ { kNoGameDataFoundError, _s("Game Data not found") },
+ { kUnsupportedGameidError, _s("Game Id not supported") },
+ { kUnsupportedColorMode, _s("Unsupported Color Mode") },
- { kReadPermissionDenied, "Read permission denied" },
- { kWritePermissionDenied, "Write permission denied" },
+ { kReadPermissionDenied, _s("Read permission denied") },
+ { kWritePermissionDenied, _s("Write permission denied") },
// The following three overlap a bit with kInvalidPathError and each other. Which to keep?
- { kPathDoesNotExist, "Path not exists" },
- { kPathNotDirectory, "Path not a directory" },
- { kPathNotFile, "Path not a file" },
+ { kPathDoesNotExist, _s("Path not exists") },
+ { kPathNotDirectory, _s("Path not a directory") },
+ { kPathNotFile, _s("Path not a file") },
- { kCreatingFileFailed, "Cannot create file" },
- { kReadingFailed, "Reading failed" },
- { kWritingFailed, "Writing data failed" },
+ { kCreatingFileFailed, _s("Cannot create file") },
+ { kReadingFailed, _s("Reading failed") },
+ { kWritingFailed, _s("Writing data failed") },
- { kUnknownError, "Unknown Error" }
+ { kUnknownError, _s("Unknown Error") }
};
const char *errorToString(Error error) {
@@ -66,7 +68,7 @@ const char *errorToString(Error error) {
}
}
- return "Unknown Error";
+ return _("Unknown Error");
}
} // End of namespace Common
diff --git a/common/messages.cpp b/common/messages.cpp
new file mode 100755
index 0000000000..6a5fc5d813
--- /dev/null
+++ b/common/messages.cpp
@@ -0,0 +1,543 @@
+/* generated by po2c 1.0.2 - Do not modify */
+
+#include <stdio.h>
+#include <string.h>
+
+static const char * _po2c_msgids[] = {
+ /* 0 */ "",
+ /* 1 */ " Looking for a plugin supporting this gameid... ",
+ /* 2 */ " Starting '%s'\n",
+ /* 3 */ "%s failed to instantiate engine: %s (target '%s', path '%s')",
+ /* 4 */ "%s is an invalid gameid. Use the --list-games option to list supported gameid",
+ /* 5 */ "... progress ...",
+ /* 6 */ "11kHz",
+ /* 7 */ "22 kHz",
+ /* 8 */ "44 kHz",
+ /* 9 */ "48 kHz",
+ /* 10 */ "8 kHz",
+ /* 11 */ "<default>",
+ /* 12 */ "ALSA",
+ /* 13 */ "About",
+ /* 14 */ "About...",
+ /* 15 */ "AdLib",
+ /* 16 */ "AdLib emulator:",
+ /* 17 */ "Add Game...",
+ /* 18 */ "Angol",
+ /* 19 */ "Antialiased Renderer (16bpp)",
+ /* 20 */ "Aspect ratio correction",
+ /* 21 */ "Associated key : %s",
+ /* 22 */ "Associated key : none",
+ /* 23 */ "Atari ST MIDI",
+ /* 24 */ "Audio",
+ /* 25 */ "Autosave:",
+ /* 26 */ "C1Available engines:",
+ /* 27 */ "C1Features compiled in:",
+ /* 28 */ "C2(built on ",
+ /* 29 */ "CAMD",
+ /* 30 */ "Cancel",
+ /* 31 */ "Cannot create file",
+ /* 32 */ "Choose",
+ /* 33 */ "Choose an action to map",
+ /* 34 */ "Close",
+ /* 35 */ "CoreAudio",
+ /* 36 */ "CoreMIDI",
+ /* 37 */ "Could not find any engine capable of running the selected game",
+ /* 38 */ "Creative Music System",
+ /* 39 */ "DMedia",
+ /* 40 */ "Date: ",
+ /* 41 */ "Default",
+ /* 42 */ "Delete",
+ /* 43 */ "Disabled GFX",
+ /* 44 */ "Discovered %d new games ...",
+ /* 45 */ "Discovered %d new games.",
+ /* 46 */ "Display keyboard",
+ /* 47 */ "Do you really want to delete this savegame?",
+ /* 48 */ "Do you really want to remove this game configuration?",
+ /* 49 */ "Do you really want to run the mass game detector? This could potentially add a huge number of games.",
+ /* 50 */ "Edit Game...",
+ /* 51 */ "Enable Roland GS Mode",
+ /* 52 */ "Engine does not support debug level '%s'",
+ /* 53 */ "English",
+ /* 54 */ "Error running game:",
+ /* 55 */ "Extra Path:",
+ /* 56 */ "FM Towns",
+ /* 57 */ "Failed to load any GUI theme, aborting",
+ /* 58 */ "FluidSynth",
+ /* 59 */ "Fullscreen mode",
+ /* 60 */ "GFX",
+ /* 61 */ "GUI Renderer:",
+ /* 62 */ "Game",
+ /* 63 */ "Game Data not found",
+ /* 64 */ "Game Id not supported",
+ /* 65 */ "Game Path:",
+ /* 66 */ "Go up",
+ /* 67 */ "Graphics",
+ /* 68 */ "Graphics mode:",
+ /* 69 */ "Help",
+ /* 70 */ "IBM PCjr",
+ /* 71 */ "ID:",
+ /* 72 */ "Invalid Path",
+ /* 73 */ "Invalid game path",
+ /* 74 */ "Keys",
+ /* 75 */ "Language:",
+ /* 76 */ "Load",
+ /* 77 */ "Load game:",
+ /* 78 */ "Load...",
+ /* 79 */ "MIDI",
+ /* 80 */ "MIDI gain:",
+ /* 81 */ "MT-32 Emulation",
+ /* 82 */ "Map",
+ /* 83 */ "Mass Add...",
+ /* 84 */ "Menu",
+ /* 85 */ "Misc",
+ /* 86 */ "Mixed AdLib/MIDI mode",
+ /* 87 */ "Mouse click",
+ /* 88 */ "Music driver:",
+ /* 89 */ "Music volume:",
+ /* 90 */ "Mute All",
+ /* 91 */ "Name:",
+ /* 92 */ "Never",
+ /* 93 */ "No",
+ /* 94 */ "No date saved",
+ /* 95 */ "No music",
+ /* 96 */ "No playtime saved",
+ /* 97 */ "No time saved",
+ /* 98 */ "None",
+ /* 99 */ "OK",
+ /* 100 */ "Options",
+ /* 101 */ "Options...",
+ /* 102 */ "Output rate:",
+ /* 103 */ "Override global MIDI settings",
+ /* 104 */ "Override global audio settings",
+ /* 105 */ "Override global graphic settings",
+ /* 106 */ "Override global volume settings",
+ /* 107 */ "PC Speaker",
+ /* 108 */ "Path not a directory",
+ /* 109 */ "Path not a file",
+ /* 110 */ "Path not exists",
+ /* 111 */ "Paths",
+ /* 112 */ "Pause",
+ /* 113 */ "Pick the game:",
+ /* 114 */ "Platform:",
+ /* 115 */ "Playtime: ",
+ /* 116 */ "Please select an action",
+ /* 117 */ "Plugins Path:",
+ /* 118 */ "Press the key to associate",
+ /* 119 */ "Quit",
+ /* 120 */ "Read permission denied",
+ /* 121 */ "Reading failed",
+ /* 122 */ "Remap keys",
+ /* 123 */ "Remove Game",
+ /* 124 */ "Render mode:",
+ /* 125 */ "Resume",
+ /* 126 */ "Return to Launcher",
+ /* 127 */ "SEQ",
+ /* 128 */ "SFX volume:",
+ /* 129 */ "Save",
+ /* 130 */ "Save Path:",
+ /* 131 */ "Save Path: ",
+ /* 132 */ "Save game:",
+ /* 133 */ "Scan complete!",
+ /* 134 */ "Scanned %d directories ...",
+ /* 135 */ "ScummVM could not find any engine capable of running the selected game!",
+ /* 136 */ "ScummVM could not find any game in the specified directory!",
+ /* 137 */ "ScummVM couldn't open the specified directory!",
+ /* 138 */ "Search:",
+ /* 139 */ "Select SoundFont",
+ /* 140 */ "Select a Theme",
+ /* 141 */ "Select additional game directory",
+ /* 142 */ "Select an action and click 'Map'",
+ /* 143 */ "Select directory for GUI themes",
+ /* 144 */ "Select directory for extra files",
+ /* 145 */ "Select directory for plugins",
+ /* 146 */ "Select directory for saved games",
+ /* 147 */ "Select directory for savegames",
+ /* 148 */ "Select directory with game data",
+ /* 149 */ "Skip",
+ /* 150 */ "Skip line",
+ /* 151 */ "SoundFont:",
+ /* 152 */ "Speech & Subs",
+ /* 153 */ "Speech Only",
+ /* 154 */ "Speech and Subtitles",
+ /* 155 */ "Speech volume:",
+ /* 156 */ "Standard Renderer (16bpp)",
+ /* 157 */ "Start",
+ /* 158 */ "Subtitle speed:",
+ /* 159 */ "Subtitles Only",
+ /* 160 */ "Szakítani",
+ /* 161 */ "Tapwave Zodiac",
+ /* 162 */ "Text and Speech:",
+ /* 163 */ "The chosen directory cannot be written to. Please select another one.",
+ /* 164 */ "Theme Path:",
+ /* 165 */ "Theme:",
+ /* 166 */ "This game ID is already taken. Please choose another one.",
+ /* 167 */ "This game does not support loading games from the launcher.",
+ /* 168 */ "TiMidity",
+ /* 169 */ "Time: ",
+ /* 170 */ "True Roland MT-32 (disable GM emulation)",
+ /* 171 */ "Unable to locate game data",
+ /* 172 */ "Unknown Error",
+ /* 173 */ "Unknown error",
+ /* 174 */ "Unsupported Color Mode",
+ /* 175 */ "Untitled savestate",
+ /* 176 */ "User picked target '%s' (gameid '%s')...\n",
+ /* 177 */ "Volume",
+ /* 178 */ "Windows MIDI",
+ /* 179 */ "Write permission denied",
+ /* 180 */ "Writing data failed",
+ /* 181 */ "Wrong configuration: Both subtitles and speech are off. Assuming subtitles only",
+ /* 182 */ "Yamaha Pa1",
+ /* 183 */ "Yes",
+ /* 184 */ "You have to restart ScummVM to take the effect.",
+ /* 185 */ "every 10 mins",
+ /* 186 */ "every 15 mins",
+ /* 187 */ "every 30 mins",
+ /* 188 */ "every 5 mins",
+ /* 189 */ "failed\n",
+ NULL
+};
+
+struct _po2c_msg {
+ int msgid;
+ const char * msgstr;
+};
+
+static struct _po2c_msg _po2c_lang_ru_RU[] = {
+ { 0, "Project-Id-Version: ScummVM VERSION\nReport-Msgid-Bugs-To: scummvm-devel@lists.sf.net\nPOT-Creation-Date: 2010-06-08 17:25+0300\nPO-Revision-Date: 2010-06-08 08:52-0100\nLast-Translator: Eugene Sandulenko <sev@scummvm.org>\nLanguage-Team: Russian\nMIME-Version: 1.0\nContent-Type: text/plain; charset=cp1251\nContent-Transfer-Encoding: 8bit\nPlural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" },
+ { 1, " \310\371\363 \357\353\340\343\350\355 \361 \357\356\344\344\345\360\346\352\356\351 \375\362\356\343\356 gameid... " },
+ { 2, " \307\340\357\363\361\352\340\376 '%s'\n" },
+ { 3, "%s \355\345 \361\354\356\343 \347\340\357\363\361\362\350\362\374 \344\342\350\346\356\352: %s (\366\345\353\374 '%s', \357\363\362\374 '%s')" },
+ { 4, "\315\345\342\345\360\355\373\351 gameid %s. \310\361\357\356\353\374\347\363\351\362\345 \356\357\366\350\376 --list-games \344\353\377 \357\360\356\361\354\356\362\360\340 \361\357\350\361\352\340 \357\356\344\344\345\360\346\350\342\340\345\354\373\365 gameid" },
+ { 5, "... \350\371\363 ..." },
+ { 6, "11 \352\303\366" },
+ { 7, "22 \352\303\366" },
+ { 8, "44 \352\303\366" },
+ { 9, "48 \352\303\366" },
+ { 10, "8 \352\303\366" },
+ { 11, "<\357\356 \363\354\356\353\367\340\355\350\376>" },
+ { 12, "ALSA" },
+ { 13, "\316 \357\360\356\343\360\340\354\354\345" },
+ { 14, "\316 \357\360\356\343\360\340\354\354\345..." },
+ { 15, "AdLib" },
+ { 16, "\335\354\363\353\377\362\356\360 AdLib:" },
+ { 17, "\315\356\342. \350\343\360\340..." },
+ { 19, "\320\340\361\362\345\360\350\347\340\362\356\360 \361\356 \361\343\353\340\346\350\342\340\355\350\345\354 (16bpp)" },
+ { 20, "\312\356\360\360\345\352\366\350\377 \361\356\356\362\355\356\370\345\355\350\377 \361\362\356\360\356\355" },
+ { 21, "\315\340\347\355\340\367\345\355\355\340\377 \352\353\340\342\350\370\340 : %s" },
+ { 22, "\315\340\347\355\340\367\345\355\355\340\377 \352\353\340\342\350\370\340 : \355\345\362" },
+ { 23, "Atars ST MIDI" },
+ { 24, "\300\363\344\350\356" },
+ { 25, "\300\342\362\356\361\356\365\360\340\355\345\355\350\345:" },
+ { 26, "C1\304\356\361\362\363\357\355\373\345 \344\342\350\346\352\350:" },
+ { 27, "C1\302\352\353\376\367\345\355\355\373\345 \342 \341\350\353\344 \356\357\366\350\350:" },
+ { 28, "C2(\361\356\341\360\340\355 " },
+ { 29, "CAMD" },
+ { 30, "\316\362\354\345\355\340" },
+ { 31, "\315\345 \354\356\343\363 \361\356\347\344\340\362\374 \364\340\351\353" },
+ { 32, "\302\373\341\360\340\362\374" },
+ { 33, "\302\373\341\345\360\350\362\345 \344\345\351\361\362\342\350\345 \344\353\377 \355\340\347\355\340\367\345\355\350\377" },
+ { 34, "\307\340\352\360\373\362\374" },
+ { 35, "CoreAudio" },
+ { 36, "CoreMIDI" },
+ { 37, "\315\345 \354\356\343\363 \355\340\351\362\350 \344\342\350\346\356\352 \344\353\377 \347\340\357\363\361\352\340 \342\373\341\360\340\355\355\356\351 \350\343\360\373" },
+ { 38, "Creative Music System" },
+ { 39, "DMedia" },
+ { 40, "\304\340\362\340: " },
+ { 41, "\317\356 \363\354\356\353\367\340\355\350\376" },
+ { 42, "\323\344\340\353\350\362\374" },
+ { 43, "\301\345\347 \343\360\340\364\350\352\350" },
+ { 44, "\315\340\351\344\345\355\356 %d \355\356\342\373\365 \350\343\360 ..." },
+ { 45, "\315\340\351\344\345\355\356 %d \355\356\342\373\365 \350\343\360." },
+ { 46, "\317\356\352\340\347\340\362\374 \352\353\340\342\350\340\362\363\360\363" },
+ { 47, "\302\373 \344\345\351\361\362\342\350\362\345\353\374\355\356 \365\356\362\350\362\345 \363\344\340\353\350\362\374 \375\362\356 \361\356\365\360\340\355\345\355\350\345?" },
+ { 48, "\302\373 \344\345\351\361\362\342\350\362\345\353\374\355\356 \365\356\362\350\362\345 \363\344\340\353\350\362\374 \363\361\362\340\355\356\342\352\350 \344\353\377 \375\362\356\351 \350\343\360\373?" },
+ { 49, "\302\373 \344\345\351\361\362\342\350\362\345\353\374\355\356 \365\356\362\350\362\345 \347\340\357\363\361\362\350\362\374 \344\345\362\345\352\362\356\360 \342\361\345\365 \350\343\360? \335\362\356 \357\356\362\345\355\366\350\340\353\374\355\356 \354\356\346\345\362 \344\356\341\340\342\350\362\374 \341\356\353\374\370\356\345 \352\356\353\350\367\345\361\362\342\356 \350\343\360." },
+ { 50, "\310\347\354. \350\343\360\363..." },
+ { 51, "\302\352\353\376\367\350\362\374 \360\345\346\350\354 Roland GS" },
+ { 52, "\304\342\350\346\356\352 \355\345 \357\356\344\344\345\360\346\350\342\340\345\362 \363\360\356\342\345\355\374 \356\362\353\340\344\352\350 '%s'" },
+ { 53, "English" },
+ { 54, "\316\370\350\341\352\340 \347\340\357\363\361\352\340 \350\343\360\373:" },
+ { 55, "\304\356\357. \357\363\362\374:" },
+ { 56, "FM Towns" },
+ { 57, "\315\345 \363\344\340\353\356\361\374 \347\340\343\360\363\347\350\362\374 \362\345\354\363 GUI, \357\360\345\352\360\340\371\340\376 \360\340\341\356\362\363" },
+ { 58, "FluidSynth" },
+ { 59, "\317\356\353\355\356\375\352\360\340\355\355\373\351 \360\345\346\350\354" },
+ { 60, "\303\360\364" },
+ { 61, "\320\340\361\362\345\360\350\347\340\362\356\360 GUI:" },
+ { 62, "\310\343\360\340" },
+ { 63, "\315\345\362 \364\340\351\353\356\342 \350\343\360\373" },
+ { 64, "Game Id \355\345 \357\356\344\344\345\360\346\350\342\340\345\362\361\377" },
+ { 65, "\317\363\362\374 \352 \350\343\360\345: " },
+ { 66, "\302\342\345\360\365" },
+ { 67, "\303\360\340\364\350\352\340" },
+ { 68, "\303\360\340\364\350\367\345\361\352\350\351 \360\345\346\350\354:" },
+ { 69, "\317\356\354\356\371\374" },
+ { 70, "IBM PCjr" },
+ { 71, "ID:" },
+ { 72, "\315\345\342\345\360\355\373\351 \357\363\362\374" },
+ { 74, "\312\353\340\342\350\370\350" },
+ { 75, "\337\347\373\352:" },
+ { 76, "\307\340\343\360\363\347\350\362\374" },
+ { 77, "\307\340\343\360\363\347\350\362\374 \350\343\360\363:" },
+ { 78, "\307\340\343\360...." },
+ { 79, "MIDI" },
+ { 80, "\323\361\350\353\345\355\350\345 MIDI:" },
+ { 81, "\335\354\363\353\377\366\350\377 MT-32" },
+ { 82, "\315\340\347\355\340\367\350\362\374" },
+ { 83, "\304\356\341. \354\355\356\343\356..." },
+ { 84, "\314\345\355\376" },
+ { 85, "\320\340\347\355\356\345" },
+ { 86, "\321\354\345\370\340\355\355\373\351 \360\345\346\350\354 AdLib/MIDI" },
+ { 87, "\312\353\350\352 \354\373\370\374\376" },
+ { 88, "\304\360\340\351\342\345\360 \354\363\347\373\352\350:" },
+ { 89, "\303\360\356\354\352\356\361\362\374 \354\363\347\373\352\350:" },
+ { 90, "\302\373\352\353\376\367\350\362\374 \342\361\270" },
+ { 91, "\315\340\347\342\340\355\350\345:" },
+ { 92, "\315\350\352\356\343\344\340" },
+ { 93, "\315\345\362" },
+ { 94, "\304\340\362\340 \355\345 \347\340\357\350\361\340\355\340" },
+ { 95, "\301\345\347 \354\363\347\373\352\350" },
+ { 96, "\302\360\345\354\377 \350\343\360\373 \355\345 \347\340\357\350\361\340\355\356" },
+ { 97, "\302\360\345\354\377 \355\345 \347\340\357\350\361\340\355\356" },
+ { 98, "\315\345 \347\340\344\340\355" },
+ { 99, "OK" },
+ { 100, "\316\357\366\350\350" },
+ { 101, "\316\357\366\350\350..." },
+ { 102, "\302\373\365\356\344\355\340\377 \367\340\361\362\356\362\340:" },
+ { 103, "\317\345\360\345\352\360\373\362\374 \343\353\356\341\340\353\374\355\373\345 \363\361\362\340\355\356\342\352\350 MIDI" },
+ { 104, "\317\345\360\345\352\360\373\362\374 \343\353\356\341\340\353\374\355\373\345 \363\361\362\340\355\356\342\352\350 \340\363\344\350\356" },
+ { 105, "\317\345\360\345\352\360\373\362\374 \343\353\356\341\340\353\374\355\373\345 \363\361\362\340\355\356\342\352\350 \343\360\340\364\350\352\350" },
+ { 106, "\317\345\360\345\352\360\373\362\374 \343\353\356\341\340\353\374\355\373\345 \363\361\362\340\355\356\342\352\350 \343\360\356\354\352\356\361\362\350" },
+ { 107, "PC \361\357\350\352\345\360" },
+ { 108, "\317\363\362\374 \355\345 \377\342\353\377\345\362\361\377 \344\350\360\345\352\362\356\360\350\345\351" },
+ { 109, "\317\363\362\374 \355\345 \377\342\353\377\345\362\361\377 \364\340\351\353\356\354" },
+ { 110, "\317\363\362\374 \355\345 \355\340\351\344\345\355" },
+ { 111, "\317\363\362\350" },
+ { 112, "\317\340\363\347\340" },
+ { 113, "\302\373\341\345\360\350\362\345 \350\343\360\363:" },
+ { 114, "\317\353\340\362\364\356\360\354\340:" },
+ { 115, "\302\360\345\354\377 \350\343\360\373: " },
+ { 116, "\317\356\346\340\353\363\351\361\362\340, \342\373\341\345\360\350\362\345 \344\345\351\361\362\342\350\345" },
+ { 117, "\317\363\362\374 \352 \357\353\340\343\350\355\340\354:" },
+ { 118, "\315\340\346\354\350\362\345 \352\353\340\342\350\370\363 \344\353\377 \355\340\347\355\340\367\345\355\350\377" },
+ { 119, "\302\373\365\356\344" },
+ { 120, "\315\345\344\356\361\362\340\362\356\367\355\356 \357\360\340\342 \344\353\377 \367\362\345\355\350\377" },
+ { 121, "\316\370\350\341\352\340 \367\362\345\355\350\377" },
+ { 122, "\317\345\360\345\355\340\347\355\340\367\350\362\374 \352\353\340\342\350\370\350" },
+ { 123, "\323\344\340\353\350\362\374 \350\343\360\363" },
+ { 124, "\320\345\346\350\354 \360\340\361\362\360\350\360\356\342\340\355\350\377:" },
+ { 125, "\317\360\356\344\356\353\346\350\362\374" },
+ { 126, "\302\345\360\355\363\362\374\361\377 \342 \343\353\340\342\355\356\345 \354\345\355\376" },
+ { 127, "SEQ" },
+ { 128, "\303\360\356\354\352\356\361\362\374 \375\364\364\345\352\362\356\342:" },
+ { 129, "\307\340\357\350\361\340\362\374" },
+ { 130, "\317\363\362\374 \361\356\365\360.: " },
+ { 131, "\317\363\362\374 \344\353\377 \361\356\365\360\340\355\345\355\350\351: " },
+ { 132, "\321\356\365\360\340\355\350\362\374 \350\343\360\363: " },
+ { 133, "\317\356\350\361\352 \347\340\352\356\355\367\345\355!" },
+ { 134, "\317\360\356\361\354\356\362\360\345\355\356 %d \344\350\360\345\352\362\356\360\350\351 ..." },
+ { 135, "ScummVM \355\345 \361\354\356\343 \355\340\351\362\350 \344\342\350\346\356\352 \344\353\377 \347\340\357\363\361\352\340 \342\373\341\360\340\355\355\356\351 \350\343\360\373!" },
+ { 136, "ScummVM \355\345 \354\356\346\345\362 \355\340\351\362\350 \350\343\360\363 \342 \363\352\340\347\340\355\355\356\351 \344\350\360\345\352\362\356\360\350\350!" },
+ { 137, "ScummVM \355\345 \354\356\346\345\362 \356\362\352\360\373\362\374 \363\352\340\347\340\355\355\363\376 \344\350\360\345\352\362\356\360\350\376!" },
+ { 138, "\317\356\350\361\352:" },
+ { 139, "\302\373\341\345\360\350\362\345 SoundFont" },
+ { 140, "\302\373\341\345\360\350\362\345 \362\345\354\363" },
+ { 141, "\302\373\341\345\360\350\362\345 \344\356\357\356\353\355\350\362\345\353\374\355\363\376 \344\350\360\345\352\362\356\360\350\376 \350\343\360\373" },
+ { 142, "\302\373\341\345\360\350\362\345 \344\345\351\361\362\342\350\345 \350 \352\353\350\352\355\350\362\345 '\315\340\347\355\340\367\350\362\374'" },
+ { 143, "\302\373\341\345\360\350\362\345 \344\350\360\345\352\362\356\360\350\376 \344\353\377 \362\345\354 GUI" },
+ { 144, "\302\373\341\345\360\350\362\345 \344\350\360\345\352\362\356\360\350\376 \361 \344\356\357\356\353\355\350\362\345\353\374\355\373\354\350 \364\340\351\353\340\354\350" },
+ { 145, "\302\373\341\345\360\350\362\345 \344\350\360\345\352\362\356\360\350\376 \361 \357\353\340\343\350\355\340\354\350" },
+ { 146, "\302\373\341\345\360\350\362\345 \344\350\360\345\352\362\356\360\350\376 \344\353\377 \361\356\365\360\340\355\345\355\350\351" },
+ { 147, "\302\373\341\345\360\350\362\345 \344\350\360\345\352\362\356\360\350\376 \344\353\377 \361\356\365\360\340\355\345\355\350\351" },
+ { 148, "\302\373\341\345\360\350\362\345 \344\350\360\345\352\362\356\360\350\376 \361 \364\340\351\353\340\354\350 \350\343\360\373" },
+ { 149, "\317\360\356\357\363\361\362\350\362\374" },
+ { 150, "\317\360\356\357\363\361\362\350\362\374 \361\362\360\356\352\363" },
+ { 151, "SoundFont:" },
+ { 152, "\307\342\363\352 \350 \361\363\341." },
+ { 153, "\322\356\353\374\352\356 \356\347\342\363\367\352\340" },
+ { 154, "\316\347\342\363\367\352\340 \350 \361\363\341\362\350\362\360\373" },
+ { 155, "\303\360\356\354\352\356\361\362\374 \356\347\342\363\367\352\350:" },
+ { 156, "\321\362\340\355\344\340\360\362\355\373\351 \360\340\361\362\345\360\350\347\340\362\356\360 (16bpp)" },
+ { 157, "\317\363\361\352" },
+ { 158, "\321\352\356\360\356\361\362\374 \361\363\341\362\350\362\360\356\342:" },
+ { 159, "\322\356\353\374\352\356 \361\363\341\362\350\362\360\373" },
+ { 161, "Tapware Zodiac" },
+ { 162, "\322\345\352\361\362 \350 \356\347\342\363\367\352\340:" },
+ { 163, "\315\345 \354\356\343\363 \357\350\361\340\362\374 \342 \342\373\341\360\340\355\355\363\376 \344\350\360\345\352\362\356\360\350\376. \317\356\346\340\353\363\351\361\362\340, \363\352\340\346\350\362\345 \344\360\363\343\363\376." },
+ { 164, "\317\363\362\374 \352 \362\345\354\340\354:" },
+ { 165, "\322\345\354\340:" },
+ { 166, "\335\362\356\362 ID \350\343\360\373 \363\346\345 \350\361\357\356\353\374\347\363\345\362\361\377. \317\356\346\340\353\363\351\361\362\340, \342\373\341\345\360\350\362\345 \344\360\363\343\356\351." },
+ { 167, "\335\362\340 \350\343\360\340 \355\345 \357\356\344\344\345\360\346\350\342\340\345\362 \347\340\343\360\363\347\352\363 \361\356\365\360\340\355\345\355\350\351 \367\345\360\345\347 \343\353\340\342\355\356\345 \354\345\355\376." },
+ { 168, "TiMidity" },
+ { 169, "\302\360\345\354\377: " },
+ { 170, "\315\340\361\362\356\377\371\350\351 Roland MT-32 (\347\340\357\360\345\362\350\362\374 \375\354\363\353\377\366\350\376 GM)" },
+ { 172, "\315\345\350\347\342\345\361\362\355\340\377 \356\370\350\341\352\340" },
+ { 174, "\315\345\357\356\344\344\345\360\346\350\342\340\345\354\373\351 \360\345\346\350\354 \366\342\345\362\340" },
+ { 175, "\321\356\365\360\340\355\345\355\350\345 \341\345\347 \350\354\345\355\350" },
+ { 176, "\317\356\353\374\347\356\342\340\362\345\353\374 \342\373\341\360\340\353 \366\345\353\374'%s' (gameid '%s')...\n" },
+ { 177, "\303\360\356\354\352\356\361\362\374" },
+ { 178, "Windows MIDI" },
+ { 179, "\315\345\344\356\361\362\340\362\356\367\355\356 \357\360\340\342 \344\353\377 \347\340\357\350\361\350" },
+ { 180, "\316\370\350\341\352\340 \347\340\357\350\361\350 \344\340\355\355\373\365" },
+ { 182, "Yamaha Pa1" },
+ { 183, "\304\340" },
+ { 184, "\302\373 \344\356\353\346\355\373 \357\345\360\345\347\340\357\363\361\362\350\362\374 ScummVM \367\362\356\341\373 \357\360\350\354\345\355\350\362\374 \350\347\354\345\355\345\355\350\377." },
+ { 185, "\352\340\346\344\373\345 10 \354\350\355\363\362" },
+ { 186, "\352\340\346\344\373\345 15 \354\350\355\363\362" },
+ { 187, "\352\340\346\344\373\345 30 \354\350\355\363\362" },
+ { 188, "\352\340\346\344\373\345 5 \354\350\355\363\362" },
+ { 189, "\355\345 \363\344\340\353\356\361\374\n" },
+ { -1, NULL }
+};
+
+static struct _po2c_msg _po2c_lang_hu_HU[] = {
+ { 0, "Project-Id-Version: ScummVM VERSION\nReport-Msgid-Bugs-To: scummvm-devel@lists.sourceforge.net\nPOT-Creation-Date: 2009-11-25 07:10-0500\nPO-Revision-Date: 2009-11-25 07:42-0500\nLast-Translator: Alex Bevilacqua <alexbevi@gmail.com>\nLanguage-Team: Hungarian\nMIME-Version: 1.0\nContent-Type: text/plain; charset=ASCII\nContent-Transfer-Encoding: 8bit\nPlural-Forms: nplurals=2; plural=(n != 1);\n" },
+ { 11, "<alap\351rtelmezett>" },
+ { 16, "AdLib vezet :" },
+ { 20, "Aspect adag korrekci\363" },
+ { 24, "Hang" },
+ { 25, "Automatikus ment\351s:" },
+ { 51, "K\351pess\351 Roland GS Mode" },
+ { 55, "Extra \332tvonal:" },
+ { 59, "Teljes k\351perny s m\363d:" },
+ { 61, "Lek\351pez eszk\366z GUI:" },
+ { 67, "Grafik\341val" },
+ { 68, "Grafikus m\363d:" },
+ { 74, "Kulcsok" },
+ { 80, "MIDI nyeres\351g:" },
+ { 86, "Vegyes AdLib/MIDI m\363d" },
+ { 88, "Zenei vezet :" },
+ { 89, "Zene mennyis\351g:" },
+ { 90, "Muta \326sszes" },
+ { 92, "Soha" },
+ { 98, "Semmi" },
+ { 99, "Igen" },
+ { 102, "Kimeneti teljes\355tm\351ny:" },
+ { 111, "\326sv\351nyek" },
+ { 124, "Renderel\351si m\363d:" },
+ { 128, "SFX mennyis\351ge" },
+ { 152, "Besz\351d s Feliratok" },
+ { 153, "Csak a besz\351d" },
+ { 154, "Besz\351d \351s a Feliratok" },
+ { 155, "Besz\351d mennyis\351g:" },
+ { 158, "Felirat sebess\351g:" },
+ { 159, "Csak feliratok" },
+ { 162, "Sz\366veg \351s besz\351d:" },
+ { 165, "T\351ma:" },
+ { 170, "Igaz Roland MT-32 (megb\351n\355t GM emul\341ci\363)" },
+ { 177, "Volumene" },
+ { 185, "10 percenk\351nt" },
+ { 186, "15 percenk\351nt" },
+ { 187, "30 percenk\351nt" },
+ { 188, "5 percenk\351nt" },
+ { -1, NULL }
+};
+
+static struct {
+ const char * lang;
+ const char * charset;
+ struct _po2c_msg * msgs;
+} _po2c_langs[] = {
+ { "ru_RU", "cp1251", _po2c_lang_ru_RU },
+ { "hu_HU", "ASCII", _po2c_lang_hu_HU },
+ { NULL, NULL, NULL }
+};
+
+/* code */
+
+static struct _po2c_msg * _po2c_lang=NULL;
+static int _po2c_lang_size=0;
+static const char * _po2c_charset=NULL;
+
+void po2c_setlang(const char * lang)
+{
+ int n;
+
+ _po2c_lang=NULL;
+ _po2c_lang_size=0;
+ _po2c_charset=NULL;
+
+ /* if lang is NULL or "", deactivate it */
+ if(lang == NULL || *lang == '\0')
+ return;
+
+ /* searches for a valid language array */
+ for(n=0;_po2c_lang == NULL && _po2c_langs[n].lang != NULL;n++)
+ {
+ if(strcmp(lang, _po2c_langs[n].lang) == 0) {
+ _po2c_lang=_po2c_langs[n].msgs;
+ _po2c_charset=_po2c_langs[n].charset;
+ }
+ }
+
+ /* try partial searches */
+ for(n=0;_po2c_lang == NULL && _po2c_langs[n].lang != NULL;n++)
+ {
+ if(strncmp(lang, _po2c_langs[n].lang, 2) == 0) {
+ _po2c_lang=_po2c_langs[n].msgs;
+ _po2c_charset=_po2c_langs[n].charset;
+ }
+ }
+
+ /* if found, count entries */
+ if(_po2c_lang != NULL)
+ {
+ struct _po2c_msg * m;
+
+ for(m=_po2c_lang;m->msgid != -1;m++)
+ _po2c_lang_size++;
+ }
+}
+
+const char * po2c_gettext(const char * msgid)
+{
+ struct _po2c_msg * m;
+ int b, t, n, c;
+
+ /* if no language is set or msgid is empty, return msgid as is */
+ if(_po2c_lang == NULL || *msgid == '\0')
+ return(msgid);
+
+ /* binary-search for the msgid */
+ b=0; t=_po2c_lang_size - 1;
+
+ while(t >= b)
+ {
+ n=(b + t) / 2;
+ m=&_po2c_lang[n];
+
+ c=strcmp(msgid, _po2c_msgids[m->msgid]);
+
+ if(c == 0)
+ return(m->msgstr);
+ else
+ if(c < 0)
+ t=n - 1;
+ else
+ b=n + 1;
+ }
+
+ return(msgid);
+}
+
+const char * po2c_getcharset(void)
+{
+ if (_po2c_charset)
+ return _po2c_charset;
+ else
+ return "ASCII";
+}
+
+int po2c_getnumlangs(void)
+{
+ int n = 0;
+ while (_po2c_langs[n].lang)
+ n++;
+
+ return n;
+}
+
+const char * po2c_getlang(int num)
+{
+ return _po2c_langs[num].lang;
+}
diff --git a/common/module.mk b/common/module.mk
index 83d30f0a9b..857fb10edf 100644
--- a/common/module.mk
+++ b/common/module.mk
@@ -22,11 +22,19 @@ MODULE_OBJS := \
system.o \
textconsole.o \
tokenizer.o \
+ translation.o \
unarj.o \
unzip.o \
util.o \
xmlparser.o \
zlib.o
+ifdef ENABLE_TRANSLATION
+common/translation.cpp: common/messages.cpp
+
+common/messages.cpp: $(wildcard po/*.po)
+ tools/po2c $^ > common/messages.cpp
+endif
+
# Include common rules
include $(srcdir)/rules.mk
diff --git a/common/translation.cpp b/common/translation.cpp
new file mode 100755
index 0000000000..8301b22ecc
--- /dev/null
+++ b/common/translation.cpp
@@ -0,0 +1,221 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ */
+
+#include "translation.h"
+
+DECLARE_SINGLETON(Common::TranslationManager)
+
+#ifdef DETECTLANG
+#include <locale.h>
+#endif
+
+#ifdef TERMCONV
+#include <langinfo.h>
+#endif
+
+#ifdef TRANSLATION
+#include "messages.cpp"
+#endif
+
+namespace Common {
+
+
+#ifdef TRANSLATION
+
+// Translation enabled
+
+
+TranslationManager::TranslationManager() {
+#ifdef DETECTLANG
+ // Activating current locale settings
+ const char* locale = setlocale(LC_ALL, "");
+
+ // Detect the language from the locale
+ if (!locale) {
+ strcpy(_syslang, "C");
+ } else {
+ int len = strlen(locale);
+ if (len > 5)
+ len = 5;
+ strncpy(_syslang, locale, len);
+ _syslang[len] = 0;
+ }
+#else // DETECTLANG
+ strcpy(_syslang, "C");
+#endif // DETECTLANG
+
+#ifdef TERMCONV
+ _convmsg = NULL;
+ _conversion = NULL;
+#endif // TERMCONV
+
+ // Set the default language
+ setLanguage("");
+}
+
+TranslationManager::~TranslationManager() {
+#ifdef TERMCONV
+ iconv_close(_conversion);
+ if (_convmsg)
+ delete [] _convmsg;
+#endif // TERMCONV
+}
+
+void TranslationManager::setLanguage(const char* lang) {
+ if (*lang == '\0')
+ po2c_setlang(_syslang);
+ else
+ po2c_setlang(lang);
+
+#ifdef TERMCONV
+ // Get the locale character set (for terminal output)
+ const char* charset_term = nl_langinfo(CODESET);
+
+ // Get the messages character set
+ const char* charset_po = po2c_getcharset();
+
+ // Delete previous conversion
+ if (_conversion)
+ iconv_close(_conversion);
+
+ // Initialize the conversion
+ _conversion = iconv_open(charset_term, charset_po);
+#endif // TERMCONV
+}
+
+const char* TranslationManager::getTranslation(const char* message) {
+ return po2c_gettext(message);
+}
+
+#ifdef TERMCONV
+bool TranslationManager::convert(const char* message) {
+ // Preparing conversion origin
+ size_t len = strlen(message);
+ char* msgcpy = new char[len + 1];
+ strcpy(msgcpy, message);
+ char* msg = msgcpy;
+ char** pmsg = &msg;
+
+ // Preparing conversion destination
+ size_t len2 = _sizeconv;
+ char *conv = _convmsg;
+ char** pconv = &conv;
+
+ // Clean previous conversions
+ iconv(_conversion, NULL, NULL, pconv, &len2);
+
+ // Do the real conversion
+ size_t result = iconv(_conversion, pmsg, &len, pconv, &len2);
+
+ delete [] msgcpy;
+
+ return result != ((size_t)-1);
+}
+#endif // TERMCONV
+
+const char* TranslationManager::convertTerm(const char* message) {
+#ifdef TERMCONV
+ size_t len = strlen(message);
+ if (!_convmsg) {
+ _sizeconv = len * 2;
+ _convmsg = new char[_sizeconv];
+ }
+
+ if (!convert(message)) {
+ // Resizing the buffer
+ delete [] _convmsg;
+ _sizeconv = len * 2;
+ _convmsg = new char[_sizeconv];
+
+ if (!convert(message)) {
+ printf("Error while converting character sets\n");
+ return "Error while converting character sets";
+ }
+ }
+
+ return _convmsg;
+#else // TERMCONV
+ return message;
+#endif // TERMCONV
+}
+
+const TLangArray TranslationManager::getSupportedLanguages() const {
+ TLangArray languages;
+
+ int total = po2c_getnumlangs();
+ for (int i = 0; i < total; i++) {
+ TLanguage lng(po2c_getlang(i), i + 1);
+ languages.push_back(lng);
+ }
+
+ //sort(languages.begin(), languages.end());
+
+ return languages;
+}
+
+int TranslationManager::parseLanguage(const String lang) {
+ int total = po2c_getnumlangs();
+
+ for (int i = 0; i < total; i++) {
+ if (lang == po2c_getlang(i))
+ return i + 1;
+ }
+
+ return kTranslationBuiltinId;
+}
+
+
+const char *TranslationManager::getLangById(int id) {
+ switch (id) {
+ case kTranslationAutodetectId:
+ return "";
+ case kTranslationBuiltinId:
+ return "C";
+ default:
+ return po2c_getlang(id - 1);
+ }
+}
+
+#else // TRANSLATION
+
+// Translation disabled
+
+
+TranslationManager::TranslationManager() {}
+
+TranslationManager::~TranslationManager() {}
+
+void TranslationManager::setLanguage(const char* lang) {}
+
+const char* TranslationManager::getTranslation(const char* message) {
+ return message;
+}
+
+const char* TranslationManager::convertTerm(const char* message) {
+ return message;
+}
+
+#endif // TRANSLATION
+
+} // End of namespace Common
diff --git a/common/translation.h b/common/translation.h
new file mode 100755
index 0000000000..95deb6bb38
--- /dev/null
+++ b/common/translation.h
@@ -0,0 +1,126 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ */
+
+#ifndef COMMON_TRANSLATION_H
+#define COMMON_TRANSLATION_H
+
+#include "common/singleton.h"
+#include "common/str-array.h"
+
+#ifdef TERMCONV
+#include <iconv.h>
+#endif
+
+namespace Common {
+
+enum TranslationIDs {
+ kTranslationAutodetectId = 0,
+ kTranslationBuiltinId = 1000
+};
+
+struct TLanguage {
+ const char *name;
+ int id;
+
+ TLanguage() {
+ name = 0;
+ id = 0;
+ }
+
+ TLanguage(const char *n, int i) {
+ name = n;
+ id = i;
+ }
+};
+
+typedef Array<TLanguage> TLangArray;
+
+/**
+ * Message translation manager.
+ */
+class TranslationManager : public Singleton<TranslationManager> {
+private:
+ char _syslang[6];
+
+#ifdef TERMCONV
+ iconv_t _conversion;
+ char* _convmsg;
+ int _sizeconv;
+
+ bool convert(const char* message);
+#endif // TERMCONV
+
+public:
+ /**
+ * The constructor detects the system language and sets default
+ * language to English.
+ */
+ TranslationManager();
+ ~TranslationManager();
+
+ const char *getLangById(int id);
+
+ /**
+ * Sets the current translation language to the one specified in the
+ * parameter. If the parameter is an empty string, it sets the default
+ * system language.
+ */
+ void setLanguage(const char *);
+ void setLanguage(int id) {
+ setLanguage(getLangById(id));
+ }
+
+ int parseLanguage(const String lang);
+
+ /**
+ * Returns the translation into the current language of the parameter
+ * message. In case the message isn't found in the translation catalog,
+ * it returns the original untranslated message.
+ */
+ const char* getTranslation(const char* message);
+
+ /**
+ * Converts the message into the terminal character set (which may be
+ * different than the GUI's "native" one.
+ */
+ const char* convertTerm(const char* message);
+
+ const TLangArray getSupportedLanguages() const;
+};
+
+} // End of namespace Common
+
+#define TransMan Common::TranslationManager::instance()
+
+#ifdef TRANSLATION
+#define _(str) TransMan.getTranslation(str)
+#define _t(str) TransMan.convertTerm(_(str))
+#else
+#define _(str) str
+#define _t(str) str
+#endif
+
+#define _s(str) str
+
+#endif