| Index: app/l10n_util.cc
|
| ===================================================================
|
| --- app/l10n_util.cc (revision 32429)
|
| +++ app/l10n_util.cc (working copy)
|
| @@ -25,6 +25,10 @@
|
| #include <gtk/gtk.h>
|
| #endif
|
|
|
| +#if defined(OS_MACOSX)
|
| +#include "app/l10n_util_mac.h"
|
| +#endif
|
| +
|
| // TODO(playmobil): remove this undef once SkPostConfig.h is fixed.
|
| // skia/include/corecg/SkPostConfig.h #defines strcasecmp() so we can't use
|
| // base::strcasecmp() without #undefing it here.
|
| @@ -422,19 +426,16 @@
|
| // Represents the locale-specific text direction.
|
| static TextDirection g_text_direction = UNKNOWN_DIRECTION;
|
|
|
| -// On the Mac, we don't want to test preferences or ICU for the language,
|
| -// we want to use whatever Cocoa is using when it loaded the main nib file.
|
| -// It handles all the mapping and fallbacks for us, we just need to ask.
|
| -// See l10n_util_mac for that implementation.
|
| +std::string GetApplicationLocale(const std::wstring& pref_locale) {
|
| #if !defined(OS_MACOSX)
|
| -std::string GetApplicationLocale(const std::wstring& pref_locale) {
|
| +
|
| FilePath locale_path;
|
| PathService::Get(app::DIR_LOCALES, &locale_path);
|
| std::string resolved_locale;
|
| std::vector<std::string> candidates;
|
| const std::string system_locale = GetSystemLocale();
|
|
|
| - // We only use --lang and the app pref on Windows. On Linux/Mac, we only
|
| + // We only use --lang and the app pref on Windows. On Linux, we only
|
| // look at the LC_*/LANG environment variables. We do, however, pass --lang
|
| // to renderer and plugin processes so they know what language the parent
|
| // process decided to use.
|
| @@ -482,8 +483,32 @@
|
| NOTREACHED();
|
|
|
| return std::string();
|
| +
|
| +#else // !defined(OS_MACOSX)
|
| +
|
| + // Use any override (Cocoa for the browser), otherwise use the command line
|
| + // argument.
|
| + std::string app_locale = l10n_util::GetLocaleOverride();
|
| + if (app_locale.empty()) {
|
| + const CommandLine& parsed_command_line = *CommandLine::ForCurrentProcess();
|
| + app_locale = parsed_command_line.GetSwitchValueASCII(switches::kLang);
|
| + }
|
| +
|
| + // The above should handle all of the cases Chrome normally hits, but for some
|
| + // unit tests, we need something to fall back too.
|
| + if (app_locale.empty())
|
| + app_locale = "en-US";
|
| +
|
| + // Windows/Linux call CheckAndResolveLocale which calls IsLocaleAvailable
|
| + // which calls SetICUDefaultLocale to let ICU use the same locale. Mac
|
| + // doesn't use a locale directory tree of resources (it uses Mac style
|
| + // resources), so mirror that ICU behavior by calling SetICUDefaultLocale
|
| + // directly.
|
| + UBool icu_set = SetICUDefaultLocale(app_locale);
|
| + DCHECK(icu_set);
|
| + return app_locale;
|
| +#endif // !defined(OS_MACOSX)
|
| }
|
| -#endif // !defined(OS_MACOSX)
|
|
|
| string16 GetDisplayNameForLocale(const std::string& locale_code,
|
| const std::string& display_locale,
|
|
|