我接手了一个关于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"
什么都没变。我已经删除了永久目录中的所有内容。在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文件?
谢谢
发布于 2020-05-25 01:55:23
.mo
文件是各自.po
文件的编译后的二进制版本,您不能只使用文本编辑器来修改它们,您需要重新编译.po
文件,使用像这样的程序,或者使用像这样的GUI程序。
默认情况下,CakePHP会更喜欢.mo
文件而不是.po
文件(前者解析起来通常更快),也就是说,如果存在.mo
文件,它将被使用,而不是使用同名的可能的.po
文件,所以如果只更改.po
文件,就不会发生任何事情,因为没有使用该文件。
如果更改config/app.php
中的默认区域设置没有任何效果,那么您的应用程序中的其他地方可能会更改区域设置。检查视图模板中的\Cake\I18n\I18n::getLocale()
,以确定在该点上实际使用的区域设置,并在\Cake\I18n\I18n::setLocale()
(vendor/cakephp/cakephp/src/I18n/I18n.php
)中设置一个断点,或记录堆栈跟踪,以从代码中设置区域设置的位置。
https://stackoverflow.com/questions/61999642
复制