Commit 47f3934d authored by tkent@chromium.org's avatar tkent@chromium.org

Language.{h,cpp} clean-up.

- Remove userPreferredLanguagesOverride().  It's unused.
- Rename canonicalizedLanguageIdentifier() to canonicalizeLanguageIdentifier().
- Make sure that platformLanguage() and userPreferredLanguages() return language
  codes with '-'.
- Optimize platformLanguage().  It shouldn't create a Vector every time.

BUG=

Review URL: https://codereview.chromium.org/703043002

git-svn-id: svn://svn.chromium.org/blink/trunk@184894 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent a34f93ad
...@@ -31,39 +31,45 @@ ...@@ -31,39 +31,45 @@
namespace blink { namespace blink {
static String canonicalizeLanguageIdentifier(const String& languageCode)
{
String lowercaseLanguageCode = languageCode.lower();
// Platform::defaultLocale() might provide a language code with '_'.
lowercaseLanguageCode.replace('_', '-');
return lowercaseLanguageCode;
}
static const AtomicString& platformLanguage() static const AtomicString& platformLanguage()
{ {
DEFINE_STATIC_LOCAL(AtomicString, computedDefaultLanguage, ()); DEFINE_STATIC_LOCAL(AtomicString, computedDefaultLanguage, ());
if (computedDefaultLanguage.isEmpty()) { if (computedDefaultLanguage.isEmpty()) {
computedDefaultLanguage = blink::Platform::current()->defaultLocale(); computedDefaultLanguage = AtomicString(canonicalizeLanguageIdentifier(Platform::current()->defaultLocale()));
ASSERT(!computedDefaultLanguage.isEmpty()); ASSERT(!computedDefaultLanguage.isEmpty());
} }
return computedDefaultLanguage; return computedDefaultLanguage;
} }
AtomicString defaultLanguage()
{
Vector<AtomicString> languages = userPreferredLanguages();
if (!languages.isEmpty())
return languages[0];
return emptyAtom;
}
static Vector<AtomicString>& preferredLanguagesOverride() static Vector<AtomicString>& preferredLanguagesOverride()
{ {
DEFINE_STATIC_LOCAL(Vector<AtomicString>, override, ()); DEFINE_STATIC_LOCAL(Vector<AtomicString>, override, ());
return override; return override;
} }
Vector<AtomicString> userPreferredLanguagesOverride() void overrideUserPreferredLanguages(const Vector<AtomicString>& override)
{ {
return preferredLanguagesOverride(); Vector<AtomicString>& canonicalized = preferredLanguagesOverride();
canonicalized.resize(0);
canonicalized.reserveCapacity(override.size());
for (const auto& lang : override)
canonicalized.append(canonicalizeLanguageIdentifier(lang));
} }
void overrideUserPreferredLanguages(const Vector<AtomicString>& override) AtomicString defaultLanguage()
{ {
preferredLanguagesOverride() = override; Vector<AtomicString>& override = preferredLanguagesOverride();
if (!override.isEmpty())
return override[0];
return platformLanguage();
} }
Vector<AtomicString> userPreferredLanguages() Vector<AtomicString> userPreferredLanguages()
...@@ -78,16 +84,6 @@ Vector<AtomicString> userPreferredLanguages() ...@@ -78,16 +84,6 @@ Vector<AtomicString> userPreferredLanguages()
return languages; return languages;
} }
static String canonicalLanguageIdentifier(const String& languageCode)
{
String lowercaseLanguageCode = languageCode.lower();
if (lowercaseLanguageCode.length() >= 3 && lowercaseLanguageCode[2] == '_')
lowercaseLanguageCode.replace(2, 1, "-");
return lowercaseLanguageCode;
}
size_t indexOfBestMatchingLanguageInList(const AtomicString& language, const Vector<AtomicString>& languageList) size_t indexOfBestMatchingLanguageInList(const AtomicString& language, const Vector<AtomicString>& languageList)
{ {
AtomicString languageWithoutLocaleMatch; AtomicString languageWithoutLocaleMatch;
...@@ -97,7 +93,7 @@ size_t indexOfBestMatchingLanguageInList(const AtomicString& language, const Vec ...@@ -97,7 +93,7 @@ size_t indexOfBestMatchingLanguageInList(const AtomicString& language, const Vec
bool canMatchLanguageOnly = (language.length() == 2 || (language.length() >= 3 && language[2] == '-')); bool canMatchLanguageOnly = (language.length() == 2 || (language.length() >= 3 && language[2] == '-'));
for (size_t i = 0; i < languageList.size(); ++i) { for (size_t i = 0; i < languageList.size(); ++i) {
String canonicalizedLanguageFromList = canonicalLanguageIdentifier(languageList[i]); String canonicalizedLanguageFromList = canonicalizeLanguageIdentifier(languageList[i]);
if (language == canonicalizedLanguageFromList) if (language == canonicalizedLanguageFromList)
return i; return i;
......
...@@ -32,9 +32,13 @@ ...@@ -32,9 +32,13 @@
namespace blink { namespace blink {
// Returns lowercased BCP-47 language tag such as "en-us". This is the UI
// locale of the browser application.
PLATFORM_EXPORT AtomicString defaultLanguage(); PLATFORM_EXPORT AtomicString defaultLanguage();
// Returns a list of lowercased BCP-47 language tags. This never returns
// multiple values in production. This is not a value of Accept-Languages
// header. See ChromeClient::acceptLanguages.
PLATFORM_EXPORT Vector<AtomicString> userPreferredLanguages(); PLATFORM_EXPORT Vector<AtomicString> userPreferredLanguages();
PLATFORM_EXPORT Vector<AtomicString> userPreferredLanguagesOverride();
PLATFORM_EXPORT void overrideUserPreferredLanguages(const Vector<AtomicString>&); PLATFORM_EXPORT void overrideUserPreferredLanguages(const Vector<AtomicString>&);
PLATFORM_EXPORT size_t indexOfBestMatchingLanguageInList(const AtomicString& language, const Vector<AtomicString>& languageList); PLATFORM_EXPORT size_t indexOfBestMatchingLanguageInList(const AtomicString& language, const Vector<AtomicString>& languageList);
......
...@@ -49,7 +49,7 @@ var WeekDay = { ...@@ -49,7 +49,7 @@ var WeekDay = {
var global = { var global = {
picker: null, picker: null,
params: { params: {
locale: "en_US", locale: "en-US",
weekStartDay: WeekDay.Sunday, weekStartDay: WeekDay.Sunday,
dayLabels: ["S", "M", "T", "W", "T", "F", "S"], dayLabels: ["S", "M", "T", "W", "T", "F", "S"],
shortMonthLabels: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sept", "Oct", "Nov", "Dec"], shortMonthLabels: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sept", "Oct", "Nov", "Dec"],
...@@ -75,7 +75,7 @@ function hasInaccuratePointingDevice() { ...@@ -75,7 +75,7 @@ function hasInaccuratePointingDevice() {
* @return {!string} lowercase locale name. e.g. "en-us" * @return {!string} lowercase locale name. e.g. "en-us"
*/ */
function getLocale() { function getLocale() {
return (global.params.locale || "en-us").toLowerCase().replace(/_/g, '-'); return global.params.locale || "en-us";
} }
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment