3

我正在尝试实现一个多语言 laravel 4 网站,网址中包含语言代码( mywebsite.com/en/home 和 mywebsite.com/de/home )

我已经看到了几个选项,例如过滤所有请求并检查第一个参数是否是语言代码之一。

我也检查了 packagist,但还没有找到已经做 tee 工作的东西。

有没有更好的方法来实现它?

谢谢

4

2 回答 2

6

最后,我在 config/app.php 中创建了一个配置变量

'available_language' => array('en', 'fr', 'es'),

在 filters.php 我检测浏览器语言:

Route::filter('detectLang', function($lang = "auto")
{
    if($lang != "auto" && in_array($lang , Config::get('app.available_language')))
    {
        Config::set('app.locale', $lang);
    }else{
        $browser_lang = !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? strtok(strip_tags($_SERVER['HTTP_ACCEPT_LANGUAGE']), ',') : '';
        $browser_lang = substr($browser_lang, 0,2);
        $userLang = (in_array($browser_lang, Config::get('app.available_language'))) ? $browser_lang : Config::get('app.locale');
        Config::set('app.locale', $userLang);
    }
});

然后在 routes.php 我可以检测语言或强制它:

Route::get('/', array(
    'before' => 'detectLang()', // auto-detect language
    function(){
        ...
    })
);

或者

Route::get('/', array(
    'before' => 'detectLang("fr")', // force language to "fe"
    function(){
        ...
    })
);
于 2013-02-10T14:41:39.750 回答
1

您可以在用户会话中设置语言变量。

然后使用“ before”过滤器,查看该变量,并记录正确的语言文件。

如果没有设置变量 - 然后使用默认值(可能基于它们的 IP 位置)。

于 2013-02-10T07:16:45.127 回答