翻译CakePHP中的月 - 日组合

时间:2012-12-20 18:30:15

标签: cakephp date translate cakephp-2.3

我可以使用我的.po文件翻译个别月份或日期:

echo __('December'); //becomes diciembre
echo __('Thursday'); //becomes jueves
//...etc

但是,当我使用这样的日期格式时:

 echo __(date("j F, Y"));  //becomes 20 December 2012

它没有翻译 - 我假设因为我在各个行中每个月和每天都有翻译。

通常我会做这样的事情:

__(date('j')) . ' ' . __(date('F')) . ' ' . __(date('Y'));

但是,在CMS中,管理员可以将日期更改为他们想要的任何格式。所以,它可能是“j F,Y”或“Y-m-d”,或者......其他任何东西。

我想也许我可以做一个帮手或什么东西,把日期分成碎片,并将每个部分归还__(),但是 - 这似乎有点过分了。有一个简单的方法吗?

我在AppController中设置我的语言环境:

setlocale(LC_ALL, $currentLanguage['locale']);
Configure::write('Config.language', $currentLanguage['code2']);

2 个答案:

答案 0 :(得分:4)

原来CakePHP有一个TimeHelper i18nFormat function

$time = time();
$timestring = $this->Time->format('Y-m-d H:i:s', $time);
$this->Time->i18nFormat($timestring, "%A %e %B %Y");

创建一个文件“LC_TIME”(无扩展名)并将其放入您的/Locale/ara/文件夹中(或用您想要的3-char语言代码替换'ara')

复制CakePHP's time_test LC_TIME file的内容并将其放入您的内容中(当然可以保存)。

然后将其内容更改为您想要的任何语言(我相信该示例是西班牙文)。

就是这样!

备注:

此处有关LC_TIME文件的更多详细信息:http://pic.dhe.ibm.com/infocenter/aix/v6r1/index.jsp?topic=%2Fcom.ibm.aix.files%2Fdoc%2Faixfiles%2FLC_TIME.htm

答案 1 :(得分:1)

CakeTime类(以及TimeHelper)使用'cake'域进行日期和月份名称翻译。因此,请将这些翻译放在cake.po文件中,而不是default.po