首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel 4多语言路由

Laravel 4多语言路由
EN

Stack Overflow用户
提问于 2013-09-10 08:00:13
回答 1查看 4.9K关注 0票数 5

我正在尝试实现一种多语言路由。

我面临的问题在于指出了一条被翻译成多种语言的路线,以及它自己的控制器。让我举一个简单的例子:

假设我有一条简单的路线,如下

代码语言:javascript
复制
Route::get('/contacts', 'PageController@contacts');

我希望在另一条路线上使用同样的控制器,但这次翻译成了另一种语言,例如德语。

代码语言:javascript
复制
Route::get('/kontakte', 'PageController@contacts');

对于一个简单的网站管理员,不超过5-6页,写下所有语言的路线不会是那么痛苦,但是对于更复杂的网站,拥有大量的页面和超过2种可用的语言,这样的解决方案将是丑陋的。

我在这里找到了一个较旧的主题,其中作者建议根据当前选择的语言加载route.php文件。但是,这仍然需要对多个文件进行编辑以满足进一步的需要。

对于您的帮助,建议点或当前的解决方案将是真正的appreciated.Thanks。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-10 08:31:16

只是一些简单的想法:

解决方案可以是使用'/en/‘和'/de/’这样的前缀对路由进行分组。所以你会有/en/联系人和/de/联系人。

http://laravel.com/docs/routing#route-prefixing:通过这种方式,您可以通过可用的语言创建一个循环,并注册路由。

这里的缺点是您不能有/de/kontake或/kontakte url,因为有一个循环的路由,它们可能是英文的。

代码语言:javascript
复制
<?php
$languages = array('en', 'de');
foreach($langauges as $language)
{
    Route::group(array('prefix' => $language), function()
    {
        Route::get('/', 'HomeController@index');
        Route::get('contact', 'HomeController@contact');
    });
}

第二种解决方案是将所有路由存储在数据库中(或者只是一个数组,以便在开始时对其进行测试),您将需要一些页面和PageLocal模型。

页面:id、名称、控制器

示例: 1,联系人,PageController@contact

PageLocal:id,page_id,language,slug

示例: 1,1,en,联系人

例子: 1,1,de,kontakte

循环遍历所有页面,延迟加载PageLocal,并注册路由。如果你愿意的话,你可以扔掉语言列,但是要注意重复的鼻涕虫。这就是为什么语言前缀是个好主意。(也许这会对搜索引擎优化有所帮助.)

代码语言:javascript
复制
<?php
$Pages::with('Locals')->all();
foreach($Pages as $Page)
{
    foreach($Page->Locals as $PageLocal)
    {
        Route::get($PageLocal->language.'/'.$PageLocal->slug, $Page->controller);
    }
}

在那之后,你仍然需要考虑没有语言前缀的url,获取和发布路径,等等,但是这会有一些开始。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18713514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档