diff options
6 files changed, 32 insertions, 3 deletions
diff --git a/chrome/browser/chromeos/dom_ui/language_options_handler.cc b/chrome/browser/chromeos/dom_ui/language_options_handler.cc index e75f7ad..366ee79 100644 --- a/chrome/browser/chromeos/dom_ui/language_options_handler.cc +++ b/chrome/browser/chromeos/dom_ui/language_options_handler.cc @@ -98,6 +98,9 @@ ListValue* LanguageOptionsHandler::GetLanguageList() { dictionary->SetString(L"code", UTF8ToWide(locales[i])); dictionary->SetString(L"displayName", chromeos::input_method::GetLanguageDisplayNameFromCode(locales[i])); + dictionary->SetString(L"nativeDisplayName", + chromeos::input_method::GetLanguageNativeDisplayNameFromCode( + locales[i])); language_list->Append(dictionary); } diff --git a/chrome/browser/chromeos/dom_ui/language_options_handler.h b/chrome/browser/chromeos/dom_ui/language_options_handler.h index c3e5dcb..73441fa 100644 --- a/chrome/browser/chromeos/dom_ui/language_options_handler.h +++ b/chrome/browser/chromeos/dom_ui/language_options_handler.h @@ -29,7 +29,8 @@ class LanguageOptionsHandler : public OptionsPageUIHandler { ListValue* GetInputMethodList(); // Gets the list of languages. The return value will look like: - // [{'code': 'fr', 'displayName': 'French'}, ...] + // [{'code': 'fi', 'displayName': 'Finnish', 'nativeDisplayName': 'suomi'}, + // ...] ListValue* GetLanguageList(); // Called when the UI language is changed. diff --git a/chrome/browser/chromeos/input_method/input_method_util.cc b/chrome/browser/chromeos/input_method/input_method_util.cc index 01fa576..b044bd9 100644 --- a/chrome/browser/chromeos/input_method/input_method_util.cc +++ b/chrome/browser/chromeos/input_method/input_method_util.cc @@ -499,6 +499,13 @@ std::wstring GetLanguageDisplayNameFromCode(const std::string& language_code) { true))); } +std::wstring GetLanguageNativeDisplayNameFromCode( + const std::string& language_code) { + return MaybeRewriteLanguageName(UTF16ToWide( + l10n_util::GetDisplayNameForLocale( + language_code, language_code, true))); +} + void SortLanguageCodesByNames(std::vector<std::string>* language_codes) { if (!g_browser_process) { return; diff --git a/chrome/browser/chromeos/input_method/input_method_util.h b/chrome/browser/chromeos/input_method/input_method_util.h index 04db190..79a1b1a 100644 --- a/chrome/browser/chromeos/input_method/input_method_util.h +++ b/chrome/browser/chromeos/input_method/input_method_util.h @@ -96,10 +96,17 @@ std::string GetInputMethodDisplayNameFromId(const std::string& input_method_id); // Converts a language code to a language display name, using the // current application locale. MaybeRewriteLanguageName() is called // internally. -// Examples: "fr" => "French" +// Examples: "fi" => "Finnish" // "en-US" => "English (United States)" std::wstring GetLanguageDisplayNameFromCode(const std::string& language_code); +// Converts a language code to a language native display name. +// MaybeRewriteLanguageName() is called internally. +// Examples: "fi" => "suomi" (rather than Finnish) +// "en-US" => "English (United States)" +std::wstring GetLanguageNativeDisplayNameFromCode( + const std::string& language_code); + // Sorts the given language codes by their corresponding language names, // using the unicode string comparator. Uses unstable sorting. void SortLanguageCodesByNames(std::vector<std::string>* language_codes); diff --git a/chrome/browser/chromeos/input_method/input_method_util_unittest.cc b/chrome/browser/chromeos/input_method/input_method_util_unittest.cc index b4a3c95..f177417 100644 --- a/chrome/browser/chromeos/input_method/input_method_util_unittest.cc +++ b/chrome/browser/chromeos/input_method/input_method_util_unittest.cc @@ -142,12 +142,19 @@ TEST(InputMethodUtilTest, GetKeyboardLayoutName) { } TEST(InputMethodUtilTest, GetLanguageDisplayNameFromCode) { - EXPECT_EQ(L"French", GetLanguageDisplayNameFromCode("fr")); + EXPECT_EQ(L"Finnish", GetLanguageDisplayNameFromCode("fi")); // MaybeRewriteLanguageName() should be applied. EXPECT_EQ(l10n_util::GetString(IDS_OPTIONS_SETTINGS_LANGUAGES_OTHERS), GetLanguageDisplayNameFromCode("t")); } +TEST(InputMethodUtilTest, GetLanguageNativeDisplayNameFromCode) { + EXPECT_EQ(L"suomi", GetLanguageNativeDisplayNameFromCode("fi")); + // MaybeRewriteLanguageName() should be applied. + EXPECT_EQ(l10n_util::GetString(IDS_OPTIONS_SETTINGS_LANGUAGES_OTHERS), + GetLanguageNativeDisplayNameFromCode("t")); +} + TEST(InputMethodUtilTest, SortLanguageCodesByNames) { std::vector<std::string> language_codes; // Check if this function can handle an empty list. diff --git a/chrome/browser/resources/options/chromeos_language_add_language_overlay.js b/chrome/browser/resources/options/chromeos_language_add_language_overlay.js index 5cfe42f..d62f8a8 100644 --- a/chrome/browser/resources/options/chromeos_language_add_language_overlay.js +++ b/chrome/browser/resources/options/chromeos_language_add_language_overlay.js @@ -47,6 +47,10 @@ cr.define('options.language', function() { var button = document.createElement('button'); button.className = 'link-button'; button.textContent = language.displayName; + // If the native name is different, add it. + if (language.displayName != language.nativeDisplayName) { + button.textContent += ' - ' + language.nativeDisplayName; + } button.languageCode = language.code; // Listen to user clicks. button.addEventListener('click', |