Index: base/win/i18n.cc |
diff --git a/base/win/i18n.cc b/base/win/i18n.cc |
deleted file mode 100644 |
index 9e523a15cb2acb7b45b378d0c9739232dc6b7c12..0000000000000000000000000000000000000000 |
--- a/base/win/i18n.cc |
+++ /dev/null |
@@ -1,169 +0,0 @@ |
-// Copyright (c) 2010 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "base/win/i18n.h" |
- |
-#include <windows.h> |
- |
-#include "base/logging.h" |
- |
-namespace { |
- |
-// Keep this enum in sync with kLanguageFunctionNames. |
-enum LanguageFunction { |
- SYSTEM_LANGUAGES, |
- USER_LANGUAGES, |
- PROCESS_LANGUAGES, |
- THREAD_LANGUAGES, |
- NUM_FUNCTIONS |
-}; |
- |
-const char kSystemLanguagesFunctionName[] = "GetSystemPreferredUILanguages"; |
-const char kUserLanguagesFunctionName[] = "GetUserPreferredUILanguages"; |
-const char kProcessLanguagesFunctionName[] = "GetProcessPreferredUILanguages"; |
-const char kThreadLanguagesFunctionName[] = "GetThreadPreferredUILanguages"; |
- |
-// Keep this array in sync with enum LanguageFunction. |
-const char *const kLanguageFunctionNames[] = { |
- &kSystemLanguagesFunctionName[0], |
- &kUserLanguagesFunctionName[0], |
- &kProcessLanguagesFunctionName[0], |
- &kThreadLanguagesFunctionName[0] |
-}; |
- |
-COMPILE_ASSERT(NUM_FUNCTIONS == arraysize(kLanguageFunctionNames), |
- language_function_enum_and_names_out_of_sync); |
- |
-// Calls one of the MUI Get*PreferredUILanguages functions, placing the result |
-// in |languages|. |function| identifies the function to call and |flags| is |
-// the function-specific flags (callers must not specify MUI_LANGUAGE_ID or |
-// MUI_LANGUAGE_NAME). Returns true if at least one language is placed in |
-// |languages|. |
-bool GetMUIPreferredUILanguageList(LanguageFunction function, ULONG flags, |
- std::vector<wchar_t>* languages) { |
- DCHECK(0 <= function && NUM_FUNCTIONS > function); |
- DCHECK_EQ(0U, (flags & (MUI_LANGUAGE_ID | MUI_LANGUAGE_NAME))); |
- DCHECK(languages); |
- |
- HMODULE kernel32 = GetModuleHandle(L"kernel32.dll"); |
- if (NULL != kernel32) { |
- typedef BOOL (WINAPI* GetPreferredUILanguages_Fn)( |
- DWORD, PULONG, PZZWSTR, PULONG); |
- GetPreferredUILanguages_Fn get_preferred_ui_languages = |
- reinterpret_cast<GetPreferredUILanguages_Fn>( |
- GetProcAddress(kernel32, kLanguageFunctionNames[function])); |
- if (NULL != get_preferred_ui_languages) { |
- const ULONG call_flags = flags | MUI_LANGUAGE_NAME; |
- ULONG language_count = 0; |
- ULONG buffer_length = 0; |
- if (get_preferred_ui_languages(call_flags, &language_count, NULL, |
- &buffer_length) && |
- 0 != buffer_length) { |
- languages->resize(buffer_length); |
- if (get_preferred_ui_languages(call_flags, &language_count, |
- &(*languages)[0], &buffer_length) && |
- 0 != language_count) { |
- DCHECK(languages->size() == buffer_length); |
- return true; |
- } else { |
- DPCHECK(0 == language_count) |
- << "Failed getting preferred UI languages."; |
- } |
- } else { |
- DPCHECK(0 == buffer_length) |
- << "Failed getting size of preferred UI languages."; |
- } |
- } else { |
- DVLOG(2) << "MUI not available."; |
- } |
- } else { |
- NOTREACHED() << "kernel32.dll not found."; |
- } |
- |
- return false; |
-} |
- |
-bool GetUserDefaultUILanguage(std::wstring* language, std::wstring* region) { |
- DCHECK(language); |
- |
- LANGID lang_id = ::GetUserDefaultUILanguage(); |
- if (LOCALE_CUSTOM_UI_DEFAULT != lang_id) { |
- const LCID locale_id = MAKELCID(lang_id, SORT_DEFAULT); |
- // max size for LOCALE_SISO639LANGNAME and LOCALE_SISO3166CTRYNAME is 9 |
- wchar_t result_buffer[9]; |
- int result_length = |
- GetLocaleInfo(locale_id, LOCALE_SISO639LANGNAME, &result_buffer[0], |
- arraysize(result_buffer)); |
- DPCHECK(0 != result_length) << "Failed getting language id"; |
- if (1 < result_length) { |
- language->assign(&result_buffer[0], result_length - 1); |
- region->clear(); |
- if (SUBLANG_NEUTRAL != SUBLANGID(lang_id)) { |
- result_length = |
- GetLocaleInfo(locale_id, LOCALE_SISO3166CTRYNAME, &result_buffer[0], |
- arraysize(result_buffer)); |
- DPCHECK(0 != result_length) << "Failed getting region id"; |
- if (1 < result_length) |
- region->assign(&result_buffer[0], result_length - 1); |
- } |
- return true; |
- } |
- } else { |
- // This is entirely unexpected on pre-Vista, which is the only time we |
- // should try GetUserDefaultUILanguage anyway. |
- NOTREACHED() << "Cannot determine language for a supplemental locale."; |
- } |
- return false; |
-} |
- |
-bool GetPreferredUILanguageList(LanguageFunction function, ULONG flags, |
- std::vector<std::wstring>* languages) { |
- std::vector<wchar_t> buffer; |
- std::wstring language; |
- std::wstring region; |
- |
- if (GetMUIPreferredUILanguageList(function, flags, &buffer)) { |
- std::vector<wchar_t>::const_iterator scan = buffer.begin(); |
- language.assign(&*scan); |
- while (!language.empty()) { |
- languages->push_back(language); |
- scan += language.size() + 1; |
- language.assign(&*scan); |
- } |
- } else if (GetUserDefaultUILanguage(&language, ®ion)) { |
- // Mimic the MUI behavior of putting the neutral version of the lang after |
- // the regional one (e.g., "fr-CA, fr"). |
- if (!region.empty()) |
- languages->push_back(std::wstring(language) |
- .append(1, L'-') |
- .append(region)); |
- languages->push_back(language); |
- } else { |
- return false; |
- } |
- |
- return true; |
-} |
- |
-} // namespace |
- |
-namespace base { |
-namespace win { |
-namespace i18n { |
- |
-bool GetUserPreferredUILanguageList(std::vector<std::wstring>* languages) { |
- DCHECK(languages); |
- return GetPreferredUILanguageList(USER_LANGUAGES, 0, languages); |
-} |
- |
-bool GetThreadPreferredUILanguageList(std::vector<std::wstring>* languages) { |
- DCHECK(languages); |
- return GetPreferredUILanguageList( |
- THREAD_LANGUAGES, MUI_MERGE_SYSTEM_FALLBACK | MUI_MERGE_USER_FALLBACK, |
- languages); |
-} |
- |
-} // namespace i18n |
-} // namespace win |
-} // namespace base |