1

我在 Zend Framework 2 项目中工作,我正在使用 View Helper (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
?> 

这是翻译面包屑的最有效和/或正确的方法吗?此处设置为“导航”的文本域是此翻译所在的位置。没有设置它默认为值“默认”。

4

2 回答 2

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)
于 2012-10-22T21:47:25.350 回答
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 => 我在 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',
            ),
       [...]

现在一切都很好(甚至面包屑):)

我的表单也遇到了同样的翻译问题,我发现的第一个技巧仍然很有效,而无需为每个表单创建新的翻译器:唯一的麻烦是 poedit 自动检测:

在 public/index.php 中创建一个下划线函数(zend 不使用但 poedit 识别)

function _($str){
    return $str;
}

然后只需要像这样声明表单标签:

'label' => _('My Label'),

poedit 检测到它并翻译标签,除了在 poedit 中对所有这些新词进行一点翻译工作之外,没有其他任何东西;)

编辑:我的 beadcrumb 部分 phtml 文件中有一个错误:没有调用翻译视图助手...(只是从 zend 教程中复制它并忘记了它...愚蠢不是吗?:D)

修复后,下划线功能也适用于表单标签和导航......甚至面包屑!我所有繁重的东西,创建一个新的翻译器在导航配置数组中调用它是没用的:)

我在beetween 中找到了这个技巧:=>如何在 Zend Framework 2 中翻译表单标签?(在最后一条评论中......这应该比实际的 0 投票更多;))

于 2013-12-22T02:03:12.287 回答