summaryrefslogtreecommitdiffstats
path: root/chrome/browser/translate
diff options
context:
space:
mode:
authorkuan@chromium.org <kuan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-04-02 15:53:44 +0000
committerkuan@chromium.org <kuan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-04-02 15:53:44 +0000
commitf7eb4703666f6e8776ef084e6b60e19616edf7a4 (patch)
tree4f89249b66997767ac2aed0d6595a153b32f6ec7 /chrome/browser/translate
parent931fae8fbb1766629f2d82d772c7f612b440c4b2 (diff)
downloadchromium_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.cc26
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);
}
}