Skip to content

Instantly share code, notes, and snippets.

@ozero
Forked from tomoconnor/translate.py
Last active August 29, 2019 10:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ozero/59e2483d02a9c7918a8a076ced40d463 to your computer and use it in GitHub Desktop.
Save ozero/59e2483d02a9c7918a8a076ced40d463 to your computer and use it in GitHub Desktop.
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
Copy link
Author

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