summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/chromeos/dom_ui/language_options_handler.cc3
-rw-r--r--chrome/browser/chromeos/dom_ui/language_options_handler.h3
-rw-r--r--chrome/browser/chromeos/input_method/input_method_util.cc7
-rw-r--r--chrome/browser/chromeos/input_method/input_method_util.h9
-rw-r--r--chrome/browser/chromeos/input_method/input_method_util_unittest.cc9
-rw-r--r--chrome/browser/resources/options/chromeos_language_add_language_overlay.js4
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',