diff --git a/base/main.cpp b/base/main.cpp index d2b62123ed8..65800f1164b 100644 --- a/base/main.cpp +++ b/base/main.cpp @@ -697,7 +697,7 @@ extern "C" int scummvm_main(int argc, const char * const argv[]) { #endif Common::SearchManager::destroy(); #ifdef USE_TRANSLATION - Common::TranslationManager::destroy(); + Common::MainTranslationManager::destroy(); #endif MusicManager::destroy(); Graphics::CursorManager::destroy(); diff --git a/common/translation.cpp b/common/translation.cpp index 99b1fdbc7b3..3c5cc5f28ea 100644 --- a/common/translation.cpp +++ b/common/translation.cpp @@ -39,14 +39,14 @@ namespace Common { -DECLARE_SINGLETON(TranslationManager); +DECLARE_SINGLETON(MainTranslationManager); bool operator<(const TLanguage &l, const TLanguage &r) { return l.name < r.name; } -TranslationManager::TranslationManager() : _currentLang(-1) { - loadTranslationsInfoDat(); +TranslationManager::TranslationManager(const Common::String &fileName) : _currentLang(-1) { + loadTranslationsInfoDat(fileName); // Set the default language setLanguage(""); @@ -230,7 +230,7 @@ bool TranslationManager::openTranslationsFile(File &inFile) { // Then try to open it using the SearchMan. ArchiveMemberList fileList; - SearchMan.listMatchingMembers(fileList, "translations.dat"); + SearchMan.listMatchingMembers(fileList, _translationsFileName); for (ArchiveMemberList::iterator it = fileList.begin(); it != fileList.end(); ++it) { ArchiveMember const &m = **it; SeekableReadStream *const stream = m.createReadStream(); @@ -251,7 +251,7 @@ bool TranslationManager::openTranslationsFile(const FSNode &node, File &inFile, // Check if we can find the file in this directory // Since File::open(FSNode) makes all the needed tests, it is not really // necessary to make them here. But it avoid printing warnings. - FSNode fileNode = node.getChild("translations.dat"); + FSNode fileNode = node.getChild(_translationsFileName); if (fileNode.exists() && fileNode.isReadable() && !fileNode.isDirectory()) { if (inFile.open(fileNode)) { if (checkHeader(inFile)) @@ -278,10 +278,11 @@ bool TranslationManager::openTranslationsFile(const FSNode &node, File &inFile, return false; } -void TranslationManager::loadTranslationsInfoDat() { +void TranslationManager::loadTranslationsInfoDat(const Common::String &name) { File in; + _translationsFileName = name; if (!openTranslationsFile(in)) { - warning("You are missing a valid 'translations.dat' file. GUI translation will not be available"); + warning("You are missing a valid '%s' file. GUI translation will not be available", name.c_str()); return; } diff --git a/common/translation.h b/common/translation.h index 5cd8f6b16b5..5662454434d 100644 --- a/common/translation.h +++ b/common/translation.h @@ -85,14 +85,14 @@ struct PoMessageEntry { /** * Message translation manager. */ -class TranslationManager : public Singleton { +class TranslationManager : public NonCopyable { public: /** * Constructor that sets the current language to the default language. * * The default language is the detected system language. */ - TranslationManager(); + TranslationManager(const Common::String &fileName); ~TranslationManager(); /** @@ -221,7 +221,7 @@ private: /** * Load the list of languages from the translations.dat file. */ - void loadTranslationsInfoDat(); + void loadTranslationsInfoDat(const Common::String &name); /** * Load the translation for the given language from the translations.dat file. @@ -242,13 +242,20 @@ private: Array _currentTranslationMessages; String _currentCharset; int _currentLang; + Common::String _translationsFileName; +}; + +class MainTranslationManager : public TranslationManager, public Singleton { +public: + MainTranslationManager() : TranslationManager("translations.dat") {} + ~MainTranslationManager() {} }; /** @} */ } // End of namespace Common -#define TransMan Common::TranslationManager::instance() +#define TransMan Common::MainTranslationManager::instance() #define _(str) TransMan.getTranslation(str) #define _c(str, context) TransMan.getTranslation(str, context) diff --git a/devtools/create_translations/create_translations.cpp b/devtools/create_translations/create_translations.cpp index db6af5b3ac6..713387588e4 100644 --- a/devtools/create_translations/create_translations.cpp +++ b/devtools/create_translations/create_translations.cpp @@ -110,7 +110,7 @@ int main(int argc, char *argv[]) { PoMessageList messageIds; std::vector translations; int numLangs = 0; - for (int i = 1; i < argc; ++i) { + for (int i = 2; i < argc; ++i) { // Check file extension int len = strlen(argv[i]); if (scumm_stricmp(argv[i] + len - 2, "po") == 0) { @@ -124,7 +124,7 @@ int main(int argc, char *argv[]) { if (!numLangs) { fprintf(stderr, "ERROR: No valid translation files\n"); - fprintf(stderr, "usage: create_translations lang1.po [lang2.po ...]\n"); + fprintf(stderr, "usage: create_translations OUTPUT lang1.po [lang2.po ...]\n"); return -1; } @@ -147,7 +147,7 @@ int main(int argc, char *argv[]) { // for (i = 0; i < DATAALIGNMENT; i++) // padBuf[i] = 0; - outFile = fopen("translations.dat", "wb"); + outFile = fopen(argv[1], "wb"); // Write header fwrite("TRANSLATIONS", 12, 1, outFile); diff --git a/po/module.mk b/po/module.mk index e9b885be3bc..87105f10a8f 100644 --- a/po/module.mk +++ b/po/module.mk @@ -36,7 +36,7 @@ updatepot: fi; translations-dat: devtools/create_translations - devtools/create_translations/create_translations $(POFILES) + devtools/create_translations/create_translations translations.dat $(POFILES) mv translations.dat $(srcdir)/gui/themes/ update-translations: updatepot $(POFILES) translations-dat