Zend框架,gettext,poedit和人类语言,其中写入了关键字符串

时间:2010-09-27 11:22:26

标签: zend-framework gettext poedit zend-translate

我正在使用ZendFramework编写一个网站,并决定使用gettext系统来国际化其内容。 在我的观点中,我用法语写了一个字符串,并提供了这个时刻只有一个文件“en.mo”来将句子翻译成英语。 我想避免维护一个文件“fr.mo”,它只会将一个句子翻译成完全相同的句子。

有没有办法告诉Zend或gettext当语言环境是“fr”或“fr_FR”时,则不需要搜索转换文件,并且必须按原样返回键字符串? 或者也许有理由创建“身份翻译”文件fr.mo?

此时我的代码的键引号:

我的引导程序摘录:

 protected function _initTranslations() {
        $config = $this->getApplication()->getOptions();

        Zend_Locale::setDefault('en'); // fallback if detection fails completely

        $locale = new Zend_Locale();
        if ( !in_array($locale->getLanguage(), explode(',',$config['available_translations']))) {
            $locale->setLocale('en'); // requested language is not available => use english
        }

        $translate = new Zend_Translate(array(  'adapter' => 'gettext',
                                                'content' => APPLICATION_PATH.'/../languages/gda-'.$locale->getLanguage().'.mo',
                                                'locale' => $locale));


        $translate->setLocale($locale);

        $this->bootstrap('view');
        $this->getResource('view')->getHelper('translate')->setTranslator($translate);
    }

/ languages /的内容:

gda-en.mo
gda-fr.mo  <== this one I would like to avoid maintaining

感谢

1 个答案:

答案 0 :(得分:2)

Fluxine,

使用Zend_Translate的gettext适配器时,您需要:

  • 包含所有msg-id的gda.pot(在您的情况下为法语)
  • gda-fr.po 至少包含一个翻译,以便生成gda-fr.mo(几乎为空......)
  • 其他一些翻译文件
    • gda-en.po生成gda-en.mo
    • gda-de.po生成gda-de.mo
    • ....
    • gda-XX.po生成gda-XX.mo

这里重要的事实是:

你所谓的“身份翻译”需要存在,否则Zend会抱怨“fr”(在你的情况下)不可用的事实

在poEdit中,只需将一个小的翻译成相同的字符串,生成相应的*.mo文件,保存并忘记它。

您不再需要更新gda-fr.po文件,也不需要重新生成更新的gda-fr.po文件。

适配器将返回原始的法语字符串,因为gda-fr.mo

中没有翻译