| Index: app/l10n_util.cc
|
| ===================================================================
|
| --- app/l10n_util.cc (revision 19124)
|
| +++ app/l10n_util.cc (working copy)
|
| @@ -51,10 +51,10 @@
|
| }
|
|
|
| // Convert Chrome locale name to ICU locale name
|
| -std::string ICULocaleName(const std::wstring& locale_string) {
|
| +std::string ICULocaleName(const std::string& locale_string) {
|
| // If not Spanish, just return it.
|
| - if (locale_string.substr(0, 2) != L"es")
|
| - return WideToASCII(locale_string);
|
| + if (locale_string.substr(0, 2) != "es")
|
| + return locale_string;
|
| // Expand es to es-ES.
|
| if (LowerCaseEqualsASCII(locale_string, "es"))
|
| return "es-ES";
|
| @@ -74,7 +74,7 @@
|
| }
|
| // Currently, Chrome has only "es" and "es-419", but later we may have
|
| // more specific "es-RR".
|
| - return WideToASCII(locale_string);
|
| + return locale_string;
|
| }
|
|
|
| // Sets the default locale of ICU.
|
| @@ -85,7 +85,7 @@
|
| // This is handy in that we don't have to call GetApplicationLocale()
|
| // everytime we call locale-dependent ICU APIs as long as we make sure
|
| // that this is called before any locale-dependent API is called.
|
| -UBool SetICUDefaultLocale(const std::wstring& locale_string) {
|
| +UBool SetICUDefaultLocale(const std::string& locale_string) {
|
| Locale locale(ICULocaleName(locale_string).c_str());
|
| UErrorCode error_code = U_ZERO_ERROR;
|
| Locale::setDefault(locale, error_code);
|
| @@ -118,27 +118,24 @@
|
| return false;
|
| }
|
|
|
| -bool IsLocaleAvailable(const std::wstring& locale,
|
| - const std::wstring& locale_path) {
|
| - std::wstring test_locale = locale;
|
| +bool IsLocaleAvailable(const std::string& locale,
|
| + const FilePath& locale_path) {
|
| // If locale has any illegal characters in it, we don't want to try to
|
| // load it because it may be pointing outside the locale data file directory.
|
| - file_util::ReplaceIllegalCharacters(&test_locale, ' ');
|
| - if (test_locale != locale)
|
| + if (!file_util::IsFilenameLegal(ASCIIToUTF16(locale)))
|
| return false;
|
|
|
| if (!l10n_util::IsLocaleSupportedByOS(locale))
|
| return false;
|
|
|
| - FilePath test_path = FilePath::FromWStringHack(locale_path)
|
| - .Append(FilePath::FromWStringHack(locale))
|
| - .ReplaceExtension(kLocaleFileExtension);
|
| + FilePath test_path = locale_path;
|
| + test_path.AppendASCII(locale).ReplaceExtension(kLocaleFileExtension);
|
| return file_util::PathExists(test_path) && SetICUDefaultLocale(locale);
|
| }
|
|
|
| -bool CheckAndResolveLocale(const std::wstring& locale,
|
| - const std::wstring& locale_path,
|
| - std::wstring* resolved_locale) {
|
| +bool CheckAndResolveLocale(const std::string& locale,
|
| + const FilePath& locale_path,
|
| + std::string* resolved_locale) {
|
| if (IsLocaleAvailable(locale, locale_path)) {
|
| *resolved_locale = locale;
|
| return true;
|
| @@ -148,22 +145,22 @@
|
| // does not support but available on Windows. We fall
|
| // back to en-US in GetApplicationLocale so that it's a not critical,
|
| // but we can do better.
|
| - std::wstring::size_type hyphen_pos = locale.find(L'-');
|
| - if (hyphen_pos != std::wstring::npos && hyphen_pos > 0) {
|
| - std::wstring lang(locale, 0, hyphen_pos);
|
| - std::wstring region(locale, hyphen_pos + 1);
|
| - std::wstring tmp_locale(lang);
|
| + std::string::size_type hyphen_pos = locale.find(L'-');
|
| + if (hyphen_pos != std::string::npos && hyphen_pos > 0) {
|
| + std::string lang(locale, 0, hyphen_pos);
|
| + std::string region(locale, hyphen_pos + 1);
|
| + std::string tmp_locale(lang);
|
| // Map es-RR other than es-ES to es-419 (Chrome's Latin American
|
| // Spanish locale).
|
| if (LowerCaseEqualsASCII(lang, "es") && !LowerCaseEqualsASCII(region, "es"))
|
| - tmp_locale.append(L"-419");
|
| + tmp_locale.append("-419");
|
| else if (LowerCaseEqualsASCII(lang, "zh")) {
|
| // Map zh-HK and zh-MK to zh-TW. Otherwise, zh-FOO is mapped to zh-CN.
|
| if (LowerCaseEqualsASCII(region, "hk") ||
|
| LowerCaseEqualsASCII(region, "mk")) {
|
| - tmp_locale.append(L"-TW");
|
| + tmp_locale.append("-TW");
|
| } else {
|
| - tmp_locale.append(L"-CN");
|
| + tmp_locale.append("-CN");
|
| }
|
| }
|
| if (IsLocaleAvailable(tmp_locale, locale_path)) {
|
| @@ -176,16 +173,16 @@
|
| // We need to map them to our codes.
|
| struct {
|
| const char* source;
|
| - const wchar_t* dest;} alias_map[] = {
|
| - {"no", L"nb"},
|
| - {"tl", L"fil"},
|
| - {"iw", L"he"},
|
| - {"en", L"en-US"},
|
| + const char* dest;} alias_map[] = {
|
| + {"no", "nb"},
|
| + {"tl", "fil"},
|
| + {"iw", "he"},
|
| + {"en", "en-US"},
|
| };
|
|
|
| for (size_t i = 0; i < ARRAYSIZE_UNSAFE(alias_map); ++i) {
|
| if (LowerCaseEqualsASCII(locale, alias_map[i].source)) {
|
| - std::wstring tmp_locale(alias_map[i].dest);
|
| + std::string tmp_locale(alias_map[i].dest);
|
| if (IsLocaleAvailable(tmp_locale, locale_path)) {
|
| resolved_locale->swap(tmp_locale);
|
| return true;
|
| @@ -199,7 +196,7 @@
|
| // Get the locale of the operating system. The return value is of the form
|
| // language[-country] (e.g., en-US) where the language is the 2 letter code from
|
| // ISO-639.
|
| -std::wstring GetSystemLocale() {
|
| +std::string GetSystemLocale() {
|
| std::string language, region;
|
| GetLanguageAndRegionFromOS(&language, ®ion);
|
| std::string ret;
|
| @@ -209,7 +206,7 @@
|
| ret.append("-");
|
| ret.append(region);
|
| }
|
| - return ASCIIToWide(ret);
|
| + return ret;
|
| }
|
|
|
| } // namespace
|
| @@ -219,79 +216,69 @@
|
| // Represents the locale-specific text direction.
|
| static TextDirection g_text_direction = UNKNOWN_DIRECTION;
|
|
|
| -std::wstring GetApplicationLocale(const std::wstring& pref_locale) {
|
| +std::string GetApplicationLocale(const std::wstring& pref_locale) {
|
| #if defined(OS_MACOSX)
|
| // 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
|
| // Cocoa.
|
| // TODO(pinkerton): break this out into a .mm and ask Cocoa.
|
| - return L"en";
|
| + return "en";
|
| #else
|
| FilePath locale_path;
|
| PathService::Get(app::DIR_LOCALES, &locale_path);
|
| - std::wstring resolved_locale;
|
| + std::string resolved_locale;
|
|
|
| // First, check to see if there's a --lang flag.
|
| const CommandLine& parsed_command_line = *CommandLine::ForCurrentProcess();
|
| - const std::wstring& lang_arg =
|
| - parsed_command_line.GetSwitchValue(switches::kLang);
|
| + const std::string& lang_arg = WideToASCII(
|
| + parsed_command_line.GetSwitchValue(switches::kLang));
|
| if (!lang_arg.empty()) {
|
| - if (CheckAndResolveLocale(lang_arg, locale_path.ToWStringHack(),
|
| - &resolved_locale))
|
| + if (CheckAndResolveLocale(lang_arg, locale_path, &resolved_locale))
|
| return resolved_locale;
|
| }
|
|
|
| // Second, try user prefs.
|
| if (!pref_locale.empty()) {
|
| - if (CheckAndResolveLocale(pref_locale, locale_path.ToWStringHack(),
|
| - &resolved_locale))
|
| + if (CheckAndResolveLocale(WideToASCII(pref_locale),
|
| + locale_path, &resolved_locale))
|
| return resolved_locale;
|
| }
|
|
|
| // Next, try the system locale.
|
| - const std::wstring system_locale = GetSystemLocale();
|
| - if (CheckAndResolveLocale(system_locale, locale_path.ToWStringHack(),
|
| - &resolved_locale))
|
| + const std::string system_locale = GetSystemLocale();
|
| + if (CheckAndResolveLocale(system_locale, locale_path, &resolved_locale))
|
| return resolved_locale;
|
|
|
| // Fallback on en-US.
|
| - const std::wstring fallback_locale(L"en-US");
|
| - if (IsLocaleAvailable(fallback_locale, locale_path.ToWStringHack()))
|
| + const std::string fallback_locale("en-US");
|
| + if (IsLocaleAvailable(fallback_locale, locale_path))
|
| return fallback_locale;
|
|
|
| // No locale data file was found; we shouldn't get here.
|
| NOTREACHED();
|
|
|
| - return std::wstring();
|
| + return std::string();
|
| #endif
|
| }
|
|
|
| -std::wstring GetLocalName(const std::string& locale_code_str,
|
| - const std::wstring& app_locale_wstr,
|
| - bool is_for_ui) {
|
| - const std::string app_locale = WideToASCII(app_locale_wstr);
|
| - const char* locale_code = locale_code_str.c_str();
|
| +string16 GetDisplayNameForLocale(const std::string& locale_code,
|
| + const std::string& display_locale,
|
| + bool is_for_ui) {
|
| UErrorCode error = U_ZERO_ERROR;
|
| const int buffer_size = 1024;
|
|
|
| -#if defined(WCHAR_T_IS_UTF32)
|
| - string16 name_local_utf16;
|
| - int actual_size = uloc_getDisplayName(locale_code, app_locale.c_str(),
|
| - WriteInto(&name_local_utf16, buffer_size + 1), buffer_size, &error);
|
| - std::wstring name_local = UTF16ToWide(name_local_utf16);
|
| -#else
|
| - std::wstring name_local;
|
| - int actual_size = uloc_getDisplayName(locale_code, app_locale.c_str(),
|
| - WriteInto(&name_local, buffer_size + 1), buffer_size, &error);
|
| -#endif
|
| + string16 display_name;
|
| + int actual_size = uloc_getDisplayName(locale_code.c_str(),
|
| + display_locale.c_str(),
|
| + WriteInto(&display_name, buffer_size + 1), buffer_size, &error);
|
| DCHECK(U_SUCCESS(error));
|
| - name_local.resize(actual_size);
|
| + display_name.resize(actual_size);
|
| // Add an RTL mark so parentheses are properly placed.
|
| if (is_for_ui && GetTextDirection() == RIGHT_TO_LEFT) {
|
| - name_local.push_back(static_cast<wchar_t>(kRightToLeftMark));
|
| + display_name.push_back(static_cast<char16>(kRightToLeftMark));
|
| }
|
| - return name_local;
|
| + return display_name;
|
| }
|
|
|
| std::wstring GetString(int message_id) {
|
| @@ -327,6 +314,7 @@
|
| return formatted;
|
| }
|
|
|
| +#if !defined(WCHAR_T_IS_UTF16)
|
| std::wstring GetStringF(int message_id, const std::wstring& a) {
|
| return UTF16ToWide(GetStringF(message_id, WideToUTF16(a), string16(),
|
| string16(), string16(), NULL));
|
| @@ -355,6 +343,7 @@
|
| return UTF16ToWide(GetStringF(message_id, WideToUTF16(a), WideToUTF16(b),
|
| WideToUTF16(c), WideToUTF16(d), NULL));
|
| }
|
| +#endif
|
|
|
| std::string GetStringFUTF8(int message_id,
|
| const string16& a) {
|
| @@ -384,6 +373,32 @@
|
| return UTF16ToUTF8(GetStringF(message_id, a, b, c, d, NULL));
|
| }
|
|
|
| +string16 GetStringFUTF16(int message_id,
|
| + const string16& a) {
|
| + return GetStringF(message_id, a, string16(), string16(), string16(), NULL);
|
| +}
|
| +
|
| +string16 GetStringFUTF16(int message_id,
|
| + const string16& a,
|
| + const string16& b) {
|
| + return GetStringF(message_id, a, b, string16(), string16(), NULL);
|
| +}
|
| +
|
| +string16 GetStringFUTF16(int message_id,
|
| + const string16& a,
|
| + const string16& b,
|
| + const string16& c) {
|
| + return GetStringF(message_id, a, b, c, string16(), NULL);
|
| +}
|
| +
|
| +string16 GetStringFUTF16(int message_id,
|
| + const string16& a,
|
| + const string16& b,
|
| + const string16& c,
|
| + const string16& d) {
|
| + return GetStringF(message_id, a, b, c, d, NULL);
|
| +}
|
| +
|
| std::wstring GetStringF(int message_id, const std::wstring& a, size_t* offset) {
|
| DCHECK(offset);
|
| std::vector<size_t> offsets;
|
| @@ -678,7 +693,7 @@
|
| return CompareStringWithCollator(collator_, lhs, rhs) == UCOL_LESS;
|
| };
|
|
|
| -void SortStrings(const std::wstring& locale,
|
| +void SortStrings(const std::string& locale,
|
| std::vector<std::wstring>* strings) {
|
| SortVectorWithStringKey(locale, strings, false);
|
| }
|
| @@ -692,7 +707,7 @@
|
| // Filter out the names that have aliases.
|
| if (IsDuplicateName(locale_name))
|
| continue;
|
| - if (!IsLocaleSupportedByOS(ASCIIToWide(locale_name)))
|
| + if (!IsLocaleSupportedByOS(locale_name))
|
| continue;
|
| // Normalize underscores to hyphens because that's what our locale files
|
| // use.
|
|
|