4

Cakephp 2.0 のモデルから文字列を抽出するために i18n を取得しようとしています。

ドキュメントには、「CakePHP は、$validate 配列内のすべてのモデル検証エラー メッセージがローカライズされることを意図していると自動的に想定します。i18n シェルを実行すると、これらの文字列も抽出されます。」と記載されています。 http://book.cakephp.org/2.0/en/core-libraries/internationalization-and-localization.html しかし、cake i18n を実行してデータを抽出すると、モデル内のメッセージが po ファイルに抽出されません。

メッセージ文字列を po ファイルに入れる方法を知っている人はいますか?

App::uses('AuthComponent', 'Controller/Component');
class User extends AppModel {
 public $validate = array(
        'username' => array(
            'required' => array(
                'rule' => array('notEmpty'),
                'message' => 'A Username is required',
                 'rule' => 'isUnique',
                'message' => 'This username has already been taken'
            )
);
}
4

3 に答える 3

10

これが、私が遭遇した問題を解決する方法です。

App::uses('AuthComponent', 'Controller/Component');
        class User extends AppModel {
         function __construct() {
                parent::__construct();
                $this->validate = array(
                'username' => array(
                    'required' => array(
                        'rule' => array('notEmpty'))
                        'message' => __('A Username is required', true)), 
                      'unique' => array(
                        'rule' => 'isUnique',
                        'message' => _('This username has already been taken', true)
                    )
        );}
        }
于 2012-05-21T08:12:39.887 に答える
4

これを達成する正しい方法は次のとおりです。

class AppModel extends Model {

    public $validationDomain  = 'validation_errors';
.
.
.
}

内部で Cake は以下を呼び出します:

__d('validation_errors', 'Username should be more fun bla bla');

http://book.cakephp.org/2.0/en/console-and-shells/i18n-shell.html#model-validation-messages

http://book.cakephp.org/2.0/en/core-libraries/internationalization-and-localization.html#translating-model-validation-errors

于 2013-08-28T04:30:20.303 に答える
-1

$ validate構造は少し混乱しています。必要なキーの下に、2つの同一の配列キー(rule、message)があります。そのはず:

public $validate = array(
    'username' => array(
        'required' => array(
            'rule' => array('notEmpty'),
            'message' => __('A Username is required', true),
        ),
        'unique'=>array(
            'rule' => 'isUnique',
            'message' => __('This username has already been taken', true)
        )
    )
);
于 2012-05-21T08:33:48.827 に答える