我试图找到翻译标签和标题的方法。 根据他ZF2 Manual,我必须这样做:
导航助手支持页面标签和标题的翻译。您可以使用$ 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)
?>
导航正在运行,但未进行翻译。 我确定我错过了什么或者我做错了什么。我想知道什么。我不知道你要写的代码只是一些提示。
谢谢。
答案 0 :(得分:1)
Zend使用.po
文件夹中的Application/language
个文件,您需要使用poedit来编辑gettext翻译。 Poedit会扫描。php
(或本例中为.phtml
个文件),以便翻译短语,更准确地说,搜索翻译函数名称(在本例中为translate
)。检查HERE如何为Zend配置poedit,HERE是翻译菜单标签的简单解决方案。我刚刚开始学习Zend,我不确定这是否是正确的方法,但它是我遇到的最简单的解决方案。您只需要在$translator->translate( ... )
中添加标签值为Application/config/module.config.php
,配置转换器(在骨架应用程序中,en_US
区域设置和gettext
类型)。在打开.po
文件并刷新目录之后,应添加新行以进行翻译(同样,您不能,也不应添加程序自动找不到的新翻译)。我已对上述内容进行了测试,菜单会在没有setTranslator( ... )
调用的情况下自动翻译。
答案 1 :(得分:0)
你在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',
),
),
),
答案 2 :(得分:0)
我遇到了一个令人费解的情况,我也正确地设置了一切,但翻译不会执行...因为操作系统上没有安装正确的语言环境。我试图将en_US翻译成fr_CA。这很快就解决了我的问题:
sudo locale-gen fr_CA
sudo locale-gen fr_CA.UTF-8
答案 3 :(得分:0)
我遇到了同样的问题,这是我的解决方案。 (使用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 - _
&#34; _&#34;是按POEDIT映射关键字,ZEND使用&#34;翻译&#34;用您在POEDIT中输入的值替换它。
答案 4 :(得分:0)
Zend带有导航翻译,但不是在渲染之前。 这个片段可以解决这个问题。 (Zend 3)
$sm = $event->getApplication()->getServiceManager();
$vhm = $sm->get('ViewHelperManager');
$translator = $sm->get('translator');
$vhm->get('navigation')->setTranslator($translator);
答案 5 :(得分:0)
查看module.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;
},
]
);