首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Zend Framework 2上翻译Breadcrumbs (View Helper)

在Zend Framework 2上翻译Breadcrumbs (View Helper)
EN

Stack Overflow用户
提问于 2012-10-22 22:54:30
回答 2查看 1.4K关注 0票数 1

我正在Zend Framework2项目中工作,我正在使用View Helper (Breadcrumbs)将这个导航组件注入到我的视图中。

要渲染我的面包屑,需要使用以下代码:

代码语言:javascript
复制
<?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
?>

我已经用以下代码翻译了这个项目的大部分内容

代码语言:javascript
复制
<?php echo $this->translate("Text to translate here", $textDomain); ?>

因此,将相同的逻辑应用于现有代码:

代码语言:javascript
复制
<?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“。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-23 05:47:25

你不能这样做,你是在把html传递给翻译器。只需在viewhelper上使用以下方法:

代码语言:javascript
复制
$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
EN

Stack Overflow用户

发布于 2013-12-22 10:03:12

为了修复breadcrumb的翻译,我这样做了:将所有的翻译器配置剪切/粘贴到一个新文件中: config/autoload/translator.global.php我只对整个应用程序使用一个翻译文件,而不是按模块使用一个...但不管怎样,如果您每个模块都有一个翻译文件,只需选择一个供您导航即可;)我将base_dir选项修改为模块/应用程序/语言:

代码语言:javascript
复制
<?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文件中添加了新路径,以便自动检测;)

在这个文件中,我使用translator的工厂方法实例化了一个特定的translator,我只需要调用translate()方法:):

代码语言:javascript
复制
<?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重新生成)

代码语言:javascript
复制
function _($str){
    return $str;
}

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

代码语言:javascript
复制
'label' => _('My Label'),

poedit检测到它并翻译标签,除了在poedit中为所有这些新词做一点翻译工作外,没有其他任何事情;)

编辑:我在我的beadcrumb部分phtml文件中有一个bug :没有调用翻译视频程序...(只是从zend教程中复制了它,然后忘了它...很愚蠢,不是吗?:D)

固定的,下划线函数同样适用于表单标签和导航...甚至面包屑!在导航配置数组中创建一个新的转换器来调用它是无用的:)

我回到了我在inbeetween中学到这个技巧的地方:=> How to translate form labels in Zend Framework 2? (在上一条评论中...它应该比实际的0投票更多;)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13014067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档