希望这有助于解决新问题。
“我的新问题是:如何加载多语言翻译资源?”
只是一个简短的警告说我没有编写下面的代码,它取自 Zend 的家伙放在一起的示例应用程序,但是它可能有助于像这样分解它。
他们对示例应用程序的方法是使用包含翻译的 csv 文件并使用您的配置文件(新项目中的默认文件是 application.ini)来指定所有语言翻译资源的路径。
像这样:
;; Languages
language.file.en = APPLICATION_PATH "/../language/en/translate.csv"
language.file.fr = APPLICATION_PATH "/../language/fr/translate.csv"
language.file.de = APPLICATION_PATH "/../language/de/translate.csv"
language.file.es = APPLICATION_PATH "/../language/es/translate.csv"
language.name.zz = Language
language.name.en = English
language.name.fr = Français
language.name.de = Deutsche
language.name.es = Español
在每个 csv 文件中,如果您使用 Excel 或 Open Office 之类的工具来创建它,A 列将是原始语言,B 列是翻译。
例如,英语是原始语言并且需要西班牙语翻译:
A B
login entrar
logout salir
您可以对所有要翻译的单词/短语执行此操作。如果未找到翻译,则使用默认的原始单词。
您的主应用程序引导程序可能具有以下内容:
protected function _initLanguage()
{
$options = $this->getOptions();
Zend_Registry::set('language',$options['language']);
$langSess = new Zend_Session_Namespace('language');
if (!isset($langSess->translate)) {
$translate = new Zend_Translate('csv', $options['language']['file']['en']);
$langSess->translate = $translate;
}
if (!isset($langSess->locale)) {
$langSess->locale = 'en';
}
Zend_Locale::setDefault($langSess->locale);
}
由于翻译对象是在会话中举行的,您可以在任何视图等中使用它,例如:
$langSess = new Zend_Session_Namespace('language');
$translate = $langSess->translate;
和:
<a href="/user/login"> <?php echo $translate->_('login') ?> </a>
您希望在选择替代语言时翻译某些内容。In the example above the word login would appear when English is selected and entrar when Spanish is selected.
Zend_Translate 有比这更多的负载和几种实现它的方法,所以我并不是说无论如何这是最好的方法。
如果有帮助或者我可以给你更多信息,请告诉我。
干杯,
戴夫