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

Side by Side Diff: app/l10n_util.cc

Issue 2809058: Add application locale policy. (Closed) Base URL: http://src.chromium.org/git/chromium.git
Patch Set: " Created 10 years, 5 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 unified diff | Download patch
« no previous file with comments | « no previous file | chrome/app/chrome_dll_main.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 "app/l10n_util.h" 5 #include "app/l10n_util.h"
6 6
7 #include <cstdlib> 7 #include <cstdlib>
8 8
9 #include "app/app_paths.h" 9 #include "app/app_paths.h"
10 #include "app/app_switches.h" 10 #include "app/app_switches.h"
(...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after
374 PathService::Get(app::DIR_LOCALES, &locale_path); 374 PathService::Get(app::DIR_LOCALES, &locale_path);
375 std::string resolved_locale; 375 std::string resolved_locale;
376 std::vector<std::string> candidates; 376 std::vector<std::string> candidates;
377 const std::string system_locale = GetSystemLocale(); 377 const std::string system_locale = GetSystemLocale();
378 378
379 // We only use --lang and the app pref on Windows. On Linux, we only 379 // We only use --lang and the app pref on Windows. On Linux, we only
380 // look at the LC_*/LANG environment variables. We do, however, pass --lang 380 // look at the LC_*/LANG environment variables. We do, however, pass --lang
381 // to renderer and plugin processes so they know what language the parent 381 // to renderer and plugin processes so they know what language the parent
382 // process decided to use. 382 // process decided to use.
383 #if defined(OS_WIN) 383 #if defined(OS_WIN)
384 // First, check to see if there's a --lang flag. 384 // First, try the preference value.
385 const CommandLine& parsed_command_line = *CommandLine::ForCurrentProcess();
386 const std::string& lang_arg =
387 parsed_command_line.GetSwitchValueASCII(switches::kLang);
388 if (!lang_arg.empty())
389 candidates.push_back(lang_arg);
390
391 // Second, try user prefs.
392 if (!pref_locale.empty()) 385 if (!pref_locale.empty())
393 candidates.push_back(WideToASCII(pref_locale)); 386 candidates.push_back(WideToASCII(pref_locale));
394 387
395 // Next, try the system locale. 388 // Next, try the system locale.
396 candidates.push_back(system_locale); 389 candidates.push_back(system_locale);
397 390
398 #elif defined(OS_CHROMEOS) 391 #elif defined(OS_CHROMEOS)
399 // We use --lang on chroemos for debugging/troubleshooting purpose. 392 // On ChromeOS, use the application locale preference.
400 const CommandLine& parsed_command_line = *CommandLine::ForCurrentProcess();
401 const std::string& lang_arg =
402 parsed_command_line.GetSwitchValueASCII(switches::kLang);
403 if (!lang_arg.empty())
404 candidates.push_back(lang_arg);
405
406 // On ChromeOS, try user prefs. This restores the locale used by the
407 // previous run of the OS.
408 if (!pref_locale.empty()) 393 if (!pref_locale.empty())
409 candidates.push_back(WideToASCII(pref_locale)); 394 candidates.push_back(WideToASCII(pref_locale));
410 395
411 #elif defined(OS_POSIX) 396 #elif defined(OS_POSIX)
412 // On POSIX, we also check LANGUAGE environment variable, which is supported 397 // On POSIX, we also check LANGUAGE environment variable, which is supported
413 // by gettext to specify a priority list of prefered languages. 398 // by gettext to specify a priority list of prefered languages.
414 const char* env_language = ::getenv("LANGUAGE"); 399 const char* env_language = ::getenv("LANGUAGE");
415 if (env_language) 400 if (env_language)
416 SplitAndNormalizeLanguageList(env_language, &candidates); 401 SplitAndNormalizeLanguageList(env_language, &candidates);
417 402
(...skipping 20 matching lines...) Expand all
438 return fallback_locale; 423 return fallback_locale;
439 } 424 }
440 425
441 // No locale data file was found; we shouldn't get here. 426 // No locale data file was found; we shouldn't get here.
442 NOTREACHED(); 427 NOTREACHED();
443 428
444 return std::string(); 429 return std::string();
445 430
446 #else // !defined(OS_MACOSX) 431 #else // !defined(OS_MACOSX)
447 432
448 // Use any override (Cocoa for the browser), otherwise use the command line 433 // Use any override (Cocoa for the browser), otherwise use the preference
449 // argument. 434 // passed to the function.
450 std::string app_locale = l10n_util::GetLocaleOverride(); 435 std::string app_locale = l10n_util::GetLocaleOverride();
451 if (app_locale.empty()) { 436 if (app_locale.empty()) {
452 const CommandLine& parsed_command_line = *CommandLine::ForCurrentProcess(); 437 app_locale = WideToASCII(pref_locale);
453 app_locale = parsed_command_line.GetSwitchValueASCII(switches::kLang);
454 } 438 }
455 439
456 // The above should handle all of the cases Chrome normally hits, but for some 440 // The above should handle all of the cases Chrome normally hits, but for some
457 // unit tests, we need something to fall back too. 441 // unit tests, we need something to fall back too.
458 if (app_locale.empty()) 442 if (app_locale.empty())
459 app_locale = "en-US"; 443 app_locale = "en-US";
460 444
461 // Windows/Linux call SetICUDefaultLocale after determining the actual locale 445 // Windows/Linux call SetICUDefaultLocale after determining the actual locale
462 // with CheckAndResolveLocal to make ICU APIs work in that locale. 446 // with CheckAndResolveLocal to make ICU APIs work in that locale.
463 // Mac doesn't use a locale directory tree of resources (it uses Mac style 447 // Mac doesn't use a locale directory tree of resources (it uses Mac style
(...skipping 405 matching lines...) Expand 10 before | Expand all | Expand 10 after
869 for (size_t i = 0; i < arraysize(kAcceptLanguageList); ++i) { 853 for (size_t i = 0; i < arraysize(kAcceptLanguageList); ++i) {
870 if (!IsLocaleNameTranslated(kAcceptLanguageList[i], display_locale)) 854 if (!IsLocaleNameTranslated(kAcceptLanguageList[i], display_locale))
871 // TODO(jungshik) : Put them at the of the list with language codes 855 // TODO(jungshik) : Put them at the of the list with language codes
872 // enclosed by brackets instead of skipping. 856 // enclosed by brackets instead of skipping.
873 continue; 857 continue;
874 locale_codes->push_back(kAcceptLanguageList[i]); 858 locale_codes->push_back(kAcceptLanguageList[i]);
875 } 859 }
876 } 860 }
877 861
878 } // namespace l10n_util 862 } // namespace l10n_util
OLDNEW
« no previous file with comments | « no previous file | chrome/app/chrome_dll_main.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698