如何使用Zf2翻译with textdomain?

时间:2012-10-08 12:14:08

标签: translation zend-framework2

我的模块可以正常使用

'translator' => array(  'locale' => 'de_DE',
            'translation_file_patterns' => array(
                    array(
                    'type'     => 'gettext',
                    'base_dir' => __DIR__ . '/../language',
                    'pattern'  => '%s.mo',

只有当我使用像DE.mo EN.mo这样的MO文件但是当文件是en_US.mo时,de_DE.mo我需要添加到congik 'text_domain' => __NAMESPACE__,并在我的视图中$this->translate('some message',__NAMESPACE__) 我怎么能摆脱这种差异?

1 个答案:

答案 0 :(得分:3)

可以使用文本域,但它们不是强制性的。所以:

'translator' => array('locale' => 'de_DE',
    'translation_file_patterns' => array(
        array(
            'type'     => 'gettext',
            'base_dir' => __DIR__ . '/../language',
            'pattern'  => '%s.mo',
        ),
    ),
)

在您的视图脚本中:

<?php echo $this->translate('My Foo'); ?>

如果您使用文字域,那么必须在配置视图助手中使用它们:

'translator' => array('locale' => 'de_DE',
    'translation_file_patterns' => array(
        array(
            'type'        => 'gettext',
            'base_dir'    => __DIR__ . '/../language',
            'pattern'     => '%s.mo',
            'text_domain' => 'domain-1'
        ),
    ),
)

然后你必须这样做:

<?php 
    $this->plugin('translate')->setTranslatorTextDomain('domain-1');
    echo $this->translate('My Foo') 
?>

但无论哪种方式都可行。您不需要为特定区域设置使用文本域。