Index: chrome/renderer/translate_helper.cc |
diff --git a/chrome/renderer/translate_helper.cc b/chrome/renderer/translate_helper.cc |
index fcbc3c7bd5cee7a114f82532a5b62581e5b1f55a..259d274609ee3b1198cf8a1d4188a680f52ae727 100644 |
--- a/chrome/renderer/translate_helper.cc |
+++ b/chrome/renderer/translate_helper.cc |
@@ -9,6 +9,7 @@ |
#include "base/logging.h" |
#include "base/message_loop.h" |
#include "base/metrics/histogram.h" |
+#include "base/string16.h" |
#include "base/utf_string_conversions.h" |
#include "chrome/common/chrome_constants.h" |
#include "chrome/common/render_messages.h" |
@@ -60,9 +61,17 @@ TranslateHelper::~TranslateHelper() { |
void TranslateHelper::PageCaptured(const string16& contents) { |
WebDocument document = render_view()->GetWebView()->mainFrame()->document(); |
- // If the page explicitly specifies a language, use it, otherwise we'll |
+ |
// determine it based on the text content using the CLD. |
MAD
2012/10/02 20:15:26
determine it???
|
- std::string language = GetPageLanguageFromMetaTag(&document); |
+ std::string language = document.contentLanguage().utf8(); |
+ size_t coma_index = language.find(','); |
+ if (coma_index != std::string::npos) { |
+ // There are more than 1 language specified, just keep the first one. |
+ language = language.substr(0, coma_index); |
+ } |
+ TrimWhitespaceASCII(language, TRIM_ALL, &language); |
+ language = StringToLowerASCII(language); |
+ |
if (language.empty()) { |
base::TimeTicks begin_time = base::TimeTicks::Now(); |
language = DetermineTextLanguage(contents); |
@@ -105,40 +114,6 @@ bool TranslateHelper::IsPageTranslatable(WebDocument* document) { |
} |
// static |
-std::string TranslateHelper::GetPageLanguageFromMetaTag(WebDocument* document) { |
- // The META language tag looks like: |
- // <meta http-equiv="content-language" content="en"> |
- // It can contain more than one language: |
- // <meta http-equiv="content-language" content="en, fr"> |
- std::vector<WebElement> meta_elements; |
- webkit_glue::GetMetaElementsWithAttribute(document, |
- ASCIIToUTF16("http-equiv"), |
- ASCIIToUTF16("content-language"), |
- &meta_elements); |
- if (meta_elements.empty()) |
- return std::string(); |
- |
- // We don't expect more than one such tag. If there are several, just use the |
- // first one. |
- WebString attribute = meta_elements[0].getAttribute("content"); |
- if (attribute.isEmpty()) |
- return std::string(); |
- |
- // The value is supposed to be ASCII. |
- if (!IsStringASCII(attribute)) |
- return std::string(); |
- |
- std::string language = StringToLowerASCII(UTF16ToASCII(attribute)); |
- size_t coma_index = language.find(','); |
- if (coma_index != std::string::npos) { |
- // There are more than 1 language specified, just keep the first one. |
- language = language.substr(0, coma_index); |
- } |
- TrimWhitespaceASCII(language, TRIM_ALL, &language); |
- return language; |
-} |
- |
-// static |
std::string TranslateHelper::DetermineTextLanguage(const string16& text) { |
std::string language = chrome::kUnknownLanguageCode; |
int num_languages = 0; |