2008-11-20 153 views
6

我有整個MVC模型設置和使用HTML視圖作爲模板。但我在那裏有德文字符串,我想在某些時候翻譯成其他語言。Zend框架翻譯工具的使用

這樣做的最好方法是什麼?我知道我必須使用Zend_Translate,但是我必須對我的視圖模板中包含的每個單詞實施對轉換函數的單個調用嗎?

回答

12

首先,我建議使用完整的短語作爲翻譯的基礎。用詞語總是會遇到語言在句子結構上不一致的問題。

然後,您必須選擇一個可用的Zend_Transalate適配器:Array,Csv,Gettext,Ini,Tbx,Tmx,Qt,Xliff或XmlTm。它們中的大多數都適用於存儲翻譯信息的行業標準,因此,如果您選擇Array,Csv或Ini作爲開始和易用性,它們可能就足夠了。請參閱Zend Framework手冊中的49.2.1. How to decide which translation adapter to use

// setup your translation 
$translate = new Zend_Translate('csv', '/my/path/source-de.csv', 'de'); 
$translate->addTranslation('/my/path/source-en.csv', 'en'); 
// add the translation adapter to the registry 
Zend_Registry::set('Zend_Translate', $translate); 

由於沒有訪問標準化Zend_Registry進入Zend_Translate作爲默認翻譯源Zend_View_Helper_Translate,您可以使用您的看法如下:

[...] 
<title><?php echo this->translate('Title'); ?></title> 
[...] 
<p>You can also do <?php echo $this->translate('Hello %1$s', $this->userName); ?></p> 
[...] 

請注意,這僅僅是一個簡短的介紹轉換成Zend_Translate,並不意味着完整呈現此組件提供的功能。例如,確定翻譯適配器將使用的語言環境有很多要說的。

我建議你閱讀Zend框架手冊以下,因爲本地化是一個複雜的問題,Zend_Translate不能在這裏完全描述:

+0

謝謝。所以我總是需要調用$ this-> translate()。謝謝! – 2008-11-21 12:34:28

1

不,你不需要翻譯每一個單詞。這種意義上的翻譯理念更多地是一種信息翻譯理念。

在我目前的項目中,我們做了兩種類型的翻譯。當它只是一個簡短的文本時,爲了便於閱讀,我們直接在源代碼中輸入。

I.E.

<?=$this->translate('Add');?> 
<?=$this->translate('Delete');?> 
<?=$this->translate('Are you sure you want to delete %1$s?', $thing);?> 

但如果消息是更長的時間,我們通常遵循一定的標準,以紀念它的翻譯系統:

<?=$this->translate('controller-action_form-information');?> 

的想法是,你可以再更換一個很長的文本你的翻譯工具,它保持視圖腳本整潔。