4

私はzend Framework2を初めて使用し、多言語統合を備えたサイトに取り組んでいます。組み込みライブラリと翻訳ファイルをどのように構成する必要があるか、ビューファイルからどのように呼び出すことができるかについての考えを教えてください

4

1 に答える 1

13

ZF2 はすでに I18n ツールを統合しています。

統合する方法

module.config.php

'translator' => array(
        'locale' => 'en_US',
        'translation_file_patterns' => array(
            array(
                'type'     => 'gettext',
                'base_dir' => __DIR__ . '/../language',
                'pattern'  => '%s.mo',
            ),
        ),
    ),

ファイル *.mo

前の手順に従って、フォルダーを作成し、Poedit (シンプルで優れたアプリケーション)を使用してen_US.mo (たとえば) を追加します。

Module.php

public function onBootstrap($e)
{
    $translator = $e->getApplication()->getServiceManager()->get('translator');
    $translator
      ->setLocale(\Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']))
      ->setFallbackLocale('en_US');
}

rq: 個人的にはセッションを使用してロケールをストックしていますが、言語を使用した SEO が必要かどうかによって異なります

    // session container
    $sessionContainer = new Container('locale');

    // test if session language exists
    if(!$sessionContainer->offsetExists('mylocale')){
        // if not use the browser locale
        if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])){
            $sessionContainer->offsetSet('mylocale', Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']));
        }else{
            $sessionContainer->offsetSet('mylocale', 'en_US');
        }

    }

    // translating system
    $translator = $serviceManager->get('translator');
    $translator ->setLocale($sessionContainer->mylocale)
                ->setFallbackLocale('en_US');

    $mylocale = $sessionContainer->mylocale;

それの使い方

ビューで、次のように入力します。

 <?php echo $this->translate("Translate that!"); ?>

探索するためのいくつかのリンク

于 2013-10-09T12:55:09.540 に答える