我正试图找到一种翻译标签和标题的方法。根据ZF2手册,我所要做的就是:
导航助手支持页面标签和标题的翻译。您可以使用$helper->setTranslator($translator)在助手中设置Zend''I18n''translator类型的转换器。
所以我的导航在配置文件中是这样的
return array(
'navigation' => array(
'default' => array(
array(
'label' => 'Home',
'route' => 'home',
),
array(
'label' => 'Users',
'route' => 'tar-users',
),
),
),
);
这是在global.php 中
return array(
'service_manager' => array(
'factories' => array(
'navigation' => 'Zend'Navigation'Service'DefaultNavigationFactory',
),
),
//...
);
在我的布局中,我有:
<?php echo $this->navigation('navigation')
->setTranslator($this->plugin('translate')->getTranslator())
->menu()
->setUlClass('nav navbar-nav')
->setMaxDepth(0)
?>
导航正在工作,但未进行翻译。我确信我错过了什么或者做错了什么。我想知道什么。我不知道你写什么代码只是一些提示。
谢谢。
Zend使用Application/language
文件夹中的.po
文件,您需要使用poedit来编辑gettext翻译。Poedit扫描。要翻译的短语的php
(在这种情况下为.phtml
文件),更准确地说,寻找翻译函数名称(在这种情形下为translate
)。查看这里如何为Zend配置poedit,这里是翻译菜单标签的简单解决方案。我刚开始学习Zend,我不确定这是否是正确的方法,但这是我遇到的最简单的解决方案。您只需要在配置翻译器Application/config/module.config.php
(在骨架应用程序、en_US
语言环境和gettext
类型中)中添加标签值作为$translator->translate( ... )
。在打开.po
文件并刷新目录之后,应该添加新行进行翻译(此外,您不能也不应该添加程序未自动找到的新翻译)。我已经测试了以上内容,菜单在没有setTranslator( ... )
调用的情况下自动翻译。
您在module.config.php中设置翻译服务和语言环境吗?像这样的东西:
'translator' => array(
'locale' => 'it_IT',
'translation_files' => array(
array(
'type' => 'phpArray',
'filename' => __DIR__ . '/../language/Zend_Captcha.php',
'text_domain' => 'default'
),
array(
'type' => 'phpArray',
'filename' => __DIR__ . '/../language/Zend_Validate.php',
'text_domain' => 'default'
),
),
'translation_file_patterns' => array(
array(
'type' => 'gettext',
'base_dir' => __DIR__ . '/../language',
'pattern' => '%s.mo',
),
),
),
我遇到了一个令人困惑的情况,我也正确地设置了所有内容,但翻译无法执行。。。因为操作系统上没有安装正确的区域设置。我正试图将en_US翻译成fr_CA。这很快为我解决了问题:
sudo locale-gen fr_CA
sudo locale-gen fr_CA.UTF-8
我遇到了同样的问题,下面是我的解决方案。(使用gettext
)
示例:
module.config.php
array (
'label' => _('Home'),
'route' => 'home'
),
在视图中,您将使用以下内容:
$this->translate(HERE_COMES_THE_ITENS_OF_NAVIGATION)
在我的情况下,我使用这个:
foreach ( $this->container as $page ) {
$this->translate($page->getlabel ());
}
在POEDIT程序中,您将插入两个源关键字
1 - translate
2 - _
"_"是通过POEDIT映射关键字,ZEND使用"translate"将其替换为您放入POEDIT中的值。
Zend在导航时提供翻译,但在渲染之前不提供。这个片段就可以了。(Zend 3)
$sm = $event->getApplication()->getServiceManager();
$vhm = $sm->get('ViewHelperManager');
$translator = $sm->get('translator');
$vhm->get('navigation')->setTranslator($translator);
查看模块.config.php中的脚本
// module.config.php
fufunction _(string $msg){return $msg}
function _(string $msg){return $msg}
return array(
'navigation' => array(
'default' => array(
array(
'label' => _('Home'),
'route' => 'home',
),
array(
'label' => _('Users'),
'route' => 'tar-users',
),
),
),
'view_helpers' => [
'aliases' => [
'_' => Translate::class,
'numberFormat' => NumberFormat::class,
'formLabel' => FormLabel::class,
'formSubmit' => FormSubmit::class,
'menu' => Navigation::class,
],
'factories' => [
Translate::class => function($container) {
$instance = new Translate();
$instance->setTranslator($container->get(Translator::class));
return $instance;
},
FormLabel::class => function($container) {
$instance = new FormLabel();
$instance->setTranslator($container->get(Translator::class));
return $instance;
},
FormSubmit::class => function($container) {
$instance = new FormSubmit();
$instance->setTranslator($container->get(Translator::class));
return $instance;
},
Navigation::class => function($container) {
$instance = new Navigation();
$instance->setTranslator($container->get(Translator::class));
$instance->setServiceLocator($container);
return $instance;
},
]
);