在没有domain.com/language/的情况下使用Laravel5进行本地化


Localization with Laravel5 without domain.com/language/

我正在用Laravel建立一个边做边学的项目,并面临本地化。我在论坛上看到有一个可用的语言包,但我认为(假设)Laravel提供了我想要的东西,尽管我还不知道去哪里找。

基本上我有一个使用刀片渲染的视图。没什么特别的。我试着使用App::setLocale('nl')来获得翻译,效果很好。

然后,在我的视图变得有点混乱之后,我开始使用@extends()@section()在几个文件中放入一些东西,我注意到每个文件都必须调用App::setLocale()才能获取翻译。这似乎有点不愉快。。。

有没有一种方法可以为所有视图和子视图的请求的整个生命周期设置语言?(如果没有Laravel,我会使用$_SESSION[]$_COOKIE或在数据库中存储它,然后将其设置在index.php文件中)

我不想为荷兰语版本开发www.domain.com/nl/stuff,为英语版本开发www.domain.com/en/stuff。没有必要搜索引擎优化,因为我正在创建一种网络应用程序。

知道在哪里可以找到这个吗?

附言:我知道我可以在/config/app.php中设置语言,但我也想提供一个语言下拉列表,供用户选择他们想要的语言。(可用语言的数量可能会增长)

您不应该在视图中设置区域设置。您应该在渲染所有视图之前执行。例如,在中间件中

例如:

class LangMiddleware {
/**
 * Run the request filter.
 *
 * @param  'Illuminate'Http'Request  $request
 * @param  'Closure  $next
 * @return mixed
 */
    public function handle($request, Closure $next)
    {
        if(Input::has('lang')){
            App::setLocale(Input::get('lang'));
        }
        return $next($request);
    }
}

然后将其注册为全局中间件,您可以根据请求执行?lang=en以设置区域设置。这只是一个你可以随心所欲的例子…;)