1

我在使用自己定义的 ZF1.12 应用程序路由时遇到问题。语言参数的切换有效,但路线的翻译是相反的 - 例如:

http://www.my-app.de/de/clients/login

http://www.my-app.de/en/kunden/anmelden

为了管理我的语言,我注册了一个插件:

<?php

class FOO_Controller_Plugin_LangSelector extends Zend_Controller_Plugin_Abstract
{
public function routeShutdown(Zend_Controller_Request_Abstract $request) {

   if (substr($request->getRequestUri(), 0, -1) == $request->getBaseUrl()) {
        $locale = new Zend_Locale();
        $lang = $locale->getLanguage();
        $url = "http://my-app.de/" . $lang;
        Zend_Controller_Front::getInstance()->getResponse()->setRedirect($url);
    }


}

public function preDispatch(Zend_Controller_Request_Abstract $request)
{   
$lang = $request->getParam('language','');

if ($lang !== 'en' && $lang !== 'fr' && $lang !== 'de') {
    $request->setParam('language','de');
    }

$lang = $request->getParam('language');

    switch($lang)
    {
    case ("de"):
        $locale = 'de_DE';
        break;
    case ("en"):
        $locale = 'en_EN';
        break;
    case ("fr"):
        $locale = 'fr_FR';
        break;
    }

$zl = new Zend_Locale();
$zl->setLocale($locale);
Zend_Registry::set('Zend_Locale', $zl);

$translate = new Zend_Translate('csv', APPLICATION_PATH . '/configs/lang/'. $lang . '.csv' , $lang);
Zend_Registry::set('Zend_Translate', $translate);

}
}

这工作正常。在我的 application.ini 中:

; Translator -------------------------------------------------------------------
resources.locale.registry_key = "locale" 
resources.locale.default = "de_DE"  

resources.translate.locale = "de"
resources.translate.registry_key = "Zend_Translate"
resources.translate.adapter = "csv"
resources.translate.content = APPLICATION_PATH "/configs/lang/de.csv"
resources.translate.options.scan = "directory"

; Routes -----------------------------------------------------------------------
resources.router.routes.defaultmodule.type = Zend_Controller_Router_Route_Module
resources.router.routes.defaultmodule.abstract = On
resources.router.routes.defaultmodule.defaults.module = "default"

resources.router.routes.language.type = Zend_Controller_Router_Route
resources.router.routes.language.route = ":language"
resources.router.routes.language.reqs.language = "^(de|en)$"
resources.router.routes.language.defaults.language = "de"

resources.router.routes.default.type = Zend_Controller_Router_Route_Chain
resources.router.routes.default.chain = "language, defaultmodule"

resources.router.routes.login.route = ":language/@clients/@login"
resources.router.routes.login.defaults.module = "clients"
resources.router.routes.login.defaults.controller = "index"
resources.router.routes.login.defaults.action = "login"

例如,我尝试在视图脚本中使用此代码切换语言:

<?php
$requestUri = Zend_Controller_Front::getInstance()->getRequest()->getRequestUri();
$uri = explode("/", $requestUri);
$lang = $uri[1];
?>

<?php if ($lang != "de"):?><a href="<?php echo $this->url(array('language' => 'de'), null, false);?>"><?php echo $this->translate('lang_de'); ?></a>&nbsp;<?php endif?>
<?php if ($lang != "en"):?><a href="<?php echo $this->url(array('language' => 'en'), null, false);?>"><?php echo $this->translate('lang_en'); ?></a>&nbsp;<?php endif?>

当我阅读请求参数时,语言切换正确,但路线颠倒了。任何想法我该如何解决这个问题?

谢谢你,对不起我的英语不好。

4

0 回答 0