我正在开发一个laravel(5.0)应用程序,遇到了实现对另一种语言的支持的新需求。我做的一件好事是从一开始就实现了本地化,所以现在我在/resources/lang/'en'下有两个文件夹,分别表示英语和西班牙语。
我使用trans
助手函数在我的视图中显示字符串,如下所示:
{!! trans('front.views.index.empty_list') !!}
在我的/config/app.config
文件中,我已将区域设置定义为默认的"en"。对于这个应用程序,我现在使用两个域(.com表示英语,.es表示西班牙语)。.com域是应用程序当前使用的域,.es域设置为别名。
因此,最终我的问题是,我如何在Laravel中实现某种检查,以定义当前正在使用的域-我已经研究过Group Routes,但我不确定我将如何使用它。我希望.com域显示英语(目前是这样),使用.es时应该切换到西班牙语。
我认为一个很好的方法是使用中间件。首先创建一个:
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/文件夹中的某个位置有一个配置文件,其中包含支持的所有语言和相应的域名。