Вы можете добавить сообщения в опциях валидатора.Например:
$inputFilter->add([
'name' => 'user2',
'required' => true,
'validators' => [
[
'name' => NotEmpty::class,
'options' => [
'messages' => [
'messageKey' => 'non-translated message',
'messageKey2' => _('translated message'),
],
],
],
],
]);
Чтобы перезаписать сообщение Zend, вы можете использовать константы, используемые в валидаторах.Например, ваш вопрос использует валидатор NotEmpty
.Если вы посмотрите на этот класс, вы найдете:
/**
* @var array
*/
protected $messageTemplates = [
self::IS_EMPTY => "Value is required and can't be empty",
self::INVALID => "Invalid type given. String, integer, float, boolean or array expected",
];
Итак, когда вы определяете пользовательские сообщения, как я показал выше, вам лучше всего сделать:
'messages' => [
NotEmpty::IS_EMPTY => 'non-translated message',
NotEmpty::INVALID => _('translated message'),
],
Обратите внимание: Вам не нужно переводить все сообщения ZF по умолчанию, если, конечно, нужный вам язык не поддерживается. Подробнее
Zend-валидатор поставляется с более чем 45 различными валидаторами с более чем 200 сообщениями о сбоях.Перевод всех этих сообщений может быть утомительным занятием.Для вашего удобства предварительно переведенные сообщения предоставляются в пакете zendframework / zend-i18n-resources
Поддерживаемые языки этого репозитория здесь
Добавлен дополнительный вопрос к вопросу о том, где разместить конфигурацию, чтобы включить переводчик + переводы
Чтобы убедиться, что переводчик знает, где искать файлы перевода, добавьте следующее к каждому модулю в module.config.php
:
'translator' => [
'translation_file_patterns' => [
[
'type' => 'gettext', // This uses the php-gettext module
'base_dir' => __DIR__ . '/../language', // Where the folder with files is in relation to this config file
'pattern' => '%s.mo', // Update extension for what you use
],
],
],
Чтобы использовать это, у вас должен быть установлен пакет Translator.Я бы порекомендовал вам использовать пакет Zend Mvc i18n.
Включите его в файле config/modules.config.php
, добавив пространство имен в массив модулей: 'Zend\\Mvc\\I18n',
Добавьте и установите модуль через composer.json
, добавив его в require
список.Текущая версия на момент написания:
"zendframework/zend-mvc-i18n": "^1.1"
Чтобы убедиться, что она будет работать в будущем, неплохо было бы добавить их и к require
:
"ext-intl":"*",
"ext-gettext":"*",
Выше потребуется, чтобы модули PHP intl
и gettext
были установлены в работающем в данный момент экземпляре PHP.
Ниже просто рассмотрим настройку структуры файла / папки модуля
![Simplified setup](https://i.stack.imgur.com/BOVJJ.png)