如何在Laravel中为两种语言的路由生成URL

时间:2016-07-25 23:03:06

标签: php laravel laravel-5 localization routes

基于此 thread 我尝试为我的网站实施额外的英语语言,默认为法语,并且不使用任何前缀,例如www.website.com和切换到英语将是www.website.com/en/,我希望分别为www.website.com/en/contactwww.website.com/contact的联系页面提供英语和法语版本的网址。

我目前的路线.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

以及我生成网址的方式

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

我想知道一种更简洁的方法来生成这些内容以及如何获取英文主页面网址www.website.com/en/而不是www.website.com/en

非常感谢!

2 个答案:

答案 0 :(得分:1)

生成网址的最佳方式是:

首先,给你的路线命名:

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

使用区域设置和前缀动态构建路由,但是一旦定义了路由并且您为其命名,就可以使用route helper创建路径的URL:{{1} }

你的例子将成为:

route('contact_route')

您可以在docs

中了解更多命名路线

对于尾部斜杠,默认的Laravel <a class="block-title" href="{{ route('contact_route') }}">CONTACT</a> 文件,使用以下规则删除网址末尾的所有斜杠:

.htaccess

捕获从开始RewriteRule ^(.*)/$ $1 [L,R=301] 到斜杠(.*)之前的结尾的所有^,并将其替换为捕获的内容。因此,如果要添加尾部斜杠,可能应编辑/$文件

答案 1 :(得分:-1)

您可以使用路线组

全英文

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

所有法国航线

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