2013-02-09 145 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