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

Unified Diff: app/l10n_util.cc

Issue 193027: Chrome UI language menu fix and add Hawaiian to the A-L list. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 3 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: app/l10n_util.cc
===================================================================
--- app/l10n_util.cc (revision 26112)
+++ app/l10n_util.cc (working copy)
@@ -87,6 +87,8 @@
"gl", // Galician
"gn", // Guarani
"gu", // Gujarati
+ "ha", // Hausa
+ "haw", // Hawaiian
"he", // Hebrew
"hi", // Hindi
"hr", // Croatian
@@ -125,6 +127,7 @@
"nn", // Norwegian (Nynorsk)
"no", // Norwegian
"oc", // Occitan
+ "om", // Oromo
"or", // Oriya
"pa", // Punjabi
"pl", // Polish
@@ -256,6 +259,31 @@
return false;
}
+bool IsLocaleNameTranslated(const char* locale,
+ const std::string& display_locale) {
+ string16 display_name =
+ l10n_util::GetDisplayNameForLocale(locale, display_locale, false);
+ // Because ICU sets the error code to U_USING_DEFAULT_WARNING whether or not
+ // uloc_getDisplayName returns the actual translation or the default
+ // value (locale code), we have to rely on this hack to tell whether
+ // the translation is available or not. If ICU doesn't have a translated
+ // name for this locale, GetDisplayNameForLocale will just return the
+ // locale code.
+ return !IsStringASCII(display_name) || UTF16ToASCII(display_name) != locale;
+}
+
+// We added 30+ minimally populated locales with only a few entries
+// (exemplar character set, script, writing direction and its own
+// lanaguage name). These locales have to be distinguished from the
+// fully populated locales to which Chrome is localized.
+bool IsLocalePartiallyPopulated(const std::string& locale_name) {
+ // For partially populated locales, even the translation for "English"
+ // is not available. A more robust/elegant way to check is to add a special
+ // field (say, 'isPartial' to our version of ICU locale files) and
+ // check its value, but this hack seems to work well.
+ return !IsLocaleNameTranslated("en", locale_name);
+}
+
bool IsLocaleAvailable(const std::string& locale,
const FilePath& locale_path) {
// If locale has any illegal characters in it, we don't want to try to
@@ -865,6 +893,10 @@
// Filter out the names that have aliases.
if (IsDuplicateName(locale_name))
continue;
+ // Filter out locales for which we have only partially populated data
+ // and to which Chrome is not localized.
+ if (IsLocalePartiallyPopulated(locale_name))
+ continue;
if (!IsLocaleSupportedByOS(locale_name))
continue;
// Normalize underscores to hyphens because that's what our locale files
@@ -889,17 +921,10 @@
void GetAcceptLanguagesForLocale(const std::string& display_locale,
std::vector<std::string>* locale_codes) {
for (size_t i = 0; i < arraysize(kAcceptLanguageList); ++i) {
- string16 display_name =
- l10n_util::GetDisplayNameForLocale(kAcceptLanguageList[i],
- display_locale, false);
- // This is a hack. If ICU doesn't have a translated name for
- // this language, GetDisplayNameForLocale will just return the
- // language code. In that case, we skip it.
- // TODO(jungshik) : Put them at the of the list with language codes
- // enclosed by brackets.
- if (IsStringASCII(display_name) &&
- UTF16ToASCII(display_name) == kAcceptLanguageList[i])
- continue;
+ if (!IsLocaleNameTranslated(kAcceptLanguageList[i], display_locale))
+ // TODO(jungshik) : Put them at the of the list with language codes
+ // enclosed by brackets instead of skipping.
+ continue;
locale_codes->push_back(kAcceptLanguageList[i]);
}
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698