gpt4 book ai didi

Laravel 4 多语言路由

转载 作者:行者123 更新时间:2023-12-02 07:26:59 26 4
gpt4 key购买 nike

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

我面临的问题在于向其自己的 Controller 指出一条翻译为多种语言的路线。我举一个简单的例子:

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

Route::get('/contacts', 'PageController@contacts');

我希望将同一个 Controller 用于另一条路线,但这次翻译成另一种语言,例如德语。

Route::get('/kontakte', 'PageController@contacts');

对于一个简单的网站,不超过5-6个页面,写下所有语言的路由不会那么痛苦,但对于更复杂的网站,页面数量巨大并且有超过2种可用语言,像这样的解决方案会很难看。

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

如果您能提供一点建议或当前有效的解决方案,我们将不胜感激。感谢您的帮助。

最佳答案

只是一些简单的想法:

解决方案可以是使用“/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、名称、 Controller

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

PageLocal:id、page_id、语言、slug

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

示例:1, 1, de, kontakte

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

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

之后,您仍然需要考虑不带语言前缀的 url、获取和发布路由等,但这将开始一些事情。

关于Laravel 4 多语言路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18713514/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com