Move to Crowdin platform

This commit is contained in:
thgh 2013-11-21 19:44:45 +01:00
parent ae74568620
commit e3475b1f91
2 changed files with 72 additions and 75 deletions

View File

@ -36,20 +36,20 @@ def set_language(x):
languages = { languages = {
'':_('Default'), '':_('Default'),
'br':_('Brasilian'), 'pt-BR':_('Brasilian'),
'cs':_('Czech'), 'cs-CZ':_('Czech'),
'de':_('German'), 'de-DE':_('German'),
'eo':_('Esperanto'), 'eo-UY':_('Esperanto'),
'en':_('English'), 'en-UK':_('English'),
'es':_('Spanish'), 'es-ES':_('Spanish'),
'fr':_('French'), 'fr-FR':_('French'),
'it':_('Italian'), 'it-IT':_('Italian'),
'ja':_('Japanese'), 'ja-JP':_('Japanese'),
'lv':_('Latvian'), 'lv-LV':_('Latvian'),
'nl':_('Dutch'), 'nl-NL':_('Dutch'),
'ru':_('Russian'), 'ru-RU':_('Russian'),
'sl':_('Slovenian'), 'sl-SI':_('Slovenian'),
'ta':_('Tamil'), 'ta-IN':_('Tamil'),
'vi':_('Vietnamese'), 'vi-VN':_('Vietnamese'),
'zh':_('Chinese') 'zh-CN':_('Chinese')
} }

113
mki18n.py
View File

@ -1,66 +1,63 @@
#!/usr/bin/python #!/usr/bin/python
from StringIO import StringIO
import urllib2, os, zipfile, pycurl
import urllib2, os crowdin_identifier = 'electrum'
from lib.version import TRANSLATION_ID crowdin_file_name = 'electrum-client/messages.pot'
locale_file_name = 'locale/messages.pot'
#url = "https://en.bitcoin.it/w/index.php?title=Electrum/Translation&oldid=%d&action=raw"%TRANSLATION_ID if os.path.exists('build/crowdin_api_key.txt'):
url = "http://bitcoin.wikia.com/wiki/Electrum?oldid=%d&action=raw"%TRANSLATION_ID crowdin_api_key = open('build/crowdin_api_key.txt').read()
f = urllib2.urlopen(url)
lines = f.readlines() # Generate fresh translation template
dicts = {} if not os.path.exists('locale'):
message = None os.mkdir('locale')
num_m = 0
for line in lines: cmd = 'xgettext -s --no-wrap -f app.fil --output=locale/messages.pot'
l = line.strip() print 'Generate template'
if not l: continue os.system(cmd)
if l[0] != '*': continue
if l[0:2] == '**': # Push to Crowdin
n = l.find(':') print 'Push to Crowdin'
translation = l[n+1:] url = ('http://api.crowdin.net/api/project/' + crowdin_identifier + '/update-file?key=' + crowdin_api_key)
lang = l[2:n]
if dicts.get(lang) is None: dicts[lang] = {} c = pycurl.Curl()
dicts[lang][message] = translation.strip() c.setopt(c.URL, url)
c.setopt(c.POST, 1)
fields = [('files[' + crowdin_file_name + ']', (pycurl.FORM_FILE, locale_file_name))]
c.setopt(c.HTTPPOST, fields)
c.perform()
# Build translations
print 'Build translations'
response = urllib2.urlopen('http://api.crowdin.net/api/project/' + crowdin_identifier + '/export?key=' + crowdin_api_key).read()
print response
# Download & unzip
print 'Download translations'
zfobj = zipfile.ZipFile(StringIO(urllib2.urlopen('http://crowdin.net/download/project/' + crowdin_identifier + '.zip').read()))
print 'Unzip translations'
for name in zfobj.namelist():
if not name.startswith('electrum-client/locale'):
continue
if name.endswith('/'):
if not os.path.exists(name[16:]):
os.mkdir(name[16:])
else: else:
message = l[1:] output = open(name[16:],'w')
num_m += 1 output.write(zfobj.read(name))
output.close()
#print dicts # Convert .po to .mo
print 'Installing'
if not os.path.exists('locale'): for lang in os.listdir('./locale'):
os.mkdir('locale') if name.startswith('messages'):
continue
# Check LC_MESSAGES folder
cmd = 'xgettext -s --no-wrap -f app.fil --output=locale/messages.pot' mo_dir = 'locale/%s/LC_MESSAGES' % lang
print cmd
os.system(cmd)
# Make locale directory if doesn't exist
try:
os.mkdir('locale')
except OSError:
pass
f = open(os.path.join('locale', 'messages.pot'),'r')
s = f.read()
f.close()
s = s.replace('CHARSET', 'utf-8')
for lang, strings in dicts.items():
ss = s[:]
print(lang + " :%d/%d"%(len(strings), num_m))
for k,v in strings.items():
ss = ss.replace("msgid \"%s\"\nmsgstr \"\""%k,"msgid \"%s\"\nmsgstr \"%s\""%(k,v))
f = open('locale/electrum_%s.po'%lang,'w')
f.write(ss)
f.close()
if not os.path.exists('locale/'+lang):
os.mkdir('locale/'+lang)
mo_dir = "locale/%s/LC_MESSAGES" % lang
if not os.path.exists(mo_dir): if not os.path.exists(mo_dir):
os.mkdir(mo_dir) os.mkdir(mo_dir)
cmd = 'msgfmt --output-file="%s/electrum.mo" "locale/%s/electrum.po"' % (mo_dir,lang)
cmd = 'msgfmt --output-file="%s/electrum.mo" "locale/electrum_%s.po"' % (mo_dir,lang) print 'Installing',lang
#print cmd
os.system(cmd) os.system(cmd)