Previous 199869 Revisions Next

r45055 Saturday 20th February, 2016 at 21:31:41 UTC by Miodrag Milanović
Added multi-language support for MAME [Miodrag Milanovic]

Added sample language to show display in cyrillic use
mame -lang "Serbian (Cyrillic)"
[/trunk]makefile
[language/Serbian (Cyrillic)]strings.po
[src/emu]clifront.cpp clifront.h emuopts.cpp emuopts.h mame.h
[src/emu/ui]ui.h

trunk/language/Serbian (Cyrillic)/strings.po
r253566r253567
112112
113113#: src/emu/ui/mainmenu.cpp:53
114114msgid "Input (general)"
115msgstr ""
115msgstr "Улази (генерално)"
116116
117117#: src/emu/ui/mainmenu.cpp:55
118118msgid "Input (this Machine)"
119msgstr ""
119msgstr "Улази (ова машина)"
120120
121121#: src/emu/ui/mainmenu.cpp:59
122122msgid "Analog Controls"
123msgstr ""
123msgstr "Аналогне контроле"
124124
125125#: src/emu/ui/mainmenu.cpp:61
126126msgid "Dip Switches"
r253566r253567
128128
129129#: src/emu/ui/mainmenu.cpp:64
130130msgid "Machine Configuration"
131msgstr ""
131msgstr "Конфигурација"
132132
133133#: src/emu/ui/mainmenu.cpp:68
134134msgid "Bookkeeping Info"
r253566r253567
136136
137137#: src/emu/ui/mainmenu.cpp:71
138138msgid "Machine Information"
139msgstr ""
139msgstr "Информације о машини"
140140
141141#: src/emu/ui/mainmenu.cpp:77
142142msgid "Image Information"
143msgstr ""
143msgstr "Информације о датотеци"
144144
145145#: src/emu/ui/mainmenu.cpp:80
146146msgid "File Manager"
147msgstr ""
147msgstr "Менаџер датотека"
148148
149149#: src/emu/ui/mainmenu.cpp:85
150150msgid "Tape Control"
151msgstr ""
151msgstr "Контрола касете"
152152
153153#: src/emu/ui/mainmenu.cpp:90
154154msgid "Pseudo terminals"
155msgstr ""
155msgstr "Псеудо терминал"
156156
157157#: src/emu/ui/mainmenu.cpp:93
158158msgid "Bios Selection"
159msgstr ""
159msgstr "Селекција биоса"
160160
161161#: src/emu/ui/mainmenu.cpp:99
162162msgid "Slot Devices"
163msgstr ""
163msgstr "Слот уређаји"
164164
165165#: src/emu/ui/mainmenu.cpp:106
166166msgid "Barcode Reader"
167msgstr ""
167msgstr "Читач бар кода"
168168
169169#: src/emu/ui/mainmenu.cpp:113
170170msgid "Network Devices"
171msgstr ""
171msgstr "Мрежни уређаји"
172172
173173#: src/emu/ui/mainmenu.cpp:118
174174msgid "Keyboard Mode"
175msgstr ""
175msgstr "Мод тастатуре"
176176
177177#: src/emu/ui/mainmenu.cpp:121
178178msgid "Slider Controls"
179msgstr ""
179msgstr "Клизачи"
180180
181181#: src/emu/ui/mainmenu.cpp:124
182182msgid "Video Options"
183msgstr ""
183msgstr "Видео операције"
184184
185185#: src/emu/ui/mainmenu.cpp:128
186186msgid "Crosshair Options"
r253566r253567
188188
189189#: src/emu/ui/mainmenu.cpp:132
190190msgid "Cheat"
191msgstr ""
191msgstr "Варања"
192192
193193#: src/emu/ui/mainmenu.cpp:136
194194msgid "External DAT View"
r253566r253567
196196
197197#: src/emu/ui/mainmenu.cpp:142
198198msgid "Add To Favorites"
199msgstr ""
199msgstr "Додај у омиљене"
200200
201201#: src/emu/ui/mainmenu.cpp:144
202202msgid "Remove From Favorites"
203msgstr ""
203msgstr "Уклони из омиљених"
204204
205205#: src/emu/ui/mainmenu.cpp:151
206206msgid "Select New Machine"
207msgstr ""
207msgstr "Селектуј нову машину"
trunk/makefile
r253566r253567
13791379
13801380translation:
13811381   $(SILENT) echo Generating mame.pot
1382   $(SILENT) find src/emu/ui -iname "*.cpp" | xargs xgettext --from-code=UTF-8 -k_ -o mame.pot
1382   $(SILENT) find src -iname "*.cpp" | xargs xgettext --from-code=UTF-8 -k_ -o mame.pot
13831383   $(SILENT) echo Afrikaans
13841384   $(SILENT) msgmerge -U "language/Afrikaans/strings.po"                     mame.pot
13851385   $(SILENT) echo Albanian
trunk/src/emu/clifront.cpp
r253566r253567
8989   m_options.remove_device_options();
9090}
9191
92const UINT32 MO_MAGIC         = 0x950412de;
93const UINT32 MO_MAGIC_REVERSED = 0xde120495;
9294
95inline UINT32 endianchange(UINT32 value) {
96   UINT32 b0 = (value >> 0) & 0xff;
97   UINT32 b1 = (value >> 8) & 0xff;
98   UINT32 b2 = (value >> 16) & 0xff;
99   UINT32 b3 = (value >> 24) & 0xff;
100
101   return (b0 << 24) | (b1 << 16) |(b2 << 8) | b3;
102}
103
104static std::unordered_map<std::string, std::string> g_translation;
105
106const char *lang_translate(const char *word)
107{
108   if (g_translation.find(word) == g_translation.end())
109   {
110      return word;
111   }
112   return g_translation[word].c_str();
113}
114
115void cli_frontend::load_translation()
116{   
117   g_translation.empty();
118   emu_file file(m_options.language_path(), OPEN_FLAG_READ);
119   if (file.open(m_options.language(), PATH_SEPARATOR "strings.mo") == FILERR_NONE)
120   {
121      UINT64 size = file.size();
122      UINT32 *buffer = global_alloc_array(UINT32,size / 4 + 1);
123      file.read(buffer, size);
124      file.close();
125
126      if (buffer[0] != MO_MAGIC && buffer[0] != MO_MAGIC_REVERSED)
127      {
128         global_free_array(buffer);
129         return;
130      }
131      if (buffer[0] == MO_MAGIC_REVERSED)
132      {
133         for (auto i = 0; i < (size / 4)+1; ++i)
134         {
135            buffer[i] = endianchange(buffer[i]);
136         }
137      }
138
139      UINT32 number_of_strings = buffer[2];
140      UINT32 original_table_offset = buffer[3] >> 2;
141      UINT32 translation_table_offset = buffer[4] >> 2;
142
143      const char *data = reinterpret_cast<const char*>(buffer);
144
145      for (auto i = 1; i < number_of_strings; ++i)
146      {
147         std::string original = (const char *)data + buffer[original_table_offset + 2 * i + 1];
148         std::string translation= (const char *)data + buffer[translation_table_offset + 2 * i + 1];
149         g_translation.insert(std::pair<std::string, std::string>(original, translation));
150      }
151      global_free_array(buffer);
152   }
153}
154
93155//-------------------------------------------------
94156//  execute - execute a game via the standard
95157//  command line interface
r253566r253567
109171
110172      m_options.parse_standard_inis(option_errors);
111173     
174      load_translation();
175     
112176      manager->start_luaengine();
113177
114178      if (*(m_options.software_name()) != 0)
trunk/src/emu/clifront.h
r253566r253567
3232   cli_frontend(cli_options &options, osd_interface &osd);
3333   ~cli_frontend();
3434
35   void load_translation();
36
3537   // execute based on the incoming argc/argv
3638   int execute(int argc, char **argv);
3739
trunk/src/emu/emuopts.cpp
r253566r253567
4444   { OPTION_CHEATPATH,                                  "cheat",     OPTION_STRING,     "path to cheat files" },
4545   { OPTION_CROSSHAIRPATH,                              "crosshair", OPTION_STRING,     "path to crosshair files" },
4646   { OPTION_PLUGINSPATH,                                "plugins",   OPTION_STRING,     "path to plugin files" },
47   { OPTION_LANGUAGEPATH,                               "language",  OPTION_STRING,     "path to language files" },
4748
4849   // output directory options
4950   { nullptr,                                              nullptr,        OPTION_HEADER,     "CORE OUTPUT DIRECTORY OPTIONS" },
r253566r253567
188189   { OPTION_AUTOBOOT_DELAY,                             "2",         OPTION_INTEGER,    "timer delay in sec to trigger command execution on autoboot" },
189190   { OPTION_AUTOBOOT_SCRIPT ";script",                  nullptr,        OPTION_STRING,     "lua script to execute after machine boot" },
190191   { OPTION_CONSOLE,                                    "0",         OPTION_BOOLEAN,    "enable emulator LUA console" },
192   { OPTION_LANGUAGE ";lang",                           "English",   OPTION_STRING,    "display language" },
191193   { nullptr }
192194};
193195
trunk/src/emu/emuopts.h
r253566r253567
5757#define OPTION_CHEATPATH            "cheatpath"
5858#define OPTION_CROSSHAIRPATH        "crosshairpath"
5959#define OPTION_PLUGINSPATH          "pluginspath"
60#define OPTION_LANGUAGEPATH         "languagepath"
6061
6162// core directory options
6263#define OPTION_CFG_DIRECTORY        "cfg_directory"
r253566r253567
190191
191192#define OPTION_CONSOLE              "console"
192193
194#define OPTION_LANGUAGE             "language"
195
193196//**************************************************************************
194197//  TYPE DEFINITIONS
195198//**************************************************************************
r253566r253567
233236   const char *cheat_path() const { return value(OPTION_CHEATPATH); }
234237   const char *crosshair_path() const { return value(OPTION_CROSSHAIRPATH); }
235238   const char *plugins_path() const { return value(OPTION_PLUGINSPATH); }
239   const char *language_path() const { return value(OPTION_LANGUAGEPATH); }
236240
237241   // core directory options
238242   const char *cfg_directory() const { return value(OPTION_CFG_DIRECTORY); }
r253566r253567
363367   const char *autoboot_script() const { return value(OPTION_AUTOBOOT_SCRIPT); }
364368
365369   bool console() const { return bool_value(OPTION_CONSOLE); }
370   
371   const char *language() const { return value(OPTION_LANGUAGE); }
366372
367373   // FIXME: Couriersud: This should be in image_device_exit
368374   void remove_device_options();
trunk/src/emu/mame.h
r253566r253567
101101};
102102
103103//**************************************************************************
104//  LOCALIZATION SUPPORT
105//**************************************************************************
106
107#define _(param)   lang_translate(param)
108
109extern const char *lang_translate(const char *word);
110
111//**************************************************************************
104112//  GLOBAL VARIABLES
105113//**************************************************************************
106114
trunk/src/emu/ui/ui.h
r253566r253567
8585
8686#define SLIDER_NOCHANGE     0x12345678
8787
88/***************************************************************************
89    FOR FUTURE LOCALIZATION
90***************************************************************************/
91#define _(param)   param
9288
9389/***************************************************************************
9490    TYPE DEFINITIONS


Previous 199869 Revisions Next


© 1997-2024 The MAME Team