我已经设法使用Zend_Controller_Router
使我的URL i18n
兼容。
即: en/user/login
变得fr/utilisateur/connexion
,两个URL都转到同一个controller
/action
。
我面临的问题是以下几点
我有一个语言切换器,显示如下:
Français
English
Italiano
etc.
当前活动语言没有 anchor
标记,但所有其他语言都有。
对于有anchor
的语言,我正在构建URL,我希望将它们翻译成特定的语言。
目前,如果我在French
所有 url 都是用法语构建的,即使我在 URL 视图助手中将 @local
键设置为参数(tried "@locale" => 'en'
、"@locale" => new Zend_Locale('en')
(
en/utilisateur/connexion
it/utilisateur/connexion
而不是
en/user/login
it/utente/collegamento
因为构建 URL 时使用的区域设置是应用程序范围内定义的区域设置。
编辑
我在我的问题中深入挖掘了一点,我发现只有当前语言环境添加了加载的资源,这意味着我无法以正确的语言获取路由以正确的语言构建路由
我的新问题是:如何加载多种语言翻译资源?
(我计划在遥远的将来(接近发布(实现缓存,所以我可能会获得更好的性能(
希望这有助于重新解决新问题。
"我的新问题是:如何加载多种语言翻译资源?">
只是快速警告一下,我没有编写下面的代码,它是从Zend的人组合在一起的示例应用程序中获取的,但是像这样分解可能会有所帮助。
他们对示例应用的方法是使用包含翻译的 csv 文件,并使用配置文件(正在应用程序.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>
您希望在选择替代语言时翻译的内容。 在上面的示例中,选择英语时会出现单词 login,选择西班牙语时会出现 entrar。
还有比这更多的Zend_Translate和几种实现它的方法,所以我并不是说这是最好的方法。
如果它有帮助,或者我可以给你更多信息,请告诉我。
干杯
戴夫