2013-05-17 52 views
2

我想國際化的網址有更好的用戶體驗(全部在內聯網,所以不用擔心SEO)。Zend框架的URL國際化和路由

所以基本上我想是這樣URLS(在該示例中,英語,荷蘭語和法語):

/en/products 
/en/product/123/blue-box 
/nl/producten 
/nl/product/123/blauwe-doos 
/fr/produits 
/fr/produit/123/boite-bleue 

/nl/部分是完全沒有問題的和描述遍佈SO和互聯網。但我的問題是路由到控制器和操作。

目前我已經從默認路由器中擴展並使用Zend_Translate將所有內容翻譯成英文,並且根據英文名稱使用控制器和操作。

但是我一直覺得應該有更好的方法來做到這一點。有誰知道是否有這樣的Zend框架中的標準組件,或者有可能已經創建了這樣的事情之前。

規格:

PHP 5.4.4 
Zend Framework 1.11.10 

回答

2

你不必複製你的控制器。 我已經做到了這種方式:

$translate = new Zend_Translate(
    array(
    'adapter' => 'array', 
    'content' => 'PATH_TO_LANGUAGES/en_url.php', 
    'locale' => 'en' 
) 
); 

$translate->addTranslation(array(
    'content' => 'PATH_TO_LANGUAGES/nl_url.php', 
    'locale' => 'nl' 
)); 

$translate->setLocale('en'); 

Zend_Controller_Router_Route::setDefaultTranslator($translate); 

語言文件看起來是這樣的: 可以轉換控制器或動作。但我不知道你是否也可以翻譯查詢參數。

// en_url.php 
return array(
    'products' => 'products', 
); 

// nl_url.php 
return array(
    'products' => 'producten', 
); 

瞭解更多關於它here

+0

我找不到setDefaultTranslator的存在。所以我自己通過擴展路由器來完成翻譯工作。這確實使它更清潔。 TNX! – nvanesch

+0

@nvanesch我已經插入了一個鏈接,以便您可以閱讀更多關於它的信息。 – bitWorking