Laravel5多语言域

时间:2015-06-19 11:32:47

标签: laravel dns multilingual

我在使用Laravel5时遇到了一些问题。 我有多个域链接到单个应用程序,但每个域可以有多种语言。在为域选择不同的语言之前,不应显示区域设置字符串。

也许有人有这方面的经验。 等:

domain.com/home
domain.net
domain.lt/pagrindinis
domain.lt/en/home

1 个答案:

答案 0 :(得分:1)

我终于找到了解决方案:

在app.php上我为位置制作了自定义数组:

'domains' => [ 
   'domain_1' => [
     'locales' => ['en', 'lt'],
     'locale' => 'lt' // default locale for this domain
   ],
   'domain_2' => [
     'locales' => ['ru', 'en']
     'locale' => 'ru',
   ],
 ];

和路线服务提供商。

/**
     * Handle app requests
     *
     * @param Router $router
     * @param Request $request
     * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
     */
    public function map(Router $router, Request $request)
    {
        $locale = $this->getLocaleByDomain($request);

        $requestLocale = $request->segment(1);

        $options = [
            'namespace' => $this->namespace
        ];

        if (in_array($requestLocale, Config::get('app.domains')[$request->getHost()]['locales'])) {
            $locale = $requestLocale;

            $options = array_merge(
                $options,
                [
                    'prefix' => $locale
                ]
            );
        }

        app()->setLocale($locale);

        $router->group($options, function ($router) {
            require app_path('Http/routes.php');
        });
    }

    /**
     * Retrieve locale by domain
     *
     * @param $request
     * @return mixed
     */
    protected function getLocaleByDomain($request)
    {
        $locale = Config::get('app.fallback_locale');

        if (array_key_exists($request->getHost(), Config::get('app.domains'))) {
            $locale = Config::get('app.domains')[$request->getHost()]['locale'];
        }

        return $locale;
    }

Routes.php文件包含:

$router->get(trans('routes.contacts'),
    [
        'as' => 'contacts',
        'uses' => 'PagesController@contacts'
    ]
);

所以我得到的是多个域名,每种语言环境都有多种语言和相当不错的搜索引擎优化网址。也许任何人都可以提出其他想法?