我想根据所选语言创建具有许多翻译路线的应用程序。我曾经在 3 methods of creating URLs in multilingual websites 中 描述过它。
在这种情况下,它应该是 上述主题中的第一种方法, 因此:
- 我有一种默认语言
- 我可以有许多其他语言
- 当前语言应该只通过 URL(没有 cookies/session)来计算,以使其对搜索引擎也非常友好
- 对于默认语言,URL 中不应有前缀,对于其他语言,域后应为语言前缀
- url 的每一部分都应该根据当前语言进行翻译。
假设我已经设置了默认语言 pl
和其他两种语言 en
和 fr
。我只有 3 个页面 - 主页、联系页面和关于页面。
网站的网址应该是这样的:
/
/[about]
/[contact]
/en
/en/[about]
/en/[contact]
/fr
/fr/[about]
/fr/[contact]
whereas [about]
and [contact]
should be translated according to selected language, for example in English it should be left contact
but for Polish it should be kontakt
等等。
如何做到尽可能简单?
原文由 Marcin Nabiałek 发布,翻译遵循 CC BY-SA 4.0 许可协议
第一步:
转到
app/lang
目录并在此处为每种语言的路线创建翻译。您需要创建 3routes.php
文件 - 每个文件都在单独的语言目录 (pl/en/fr) 中,因为您要使用 3 种语言对于波兰语:
对于英语:
对于法语:
第二步:
转到
app/config/app.php
文件。你应该找到行:
并将其更改为应该是您的主要站点语言的语言(在您的情况下为波兰语):
您还需要将以下几行放入该文件中:
在
alt_langs
配置中设置替代语言(在你的情况下en
和fr
) - 它们应该与你创建文件的第一步中的文件名相同翻译。locale_prefix
是您所在区域的前缀。您不希望默认语言环境有前缀,因此它被设置为空字符串。如果选择默认语言以外的其他语言,将在运行时修改此配置。第三步
转到您的
app/routes.php
文件并放入它们的内容(这是app/routes.php
文件的全部内容):正如您首先看到的,您检查 url 的第一段是否与您的语言名称匹配 - 如果是,则更改区域设置和当前语言前缀。
然后在小循环中,您为所有路由名称设置要求(您提到您想要
about
和contact
在 URL 中翻译)所以在这里你将它们设置为与中定义的相同routes.php
当前语言的文件。最后,您创建的路由组的前缀与您的语言相同(对于默认语言,它将为空),在组内您只需创建路径,但这些参数
about
和contact
你对待variables
所以你使用{about}
和{contact}
语法。您需要记住,在那种情况下
{contact}
将检查所有路由是否与您在第一步中为当前语言定义的相同。如果您不想要这种效果并希望使用 where 为每条路线手动设置路线,则可以选择app\routes.php
没有循环的文件,您可以在其中设置contact
和about
每条路线分别:第四步:
您没有提到它,但是您可以考虑一件事。如果有人将使用 url
/en/something
其中something
不是正确的路由,我认为进行重定向的最佳解决方案。但是你不应该重定向到/
因为它是默认语言而是重定向到/en
。所以现在你可以打开
app/start/global.php
文件并在此处为未知网址创建 301 重定向: