From 45d8c07fc2f6c76f51b9a9667a7cfc3fb27aa6ca Mon Sep 17 00:00:00 2001 From: Mark de Wever Date: Sat, 5 Jul 2008 09:19:55 +0000 Subject: [PATCH] Languages in the language selection are now sorted on name instead of code. Based on a patch by stikonas who also spotted the not sorted problem. --- changelog | 2 ++ data/languages/ar_AR.cfg | 1 + data/languages/bg_BG.cfg | 1 + data/languages/el_GR.cfg | 1 + data/languages/he_IL.cfg | 1 + data/languages/ja_JP.cfg | 1 + data/languages/ko_KR.cfg | 5 +++-- data/languages/mk_MK.cfg | 1 + data/languages/nb_NO.cfg | 4 ++-- data/languages/ru_RU.cfg | 1 + data/languages/tl_PH.cfg | 4 ++-- data/languages/zh_CN.cfg | 1 + data/languages/zh_TW.cfg | 1 + src/language.cpp | 7 +++++-- src/language.hpp | 13 +++++++++---- 15 files changed, 32 insertions(+), 12 deletions(-) diff --git a/changelog b/changelog index 5496816a7b0..a0257c42233 100644 --- a/changelog +++ b/changelog @@ -10,6 +10,8 @@ Version 1.5.1+svn: * new translation: Latvian * updated translations: Arabic, Finnish, French, German, Greek, Lithuanian, Serbian + * languages in the language selection are now sorted on name instead of + code. * WML engine: * When examining stored units, now the attacks, max_hitpoints, max_moves, and max_experience are the "real" values and can also be modified. diff --git a/data/languages/ar_AR.cfg b/data/languages/ar_AR.cfg index 6287ae75d40..c982ac7dc66 100644 --- a/data/languages/ar_AR.cfg +++ b/data/languages/ar_AR.cfg @@ -1,5 +1,6 @@ [locale] name="العربية (Arabic)" + sort_name = "Arabic" locale=ar_AR alternates=ar_AE, ar_BH, ar_DZ, ar_EG, ar_IN, ar_IQ, ar_JO, ar_KW, ar_LB, ar_LY, ar_MA, ar_OM, ar_QA, ar_SA, ar_SD, ar_SY, ar_TN, ar_YE dir=rtl diff --git a/data/languages/bg_BG.cfg b/data/languages/bg_BG.cfg index fcf57350cc2..37e8a4b5935 100644 --- a/data/languages/bg_BG.cfg +++ b/data/languages/bg_BG.cfg @@ -1,4 +1,5 @@ [locale] name="Български (Bulgarski)" + sort_name = "Bulgarski" locale=bg_BG [/locale] diff --git a/data/languages/el_GR.cfg b/data/languages/el_GR.cfg index b19e9f159b8..c1c5a2f9cc6 100644 --- a/data/languages/el_GR.cfg +++ b/data/languages/el_GR.cfg @@ -1,4 +1,5 @@ [locale] name="Ελληνικά (Ellinika)" + sort_name = "Ellinika" locale=el_GR [/locale] diff --git a/data/languages/he_IL.cfg b/data/languages/he_IL.cfg index 6d01b918cb9..e92e8002260 100644 --- a/data/languages/he_IL.cfg +++ b/data/languages/he_IL.cfg @@ -1,5 +1,6 @@ [locale] name="עברית (Hebrew)" + sort_name = "Hebrew" locale=he_IL dir=rtl [/locale] diff --git a/data/languages/ja_JP.cfg b/data/languages/ja_JP.cfg index 952f48362b1..09e8b6ec80f 100644 --- a/data/languages/ja_JP.cfg +++ b/data/languages/ja_JP.cfg @@ -1,4 +1,5 @@ [locale] name="日本語 (Nihongo)" + sort_name = "Nihongo" locale=ja_JP [/locale] diff --git a/data/languages/ko_KR.cfg b/data/languages/ko_KR.cfg index 8e428945ebf..cf3fb243fe5 100644 --- a/data/languages/ko_KR.cfg +++ b/data/languages/ko_KR.cfg @@ -1,4 +1,5 @@ [locale] - name="한국어 (Korean)" - locale=ko_KR + name="한국어 (Korean)" + sort_name = "Korean" + locale=ko_KR [/locale] diff --git a/data/languages/mk_MK.cfg b/data/languages/mk_MK.cfg index 6957c43d6e1..e45a25ac649 100644 --- a/data/languages/mk_MK.cfg +++ b/data/languages/mk_MK.cfg @@ -1,4 +1,5 @@ [locale] name="Македонски (Makedonski)" + sort_name = "Makedonski" locale=mk_MK [/locale] diff --git a/data/languages/nb_NO.cfg b/data/languages/nb_NO.cfg index 8f789cf4290..726fb910b66 100644 --- a/data/languages/nb_NO.cfg +++ b/data/languages/nb_NO.cfg @@ -1,4 +1,4 @@ [locale] -name="Norsk bokmål" -locale=nb_NO + name="Norsk bokmål" + locale=nb_NO [/locale] diff --git a/data/languages/ru_RU.cfg b/data/languages/ru_RU.cfg index 051f37f2e7a..d7b4da2d478 100644 --- a/data/languages/ru_RU.cfg +++ b/data/languages/ru_RU.cfg @@ -1,4 +1,5 @@ [locale] name="Русский (Russkij)" + sort_name = "Russkij" locale=ru_RU [/locale] diff --git a/data/languages/tl_PH.cfg b/data/languages/tl_PH.cfg index f9f0fab6b5c..c2eba7cae39 100644 --- a/data/languages/tl_PH.cfg +++ b/data/languages/tl_PH.cfg @@ -1,4 +1,4 @@ [locale] - name="Filipino" - locale=tl_PH + name="Filipino" + locale=tl_PH [/locale] diff --git a/data/languages/zh_CN.cfg b/data/languages/zh_CN.cfg index 6520322020f..23aa8c174ed 100644 --- a/data/languages/zh_CN.cfg +++ b/data/languages/zh_CN.cfg @@ -1,4 +1,5 @@ [locale] name="中文 (Zhongwen)" + sort_name = "Zhongwen" locale=zh_CN [/locale] diff --git a/data/languages/zh_TW.cfg b/data/languages/zh_TW.cfg index 665d9ec5692..63497c713c9 100644 --- a/data/languages/zh_TW.cfg +++ b/data/languages/zh_TW.cfg @@ -1,4 +1,5 @@ [locale] name="繁體中文(Chinese traditional)" + sort_name = "Chinese traditional" locale=zh_TW [/locale] diff --git a/src/language.cpp b/src/language.cpp index 64b881ea661..24b1e418369 100644 --- a/src/language.cpp +++ b/src/language.cpp @@ -153,13 +153,13 @@ bool load_language_list() known_languages.clear(); known_languages.push_back( - language_def("", t_string(N_("System default language"), "wesnoth"), "ltr")); + language_def("", t_string(N_("System default language"), "wesnoth"), "ltr", "", "A")); 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"], - (**langs.first)["alternates"])); + (**langs.first)["alternates"], (**langs.first)["sort_name"])); } return true; @@ -167,6 +167,9 @@ bool load_language_list() std::vector get_languages() { + // We sort every time, the local might have changed which can modify the + // sort order. + std::sort(known_languages.begin(), known_languages.end()); return known_languages; } diff --git a/src/language.hpp b/src/language.hpp index 0a89c68aaed..7e8182664bd 100644 --- a/src/language.hpp +++ b/src/language.hpp @@ -33,23 +33,28 @@ struct language_def localename(), alternates(), language(), + sort_name(), rtl(false) {} language_def(const std::string& name, const t_string& lang, const std::string& dir, - const std::string &salternates = "") : + const std::string &salternates = "", const std::string& sort_name = "") : localename(name), - alternates(), + alternates(utils::split(salternates)), language(lang), + sort_name(sort_name.empty() ? std::string(lang) : sort_name), rtl(dir == "rtl") { - alternates = utils::split(salternates); - } + } + std::string localename; std::vector alternates; t_string language; + std::string sort_name; bool rtl; // A right to left language? (e.g: Hebrew) bool operator== (const language_def&) const; + bool operator< (const language_def& a) const + { return sort_name < a.sort_name; } /** * Is the locale available on the system?