如何更好的实现动态修改多语言
##动态修改多语言,目前我能想到的解决办法如下:(eg:中文 or 英文)config
app
默认
'locale' => 'en',
resources
lang
en
下新建phphub.php
<?php
return [
'Hello' => 'Hello World',
];
resources
lang
zh_CN
下新建phphub.php
<?php
return [
'Hello' => '你好,世界',
];
前端页面调用
<h1>{{ lang('phphub.Hello') }}</h1>
当用户点击修改语言时,存session 设置 $locale(en or zh-CN)
public function changeLanguage($locale){
session(['Language' => $locale]);
config(['app.locale' => $locale]);
}
Middleware
中新建 ChangeLanguage
中间件
public function handle($request, Closure $next)
{
if(session('Language')){
config(['app.locale' => session('Language')]);
}
return $next($request);
}
在用户点击修改语言时,此时的config(['app.locale' => $locale]);
只是修改当前请求的配置为参数语言吗?测试了一下,调用了此方法后,执行其他路由,结果就又回到了默认语言,这个地方不太理解,解决办法就是建个中间件,然后,每次请求修改配置文件
麻烦问一下各位大牛,是不是有更好的解决办法,或是,本来多语言动态设置就不是这个逻辑,请大神指教,非常感谢
"mcamara/laravel-localization" 你看看这个包,我是判断当前哪个语言环境就用那个语言环境的blade模板。设置变量对应文字太麻烦了。
添加个setlocale中间件,每次让前端传呗, 不传打他
中间件的思路是正确的,因为
config
配置文件只在启动时加载一次,在项目启动初始化时,config
文件的lang
设置的是CN
语言就是CN
,如果要修改,只能是每次请求重新设置中间件是对的
获取请求头的语言环境通过中间件修改语言
新手有点疑惑请教大佬: 如果“A用户”点击修改了app.locale的值为“en”,请问另外一个用户访问会同样显示“en”的页面吗?
现在很多常见的方式是在网址里带上语言
当然,楼上推荐的其他方法也可以,都可以借鉴一下。