如何在cakephp模型中从po文件加载翻译后的消息

时间:2019-04-29 06:54:42

标签: cakephp

我正在cakephp 2.10.12中创建一个本地化版本。我已经成功使用__('key')加载了Cakephp的翻译单词。如下所示:

<div class="form-group">
 <label ><?php echo __('PutMoneyAmount') ;?></label>
 <input type="text" class="form-control">
</div>

现在的问题是在模型中加载/使用__('key')。由于存在消息验证,因此也需要翻译。这是我模型中的代码:

public $validate = array(
    'currency_amount' => array(
        'formatCheck' => array (
            'rule' => 'money',
            'allowEmpty' => false,
            'message' => __('CurrencyError')
        )
    ),
    'date_input' => array(
        'rule' => 'date',
        'allowEmpty' => false,
        'message' => __('DateError')
    )
);

当我放置__('CurrencyError')__('DateError')时,我的屏幕上显示错误Error: Constant expression contains invalid operations 那么,如何在cakephp模型中加载这些已翻译的键? 谢谢

注意: 这是我的英文,日本和印度尼西亚翻译文件 英文:

msgid "CurrencyError"
msgstr "Please input a valid monetary amount."

msgid "DateError"
msgstr "Please input a valid date."

日本:

msgid "CurrencyError"
msgstr "有効な金額を入力してください。"

msgid "DateError"
msgstr "有効な日付を入力してください。"

印度尼西亚:

msgid "CurrencyError"
msgstr "Silahkan masukkan jumlah uang yang valid"

msgid "DateError"
msgstr "Silahkan masukkan tanggal yang valid"

enter image description here

1 个答案:

答案 0 :(得分:0)

更改此

public $validate = array(
    'currency_amount' => array(
        'formatCheck' => array (
            'rule' => 'money',
            'allowEmpty' => false,
            'message' => __('CurrencyError')
        )
    ),
    'date_input' => array(
        'rule' => 'date',
        'allowEmpty' => false,
        'message' => __('DateError')
    )
);

对此

public $validate = array(
    'currency_amount' => array(
        'formatCheck' => array (
            'rule' => 'money',
            'allowEmpty' => false,
            'message' => 'CurrencyError'
        )
    ),
    'date_input' => array(
        'rule' => 'date',
        'allowEmpty' => false,
        'message' => 'DateError'
    )
);

与View .ctp文件不同。您无需将其放在模型中的“ __(键)”下。只要将翻译正确地放入语言环境文件,它就会自动翻译。

编辑:我认为这可以帮助您暂时解决问题。在这里,我们使用来自模型的验证,任何验证错误都将手动转换。使用__d('key')。但是,如果有人可以提出更好的建议,请遵循以下说明,因为这是一个双重foreach循环。我还将关注这篇文章,看看是否有更好的答案。

if (!$this->Model->validates($data)) {
  foreach ($this->Model->validationErrors as $field => $errors) {
  // get the value of error message and put it to errContainer
   foreach ($errors as $error) {
     $errContainer[$rowCnt][] = __d('default', $error);
   }
  }
}

这是Cakephp2文档中有关您的问题的链接。 https://book.cakephp.org/2.0/en/core-libraries/internationalization-and-localization.html#translating-model-validation-errors