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

Pan*_*kaj 12 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);
}
Run Code Online (Sandbox Code Playgroud)

获取数据的方法的定义如下.

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

在英语语言文件中,我有以下代码.

return [
    'CountryName' => "E Country"
];
Run Code Online (Sandbox Code Playgroud)

在法语文件中,我有以下代码.

return [
    'CountryName' => "F Country"
];
Run Code Online (Sandbox Code Playgroud)

在View文件中,我有以下代码.

{!! trans('CountriesList.CountryName') !!}
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

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

Sol*_*are 8

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

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

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

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

您的trans(...)可用于翻译您的网站:您可以通过"我是法国人"按钮设置本地语言(会话)变量,让用户通过使用浏览器语言进行更改设置或其他一些意思 - 但这与chrome翻译无关,尤其适用于其他浏览器.

更新既然你问什么语言文件是:

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

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

Session::put('language','fr');
Run Code Online (Sandbox Code Playgroud)

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

app()->setLocale(Session::get('language',Config::get('app.locale')));     
Run Code Online (Sandbox Code Playgroud)

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

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