Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3680)

Unified Diff: chrome/browser/ui/webui/options/chromeos/cros_language_options_handler.cc

Issue 224093013: Allow country-specific languages in UI list at OOBE. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Support en-AU locale. Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/webui/options/chromeos/cros_language_options_handler.cc
diff --git a/chrome/browser/ui/webui/options/chromeos/cros_language_options_handler.cc b/chrome/browser/ui/webui/options/chromeos/cros_language_options_handler.cc
index fec16e0b2c8758335b75adcad7b839dc020f6a4c..6f42f660a4d0882b6edb8fbf77e9d00bbb2e4415 100644
--- a/chrome/browser/ui/webui/options/chromeos/cros_language_options_handler.cc
+++ b/chrome/browser/ui/webui/options/chromeos/cros_language_options_handler.cc
@@ -233,7 +233,56 @@ base::ListValue* CrosLanguageOptionsHandler::GetLanguageListInternal(
configured_locales.size());
size_t configured_locales_count = 0;
+
// Build the list of display names, and build the language map.
+
+ // The list of configured locales might have entries not in
+ // base_language_codes. If there are unsupported language variants,
+ // but they resolve to backup locale within base_language_codes, also
+ // add them to the list.
+ for (std::map<std::string, int>::const_iterator iter = language_index.begin();
+ iter != language_index.end();
+ ++iter) {
+ const std::string& language_id = iter->first;
+ const int language_idx = iter->second;
+
+ const size_t dash_pos = language_id.find_first_of('-');
+
+ // Ignore non-specific codes.
+ if (dash_pos == std::string::npos || dash_pos == 0)
+ continue;
+
+ if (std::find(base_language_codes.begin(),
+ base_language_codes.end(),
+ language_id) != base_language_codes.end()) {
+ // Language is supported. No need to replace
+ continue;
+ }
+ std::string resolved_locale;
+ if (!l10n_util::CheckAndResolveLocale(language_id, &resolved_locale))
+ continue;
+
+ if (std::find(base_language_codes.begin(),
+ base_language_codes.end(),
+ resolved_locale) == base_language_codes.end()) {
+ // Resolved locale is not supported.
+ continue;
+ }
+
+ const base::string16 display_name =
+ l10n_util::GetDisplayNameForLocale(language_id, app_locale, true);
+ const base::string16 native_display_name =
+ l10n_util::GetDisplayNameForLocale(
+ language_id, language_id, true);
+
+ language_map[display_name] =
+ std::make_pair(language_id, native_display_name);
+
+ configured_locales_display_names[language_idx] = display_name;
+ ++configured_locales_count;
+ }
+
+ // Translate language codes, generated from input methods.
for (std::set<std::string>::const_iterator iter = language_codes.begin();
iter != language_codes.end(); ++iter) {
// Exclude the language which is not in |base_langauge_codes| even it has
@@ -255,8 +304,12 @@ base::ListValue* CrosLanguageOptionsHandler::GetLanguageListInternal(
const std::map<std::string, int>::const_iterator index_pos =
language_index.find(*iter);
if (index_pos != language_index.end()) {
- configured_locales_display_names[index_pos->second] = display_name;
- ++configured_locales_count;
+ base::string16& stored_display_name =
+ configured_locales_display_names[index_pos->second];
+ if (stored_display_name.empty()) {
+ stored_display_name = display_name;
+ ++configured_locales_count;
+ }
} else {
display_names.push_back(display_name);
}

Powered by Google App Engine
This is Rietveld 408576698