代码之家  ›  专栏  ›  技术社区  ›  Fluxine

Zend框架、GetText、Poedit和编写关键字字符串的人类语言

  •  2
  • Fluxine  · 技术社区  · 14 年前

    我正在使用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);
        }
    

    语言内容:

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

    谢谢

    1 回复  |  直到 14 年前
        1
  •  2
  •   Julien    14 年前

    Fluxine

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

    • 包含所有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-F.Mo