0

我設法使我的網址i18n兼容使用Zend_Controller_RouterZend翻譯URL和語言切換器

即: en/user/login成爲fr/utilisateur/connexion和兩個網址去同controller/action

我現在面臨的問題是以下

我有一個顯示爲後續語言切換:

Français 
English 
Italiano 
etc. 

當前設置的語言不具有anchor標籤,但所有其他人。

對於其上有anchor的語言,我正在構建URL,我希望它們能夠以其特定語言進行翻譯。

目前,如果我在French所有的網址都會建造在法國,即使我設置@local鍵作爲URL視圖助手一個參數(tried "@locale" => 'en'"@locale" => new Zend_Locale('en')

en/utilisateur/connexion 
it/utilisateur/connexion 

,而不是

en/user/login 
it/utente/collegamento 

因爲構建URL時使用的語言環境是應用程序範圍內定義的語言環境。

編輯

我在挖問題深一點的我發現,只有目前的語言環境添加加載資源,這意味着我不能在適當的語言獲得路線所要構建的路徑在正確的語言

我的新問題是:如何加載多種語言翻譯資源?

(我計劃實現在不遠的將來(近版本)高速緩存,所以我可能會得到更好的性能)

+0

這是奇怪的。我做同樣的事情,它的工作原理。你指定路線嗎? –

+0

@Aurelio De Rosa:是的,我指定了要使用的路線。更新的問題,以指定我現在得到的問題 –

回答

1

希望這有助於重新的新問題。

「我的新問題是:如何加載多種語言翻譯資源?」

只是一個快速告誡說,我沒有寫下面的代碼,它是從一個示例應用程序通過Zend公司的傢伙但是它可能會幫助到有它打破這樣放在一起考慮。

他們對示例應用程序的方法是使用一個CSV文件,其中包含翻譯和使用您的配置文件(默認的一個新的項目中的application.ini)到指定路徑所有的語言翻譯資源。

這樣的:

;; Languages 
language.file.en = APPLICATION_PATH "/../language/en/translate.csv" 
language.file.fr = APPLICATION_PATH "/../language/fr/translate.csv" 
language.file.de = APPLICATION_PATH "/../language/de/translate.csv" 
language.file.es = APPLICATION_PATH "/../language/es/translate.csv" 
language.name.zz = Language 
language.name.en = English 
language.name.fr = Français 
language.name.de = Deutsche 
language.name.es = Español 

而且在每個csv文件,如果你正在使用類似Excel或開放式辦公室來創建它,列A將是原語和B列的翻譯。

舉個例子,其中英語是原來的語言,需要西班牙語翻譯:

A  B 
login entrar 
logout salir 

你能做到這一點對所有你想翻譯的詞/詞組。 如果找不到翻譯,則使用默認的原始單詞。

主要應用程序的引導可能有這樣的事情:

protected function _initLanguage() 
{ 
    $options = $this->getOptions(); 
    Zend_Registry::set('language',$options['language']); 
    $langSess = new Zend_Session_Namespace('language'); 
    if (!isset($langSess->translate)) { 
     $translate = new Zend_Translate('csv', $options['language']['file']['en']); 
     $langSess->translate = $translate; 
    } 
    if (!isset($langSess->locale)) { 
     $langSess->locale = 'en'; 
    } 
    Zend_Locale::setDefault($langSess->locale); 
} 

作爲翻譯對象在會議上舉行您可以在您的任何意見等使用的東西喜歡使用它:

$langSess = new Zend_Session_Namespace('language'); 
$translate = $langSess->translate; 

和:

<a href="/user/login"> <?php echo $translate->_('login') ?> </a> 

在哪裏你想要翻譯的東西選擇一個替代語言。在上面的例子中,當選擇英語時登錄詞將出現,選擇西班牙語時登錄詞將出現。

對Zend_Translate有更多的負載比這個和其他幾種方式來實現它,所以我並不是說這是最好的方式。

如果有幫助,或者如果我可以給你更多的信息讓我知道。

乾杯,

戴夫

+0

嗨,傑夫,希望你很好。你有沒有得到一切工作,這對你有什麼幫助?一切順利,戴夫:-D – dkcwd