Skip to content

Instantly share code, notes, and snippets.

@ozero

ozero/translate.py

Forked from tomoconnor/translate.py
Last active Aug 29, 2019
Embed
What would you like to do?
Machine Translation of .po files with Google Translate
#### Requires ####
# goslate==1.3.0
# polib==1.0.5
#### / ####
import os, sys
import goslate
import argparse
import polib
import time
import datetime
import pprint
import shutil
# cli example:
# python translate.py --inpath=src/a0.po --outpath=ext/a0.po --lang=ja --whoami=myname@gmail.com
# Designed to don't break original po file (include comments etc)
parser = argparse.ArgumentParser(description="Machine Translation of Django's PO Files")
parser.add_argument('--inpath', help="Path to the INPUT po file", required=True)
parser.add_argument('--outpath', help="Path to the OUTPUT po file", required=True)
parser.add_argument('--lang', help="Destination language ISO-3166-2alpha code", required=True)
parser.add_argument('--whoami', help="Your email address", default="you@example.com")
args = parser.parse_args()
gs = goslate.Goslate()
input_file = polib.pofile(args.inpath)
time.sleep(1)
# build translation
c=0
translated = []
for entry in input_file:
##pprint.pprint ([entry.msgid])
translated.append( [
str(entry.msgid),
str(gs.translate(entry.msgid, args.lang))
])
time.sleep(1)
c += 1
# make output
if os.path.exists(args.outpath):
os.remove(args.outpath)
# replace output
fr = open(args.inpath,'r')
fw = open(args.outpath,'w')
r = 0
is_body = 0
for row in fr:
inline = row.strip()
print (inline)
if inline == '':
is_body += 1
if inline == 'msgstr ""':
if is_body == 0:
# write other lines
fw.write(inline + "\n")
else:
# write translation
fw.write('msgstr "' + translated[r][1].replace('"', '\\"') + '"' + "\n")
r += 1
else:
# write other lines
fw.write(inline + "\n")
fr.close()
fw.close()
print ("Done. Translated %s messages" % c)
@ozero

This comment has been minimized.

Copy link
Owner Author

@ozero ozero commented Aug 29, 2019

  • Update syntax for Python 3
  • Designed to don't break original po file (include comments etc)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.