WIKI使用導(dǎo)航
站長(zhǎng)百科導(dǎo)航
站長(zhǎng)專題
- 網(wǎng)站推廣
- 網(wǎng)站程序
- 網(wǎng)站賺錢
- 虛擬主機(jī)
- cPanel
- 網(wǎng)址導(dǎo)航專題
- 云計(jì)算
- 微博營(yíng)銷
- 虛擬主機(jī)管理系統(tǒng)
- 開放平臺(tái)
- WIKI程序與應(yīng)用
- 美國(guó)十大主機(jī)
Gallery:本地化
Gallery2的本地化[ ]
綜述[ ]
Gallery是國(guó)際化的。不對(duì)特定語(yǔ)言文本消息的包含, 取而代之地,它使用特殊的方法追蹤文本 以進(jìn)行抽取并翻譯成其他語(yǔ)言。用戶則會(huì)看見 文本被翻譯成他們使用的語(yǔ)言版本。
為了能夠讓用戶看到Gallery文本的本地化版本, 就需要先將這些Gallery要顯示的文本消息進(jìn)行 翻譯。此過(guò)程就被稱為"本地化"。
這里我們嘗試說(shuō)明一下如何創(chuàng)建并維護(hù)G2中本地化 文件的內(nèi)容。這并不是特別困難的任務(wù), 但要求無(wú)論何時(shí)基礎(chǔ)內(nèi)容有改變,我們都要保證 各類文件的更新度。我們挺幸運(yùn)的,因?yàn)橛羞@樣的工具能 協(xié)助我們完成此類操作過(guò)程。
要求[ ]
為了能夠有效率地進(jìn)行,你需要在計(jì)算機(jī)上 安裝一些工具。我僅在FreeBSD box中做了測(cè)試,但我想如果用在Linux,Solaris或其他Unix類系統(tǒng) 上也不會(huì)太麻煩。在Windows上可能會(huì)有些難度, 但也是有可能實(shí)現(xiàn)的。 以下為必須安裝,并在你的路徑中:
- gettext
- http://www.gnu.org/software/gettext/
- gmake (或make)
- http://www.gnu.org/software/make/make.html
- php二進(jìn)制
- http://php.net
- perl
- http://perl.com
注:如果你使用FreeBSD,并希望能取代make而使用gmake,因?yàn)镕reeBSD的默認(rèn)不與GNU兼容。
你還需要用當(dāng)前G2文件創(chuàng)建最新的翻譯。就目前的SVN或nightly快照版的運(yùn)行情況都不錯(cuò)。最新的G2開發(fā)者版本也能運(yùn)行,但某些翻譯的字串可能有些過(guò)時(shí)了。
本地化的新建[ ]
瀏覽一下Gallery就能發(fā)現(xiàn)不少名為"po"的目錄。("po"是一gettext術(shù)語(yǔ),即"可移植對(duì)象(portable object)")。以下為找到它們的一個(gè)方法:
find . -type d -name po <-- 輸入這個(gè) ./themes/matrix/po <-- 會(huì)看到這個(gè) ./lib/tools/po ./modules/core/po ./modules/comment/po ./modules/netpbm/po ** 忽略"lib/tools/po"目錄。
這些目錄還有翻譯源文件。你要 使用合適的語(yǔ)言代碼來(lái)新建文件,接著在它們之中 添入經(jīng)過(guò)翻譯的文本。首先要做的就是從 下面的兩個(gè)表格中識(shí)別出正確的代碼:
- 語(yǔ)言代碼
- http://www.gnu.org/software/gettext/manual/html_mono/gettext.html#SEC221
- (or http://ftp.ics.uci.edu/pub/ietf/http/related/iso639.txt)
- 國(guó)家代碼
- http://www.gnu.org/software/gettext/manual/html_mono/gettext.html#SEC222
- (or http://www.iso.ch/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html)
在大多數(shù)情況下,你只需要語(yǔ)言代碼即可,如德語(yǔ)就是"de"。要為多個(gè)國(guó)家中提供特定國(guó)家語(yǔ)言的翻譯,你可以使用這樣的代碼格式,xx_XX,例如"pt_BR"表示葡萄牙語(yǔ)/巴西。如果你確定該用哪一個(gè),包括語(yǔ)言和國(guó)家。如果你發(fā)現(xiàn)已有你使用語(yǔ)言的翻譯的話,請(qǐng)接著看 本地化的維護(hù)。
一旦選好了代碼,就需要為你的代碼新建一個(gè).po 文件。假定你選擇是的"de"。那么對(duì)各po目錄, 你需要做的是:
make de.po
這將找到該本地化標(biāo)記的所有文本(tpl文件中的{g->text},php代碼中的translate()或i18n()),并創(chuàng)建一個(gè)即將進(jìn)行翻譯的po文件。
有關(guān)文本編輯器。
- 有一些工具可以處理.po文件:
- poEdit(多平臺(tái))
- KBabel(Unix KDE)
- GTranslator(Unix Gnome)
- Emacs with po-mode(多平臺(tái))
- Vim with PO plug-in(多平臺(tái))
我比較喜歡用XEmacs,因此我會(huì) 在下面的例子中拿XEmacs做例子。如果你有其他編輯器 的使用指導(dǎo),請(qǐng)分享一下。XEmacs的主要模式被稱為"po-模式",如果你安裝了它,在編輯.po文件時(shí)就會(huì) 自動(dòng)轉(zhuǎn)入。我在這里不準(zhǔn)備這么做,但 你可以嘗試一下。
現(xiàn)在我們來(lái)編輯de.po。在其頂部應(yīng)有Gallery的證書。你需要對(duì)以下值做自定義:
- Last-Translator
- 將你的名字及email以此格式輸入:"FirstName LastName <email@address>"
- Language-Team
- 輸入語(yǔ)言及-翻譯郵件列表,如"German <gallery-translations@lists.sourceforge.net>"
- Content-Type
- 將此設(shè)置給"Content-Type:text/plain; charset=UTF-8\n"
- 我們希望你使用UTF-8字符集。因?yàn)樗试S我們?cè)谕豁?yè)面上對(duì)多個(gè)語(yǔ)言進(jìn)行渲染,這對(duì)某一語(yǔ)言站點(diǎn)頁(yè)面上其他語(yǔ)言的用戶評(píng)論是有好處的。
這里有modules/core/po/de.po的完整的header樣例。注意編寫者是如何維護(hù)前任翻譯者名單的。
# 前任翻譯者(迄今所知,如有脫漏,請(qǐng)?jiān)诖颂砑樱?# - Jens Tkotz <jens@peino.de> # - Ernesto Baschny <ernst@baschny.de> ... # msgid "" msgstr "" "Project-Id-Version: Gallery: Core 1.0.32\n" "POT-Creation-Date: 2003-02-11 03:09-0800\n" "PO-Revision-Date: 2006-03-05 02:25+0000\n" "Last-Translator: Frederik Kunz <frederik.kunz@web.de>\n" "Language-Team: German <gallery-devel@lists.sourceforge.net>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
如果你的語(yǔ)言中不包含復(fù)數(shù)詞用法,如漢語(yǔ)或土耳其語(yǔ),就得修改以下語(yǔ)句:
"Plural-Forms: nplurals=2; plural=(n != 1);\n" -> Change to "Plural-Forms: nplurals=1; plural=0;\n".
這樣,你只需翻譯msgstr[0]并注釋掉或移除msgstr [1].
接著來(lái)看看Gallery證書下的語(yǔ)句行:
#, fuzzy msgid "" msgstr ""
模糊的關(guān)鍵詞告知你區(qū)塊的翻譯 不完整。但一旦更新了administration entry,就 可以移除"#, fuzzy"這一行以允許稍后翻譯的 編譯。
接下來(lái)你會(huì)看到一系列區(qū)塊:
#, c-format (<-- 在某些語(yǔ)句行中僅能看到這個(gè)) msgid "a message in english, with %d or %s tags in it" msgstr ""
你需要將英語(yǔ)消息的翻譯置入 msgstr區(qū)塊中,用引號(hào)括起來(lái),例如:
#, c-format msgid "a message in english, with %d or %s tags in it" msgstr "eine Anzeige auf englisch, mit %d oder %s etikettiert in ihr"
某些msgid值含有有助于進(jìn)行翻譯的提示信息:
#. HINT: Button label for Bold msgid "B" msgstr "F"
注意提示內(nèi)容不應(yīng)翻譯或包括在msgstr文本中。你可以使用翻譯追蹤器(Translations Tracker)為特殊字串請(qǐng)求額外的提示文本。指定模塊/外觀主題以及msgid。注意strings.raw文件列出了用到msgid的文件。
在編輯這些消息之前,你確實(shí)應(yīng)當(dāng)將編輯器設(shè)為UTF-8模式, 這樣編輯器才能使用正確的字符集。 如果你由于某種原因無(wú)法在UTF-8模式中進(jìn)行編輯, 請(qǐng)考慮使用GNU的"recode"程序,在提交翻譯內(nèi)容給我們之前, 將其轉(zhuǎn)為UTF-8(或者直接發(fā)給我們也許,我們會(huì)進(jìn)行重新編碼)。
如果你使用XEmacs的MULE(即多語(yǔ)言支持(MULtilanguagE)),你可以將一下內(nèi)容添加到 ~/.xemacs/init.el中去
; Enable Unicode support (via Mule-UCS) ; (require 'un-define) (set-coding-priority-list '(utf-8)) (set-coding-category-system 'utf-8 'utf-8)
當(dāng)你編輯UTF-8的文件時(shí),會(huì)有一些"u" 出現(xiàn)在屏幕底部狀態(tài)條左側(cè)。使用現(xiàn)有的 .po文件來(lái)看一看。
在進(jìn)行一些翻譯之后,來(lái)看看效果。運(yùn)行:
make install PO=de
它會(huì)將你的.po文件編譯到一個(gè).mo文件中,并將其安裝到合適的位置。在修改.po文件之后,對(duì)各目錄都要重復(fù)此步驟。如果你在創(chuàng)建locale目錄時(shí)發(fā)生錯(cuò)誤,請(qǐng)?jiān)谶\(yùn)行make之前建立目錄結(jié)構(gòu)(如:modules/mymodule/locale/de/LC_MESSAGES)。
最后,你需要編輯modules/core/classes/GalleryTranslator.class,并在函數(shù)getLanguageData中加入如下語(yǔ)句:
/* German */ $this->_supportedLanguages['de']['DE']['description'] = 'Deutsch'; $defaultCountry['de'] = 'DE';
批注應(yīng)為該語(yǔ)言的英語(yǔ)說(shuō)法;語(yǔ)言 '描述'則應(yīng)是該語(yǔ)言的本土說(shuō)法。
現(xiàn)在登入G2,在用戶偏好(你可能需要 通過(guò)站點(diǎn)管理對(duì)用戶進(jìn)行編輯)中,你應(yīng)能在下拉列表中看到 German。而如果你選擇了它,并以剛才那個(gè)用戶的身份登入的話, 就能看到消息被翻譯為該語(yǔ)言了。你還可以將語(yǔ)言選擇器區(qū)塊 添加到站點(diǎn)中,使用外觀主題設(shè)定就可以做到。
注: 如果語(yǔ)言修改沒有起效,請(qǐng)回顧一下語(yǔ)言設(shè)定的優(yōu)先級(jí)(會(huì)話語(yǔ)言(Session language) > 用戶偏好(user preferences) > 站點(diǎn)范圍的默認(rèn)語(yǔ)言(site wide default language))。如果有疑慮的話,可以使用語(yǔ)言區(qū)塊或在用戶偏好中反復(fù)嘗試。
本地化的提交[ ]
現(xiàn)在本地化就應(yīng)創(chuàng)建號(hào)了,你需要將其 打包并發(fā)送給我們,這樣我們就能將其添入存儲(chǔ)庫(kù)。 最好的打包方式如下:
cd gallery2 zip de.zip `find . -name de.po`
or:
cd gallery2 tar czf nl.tar.gz `find . -name nl.po`
你翻譯過(guò)的文件會(huì)被做成zipfile或tarball。當(dāng)然使用你自己的語(yǔ)言代碼取代上面的de或nl。接著瀏覽SourceForge 的Gallery項(xiàng)目頁(yè)面上的幫助部分)告知我們。
本地化的維護(hù)[ ]
cd po make de.po (using German as an example)
這會(huì)從你所在的模塊中提取出所有消息 并更新.po文件。瀏覽.po文件,找到所有具有 空msgstr或被標(biāo)記為"模糊(fuzzy)"的區(qū)塊并更新它們。在它們 被修復(fù)之后,移除fuzzy標(biāo)識(shí)。你看到的標(biāo)識(shí)會(huì)是如下的 樣子:
#, fuzzy #~ msgid "User" #~ msgstr "Gebruikersnaam"
"#, fuzzy"表示它是模糊的,但"#~"表明該 字串不存在于G2中(我們可能將其刪除或修改了 )。你可以刪除這些內(nèi)容.
你應(yīng)當(dāng)快速地做一次gettext提供的檢查,以驗(yàn)證.po文件:
msgfmt -v -c --stat de.po
當(dāng)一切都設(shè)置好后,運(yùn)行:
make install PO=de
翻譯文件被PHP緩存(這就是其快速的原因) 因此在重啟web服務(wù)器之前,可能無(wú)法看到所作的修改。這是 有點(diǎn)麻煩,但我還沒有想出好的解決辦法。
參見[[#本地化的新建]|本地化的新建]]部分的測(cè)試信息,并向我們提交新文件。
何處尋求幫助?[ ]
如果你需要幫助,有三個(gè)地方可以求助:
- The Gallery translations forums
- http://gallery.menalto.com/forum/74
- The gallery-translations mailing list
- http://codex.gallery2.org/index.php/Mailing_Lists
- The Gallery IRC channel
- #gallery on irc://chat.freenode.net
翻譯列表[ ]
所有可用的Gallery2翻譯,都在此以字母表順序列出了,帶有維護(hù)者/作者名單。某些翻譯100%保持更新并且完成,某些則僅完成了2%或過(guò)期了。參見 本地化報(bào)告。如果你有G2的開發(fā)者整合包,就可以運(yùn)行http://www.example.com/gallery/lib/tools/reports/localization.php來(lái)查看所有已安裝翻譯的狀態(tài)。
語(yǔ)言 | 語(yǔ)言代碼 | 最后翻譯者 | 翻譯者列表 |
---|---|---|---|
Afrikaans
Afrikaans |
af | Renier | Renier |
???????
Arabic |
ar | Mohammad Saleh | Mohammad Saleh |
Български
Bulgarian |
bg | Bisser Dobrev | Bisser Dobrev |
Беларуская
Belarusian |
be | Alex Lavysh | Alex Lavysh |
Català
Catalan |
ca_ES | Roger Cervantes | Juan Vega Aiguadé; Roger Cervantes |
中國(guó)
Chinese [簡(jiǎn)體] |
zh_CN | Wayne Zhang | Wayne Zhang |
臺(tái)灣
Chinese [繁體] |
zh_TW | Stephen Chu | Stephen Chu |
?esky
Czech |
cs | Jan Korbel | Jan Korbel |
Dansk
Danish |
da | Jens Hyllegaard | Lasse Bang Mikkelsen, Allan Beaufour, Bj?rn Graabek, Jens Hyllegaard |
Deutsch
German |
de | Andy Staudacher | Jens Tkotz, Ernesto Baschny, Frederik Kunz, Georg Rehfeld, Bananeweizen, Moritz Stoltenburg |
Ελληνικ?
Greek |
el | Anthi Andreou | Nikos Batsis, Anthi Andreou |
English [British] | en_GB | Stephen Ryan | Joan McGalliard, Alan Harder, Stephen Ryan |
Espa?ol
Spanish |
es | Oscar Garcia Amor | Oscar Garcia Amor |
Espa?ol de Argentina
Spanish [Argentine] |
es_AR | Alvaro Cortizo | Alvaro Cortizo |
Espa?ol de Mexico
Spanish [Mexican] |
es_MX | Wieland E. Kublun | Wieland E. Kublun |
Eesti
Estonian |
et | poromaan | poromaan |
Euskera
Basque |
eu | Piarres Beobide | Piarres Beobide |
?????
Farsi |
fa | Mohammad Samini | Jalal Kheradmand, Pedram Hayati, Mohammad Samini |
Fran?ais
French |
fr | Arnaud MOURONVAL | Arnaud MOURONVAL |
?????
Hebrew |
he | Guy Sheffer | Guy Sheffer, Omri Amos |
Irish Gaelic
Irish |
ga | Beckett Madden-Woods | Beckett Madden-Woods |
íslenska
Icelandic |
is | Johann S Jonsson | Johann S Jonsson |
Italiano
Italian |
it | Ermanno Baschiera | Ermanno Baschiera |
日本語(yǔ)
Japanese |
ja | Kennichi Uehara | Kennichi Uehara, Yosuke Suzuki |
한국말
Korean |
ko | Juice | Juice |
Latvie?u
Latvian |
lv | Jānis Bai?a | Jānis Bai?a |
Lietuvi?
Lithuanian |
lt | Darius ?itkevi?ius | Darius ?itkevi?ius |
Magyar
Hungarian |
hu | Sandor Dibuz | Gergely D?ms?di, József R.Nagy, Sandor Dibuz |
Nederlands
Dutch |
nl | Marijke van Velsen | Marcel van Groenigen, Kees van den Broek, Arjen Gideonse, B. Scheijgrond, Marijke van Velsen |
Norsk Bokm?l
Norwegian |
no | Sverre M. Vikan | Frode Tviberg, Sverre M. Vikan, Jon Harald Carlsen, Robin Smidsrod (sponsored by Grieg Multimedia AS), Terje Dahl |
Polski
Polish |
pl | Kappana | Sebastian Marek, Kappana |
Português
Portuguese |
pt | Francisco Neto | Hugo Cruz, Francisco Neto |
Português Brasileiro
Portuguese [Brazilian] |
pt_BR | Paulino Michelazzo | Ernesto Baschny, José Ricardo, Celso Reeks, Paulino Michelazzo |
Roman?
Romanian |
ro | Serban Constantintinescu | Serban Constantintinescu |
Русский
Russian |
ru | Ser Moro | Konstantin Ivanov, modus, Ser Moro |
Укра?нська
Ukrainian |
uk | Anton Gladky | Yurii Smetana, Anton Gladky |
Qu?c Ng? (國(guó)語(yǔ))
Vietnamese |
vi | Trung Dong Huynh | Trung Dong Huynh |
Suomea
Finnish |
fi | Jyrki Heinonen | Jussi Karppanen; Erkka Hakkarainen; Jyrki Heinonen |
Srpski
Serbian |
sr | Jozef Selesi | Jozef Selesi |
Sloven?ina
Slovak |
sk | Branislav Hanacek | Branislav Hanacek |
Sloven??ina
Slovenian |
sl | Jure Babnik | Janez Troha, Jure Babnik |
Svenska
Swedish |
sv | Anders Lindquist | Christian Wallin, Mikael Gustafsson, Peter Liversten, Hampus Nygren, Anders Lindquist |
Türk?e
Turkish |
tr | Goker ISIK | Goker ISIK, Roman Neumüller |