From e6a7a30e3b4f51e73b51b0dc78db610b1501b169 Mon Sep 17 00:00:00 2001 From: Adrien Destugues Date: Sun, 31 Jan 2010 21:17:39 +0000 Subject: [PATCH] This should have been part of previous commit : Add Language->IsCountry to tell if a language holds a country specifier (like fr_FR) or not (fr alone). This allows separating them in the preflet. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35366 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kits/locale/Language.cpp | 11 ++++++++++- src/kits/locale/LocaleRoster.cpp | 19 +------------------ 2 files changed, 11 insertions(+), 19 deletions(-) diff --git a/src/kits/locale/Language.cpp b/src/kits/locale/Language.cpp index 8ac5661b7f..64f8e65775 100644 --- a/src/kits/locale/Language.cpp +++ b/src/kits/locale/Language.cpp @@ -6,6 +6,8 @@ #include +#include + #include #include #include @@ -135,7 +137,7 @@ BLanguage::GetName(BString* name) // TODO: This will return the language not in the current be_app_catalog, // but in the current system wide language! Don't know the exact reason. UnicodeString s; - fICULocale->getDisplayLanguage(s); + fICULocale->getDisplayName(s); BStringByteSink converter(name); s.toUTF8(converter); return B_OK; @@ -146,3 +148,10 @@ BLanguage::Code() { return fICULocale->getLanguage(); } + + +bool +BLanguage::IsCountry() +{ + return *(fICULocale->getCountry()) != '\0'; +} diff --git a/src/kits/locale/LocaleRoster.cpp b/src/kits/locale/LocaleRoster.cpp index 1bb63bf868..a1c6debffe 100644 --- a/src/kits/locale/LocaleRoster.cpp +++ b/src/kits/locale/LocaleRoster.cpp @@ -509,31 +509,14 @@ BLocaleRoster::GetInstalledLanguages(BMessage *languages) const int32 i; UnicodeString icuLanguageName; BString languageName; - std::set languageSet; -#undef REALLY_ALL_LANGUAGES -#ifdef REALLY_ALL_LANGUAGES - const char* const* icuLocaleList = Locale::getISOLanguages(); - - // Loop over the strings and add them to an std::set to remove duplicates - for (i = 0; icuLocaleList[i]; i++) { - languageSet.insert(BString(icuLocaleList[i])); - } -#else int32_t localeCount; const Locale* icuLocaleList = Locale::getAvailableLocales(localeCount); // Loop over the strings and add them to an std::set to remove duplicates for (i = 0; i < localeCount; i++) { - languageSet.insert(icuLocaleList[i].getLanguage()); - } -#endif - - std::set::const_iterator lastLang = languageSet.end(); - for (std::set::const_iterator setIterator = languageSet.begin(); - setIterator != lastLang; setIterator++) { - languages->AddString("langs", *setIterator); + languages->AddString("langs", icuLocaleList[i].getName()); } return B_OK;