Dlaczego Chrome nieprawidłowo określa, że ​​strona jest w innym języku i proponuje tłumaczenie?

173

Nowa funkcja automatycznego tłumaczenia przeglądarki Google Chrome uruchamia się na jednej stronie w jednej z naszych aplikacji. Za każdym razem, gdy przechodzimy do tej konkretnej strony, Chrome informuje nas, że jest ona w języku duńskim i proponuje tłumaczenie. Strona jest w języku angielskim, tak jak każda inna strona w naszej aplikacji. Ta konkretna strona jest wewnętrzną stroną testową, która ma kilkadziesiąt pól formularzy z angielskimi etykietami. Nie mam pojęcia, dlaczego Chrome uważa, że ​​ta strona jest duńska.

Czy ktoś ma wgląd w to, jak działa ta funkcja wykrywania języka i jak mogę ustalić, dlaczego Chrome uważa, że ​​strona jest po duńsku?

Samuel Neff
źródło
1
To dalekie ujęcie, ale czy strona zawiera bardzo mało słów? Wypróbuj inne strony, które zawierają niewiele słów, czy wykazują ten sam objaw? Domyślam się, że gdzieś na serwerze istnieje konfiguracja, która ustawia język duński, a ponieważ na stronie nie ma wystarczającej liczby słów, aby określić język, chrome po prostu działa zgodnie z założeniami serwera.
hasen
7
Tutaj norweski Bokmal. Na kilku przyciskach użyłem słowa „Barf”. Zmieniłem słowo na „Bounce” i teraz Chrome myśli, że to holenderskie. Whaaaaaat?
thomas-peter

Odpowiedzi:

222

Aktualizacja: według Google

Nie używamy żadnych informacji o języku na poziomie kodu, takich jak atrybuty lang.

Zalecają, abyś jasno określił język Twojej witryny. Użyj poniższego, który wydaje się pomocny, chociaż Content-Languagejest przestarzały, a Google twierdzi, że ignorujelang

<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">

Jeśli to nie zadziała, zawsze możesz umieścić fragment tekstu (na przykład stronę „Informacje”) w ukrytym elemencie div. Może to również pomóc w SEO.

EDYTUJ (i więcej informacji)

OP pyta o Chrome, więc rekomendacja Google jest zamieszczona powyżej. W przypadku innych przeglądarek można to zrobić na trzy sposoby:

  1. Zalecenie W3C : użyjatrybutówlangi / lubxml:langw tagu html:

    <html lang="en" xml:lang="en" xmlns= "http://www.w3.org/1999/xhtml">
  2. AKTUALIZACJA: poprzednio zalecenie Google, teraz wycofuje specyfikację, chociaż nadal może pomóc w Chrome. : meta http-equiv(jak opisano powyżej):

    <meta http-equiv="Content-Language" content="en">
  3. Użyj nagłówków HTTP (niezalecane na podstawie testów rozpoznawania różnych przeglądarek ):

    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
    

Zamknij Chrome całkowicie i uruchom go ponownie, aby upewnić się, że zmiana została wykryta. Chrome nie zawsze odbiera nowy metatag podczas odświeżania karty.

Kyle
źródło
1
Oto opis metatagów Google: support.google.com/webmasters/bin/…
Joshua Davis
7
@Emile: Działa, jeśli załadujesz stronę w nowej karcie. To nie działa, jeśli po prostu naciśniesz F5, aby odświeżyć.
Stefan Steiger
1
W html5 powinno to być content zamiast value: <meta name = "google" content = "notranslate" />
r03
1
@Jack, to nie jest ani rekomendacja Google, ani W3C. Chociaż twoje wyzwanie przyniosło interesujące informacje, które zmieniły
Kyle
2
Wydaje się, że Chrome robi, co chce. Mogę zwrócić pliki txt w języku angielskim, określając, że w nagłówkach odpowiedzi HTTP znajdują się ASCII, a nawet jeśli dane zawierają tylko znaki ASCII, chrome nadal przeprowadza analizę częstotliwości na bajtach i monituje użytkownika, że ​​jest w innym języku.
Myforwik,
3

Dodałem lang="en"do deklaracji doctype, dodałem metatagi dla charset utf-8 i Content-Langauge w nagłówku HTML, określiłem zestaw znaków jako utf-8 i Content-Language jako enw nagłówkach odpowiedzi HTTP i nie zrobiło to nic, aby Chrome nie zadeklarował mojego strona była w języku portugalskim. Jedyną rzeczą, która rozwiązała problem, było dodanie tego do nagłówka HTML:

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

Ale teraz uniemożliwiłem użytkownikom tłumaczenie mojej strony, która jest wyraźnie w języku angielskim na ich własny język. Kiepska praca, Chrome. Możesz być lepszy niż to.

Chris Broski
źródło
2

Nie wiedząc, jaki był tekst, być może zawartość twojej strony oszukuje wykrywanie ngram.

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

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

NinjaCat
źródło
2
Ale pytanie brzmi, jak mogę go debugować lub uzyskać więcej informacji o Chrome, aby dokładnie dowiedzieć się, dlaczego dokonał wyboru?
Samuel Neff
2
Nie widząc tekstu, nie mogę powiedzieć na pewno. Oto kilka rzeczy do wypróbowania: - Jeśli skopiujesz tekst i wkleisz go na translate.google.com i ustawisz na „Wykryj język”, czy powie Ci, że jest to angielski, czy nie? - Jeśli jest napisane, że jest duński lub cokolwiek innego, zaczynałbym usuwać zdania, dopóki nie znajdziesz sprawcy.
NinjaCat
Cześć Sam - W efekcie to sugeruję. Nie ma sposobu, aby zapytać, dlaczego podjęła taką decyzję. W twoim tekście jest jakieś zdanie lub sformułowanie, które go oszukuje (w końcu tłumaczenie maszynowe nie jest prawie idealne). Aby to debugować, wyciągałbym zdanie po zdaniu, dopóki nie rozpozna prawidłowego języka.
NinjaCat
1

Chromium uważa, że ​​ta strona jest po filipińsku: http://www.reyalvarado.com/portfolio/cuba/ Uwagi: Na stronie nie ma prawie żadnego tekstu oprócz nazwiska właściciela i pozycji menu. Elementy menu są dynamicznie zastępowane obrazami przez firmę FLIR.

HTML deklaruje stronę jako angielski (USA):

<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en-US"> 
James Revillini
źródło
1
Tak, mam ten sam problem. Niewiele tekstu na stronie, a element <html> zawiera lang = "en" i xml: lang = "en". Chrome to ignoruje!
Joshua Davis
1
@JoshuaDavis, próbowałem wszystkiego powyżej atrybutu lang, metatagów (z wyjątkiem notranslate). Ostatecznie naprawiło to dodanie atrybutu dir = "ltr".
Dan Morphis,
1
dir = "ltr" to ... kierunek, chyba od lewej do prawej? Łał.
Joshua Davis,
1

Określ domyślny język dokumentu, a następnie użyj atrybutu translate i notranslateklasy Google dla każdego elementu / kontenera, na przykład:

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

Wyjaśnienie:

Zaakceptowana odpowiedź przedstawia ogólne rozwiązanie, ale nie dotyczy sposobu określania języka dla każdego elementu, co może naprawić błąd i zapewnić, że strona będzie nadal przetłumaczalna .

Dlaczego tak jest lepiej? To będzie współpracować z umiędzynarodowieniem Google, a nie wyłączać go. Odnosząc się do PO:

Dlaczego Chrome nieprawidłowo określa, że ​​strona jest w innym języku i proponuje tłumaczenie?

Odpowiedź : Google stara się pomóc w internacjonalizacji, ale musimy zrozumieć, dlaczego to się nie udaje. Opierając się na odpowiedzi NinjaCat , zakładamy, że Google czyta i przewiduje język Twojej witryny za pomocą algorytmu N-gramowego - więc nie możemy dokładnie powiedzieć, dlaczego Google chce przetłumaczyć Twoją stronę; możemy tylko założyć, że:

  1. Na Twojej stronie znajdują się słowa, które należą do innego języka.
  2. Oznaczenie elementu zawierającego jako translate="no"i lang="en"(lub usunięcie tych słów) pomoże Google poprawnie przewidzieć język Twojej strony.

Niestety, większość osób, które trafiają do tego posta, nie wie, jakie słowa powodują problem. Użyj wbudowanej w Chrome funkcji „Przetłumacz na angielski” (w menu kontekstowym prawego przycisku myszy), aby zobaczyć, co zostanie przetłumaczone. Możesz zobaczyć nieoczekiwane tłumaczenia, takie jak następujące :

wprowadź opis obrazu tutaj

Dlatego aktualizuj swój kod HTML odpowiednimi tagami tłumaczeń, aż Tłumaczenie Google Twojej strony nic nie zmieni - wtedy powinniśmy spodziewać się, że wyskakujące okienko zniknie dla przyszłych odwiedzających.

Czy dodanie tych wszystkich dodatkowych tagów nie wymagałoby dużo pracy? Tak, bardzo prawdopodobne. Jeśli używasz Wordpress lub innego systemu zarządzania treścią, zajrzyj do ich dokumentacji, aby szybko zaktualizować swój kod!

mattavatar
źródło
To działa dla mnie, metatagi nadal zezwalały na wyskakujące okienko tłumaczenia.
Ryan
0

Spróbuj dołączyć właściwość xml:lang=""do <html>, jeśli inne rozwiązania nie działają:

<html class="no-js" lang="pt-BR" dir="ltr" xml:lang="pt-BR">
Alan
źródło
1
To podejście nie działa dla mnie. Wydaje się, że Chrome ignoruje lang = "..." i xml: lang = "...".
Joshua Davis
Działa to w celu zmylenia chrome przez brak wiedzy w jakim języku jest strona, więc nie oferuje tłumaczenia.
Carter Medlin