【问题标题】:Language Translation popup is missing on DOM ready in browser: Laravel 5.2在浏览器中准备好的 DOM 上缺少语言翻译弹出窗口:Laravel 5.2
【发布时间】:2016-04-25 21:52:48
【问题描述】:

我的控制器中有以下代码。

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

在查看文件中我有以下代码。

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

通常,当我们访问的网站不是在浏览器中设置的默认语言时,我们会在页面加载时看到翻译页面的通知。请看下面的截图:

但是,这不适用于我的网站。虽然我可以看到法语,但没有弹出翻译通知,所以我可以用英语翻译它。为什么?

【问题讨论】:

  • 当您右键单击您的网页时,您是否看到可用的翻译选项?
  • 我右键点击网页,然后我看到了翻译选项,但是当我点击翻译选项时,它没有翻译CountryName键,你可以检查我的控制器,语言设置是法语.另一件事是为什么我在页面加载时看不到翻译选项?为什么要右键页面翻译呢?

标签: php laravel laravel-5.1 laravel-5.2


【解决方案1】:

Chrome 翻译不会更改您的模板变量或告诉您的网站应该显示另一种语言。它使用谷歌翻译来翻译它(换句话说:它不会在你的服务器上查找英语语言文件来将“F Country”翻译成“E Country”,但会用谷歌翻译翻译“F Country”)。

要获得消息,您的网站必须包含法语单词。尝试将语言文件中的“F Country”替换为实际的法语单词(或者可能是整个句子),或者在测试页上放一些法语内容。

如果您没有收到消息,请检查您的 chrome 设置(“当网页不在...时提供页面翻译”),或者您是否为您的网站禁用了它。

然后检查您的站点元数据是否包含<meta name=”google” value=”notranslate”>,它将禁用您站点的消息。

您的 trans(...) 可用于最终翻译您的网站:您可以例如通过按钮“我是法国人”设置本地语言(会话)变量,让用户通过使用浏览器语言设置或其他方式更改它 - 但这与 chrome translate 无关,尤其适用于其他浏览器也一样。

更新,因为您询问了语言文件的用途:

在您解析文件时使用它们(例如,当您创建用户请求的页面时);它使您的代码(通常与语言无关)和内容易于管理:要添加或编辑一种语言,您不必更改编码文件并冒破坏某些东西的风险,您只需更改app()->setLocale 即可。但是这个解析是在内容到达用户之前完成的:所以基本上你要么用法语或英语将特定的句子发送给用户,但不能同时发送。

您当然可以将 app()->setLocale 与特定于用户(或“会话”)的变量一起使用。在用户可以调用的某些函数中(例如某种形式的action)使用

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

这将设置一个会话变量,从现在开始,您可以使用此变量来设置用于解析文件的语言(最终!)不是固定值,而是会话变量通过

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

再说一遍:您仍然只将一种语言的内容发送给用户,但您或用户可以选择应该使用哪种语言。始终需要在解析请求之前设置活动语言(例如,将其放在为每个请求运行(be)的中间件类中)。

您可以通过浏览器语言设置、url 设置会话变量(例如,取决于输入 mysite.com 或 fr.mysite.com 或 mysite.fr,您可以只设置语言变量的值)和大约 404其他可能性。

【讨论】:

  • 如果 chrome 会使用谷歌翻译,那么实现语言文件有什么用?我的意思是,Laravel 架构中Resource/lang 文件夹的钱包是什么?
【解决方案2】:

Google 使用网站的各个部分来确定语言并(可能)为此提供翻译提示。

您可以尝试以下事情以确保它们设置正确并希望,Chrome 正在考虑这些:

  • HTML lang 属性
    • 示例:<html lang="fr-FR" dir="ltr">
    • 这表明网站以哪种语言呈现。
  • hreflang 链接
  • 删除notranlate
    • 正如@Solarflare 已经建议的那样:不要在您的网站上包含<meta name=”google” value=”notranslate”>
  • 检查您在 Chrome 中的语言设置
    • 通过Settings > Show advanced settings,您应该选中“语言”部分并选中或取消选中提供翻译非您所阅读语言的页面旁边的框。 可选:要更改您要翻译的语言,请单击语言和输入设置。有关如何执行此操作的详细指南,请查看Google help page

Google 没有 100% 的指南,也没有 100% 的确定 Google Chrome 会检测到正确的语言。

【讨论】:

    【解决方案3】:

    Laravel 资源语言与浏览器中的翻译无关。请求包含语言环境,laravel 可以通过资源语言尊重它。因此,laravel 将通过您编写的代码在客户端浏览器本地设置中显示文本。 更多信息在这里content negotiation

    【讨论】:

      【解决方案4】:

      为什么没有定义语言的下拉选择 btn ? 你可以使用这个库:https://github.com/ruyadorno/dom-i18n 让它工作

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-02-10
        • 1970-01-01
        • 2013-02-20
        • 1970-01-01
        • 1970-01-01
        • 2019-02-21
        • 1970-01-01
        相关资源
        最近更新 更多