我在Zend Framework 2项目中工作,我使用View Helper(Breadcrumbs)将此导航组件注入我的视图。
要渲染我的Breadcrumbs,使用以下代码:
<?php echo $this->navigation('Navigation')
->breadcrumbs()
->setLinkLast(false) // link last page
->setMaxDepth(7) // stop at level 7
->setMinDepth(0) // start at level 0
->setSeparator(' »' . PHP_EOL); // separator with newline
?>
我一直在使用以下代码翻译项目的大部分内容
<?php echo $this->translate("Text to translate here", $textDomain); ?>
因此将相同的逻辑应用于现有代码:
<?php echo $this->translate($this->navigation('Navigation')
->breadcrumbs()
->setLinkLast(false) // link last page
->setMaxDepth(7) // stop at level 7
->setMinDepth(0) // start at level 0
->setSeparator(' »' . PHP_EOL), "navigation"); // separator with newline
?>
这是翻译面包屑的最有效和/或最正确的方法吗?此处设置为“导航”的文本域是此翻译所在的位置。未设置,默认值为“default”。
答案 0 :(得分:1)
你真的不能这样做,你把html传给译者。只需在viewhelper上使用这些方法:
$navHelper->setTranslator($yourTranslator);
$navHelper->setTranslatorTextDomain('de_DE');
$navHelper->setTranslatorEnabled(true); // (default)
$navHelper->setInjectTranslator(true); // to pass the translator down to menu/breadcrumbs etc. (default)
答案 1 :(得分:1)
要修复面包屑的翻译,我这样做了: 将所有翻译器配置剪切/粘贴到新文件中:config / autoload / translator.global.php 我只使用一个翻译文件用于整个应用程序,而不是一个模块...但无论如何,如果你有一个模块的翻译文件,只需选择一个导航;) 我修改了模块/应用程序/语言的base_dir选项:
<?php
return array(
'translator' => array(
'locale' => 'fr_FR',
'translation_file_patterns' => array(
array(
'type' => 'gettext',
'base_dir' => __DIR__ . '/../../module/Application/language',
'pattern' => '%s.mo',
),
),
),
);
我还将导航配置数组放入一个自动加载文件:config / autoload / navigation.global.php =&GT;我在poedit文件中添加了新路径,用于翻译我的导航(我唯一的一个)用于自动检测;)
在这个文件中,我使用翻译器的工厂方法实现了一个特定的翻译器,我只需要调用translate()方法:):
<?php
$config = require 'translator.global.php';
$options = (array)$config['translator'];
$translator = \Zend\I18n\Translator\Translator::factory($options);
return array(
'navigation' => array(
'default' => array(
array(
'label' => $translator->translate('Home'),
'route' => 'home',
),
[...]
现在一切都很好(甚至是面包屑):)
我的表单存在相同的翻译问题,我发现的第一个技巧仍然很好,无需为每个forrm创建一个新的翻译器: 唯一的麻烦是poedit自动检测:
在public / index.php中创建一个下划线函数(不是由zend使用,而是由poedit认可)
function _($str){
return $str;
}
然后只需声明表单标签:
'label' => _('My Label'),
poedit检测到它并翻译标签,除了一些小翻译工作在所有这些新词的poedit;)
编辑: 我在我的beadcrumb部分phtml文件中有一个错误:没有调用翻译viewhelper ...(只是从zend教程复制它并忘了它...愚蠢不是吗?:D)
修复后,下划线功能也适用于表单标签和导航......甚至是面包屑!所有重要的东西,创建一个新的翻译器,在导航配置数组中调用它是没用的:)
我发现我在这里获得了这个技巧:=&gt; How to translate form labels in Zend Framework 2?(在最后一条评论中......应该比实际的0更多投票;))