CakePHP i18n 的路由

发布于 2024-12-05 00:47:22 字数 851 浏览 0 评论 0原文

我正在尝试使用以下格式国际化 CakePHP 网站上的所有页面:

  • /en/about
  • /zh/about(中文版)
  • 等。

我已经在 router.php 中定义了所有路由,例如。

Router::connect('/about/*', array('controller' => 'pages', 'action' => 'about'));
Router::connect('/login/*', array('controller' => 'users', 'action' => 'login'));
// etc...

如何使 /language/ 前缀自动应用于所有 Router::connect() ?

在 CakePHP 库的 router.php 中,有一个类似路由的示例,并给出如下:

 Router::connect('/:lang/:controller/:action/:id', 
                 array(), array('id' => '[0-9]+', 'lang' => '[a-z]{2}'));

然而,这仅适用于默认路由类型(例如 /pages/about/),而不是像 /about 这样专门定义的路由类型我的例子。

换句话说,当用户访问 /zh/pages/about 时它会工作,但当用户访问 /zh/about 时它不会工作。

有什么建议吗?或者我是否必须手动重写所有 Router::connect() 以包含 lang?

I'm trying to internationalize all the pages on my CakePHP site with the following format:

  • /en/about
  • /zh/about (for Chinese version)
  • etc.

I already have all the routes defined at router.php, eg.

Router::connect('/about/*', array('controller' => 'pages', 'action' => 'about'));
Router::connect('/login/*', array('controller' => 'users', 'action' => 'login'));
// etc...

How do I make it so that /language/ prefix is automatically applied to all the Router::connect()s?

At CakePHP library's router.php, there is an example for the similar routing and is given as such:

 Router::connect('/:lang/:controller/:action/:id', 
                 array(), array('id' => '[0-9]+', 'lang' => '[a-z]{2}'));

This however, only works for the default routing type (eg. /pages/about/) and not a specially defined one like /about for my example.

In other words, it would work when user visits /zh/pages/about but not when user visits /zh/about

Any suggestions or do I have to manually rewrite all my Router::connect()s to include lang?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

与往事干杯 2024-12-12 00:47:22

试试这个:

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

Try this:

    Router::connect('/:lang/:controller', array(), array('lang' => '[a-z]{2}'));
    Router::connect('/:lang/:controller/:action', array(), array('lang' => '[a-z]{2}'));
    Router::connect('/:lang/:controller/:action/*', array(), array('lang' => '[a-z]{2}'));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文