| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ui/base/l10n/l10n_util.h" | 5 #include "ui/base/l10n/l10n_util.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <cstdlib> | 8 #include <cstdlib> |
| 9 #include <iterator> | 9 #include <iterator> |
| 10 #include <string> | 10 #include <string> |
| (...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 184 "zh-CN", // Chinese (Simplified) | 184 "zh-CN", // Chinese (Simplified) |
| 185 "zh-TW", // Chinese (Traditional) | 185 "zh-TW", // Chinese (Traditional) |
| 186 "zu", // Zulu | 186 "zu", // Zulu |
| 187 }; | 187 }; |
| 188 | 188 |
| 189 // Returns true if |locale_name| has an alias in the ICU data file. | 189 // Returns true if |locale_name| has an alias in the ICU data file. |
| 190 bool IsDuplicateName(const std::string& locale_name) { | 190 bool IsDuplicateName(const std::string& locale_name) { |
| 191 static const char* const kDuplicateNames[] = { | 191 static const char* const kDuplicateNames[] = { |
| 192 "en", | 192 "en", |
| 193 "en_001", | 193 "en_001", |
| 194 "pt", | 194 "pt", // pt-BR and pt-PT are used. |
| 195 "zh", | 195 "zh", |
| 196 "zh_hans_cn", | 196 "zh_hans_cn", |
| 197 "zh_hant_hk", | 197 "zh_hant_hk", |
| 198 "zh_hant_mo", | 198 "zh_hant_mo", |
| 199 "zh_hans_sg", | 199 "zh_hans_sg", |
| 200 "zh_hant_tw" | 200 "zh_hant_tw" |
| 201 }; | 201 }; |
| 202 | 202 |
| 203 // Skip all 'es_RR'. Currently, we use 'es' for es-ES (Spanish in Spain). | 203 // Skip all the es_Foo other than es_419 for now. |
| 204 // 'es-419' (Spanish in Latin America) is not available in ICU so that it | 204 if (StartsWithASCII(locale_name, "es_", false)) |
| 205 // has to be added manually in GetAvailableLocales(). | 205 return !EndsWith(locale_name, "419", true); |
| 206 if (LowerCaseEqualsASCII(locale_name.substr(0, 3), "es_")) | 206 |
| 207 return true; | |
| 208 for (size_t i = 0; i < arraysize(kDuplicateNames); ++i) { | 207 for (size_t i = 0; i < arraysize(kDuplicateNames); ++i) { |
| 209 if (base::strcasecmp(kDuplicateNames[i], locale_name.c_str()) == 0) | 208 if (base::strcasecmp(kDuplicateNames[i], locale_name.c_str()) == 0) |
| 210 return true; | 209 return true; |
| 211 } | 210 } |
| 212 return false; | 211 return false; |
| 213 } | 212 } |
| 214 | 213 |
| 215 // We added 30+ minimally populated locales with only a few entries | 214 // We added 30+ minimally populated locales with only a few entries |
| 216 // (exemplar character set, script, writing direction and its own | 215 // (exemplar character set, script, writing direction and its own |
| 217 // lanaguage name). These locales have to be distinguished from the | 216 // lanaguage name). These locales have to be distinguished from the |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 290 | 289 |
| 291 // Map the Chinese locale names over to zh-CN and zh-TW. | 290 // Map the Chinese locale names over to zh-CN and zh-TW. |
| 292 if (LowerCaseEqualsASCII(locale_name, "zh-hans")) { | 291 if (LowerCaseEqualsASCII(locale_name, "zh-hans")) { |
| 293 locale_name = "zh-CN"; | 292 locale_name = "zh-CN"; |
| 294 } else if (LowerCaseEqualsASCII(locale_name, "zh-hant")) { | 293 } else if (LowerCaseEqualsASCII(locale_name, "zh-hant")) { |
| 295 locale_name = "zh-TW"; | 294 locale_name = "zh-TW"; |
| 296 } | 295 } |
| 297 locales->push_back(locale_name); | 296 locales->push_back(locale_name); |
| 298 } | 297 } |
| 299 | 298 |
| 300 // Manually add 'es-419' to the list. See the comment in IsDuplicateName(). | |
| 301 locales->push_back("es-419"); | |
| 302 return locales; | 299 return locales; |
| 303 } | 300 } |
| 304 }; | 301 }; |
| 305 | 302 |
| 306 base::LazyInstance<std::vector<std::string>, AvailableLocalesTraits> | 303 base::LazyInstance<std::vector<std::string>, AvailableLocalesTraits> |
| 307 g_available_locales = LAZY_INSTANCE_INITIALIZER; | 304 g_available_locales = LAZY_INSTANCE_INITIALIZER; |
| 308 | 305 |
| 309 } // namespace | 306 } // namespace |
| 310 | 307 |
| 311 namespace l10n_util { | 308 namespace l10n_util { |
| (...skipping 563 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 875 | 872 |
| 876 const char* const* GetAcceptLanguageListForTesting() { | 873 const char* const* GetAcceptLanguageListForTesting() { |
| 877 return kAcceptLanguageList; | 874 return kAcceptLanguageList; |
| 878 } | 875 } |
| 879 | 876 |
| 880 size_t GetAcceptLanguageListSizeForTesting() { | 877 size_t GetAcceptLanguageListSizeForTesting() { |
| 881 return arraysize(kAcceptLanguageList); | 878 return arraysize(kAcceptLanguageList); |
| 882 } | 879 } |
| 883 | 880 |
| 884 } // namespace l10n_util | 881 } // namespace l10n_util |
| OLD | NEW |