diff options
author | hajimehoshi@chromium.org <hajimehoshi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-20 20:29:07 +0000 |
---|---|---|
committer | hajimehoshi@chromium.org <hajimehoshi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-20 20:29:07 +0000 |
commit | 32beec0c62867a9a31fc3aa17ccedfb486faf8f3 (patch) | |
tree | 7634b7523856b4608e01814790cfd6cd5279273c /chrome/renderer/translate | |
parent | 022f251ed0ba24467b8d78e89ab0893e12e63d73 (diff) | |
download | chromium_src-32beec0c62867a9a31fc3aa17ccedfb486faf8f3.zip chromium_src-32beec0c62867a9a31fc3aa17ccedfb486faf8f3.tar.gz chromium_src-32beec0c62867a9a31fc3aa17ccedfb486faf8f3.tar.bz2 |
Translate: Preserve the dialect code of Chinese
When a page whose Content-Language was 'zh' (not 'zh-TW' or 'zh-CN') was opened, even though CLD knew the dielect of the page, the Translate infobar didn't appear. This CL respects the result of CLD when Content-Language and CLD agree that the page is written in Chinese and the Content-Language doesn't know the dialect.
BUG=250735
Review URL: https://chromiumcodereview.appspot.com/17230003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@207543 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer/translate')
4 files changed, 40 insertions, 9 deletions
diff --git a/chrome/renderer/translate/translate_helper.cc b/chrome/renderer/translate/translate_helper.cc index 4428b53..34b4afe 100644 --- a/chrome/renderer/translate/translate_helper.cc +++ b/chrome/renderer/translate/translate_helper.cc @@ -392,6 +392,16 @@ bool TranslateHelper::MaybeServerWrongConfiguration( } // static +bool TranslateHelper::CanCLDComplementSubCode( + const std::string& page_language, const std::string& cld_language) { + // Translate server cannot treat general Chinese. If Content-Language and + // CLD agree that the language is Chinese and Content-Language doesn't know + // which dialect is used, CLD language has priority. + // TODO(hajimehoshi): How about the other dialects like zh-MO? + return page_language == "zh" && StartsWithASCII(cld_language, "zh-", false); +} + +// static std::string TranslateHelper::DeterminePageLanguage(const std::string& code, const std::string& html_lang, const string16& contents, @@ -445,13 +455,19 @@ std::string TranslateHelper::DeterminePageLanguage(const std::string& code, if (cld_language == chrome::kUnknownLanguageCode) { TranslateHelperMetrics::ReportLanguageVerification( TranslateHelperMetrics::LANGUAGE_VERIFICATION_UNKNOWN); + return language; } else if (IsSameOrSimilarLanguages(language, cld_language)) { TranslateHelperMetrics::ReportLanguageVerification( TranslateHelperMetrics::LANGUAGE_VERIFICATION_CLD_AGREE); + return language; } else if (MaybeServerWrongConfiguration(language, cld_language)) { - language = cld_language; TranslateHelperMetrics::ReportLanguageVerification( TranslateHelperMetrics::LANGUAGE_VERIFICATION_TRUST_CLD); + return cld_language; + } else if (CanCLDComplementSubCode(language, cld_language)) { + TranslateHelperMetrics::ReportLanguageVerification( + TranslateHelperMetrics::LANGUAGE_VERIFICATION_CLD_COMPLEMENT_SUB_CODE); + return cld_language; } else { TranslateHelperMetrics::ReportLanguageVerification( TranslateHelperMetrics::LANGUAGE_VERIFICATION_CLD_DISAGREE); diff --git a/chrome/renderer/translate/translate_helper.h b/chrome/renderer/translate/translate_helper.h index fa2b0b0..7118475 100644 --- a/chrome/renderer/translate/translate_helper.h +++ b/chrome/renderer/translate/translate_helper.h @@ -123,6 +123,11 @@ class TranslateHelper : public content::RenderViewObserver { static bool MaybeServerWrongConfiguration(const std::string& page_language, const std::string& cld_language); + // Checks if CLD can complement a sub code when the page language doesn't + // know the sub code. + static bool CanCLDComplementSubCode(const std::string& page_language, + const std::string& cld_language); + // Determines content page language from Content-Language code and contents. static std::string DeterminePageLanguage(const std::string& code, const std::string& html_lang, diff --git a/chrome/renderer/translate/translate_helper_metrics.h b/chrome/renderer/translate/translate_helper_metrics.h index 89d4de5..d0d5f1a 100644 --- a/chrome/renderer/translate/translate_helper_metrics.h +++ b/chrome/renderer/translate/translate_helper_metrics.h @@ -45,6 +45,7 @@ enum LanguageVerificationType { LANGUAGE_VERIFICATION_CLD_AGREE, LANGUAGE_VERIFICATION_CLD_DISAGREE, LANGUAGE_VERIFICATION_TRUST_CLD, + LANGUAGE_VERIFICATION_CLD_COMPLEMENT_SUB_CODE, LANGUAGE_VERIFICATION_MAX, }; diff --git a/chrome/renderer/translate/translate_helper_metrics_unittest.cc b/chrome/renderer/translate/translate_helper_metrics_unittest.cc index 0851528..b0d4585 100644 --- a/chrome/renderer/translate/translate_helper_metrics_unittest.cc +++ b/chrome/renderer/translate/translate_helper_metrics_unittest.cc @@ -57,7 +57,8 @@ class MetricsRecorder { int expected_unknown, int expected_cld_agree, int expected_cld_disagree, - int expected_trust_cld) { + int expected_trust_cld, + int expected_cld_complement_sub_code) { ASSERT_EQ(TranslateHelperMetrics::GetMetricsName( TranslateHelperMetrics::UMA_LANGUAGE_VERIFICATION), key_); @@ -87,6 +88,11 @@ class MetricsRecorder { expected_trust_cld, GetCountWithoutSnapshot( TranslateHelperMetrics::LANGUAGE_VERIFICATION_TRUST_CLD)); + EXPECT_EQ( + expected_cld_complement_sub_code, + GetCountWithoutSnapshot( + TranslateHelperMetrics:: + LANGUAGE_VERIFICATION_CLD_COMPLEMENT_SUB_CODE)); } void CheckScheme(int expected_http, int expected_https, int expected_others) { @@ -194,25 +200,28 @@ TEST(TranslateHelperMetricsTest, ReportLanguageVerification) { MetricsRecorder recorder(TranslateHelperMetrics::GetMetricsName( TranslateHelperMetrics::UMA_LANGUAGE_VERIFICATION)); - recorder.CheckLanguageVerification(0, 0, 0, 0, 0, 0); + recorder.CheckLanguageVerification(0, 0, 0, 0, 0, 0, 0); TranslateHelperMetrics::ReportLanguageVerification( TranslateHelperMetrics::LANGUAGE_VERIFICATION_CLD_DISABLED); - recorder.CheckLanguageVerification(1, 0, 0, 0, 0, 0); + recorder.CheckLanguageVerification(1, 0, 0, 0, 0, 0, 0); TranslateHelperMetrics::ReportLanguageVerification( TranslateHelperMetrics::LANGUAGE_VERIFICATION_CLD_ONLY); - recorder.CheckLanguageVerification(1, 1, 0, 0, 0, 0); + recorder.CheckLanguageVerification(1, 1, 0, 0, 0, 0, 0); TranslateHelperMetrics::ReportLanguageVerification( TranslateHelperMetrics::LANGUAGE_VERIFICATION_UNKNOWN); - recorder.CheckLanguageVerification(1, 1, 1, 0, 0, 0); + recorder.CheckLanguageVerification(1, 1, 1, 0, 0, 0, 0); TranslateHelperMetrics::ReportLanguageVerification( TranslateHelperMetrics::LANGUAGE_VERIFICATION_CLD_AGREE); - recorder.CheckLanguageVerification(1, 1, 1, 1, 0, 0); + recorder.CheckLanguageVerification(1, 1, 1, 1, 0, 0, 0); TranslateHelperMetrics::ReportLanguageVerification( TranslateHelperMetrics::LANGUAGE_VERIFICATION_CLD_DISAGREE); - recorder.CheckLanguageVerification(1, 1, 1, 1, 1, 0); + recorder.CheckLanguageVerification(1, 1, 1, 1, 1, 0, 0); TranslateHelperMetrics::ReportLanguageVerification( TranslateHelperMetrics::LANGUAGE_VERIFICATION_TRUST_CLD); - recorder.CheckLanguageVerification(1, 1, 1, 1, 1, 1); + recorder.CheckLanguageVerification(1, 1, 1, 1, 1, 1, 0); + TranslateHelperMetrics::ReportLanguageVerification( + TranslateHelperMetrics::LANGUAGE_VERIFICATION_CLD_COMPLEMENT_SUB_CODE); + recorder.CheckLanguageVerification(1, 1, 1, 1, 1, 1, 1); } TEST(TranslateHelperMetricsTest, ReportTimeToBeReady) { |