Laravel 4 多语言网站

3

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

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

我也在packagist上搜索过,但没有找到已经完成这个工作的东西。

有更好的实现方法吗?

谢谢


我找到了这段代码片段,可能会对你有所帮助。它允许您拥有多语言URL:https://gist.github.com/jacekd/4562959 - itsjavi
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(){
        ...
    })
);

1
一旦您几乎完全实现了The Shift Exchange的建议,您应该给他一些信用... - crmoreira
我没有看到Shift建议的任何实现。哦,抱歉,我正在使用会话。 :) - Flash-Square
URL中的语言代码怎么办?这就是问题所在... - Elia Weiss

1
你可以在用户会话中设置一个语言变量。 然后使用“before”过滤器,查看该变量,并记录正确的语言文件。 如果没有设置变量-则使用默认值(可能基于其IP位置)。

2
这是一种糟糕的SEO做法,因为搜索引擎没有会话,所以内容将始终以相同的语言进行索引。 - itsjavi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接