diff options
-rw-r--r-- | chrome/browser/renderer_host/translation_service.cc | 31 | ||||
-rw-r--r-- | chrome/browser/renderer_host/translation_service.h | 11 | ||||
-rw-r--r-- | chrome/browser/translate/translate_manager.cc | 2 |
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; } |