ZF1 で多言語 Web サイトを構築するのに忙しいです。zendナビゲーションと組み合わせた多言語部分という1つのことを期待して、すべてがうまく機能します。開発ページの URL を開くと、標準言語は英語 ( http://website.nl/en ) です。ナビゲーションバー (zend ナビゲーションに基づく) には、/en/blog、/en/events などのような URL が表示されます。しかし、言語を英語からオランダ語 ( http://website.nl/nl ) に変更すると、ナビゲーションバーはそのまま/en/home、/en/blog などを表示します。
誰かが問題が何であるか知っていますか?
ルーティング コード:
// Routing
$front = Zend_Controller_Front::getInstance();
// Remove default router
$router = $front->getRouter();
$router->removeDefaultRoutes();
// Add routers from config
$config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/routes.xml');
$router->addConfig($config, 'routes');
ナビゲーション コード:
$this->bootstrap('layout');
$this->bootstrap('view');
$layout = $this->getResource('layout');
$view = $layout->getView();
// Set path to navigation.xmls
$config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml');
// ACL
$acl = new Application_Model_Acl();
// Get the identity of the user
$auth = Zend_Auth::getInstance()->getIdentity();
$navigation = new Zend_Navigation($config);
$view->navigation($navigation)
->setAcl($acl)
->setRole($auth->role);
ルーティング xml の一部
<cameloth type="Zend_Controller_Router_Route_Hostname">
<route>websiteurl</route>
<defaults _layout="sitecameloth/layout" module="siteCameloth" />
<chains>
<locale>
<route>:locale</route>
<defaults controller="index" locale="en" />
<reqs locale="[a-z]{2,3}" />
<chains>
<index>
<route></route>
<defaults _layout="sitecameloth/front" action="index" />
</index>
<news>
<route>blog</route>
<defaults controller="news" />
<chains>
<list>
<route>:page</route>
<defaults action="list" page="1" />
</list>
<read>
<route>:id/:title</route>
<defaults action="read" />
</read>
</chains>
</news>
ロケールプラグイン
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
$lang = $request->getParam('locale', '');
if ($lang !== 'en' && $lang !== 'nl')
$request->setParam('locale', 'en');
$lang = $request->getParam('locale');
if ($lang == 'en')
$locale = 'en_US';
else
$locale = 'nl_NL';
$zl = new Zend_Locale();
$zl->setLocale($locale);
Zend_Registry::set('Zend_Locale', $zl);
$translate = new Zend_Translate('gettext', APPLICATION_PATH . '/languages/' . $locale . '.mo');
Zend_Registry::set('Zend_Translate', $translate);
}