在CakePHP 3中本地化日期不起作用

时间:2016-02-07 13:04:54

标签: php cakephp cakephp-3.0 date-formatting intl

我尝试将我的应用中的输入和输出本地化为德语,并遇到以下设置的问题:

在托管的WebSpace上通过SSH / Composer安装CakePHP 3.2.1。

创建了一个只有一个表的数据库"发票"用于测试,使用列" id"," datum" (日期时间)和"金额" (十进制10,2)。

用" bin / cake烘焙所有发票"。

通过SSH使用" locale -a" ...

检查我的网络托管服务商的本地化缩写
de_DE
de_DE@euro
de_DE.iso88591
de_DE.iso885915@euro
de_DE.utf8
de_DE.utf8@euro

编辑config / bootstrap.php:

ini_set('intl.default_locale', 'de_DE');

在/src/Template/Invoices/add.ctp中添加了一些php-test-output:

<?php
    use Cake\I18n\I18n;
    use Cake\I18n\Time;
    $now = Time::now();
    echo $now->i18nFormat('dd.MM.yyyy HH:mm:ss');
    echo " +++ ";
    echo $now->i18nFormat('l, N. F Y');
?>
<nav class="large-3 medium-4 columns" id="actions-sidebar">
    <ul class="side-nav">
        <li class="heading"><?= __('Actions') ?></li>
        <li><?= $this->Html->link(__('List Invoices'), ['action' => 'index']) ?></li>
    </ul>
</nav>
<div class="invoices form large-9 medium-8 columns content">
    <?= $this->Form->create($invoice) ?>
    <fieldset>
        <legend><?= __('Add Invoice') ?></legend>
        <?php
            echo $this->Form->input('datum');
            echo $this->Form->input('betrag');
        ?>
    </fieldset>
    <?= $this->Form->button(__('Submit')) ?>
    <?= $this->Form->end() ?>
</div>

这是我的php-test-output:

07.02.2016 12:42:19 +++ ,

正如您所看到的,第一个输出看起来像德国日期时间格式,但我必须手动传递格式,就像我会使用纯PHP代码一样,所以我在哪里可以告诉CakePHP始终使用此格式的日期或整个应用程序内的时间字段?

&#34; +++&#34;我期待以下输出,但只有逗号:

Sonntag, 7. Februar 2016

输入字段是否也可以使用本地化格式?我的下拉字段&#39;数据&#39;该月仍然有英文名称,并且该日期的前3个下拉字段的顺序是错误的。

如果您能给我一个如何在CakePHP表单输入元素和任意输出数据中获取本地本地化德语日期,数字和货币的信息,我将不胜感激。

提前致谢并致以最诚挚的问候,

TheDude

1 个答案:

答案 0 :(得分:0)

i18n日期使用IntlDateFormatter格式化,http://userguide.icu-project.org/formatparse/datetime使用ISO日期格式模式,而不是默认的PHP日期模式。

l已被弃用,并且不会生成任何输出,N似乎根本不是公认的符号,并且它负责其余的模式失败了,我不知道为什么会这样。

无论如何,对于有效符号,请检查例如

您正在寻找的模式是EEEE, d. MMMM Y