【问题标题】:Translate Month-Day combinations in CakePHP在 CakePHP 中翻译月-日组合
【发布时间】:2012-12-08 08:02:03
【问题描述】:

我可以使用我的 .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']);

【问题讨论】:

  • 你不能解析管理员输入的格式字符串并在每个字母周围添加__()函数吗?
  • $currentLanguage['locale']的值是多少?

标签: cakephp date translate cakephp-2.3


【解决方案1】:

原来 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/ 文件夹(或将“ara”替换为您想要的任何 3 字符语言代码)

复制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

【讨论】:

    【解决方案2】:

    CakeTime 类(以及 TimeHelper)使用 'cake' 域进行日期和月份名称转换。所以把这些翻译放在cake.po文件而不是default.po

    【讨论】:

    • 好吧,要使用 cake po 文件,则必须使用 echo __d('cake', 'December'); 等。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多