翻訳者はまだENのロケールを指しています。あなたがしたいことは、ユーザーの設定に基づいてトランスレータのロケールを設定するか、ルートパラメータにすることもできます。それを行うにはTranslator
のsetLocale($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();
}
それはまだ動作しません....私は同様のものを使用しました - http://stackoverflow.com/questions/24956272/zend-framework-2-how-toあなたの投稿からのメソッドが存在しないため(リソース:: getBasePath()、Resources :: getPatternForValidator()) –
あなたはhavどんな考え?私は最初の投稿のコードは、配列の "デフォルト"が渡されたので、動作するはずだと思ったので、デフォルトのロケールとして設定されていると思った。 –
ああ、申し訳ありません、単純な 'Resource'の代わりにFQCNを使用してください。私の答えが更新されます。ところで、トランスレータの新しいインスタンスを作成する必要はありません。 'ServiceManager'に含まれているデフォルトの' Translator'を使用してください。あなたが作成した 'Translator'をチェックアウトした場合、ロケールは設定されていないので、おそらくデフォルトではありません。 'Translator :: factory($ options)' – Kwido