diff options
author | Eugene Sandulenko | 2010-06-15 10:44:51 +0000 |
---|---|---|
committer | Eugene Sandulenko | 2010-06-15 10:44:51 +0000 |
commit | 859212df2523e8b15076d968018dbf98618fd60f (patch) | |
tree | e3f7ff62c58c9ac8a762791c0a1801b75fe1f14a /common/translation.h | |
parent | db6673c408865b201808e01ab5db796f2e794058 (diff) | |
download | scummvm-rg350-859212df2523e8b15076d968018dbf98618fd60f.tar.gz scummvm-rg350-859212df2523e8b15076d968018dbf98618fd60f.tar.bz2 scummvm-rg350-859212df2523e8b15076d968018dbf98618fd60f.zip |
Implement translation support for ScummVM GUI.
Based on patch #2903830: "Updated Translation Prototype" by alexbevi
which in turn is based on patch #1739965 by jvprat.
Currently it builds all translations right into ScummVM. Once the
feature will be accepted more widely, i.e. more translations will
pop up, it will be trivial to move translation strings to external
file.
Finished translation: Russian
Unfinished translation: Hungarian
Things which are nice to do:
- Language code -> language mapping for more user friendness
- Specifying fonts to be used with language
- Updating of interface language without restart. It will require
moving of much code to reflowLayout() methods for each dialog
The .po files must be in single byte encodings. I.e. no support
for Unicode.
svn-id: r49759
Diffstat (limited to 'common/translation.h')
-rwxr-xr-x | common/translation.h | 126 |
1 files changed, 126 insertions, 0 deletions
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 |