Browse Source
Run this script from the root of the repository to update all translations from transifex. It will do the following automatically: - create a transifex configuration file - fetch all translations - post-process them into valid and committable format0.10
Wladimir J. van der Laan
11 years ago
3 changed files with 82 additions and 3 deletions
@ -0,0 +1,66 @@
@@ -0,0 +1,66 @@
|
||||
#!/usr/bin/python |
||||
# Copyright (c) 2014 Wladimir J. van der Laan |
||||
# Distributed under the MIT/X11 software license, see the accompanying |
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php. |
||||
''' |
||||
Run this script from the root of the repository to update all translations from |
||||
transifex. |
||||
It will do the following automatically: |
||||
|
||||
- fetch all translations using the tx tool |
||||
- post-process them into valid and committable format |
||||
- remove invalid control characters |
||||
- remove location tags (makes diffs less noisy) |
||||
|
||||
TODO: |
||||
- auto-add new translations to the build system according to the translation process |
||||
- remove 'unfinished' translation items |
||||
''' |
||||
from __future__ import division, print_function |
||||
import subprocess |
||||
import re |
||||
import sys |
||||
import os |
||||
|
||||
# Name of transifex tool |
||||
TX = 'tx' |
||||
# Name of source language file |
||||
SOURCE_LANG = 'bitcoin_en.ts' |
||||
# Directory with locale files |
||||
LOCALE_DIR = 'src/qt/locale' |
||||
|
||||
def check_at_repository_root(): |
||||
if not os.path.exists('.git'): |
||||
print('No .git directory found') |
||||
print('Execute this script at the root of the repository', file=sys.stderr) |
||||
exit(1) |
||||
|
||||
def fetch_all_translations(): |
||||
if subprocess.call([TX, 'pull', '-f']): |
||||
print('Error while fetching translations', file=sys.stderr) |
||||
exit(1) |
||||
|
||||
def postprocess_translations(): |
||||
print('Postprocessing...') |
||||
for filename in os.listdir(LOCALE_DIR): |
||||
# process only language files, and do not process source language |
||||
if not filename.endswith('.ts') or filename == SOURCE_LANG: |
||||
continue |
||||
filepath = os.path.join(LOCALE_DIR, filename) |
||||
with open(filepath, 'rb') as f: |
||||
data = f.read() |
||||
# remove non-allowed control characters |
||||
data = re.sub('[\x00-\x09\x0b\x0c\x0e-\x1f]', '', data) |
||||
data = data.split('\n') |
||||
# strip locations from non-origin translation |
||||
# location tags are used to guide translators, they are not necessary for compilation |
||||
# TODO: actually process XML instead of relying on Transifex's one-tag-per-line output format |
||||
data = [line for line in data if not '<location' in line] |
||||
with open(filepath, 'wb') as f: |
||||
f.write('\n'.join(data)) |
||||
|
||||
if __name__ == '__main__': |
||||
check_at_repository_root() |
||||
fetch_all_translations() |
||||
postprocess_translations() |
||||
|
Loading…
Reference in new issue