summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/renderer_host/translation_service.cc31
-rw-r--r--chrome/browser/renderer_host/translation_service.h11
-rw-r--r--chrome/browser/translate/translate_manager.cc2
3 files changed, 19 insertions, 25 deletions
diff --git a/chrome/browser/renderer_host/translation_service.cc b/chrome/browser/renderer_host/translation_service.cc
index 8f37e35..f3512e7 100644
--- a/chrome/browser/renderer_host/translation_service.cc
+++ b/chrome/browser/renderer_host/translation_service.cc
@@ -33,8 +33,8 @@ const char kFormatParam[] = "format";
const char kSSLParam[] = "ssl";
const char kTranslationCountParam[] = "tc";
-// Describes languages deemed equivalent from a translation point of view.
-// This is used to detect unnecessary translations.
+// Mapping from a locale name to a language code name.
+// Locale names not included are translated as is.
struct LocaleToCLDLanguage {
const char* locale_language; // Language Chrome locale is in.
const char* cld_language; // Language the CLD reports.
@@ -43,6 +43,8 @@ LocaleToCLDLanguage kLocaleToCLDLanguages[] = {
{ "en-GB", "en" },
{ "en-US", "en" },
{ "es-419", "es" },
+ { "pt-PT", "pt" },
+ { "pt-BR", "pt" },
};
// The list of languages the Google translation server supports.
@@ -385,21 +387,6 @@ void TranslationService::OnURLFetchComplete(const URLFetcher* source,
}
// static
-bool TranslationService::ShouldTranslatePage(
- const std::string& page_language, const std::string& chrome_language) {
- // Most locale names are the actual ISO 639 codes that the Google translate
- // API uses, but for the ones longer than 2 chars.
- // See l10n_util.cc for the list.
- for (size_t i = 0; i < arraysize(kLocaleToCLDLanguages); ++i) {
- if (chrome_language == kLocaleToCLDLanguages[i].locale_language &&
- page_language == kLocaleToCLDLanguages[i].cld_language) {
- return false;
- }
- }
- return true;
-}
-
-// static
bool TranslationService::IsTranslationEnabled() {
return GURL(kServiceURL).host() != "disabled";
}
@@ -412,6 +399,16 @@ void TranslationService::GetSupportedLanguages(
languages->push_back(kSupportedLanguages[i]);
}
+// static
+std::string TranslationService::GetLanguageCode(
+ const std::string& chrome_locale) {
+ for (size_t i = 0; i < arraysize(kLocaleToCLDLanguages); ++i) {
+ if (chrome_locale == kLocaleToCLDLanguages[i].locale_language)
+ return kLocaleToCLDLanguages[i].cld_language;
+ }
+ return chrome_locale;
+}
+
////////////////////////////////////////////////////////////////////////////////
// TranslationService, protected:
diff --git a/chrome/browser/renderer_host/translation_service.h b/chrome/browser/renderer_host/translation_service.h
index 1e9ed91..8250eb5 100644
--- a/chrome/browser/renderer_host/translation_service.h
+++ b/chrome/browser/renderer_host/translation_service.h
@@ -59,13 +59,6 @@ class TranslationService : public URLFetcher::Delegate {
const ResponseCookies& cookies,
const std::string& data);
- // Returns true if a page in the language |page_language| (as reported by the
- // CLD) should be translated when Chrome is using |chrome_language|. Note that
- // this returns false for similar languages, for example it returns false when
- // given the values 'en' and 'en-US'.
- static bool ShouldTranslatePage(const std::string& page_language,
- const std::string& chrome_language);
-
// Returns true if the TranslationService is enabled.
static bool IsTranslationEnabled();
@@ -73,6 +66,10 @@ class TranslationService : public URLFetcher::Delegate {
// translate to and from.
static void GetSupportedLanguages(std::vector<std::string>* languages);
+ // Returns the language code that can be used with the Translate method for a
+ // specified |chrome_locale|.
+ static std::string GetLanguageCode(const std::string& chrome_locale);
+
protected:
// The amount of time in ms after which a pending request is sent if no other
// translation request has been received.
diff --git a/chrome/browser/translate/translate_manager.cc b/chrome/browser/translate/translate_manager.cc
index b566033..85d1260 100644
--- a/chrome/browser/translate/translate_manager.cc
+++ b/chrome/browser/translate/translate_manager.cc
@@ -80,13 +80,13 @@ void TranslateManager::InitiateTranslation(TabContents* tab,
}
std::string chrome_lang = g_browser_process->GetApplicationLocale();
+ chrome_lang = TranslationService::GetLanguageCode(chrome_lang);
// We don't want to translate:
// - any Chrome specific page (New Tab Page, Download, History... pages).
// - similar languages (ex: en-US to en).
// - any user black-listed URLs or user selected language combination.
if (entry->url().SchemeIs("chrome") || page_lang == chrome_lang ||
- !TranslationService::ShouldTranslatePage(page_lang, chrome_lang) ||
!TranslatePrefs::CanTranslate(prefs, page_lang, entry->url())) {
return;
}