根据Zend中的语言环境重定向根URL

时间:2013-09-14 23:23:54

标签: url zend-framework redirect routes locale

在ZF中工作:是否可以将www.example.com上的基本网址或根网址更改为www.example.com/$language/home,这取决于用户浏览器的(浏览器)区域设置?

实施例;如果访客手动键入www.example.com,我想自动将网址更改为具有区域设置的网址:www.example.com/en/home为en_GB区域的访客或www.example.fr/home为fr_FR中的访客区域。

从root-url我知道所有menu-urls和content locale。单击URL中菜单项的链接,lang将自动添加到根目录之后。根网址上的内容也是使用翻译的语言环境感知,所以en_GB的英语为fr_FR的法语等。

仍然缺少,但如果只输入根目录,我希望从访问应用程序开始就知道根域名更改为语言环境。

我想是类似的东西    root:to =>重定向( “/预付款”) 在我从this Q&A on this forum

中理解的Rails 3中

我已经尝试并实现了控制器动作助手,重定向等等,因为我在这个论坛上找到了,但他们都没有提供解决方案。
我认为htaccess中的重定向是不可能的,因为我首先需要从浏览器中获取区域设置。由于我不知道这个重定向是动态的,我无法在htaccess中设置重定向。

我很欣赏任何建议吗?

2 个答案:

答案 0 :(得分:0)

由于我不知道您使用的是什么版本的Zend,我发布的是 Zend 1.1x 。您可以做的一件事是在发送请求之前“捕获”请求,获取Accept-Language header并根据用户的首选项设置区域设置或将用户重定向到您喜欢的URL。一种方法是在FrontController的{​​{1}} method中。   请记住:

  1. 您需要检查所有浏览器是否通过
  2. 发送此内容
  3. 必须仔细解析此标题字符串
  4. 由于它的定义方式: preDispatch()

    此外,用户可能并经常将语言偏好设置为外语,因此此标题可能不够。

    以OOP方式执行此操作的最佳方法是将此功能包装在ZendPlugin中。 将它附在你的引导程序中:

    Accept-Language    en,bg;q=0.7,en-us;q=0.3

    现在,在此插件中重新定义 protected function _initLocaleHandlerControllerPlugin() { $frontController = Zend_Controller_Front::getInstance(); $plugin = new App_Controller_Plugin_LocaleHandler(); $frontController->registerPlugin($plugin); } 回调:

    preDispatch()

    Zend 1.x似乎没有内置类,Zend 2确实有"Zend\Http\Header\AcceptLanguage" class

答案 1 :(得分:0)

我终于找到了问题的下一个解决方案,并在Zend Framework: Redirect from action helper中得到了Florent的一些帮助:

在我的语言插件中,我添加了

public function routeShutdown(Zend_Controller_Request_Abstract $request)
{...some code handling translate...

$url = $request->getRequestUri();

if ($url === '/') {
    $redirector = Zend_Controller_Action_HelperBroker::getStaticHelper('Redirector');
    $redirector->gotoUrl($lang.'/home');
}

我在routes.ini中拥有它们的路由,因此$lang.'/home'被路由到Default模块的indexController和indexAction。