1

多言語ウェブサイトを構築しました。サイト上のフラグをクリックして、言語を切り替えることができます。いずれかをクリックすると、次のコードでリクエストがコントローラーに送信されます。

<?php

class LanguageSwitchController extends Zend_Controller_Action
{
    protected $_redirector = null;
    public function init(){
        $this->_helper->layout->disableLayout;
        $this->_helper->viewRenderer->setNoRender();

        $this->_redirector = $this->_helper->getHelper('Redirector');
/*      $this->_redirector->setGotoUrl($this->getInvokeArg('referer'));
*/
    }
    public function switchAction(){
        $session = new Zend_Session_Namespace('language');
        $session->language = $this->_getParam('lang');

        $this->_redirector->gotoUrl($_SERVER['HTTP_REFERER']);
    }
}

Zend_Session、Zend_Translate、Zend_Locale に関連するすべてのパラメータは Bootstripe ファイルで定義されています。基本的にすべて正常に動作します。アレイアダプターを使用しています。すべての翻訳は 3 つの php ファイル (ro、ru、en) に保存され、選択した言語に応じてページがそれぞれの言語で表示されます。問題は、各ページに言語ごとに固有の URL がないことです。たとえば、ユーザーがページにいる場合http://mysite.com/mycontroller/myaction(ページが英語で表示されていると仮定します。これは、ユーザーのブラウザーの既定の言語であるためです。サイトはブラウザーの既定の言語を自動的に検出します)、ロシア語に変更することを決定します。それぞれの国旗をクリックすると、サイトはロシア語で表示されますが、URL は変わりません:http://mysite.com/mycontroller/myaction. そのような方法では、たとえば、Google によって適切にインデックス付けすることはできません。各言語の各ページに一意の URL を持たない場合、1 つの言語 (既定の言語だと思います) に対してのみインデックスを作成できます。プロジェクトを何らかの形で調整する可能性はありますか、それともサイトの構造を完全に変更する必要がありますか? 一般的に言えば、サイトがいくつかの言語に翻訳されている場合、Zend Framework に基づいてプロジェクトの構造を整理する最も効率的な方法は何ですか? ありがとうございました。

4

1 に答える 1

1

カスタム ルートの使用はどうですか? たとえば、英語のルートを次のように定義します。

routes.english.route = "en/:controller/:action"
routes.english.defaults.lang = en
于 2013-01-15T09:57:02.373 に答える