网址中的自动前缀

时间:2012-06-04 08:24:28

标签: cakephp cakephp-2.0

我在我的应用中使用语言前缀:

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

当我使用$this->Html->link('title',$url_array)时,我必须手动设置语言前缀。 我想要的是当前缀出现在当前url中然后当我使用->link(...)时,它应该自动将此前缀添加到url。只有当我设置这个前缀明确时,它应该是不同的。

有可能吗?

1 个答案:

答案 0 :(得分:1)

如果要管理区域设置应用程序(不是每个用户),则应检查AppController的beforeFilter()中URL的当前区域设置。 Router中的:语言前缀可确保您为不同的本地化内容提供唯一的网址。

如果以正确的方式管理Config.language配置设置,

$this->Html->link()将按预期运行。

所以在你的AppController::beforeFilter()中创建一个if()语句来检测正在请求的语言环境,具体取决于:{/ p>

Configure::write('Config.language', 'fre');

Configure::write('Config.language', 'eng');

这样做可以确保I18n和TranslateBehavior都能访问相同的语言值。

如果您想管理每个用户的应用程序区域设置,可以将当前区域设置存储在会话中:

class AppController extends Controller {
    public function beforeFilter() {
        Configure::write('Config.language', $this->Session->read('Config.language'));
    }
}

当然你也应该使用Translation Function __()。查看Cake Book的Internationalization and Localization部分。 哦,是的,还有一些非常重要的内容在该文章的“细则”中提到:

  

本地化您的应用程序的另一个方面是使用翻译功能,而不是使用日期/金钱格式。不要忘记CakePHP是PHP :),因此要设置这些东西的格式,你需要使用setlocale。   如果将计算机上不存在的区域设置传递给setlocale,则它将无效。您可以通过在终端中运行命令locale -a来找到可用语言环境列表。