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

时间:2016-01-11 12:18:04

标签: php laravel laravel-5

我正在开发一个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时应该切换到西班牙语。

1 个答案:

答案 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 /文件夹中的某个地方有一个配置文件,支持所有语言和相应的域名。