5

我正在使用 zend 框架 2,例如,我想通过单击链接来更改应用程序语言。

这是我的路由配置:

'route'    => '/[:lang[/:controller[/:action[/:id]]]][[/page/:page]]',

我将 en 定义为默认语言:

'defaults' => array(
    'lang'     => 'en',
                   ),

在我的 module.php 上:

public function onBootstrap ($e) {

        $eventManager= $e->getApplication()->getEventManager();

        $routeCallback = function ($e) {
            $availableLanguages = array ('fr', 'en');
            $defaultLanguage = 'en';
            $language = "";
            $fromRoute = false;
            //see if language could be find in url
            if ($e->getRouteMatch()->getParam('lang')) {
                $language = $e->getRouteMatch()->getParam('lang');
                $fromRoute = true;

                //or use language from http accept
            } else {
                $headers = $e->getApplication()->getRequest()->getHeaders();
                if ($headers->has('Accept-Language')) {
                    $headerLocale = $headers->get('Accept-Language')->getPrioritized();
                    $language = substr($headerLocale[0]->getLanguage(), 0,2);
                }
            }
            if(!in_array($language, $availableLanguages) ) {
                $language = $defaultLanguage;
            }
            $e->getApplication()->getServiceManager()->get('translator')->setLocale($language);

        };

        $eventManager->attach(\Zend\Mvc\MvcEvent::EVENT_ROUTE, $routeCallback);
    }

现在这工作得很好,但我想让用户通过点击链接来改变语言。

有什么建议吗??

谢谢你的帮助 !

4

2 回答 2

1

也许为时已晚,但这里是您问题的解决方案:

“现在这很好用,但我想让用户通过点击链接来改变语言。”

您可以像这样在导航中创建一个菜单(使用引导程序)

<ul class="dropdown-menu">
                            <li><a href="<?= $this->url($this->route, array('lang' => 'fr'));?>">
                                <span class="flag fr"></span> Français
                            </a></li>
                            <li><a href="<?=$this->url($this->route, array('lang' => 'en'));?>">
                                <span class="flag gb"></span> English
                            </a></li>
                        </ul>

确保您的 po/mo/ 和其他翻译文件与“fr\en”等模式匹配...

它将完美地工作。

于 2014-07-16T16:01:04.180 回答
0

根据我的经验,始终将语言存储在 url 中是一种很好的做法。这样,您将拥有不同语言页面的唯一地址。否则,在同一个 url 上,每种语言会显示不同的内容,您将不知道为机器人显示什么语言,如果应用程序是网站,这一点很重要。使用这种方法,为用户提供多语言链接应该不难。

于 2013-08-13T13:56:05.600 回答