2007-12-10

社會組科技須知 - 軟體本地化: gettext (1)

我蠻確定你沒有聽過gettext這個名稱。那它到底是什麼呢,而為什麼語言方面的人要知道或甚至了解它?

首先,如果你打算自己寫程式,你可能要花一點時間自己看gettext相關的資料。我沒看過華語的手冊,但是你應該有習慣這一件事。不過,如果你是筆譯或另外語言相關的人,我想在這裡解釋你關於gettext可能要知道的部分。

Gettext是一個library,一種功能庫。它不是“某一種”功能庫,它的用途是軟體國際化跟本地化(i18n/l10n)。所以,gettext能夠幫助寫程式的人做出多一些語言的版本。

它也會幫助翻譯人員,因為它會把軟體的語言檔提供在一個特殊的格式。那種檔案叫"po"或"pot"檔。"pot"表示它是范本檔,這兩個的區別跟一般文書處理的檔案一樣。

這些檔案對翻譯那麼有用是因為它們非常適合處理各種各樣的語言,因為它們可以包含許多跟翻譯過程有關的資訊,因為它們專用的編輯軟體保證連電腦使用方面較弱的人(社會組……)不會“破掉”東西。那我們看一下每一點。

能夠處理各種各樣的語言:你不只能選你要用什麼編碼,你也可以設定你的目標語言使用幾種(以數量定的)復數。華語沒有復數,但是英語有一種,俄語有兩種,而一些語言甚至有三種復數。

Gettext的手冊也強調軟體輸出詞句的準備,說明怎樣的string才比較適合順利地翻成其它語言。這些是軟體設計的人員或“語言顧問”需要注意的。沒有做到的話,可能沒有辦法翻到一些語言或至少會遇到困難。

可以包含許多跟翻譯過程有關的資訊:po檔開頭已經提供不少資訊,包含翻譯人員相關資訊,像名字,信箱等。Open Source Software在華語雖然被稱呼“自由軟體”,但是它還是會尊敬每一個人的貢獻,所以也會記錄誰有翻哪一個部分。

不過,更有趣的是檔案內容。我先“偷”一下手冊相關的部分

# translator-comments
#. extracted-comments
#: reference...
#, flag...
msgctxt context
msgid untranslated-string
msgid_plural untranslated-string-plural
msgstr translated-string
msgstr[0] translated-string-case-0
...
msgstr[N] translated-string-case-n

一個記錄可以包含這些部分。那我們看一下一個一個有什麼作用:

# 這樣開始的行包含翻譯的意見或說明。

#. 這裡有設計軟體的人在程式碼或在這個檔案留下給翻譯的一些建議或說明。

#: 在這裡,軟體會記錄這一句從哪一個(哪一些)檔案的哪一(些)行來,因為翻完後也要把結果再放回去。人一般看不到這一行的內容,軟體才用得到。

#, 狀態。唯一跟翻譯有關(而翻譯可以改)的狀態是"fuzzy",模糊。如果有人覺得原文跟結果不太相當(因為原文有變,翻譯人不完全了解原文的意思等),他可以把這個記錄的狀態改成“模糊”,所以其他人會知道哪裡還要再看。

msgctxt 如果源語言為了表示不同意思使用同樣的詞,同樣的表現方式,我們可以有幾個同樣內容的msgid,但是經過msgctxt的說明告訴翻譯人員這一句要用在什麼環境,在什麼情況下,所以在目標語言可以選相當而不同的版本。

msgid 這裡終於有源語言的詞句。

msgid_plural 如果也想顯示源語言的復數格式,就會放到這裡。

msgstr 翻出來的,目標語言的版本會在這裡。

msgstr[0] 如果目標語言支援或需要復數,這個復數版本會在這裡。如果一個語言有幾種復數,我們另外也可以看到其它msgstr[n]的行。不過,因為華語沒有復數,我們一般用不到。

現在會怕,對不對?好復雜…… 別怕!不要忘記:專用的編輯軟體保證連電腦使用方面較弱的人(社會組……)不會“破掉”東西!人平常看不到每一行,專用的編輯軟體會處理,會給翻譯人員他們需要的,而不會讓他們弄壞東西。

例如,翻譯雖然(必須)看到源語言的詞句,但是完全沒有辦法改。可以改的只是目標語言的部分。這裡你不可能不小心刪掉源語言的句子,放心!談到亂改,你唯一能夠“亂改”的地方是目標語言,但是因為源語言一直還在,每個人能發現有問題,而能把狀態改成“fuzzy”,所以下一個懂目標語言的人知道他還要看哪裡。

你也不用擔心沒有(不會)翻完。專用的編輯軟體會馬上知道這個檔案包含多少個記錄,其中多少個已經翻好,多少個比較模糊等。所以,如果你想幫忙做一個軟體的本地化,但是沒有很多空或部分不太熟,你也可以翻你有辦法翻的部分,然後把檔案寄回去,讓下一個人繼續翻。(這裡有好一點的方法,改天會談。)

今天我先想談理論。我希望你會大概了解gettext可以為你(翻譯)做什麼。如果你真想了解,你就可能要用po檔做本地化。而如果你之前有做過其它非應用gettext軟體(Firefox擴充套件等)的本地化,你也會了解gettext對軟體國際化與本地化提供多大的貢獻。

gettext (2)的文章我會介紹專用的軟體,讓你了解什麼是“方便”……

No comments: