Difference between revisions of "Translations-tw"

From AMule Project FAQ
Jump to: navigation, search
m
 
(One intermediate revision by the same user not shown)
Line 16: Line 16:
 
就只欠協助翻譯、修正與維護的熱心人士而已了。
 
就只欠協助翻譯、修正與維護的熱心人士而已了。
  
作翻譯不必懂怎麼寫程式碼,您只需有可將英語翻為其他語言的能力即可。
+
作翻譯不必懂怎麼寫程式碼,您只須有可將英語翻為其他語言的能力即可。
  
  
 
== 怎麼做? ==
 
== 怎麼做? ==
  
aMule 開發團隊會定期更新[http://amule.uw.hu/translations/ 各國語言的翻譯資訊],從該頁就可看到各種語言的翻譯情形。
+
aMule 開發團隊會定期更新[http://amule.sourceforge.net/translations/ 各國語言的翻譯資訊],從該頁就可看到各種語言的翻譯情形。
  
 
請找到要想要翻譯的語言,下載 .po 文字檔並編輯它。 (就算該語言已經全翻譯完了,您仍可以檢查修正之)
 
請找到要想要翻譯的語言,下載 .po 文字檔並編輯它。 (就算該語言已經全翻譯完了,您仍可以檢查修正之)
Line 36: Line 36:
 
<font color=#ff0000>在翻譯時要注意字串中的 &、%i、\n 等特殊字元,且首尾若有空格時應予以保留</font>
 
<font color=#ff0000>在翻譯時要注意字串中的 &、%i、\n 等特殊字元,且首尾若有空格時應予以保留</font>
  
'''請參考 [[format specifiers]] 以瞭解哪些字元不應該被修改掉。'''
+
'''請參考「[[format specifiers-tw|特殊字元]]」以瞭解哪些字元不應該被修改掉。'''
  
  
===POEdit===
+
=== POEdit ===
 
使用 PoEdit 開啟 .po 檔後,可看到這樣的畫面:
 
使用 PoEdit 開啟 .po 檔後,可看到這樣的畫面:
  
Line 59: Line 59:
  
  
===KBabel===
+
=== KBabel ===
 
因程式的使用介面可以自行調整,此處以預設介面為準。
 
因程式的使用介面可以自行調整,此處以預設介面為準。
  
Line 81: Line 81:
  
  
== 如何繼續處理未完成的舊翻譯檔 ==
+
== 繼續處理未完成的舊翻譯檔 ==
  
 
舊版的翻譯經過處理後,可以整合套用到新版檔案上,而不必重頭翻譯起
 
舊版的翻譯經過處理後,可以整合套用到新版檔案上,而不必重頭翻譯起
Line 93: Line 93:
 
*輸入指令:  
 
*輸入指令:  
  
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>
+
  msgmerge --no-fuzzy-matching -o <font color="green">new_fr.po</font> <font color="blue">fr.po</font> <font color="red">fr_strings.po</font>
  
 
:就可得到將舊版整合到新版的翻譯檔 ''<font color="green">new_fr.po</font>''
 
:就可得到將舊版整合到新版的翻譯檔 ''<font color="green">new_fr.po</font>''
Line 102: Line 102:
  
  
== 測試你的翻譯 ==
+
== 測試翻譯 ==
 
請使用以下指令來測試翻譯是否有誤:
 
請使用以下指令來測試翻譯是否有誤:
  
Line 126: Line 126:
  
 
例如:原始字串從 "Delete server?" 改成 "Do you really want to remove the server?" 後,翻譯也許符合,但仍可以翻譯得更切合原始字串。甚至有時原始字串會更改成意思差更多,導致翻譯完全配合不上,這時就必須修正翻譯。
 
例如:原始字串從 "Delete server?" 改成 "Do you really want to remove the server?" 後,翻譯也許符合,但仍可以翻譯得更切合原始字串。甚至有時原始字串會更改成意思差更多,導致翻譯完全配合不上,這時就必須修正翻譯。
 +
  
 
=== 測試時的問題協助 ===
 
=== 測試時的問題協助 ===
Line 141: Line 142:
 
* ''`msgid' and `msgstr' entries do not both end with '\n'''
 
* ''`msgid' and `msgstr' entries do not both end with '\n'''
 
** '\n' 為換行用的特殊字元。翻譯的行數必須與原始字串行數相同,請檢查修正至相同行數。
 
** '\n' 為換行用的特殊字元。翻譯的行數必須與原始字串行數相同,請檢查修正至相同行數。
 +
  
 
=== 複數形式 ===
 
=== 複數形式 ===
Line 161: Line 163:
  
 
而每一個 ''msgstr'' 按語言設定而不同,在德語中 ''msgstr[0]'' 用於單數、''msgstr[1]'' 用於複數。大多數語言也是如此運用。
 
而每一個 ''msgstr'' 按語言設定而不同,在德語中 ''msgstr[0]'' 用於單數、''msgstr[1]'' 用於複數。大多數語言也是如此運用。
 +
  
 
=== 我用的編輯程式無法直接跳行 ===
 
=== 我用的編輯程式無法直接跳行 ===

Latest revision as of 10:30, 15 April 2009

English | 简体中文 | 正體中文 | Deutsch | Español | Português | Korean | Russian

簡介

aMule 支援 Unicode,且在設計時就已考慮到各種語言顯示問題,因此可以直接顯示世界各國的語言文字。

就只欠協助翻譯、修正與維護的熱心人士而已了。

作翻譯不必懂怎麼寫程式碼,您只須有可將英語翻為其他語言的能力即可。


怎麼做?

aMule 開發團隊會定期更新各國語言的翻譯資訊,從該頁就可看到各種語言的翻譯情形。

請找到要想要翻譯的語言,下載 .po 文字檔並編輯它。 (就算該語言已經全翻譯完了,您仍可以檢查修正之)

如果您想翻譯的語言未列在頁中,請到討論區發文告知,管理員會幫您設定好新語言檔。

注意:想要修改某個語言的翻譯前,也請到討論區查看是否已有人在著手翻譯中以及目前進度,以免進度重複造成時間精力的浪費


您可以直接使用文字編輯程式翻譯編修下載回來的 .po 檔,但也有更方便的翻譯工具程式,像是 PoEditKBabel 或是 gTranslator

使用這些程式時,別忘記在偏好設定中設定您的姓名、email、編碼、翻譯版本等參數。

在翻譯時要注意字串中的 &、%i、\n 等特殊字元,且首尾若有空格時應予以保留

請參考「特殊字元」以瞭解哪些字元不應該被修改掉。


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 fr_strings.po
就可得到將舊版整合到新版的翻譯檔 new_fr.po
(您也可以使用 KBabelPoEdit 內建的合併工具,詳細使用方法請自行參考各該程式內的說明)
  • 然後,也是用工具程式處理 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)