2011-05-18 19:55:12 -07:00
|
|
|
#!/usr/bin/env python
|
|
|
|
import json
|
|
|
|
import codecs
|
|
|
|
import polib
|
|
|
|
import glob
|
|
|
|
import re
|
|
|
|
|
2011-05-18 21:18:31 -07:00
|
|
|
from iniparse import INIConfig
|
|
|
|
|
2011-05-18 19:55:12 -07:00
|
|
|
from os import makedirs
|
|
|
|
from os.path import exists as pathexists, dirname
|
|
|
|
|
|
|
|
def getPOFiles():
|
|
|
|
pofiles = {}
|
|
|
|
|
|
|
|
files = glob.glob('*.po')
|
|
|
|
files.sort()
|
|
|
|
|
|
|
|
for f in files:
|
|
|
|
pofiles[f.split(".")[0]] = polib.pofile(f)
|
|
|
|
|
|
|
|
return pofiles
|
|
|
|
|
|
|
|
|
|
|
|
def pullMac(pFile):
|
|
|
|
result = {}
|
|
|
|
|
|
|
|
with codecs.open(pFile["file"], "r+b", "utf-8") as fp:
|
|
|
|
content = fp.read()
|
|
|
|
|
|
|
|
for (string, quoted) in pFile["strings"]:
|
|
|
|
if not quoted:
|
|
|
|
m = re.search('%s\s+=\s+"(.*)"\s?;' % string, content)
|
|
|
|
else:
|
|
|
|
m = re.search('"%s"\s+=\s+"(.*)"\s?;' % string, content)
|
|
|
|
|
|
|
|
if m:
|
|
|
|
result[string] = m.group(1)
|
|
|
|
|
|
|
|
return result
|
|
|
|
|
|
|
|
def pushMac(pFile, pofiles):
|
|
|
|
english = pullMac(pFile)
|
|
|
|
|
|
|
|
for lang, po in pofiles.iteritems():
|
|
|
|
path = pFile["pushpath"] % lang
|
|
|
|
|
|
|
|
if not pathexists(path):
|
|
|
|
makedirs(dirname(path))
|
|
|
|
|
|
|
|
with codecs.open(path, "w", "utf-8") as fp:
|
|
|
|
for (string, quoted) in pFile["strings"]:
|
|
|
|
poEntry = po.find(english[string])
|
|
|
|
|
|
|
|
if (poEntry and
|
|
|
|
not "fuzzy" in poEntry.flags and
|
|
|
|
poEntry.msgstr != ""):
|
|
|
|
translated = poEntry.msgstr
|
|
|
|
else:
|
|
|
|
translated = english[string]
|
|
|
|
|
|
|
|
if not quoted:
|
|
|
|
fp.write("%s = \"%s\";\n" % (string, translated))
|
|
|
|
else:
|
|
|
|
fp.write("\"%s\" = \"%s\";\n" % (string, translated))
|
|
|
|
|
|
|
|
|
|
|
|
def pullINI(pFile):
|
|
|
|
result = {}
|
|
|
|
|
2011-05-18 21:18:31 -07:00
|
|
|
with codecs.open(pFile["file"], "r", "utf-8") as fp:
|
|
|
|
ini = INIConfig(fp)
|
2011-05-18 19:55:12 -07:00
|
|
|
|
|
|
|
for (section, entry) in pFile["strings"]:
|
2011-05-18 21:18:31 -07:00
|
|
|
result["%s_%s" % (section, entry)] = ini[section][entry]
|
2011-05-18 19:55:12 -07:00
|
|
|
|
|
|
|
return result
|
|
|
|
|
|
|
|
|
|
|
|
def pushINI(pFile, pofiles):
|
2011-05-18 21:18:31 -07:00
|
|
|
with codecs.open(pFile["file"], "r", "utf-8") as fp:
|
|
|
|
ini = INIConfig(fp)
|
2011-05-18 19:55:12 -07:00
|
|
|
|
|
|
|
for (section, entry) in pFile["strings"]:
|
2011-05-18 21:18:31 -07:00
|
|
|
value = ini[section][entry]
|
2011-05-18 19:55:12 -07:00
|
|
|
|
|
|
|
for lang, po in pofiles.iteritems():
|
|
|
|
poEntry = po.find(value)
|
|
|
|
|
|
|
|
if (poEntry and
|
|
|
|
not "fuzzy" in poEntry.flags and
|
|
|
|
poEntry.msgstr != ""):
|
2011-05-18 21:18:31 -07:00
|
|
|
ini[section]["%s[%s]" % (entry, lang)] = poEntry.msgstr
|
2011-05-18 19:55:12 -07:00
|
|
|
|
2011-05-18 21:18:31 -07:00
|
|
|
with codecs.open(pFile["file"], "w+b", "utf-8") as wFp:
|
|
|
|
wFp.write(unicode(ini))
|
2011-05-18 19:55:12 -07:00
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
import sys
|
|
|
|
|
|
|
|
if (len(sys.argv) != 2 or
|
|
|
|
not sys.argv[1].lower() in ('pull', 'push', 'filelist')):
|
|
|
|
print "Usage: %s <push|pull|filelist>" % sys.argv[0]
|
|
|
|
exit(1)
|
|
|
|
|
|
|
|
with open("custom/files.js", "r+b") as fp:
|
|
|
|
files = json.load(fp, "utf-8")
|
|
|
|
|
|
|
|
if (sys.argv[1].lower() == 'pull'):
|
|
|
|
for pFile in files:
|
|
|
|
print "Reading %s:%s" % (pFile["type"], pFile["file"])
|
|
|
|
|
|
|
|
strings = {}
|
|
|
|
if pFile["type"] == "ini":
|
|
|
|
strings = pullINI(pFile)
|
|
|
|
elif pFile["type"] == "mac":
|
|
|
|
strings = pullMac(pFile)
|
|
|
|
|
|
|
|
if strings:
|
|
|
|
with codecs.open("custom/%s" % pFile["output"], "w", "utf-8") as sFp:
|
|
|
|
sFp.write("%s%s%s" % ("_(\"", "\")\n_(\"".join(strings.values()), "\")\n"))
|
|
|
|
|
|
|
|
elif (sys.argv[1].lower() == 'push'):
|
|
|
|
pofiles = getPOFiles()
|
|
|
|
|
|
|
|
for pFile in files:
|
|
|
|
if not pFile["push"]:
|
|
|
|
continue
|
|
|
|
|
|
|
|
if pFile["type"] == "ini":
|
|
|
|
pushINI(pFile, pofiles)
|
|
|
|
elif pFile['type'] == "mac":
|
|
|
|
pushMac(pFile, pofiles)
|
|
|
|
|
|
|
|
|
|
|
|
elif (sys.argv[1].lower() == "filelist"):
|
|
|
|
for pFile in files:
|
|
|
|
print "po/custom/%s" % pFile["output"]
|
|
|
|
|
|
|
|
else:
|
|
|
|
print "Unknown command \"%s\"" % sys.argv[1]
|
|
|
|
exit(1)
|