3

zf2 でルート/URI の変換ツールを使用できるかどうか疑問に思っています。en.domain.tld/article/show/1たとえば、に変換するルートが必要ですde.domain.tld/artikel/anzeigen/1。のような結果になる可能性があるため、正規表現はここに行く方法ではないと思いますen.domain.tld/artikel/show/1。また、すべての言語のルートを作成することは避けたいと考えています。これは、システムがスケールするにつれて非常に面倒になるためです。

4

3 に答える 3

6

動作させることができました!

まず、次のように追加し'router_class' => 'Zend\Mvc\Router\Http\TranslatorAwareTreeRouteStack',ます。module.config.php

return array (
    'router' => array (
        'router_class' => 'Zend\Mvc\Router\Http\TranslatorAwareTreeRouteStack',
        'routes' => array(),
    )
);

次に、トランスレータ (できれば module.php 内) と翻訳ファイルを提供する必要があります。

class Module
{
    public function onBootstrap(MvcEvent $e)
    {
        // Load translator
       $translator = $e->getApplication()->getServiceManager()->get('translator');
       $translator->setLocale('de_DE');        

           // setup the translation file. you can use .mo files or whatever, check the translator api
           $translator->addTranslationFile('PhpArray', __DIR__.'/language/routes/de_DE.php', 'default', 'de_DE');

       $app      = $e->getTarget();

       // Route translator
       $app->getEventManager()->attach('route', array($this, 'onPreRoute'), 100);
    }

    public function onPreRoute($e){
        $app      = $e->getTarget();
        $serviceManager       = $app->getServiceManager();
        $serviceManager->get('router')->setTranslator($serviceManager->get('translator'));
    }
}

これで、次のようにルート定義で翻訳を使用できるようになります。

return array (
    'router' => array (
        'routes' => array(
            'login' => array (
            'type' => 'Zend\Mvc\Router\Http\Segment',
            'may_terminate' => true,
            'options' => array (
                'route' => '/{login}',
                'defaults' => Array(
                    'controller' => '...',
                ) 
            ),
        ),
    )
);

翻訳を作成します (この例では、module/language/routes/de_DE.php にある phpArray):

<?php
return array(
    'login' => 'anmelden',
);

私が何も忘れていなければ、あなたは行ってもいいはずです。私の場合はうまくいきましたので、上記の手順でうまくいかない場合は、遠慮なくコメントしてください。

于 2013-07-01T21:57:05.267 に答える
1

上記の onPreRoute コールバックへの追加として:

以下を追加する必要がある場合があります。

$serviceManager->get('router')->setTranslatorTextDomain(' TEXT_DOMAIN_HERE ');

于 2013-11-26T17:43:48.533 に答える
1

ZF 2.2.0 から始まる実装が既にあります。私が知る限り、この機能に関するドキュメントはありませんが、単体テストを見ると、これを試してみることができるはずです。

今日のいつか、動作するサンプルのセットアップを取得しようとしますが、約束はできません。

于 2013-07-01T06:05:36.923 に答える