diff options
author | kuan@chromium.org <kuan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-04-02 15:53:44 +0000 |
---|---|---|
committer | kuan@chromium.org <kuan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-04-02 15:53:44 +0000 |
commit | f7eb4703666f6e8776ef084e6b60e19616edf7a4 (patch) | |
tree | 4f89249b66997767ac2aed0d6595a153b32f6ec7 /chrome/browser/translate | |
parent | 931fae8fbb1766629f2d82d772c7f612b440c4b2 (diff) | |
download | chromium_src-f7eb4703666f6e8776ef084e6b60e19616edf7a4.zip chromium_src-f7eb4703666f6e8776ef084e6b60e19616edf7a4.tar.gz chromium_src-f7eb4703666f6e8776ef084e6b60e19616edf7a4.tar.bz2 |
translate infobar: sort languages in menus by application locale
- provide string16 sorting methods (there were only std::wstring sorting methods before)
- problem is fixed on win, mac, linux and chromeos
BUG=39850
TEST=verify per bug report.
Review URL: http://codereview.chromium.org/1542009
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@43484 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/translate')
-rw-r--r-- | chrome/browser/translate/languages_menu_model.cc | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/chrome/browser/translate/languages_menu_model.cc b/chrome/browser/translate/languages_menu_model.cc index 5231ce0..2fb0925 100644 --- a/chrome/browser/translate/languages_menu_model.cc +++ b/chrome/browser/translate/languages_menu_model.cc @@ -4,8 +4,10 @@ #include "chrome/browser/translate/languages_menu_model.h" +#include "app/l10n_util.h" #include "base/string_util.h" #include "chrome/app/chrome_dll_resource.h" +#include "chrome/browser/browser_process.h" #include "chrome/browser/translate/translate_infobars_delegates.h" LanguagesMenuModel::LanguagesMenuModel( @@ -22,9 +24,31 @@ LanguagesMenuModel::LanguagesMenuModel( base_command_id = IDC_TRANSLATE_TARGET_LANGUAGE_BASE; translate_delegate->GetAvailableTargetLanguages(&languages); } + + // List of languages in chrome language. + std::vector<string16> display_languages; + // Reserve size since we know it. + display_languages.reserve(languages.size()); + + // Map of language's display name to its menu command id. + std::map<string16, int> language_cmdid_map; + + // Get display name of each locale and hash it into language cmdid map. std::vector<std::string>::const_iterator iter = languages.begin(); for (int i = base_command_id; iter != languages.end(); ++i, ++iter) { - AddItem(i, translate_delegate->GetDisplayNameForLocale(*iter)); + string16 display_name = translate_delegate->GetDisplayNameForLocale(*iter); + display_languages.push_back(display_name); + language_cmdid_map[display_name] = i; + } + + // Sort using locale-specific sorter. + l10n_util::SortStrings16(g_browser_process->GetApplicationLocale(), + &display_languages); + + // Add sorted list of display languages to menu. + for (std::vector<string16>::const_iterator iter = display_languages.begin(); + iter != display_languages.end(); ++iter) { + AddItem(language_cmdid_map[*iter], *iter); } } |