在Laravel 5(多域)中实现多语言前端的最佳方式


Best way to implement multi language frontends in Laravel 5 (Multiple Domains)

我正在开发一个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/文件夹中的某个位置有一个配置文件,其中包含支持的所有语言和相应的域名。