zf2 でルート/URI の変換ツールを使用できるかどうか疑問に思っています。en.domain.tld/article/show/1
たとえば、に変換するルートが必要ですde.domain.tld/artikel/anzeigen/1
。のような結果になる可能性があるため、正規表現はここに行く方法ではないと思いますen.domain.tld/artikel/show/1
。また、すべての言語のルートを作成することは避けたいと考えています。これは、システムがスケールするにつれて非常に面倒になるためです。
3 に答える
動作させることができました!
まず、次のように追加し'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',
);
私が何も忘れていなければ、あなたは行ってもいいはずです。私の場合はうまくいきましたので、上記の手順でうまくいかない場合は、遠慮なくコメントしてください。
上記の onPreRoute コールバックへの追加として:
以下を追加する必要がある場合があります。
$serviceManager->get('router')->setTranslatorTextDomain(' TEXT_DOMAIN_HERE ');
ZF 2.2.0 から始まる実装が既にあります。私が知る限り、この機能に関するドキュメントはありませんが、単体テストを見ると、これを試してみることができるはずです。
今日のいつか、動作するサンプルのセットアップを取得しようとしますが、約束はできません。