Index: chrome/browser/chromeos/options/language_config_view.cc |
diff --git a/chrome/browser/chromeos/options/language_config_view.cc b/chrome/browser/chromeos/options/language_config_view.cc |
index 60233170a9b608f6a2728a9e7e3b095735326eed..6f72f8a287db6f03e2115c033f4744dc4d25a964 100644 |
--- a/chrome/browser/chromeos/options/language_config_view.cc |
+++ b/chrome/browser/chromeos/options/language_config_view.cc |
@@ -21,6 +21,7 @@ |
#include "gfx/font.h" |
#include "grit/generated_resources.h" |
#include "grit/locale_settings.h" |
+#include "third_party/icu/public/common/unicode/uloc.h" |
#include "views/controls/button/checkbox.h" |
#include "views/controls/combobox/combobox.h" |
#include "views/controls/label.h" |
@@ -141,7 +142,7 @@ class AddLanguageView : public views::View, |
// Creates the language combobox model from the supported languages. |
LanguageComboboxModel* CreateLanguageComboboxModel() { |
std::vector<std::string> language_codes; |
- parent_view_->GetSupportedLangageCodes(&language_codes); |
+ parent_view_->GetSupportedLanguageCodes(&language_codes); |
// LanguageComboboxModel sorts languages by their display names. |
return new LanguageComboboxModelWithOthers(NULL, language_codes); |
} |
@@ -307,7 +308,7 @@ views::View* LanguageConfigView::CreatePerLanguageConfigView( |
input_method_checkboxes_.clear(); |
std::vector<std::string> language_ids; |
- GetSupportedLangageIDs(&language_ids); |
+ GetSupportedLanguageIDs(&language_ids); |
for (size_t i = 0; i < language_ids.size(); ++i) { |
const std::string& language_id = language_ids[i]; |
const std::string language_code = GetLanguageCodeFromID(language_id); |
@@ -441,8 +442,12 @@ void LanguageConfigView::InitLanguageIdMaps() { |
CrosLibrary::Get()->GetLanguageLibrary()->GetSupportedLanguages()); |
for (size_t i = 0; i < supported_language_list->size(); ++i) { |
const InputLanguage& language = supported_language_list->at(i); |
+ // Normalize the language code as some engines return three-letter |
+ // codes like "jpn" wheres some other engines return two-letter codes |
+ // like "ja". |
+ std::string language_code = NormalizeLanguageCode(language.language_code); |
id_to_language_code_map_.insert( |
- std::make_pair(language.id, language.language_code)); |
+ std::make_pair(language.id, language_code)); |
id_to_display_name_map_.insert( |
std::make_pair(language.id, language.display_name)); |
} |
@@ -511,7 +516,7 @@ void LanguageConfigView::OnAddLanguage(const std::string& language_code) { |
// to call this before the OnItemsAdded() call below so the checkbox for |
// the first input language gets checked. |
std::vector<std::string> language_ids; |
- GetSupportedLangageIDs(&language_ids); |
+ GetSupportedLanguageIDs(&language_ids); |
for (size_t i = 0; i < language_ids.size(); ++i) { |
if (GetLanguageCodeFromID(language_ids[i]) == language_code) { |
SetLanguageActivated(language_ids[i], true); |
@@ -530,7 +535,7 @@ void LanguageConfigView::OnAddLanguage(const std::string& language_code) { |
void LanguageConfigView::DeactivateInputLanguagesFor( |
const std::string& language_code) { |
std::vector<std::string> language_ids; |
- GetSupportedLangageIDs(&language_ids); |
+ GetSupportedLanguageIDs(&language_ids); |
for (size_t i = 0; i < language_ids.size(); ++i) { |
if (GetLanguageCodeFromID(language_ids[i]) == language_code) { |
SetLanguageActivated(language_ids[i], false); |
@@ -597,7 +602,7 @@ void LanguageConfigView::GetActiveLanguageIDs( |
SplitString(WideToUTF8(value), ',', out_language_ids); |
} |
-void LanguageConfigView::GetSupportedLangageIDs( |
+void LanguageConfigView::GetSupportedLanguageIDs( |
std::vector<std::string>* out_language_ids) const { |
out_language_ids->clear(); |
std::map<std::string, std::string>::const_iterator iter; |
@@ -608,7 +613,7 @@ void LanguageConfigView::GetSupportedLangageIDs( |
} |
} |
-void LanguageConfigView::GetSupportedLangageCodes( |
+void LanguageConfigView::GetSupportedLanguageCodes( |
std::vector<std::string>* out_language_codes) const { |
std::set<std::string> language_code_set; |
std::map<std::string, std::string>::const_iterator iter; |
@@ -662,4 +667,20 @@ std::wstring LanguageConfigView::MaybeRewriteLanguageName( |
return language_name; |
} |
+std::string LanguageConfigView::NormalizeLanguageCode( |
+ const std::string& language_code) { |
+ // We only handle two-letter codes here. |
+ // Some ibus engines return locale codes like "zh_CN" as language codes, |
+ // and we don't want to rewrite this to "zho". |
+ if (language_code.size() != 2) { |
+ return language_code; |
+ } |
+ const char* three_letter_code = uloc_getISO3Language( |
+ language_code.c_str()); |
+ if (three_letter_code && strlen(three_letter_code) > 0) { |
+ return three_letter_code; |
+ } |
+ return language_code; |
+} |
+ |
} // namespace chromeos |