#! /usr/bin/env python # -*- 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 import subprocess log = logging.getLogger(__name__) # from version import __version__ USAGE = """usage: %prog sourcePo destPo sourceLanguage destLanguage Example: mypo.po output.po zh-TW zh-CN""" def unescape(s): p = htmllib.HTMLParser(None) p.save_bgn() p.feed(s) return p.save_end() def translate(text, sourceLanguage="fr", destLanguage="en"): """Translate a text @param text: text to translate @param sourceLanguage: the language original text is in (default: fr) @param destLanguage: language to translate to (default: en) """ log.debug('Translate %s from %s to %s', text, sourceLanguage, destLanguage) return unescape(subprocess.check_output(['/home/lilian/bin/translate', '{%s=%s}' % (sourceLanguage, destLanguage), text])) def main(): import polib logging.basicConfig(level=logging.INFO, format="%(levelname)s - %(message)s") parser = optparse.OptionParser(usage=USAGE) (_, args) = parser.parse_args() # if len(args)<1: # parser.print_usage() # return sourceFilePath = str(args[0]) if len(args)>0 else "Usual_Functions.fr.pot" destFilePath = str(args[1]) if len(args)>1 else sourceFilePath.replace(".fr.", ".en.") sourceLang = str(args[2]) if len(args)>2 else "fr" destLang = str(args[3]) if len(args)>3 else "en" log.info('Translate %s (in %s) to %s (in %s)', sourceFilePath, sourceLang, destFilePath, destLang) po = polib.pofile(sourceFilePath) for entry in po: if not entry.msgstr.strip(): continue translated = translate(entry.msgstr, sourceLang, destLang) if not translated: print "Fail" continue log.info('Translate %r to %r', entry.msgstr, translated) entry.msgstr = translated po.metadata['Translated-By'] = 'po_translator' po.save(destFilePath) log.info('Done') if __name__ == '__main__': main()