Всплывающее окно «Перевод языка» отсутствует в DOM, готовом в браузере: Laravel 5.2

У меня есть код в моем контроллере.

public function AllCountries() { $Countries = (new \App\DataAccess\CountryData())->GetAllCountries(); app()->setLocale('fr'); return view('Country.List')->with('Countries', $Countries->getData()->CountryList); } 

Определение метода для извлечения данных приведено ниже.

 public function GetAllCountries() { return response()->json(['CountryList' => \App\Models\CountryModel::all()]); } 

В файле на английском языке у меня есть код ниже.

 return [ 'CountryName' => "E Country" ]; 

В файле на французском языке у меня есть код ниже.

 return [ 'CountryName' => "F Country" ]; 

В файле View у меня есть код ниже.

 {!! trans('CountriesList.CountryName') !!} 

Обычно, когда мы посещаем веб-сайт, который не является языком по умолчанию, установленным в нашем браузере, мы видим уведомление для перевода страницы на загрузку страницы. Смотрите скриншот ниже:

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

Однако этого не происходит для моего веб-сайта. Хотя я вижу французский язык, уведомление о переводе не появляется, поэтому я могу перевести его на английский. Зачем?

Перевод Chrome не изменяет ваши переменные шаблона или не говорит на вашем веб-сайте, что он должен отображать другой язык. Он использует перевод Google для его перевода (другими словами: он не будет искать файл на английском языке на вашем сервере, чтобы перевести «F Country» в «E Country», но перевел «F Country» с помощью google translate).

Чтобы получить сообщение, ваш сайт должен содержать французские слова. Попробуйте заменить «F Country» в вашем языковом файле фактическим французским словом (или, может быть, целым предложением), или просто поместите на свой тестовый сайт какой-нибудь французский контент.

Если сообщение не получено, проверьте настройки хрома («Перевод страницы предложения, когда веб-страница не находится …»), или если вы отключили его для своего сайта.

Затем проверьте, содержат ли метаданные вашего сайта <meta name=”google” value=”notranslate”> , это отключит сообщение для вашего сайта.

Ваш транс (…) можно использовать для перевода вашего сайта в конец. Например, вы можете настроить переменную локального языка (сессии) кнопкой «Я французский», чтобы пользователь мог ее изменить, используя язык браузеров настройки или каким-либо другим средним значением – но это не имеет ничего общего с переходом chrome и особенно будет работать и в других браузерах.

Обновление, так как вы спрашиваете, для чего нужны файлы языков:

Они используются при анализе ваших файлов (например, при создании страницы, которую пользователь запрашивает); он делает ваш код (который обычно является языком безразличным) и контентом управляемым: добавлять или редактировать язык, вам не нужно изменять файлы кодирования и что-то что-то разрушить, вы можете просто изменить app()->setLocale на одном точка. Но этот синтаксический анализ выполняется до того, как контент дойдет до пользователя: так что вы либо отправляете это конкретное предложение на французском, либо на английском языке пользователю, но не оба.

Конечно, вы можете использовать app () -> setLocale с переменной, специфичной для пользователя (или «сеанса»). В некоторой функции, которую пользователь может вызвать (например, action какой-либо формы), использовать

 Session::put('language','fr'); 

Это установит переменную session, и вы можете использовать эту переменную с этого момента, чтобы установить язык, который вы используете для анализа ваших файлов (на вашем конце!), Но не с фиксированным значением, но переменная session через

 app()->setLocale(Session::get('language',Config::get('app.locale'))); 

Итак, вы снова отправляете свой контент на одном языке для пользователя, но вы или пользователь можете выбрать, какой он должен быть. Настройка активного языка всегда необходимо выполнить перед анализом запроса (например, поместите его в класс промежуточного класса, который запускается (будет) для каждого запроса).

Вы можете установить переменную сеанса с помощью параметров языка браузера, URL-адреса (например, в зависимости от ввода mysite.com или fr.mysite.com или mysite.fr вы можете просто установить значение языковой переменной) и около 404 других возможностей.

Google использует различные части сайта для определения языка и (возможно) предлагает для этого подсказку перевода.

Следующие вещи вы можете попытаться убедиться, что они правильно установлены и надеются, Chrome рассматривает их:

  • Атрибут HTML lang
    • Пример: <html lang="fr-FR" dir="ltr">
    • Это указывает, на каком языке представлен веб-сайт.
  • hreflang для ссылок
    • Пример: <link rel="alternate" hreflang="fr" href="http://fr.example.com/" />
    • Если у вас есть ссылки на различные языки на вашем сайте, вы можете помочь Google определить, какая ссылка ведет к какой языковой версии вашего сайта
    • Источник: https://support.google.com/webmasters/answer/189077?hl=ru
  • Удалить notranlate
    • Как уже сказал @Solarflare: Не включайте <meta name=”google” value=”notranslate”> на свой сайт
  • Проверьте настройки языка в Chrome.
    • В Settings > Show advanced settings вы должны проверить раздел «Языки» и установить или снять флажок рядом с «Предложение» для перевода страниц, которые не находятся на языке, который вы читаете. Необязательно: Чтобы изменить языки, которые вы хотите перевести, нажмите «Язык» и «Настройки ввода». Подробное руководство по выполнению этой проверки на странице справки Google .

Руководство Google не содержит 100%, а также 100% уверенность в том, что Google Chrome определяет правильный язык.

Ресурс laravel lang не имеет ничего общего с переводом в браузере. Запрос содержит локаль и laravel, которые могут уважать это через resource-lang. В результате laravel представит текст в локальных настройках браузера клиента с помощью кода, который вы написали. Дополнительная информация здесь

Почему у вас нет выпадающего списка btn с определенными языками? Вы можете использовать эту библиотеку: https://github.com/ruyadorno/dom-i18n, чтобы заставить ее работать