0

我正在使用语言前缀,我不确定这是正确的方法,但我不想为我的每个控制器编写自定义路由。我现在有 20 个控制器(最简单)。

我的问题是 /nl/contact 和 /en/contact 正在尝试路由到 nl_index() 和 en_index(),这对于管理员路由来说很好,但是所有控制器都是多语言编程并使用 i18n,所以他们应该使用只是 index()、edit() 等,而不是它前面的 language_。

如何才能做到这一点?我添加这些前缀的原因是我可以使用相同的控制器和函数来获取更多内容。我目前正在 beforeFilter 中为基于 url 的前 2/3 个字符(/en、/nl)的语言编写 Configure.write 语言。

4

1 回答 1

1

我将向您介绍Croogo CMS基于 CakePHP 的实现

这是类CroogoRouter路由器

看看这一行:

Router::connect('/:locale/:controller/:action/*', array(), array('locale' => '[a-z]{3}'));

这将创建Localized routes模式,其中locale变量可以是3 个字母的语言代码在 ISO 639 中读取

所以这意味着,如果任何解析的路径将以它开头,3 letter code它将用作locale传递给 AppController 的变量

然后查看这个文件,其中介绍了此类的用法:

CroogoRouter::connect('/', array('controller' => 'nodes', 'action' => 'promoted'));

如您所见,您会将一些action path(此处/)连接到控制器和操作,但 CroogoRouter 将负责使用:locale变量本地化此路径

注意:不要忘记提及MIT license ,如果你打算使用它的代码,这是Croogo CMS的默认设置;-)

于 2011-09-11T08:33:43.227 回答