Почему Chrome неправильно определяет страницу на другом языке и предлагает перевод?


173

Новая функция автоматического перевода Google Chrome запускается на одной странице в одном из наших приложений. Всякий раз, когда мы переходим на эту конкретную страницу, Chrome сообщает нам, что страница написана на датском языке, и предлагает перевод. Страница на английском языке, как и любая другая страница в нашем приложении. Эта конкретная страница является внутренней страницей тестирования, которая имеет несколько десятков полей формы с английскими метками. Я понятия не имею, почему Chrome считает эту страницу датской.

Кто-нибудь знает, как работает эта функция определения языка и как я могу определить, что заставляет Chrome считать страницу датской?


1
Это длинный выстрел, но на странице мало слов? Попробуйте другие страницы, которые содержат несколько слов, имеют ли они такой же симптом? Я предполагаю, что где-то на сервере есть конфигурация, которая устанавливает языковой стандарт на датский, и поскольку на странице недостаточно слов для определения языка, chrome просто соответствует предположению сервера.
Хасен


7
Норвежский Бокмал здесь. Я использовал слово «Barf» на нескольких кнопках. Я изменил слово на «Отказов», и теперь Chrome думает, что это голландский. Whaaaaaat?
Томас Питер

Ответы:


222

Обновление: согласно Google

Мы не используем какую-либо информацию о языке уровня кода, такую ​​как атрибуты lang.

Они рекомендуют вам сделать очевидным, что язык вашего сайта. Используйте следующее, которое, кажется, помогает, хотя Content-Languageявляется устаревшим, и Google говорит, что они игнорируютlang

<html lang="en" xml:lang="en" xmlns= "http://www.w3.org/1999/xhtml">
<meta charset="UTF-8">
<meta name="google" content="notranslate">
<meta http-equiv="Content-Language" content="en">

Если это не сработает, вы всегда можете поместить кучу текста (например, страницу «О программе») в скрытый блок. Это также может помочь с SEO.

РЕДАКТИРОВАТЬ (и больше информации)

ОП спрашивает о Chrome, поэтому рекомендации Google размещены выше. Как правило, есть три способа сделать это для других браузеров:

  1. Рекомендация W3C : используйтеатрибутыlangи / илиxml:langв теге html:

    <html lang="en" xml:lang="en" xmlns= "http://www.w3.org/1999/xhtml">
  2. ОБНОВЛЕНИЕ: ранее рекомендация Google теперь устарела, хотя это может помочь с Chrome. : meta http-equiv(как описано выше):

    <meta http-equiv="Content-Language" content="en">
  3. Используйте заголовки HTTP (не рекомендуется на основе тестов распознавания между браузерами ):

    HTTP/1.1 200 OK
    Date: Wed, 05 Nov 2003 10:46:04 GMT
    Content-Type: text/html; charset=iso-8859-1
    Content-Language: en

Полностью выйдите из Chrome и перезапустите его, чтобы убедиться, что изменение обнаружено. Chrome не всегда выбирает новый метатег при обновлении вкладки.


1
Вот описание мета-тегов Google: support.google.com/webmasters/bin/…
Джошуа Дэвис,

7
@Emile: работает, если вы загрузите страницу в новой вкладке. Это не сработает, если вы просто нажмете F5 для обновления.
Стефан Штайгер

1
В html5 это должно быть содержимое вместо значения: <meta name = "google" content = "notranslate" />
r03

1
@ Джек, это не рекомендация Google или W3C. Несмотря на то, что ваша задача действительно вызвала интересную информацию, которая поставила мой ответ на вопрос: w3.org/International/tests/html-css/language-declarations/…
Кайл

2
Хром, кажется, делает все, что хочет. Я могу вернуть txt-файлы на английском языке, указав, что они являются ASCII в заголовках ответа HTTP, и даже если данные содержат только символы ASCII, chrome все же выполняет частотный анализ байтов и подсказывает пользователю, что он на другом языке.
Myforwik

3

Я добавил lang="en"к объявлению doctype, добавил метатеги для charset utf-8 и Content-Langauge в заголовке HTML, указал charset как utf-8 и Content-Language как enв заголовках ответа HTTP, и это не помешало Chrome объявить мой Страница была на португальском языке. Единственное, что решило проблему, это добавило это в HTML-заголовок:

<meta name="google" content="notranslate">

Но теперь я запретил пользователям переводить мою страницу на английском языке на свой язык. Плохая работа, Хром. Вы можете быть лучше, чем это.


2

Не зная, что это был за текст, возможно, обнаружение ngram обмануло содержанием вашей страницы.

http://googleresearch.blogspot.com/2006/08/all-our-n-gram-are-belong-to-you.html

https://en.wikipedia.org/wiki/N-gram


2
Но вопрос в том, как я могу отладить его или получить больше информации для Chrome, чтобы выяснить, почему именно он сделал свой выбор?
Сэмюэль Нефф

2
Не видя текста, я не могу сказать наверняка. Некоторые вещи, которые нужно попробовать: - Если вы скопируете текст и вставите его в translate.google.com и установите для него значение «Определить язык», он говорит вам, что это английский или нет? - Если там написано, что это по-датски, я бы начал снимать предложения, пока ты не найдешь смутьяна.
NinjaCat

Привет, Сэм. Это то, что я предлагаю. Там нет никакого способа спросить это, почему он принял решение. В вашем тексте есть какое-то предложение или формулировка, которая обманывает его (в конце концов, машинный перевод почти не совершенен). Чтобы отладить эту вещь, я бы вынул предложение за предложением, пока оно не распознает правильный язык.
NinjaCat

1

Chromium считает эту страницу на филиппинском: http://www.reyalvarado.com/portfolio/cuba/ Примечания. На странице почти нет текста, кроме имени владельца и пунктов меню. Пункты меню динамически заменяются изображениями с помощью FLIR.

HTML-код объявляет страницу как американский английский:

<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en-US"> 

1
Да, у меня та же проблема. Не много текста на странице, а элемент <html> имеет lang = "en" и xml: lang = "en". Хром игнорирует это!
Джошуа Дэвис

1
@JoshuaDavis, я перепробовал все, что выше атрибута lang, мета-теги (кроме непереведенного). В конце концов мне это удалось исправить, добавив атрибут dir = "ltr".
Дэн Морфис

1
dir = "ltr" - это ... направление слева направо? Вот это да.
Джошуа Дэвис,

1

Укажите язык по умолчанию для документа, затем используйте атрибут translate и notranslateкласс Google для элемента / контейнера, как в:

<html lang="en">
    ...
    <span><a href="#" translate="no" class="notranslate">English</a></span>

Объяснение:

Принятый ответ представляет собой общее решение, но не описывает, как указать язык для элемента, что может исправить ошибку и обеспечить перевод вашей страницы .

Почему это лучше? Это будет взаимодействовать с интернационализацией Google, а не отключать ее. Возвращаясь к ОП:

Почему Chrome неправильно определяет страницу на другом языке и предлагает перевод?

Ответ : Google пытается помочь вам с интернационализацией, но мы должны понять, почему это не удается. Опираясь на ответ NinjaCat , мы предполагаем, что Google читает и предсказывает язык вашего сайта с помощью алгоритма N-граммы - поэтому мы не можем точно сказать, почему Google хочет перевести вашу страницу; мы можем только предположить, что:

  1. На вашей странице есть слова, которые принадлежат другому языку.
  2. Пометка содержащего элемента как translate="no"и lang="en"(или удаление этих слов) поможет Google правильно предсказать язык вашей страницы.

К сожалению, большинство людей, попадающих на этот пост, не знают, какие слова вызывают проблемы. Используйте встроенную в Chrome функцию «Перевести на английский» (в контекстном меню правого клика), чтобы увидеть, что переводится, вы можете увидеть неожиданные переводы, подобные следующим :

введите описание изображения здесь

Поэтому обновляйте ваш html соответствующими тегами перевода, пока перевод Google вашей страницы ничего не изменит - тогда мы должны ожидать, что всплывающее окно исчезнет для будущих посетителей.

Не будет ли много работы по добавлению всех этих дополнительных тегов? Да, очень вероятно Если вы используете Wordpress или другую систему управления контентом, посмотрите в их документации быстрые способы обновления вашего кода!


Это работает для меня, метатеги все еще позволяют переводить всплывающее окно.
Райан

0

Попробуйте включить свойство xml:lang=""в <html>, если другие решения не работают:

<html class="no-js" lang="pt-BR" dir="ltr" xml:lang="pt-BR">

1
Этот подход не работал для меня. Похоже, что Chrome игнорирует lang = "..." и xml: lang = "...".
Джошуа Дэвис

Это приводит к тому, что Chrome не знает, на каком языке написана страница, поэтому он не предлагает перевод.
Картер Медлин
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.