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 で言語ごとに異なるコンテンツが表示され、ボットにどの言語が表示されているかわかりません。これは、アプリケーションが Web サイトである場合に重要です。このアプローチを使用すると、ユーザーに多言語リンクを提供することは難しくありません。

于 2013-08-13T13:56:05.600 に答える