最近在更新我的網站Now.in,最麻煩的一項工作就是國際化,通常我都是先以英文寫網頁,接著用TurboGears2的i18n功能將字串訊息取出,而我的GUI程式的i18n流程也差不多,都是先寫英文,翻成繁體中文,其中一個最腦人的過程,就是把翻好的繁體中文po檔裡的字串剪下貼上到google翻譯將它變成簡體中文再貼到簡體中文的po檔裡,這些工作都是重覆性極高的機械性動作,在一開始句子還少時做還可以,當字詞越來越多,這就變成一件痛苦的工作,既然是高重覆性的工作,為什麼需要人力來做呢? 於是我就寫了一個小程式,可以自動把po檔的內容抓出來丟到google翻譯去,把結果寫到另一個po檔中
# -*- coding: utf8 -*- ''' Created on 2010/4/27 @author: Victor-mortal ''' import os import sys import urllib import json import logging import optparse import codecs import htmllib log = logging.getLogger(__name__) def unescape(s): p = htmllib.HTMLParser(None) p.save_bgn() p.feed(s) return p.save_end() def translate(text, sourceLanguage, destLanguage): """Translate a text @param text: text to translate @param sourceLanguage: the language original text is in @param destLanguage: language to translate to """ log.info('Translate %s from %s to %s', text, sourceLanguage, destLanguage) query = dict(v='1.0', q=text.encode('utf8'), langpair='%s|%s' % (sourceLanguage, destLanguage)) file = urllib.urlopen( 'http://ajax.googleapis.com/ajax/services/language/translate', data=urllib.urlencode(query) ) result = file.read() file.close() jsonResult = json.loads(result) if not jsonResult['responseData']: return None return unescape(jsonResult['responseData']['translatedText']) def main(): logging.basicConfig(level=logging.INFO) parser = optparse.OptionParser( usage="usage: %prog sourcePoFile destPoFile sourceLanguage destLanguage" ) (_, args) = parser.parse_args() sourceFilePath = args[0] destFilePath = args[1] sourceLang = args[2] destLang = args[3] log.info('Translate %s (in %s) to %s (in %s)', sourceFilePath, sourceLang, destFilePath, destLang) result = [] sourceFile = codecs.open(sourceFilePath, 'rt', encoding='utf8') for line in sourceFile.readlines(): if line.startswith('msgstr'): _, msg = line.split(' ', 1) msg = msg.strip() msg = msg[1:-1] translatedMsg = translate(msg, sourceLang, destLang) if not translatedMsg: translatedMsg = msg result.append(('msgstr "%s"\n' % translatedMsg)) else: result.append(line) sourceFile.close() destFile = codecs.open(destFilePath, 'wt', encoding='utf8') destFile.writelines(result) destFile.close() if __name__ == '__main__': main()
使用方法很簡單
python po_translate.py 來源po檔 目的po檔 來源語言 目的語言
而語言的代碼,在Google translate的API文件中有寫,事實上它能做的不只有繁簡轉換,要翻成其它語言也可以,只是如果你能接受那品質的話


我是用 Django 的 i18n, 我也有想到要把這個程序自動化,還好有找到您這篇文章,省了很多時間,感謝分享
幫忙補充一下,語言代碼
python po_translate.py a.po b.po zh-tw zh-cn
請問怎樣在wordpress中使用這段代碼?我只想設置簡體轉繁體,請問代碼加在哪個位置?請幫助,謝謝。
Pingback: 蕃薯爸的【不上班事業集團】 | 網路 創業 兼職 賺錢 » Po translate 自動化翻譯工具