php - Zend Framework 2-Traducir validación de formulario estándar y mensajes de error
validation zend-form (5)
¡Finalmente encontré con la ayuda de @Gordon la respuesta!
Puse lo siguiente en mi Application / Module.php:
use Zend/I18n/Translator/Translator;
use Zend/Validator/AbstractValidator;
class Module
{
public function onBootstrap(MvcEvent $e)
{
...
$translator = new Translator();
$translator->addTranslationFile(
''phpArray'',
''vendor/zendframework/zendframework/resources/languages/Zend_Validate.php'',
''default'',
''de_DE''
);
AbstractValidator::setDefaultTranslator($translator);
...
}
Entonces necesitas habilitar php5-intl. Vaya a php.ini y habilite extension=php_intl.dll
.
Finalmente, necesité agregar la ruta completa (empezando por el proveedor) en la función proporcionada por Gordon y los documentos.
Estoy escribiendo una solicitud alemana completa y, por lo tanto, necesito establecer básicamente todo en alemán.
Mi pregunta: ¿Cuál es la mejor y más fácil manera de establecer, por ejemplo, la validación del formulario en alemán?
Encontré esta página pero no pude encontrar la manera de hacer que funcione este código:
Zend_Validate_Abstract::setDefaultTranslator($translate);
¿Alguien podría darme algunos consejos sobre cómo usar esto?
Editar:
Gracias a @Gordon puse lo siguiente en mi Application / Module.php:
use Zend/I18n/Translator/Translator;
use Zend/Validator/AbstractValidator;
class Module
{
public function onBootstrap(MvcEvent $e)
{
...
$translator = new Translator();
$translator->addTranslationFile(
''phpArray'',
''resources/languages/de.php'',
''default'',
''de_DE''
);
AbstractValidator::setDefaultTranslator($translator);
...
}
Editar 2: Muy bien, esto es extraño. Cuando configuro de_DE
recibo el mensaje de que el archivo de.php no se pudo abrir, lo cual es cierto porque "de" es una carpeta que contiene otros dos archivos PHP.
No se pudo abrir el archivo resources / languages / de.php para leer
Alterar la ruta a la carpeta o a cualquier archivo existente dentro de ella no ayuda ...
Cuando cambio "de_DE" a "de" o "de_de", no pasa nada. Sin error y errores de validación en inglés. ¿Alguna pista?
para mí funciona con
public function onBootstrap(MvcEvent $e)
{
$translator=$e->getApplication()->getServiceManager()->get(''translator'');
$translator->addTranslationFile(
''phpArray'',
''./vendor/zendframework/zendframework/resources/languages/it/Zend_Validate.php''
);
AbstractValidator::setDefaultTranslator($translator);
// /Zend/Debug/Debug::dump($application);
}
''./vendor/zendframework/zendframework/resources/languages/langfolderyouwant/Zend_Validate.php''
Si no quiere apilar código en onBootstrap y solo necesita un idioma, puede usar el archivo de configuración:
''translator'' => array (
''locale'' => ''ru'',
''translation_files'' => [
[
''type'' => ''phparray'',
''filename'' => ''path/to/ru/directory/Zend_Validate.php''
]
],
),
Póngalo en su module.config.php
Para la versión más nueva de zf2 (2.5.0), debe cambiar la ruta de Zend_Validate.php a ./vendor/zendframework/zend-i18n-resources/languages/de/Zend_Validate.php
.
$translator->addTranslationFile(
''phpArray'',
''./vendor/zendframework/zend-i18n-resources/languages/de/Zend_Validate.php'',
''default'',
''de_DE''
);
Las últimas versiones de Zend FW deben tener traductores con interfaces específicas.
use Zend/I18n/Translator/Translator;
use Zend/Validator/AbstractValidator;
class Module
{
public function onBootstrap(MvcEvent $e)
{
//...
$translator = new Translator();
$translator->addTranslationFile(
''phpArray'',
''vendor/zendframework/zendframework/resources/languages/Zend_Validate.php'',
''default'',
''de_DE''
);
AbstractValidator::setDefaultTranslator($translator);
//...
}
}
se convertiría:
use Zend/I18n/Translator/Translator;
use Zend/Validator/AbstractValidator;
class Module
{
public function onBootstrap(MvcEvent $e)
{
//...
$translator = new Translator();
$translator->addTranslationFile(
''phpArray'',
''vendor/zendframework/zendframework/resources/languages/Zend_Validate.php'',
''default'',
''de_DE''
);
AbstractValidator::setDefaultTranslator(
new /Zend/Mvc/I18n/Translator($translator)
);
//...
}
}
Tenga en cuenta el new /Zend/Mvc/I18n/Translator($translator)