summaryrefslogtreecommitdiffstats
path: root/chrome/browser/translate/translate_manager.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/translate/translate_manager.cc')
-rw-r--r--chrome/browser/translate/translate_manager.cc27
1 files changed, 22 insertions, 5 deletions
diff --git a/chrome/browser/translate/translate_manager.cc b/chrome/browser/translate/translate_manager.cc
index 0888ba5..1fcf475 100644
--- a/chrome/browser/translate/translate_manager.cc
+++ b/chrome/browser/translate/translate_manager.cc
@@ -459,7 +459,7 @@ void TranslateManager::InitiateTranslation(TabContents* tab,
if (GetTranslateInfoBarDelegate(tab))
return;
- std::string target_lang = GetTargetLanguage();
+ std::string target_lang = GetTargetLanguage(prefs);
std::string language_code = GetLanguageCode(page_lang);
// Nothing to do if either the language Chrome is in or the language of the
// page is not supported by the translation server.
@@ -761,10 +761,27 @@ void TranslateManager::ShowInfoBar(TabContents* tab,
}
// static
-std::string TranslateManager::GetTargetLanguage() {
- std::string target_lang =
- GetLanguageCode(g_browser_process->GetApplicationLocale());
- return IsSupportedLanguage(target_lang) ? target_lang : std::string();
+std::string TranslateManager::GetTargetLanguage(PrefService* prefs) {
+ std::string ui_lang =
+ GetLanguageCode(g_browser_process->GetApplicationLocale());
+ if (IsSupportedLanguage(ui_lang))
+ return ui_lang;
+
+ // Getting the accepted languages list
+ std::string accept_langs_str = prefs->GetString(prefs::kAcceptLanguages);
+
+ std::vector<std::string> accept_langs_list;
+ base::SplitString(accept_langs_str, ',', &accept_langs_list);
+
+ // Will translate to the first supported language on the Accepted Language
+ // list or not at all if no such candidate exists
+ std::vector<std::string>::iterator iter;
+ for (iter = accept_langs_list.begin();
+ iter != accept_langs_list.end(); ++iter) {
+ if (IsSupportedLanguage(GetLanguageCode(*iter)))
+ return *iter;
+ }
+ return std::string();
}
// static