只是一些快速的想法:
一种解决方案是使用前缀“/en/”和“/de/”对路由进行分组。因此,您将拥有 /en/contact 和 /de/contact。
相关文档:http: //laravel.com/docs/routing#route-prefixing
这样您就可以通过可用语言创建一个循环,并注册路由。
这里的骗局是你不能有 /de/kontake 或 /kontakte url,因为有 1 个带有路由的循环,它们可能是英文的。
<?php
$languages = array('en', 'de');
foreach($langauges as $language)
{
Route::group(array('prefix' => $language), function()
{
Route::get('/', 'HomeController@index');
Route::get('contact', 'HomeController@contact');
});
}
第二种解决方案是将所有路由存储在数据库中(或者只是一个数组以在开始时对其进行测试)您将需要一些 Page 和 PageLocal 模型。
页面:id,名称,控制器
示例:1、联系人、PageController@contact
PageLocal : id, page_id, 语言, slug
示例:1、1、en、联系人
示例:1、1、de、kontakte
循环遍历所有页面,延迟加载 PageLocal 并注册路由。如果你愿意,你可以去掉语言栏,但要注意重复的 slug。这就是为什么语言前缀是个好主意。(也许它会帮助一些搜索引擎优化......)
<?php
$Pages::with('Locals')->all();
foreach($Pages as $Page)
{
foreach($Page->Locals as $PageLocal)
{
Route::get($PageLocal->language.'/'.$PageLocal->slug, $Page->controller);
}
}
在那之后,你仍然需要考虑没有语言前缀的 url,获取和发布路由等,但这将开始一些事情。