From f2410b0d04ee7b8816f4610a19d825499a50828a Mon Sep 17 00:00:00 2001 From: WrinklyNinja Date: Tue, 4 Feb 2014 19:58:30 +0000 Subject: [PATCH] More language support refactoring. --- src/backend/helpers.cpp | 55 +++++++++++++++-------------------------- src/backend/helpers.h | 12 +++++++++ src/gui/editor.cpp | 9 +++---- src/gui/settings.cpp | 9 +++---- 4 files changed, 40 insertions(+), 45 deletions(-) diff --git a/src/backend/helpers.cpp b/src/backend/helpers.cpp index ff3cd389..f0999d5e 100644 --- a/src/backend/helpers.cpp +++ b/src/backend/helpers.cpp @@ -232,9 +232,27 @@ namespace boss { return "file:///" + file.string(); //Seems that we don't need to worry about encoding, tested with Unicode paths. } - Language::Language(const unsigned int code) : _code(code) { + Language::Language(const unsigned int code) { + Construct(_code); + } + + Language::Language(const std::string& nameOrISOCode) { + if (nameOrISOCode == "English" || nameOrISOCode == "eng") + Construct(g_lang_english); + else if (nameOrISOCode == "Español" || nameOrISOCode == "spa") + Construct(g_lang_spanish); + else if (nameOrISOCode == "Русский" || nameOrISOCode == "rus") + Construct(g_lang_russian); + else if (nameOrISOCode == "Français" || nameOrISOCode == "fra") + Construct(g_lang_french); + else + Construct(g_lang_any); + } + + void Language::Construct(const unsigned int code) { + _code = code; if (_code == g_lang_any) { - _name = "None Specified"; + _name = boost::locale::translate("None Specified"); _isoCode = ""; _locale = "en.UTF-8"; } @@ -260,39 +278,6 @@ namespace boss { } } - Language::Language(const std::string& nameOrISOCode) { - if (nameOrISOCode == "English" || nameOrISOCode == "eng") { - _name = "English"; - _isoCode = "eng"; - _code = g_lang_english; - _locale = "en.UTF-8"; - } - else if (nameOrISOCode == "Español" || nameOrISOCode == "spa") { - _name = "Español"; - _isoCode = "spa"; - _code = g_lang_spanish; - _locale = "es.UTF-8"; - } - else if (nameOrISOCode == "Русский" || nameOrISOCode == "rus") { - _name = "Русский"; - _isoCode = "rus"; - _code = g_lang_russian; - _locale = "ru.UTF-8"; - } - else if (nameOrISOCode == "Français" || nameOrISOCode == "fra") { - _name = "Français"; - _isoCode = "fra"; - _code = g_lang_french; - _locale = "fr.UTF-8"; - } - else { - _name = boost::locale::translate("None Specified"); - _isoCode = ""; - _code = g_lang_any; - _locale = "en.UTF-8"; - } - } - unsigned int Language::Code() const { return _code; } diff --git a/src/backend/helpers.h b/src/backend/helpers.h index 728467b8..41267a99 100644 --- a/src/backend/helpers.h +++ b/src/backend/helpers.h @@ -75,11 +75,23 @@ namespace boss { std::string Name() const; std::string ISOCode() const; std::string Locale() const; + + static std::vector Names() { + std::vector vec; + vec.push_back(Language(g_lang_any).Name()); + vec.push_back(Language(g_lang_english).Name()); + vec.push_back(Language(g_lang_spanish).Name()); + vec.push_back(Language(g_lang_russian).Name()); + vec.push_back(Language(g_lang_french).Name()); + return vec; + } private: unsigned int _code; std::string _isoCode; std::string _name; std::string _locale; + + void Construct(const unsigned int code); }; //Version class for more robust version comparisons. diff --git a/src/gui/editor.cpp b/src/gui/editor.cpp index 3357fb85..7e264d02 100644 --- a/src/gui/editor.cpp +++ b/src/gui/editor.cpp @@ -1034,11 +1034,10 @@ wxString FileEditDialog::GetCondition() const { MessageEditDialog::MessageEditDialog(wxWindow *parent, const wxString& title) : wxDialog(parent, wxID_ANY, title, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER) { wxArrayString languages; - languages.Add(FromUTF8(boss::Language(boss::g_lang_any).Name())); - languages.Add(FromUTF8(boss::Language(boss::g_lang_english).Name())); - languages.Add(FromUTF8(boss::Language(boss::g_lang_spanish).Name())); - languages.Add(FromUTF8(boss::Language(boss::g_lang_russian).Name())); - languages.Add(FromUTF8(boss::Language(boss::g_lang_french).Name())); + vector langs = boss::Language::Names(); + for (size_t i = 0; i < langs.size(); i++) { + languages.Add(FromUTF8(langs[i])); + } //Initialise controls. _type = new wxChoice(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 3, Type); diff --git a/src/gui/settings.cpp b/src/gui/settings.cpp index c2d19ccf..f4b98dbb 100644 --- a/src/gui/settings.cpp +++ b/src/gui/settings.cpp @@ -51,11 +51,10 @@ SettingsFrame::SettingsFrame(wxWindow *parent, const wxString& title, YAML::Node } wxArrayString languages; - languages.Add(FromUTF8(boss::Language(boss::g_lang_any).Name())); - languages.Add(FromUTF8(boss::Language(boss::g_lang_english).Name())); - languages.Add(FromUTF8(boss::Language(boss::g_lang_spanish).Name())); - languages.Add(FromUTF8(boss::Language(boss::g_lang_russian).Name())); - languages.Add(FromUTF8(boss::Language(boss::g_lang_french).Name())); + vector langs = boss::Language::Names(); + for (size_t i = 0; i < langs.size(); i++) { + languages.Add(FromUTF8(langs[i])); + } //Initialise controls. GameChoice = new wxChoice(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, Games);