Пользовательские сообщения об ошибках i18n в Kohana 3.2

Я понимаю способ создания пользовательских сообщений об ошибках в Kohana 3.2: Kohana 3.2: Пользовательское сообщение об ошибке для пользовательского правила проверки?

Моя проблема с этим слишком повторяется, потому что мне нужен отдельный файл для модели пользователя, модели поста и т. Д.

Есть ли способ использовать мои собственные сообщения об ошибках в большинстве случаев? Я хотел бы использовать их с i18n.

2 ответа

Путь к интернационализации сообщений заключается в следующем: в вашем файле сообщений замените текст на английском языке переводческим вызовом, как показано ниже.

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

Затем переводы обрабатываются, как обычно, посредством записей в файлах в папке i18n, например:

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

Конечно, адаптируйте вышеизложенное для ваших пользовательских правил проверки.

Вы можете установить сообщение об ошибке по умолчанию для каждого правила проверки в 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);
}

Вы также можете изменить поведение класса Validate по умолчанию, расширив его в application/classes/validate.php:

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;
}
Другие вопросы по тегам