2016-12-29 5 views
0

IはZF 2.4を使用し、私はドイツ語へのフォームの検証メッセージを変更したいので、私はDOCと互換性のあるコードを使用 - https://framework.zend.com/manual/2.4/en/modules/zend.validator.messages.htmlZF 2フォーム検証翻訳

$translator = new \Zend\Mvc\I18n\Translator(); 
$translator->addTranslationFile(
    'phpArray', 
    './vendor/zendframework/zendframework/resources/languages/en/Zend_Validate.php', //or Zend_Captcha 
    'default', 
    'de_DE' 
); 
\Zend\Validator\AbstractValidator::setDefaultTranslator($translator); 

生憎ENがまだ使用されている..例えばメッセージの「バリューが必要とされ、空にすることはできません」エラーがないvendor/zendframework/zendframework/library/Zend/Validator/NotEmpty.phpから表示され、vendor/zendframework/zendframework/resources/languages/de/Zend_Validate.php

から翻訳されていません...

は誰かは、私を助けてくださいもらえますか?これは私にとって非常に重要です...

答えて

2

翻訳者はまだENのロケールを指しています。あなたがしたいことは、ユーザーの設定に基づいてトランスレータのロケールを設定するか、ルートパラメータにすることもできます。それを行うにはTranslatorsetLocale($locale)を使用してください。

つまり、あなたのApplication\Module.php以内にこれを行うことができます:

$language = $event->getRouteMatch()->getParam('language', 'en_US'); 
$serviceManager = $event->getApplication()->getServiceManager(); 
$translator = $serviceManager->get('translator'); 
$translator 
    ->setLocale($language) 
    ->setFallbackLocale('en_US') 
    ->addTranslationFilePattern(
     'phpArray', 
     \Zend\I18n\Translator\Resources::getBasePath(), 
     \Zend\I18n\Translator\Resources::getPatternForValidator() 
    ); 

AbstractValidator::setDefaultTranslator($translator); 

それはあなたがから言語ロ​​ケールを取得する場所にあなた次第です。あなたが言語用に定義されたルートのparamを持っていますが、例えば、ユーザーの設定を使用しない場合:

public function onBootstrap(MvcEvent $e) 
{ 
    $eventManager  = $e->getApplication()->getEventManager(); 
    $moduleRouteListener = new ModuleRouteListener(); 
    $moduleRouteListener->attach($eventManager); 
$serviceManager = $e->getApplication()->getServiceManager(); 
    $translator = $serviceManager->get('translator'); 

    //$locale = $_SERVER['HTTP_ACCEPT_LANGUAGE']; 
    $locale = 'de_DE'; 
    //$locale = 'en_US'; 

    $translator->setLocale(\Locale::acceptFromHttp($locale)); 
    $translator->addTranslationFile(
     'phpArray', 
     './vendor/zendframework/zendframework/resources/languages/de/Zend_Validate.php', 
     'default', 
     'de_DE' 
    ); 
    \Zend\Validator\AbstractValidator::setDefaultTranslator($translator); 
} 

私はドン」:私は、コードの下に使用された場合

$language = 'en_US'; 
$authService = $auth = $serviceManager->get('zfcuser_auth_service'); 
if ($authService->hasIdentity()) { 
    $language = $authService->getIdentity()->getUserSettings()->getLanguage(); 
} 
+0

それはまだ動作しません....私は同様のものを使用しました - http://stackoverflow.com/questions/24956272/zend-framework-2-how-toあなたの投稿からのメソッドが存在しないため(リソース:: getBasePath()、Resources :: getPatternForValidator()) –

+0

あなたはhavどんな考え?私は最初の投稿のコードは、配列の "デフォルト"が渡されたので、動作するはずだと思ったので、デフォルトのロケールとして設定されていると思った。 –

+0

ああ、申し訳ありません、単純な 'Resource'の代わりにFQCNを使用してください。私の答えが更新されます。ところで、トランスレータの新しいインスタンスを作成する必要はありません。 'ServiceManager'に含まれているデフォルトの' Translator'を使用してください。あなたが作成した 'Translator'をチェックアウトした場合、ロケールは設定されていないので、おそらくデフォルトではありません。 'Translator :: factory($ options)' – Kwido

0

はぁ、それは動作しますなぜそれが前に働いていなかったのか理解しています..

関連する問題