On Mon, 11 Sep 2000, allen wrote:
嗨!大家好:
不知各位在翻譯時,有沒有遇到以下問題 大家應該都知道有些中文字會有脫逸字元(\)的問題 在我使用 bg5cc filename.pox filename.po 轉換檔案後,再使用 msgfmt -v -o /dev/null filename.po 就會出現很多出現重大錯誤的訊息 檢查後,就發現全部的錯誤都是在有脫逸字元的地方 bg5cc 似乎會把脫逸字元(\)轉成(\\)
這就是bg5cc 的功能阿 因為在C與多數語言的定義中, ""會使得所連接的自原有特殊的作用 eg. "\n"為換行符號, "\t"為tab定位點, "\"為"" 偏偏有些中文字用到了""字元來組字.... complier 就錯亂了說, 所以要把中文字中的""變成"\" 然後在編譯的過程中"\"會被還原成正常的""
而 msgfmt 卻又把(\\)當成錯誤字元
其實問題不是在megfmt, 而是在bg5cc 🙁 bg5cc 的識別有點笨, 他只會找尋不是有效的""標記, 並增加一個""成為"\" eg. ""後面不是跟著"n","t","r",""...etc. 問題就來了, 當一個中文字含有這樣的符號時 eg. 珮n == [alt-175]\n bg5cc 便會將之變成 '珮\n' ([alt-175]\n), compiler 在將之還原成[alt-175]\n 但當您再做一次bg5cc 時, 他把 '珮\n' 又變成了 '珮\n' i.e. [alt-175]\\n 而編譯器會將之當作 [alt-175][換行] (第一個""來自"\", 將"\n"翻譯成換行字元) 這當然不是我們所預期的結果, 所以 msgfmt 才會回報錯誤
有人有遇到類似的問題嗎?
解決的方法 小虫 兄在cle-devel 上有提供過 (轉載於 http://i18n.linux.org.tw/howto.php3) 基本上就是在翻譯檔案前, 先用 sed 把 "\" 還原成 "", 指令如下 cat filename.po | sed 's/\\/\/g' > filename.pox 或是您可以使用 Plasma 兄所提供的 bg5cc.pl 來取代原本的bg5cc 便可以省掉還原的動作, 因為他的程式較聰明, 不會把 "\" 變成"\" 您也可以在前述網址找到這個script
Shyue
^_________^ Allen Huang lancelot@pchome.com.tw