2016-07-25 40 views
4

thread我試圖執行額外的英語,我的網站,默認的是法國,並且不使用任何前綴,所以像www.website.com並切換到英語會是www.website.com/en/,我想分別爲英文和法文版的聯繫頁面的網址,例如www.website.com/en/contactwww.website.com/contact在此基礎上如何生成的URL路徑與兩種語言在Laravel

我現在的routes.php文件

if (Request::segment(1) == 'en') { 
    App::setLocale(Request::segment(1)); 
    Config::set('app.locale_prefix', Request::segment(1)); 
} 
else { 
    App::setLocale('fr'); 
    Config::set('app.locale_prefix', ''); 
} 

Route::group(array('prefix' => Config::get('app.locale_prefix')), function() 
{ 
    Route::get(
     '/', 
     function() { 
      //return "main page - ".App::getLocale(); 
      return view('index'); 
     } 
    ); 
    Route::get(
     '/contact/', 
     function() { 
      return view('contact'); 
     }); 
}); 

我的頭文件,其中將標記圖標切換語言

@if (Lang::locale() == 'fr') 
     <a href="{{ url('/en/' . Request::segment(1)) }}"><img src="{{asset('images/GB.png')}}"></a> 
    @elseif (strcasecmp(Request::segment(1), 'en') == 0 && Request::segment(2) != NULL) 
     <a href="{{ url(Request::segment(2)) }}"><img src="{{asset('images/FR.png')}}"></a> 
    @else 
     <a href="{{ url('/') }}"><img src="{{asset('images/FR.png')}}"></a> 
    @endif 

和我生成URL的方式來

<a class="block-title" href="{{ (strcasecmp(Request::route()->getPrefix(), '/en') == 0) ? url('en/contact') : url('/contact') }}">CONTACT</a> 

我會喜歡知道一個更清潔的方式來產生這些,以及如何我可以得到英文主頁網址是www.website.com/en/我ns的www.website.com/en

非常感謝!

回答

1

生成URL最好的辦法是:

首先,提供一個名稱侑路線:

//this route is called 'contact_route' 
Route::get('/contact/', ['as' => 'contact_route', function() 
{ 
    return view('contact'); 
}]); 

途徑是建立dynamycally使用的語言環境和前綴,但一旦路由被定義和你已經給它一個名稱,您可以創建使用route helper與路由器的URL:route('contact_route')

你的榜樣將成爲:

<a class="block-title" href="{{ route('contact_route') }}">CONTACT</a> 

可李爾更命名路由在docs

至於最後的斜線,默認的Laravel .htaccess文件,刪除的網址結尾處,所有的斜線,這條規則:

RewriteRule ^(.*)/$ $1 [L,R=301] 

捕獲從^開始的所有內容(.*)到斜槓/$之前的末尾並將其替換爲捕獲的內容。所以,如果你想添加一個尾隨斜線,也許你應該編輯.htaccess文件

+0

謝謝很多 !我會詳細介紹這條線路()的工作原理。 – adaba

+0

@adaba:不客氣。我剛剛添加了一些鏈接到文檔:) – Moppo

0

您可以使用路由組

所有英語

Route::group(['prefix' => 'en', 'namespace' => '\English'], function() { 
    Route::get('contact', [ 
    'as' => 'en.contact', 
    'uses' => '[email protected]', 
    ]); 
}); 

所有的法國路線

Route::group(['prefix' => 'fr', 'namespace' => '\French'], function() { 
    Route::get('contact', [ 
    'as' => 'fr.contact', 
    'uses' => '[email protected]', 
    ]); 
});