2013-02-09 109 views
3

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

我见过有几个选项可以筛选所有请求,并检查第一个参数是否是语言代码之一。

我也检查packagist,但还没有发现已经在做T恤的工作什么的。

有没有更好的实现方法?

谢谢

+0

我发现这个代码片断,可以帮助你。它允许你有多个lang url:https://gist.github.com/jacekd/4562959 – itsjavi 2014-02-17 11:14:32

回答

1

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

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

如果没有变量设置 - 然后使用一个默认的(也许是基于他们的IP位置)。

+2

这是一个不好的SEO练习,因为搜索引擎没有会话,所以内容将总是以相同的语言索引 – itsjavi 2014-02-17 11:13:09

6

最后,我已经创建一个配置配置变量/ 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

一旦你实现了几乎完整的移交所的建议,你应该给他一些功劳... – crmoreira 2013-04-23 12:13:40

+0

嗯,我没有看到Shift建议的任何实施。哦对不起。我正在使用会话。 :) – 2013-04-24 12:58:14

+0

URL中的语言代码如何?这就是问题所在...... – 2013-12-22 02:19:02