void set_language(const language_def& locale) { strings_.clear(); std::string locale_lc; locale_lc.resize(locale.localename.size()); std::transform(locale.localename.begin(),locale.localename.end(),locale_lc.begin(),tolower); current_language = locale; wesnoth_setlocale(LC_COLLATE, locale.localename, &locale.alternates); wesnoth_setlocale(LC_TIME, locale.localename, &locale.alternates); wesnoth_setlocale(LC_MESSAGES, locale.localename, &locale.alternates); load_strings(false); }
bool set_language(const language_def& locale) { strings_.clear(); std::string locale_lc; locale_lc.resize(locale.localename.size()); std::transform(locale.localename.begin(),locale.localename.end(),locale_lc.begin(),tolower); config cfg; current_language = locale; wesnoth_setlocale(LC_MESSAGES, locale.localename, &locale.alternates); wesnoth_setlocale(LC_COLLATE, locale.localename, &locale.alternates); // fill string_table (should be moved somwhere else some day) try { scoped_istream stream = preprocess_file(get_wml_location("hardwired/english.cfg")); read(cfg, *stream); } catch(config::error& e) { std::cerr << "Could not read english.cfg\n"; throw e; } config* langp = cfg.child("language"); if (langp == NULL) { std::cerr << "No [language] block found in english.cfg\n"; return false; } for(string_map::const_iterator j = langp->values.begin(); j != langp->values.end(); ++j) { strings_[j->first] = j->second; } // end of string_table fill // Reset translations for the name of current languages // for (language_list::iterator itor = known_languages.begin(); // itor != known_languages.end(); ++itor) { // // itor->language.reset_translation(); // } return true; }
bool set_language(const language_def& locale) { strings_.clear(); std::string locale_lc; locale_lc.resize(locale.localename.size()); std::transform(locale.localename.begin(),locale.localename.end(),locale_lc.begin(),tolower); config cfg; current_language = locale; wesnoth_setlocale(LC_COLLATE, locale.localename, &locale.alternates); wesnoth_setlocale(LC_TIME, locale.localename, &locale.alternates); wesnoth_setlocale(LC_MESSAGES, locale.localename, &locale.alternates); // fill string_table (should be moved somwhere else some day) try { scoped_istream stream = preprocess_file(get_wml_location("hardwired/english.cfg")); read(cfg, *stream); } catch(config::error& e) { std::cerr << "Could not read english.cfg\n"; throw e; } config &langp = cfg.child("language"); if (!langp) { std::cerr << "No [language] block found in english.cfg\n"; return false; } foreach (const config::attribute &j, langp.attribute_range()) { strings_[j.first] = j.second; } // end of string_table fill return true; }
const language_def& get_locale() { //TODO: Add in support for querying the locale on Windows assert(known_languages.size() != 0); const std::string& prefs_locale = preferences::language(); if(prefs_locale.empty() == false) { wesnoth_setlocale(LC_MESSAGES, prefs_locale, NULL); for(language_list::const_iterator i = known_languages.begin(); i != known_languages.end(); ++i) { if (prefs_locale == i->localename) return *i; } LOG_G << "'" << prefs_locale << "' locale not found in known array; defaulting to system locale\n"; return known_languages[0]; } #if 0 const char* const locale = getenv("LANG"); #ifdef _WIN32 std::string win_locale = locale #include "language_win32.ii" return win_locale; #endif if(locale != NULL && strlen(locale) >= 2) { //we can't pass pointers into the string to the std::string //constructor because some STL implementations don't support //it (*cough* MSVC++6) std::string res(2,'z'); res[0] = tolower(locale[0]); res[1] = tolower(locale[1]); return res; } #endif LOG_G << "locale could not be determined; defaulting to system locale\n"; return known_languages[0]; }