2009-12-08 71 views
3

於是我開始用gettext瞎搞,但我仍然疑惑某些事情,將是巨大的,如果有人可以幫助我,併爲我填補空白。國際化/ gettext的:配置的setlocale在Web應用

  1. 通常大部分實現基於語言參數只調用setlocale。是否有任何情況下需要使用putenv,可能是用於Windows設置的邊緣情況?

  2. 我的PHP框架的默認語言爲英語,UTF-8 - 所以我設置LC_ALLen_US.utf-8,因爲en_US是ISO-8859-1/Latin1的,顯然,這不是作爲支持爲UTF-8?

  3. 是否有我應該知道的任何陷阱調用setlocale(LC_ALL, 'en_US.utf-8')後?由於它改變了所有這些:LC_COLLATE, LC_CTYPE, LC_MONETARY, LC_NUMERIC, LC_TIME, and LC_MESSAGES - 我將不得不更新任何腳本,例如,生成時間或類似的東西?

  4. 比方說,例如一個新配置的服務器沒有配置es_ES.utf-8語言環境,我知道如何生成語言環境,但如果它不可用,那麼我應該在數組中提供備份嗎?將是巨大的,如果有人能提供一個實際的例子,如:

    setlocale(LC_ALL, array('es_ES.UTF-8', 'es_ES', 'es'))

    是否有某種形式的網站,提供象這樣的例子,或者說人們通常拿出優先訂購自己?

  5. 我在某處讀到localei18n文件夾的常見結構如下所示。

    是否結構真的重要嗎?好像所有發生的事情是,當你做bindtextdomain('messages', 'locale')它遞歸搜索,對於messages.mo目錄,我可能不會注意到,但它可能會採取的目錄進去。

我應該對結構有多嚴格?

locale 
    en_US 
     LC_MESSAGES 
     messages.po 
    es_ES 
     LC_MESSAGES 
     messages.po 


    6.  我應該甚至試圖測試系統是否真正支持的語言環境或不這麼做呢?因爲例如,如果服務器沒有語言環境,我試圖用setlocale設置不會報錯了什麼的,那就只是默默的讓它過去。

回答

3

這是不是對您的問題有一個合格的答案,我並不是說使用gettext是壞的 - 我從來沒有用它做過足夠的評論 - 但我決定單獨離開gettext,因爲在具有不同語言環境的不同平臺上其複雜性和巨大的不可預測性。我發佈了一個問題尋找替代品here,雖然沒有太多的東西,Zend_translate包似乎值得一看。我自己還沒有做到。

如果您有gettext的工作,一定要檢查出PHP Manual User Contributed Notes on Gettext

+0

我其實*計劃使用'Zend_Translate',但我認爲我應該至少弄清楚低級別的東西,以便對它的工作方式有一個基本的瞭解(就像在使用jQuery之前學習Javascript一樣),謝謝雖然你的建議。 Zend_Translate如何爲你工作? – 2009-12-08 22:34:51

+0

現在還沒有,我沒有時間去處理它。不過,我計劃儘快在現有的CMS上使用UTF-8,並計劃嘗試一下。我自己很擔心,因爲似乎沒有任何其他值得使用PHP進行國際化的東西! – 2009-12-08 22:38:29