初始化Zend 2 I18N转换器以使用现有的gettext文件

时间:2014-03-18 14:16:34

标签: zend-framework2 zend-translate

我有gettext翻译文件设置如下:

myapp/i18n/locale/da_DK/LC_MESSAGES/generic.mo

myapp/i18n/locale/en_US/LC_MESSAGES/generic.mo

我正在尝试在我的应用程序中使用Zend I18n翻译组件,例如

use Zend\I18n\Translator\Translator;
$locale='da_DK';
$tr =new Translator();
$tr->addTranslationFile('gettext',"i18n/locale/$locale/LC_MESSAGES/generic.mo",'generic',$locale);

还试过这个:

  $tr->addTranslationFilePattern('gettext',"i18n/locale","%s.mo",'generic');

这是正确的设置选择i18n/locale/da_DK/LC_MESSAGES/%s.mo文件,给定的区域设置是da_DK吗?

我测试了它:

$tr->setLocale($locale);
echo $tr->translate('Search');

这不起作用,我不确定这是否是所需的配置。

编辑:

我没有使用Zend Framework作为整体,而只使用一些选定的模块。所以我需要独立于ZF2工作。

在ZF2中,服务管理器设置为在给定配置的情况下自动初始化转换器,例如

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

这里的问题是,如果我们仅使用Zend上下文中的仅转换组件来标准gettext文件结构,那么它是如何适合的。这是:

locale/en_US/LC_MESSAGES/
locale/en_UK/LC_MESSAGES/
locale/da_DK/LC_MESSAGES/
locale/es_ES/LC_MESSAGES/

1 个答案:

答案 0 :(得分:0)

试试这个。在module.config中

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

将* .mo放在lagguage文件夹中 应用 - >语言 - > * .mo和* .po

更新1:
1-确保mo文件的路径正确。
2-在poedit目录 - > properties->来源关键字 - >检查翻译单词是否存在,最好先行。