Author: elias
Date: Thu Apr 12 17:45:19 2007
New Revision: 16783

URL: http://svn.gna.org/viewcvs/wesnoth?rev=16783&view=rev
Log:
backported revision 16723 from trunk (setlocale now tries .utf8 versions and 
other alternates)

Modified:
    branches/1.2/data/languages/de_DE.cfg
    branches/1.2/src/language.cpp
    branches/1.2/src/language.hpp

Modified: branches/1.2/data/languages/de_DE.cfg
URL: 
http://svn.gna.org/viewcvs/wesnoth/branches/1.2/data/languages/de_DE.cfg?rev=16783&r1=16782&r2=16783&view=diff
==============================================================================
--- branches/1.2/data/languages/de_DE.cfg (original)
+++ branches/1.2/data/languages/de_DE.cfg Thu Apr 12 17:45:19 2007
@@ -1,4 +1,5 @@
 [locale]
        name="Deutsch"
        locale=de_DE
+       alternates=de_LI, de_LU, de_CH, de_AT
 [/locale]

Modified: branches/1.2/src/language.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/branches/1.2/src/language.cpp?rev=16783&r1=16782&r2=16783&view=diff
==============================================================================
--- branches/1.2/src/language.cpp (original)
+++ branches/1.2/src/language.cpp Thu Apr 12 17:45:19 2007
@@ -105,7 +105,8 @@
        config::const_child_itors langs = cfg.child_range("locale");
        for(;langs.first != langs.second; ++langs.first) {
                known_languages.push_back(
-                       language_def((**langs.first)["locale"], 
(**langs.first)["name"], (**langs.first)["dir"]));
+                       language_def((**langs.first)["locale"], 
(**langs.first)["name"], (**langs.first)["dir"],
+                               (**langs.first)["alternates"]));
        }
 
        return true;
@@ -116,7 +117,8 @@
        return known_languages;
 }
 
-static void wesnoth_setlocale(int category, std::string const &slocale)
+static void wesnoth_setlocale(int category, std::string const &slocale,
+       std::vector<std::string> const *alternates)
 {
        char const *locale = slocale.c_str();
        // FIXME: ideally we should check LANGUAGE and on first invocation
@@ -171,12 +173,29 @@
                locale = xlocale.c_str();
        }
 #endif
-       char* res = setlocale (category, locale);
+
+       char *res = NULL;
+       char const *try_loc = locale;
+       std::vector<std::string>::const_iterator i;
+       if (alternates) i = alternates->begin();
+       while (true) {
+               res = setlocale(category, try_loc);
+               if (res) break;
+               std::string utf8 = std::string(try_loc) + std::string(".utf8");
+               try_loc = utf8.c_str();
+               res = setlocale(category, try_loc);
+               if (res) break;
+               if (!alternates) break;
+               if (i == alternates->end()) break;
+               try_loc = i->c_str();
+               i++;
+       }
+
        if (res == NULL)
                std::cerr << "WARNING: setlocale() failed for "
                          << locale << ".\n";
        else
-               std::cerr << "set locale to " << locale << "\n";
+               std::cerr << "set locale to " << try_loc << "\n";
 }
 
 bool set_language(const language_def& locale)
@@ -190,7 +209,9 @@
        config cfg;
 
        current_language = locale;
-       wesnoth_setlocale(LC_MESSAGES, locale.localename);
+
+       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 {
@@ -232,7 +253,7 @@
 
        const std::string& prefs_locale = preferences::language();
        if(prefs_locale.empty() == false) {
-               wesnoth_setlocale(LC_MESSAGES, prefs_locale);
+               wesnoth_setlocale(LC_MESSAGES, prefs_locale, NULL);
                for(std::vector<language_def>::const_iterator i = 
known_languages.begin();
                                i != known_languages.end(); ++i) {
                        if (prefs_locale == i->localename)

Modified: branches/1.2/src/language.hpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/branches/1.2/src/language.hpp?rev=16783&r1=16782&r2=16783&view=diff
==============================================================================
--- branches/1.2/src/language.hpp (original)
+++ branches/1.2/src/language.hpp Thu Apr 12 17:45:19 2007
@@ -14,6 +14,7 @@
 #define LANGUAGE_HPP_INCLUDED
 
 #include "tstring.hpp"
+#include "serialization/string_utils.hpp"
 
 #include <map>
 #include <string>
@@ -28,10 +29,14 @@
 struct language_def
 {
        language_def() {}
-       language_def(const std::string& name, const t_string& lang, const 
std::string& dir) :
+       language_def(const std::string& name, const t_string& lang, const 
std::string& dir,
+           const std::string &salternates = "") :
                localename(name), language(lang), rtl(dir == "rtl")
-       {}
+       {
+            alternates = utils::split(salternates);
+        }
        std::string localename;
+       std::vector<std::string> alternates;
        t_string language;
        bool rtl;               // A right to left language? (e.g: Hebrew)
        bool operator== (const language_def&) const;


_______________________________________________
Wesnoth-commits mailing list
[EMAIL PROTECTED]
https://mail.gna.org/listinfo/wesnoth-commits

Reply via email to