我在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文件?
谢谢你
.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。