Anjuta專案的多國語言製作

http://zylix666.blogspot.com/2007/03/anjuta.html


Anjuta是一個專注在開發IDE工具上opensource專案,目前釋出的穩定版本為1.2.4a, 本文也以這個版本為基準. Anjuta還可以結合Glade做整合性的視覺開發, 運用托拉的方式快速建構GUI應用程式. 所以當我們用Anjuta產生的一個GTK 2.0專案時, 必須要勾選"啟用支援語言本地化"的選項.

當我們建立好一個專案並且可以正確執行後, 接下來就是製做翻譯檔. 到這個地方Anjuta巳經無法再幫助我們了, 請關掉它.

1, 首先要定義這個專案要支援那些語言
我們可以在configure.in裡找到一個叫ALL_LINGUAS的參數, 一般來說它是空的. 於是我們要把想要支援的語系參數寫在這裡.
假設我們要支援正體中文及簡體中文的utf-8格式, 還有法文, 義大利文, 那麼參數後面要加上
ALL_LINGUAS="zh_TW.UTF-8 zh_CN.UTF-8 fr it"

2, 接下來就是製做翻譯檔, 在專案資料夾下有一個資料夾叫po,裡面的檔案大致如下
.
|-- ChangeLog
|-- Makefile
|-- Makefile.in
|-- Makefile.in.in
|-- POTFILES
`-- POTFILES.in

接著我們到po這個目錄下.

2.1, 產生pot檔
為何要有pot檔呢? 那是因為每一種語言都需要一個翻譯檔, 也就是po檔, 這個pot檔就算是一個template. 我們可以用這個檔案複製後, 然後再去做修改. 我們用以下的命令來產生pot檔.
[aaa@bbb po]make update-po
雖然會有一些錯誤, 但是可以避免直接用xgettext所帶來的不便.
於是就會在目錄下看到一個以專案名稱為名的pot檔, 暫且稱為i18n_test.pot

2.2, 製做po
我們依照一開始所定義支援的語系, 將i18n_test.pot一個一個地複製成po檔,
[aaa@bbb po]cp i18n_test.pot zh_TW.UTF-8.po
[aaa@bbb po]cp i18n_test.pot zh_CN.UTF-8.po
[aaa@bbb po]cp i18n_test.pot fr.po
[aaa@bbb po]cp i18n_test.pot it.po
這些就是每一種不用語言的翻譯檔.

[2.2.1]
po檔的charset㯗位一定要設定, 否則轉換訊息至使用者字元集的功能將不會運作, 也就是無法翻 譯.
"Content-Type: text/plain; charset=CHARSET/n"
改成
"Content-Type: text/plain; charset=UTF-8/n"
[2.2.2]
原則上翻譯檔開頭的欄位都不能是預設值, 當然我們msgfmt的命令都還是可以編譯
"Project-Id-Version: 1.0/n"
"Report-Msgid-Bugs-To: /n"
"POT-Creation-Date: 2007-03-03 16:29+0800/n"
"PO-Revision-Date: 2007-03-03 HO:MI+ZONE/n"
"Last-Translator: Simon Zylix /n"
"Language-Team: Goddesstech /n"
"MIME-Version: 1.0/n"
"Content-Type: text/plain; charset=UTF-8/n"
"Content-Transfer-Encoding: 8bit/n"
[2.2.3]
其他的po檔也都是比照這樣. 不過就算我們只有改其中一個, 也一樣可以產生gmo檔, 只是只有改過的這個檔編譯的出來而巳.

2.3, 編譯成gmo
當2.2的部驟都做了以後, 接著就是編譯成gmo檔, 這個才是程式在執行時所要用到的檔案.
同樣地, 我們在po資料夾下, 打入make
[aaa@bbb po]make
Makefile會依照符合規定的po檔, 產出gmo檔.

當然我們也可以用以下的命令一個一個地產生gmo
[aaa@bbb po]msgfmt -v -o zh_CN.UTF-8.gmo zh_CN.UTF-8.po
[aaa@bbb po]msgfmt -v -o fr.gmo fr.po
[aaa@bbb po]msgfmt -v -o it.gmo it.po

3, 佈署mo檔
這裡的mo檔, 其實就是gmo檔, 二者沒有任何的不同. 所以若是直接用msgfmt命令就可以直接產生mo檔.

3.1, mo檔該放在何處?
mo檔必需要放在程式找得到的地方, 這樣才可以做字串的替換. Anjuta預設的mo檔都會放在"/usr/local/share/locale",
這可以在config.h中找到, 所以我們只要依照這個路徑把mo檔按照語系放好, 程式就會找到.如下
/usr/local/share/locale/
`-- zh_TW.UTF-8
`-- LC_MESSAGES
`-- i18n_test.mo

3.2, 改變預設的mo檔存放路徑
我們可以直接改config.h, 把PACKAGE_LOCALE_DIR這個參數改成自己想要的路徑就可以了.
#define PACKAGE_LOCALE_DIR "/home/zylix/Projects/i18n_test/locale"
但是若是project被clean build之後, 會造成這個參數被改回預設值, 這樣每次都要改完再重build是很麻煩的一件事
我們可以修改configure.in來改變預設路徑.

dnl Set PACKAGE_LOCALE_DIR in config.h.
if test "x${prefix}" = "xNONE"; then
AC_DEFINE_UNQUOTED(PACKAGE_LOCALE_DIR, "${ac_default_prefix}/${DATADIRNAME}/locale", [Package local directory])
else
AC_DEFINE_UNQUOTED(PACKAGE_LOCALE_DIR, "${prefix}/${DATADIRNAME}/locale", [Package local directory])
fi

改成

dnl Set PACKAGE_LOCALE_DIR in config.h.
if test "x${prefix}" = "xNONE"; then
AC_DEFINE_UNQUOTED(PACKAGE_LOCALE_DIR, "/home/zylix/Projects/i18n_test/locale", [Package local directory])
else
AC_DEFINE_UNQUOTED(PACKAGE_LOCALE_DIR, "/home/zylix/Projects/i18n_test/locale", [Package local directory])
fi


然後再執行一次autogen, 就會發現config.h裡的PACKAGE_LOCALE_DIR就是我們想要的路徑了.

4, 如何測試.
當mo檔佈署好了, 最後就是要測試. 在Linux下改變語言, 我們可以用LANG這個環境變數.
以轉換中文來說
[aaa@bbb po]export LANG=zh_TW.UTF-8
再執行你的程式, 看看中文是不是有顯示出來.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值