CakePHP 3.7.4 中的缓存翻译

Cached translations in CakePHP 3.7.4

我在蛋糕上接手了一个项目php。 问题是我无法更改翻译文本。 src/Locale 我有:

en_EN
  default.mo
  default.po
no_NO
  default.mo
  default.po
cake.pot
default.pot

在控制器中

public function view($id)
{
    $order = $this->Order->get($id);
    $this->set(compact('order'))
}

鉴于我有一个表格,默认情况下是翻译文本

 <?= $this->Form->control('email_message', [
            'type' => 'textarea',
            'rows' => 15,
            'help' => sprintf('Email will be sent to %s', h($order->contact_email)),
            'default' => __('pickup_mailtext')
        ]) ?>

没有我有

en_EN
  default.po
msgid "pickup_mailtext"
msgstr "This is the old pickup mailtext"

如果我把它改成

msgid "pickup_mailtext"
msgstr "This is the NEW pickup mailtext"

没有任何变化。我已经删除了持久目录中的所有内容。 同样在 Config/app.php 中,默认语言设置为 no_NO,但正如我之前提到的,此字符串位于 en_EN

低于

no_NO
  default.po

有:

msgid "pickup_mailtext"
msgstr ""

我也注意到了,这个字符串在

en_EN
  default.mo

但是如果我尝试修改它,我会收到内部服务器错误。

所以我的问题是: 1.如何让这个翻译工作?为什么这个字符串没有改变? 2. 如果默认语言设置为 no_NO,那么为什么翻译在 en_EN 中,为什么它被翻译而不是空的? 3.如何清除那些.mo文件?

谢谢

.mo文件是各自.po文件的编译二进制版本,不能直接用文本编辑器修改,需要重新编译.po文件, 使用像 msgfmt, or one with a GUI like Poedit.

这样的程序

CakePHP 默认优先选择 .mo 文件而不是 .po 文件(前者通常解析起来更快),即如果 .mo 文件存在,它将被使用而不是可能 .po 文件具有相同的名称,因此如果您仅更改 .po 文件,则不会发生任何事情,因为该文件未被使用。

如果在 config/app.php 中更改默认区域设置没有效果,则区域设置可能会在您应用的其他地方更改。检查视图模板中的 \Cake\I18n\I18n::getLocale() 以确定此时实际使用的语言环境,并在 \Cake\I18n\I18n::setLocale() (vendor/cakephp/cakephp/src/I18n/I18n.php) 中设置断点或记录堆栈跟踪以找出代码中的位置正在设置语言环境。