2

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

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

此时我的代码的关键引用:

我的引导程序的摘录:

受保护的函数 _initTranslations() {
        $config = $this->getApplication()->getOptions();

        Zend_Locale::setDefault('en'); // 如果检测完全失败则回退

        $locale = new Zend_Locale();
        if ( !in_array($locale->getLanguage(), explode(',',$config['available_translations']))) {
            $locale->setLocale('en'); // 请求的语言不可用 => 使用英语
        }

        $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 <== 这个我想避免维护

谢谢

4

1 回答 1

2

助熔剂,

使用 gettext Adapter 时Zend_Translate,需要:

  • gda.pot 包含您所有的 msg-id(在您的情况下为法语)
  • 包含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

于 2010-09-27T20:44:39.650 回答