问题描述
正在寻找创建一些按钮,这些按钮在按下时会将语言环境设置为相应的语言。
已遵循准则表格Laravel site。
我的理解是,通过在方法中设置语言,它将仅在整个请求中都有效,并且由于我在方法中具有“ return back()”,因此当移回索引页面时,该设置将不可见。 >
由于缺少setLocale的持久存储,我通过Laravel会话助手将值存储在$ _SESSION中。
我也知道我应该使用中间件并将一些代码从控制器移到中间件,但这不会对这个简约测试造成任何问题。
测试:
-
经过测试可直接在路线中设置区域设置,效果很好(请参见路线中未注释的文本)。
-
添加了打印输出,以检查会话是否包含['language']的值。
$data = $request->session()->all();
print_r($data);
-
在“ config / app.PHP”语言环境” =>“ en”中进行了调整,调整为“语言环境” =>“ es”,并确保系统确实更改了语言。
-
App::setLocale('en');
App::setLocale('es');
在以下方法中设置 -
,以控制语言环境的值实际发生变化。确实可以,但是当该方法将用户送回索引页面时,更改似乎并不持久。
echo app()->getLocale();
问题:本地化解决方案不起作用的原因是什么?
web.PHP
<?PHP
use Illuminate\Support\Facades\Route;
Route::get('/',function () {
// App::setLocale('es'); // -> This works.
return view('index');
});
// Route through button,not form.
Route::get('/english','LanguageHandler@setLanguagetoEnglish');
Route::get('/spanish','LanguageHandler@setLanguagetoSpanish');
index.blade.PHP
<a href="/english">
<button>
English
</button>
</a>
<a href="/spanish">
<button>
Spanish
</button>
</a>
<br><br>
<h2>
{{ __('text.introduction') }}
</h2>
LanguageHandler.PHP
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class LanguageHandler extends Controller
{
function setLanguagetoEnglish()
{
// echo "Language set to English!"; // For troubleshooting.
\Session::put('language','en');
\App::setLocale(\Session::get('language'));
return back();
}
function setLanguagetoSpanish()
{
// echo "Language set to Spanish!"; // For troubleshooting.
\Session::put('language','sp');
\App::setLocale(\Session::get('language'));
return back();
}
}
resources / lang / zh-CN / text.PHP
<?PHP
return [
'introduction' => 'Apple',];
资源/lang/sp/text.PHP
<?PHP
return [
'introduction' => 'Manzana',];
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)