Zend翻译URL和语言切换器


Zend translate URL and language switcher

我已经设法使用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和几种实现它的方法,所以我并不是说这是最好的方法。

如果它有帮助,或者我可以给你更多信息,请告诉我。

干杯

戴夫