我正在尝试实现一种多语言路由。
我面临的问题在于指出了一条被翻译成多种语言的路线,以及它自己的控制器。让我举一个简单的例子:
假设我有一条简单的路线,如下
Route::get('/contacts', 'PageController@contacts');我希望在另一条路线上使用同样的控制器,但这次翻译成了另一种语言,例如德语。
Route::get('/kontakte', 'PageController@contacts');对于一个简单的网站管理员,不超过5-6页,写下所有语言的路线不会是那么痛苦,但是对于更复杂的网站,拥有大量的页面和超过2种可用的语言,这样的解决方案将是丑陋的。
我在这里找到了一个较旧的主题,其中作者建议根据当前选择的语言加载route.php文件。但是,这仍然需要对多个文件进行编辑以满足进一步的需要。
对于您的帮助,建议点或当前的解决方案将是真正的appreciated.Thanks。
发布于 2013-09-10 08:31:16
只是一些简单的想法:
解决方案可以是使用'/en/‘和'/de/’这样的前缀对路由进行分组。所以你会有/en/联系人和/de/联系人。
http://laravel.com/docs/routing#route-prefixing:通过这种方式,您可以通过可用的语言创建一个循环,并注册路由。
这里的缺点是您不能有/de/kontake或/kontakte url,因为有一个循环的路由,它们可能是英文的。
<?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,并注册路由。如果你愿意的话,你可以扔掉语言列,但是要注意重复的鼻涕虫。这就是为什么语言前缀是个好主意。(也许这会对搜索引擎优化有所帮助.)
<?php
$Pages::with('Locals')->all();
foreach($Pages as $Page)
{
foreach($Page->Locals as $PageLocal)
{
Route::get($PageLocal->language.'/'.$PageLocal->slug, $Page->controller);
}
}在那之后,你仍然需要考虑没有语言前缀的url,获取和发布路径,等等,但是这会有一些开始。
https://stackoverflow.com/questions/18713514
复制相似问题