我在我的应用中使用语言前缀:
Router::connect('/:language/:controller/:action/*',
array(),
array('language' => '[a-z]{3}'));
当我使用$this->Html->link('title',$url_array)
时,我必须手动设置语言前缀。
我想要的是当前缀出现在当前url中然后当我使用->link(...)
时,它应该自动将此前缀添加到url。只有当我设置这个前缀明确时,它应该是不同的。
有可能吗?
答案 0 :(得分:1)
如果要管理区域设置应用程序(不是每个用户),则应检查AppController的beforeFilter()中URL的当前区域设置。 Router
中的:语言前缀可确保您为不同的本地化内容提供唯一的网址。
$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
来找到可用语言环境列表。