最近在更新我的網站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 自動化翻譯工具