Подтвердить что ты не робот

Всплывающее окно "Перевод языка" отсутствует в 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') !!}

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

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

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

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

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

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

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

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

Ответ 2

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=en
  • Удалить notranlate
    • Как уже предлагал @Solarflare: Не включайте <meta name="google" value="notranslate"> на свой сайт
  • Проверьте настройки языка в Chrome
    • Через Settings > Show advanced settings вы должны проверить раздел "Языки" и установить или снять флажок рядом с предложением, чтобы переводить страницы, которые не находятся на языке, который вы читаете. Необязательно: Чтобы изменить языки, которые вы хотите перевести, нажмите "Язык" и "Настройки ввода". Подробное руководство по выполнению этой проверки Страница справки Google.

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

Ответ 3

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

Ответ 4

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