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 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
281 // and to which Chrome is not localized. | 281 // and to which Chrome is not localized. |
282 if (IsLocalePartiallyPopulated(locale_name)) | 282 if (IsLocalePartiallyPopulated(locale_name)) |
283 continue; | 283 continue; |
284 if (!l10n_util::IsLocaleSupportedByOS(locale_name)) | 284 if (!l10n_util::IsLocaleSupportedByOS(locale_name)) |
285 continue; | 285 continue; |
286 // Normalize underscores to hyphens because that's what our locale files | 286 // Normalize underscores to hyphens because that's what our locale files |
287 // use. | 287 // use. |
288 std::replace(locale_name.begin(), locale_name.end(), '_', '-'); | 288 std::replace(locale_name.begin(), locale_name.end(), '_', '-'); |
289 | 289 |
290 // 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. |
291 if (LowerCaseEqualsASCII(locale_name, "zh-hans")) { | 291 if (base::LowerCaseEqualsASCII(locale_name, "zh-hans")) { |
292 locale_name = "zh-CN"; | 292 locale_name = "zh-CN"; |
293 } else if (LowerCaseEqualsASCII(locale_name, "zh-hant")) { | 293 } else if (base::LowerCaseEqualsASCII(locale_name, "zh-hant")) { |
294 locale_name = "zh-TW"; | 294 locale_name = "zh-TW"; |
295 } | 295 } |
296 locales->push_back(locale_name); | 296 locales->push_back(locale_name); |
297 } | 297 } |
298 | 298 |
299 return locales; | 299 return locales; |
300 } | 300 } |
301 }; | 301 }; |
302 | 302 |
303 base::LazyInstance<std::vector<std::string>, AvailableLocalesTraits> | 303 base::LazyInstance<std::vector<std::string>, AvailableLocalesTraits> |
(...skipping 30 matching lines...) Expand all Loading... |
334 // TODO(jungshik) : Nothing is done about languages that Chrome | 334 // TODO(jungshik) : Nothing is done about languages that Chrome |
335 // does not support but available on Windows. We fall | 335 // does not support but available on Windows. We fall |
336 // back to en-US in GetApplicationLocale so that it's a not critical, | 336 // back to en-US in GetApplicationLocale so that it's a not critical, |
337 // but we can do better. | 337 // but we can do better. |
338 const std::string lang(GetLanguage(locale)); | 338 const std::string lang(GetLanguage(locale)); |
339 if (lang.size() < locale.size()) { | 339 if (lang.size() < locale.size()) { |
340 std::string region(locale, lang.size() + 1); | 340 std::string region(locale, lang.size() + 1); |
341 std::string tmp_locale(lang); | 341 std::string tmp_locale(lang); |
342 // Map es-RR other than es-ES to es-419 (Chrome's Latin American | 342 // Map es-RR other than es-ES to es-419 (Chrome's Latin American |
343 // Spanish locale). | 343 // Spanish locale). |
344 if (LowerCaseEqualsASCII(lang, "es") && | 344 if (base::LowerCaseEqualsASCII(lang, "es") && |
345 !LowerCaseEqualsASCII(region, "es")) { | 345 !base::LowerCaseEqualsASCII(region, "es")) { |
346 tmp_locale.append("-419"); | 346 tmp_locale.append("-419"); |
347 } else if (LowerCaseEqualsASCII(lang, "zh")) { | 347 } else if (base::LowerCaseEqualsASCII(lang, "zh")) { |
348 // Map zh-HK and zh-MO to zh-TW. Otherwise, zh-FOO is mapped to zh-CN. | 348 // Map zh-HK and zh-MO to zh-TW. Otherwise, zh-FOO is mapped to zh-CN. |
349 if (LowerCaseEqualsASCII(region, "hk") || | 349 if (base::LowerCaseEqualsASCII(region, "hk") || |
350 LowerCaseEqualsASCII(region, "mo")) { // Macao | 350 base::LowerCaseEqualsASCII(region, "mo")) { // Macao |
351 tmp_locale.append("-TW"); | 351 tmp_locale.append("-TW"); |
352 } else { | 352 } else { |
353 tmp_locale.append("-CN"); | 353 tmp_locale.append("-CN"); |
354 } | 354 } |
355 } else if (LowerCaseEqualsASCII(lang, "en")) { | 355 } else if (base::LowerCaseEqualsASCII(lang, "en")) { |
356 // Map Australian, Canadian, New Zealand and South African English | 356 // Map Australian, Canadian, New Zealand and South African English |
357 // to British English for now. | 357 // to British English for now. |
358 // TODO(jungshik): en-CA may have to change sides once | 358 // TODO(jungshik): en-CA may have to change sides once |
359 // we have OS locale separate from app locale (Chrome's UI language). | 359 // we have OS locale separate from app locale (Chrome's UI language). |
360 if (LowerCaseEqualsASCII(region, "au") || | 360 if (base::LowerCaseEqualsASCII(region, "au") || |
361 LowerCaseEqualsASCII(region, "ca") || | 361 base::LowerCaseEqualsASCII(region, "ca") || |
362 LowerCaseEqualsASCII(region, "nz") || | 362 base::LowerCaseEqualsASCII(region, "nz") || |
363 LowerCaseEqualsASCII(region, "za")) { | 363 base::LowerCaseEqualsASCII(region, "za")) { |
364 tmp_locale.append("-GB"); | 364 tmp_locale.append("-GB"); |
365 } else { | 365 } else { |
366 tmp_locale.append("-US"); | 366 tmp_locale.append("-US"); |
367 } | 367 } |
368 } | 368 } |
369 if (IsLocaleAvailable(tmp_locale)) { | 369 if (IsLocaleAvailable(tmp_locale)) { |
370 resolved_locale->swap(tmp_locale); | 370 resolved_locale->swap(tmp_locale); |
371 return true; | 371 return true; |
372 } | 372 } |
373 } | 373 } |
374 | 374 |
375 // Google updater uses no, tl, iw and en for our nb, fil, he, and en-US. | 375 // Google updater uses no, tl, iw and en for our nb, fil, he, and en-US. |
376 struct { | 376 struct { |
377 const char* source; | 377 const char* source; |
378 const char* dest; | 378 const char* dest; |
379 } alias_map[] = { | 379 } alias_map[] = { |
380 {"no", "nb"}, | 380 {"no", "nb"}, |
381 {"tl", "fil"}, | 381 {"tl", "fil"}, |
382 {"iw", "he"}, | 382 {"iw", "he"}, |
383 {"en", "en-US"}, | 383 {"en", "en-US"}, |
384 }; | 384 }; |
385 | 385 |
386 for (size_t i = 0; i < arraysize(alias_map); ++i) { | 386 for (size_t i = 0; i < arraysize(alias_map); ++i) { |
387 if (LowerCaseEqualsASCII(lang, alias_map[i].source)) { | 387 if (base::LowerCaseEqualsASCII(lang, alias_map[i].source)) { |
388 std::string tmp_locale(alias_map[i].dest); | 388 std::string tmp_locale(alias_map[i].dest); |
389 if (IsLocaleAvailable(tmp_locale)) { | 389 if (IsLocaleAvailable(tmp_locale)) { |
390 resolved_locale->swap(tmp_locale); | 390 resolved_locale->swap(tmp_locale); |
391 return true; | 391 return true; |
392 } | 392 } |
393 } | 393 } |
394 } | 394 } |
395 | 395 |
396 return false; | 396 return false; |
397 #endif | 397 #endif |
(...skipping 475 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
873 | 873 |
874 const char* const* GetAcceptLanguageListForTesting() { | 874 const char* const* GetAcceptLanguageListForTesting() { |
875 return kAcceptLanguageList; | 875 return kAcceptLanguageList; |
876 } | 876 } |
877 | 877 |
878 size_t GetAcceptLanguageListSizeForTesting() { | 878 size_t GetAcceptLanguageListSizeForTesting() { |
879 return arraysize(kAcceptLanguageList); | 879 return arraysize(kAcceptLanguageList); |
880 } | 880 } |
881 | 881 |
882 } // namespace l10n_util | 882 } // namespace l10n_util |
OLD | NEW |