Laravel 4.2改变当地

时间:2015-11-02 16:11:06

标签: php laravel laravel-4 localization

我正在更新使用laravel 4.2构建的网站。 我正在添加多种内容语言,我遇到了更改问题的问题 当地顺利。

我希望每个网页都可以选择将/local段(/en/de/hr附加到其网址上,但会消失。

我的目标是检查网址末尾是否有/local段,是否只在Session设置了本地,并重新加载了/local的网页1}}最后一段。

有类似的主题hereherehere,但没有任何内容可以让访问者选择更改任何网页上的语言,但仍然让他留在网站上更改网址。

1 个答案:

答案 0 :(得分:0)

这个解决方案对我有用。 我认为还有改进的余地但工作正常。

与其他类似解决方案相比,此解决方案的优势在于,无需修改routes.php即可为每个链接进行本地化。 更改语言后,它不会将网站重新加载到主页。

我的filter.php:

// filter.php

App::before(function($request)
{
    // Setting the locale
    $segments = $request->segments();
    $locale = "";
    $index = 0;
    foreach($segments as $segment){
        $index++;
        $locale = $segment;
    }

    // Set the local in Session if it's supported
    if ( $index > 0 && array_key_exists($locale, Config::get('app.locales'))) {
        Session::put('locale', $locale);
        $segments = array_slice($segments,0, $index-1);
        // Reload the site without the ending /language part
        return Redirect::to(implode('/', $segments));
    }
    if(!Session::has('locale'))
    {
        Session::put('locale', $request->getPreferredLanguage( Config::get('app.languages')));
    }

    App::setLocale(Session::get('locale'));

});

这是我的app.php:

//app.php
...
    'locales' => ['en' => 'English', 'hr' => 'Hrvatski'],

    'languages' => ['en', 'hr'],
...