我正在使用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
感谢
答案 0 :(得分:2)
Fluxine,
使用Zend_Translate
的gettext适配器时,您需要:
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