在CakePHP 3.7.4中缓存翻译的问题

问题描述 投票:0回答:1

我在cakephp上接手了一个项目,问题是我无法更改翻译文本。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"

没有任何变化。我已经删除了持久目录下的所有内容。在Configapp.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文件?

谢谢你

cakephp internationalization translation cakephp-3.x
1个回答
0
投票

.mo 文件是各自的编译二进制版本。.po 文件,你不能只用文本编辑器修改它们,你需要重新编译一下 .po 文件,而不是使用像 msgfmt或带有图形用户界面的,如 Poedit.

CakePHP默认情况下会首选 .mo 锉刀 .po 文件(前者的解析速度通常更快),即如果一个 .mo 文件的存在,它将被用来代替一个可能的 .po 文件,所以如果你只改变了同名的 .po 文件,不会发生任何事情,因为该文件没有被使用。

如果在 config/app.php 无效,那么您的应用程序中的其他地方可能会更改locale。检查 \Cake\I18n\I18n::getLocale() 的视图模板中,以计算出该点实际使用的是什么locale,并在 \Cake\I18n\I18n::setLocale() (vendor/cakephp/cakephp/src/I18n/I18n.php)或记录一个堆栈跟踪,以计算出代码中在哪里设置了locale。

© www.soinside.com 2019 - 2024. All rights reserved.