我了解在 Kohana 3.2 中创建自定义错误消息的方式:Kohana 3.2:自定义验证规则的自定义错误消息?
我的问题是重复太多,因为我需要一个单独的文件用于用户模型、帖子模型等。
在大多数情况下,有什么方法可以使用我自己的错误消息吗?我想将它们与 i18n 一起使用。
我了解在 Kohana 3.2 中创建自定义错误消息的方式:Kohana 3.2:自定义验证规则的自定义错误消息?
我的问题是重复太多,因为我需要一个单独的文件用于用户模型、帖子模型等。
在大多数情况下,有什么方法可以使用我自己的错误消息吗?我想将它们与 i18n 一起使用。
您可以在 application/messages/validate.php 中为每个验证规则设置默认错误消息:
<?php
return array(
'not_empty' => 'Field is empty',
'Custom_Class::custom_method' => 'Some error'
);
对于以下示例,这将返回消息“字段为空”:
$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;
}
消息国际化的方法是这样的:在你的消息文件中用翻译调用替换实际的英文文本,如下所示。
return array
(
'code' => array(
'not_empty' => __('code.not_empty'),
'not_found' => __('code.not_found'),
),
);
然后像往常一样通过 i18n 文件夹中的文件条目处理翻译,例如:
'code.not_empty' => 'Please enter your invitation code!',
当然,根据您的自定义验证规则调整上述内容。