Kohana 3.2中的自定义i18n错误消息

时间:2012-04-24 13:02:12

标签: internationalization kohana kohana-3.2

我理解在Kohana 3.2中创建自定义错误消息的方式:Kohana 3.2: Custom error message for a custom validation rule?

我的问题是重复太多,因为我需要一个单独的文件用于用户模型,Post Model等。

通常大多数情况下是否有任何方法可以使用我自己的错误消息?我想和i18n一起使用它们。

2 个答案:

答案 0 :(得分:0)

您可以在application / messages / validate.php中为每个验证规则设置默认错误消息:

<?php
return array(
    'not_empty' => 'Field is empty',
    'Custom_Class::custom_method' => 'Some error'
);

以下示例将返回消息“Field is empty”:

$post_values = array('title'=>'');

$validation = Validate::factory($post_values)
    ->rules('title', array(
            'not_empty'=>NULL) );

if($validation->check()){
    // save validated values
    $post = ORM::factory('post');
    $post->values($validation);
    $post->save();
}
else{
    $errors = $validation->errors(true);
}

您还可以通过在application / classes / validate.php中扩展它来更改默认Validate类的行为:

class Validate extends Kohana_Validate
{
    public function errors($file = NULL, $translate = TRUE)
    {
        // default behavior
        if($file){
            return parent::errors($file, $translate);
        }

        // Custom behaviour
        // Create a new message list
        $messages = array();

        foreach ($this->_errors as $field => $set)
        {
            // search somewhere for your message
            list($error, $params) = $set;
            $message = Kohana::message($file, "{$field}.{$error}");
        }
        $messages[$field] = $message;
    }
    return $messages;
}

答案 1 :(得分:0)

消息国际化的方式如下:在您的消息文件中用翻译调用替换实际的英文文本,如下所示。

return array
( 
    'code' => array(
        'not_empty'    => __('code.not_empty'),
        'not_found'    => __('code.not_found'),
    ),
);

然后通过i18n文件夹中的文件中的条目来处理翻译,例如:

'code.not_empty'  => 'Please enter your invitation code!',

当然,请根据您的自定义验证规则进行调整。