Chromium Code Reviews| Index: Source/platform/Language.cpp |
| diff --git a/Source/platform/Language.cpp b/Source/platform/Language.cpp |
| index 03e587bf8ebc2e07d93e09d7de55e1ff8e56d93e..a12555a3ff3ca973829929a809c3bac033bcebfc 100644 |
| --- a/Source/platform/Language.cpp |
| +++ b/Source/platform/Language.cpp |
| @@ -31,39 +31,45 @@ |
| 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() |
| { |
| DEFINE_STATIC_LOCAL(AtomicString, computedDefaultLanguage, ()); |
| if (computedDefaultLanguage.isEmpty()) { |
| - computedDefaultLanguage = blink::Platform::current()->defaultLocale(); |
| + computedDefaultLanguage = AtomicString(canonicalizeLanguageIdentifier(Platform::current()->defaultLocale())); |
| ASSERT(!computedDefaultLanguage.isEmpty()); |
| } |
| return computedDefaultLanguage; |
| } |
| -AtomicString defaultLanguage() |
| -{ |
| - Vector<AtomicString> languages = userPreferredLanguages(); |
| - if (!languages.isEmpty()) |
| - return languages[0]; |
| - |
| - return emptyAtom; |
| -} |
| - |
| static Vector<AtomicString>& preferredLanguagesOverride() |
| { |
| DEFINE_STATIC_LOCAL(Vector<AtomicString>, override, ()); |
| return override; |
| } |
| -Vector<AtomicString> userPreferredLanguagesOverride() |
| +void overrideUserPreferredLanguages(const Vector<AtomicString>& override) |
| { |
|
Kunihiko Sakamoto
2014/11/06 03:56:02
I don't understand why this implementation is bett
tkent
2014/11/06 04:02:21
This is not better than the original code. We nee
Kunihiko Sakamoto
2014/11/06 04:03:47
Oh, I missed that part. Got it, thanks!
|
| - 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() |
| @@ -78,16 +84,6 @@ Vector<AtomicString> userPreferredLanguages() |
| 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) |
| { |
| AtomicString languageWithoutLocaleMatch; |
| @@ -97,7 +93,7 @@ size_t indexOfBestMatchingLanguageInList(const AtomicString& language, const Vec |
| bool canMatchLanguageOnly = (language.length() == 2 || (language.length() >= 3 && language[2] == '-')); |
| for (size_t i = 0; i < languageList.size(); ++i) { |
| - String canonicalizedLanguageFromList = canonicalLanguageIdentifier(languageList[i]); |
| + String canonicalizedLanguageFromList = canonicalizeLanguageIdentifier(languageList[i]); |
| if (language == canonicalizedLanguageFromList) |
| return i; |