2

URL でグローバルを使用して、ZF2 アプリケーションに翻訳を追加する方法を探しています。アプリケーション全体に対して一度にこれを行う方法はありますか?

典型的な URL は次のようになります: http://domain.com/en_GB/user/index

正しい翻訳を表示するには、最初の部分 (en_GB) を使用する必要があります。

あと、このルーター部分をオプション設定できるといいですね。そのため、 http://domain.com/user/index (ロケール部分なし) にアクセスして自分のアプリケーションにアクセスすると、自動的にブラウザーのロケールが使用されます。

この質問に追加が必要な場合は、お気軽にお問い合わせください。

事前にサンクス

4

2 に答える 2

1

@DrBeza、

ご回答ありがとうございます。これが正しい方法かどうかはわかりませんが、次の解決策を作成しました。

/config/global.php にこの部分を追加しました

'translator' => array(
        'locale' => 'nl_NL',        
        'translation_file_patterns' => array(
            array(
                'type'     => 'phpArray',
                'base_dir' => __DIR__ . '/../../language',
                'pattern'  => '%s.php',
            ),
        ),
    ),

/module/[modulename]/config/module.config.php で、この部分を追加して、ロケールを含む URL の最初の部分を設定しました

'router' => array(
        'routes' => array(
            'user' => array(
                'options' => array(
                    'route'    => '[/:lang]/user[/:action][/:id]',
                    'constraints' => array(
                        'lang'  => '([a-z]{2})+(_)+([A-Z]{2})',
                    ),
                ),
            ),
        ),
    ),

/config/local.php に、URL からロケールを取得するために次のコードを追加しました。

http://domain.com/[ロケール][モジュール][コントローラ]

$_SERVER['REQUEST_URI_PATH'] = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$segment = explode('/', $_SERVER['REQUEST_URI_PATH']);

そして、この部分を追加して、ロケールを動的にロードしました。

return array(
   'translator' => array(
   'locale' => $segment[1],
);
于 2012-10-26T19:17:51.563 に答える
0

セグメント ルート クラスを拡張し、オプションのロケール制約とセグメント パーツが欠落している場合は追加することをお勧めします。'locale' など、アプリケーション全体で任意の変数を呼び出します。

次に、メイン モジュールのブートストラップで「ルート」イベントを作成します。ルートが一致すると、このイベントが発生します。起動されたコールバック関数は、渡されたイベントを介して RouteMatch オブジェクトにアクセスできるため、「locale」値にアクセスできます。次に、いくつかのチェックを行い、アプリケーションのロケールを設定できます。

于 2012-10-24T22:25:30.300 に答える