1

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

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

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

可能吗?

4

1 回答 1

1

如果您想在应用程序范围内管理您的区域设置(不是每个用户),您应该检查 AppController 的 beforeFilter() 中 URL 中的当前区域设置。您的 :language 前缀Router将确保您为不同的本地化内容提供唯一的 URL。

$this->Html->link()如果以正确的方式管理 Config.language 配置设置,它将按您的预期运行。

所以在你AppController::beforeFilter()做一个 if() 语句来检测正在请求哪个语言环境,并取决于它:

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

或者

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

这样做将确保 I18n 和TranslateBehavior访问相同的语言值。

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

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

当然,您还应该使用翻译函数 __()。查看 Cake Book 的国际化和本地化部分。哦,是的,那篇文章的“细则”中还提到了一些非常重要的东西:

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

于 2012-06-20T14:04:24.473 回答