mirror of
https://github.com/loot/libloot.git
synced 2026-07-27 14:16:01 -07:00
Trying a class for the various language parameters.
This commit is contained in:
@@ -661,7 +661,7 @@ namespace YAML {
|
||||
inline Emitter& operator << (Emitter& out, const boss::MessageContent& rhs) {
|
||||
out << BeginMap;
|
||||
|
||||
out << Key << "lang" << Value << boss::GetLangString(rhs.Language());
|
||||
out << Key << "lang" << Value << boss::Language(rhs.Language()).ISOCode();
|
||||
|
||||
out << Key << "str" << Value << rhs.Str();
|
||||
|
||||
|
||||
+59
-22
@@ -232,30 +232,67 @@ namespace boss {
|
||||
return "file:///" + file.string(); //Seems that we don't need to worry about encoding, tested with Unicode paths.
|
||||
}
|
||||
|
||||
std::string GetLangString(const unsigned int num) {
|
||||
if (num == g_lang_english)
|
||||
return "eng";
|
||||
else if (num == g_lang_spanish)
|
||||
return "spa";
|
||||
else if (num == g_lang_russian)
|
||||
return "rus";
|
||||
else if (num == g_lang_french)
|
||||
return "fra";
|
||||
else
|
||||
return "";
|
||||
Language::Language(const unsigned int code) : _code(code) {
|
||||
if (_code == g_lang_any) {
|
||||
_name = "None Specified";
|
||||
_isoCode = "";
|
||||
}
|
||||
else if (_code == g_lang_english) {
|
||||
_name = "English";
|
||||
_isoCode = "eng";
|
||||
}
|
||||
else if (_code == g_lang_spanish) {
|
||||
_name = "Español";
|
||||
_isoCode = "spa";
|
||||
}
|
||||
else if (_code == g_lang_russian) {
|
||||
_name = "Русский";
|
||||
_isoCode = "rus";
|
||||
}
|
||||
else if (_code == g_lang_french) {
|
||||
_name = "Français";
|
||||
_isoCode = "fra";
|
||||
}
|
||||
}
|
||||
|
||||
unsigned int GetLangNum(const std::string& str) {
|
||||
if (boost::iequals(str, "eng"))
|
||||
return g_lang_english;
|
||||
else if (boost::iequals(str, "spa"))
|
||||
return g_lang_spanish;
|
||||
else if (boost::iequals(str, "rus"))
|
||||
return g_lang_russian;
|
||||
else if (boost::iequals(str, "fra"))
|
||||
return g_lang_french;
|
||||
else
|
||||
return g_lang_any;
|
||||
Language::Language(const std::string& nameOrISOCode) {
|
||||
if (nameOrISOCode == "English" || nameOrISOCode == "eng") {
|
||||
_name = "English";
|
||||
_isoCode = "eng";
|
||||
_code = g_lang_english;
|
||||
}
|
||||
else if (nameOrISOCode == "Español" || nameOrISOCode == "spa") {
|
||||
_name = "Español";
|
||||
_isoCode = "spa";
|
||||
_code = g_lang_english;
|
||||
}
|
||||
else if (nameOrISOCode == "Русский" || nameOrISOCode == "rus") {
|
||||
_name = "Русский";
|
||||
_isoCode = "rus";
|
||||
_code = g_lang_english;
|
||||
}
|
||||
else if (nameOrISOCode == "Français" || nameOrISOCode == "fra") {
|
||||
_name = "Français";
|
||||
_isoCode = "fra";
|
||||
_code = g_lang_french;
|
||||
}
|
||||
else {
|
||||
_name = "None Specified";
|
||||
_isoCode = "";
|
||||
_code = g_lang_any;
|
||||
}
|
||||
}
|
||||
|
||||
unsigned int Language::Code() const {
|
||||
return _code;
|
||||
}
|
||||
|
||||
std::string Language::Name() const {
|
||||
return _name;
|
||||
}
|
||||
|
||||
std::string Language::ISOCode() const {
|
||||
return _isoCode;
|
||||
}
|
||||
|
||||
|
||||
|
||||
+14
-3
@@ -65,9 +65,20 @@ namespace boss {
|
||||
//Turns an absolute filesystem path into a valid file:// URL.
|
||||
std::string ToFileURL(const boost::filesystem::path& file);
|
||||
|
||||
//Converts between BOSS's global const value and the ISO 639-3 value for a language.
|
||||
std::string GetLangString(const unsigned int num);
|
||||
unsigned int GetLangNum(const std::string& str);
|
||||
//Language class for simpler language support.
|
||||
class Language {
|
||||
public:
|
||||
Language(const unsigned int code);
|
||||
Language(const std::string& nameOrISOCode);
|
||||
|
||||
unsigned int Code() const;
|
||||
std::string Name() const;
|
||||
std::string ISOCode() const;
|
||||
private:
|
||||
unsigned int _code;
|
||||
std::string _isoCode;
|
||||
std::string _name;
|
||||
};
|
||||
|
||||
//Version class for more robust version comparisons.
|
||||
class Version {
|
||||
|
||||
@@ -154,7 +154,7 @@ namespace YAML {
|
||||
static Node encode(const boss::MessageContent& rhs) {
|
||||
Node node;
|
||||
node["str"] = rhs.Str();
|
||||
node["lang"] = boss::GetLangString(rhs.Language());
|
||||
node["lang"] = boss::Language(rhs.Language()).ISOCode();
|
||||
|
||||
return node;
|
||||
}
|
||||
@@ -164,7 +164,7 @@ namespace YAML {
|
||||
return false;
|
||||
|
||||
std::string str = node["str"].as<std::string>();
|
||||
unsigned int lang = boss::GetLangNum(node["lang"].as<std::string>());
|
||||
unsigned int lang = boss::Language(node["lang"].as<std::string>()).Code();
|
||||
|
||||
rhs = boss::MessageContent(str, lang);
|
||||
|
||||
|
||||
+14
-7
@@ -103,7 +103,7 @@ wxString MessageList::OnGetItemText(long item, long column) const {
|
||||
} else if (column == 2) {
|
||||
return FromUTF8(_messages[item].Condition());
|
||||
} else {
|
||||
return Language[ GetLangIndex(boss::GetLangString(_messages[item].ChooseContent(_language).Language())) ];
|
||||
return FromUTF8(boss::Language(_messages[item].ChooseContent(_language).Language()).Name());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1033,9 +1033,16 @@ 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()));
|
||||
|
||||
//Initialise controls.
|
||||
_type = new wxChoice(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 3, Type);
|
||||
_language = new wxChoice(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, LanguageSize, Language);
|
||||
_language = new wxChoice(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, languages);
|
||||
|
||||
_condition = new wxTextCtrl(this, wxID_ANY);
|
||||
_str = new wxTextCtrl(this, wxID_ANY);
|
||||
@@ -1130,7 +1137,7 @@ void MessageEditDialog::SetMessage(const boss::Message& message) {
|
||||
|
||||
vector<boss::MessageContent> contents = message.Content();
|
||||
for (size_t i=0, max=contents.size(); i < max; ++i) {
|
||||
_content->InsertItem(i, Language[ GetLangIndex(boss::GetLangString(contents[i].Language())) ]);
|
||||
_content->InsertItem(i, FromUTF8(boss::Language(contents[i].Language()).Name()));
|
||||
_content->SetItem(i, 1, FromUTF8(contents[i].Str()));
|
||||
}
|
||||
}
|
||||
@@ -1152,7 +1159,7 @@ boss::Message MessageEditDialog::GetMessage() const {
|
||||
for (size_t i=0, max=_content->GetItemCount(); i < max; ++i) {
|
||||
|
||||
string str = string(_content->GetItemText(i, 1).ToUTF8());
|
||||
unsigned int lang = GetLangIndex(_content->GetItemText(i, 0));
|
||||
unsigned int lang = boss::Language(string(_content->GetItemText(i, 0).ToUTF8())).Code();
|
||||
|
||||
contents.push_back(boss::MessageContent(str, lang));
|
||||
}
|
||||
@@ -1161,7 +1168,7 @@ boss::Message MessageEditDialog::GetMessage() const {
|
||||
}
|
||||
|
||||
void MessageEditDialog::OnSelect(wxListEvent& event) {
|
||||
_language->SetSelection(GetLangIndex(_content->GetItemText(event.GetIndex(), 0)));
|
||||
_language->SetSelection(boss::Language(string(_content->GetItemText(event.GetIndex(), 0).ToUTF8())).Code());
|
||||
_str->SetValue(_content->GetItemText(event.GetIndex(), 1));
|
||||
editBtn->Enable(true);
|
||||
removeBtn->Enable(true);
|
||||
@@ -1169,7 +1176,7 @@ void MessageEditDialog::OnSelect(wxListEvent& event) {
|
||||
|
||||
void MessageEditDialog::OnAdd(wxCommandEvent& event) {
|
||||
long i = _content->GetItemCount();
|
||||
_content->InsertItem(i, Language[_language->GetSelection()]);
|
||||
_content->InsertItem(i, FromUTF8(boss::Language(_language->GetSelection()).Name()));
|
||||
_content->SetItem(i, 1, _str->GetValue());
|
||||
}
|
||||
|
||||
@@ -1184,7 +1191,7 @@ void MessageEditDialog::OnEdit(wxCommandEvent& event) {
|
||||
return;
|
||||
}
|
||||
long i = _content->GetFirstSelected();
|
||||
_content->SetItem(i, 0, Language[_language->GetSelection()]);
|
||||
_content->SetItem(i, 0, FromUTF8(boss::Language(_language->GetSelection()).Name()));
|
||||
_content->SetItem(i, 1, _str->GetValue());
|
||||
}
|
||||
|
||||
|
||||
+1
-51
@@ -27,14 +27,6 @@
|
||||
#include <boost/algorithm/string.hpp>
|
||||
#include <boost/locale.hpp>
|
||||
|
||||
const wxString Language[LanguageSize] = {
|
||||
translate("None Specified"),
|
||||
wxT("English"),
|
||||
wxString::FromUTF8("Español"),
|
||||
wxString::FromUTF8("Русский"),
|
||||
wxString::FromUTF8("Français"),
|
||||
};
|
||||
|
||||
wxString translate(const std::string& str) {
|
||||
return wxString::FromUTF8(boost::locale::translate(str).str().c_str());
|
||||
}
|
||||
@@ -45,46 +37,4 @@ wxString FromUTF8(const std::string& str) {
|
||||
|
||||
wxString FromUTF8(const boost::format& f) {
|
||||
return FromUTF8(f.str());
|
||||
}
|
||||
|
||||
unsigned int GetLangIndex(const std::string& str) {
|
||||
if (boost::iequals(str, "eng"))
|
||||
return 1;
|
||||
else if (boost::iequals(str, "spa"))
|
||||
return 2;
|
||||
else if (boost::iequals(str, "rus"))
|
||||
return 3;
|
||||
else if (boost::iequals(str, "fra"))
|
||||
return 4;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
std::string GetLangStringFromIndex(const unsigned int index) {
|
||||
if (index == 1)
|
||||
return "eng";
|
||||
else if (index == 2)
|
||||
return "spa";
|
||||
else if (index == 3)
|
||||
return "rus";
|
||||
else if (index == 4)
|
||||
return "fra";
|
||||
else
|
||||
return "";
|
||||
}
|
||||
|
||||
unsigned int GetLangNum(const wxString& str) {
|
||||
for (int i = 0; i < LanguageSize; ++i) {
|
||||
if (str == Language[i])
|
||||
return GetLangNum(GetLangStringFromIndex(i));
|
||||
}
|
||||
return boss::g_lang_any;
|
||||
}
|
||||
|
||||
unsigned int GetLangIndex(const wxString& str) {
|
||||
for (int i = 0; i < LanguageSize; ++i) {
|
||||
if (str == Language[i])
|
||||
return i;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@@ -74,26 +74,10 @@ enum {
|
||||
BUTTON_MoveDown,
|
||||
};
|
||||
|
||||
const unsigned int LanguageSize = 5;
|
||||
|
||||
extern const wxString Language[LanguageSize];
|
||||
|
||||
wxString translate(const std::string& str);
|
||||
|
||||
wxString FromUTF8(const std::string& str);
|
||||
|
||||
wxString FromUTF8(const boost::format& f);
|
||||
|
||||
//Get the index in the above array of the language corresponding to a given ISO 639-3 code.
|
||||
unsigned int GetLangIndex(const std::string& str);
|
||||
|
||||
//Get the index in the above array of one of its strings.
|
||||
unsigned int GetLangIndex(const wxString& str);
|
||||
|
||||
//Get the ISO 639-3 code corresponding to the language at a given index in the above array.
|
||||
std::string GetLangStringFromIndex(const unsigned int index);
|
||||
|
||||
//Get the BOSS constant for the language string in the above array.
|
||||
unsigned int GetLangNum(const wxString& str);
|
||||
|
||||
#endif
|
||||
|
||||
+2
-2
@@ -568,7 +568,7 @@ void Launcher::OnSortPlugins(wxCommandEvent& event) {
|
||||
//Set language.
|
||||
unsigned int lang;
|
||||
if (_settings["Language"])
|
||||
lang = GetLangNum(_settings["Language"].as<string>());
|
||||
lang = Language(_settings["Language"].as<string>()).Code();
|
||||
else
|
||||
lang = boss::g_lang_any;
|
||||
|
||||
@@ -926,7 +926,7 @@ void Launcher::OnEditMetadata(wxCommandEvent& event) {
|
||||
//Set language.
|
||||
unsigned int lang;
|
||||
if (_settings["Language"])
|
||||
lang = GetLangNum(_settings["Language"].as<string>());
|
||||
lang = Language(_settings["Language"].as<string>()).Code();
|
||||
else
|
||||
lang = boss::g_lang_any;
|
||||
|
||||
|
||||
+11
-3
@@ -22,6 +22,7 @@
|
||||
*/
|
||||
|
||||
#include "settings.h"
|
||||
#include "../backend/helpers.h"
|
||||
#include "../backend/globals.h"
|
||||
#include <boost/algorithm/string.hpp>
|
||||
#include <boost/log/trivial.hpp>
|
||||
@@ -49,9 +50,16 @@ SettingsFrame::SettingsFrame(wxWindow *parent, const wxString& title, YAML::Node
|
||||
Games.Add(FromUTF8(_games[i].Name()));
|
||||
}
|
||||
|
||||
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()));
|
||||
|
||||
//Initialise controls.
|
||||
GameChoice = new wxChoice(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, Games);
|
||||
LanguageChoice = new wxChoice(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, LanguageSize, Language);
|
||||
LanguageChoice = new wxChoice(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, languages);
|
||||
DebugVerbosityChoice = new wxChoice(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 4, DebugVerbosity);
|
||||
|
||||
gamesList = new wxListView(this, LIST_Games, wxDefaultPosition, wxDefaultSize, wxLC_REPORT|wxLC_SINGLE_SEL);
|
||||
@@ -146,7 +154,7 @@ void SettingsFrame::SetDefaultValues() {
|
||||
BOOST_LOG_TRIVIAL(debug) << "Setting default values for BOSS's settings.";
|
||||
|
||||
if (_settings["Language"]) {
|
||||
LanguageChoice->SetSelection(GetLangIndex(_settings["Language"].as<string>()));
|
||||
LanguageChoice->SetSelection(boss::Language(_settings["Language"].as<string>()).Code());
|
||||
}
|
||||
|
||||
if (_settings["Game"]) {
|
||||
@@ -202,7 +210,7 @@ void SettingsFrame::OnQuit(wxCommandEvent& event) {
|
||||
else
|
||||
_settings["Game"] = _games[GameChoice->GetSelection() - 1].FolderName();
|
||||
|
||||
_settings["Language"] = GetLangStringFromIndex(LanguageChoice->GetSelection());
|
||||
_settings["Language"] = boss::Language(LanguageChoice->GetSelection()).ISOCode();
|
||||
|
||||
_settings["Debug Verbosity"] = DebugVerbosityChoice->GetSelection();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user