我正在使用ZFCUser
,需要开发一个德国项目。
不幸的是,登录表单是英文的,我找不到将表单字段或特别是错误消息翻译成英文的方法。
模块是否可能采用全局方式覆盖消息或切换语言?
谢谢!
修改
这是我在我的引导程序中的翻译:
$translator = new Translator();
$translator->addTranslationFile(
'phpArray',
'vendor/zendframework/zendframework/resources/languages/de/Zend_Validate.php',
'default',
'de_DE'
);
AbstractValidator::setDefaultTranslator($translator);
编辑II:
我的自定义翻译文件:
<?php
return array(
// ZFCUser
"Authentication failed. Please try again." => "test"
);
我的工厂:
<?php
class CustomTranslatorFactory implements FactoryInterface
{
public function createService(ServiceLocatorInterface $sl)
{
$translator = new Translator();
$translator->addTranslationFile(
'phpArray',
'vendor/.../TranslationTable.php',
'default',
'de_DE'
);
return $translator;
}
}
我的用户模块中的Module.php:
public function getServiceConfig()
{
return array(
'factories' => array(
'translator' => 'Path\To\Translator\CustomTranslatorFactory',
),
);
}
编辑III:
My Translator看起来像这样。即使使用PHP文件而不是数组也没有任何反应。没有错误,没有翻译。我有什么想法吗?
$custom_translations = array(
"Authentication failed. Please try again." => "test",
);
$translator = new Translator();
$translator->addTranslationFile(
'phpArray',
'vendor/zendframework/zendframework/resources/languages/de/Zend_Validate.php',
'default',
'de_DE'
);
$translator->addTranslationFile(
'phpArray',
$custom_translations
);
return $translator;
答案 0 :(得分:1)
我正在为此创建答案,因为它对于评论部分来说变得过于复杂。
验证器库可以自行转换消息。正如您已为其分配了翻译器,您的验证消息就可以了。
但是,表单标签翻译属于另一个库。因此,他们还需要分配给他们的翻译。如上面评论中所述,您可以手动(通过调用$viewHelper->setTranslator($translator)
)或让ViewHelperManager为您执行此操作。
您可以轻松地重构代码以支持第二种情况。
$translation
var。示例(跳过use
):
/** One of your modules, should be a base module that's always loaded */
class Module
{
// ...
public function getServiceConfig()
{
return array(
'factories' => array(
'translator' => 'Your\Translator\Factory', // could also be a closure (anonymous function)
)
);
}
}
-
class YourTranslatorFactory implements FactoryInterface
{
public function createService(ServiceLocatorInterface $sl)
{
$translator = new Translator();
$translator->addTranslationFile(
'phpArray',
'vendor/zendframework/zendframework/resources/languages/de/Zend_Validate.php',
'default',
'de_DE'
);
return $translator;
}
}
如果您需要访问它,simpyl会像您习惯的那样从SM中检索它($translator = $sm->get('translator');
)。
注意:验证者实现TranslatorAwareInterface
。这意味着,如果您已将translator
密钥注册到SM,则它们也应自动注入验证器。因此,您甚至可以跳过静态方法调用。
另请注意:这只是一个如何在不做太多改变的情况下做到这一点的示例。您也可以通过配置实现此目标。
答案 1 :(得分:1)
仅供您参考 - 从昨天起,可以使用模块化de_DE翻译(pl_PL和ja_JP也可用)。它仅涵盖ZfcUser
条消息,因此不是所有验证方,而是表单标签等。https://github.com/websafe/zf-mod-zfc-user-i18n-de-de易于安装,也可通过Packagist提供。