我正在开发一个laravel(5.0)应用程序,并且遇到了实现对另一种语言的支持的新要求。我做的一件好事是从一开始就实现了Localization,所以现在我在/ resources / lang /'en'下有两个文件夹用于英文,'es'用于西班牙语。
我使用trans
辅助函数在我的视图中显示字符串,如下所示:
{!! trans('front.views.index.empty_list') !!}
在我的/config/app.config
文件中,我已将区域设置定义为默认的“en”。对于这个应用程序,我现在使用两个域(.com - 用于英语,.es用于西班牙语)。 .com域是应用程序当前使用的域,.es域设置为别名。
所以最终我的问题是,如何在Laravel中实现某种检查,它定义了当前正在使用哪个域 - 我已经研究过的是Group Routes,但我不确定如何使用它。我希望.com域名显示英语(它目前正在使用)和使用.es时应该切换到西班牙语。
答案 0 :(得分:3)
我认为一个很好的方法是使用中间件。首先创建一个:
php artisan make:middleware SetLanguage
在Http \ Kernel.php中启用它:
protected $routeMiddleware = [
'language' => \App\Http\Middleware\SetLanguage::class,
];
最后,在SetLanguage类中实现handle()方法:
public function handle($request, Closure $next)
{
$domain = parse_url($request->url(), PHP_URL_HOST);
switch($domain) {
case 'www.spanish.es':
$language = 'es';
break;
default:
$language = 'en';
}
View::share('language', $language); // Could be useful in views?
App::setLocale($language);
return $next($request);
}
为任何控制器启用此中间件,并自动设置区域设置。我通常在configs /文件夹中的某个地方有一个配置文件,支持所有语言和相应的域名。