在浏览器中准备好DOM的语言翻译弹出窗口:Laravel 5.2

时间:2016-04-25 21:52:49

标签: php laravel laravel-5.1 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') !!}

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

enter image description here

但是,我的网站没有发生这种情况。虽然我可以看到法语,但翻译通知不会弹出,以便我可以用英语翻译。为什么呢?

4 个答案:

答案 0 :(得分:8)

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

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

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

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

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

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

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

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

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

这将设置一个会话变量,你可以从现在开始使用这个变量来设置你用来解析你的文件的语言(在你的结尾!)没有固定值,但会话变量通过

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

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

您可以通过浏览器语言设置设置会话变量,网址(例如,根据输入的mysite.com或fr.mysite.com或mysite.fr,您只需设置语言变量的值)和约404其他可能性。

答案 1 :(得分:4)

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检测到正确的语言。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

为什么你没有下拉选择btn定义的语言? 您可以使用此库:https://github.com/ruyadorno/dom-i18n以使其正常工作