Difference between revisions of "Translations-tw"
Line 12: | Line 12: | ||
== 簡介 == | == 簡介 == | ||
− | + | aMule 支援 Unicode,且在設計時就已考慮到各種語言顯示問題,因此可以直接顯示世界各國的語言文字。 | |
− | + | 就只欠協助翻譯、修正與維護的熱心人士而已了。 | |
− | + | 作翻譯不必懂怎麼寫程式碼,您只需有可將英語翻為其他語言的能力即可。 | |
− | + | ||
− | + | ||
== 怎麼做? == | == 怎麼做? == | ||
− | aMule | + | aMule 開發團隊會定期更新[http://amule.uw.hu/translations/ 各國語言的翻譯資訊],從該頁就可看到各種語言的翻譯情形。 |
− | + | 請找到要想要翻譯的語言,下載 .po 文字檔並編輯它。 (就算該語言已經全翻譯完了,您仍可以檢查修正之) | |
− | + | 如果您想翻譯的語言未列在頁中,請到[http://forum.amule.org/index.php?board=40.0 討論區]發文告知,管理員會幫您設定好新語言檔。 | |
+ | <font color="red">注意:想要修改某個語言的翻譯前,也請到[http://forum.amule.org/index.php?topic=13845.0 討論區]查看是否已有人在著手翻譯中以及目前進度,以免進度重複造成時間精力的浪費</font> | ||
− | |||
− | |||
− | |||
− | |||
− | + | 您可以直接使用文字編輯程式翻譯編修下載回來的 .po 檔,但也有更方便的翻譯工具程式,像是 [http://www.poedit.org PoEdit]、[http://i18n.kde.org/tools/kbabel/ KBabel] 或是 [http://gtranslator.sourceforge.net/ gTranslator]。 | |
− | + | 使用這些程式時,別忘記在'''偏好設定'''中設定您的姓名、email、編碼、翻譯版本等參數。 | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | <font color=#ff0000> | + | <font color=#ff0000>在翻譯時要注意字串中的 &、%i、\n 等特殊字元,且首尾若有空格時應予以保留</font> |
'''請參考 [[format specifiers]] 以瞭解哪些字元不應該被修改掉。''' | '''請參考 [[format specifiers]] 以瞭解哪些字元不應該被修改掉。''' | ||
− | + | ===POEdit=== | |
+ | 使用 PoEdit 開啟 .po 檔後,可看到這樣的畫面: | ||
− | + | http://img516.imageshack.us/img516/481/wikipoedit1ly7.png | |
− | |||
− | + | 上方左側是字串清單,右側為翻譯後的字串。藍色為尚未翻譯字串、黃色為待修正字串、白色為已翻譯字串、帶星號者為本次翻譯字串、帶對話者為該字串含有註解。 | |
− | + | 最底下狀態列則為統計數據。 | |
− | + | 選定某個字串後,下方會出現其內容: | |
− | |||
− | + | http://img253.imageshack.us/img253/5157/wikipoedit2ov3.png | |
− | |||
− | + | 左側上欄為原始字串欄位,下欄為待輸入翻譯字串的欄位。圖中顯示的是有單數複數的特殊狀況,您可以依狀況輸入不同的文字。 | |
− | |||
+ | ===KBabel=== | ||
+ | 因程式的使用介面可以自行調整,此處以預設介面為準。 | ||
− | + | http://img512.imageshack.us/img512/3183/wikikbabel1my7.png | |
− | |||
− | + | 程式執行視窗左邊有:字串清單、原始字串欄位、待輸入翻譯字串的欄位。右邊則是各種資訊與統計數據。 | |
− | |||
− | + | http://img329.imageshack.us/img329/607/wikikbabel2fz0.png | |
− | |||
− | + | 點下工具列中的 ''Next Fuzzy or Untranslated'' 按鈕 KBabel 就會自動跳到下一個需要翻譯或修正的字串。 | |
− | |||
− | + | http://img329.imageshack.us/img329/9992/wikikbabel3uw7.png | |
− | |||
− | |||
− | + | 左欄上方是原始的字串,您只需要在左下角輸入翻譯的字串即可 | |
− | |||
− | + | == 如何繼續處理未完成的舊翻譯檔 == | |
− | + | 舊版的翻譯經過處理後,可以整合套用到新版檔案上,而不必重頭翻譯起 | |
− | + | 例如,您想要翻譯法語版: | |
− | + | *手上有翻譯到一半的舊版 ''<font color="blue">fr.po</font>''。 | |
− | + | ||
− | + | ||
− | + | *從[http://amule.uw.hu/translations/ 翻譯公佈區]取得新的 ''fr.po'' 並另外儲存 (假設存為 ''<font color="red">fr_string.po</font>'')。 | |
− | + | *輸入指令: | |
− | + | msgmerge --no-fuzzy-matching -o <font color="green">new_fr.po</font> <font color="blue">fr.po</font> <font color="red">source_strings.po</font> | |
− | + | :就可得到將舊版整合到新版的翻譯檔 ''<font color="green">new_fr.po</font>'' | |
− | + | ||
− | + | ||
− | + | :(您也可以使用 [http://i18n.kde.org/tools/kbabel KBabel] 或 [http://poedit.sourceforge.net PoEdit] 內建的合併工具,詳細使用方法請自行參考各該程式內的說明) | |
− | + | * 然後,也是用工具程式處理 ''new_fr.po'',翻譯未完成的部份。 | |
− | |||
− | + | == 測試你的翻譯 == | |
− | + | 請使用以下指令來測試翻譯是否有誤: | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | == | + | |
− | + | ||
− | + | ||
− | + | msgfmt -c --statistic ''language code''.po | |
− | + | 結果範例: | |
+ | $ msgfmt -c --statistics zh_TW.po | ||
+ | 1428 translated messages, 58 fuzzy translations, 32 untranslated messages. | ||
− | + | 如有出現無法理解的錯誤或問題,歡迎到[http://forum.amule.org/index.php?board=40.0 討論區]尋求協助。 | |
− | |||
− | |||
− | + | == 翻譯完成 == | |
+ | 請在[http://forum.amule.org/index.php?topic=13845.0 討論區]下各該語言的討論串發文,並以附件方式上傳完成翻譯或修改的 .po 檔。 | ||
− | + | 如果沒有該語言的討論串,請在[http://forum.amule.org/index.php?board=40.0 此頁]下自行建立新討論串。 | |
− | |||
− | + | == 常見問題 == | |
+ | === 模糊字串 === | ||
+ | 當程式使用的原始字串變更後,相對的翻譯就會被標為模糊翻譯,表示該翻譯必須再經檢查是否有問題。 | ||
− | + | 例如:原始字串從 "Delete server?" 改成 "Do you really want to remove the server?" 後,翻譯也許符合,但仍可以翻譯得更切合原始字串。甚至有時原始字串會更改成意思差更多,導致翻譯完全配合不上,這時就必須修正翻譯。 | |
− | + | === 測試時的問題協助 === | |
+ | 如果在測試時發生錯誤,請參考相關解決方法: | ||
+ | * ''end-of-line within string'' | ||
+ | ** 字串以 " (引號) 開頭,但沒有用另一個 " 結束。請到錯誤訊息顯示的行數,在行尾加入引號。 | ||
− | + | * ''format specifications in 'msgid' and 'msgstr' for argument 1 are not the same'' | |
+ | ** 有些字串中會有 %s %d 等特殊字元,用來顯示一些特殊變數。請到錯誤訊息顯示的行數,比對原始字串與翻譯,查看是否將特殊字元修掉了。 | ||
− | + | * ''number of format specifications in 'msgid' and 'msgstr' does not match'' | |
+ | ** 與上一個錯誤類似,您可能修掉了某幾個特殊字元導致數目不符。請到錯誤訊息顯示的行數,比對原始字串與翻譯,查看是否將特殊字元修掉了。 | ||
− | + | * ''`msgid' and `msgstr' entries do not both end with '\n''' | |
+ | ** '\n' 為換行用的特殊字元。翻譯的行數必須與原始字串行數相同,請檢查修正至相同行數。 | ||
− | + | === 複數形式 === | |
+ | 英語、德語等許多語言的單位、數字在單數、複數時會有所不同,這時就必須區分開來翻譯。 | ||
− | + | 首先要在 .po 檔頭加入設定,以德語為例: | |
− | + | "Plural-Forms: nplurals=2; plural=n != 1;\n" | |
− | + | 有複數型態的字串 (仍是以德語為例): | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | #: src/kademlia/routing/RoutingZone.cpp:141 | |
+ | #, c-format | ||
+ | msgid "Read %u Kad contact" | ||
+ | msgid_plural "Read %u Kad contacts" | ||
+ | msgstr[0] "Lese %u Kad-Kontakt" | ||
+ | msgstr[1] "Lese %u Kad-Kontakte" | ||
− | + | 第一個 ''msgid'' 表示單數的字串,''msgid_plural'' 表示複數的字串。 | |
− | + | ||
− | + | ||
− | + | 而每一個 ''msgstr'' 按語言設定而不同,在德語中 ''msgstr[0]'' 用於單數、''msgstr[1]'' 用於複數。大多數語言也是如此運用。 | |
− | + | === 我用的編輯程式無法直接跳行 === | |
− | + | [http://forum.amule.org/index.php?topic=14699.msg77946#msg77946 kpeace1 撰寫了一個 script],可用來將行號轉為 msgid。 | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | #!/usr/bin/env python | |
+ | |||
+ | import sys | ||
+ | |||
+ | if (len(sys.argv) < 3): | ||
+ | print "usage:\t", sys.argv[0], "file_name ", "line#" | ||
+ | |||
+ | file_name = sys.argv[1] | ||
+ | line_number = int(sys.argv[2]) | ||
+ | |||
+ | po_file = open(file_name) | ||
+ | i = 0 | ||
+ | msgid = 0 | ||
+ | |||
+ | for line in po_file: | ||
+ | i = i + 1 | ||
+ | if (line[:5] == "msgid"): | ||
+ | msgid = msgid + 1 | ||
+ | |||
+ | if (line_number == i): | ||
+ | print "error in msgid no.", msgid-1 | ||
+ | sys.exit(0) | ||
---- | ---- | ||
− |
Revision as of 16:15, 9 January 2009
English | 简体中文 | 正體中文 | Deutsch | Español | Português | Korean | Russian
Contents
簡介
aMule 支援 Unicode,且在設計時就已考慮到各種語言顯示問題,因此可以直接顯示世界各國的語言文字。
就只欠協助翻譯、修正與維護的熱心人士而已了。
作翻譯不必懂怎麼寫程式碼,您只需有可將英語翻為其他語言的能力即可。
怎麼做?
aMule 開發團隊會定期更新各國語言的翻譯資訊,從該頁就可看到各種語言的翻譯情形。
請找到要想要翻譯的語言,下載 .po 文字檔並編輯它。 (就算該語言已經全翻譯完了,您仍可以檢查修正之)
如果您想翻譯的語言未列在頁中,請到討論區發文告知,管理員會幫您設定好新語言檔。
注意:想要修改某個語言的翻譯前,也請到討論區查看是否已有人在著手翻譯中以及目前進度,以免進度重複造成時間精力的浪費
您可以直接使用文字編輯程式翻譯編修下載回來的 .po 檔,但也有更方便的翻譯工具程式,像是 PoEdit、KBabel 或是 gTranslator。
使用這些程式時,別忘記在偏好設定中設定您的姓名、email、編碼、翻譯版本等參數。
在翻譯時要注意字串中的 &、%i、\n 等特殊字元,且首尾若有空格時應予以保留
請參考 format specifiers 以瞭解哪些字元不應該被修改掉。
POEdit
使用 PoEdit 開啟 .po 檔後,可看到這樣的畫面:
http://img516.imageshack.us/img516/481/wikipoedit1ly7.png
上方左側是字串清單,右側為翻譯後的字串。藍色為尚未翻譯字串、黃色為待修正字串、白色為已翻譯字串、帶星號者為本次翻譯字串、帶對話者為該字串含有註解。
最底下狀態列則為統計數據。
選定某個字串後,下方會出現其內容:
http://img253.imageshack.us/img253/5157/wikipoedit2ov3.png
左側上欄為原始字串欄位,下欄為待輸入翻譯字串的欄位。圖中顯示的是有單數複數的特殊狀況,您可以依狀況輸入不同的文字。
KBabel
因程式的使用介面可以自行調整,此處以預設介面為準。
http://img512.imageshack.us/img512/3183/wikikbabel1my7.png
程式執行視窗左邊有:字串清單、原始字串欄位、待輸入翻譯字串的欄位。右邊則是各種資訊與統計數據。
http://img329.imageshack.us/img329/607/wikikbabel2fz0.png
點下工具列中的 Next Fuzzy or Untranslated 按鈕 KBabel 就會自動跳到下一個需要翻譯或修正的字串。
http://img329.imageshack.us/img329/9992/wikikbabel3uw7.png
左欄上方是原始的字串,您只需要在左下角輸入翻譯的字串即可
如何繼續處理未完成的舊翻譯檔
舊版的翻譯經過處理後,可以整合套用到新版檔案上,而不必重頭翻譯起
例如,您想要翻譯法語版:
- 手上有翻譯到一半的舊版 fr.po。
- 從翻譯公佈區取得新的 fr.po 並另外儲存 (假設存為 fr_string.po)。
- 輸入指令:
msgmerge --no-fuzzy-matching -o new_fr.po fr.po source_strings.po
- 就可得到將舊版整合到新版的翻譯檔 new_fr.po
- 然後,也是用工具程式處理 new_fr.po,翻譯未完成的部份。
測試你的翻譯
請使用以下指令來測試翻譯是否有誤:
msgfmt -c --statistic language code.po
結果範例:
$ msgfmt -c --statistics zh_TW.po 1428 translated messages, 58 fuzzy translations, 32 untranslated messages.
如有出現無法理解的錯誤或問題,歡迎到討論區尋求協助。
翻譯完成
請在討論區下各該語言的討論串發文,並以附件方式上傳完成翻譯或修改的 .po 檔。
如果沒有該語言的討論串,請在此頁下自行建立新討論串。
常見問題
模糊字串
當程式使用的原始字串變更後,相對的翻譯就會被標為模糊翻譯,表示該翻譯必須再經檢查是否有問題。
例如:原始字串從 "Delete server?" 改成 "Do you really want to remove the server?" 後,翻譯也許符合,但仍可以翻譯得更切合原始字串。甚至有時原始字串會更改成意思差更多,導致翻譯完全配合不上,這時就必須修正翻譯。
測試時的問題協助
如果在測試時發生錯誤,請參考相關解決方法:
- end-of-line within string
- 字串以 " (引號) 開頭,但沒有用另一個 " 結束。請到錯誤訊息顯示的行數,在行尾加入引號。
- format specifications in 'msgid' and 'msgstr' for argument 1 are not the same
- 有些字串中會有 %s %d 等特殊字元,用來顯示一些特殊變數。請到錯誤訊息顯示的行數,比對原始字串與翻譯,查看是否將特殊字元修掉了。
- number of format specifications in 'msgid' and 'msgstr' does not match
- 與上一個錯誤類似,您可能修掉了某幾個特殊字元導致數目不符。請到錯誤訊息顯示的行數,比對原始字串與翻譯,查看是否將特殊字元修掉了。
- `msgid' and `msgstr' entries do not both end with '\n'
- '\n' 為換行用的特殊字元。翻譯的行數必須與原始字串行數相同,請檢查修正至相同行數。
複數形式
英語、德語等許多語言的單位、數字在單數、複數時會有所不同,這時就必須區分開來翻譯。
首先要在 .po 檔頭加入設定,以德語為例:
"Plural-Forms: nplurals=2; plural=n != 1;\n"
有複數型態的字串 (仍是以德語為例):
#: src/kademlia/routing/RoutingZone.cpp:141 #, c-format msgid "Read %u Kad contact" msgid_plural "Read %u Kad contacts" msgstr[0] "Lese %u Kad-Kontakt" msgstr[1] "Lese %u Kad-Kontakte"
第一個 msgid 表示單數的字串,msgid_plural 表示複數的字串。
而每一個 msgstr 按語言設定而不同,在德語中 msgstr[0] 用於單數、msgstr[1] 用於複數。大多數語言也是如此運用。
我用的編輯程式無法直接跳行
kpeace1 撰寫了一個 script,可用來將行號轉為 msgid。
#!/usr/bin/env python import sys if (len(sys.argv) < 3): print "usage:\t", sys.argv[0], "file_name ", "line#" file_name = sys.argv[1] line_number = int(sys.argv[2]) po_file = open(file_name) i = 0 msgid = 0 for line in po_file: i = i + 1 if (line[:5] == "msgid"): msgid = msgid + 1 if (line_number == i): print "error in msgid no.", msgid-1 sys.exit(0)