【问题标题】:Best way to implement multi language frontends in Laravel 5 (Multiple Domains)在 Laravel 5(多域)中实现多语言前端的最佳方法
【发布时间】:2016-04-15 18:05:58
【问题描述】:

我正在开发一个 laravel (5.0) 应用程序,并且遇到了实现对另一种语言的支持的新要求。我做的一件好事是从一开始就实施本地化,所以现在我在 /resources/lang/ 下有两个文件夹,“en”用于英语,“es”用于西班牙语。

我使用trans 辅助函数在我的视图中显示字符串,如下所示:

   {!! trans('front.views.index.empty_list') !!}

在我的/config/app.config 文件中,我已将语言环境定义为默认的“en”。对于这个应用程序,我现在使用两个域(.com - 表示英语,.es 表示西班牙语)。 .com 域是应用程序当前使用的域,.es 域设置为别名。

所以最终我的问题是,我如何在 Laravel 中实现某种检查,它定义了当前正在使用的域 - 我研究过的是 Group Routes,但我不确定我将如何使用它。我希望 .com 域显示英文(目前是这样),并且在使用 .es 时应该切换到西班牙文。

【问题讨论】:

  • @RiggsFolly 我正在为 Laravel 寻找一种根据域进行翻译的方法。如果是 .com,则应以英文显示。如果是 .es,它应该以西班牙语显示。在文档中,我没有看到可以实现这样的检查的方法。
  • preg_match('/yourdomain(.*)/', Request::root(), $tld) 将为您提供顶级域名
  • Route::group(['domain' => 'yourdomain.{$tld}'], function () { // set locale/ redirection here });
  • @SasinduMendis 编辑:在我提交评论之前,您刚刚回答。谢谢,我试试看。

标签: php laravel laravel-5


【解决方案1】:

我认为一个很好的方法是使用中间件。首先创建一个:

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

【讨论】:

  • 感谢您的回答。几件事。 1. 对于没有“www”的域,我们应该有另一种情况。我在我的代码中添加了。 2. 你在内核中启用的代码不正确。应该是这样的:'language' => 'App\Http\Middleware\SetLanguage',
  • @aqq 没有区别。 ::class 语法返回一个字符串,结果是一样的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多