Zend Framework 2 - перевод стандартной проверки формы и сообщений об ошибках

Я пишу полное приложение на немецком языке, и поэтому мне нужно установить практически все на немецкий язык.

Мой вопрос: как лучше и проще всего настроить, например, проверку формы на немецкий язык?

Я нашел эту страницу, но не мог понять, как чтобы заставить этот код работать:

Zend_Validate_Abstract::setDefaultTranslator($translate);

Может ли кто-нибудь дать мне совет, как это использовать?

Изменить:

Благодаря @Gordon я поместил в свой 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);
    ...
}

Изменить 2: Хорошо, это странно. Когда я устанавливаю de_DE, я получаю сообщение о том, что файл de.php не может быть открыт - это правда, потому что «de» - это папка, содержащая два других файла PHP.

Не удалось открыть файл resources / languages ​​/ de.php для чтения

Изменение пути к папке или любому существующему файлу в ней не помогает ...

Когда я меняю de_DE на de или de_de, ничего не происходит. Нет ошибок и ошибок проверки английского языка. Какие-нибудь подсказки?


person Ron    schedule 19.12.2012    source источник
comment
Ответ на ваш вопрос содержится в справочном руководстве по Zend_Validate в главу об использовании предварительно переведенных сообщений проверки. Однако фрагмент кода выглядит неправильно (вероятно, должно быть другое имя файла и другой язык). В любом случае попробуйте это, а затем обновите свой вопрос, если это не сработает. Обязательно укажите все сообщения об ошибках -   -  person Gordon    schedule 19.12.2012
comment
Попробуйте с помощью 'resources / languages ​​/ de' или 'resources / languages ​​/ de / Zend_Validate.php'   -  person Gordon    schedule 19.12.2012
comment
спасибо, нужно добавить полный путь к addTranslationFile fct!   -  person Ron    schedule 19.12.2012


Ответы (5)


для меня это работает с

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'

person Whisher    schedule 12.02.2013
comment
При использовании zend2.3 это кажется желаемым способом сделать это. Переводчик I18n был несколько заменен сервисом MvcTranslator, который реализует интерфейс переводчика и т. Д. - person cptnk; 05.06.2014

Наконец-то я нашел ответ с помощью @Gordon!

Я поместил в свой 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);
    ...
}

Затем вам нужно включить php5-intl. Перейдите на php.ini и включите extension=php_intl.dll.

Наконец, мне нужно было добавить полный путь (начиная с поставщика) в функции, предоставленной Гордоном и документами.

person Ron    schedule 19.12.2012
comment
Пожалуйста, не используйте \ Zend \ Mvc \ I18n \ Translator, представленный в Zend 2.2 (framework.zend.com/manual/2.2/en/modules/zend.validator.html) - person ACNB; 15.09.2013
comment
В более поздних версиях Zend FW должны быть трансляторы с определенными интерфейсами. См. Мой комментарий ниже. - person Rob; 22.07.2014

В более поздних версиях Zend FW должны быть трансляторы с определенными интерфейсами.

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);
        //...
    }
}

станет:

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)
        );
        //...
    }
}

Обратите внимание на new \Zend\Mvc\I18n\Translator($translator)

person Rob    schedule 22.07.2014

Если вы не хотите складывать код в onBootstrap и вам нужен только один язык, вы можете использовать файл конфигурации:

'translator' => array (
    'locale' => 'ru',
    'translation_files' => [
        [
            'type' => 'phparray',
            'filename' => 'path/to/ru/directory/Zend_Validate.php'
        ]
    ],
),

Положи это в себя module.config.php

person akond    schedule 30.10.2014

Для последней версии zf2 (2.5.0) вам необходимо изменить путь к Zend_Validate.php на ./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'
);
person Stillmatic1985    schedule 05.06.2015