正確使用gettext來(lái)翻譯Wordpress主題 收藏Wordpress是一個(gè)非常不錯(cuò)的blog系統(tǒng),,使用方便,,且能更換不同的主題。在國(guó)外的網(wǎng)站上,,有很多免費(fèi)的主題,,這些主題不但表現(xiàn)形式漂亮、簡(jiǎn)潔,,而且代碼也非常精煉,。 但我們國(guó)人在使用這些主題的時(shí)候,都不免要碰到一個(gè)漢化的問(wèn)題,。最直接的辦法,,當(dāng)然是打開(kāi)文本編輯器,將這些主題的模板文件進(jìn)行修改,,將英文的地方 替換成中文,。但這樣的做法,,雖然直接,存在的缺點(diǎn)也是很明顯的:首先,,我們需要了解我們文本編輯器最后保存文件時(shí)的編碼,,并且要符合Wordpress生 成頁(yè)面時(shí)產(chǎn)生的charset屬性,如果你的文本編輯器保存文件為GB2312,,而Wordpress設(shè)置成了UTF-8,,那么頁(yè)面顯示出來(lái)就是亂碼。其 次,,我們直接改動(dòng)了原來(lái)的主題代碼,,增加了程序和相應(yīng)語(yǔ)言的耦合度,不便于維護(hù),,以后如果主題的作者對(duì)主題代碼進(jìn)行了升級(jí),,我們就需要重新進(jìn)行修改了。最 后,,對(duì)于那些追求完美的程序員來(lái)說(shuō),,更趨向于低耦合度的東西。 其實(shí),,Wordpress利用了GNU gettext模塊,,已經(jīng)完美地支持了多語(yǔ)言。而很多國(guó)外的優(yōu)秀主題,,也是遵循這樣的規(guī)范進(jìn)行開(kāi)發(fā)的,,我們所需要做的就是,生成一張翻譯列表,,然后填上我 們的漢語(yǔ)對(duì)應(yīng)語(yǔ)句就可以了,。當(dāng)然,你的主題如果不準(zhǔn)備更新,,或者追求快速(畢竟翻譯的步驟還是比直接修改來(lái)的麻煩一點(diǎn)),,你也可以跳過(guò)本文。
在開(kāi)始本文的實(shí)驗(yàn)以前,,請(qǐng)確保你已經(jīng)知道以下事情:
好了,,首先,,我們到這里下載一個(gè)用于測(cè)試的主題。這個(gè)主題叫做Barthelme,,是一個(gè)符合Wordpress 2.5規(guī)范的主題,,非常簡(jiǎn)潔的主題,,下面是它的預(yù)覽: 另外插句話(huà),,http://www./ 這個(gè)網(wǎng)站里面提供了幾個(gè)非常簡(jiǎn)潔的主題,而且都支持Wordpress 2.5,,喜歡這種風(fēng)格的朋友可以自行選擇,。 好了,我們按照常規(guī)辦法安裝好 Barthelme 主題,。由于我們已經(jīng)將Wordpress切換到了中文,,所以我們可以看到這樣的模樣: 我們看看這個(gè)主題截圖,其中少部分被正常翻譯了,,比如“頁(yè)面”,然而更多的詞條還沒(méi)有被翻譯,,比如“CATEGORIES“和”Comments“ 等。這是怎么回事呢,?原來(lái)我們由于安裝過(guò)Wordpress的漢化mo文件,,并且將站點(diǎn)切換到了zh_CN,所以這些詞條首先從Wordpress的漢化 mo文件里尋找,,這樣,,它找到了“頁(yè)面”詞條的翻譯,但卻沒(méi)有找到“CATEGORIES“詞條的翻譯,,于是產(chǎn)生了這樣奇怪的現(xiàn)象,。 到這里,我們應(yīng)該看到一個(gè)問(wèn)題,,那就是,,新的模板(符合多語(yǔ)言開(kāi)發(fā)規(guī)范的模板)會(huì)自動(dòng)進(jìn)入Wordpress的漢化包里進(jìn)行詞條翻譯搜索,這樣,,就 和Wordpress的翻譯混雜在了一起,。我們知道,Wordpress的中文漢化主要應(yīng)該集中于后臺(tái)管理的漢化,,而對(duì)于主題,,理想的狀況是每個(gè)主題有自 己的漢化包,。 為了解決這個(gè)問(wèn)題,Wordpress提出了文字域的概念,。用過(guò)C++語(yǔ)言的朋友可以將其對(duì)應(yīng)于namespace概念,。這個(gè)概念解決了作用域的沖突。好,,那么我們首先為Barthelme主題添加其獨(dú)自的文字域,。 我們進(jìn)入
既然定義了域名,那么為什么詞條“頁(yè)面”能夠正確翻譯,,而“Categories“就不能了呢,?讓我們打開(kāi)
原來(lái),,在顯示詞條”頁(yè)面“時(shí),,用的是 這樣,,詞條“頁(yè)面”就不會(huì)被翻譯了,,因?yàn)槲覀冞€沒(méi)有提供該域的翻譯文件。 接下來(lái)要進(jìn)行翻譯了,,我們首先需要產(chǎn)生一個(gè)翻譯詞條的列表,,也就是po文件(或者pot文件,pot的意思是po文件的模板template),。當(dāng)然,,我們?nèi)绻止ぎa(chǎn)生這個(gè)列表的話(huà),工作量是非常巨大的,,這里我們借助GNU gettext的工具來(lái)產(chǎn)生:
我們首先進(jìn)入主題目錄,,通過(guò)find命令產(chǎn)生一個(gè)php文件名列表,并將這個(gè)文件名列表保存為一個(gè)臨時(shí)文件 運(yùn)行完xgettext后,,會(huì)產(chǎn)生一個(gè)
我們首先需要對(duì)這個(gè)頭信息進(jìn)行改造,改造有兩個(gè)部分:一,,設(shè)置charset,,這個(gè)一般設(shè)置為UTF-8;二來(lái)要為其添加關(guān)于漢語(yǔ)的一些細(xì)節(jié),。關(guān)于 語(yǔ)言的細(xì)節(jié)主要包括nplurals和plural的設(shè)置,,其實(shí)它包括了該語(yǔ)言如何處理單數(shù)和復(fù)數(shù)的情況,當(dāng)然,,我們漢語(yǔ)沒(méi)有這個(gè)問(wèn)題,,我們簡(jiǎn)單地將 nplurals設(shè)置為2,plural設(shè)置為1就可以了,。下面是修改好的頭信息(注意紅色部分):
接下來(lái),,該翻譯了,我們搜索以下詞條,并將其翻譯:
保存文件的時(shí)候,,我們要注意,,因?yàn)槲覀円呀?jīng)設(shè)置編碼為UTF-8,所以我們需要將文件保存為UTF-8編碼,,常用的編輯器,,比如UtralEdit和Emacs都支持的。保存好后我們需要將
接下來(lái)編譯這個(gè)po文件為mo文件:
好了,,檢查以下我們的主題目錄,,是否有一個(gè)名為 翻譯成功!接下來(lái)要做的就是,,繼續(xù)修改po文件,,翻譯詞條,然后用msgfmt工具對(duì)其進(jìn)行編譯即可,。 總結(jié) 一個(gè)符合gettext規(guī)范的主題需要注意以下內(nèi)容(針對(duì)Wordpress 2.5):
|
|
來(lái)自: 專(zhuān)業(yè)淘寶拍圖 > 《我的圖書(shū)館》