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
) 中设置断点或记录堆栈跟踪以找出代码中的位置正在设置语言环境。
我在蛋糕上接手了一个项目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
) 中设置断点或记录堆栈跟踪以找出代码中的位置正在设置语言环境。