在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中设置重定向。
我很欣赏任何建议吗?
答案 0 :(得分:0)
由于我不知道您使用的是什么版本的Zend,我发布的是 Zend 1.1x 。您可以做的一件事是在发送请求之前“捕获”请求,获取Accept-Language
header并根据用户的首选项设置区域设置或将用户重定向到您喜欢的URL。一种方法是在FrontController
的{{1}} method中。
请记住:
由于它的定义方式:
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。