其實問題不是在megfmt, 而是在bg5cc 🙁
bg5cc 的識別有點笨, 他只會找尋不是有效的"\"標記, 並增加一個"\"成為"\\"
eg. "\"後面不是跟著"n","t","r","\"...etc.
sorry, 記錯了
應該是屬於中文字中的"\"字元
就是前面是 ASCII code 160-247 的字元
問題就來了, 當一個中文字含有這樣的符號時
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