214 lines
4.8 KiB
Python
214 lines
4.8 KiB
Python
"""
|
|
Internationalization tasks
|
|
"""
|
|
import sys
|
|
import subprocess
|
|
from path import path
|
|
from paver.easy import task, cmdopts, needs, sh
|
|
|
|
try:
|
|
from pygments.console import colorize
|
|
except ImportError:
|
|
colorize = lambda color, text: text # pylint: disable-msg=invalid-name
|
|
|
|
|
|
@task
|
|
@needs(
|
|
"pavelib.i18n.i18n_validate_gettext",
|
|
"pavelib.assets.compile_coffeescript",
|
|
)
|
|
@cmdopts([
|
|
("verbose", "v", "Sets 'verbose' to True"),
|
|
])
|
|
def i18n_extract(options):
|
|
"""
|
|
Extract localizable strings from sources
|
|
"""
|
|
verbose = getattr(options, "verbose", None)
|
|
cmd = "i18n_tool extract"
|
|
|
|
if verbose:
|
|
cmd += " -vv"
|
|
|
|
sh(cmd)
|
|
|
|
|
|
@task
|
|
@needs("pavelib.i18n.i18n_extract")
|
|
def i18n_generate():
|
|
"""
|
|
Compile localizable strings from sources, extracting strings first.
|
|
"""
|
|
cmd = "i18n_tool generate"
|
|
sh(cmd)
|
|
|
|
|
|
@task
|
|
@needs("pavelib.i18n.i18n_extract")
|
|
def i18n_generate_strict():
|
|
"""
|
|
Compile localizable strings from sources, extracting strings first.
|
|
Complains if files are missing.
|
|
"""
|
|
cmd = "i18n_tool generate"
|
|
sh(cmd + " --strict")
|
|
|
|
|
|
@task
|
|
@needs("pavelib.i18n.i18n_extract")
|
|
def i18n_dummy():
|
|
"""
|
|
Simulate international translation by generating dummy strings
|
|
corresponding to source strings.
|
|
"""
|
|
cmd = "i18n_tool dummy"
|
|
sh(cmd)
|
|
# Need to then compile the new dummy strings
|
|
cmd = "i18n_tool generate"
|
|
sh(cmd)
|
|
|
|
|
|
@task
|
|
def i18n_validate_gettext():
|
|
"""
|
|
Make sure GNU gettext utilities are available
|
|
"""
|
|
|
|
returncode = subprocess.call(['which', 'xgettext'])
|
|
|
|
if returncode != 0:
|
|
msg = colorize(
|
|
'red',
|
|
"Cannot locate GNU gettext utilities, which are "
|
|
"required by django for internationalization.\n (see "
|
|
"https://docs.djangoproject.com/en/dev/topics/i18n/"
|
|
"translation/#message-files)\nTry downloading them from "
|
|
"http://www.gnu.org/software/gettext/ \n"
|
|
)
|
|
|
|
sys.stderr.write(msg)
|
|
sys.exit(1)
|
|
|
|
|
|
@task
|
|
def i18n_validate_transifex_config():
|
|
"""
|
|
Make sure config file with username/password exists
|
|
"""
|
|
home = path('~').expanduser()
|
|
config = home / '.transifexrc'
|
|
|
|
if not config.isfile or config.getsize == 0:
|
|
msg = colorize(
|
|
'red',
|
|
"Cannot connect to Transifex, config file is missing"
|
|
" or empty: {config} \nSee "
|
|
"http://help.transifex.com/features/client/#transifexrc \n".format(
|
|
config=config,
|
|
)
|
|
)
|
|
|
|
sys.stderr.write(msg)
|
|
sys.exit(1)
|
|
|
|
|
|
@task
|
|
@needs("pavelib.i18n.i18n_validate_transifex_config")
|
|
def i18n_transifex_push():
|
|
"""
|
|
Push source strings to Transifex for translation
|
|
"""
|
|
cmd = "i18n_tool transifex"
|
|
sh("{cmd} push".format(cmd=cmd))
|
|
|
|
|
|
@task
|
|
@needs("pavelib.i18n.i18n_validate_transifex_config")
|
|
def i18n_transifex_pull():
|
|
"""
|
|
Pull translated strings from Transifex
|
|
"""
|
|
cmd = "i18n_tool transifex"
|
|
sh("{cmd} pull".format(cmd=cmd))
|
|
|
|
|
|
@task
|
|
def i18n_rtl():
|
|
"""
|
|
Pull all RTL translations (reviewed AND unreviewed) from Transifex
|
|
"""
|
|
cmd = "i18n_tool transifex"
|
|
sh(cmd + " rtl")
|
|
|
|
print("Now generating langugage files...")
|
|
|
|
cmd = "i18n_tool generate"
|
|
|
|
sh(cmd + " --rtl")
|
|
|
|
print("Committing translations...")
|
|
sh('git clean -fdX conf/locale')
|
|
sh('git add conf/locale')
|
|
sh('git commit --amend')
|
|
|
|
|
|
@task
|
|
def i18n_ltr():
|
|
"""
|
|
Pull all LTR translations (reviewed AND unreviewed) from Transifex
|
|
"""
|
|
cmd = "i18n_tool transifex"
|
|
sh(cmd + " ltr")
|
|
|
|
print("Now generating langugage files...")
|
|
|
|
cmd = "i18n_tool generate"
|
|
|
|
sh(cmd + " --ltr")
|
|
|
|
print("Committing translations...")
|
|
sh('git clean -fdX conf/locale')
|
|
sh('git add conf/locale')
|
|
sh('git commit --amend')
|
|
|
|
|
|
@task
|
|
@needs(
|
|
"pavelib.i18n.i18n_transifex_pull",
|
|
"pavelib.i18n.i18n_extract",
|
|
"pavelib.i18n.i18n_dummy",
|
|
"pavelib.i18n.i18n_generate_strict",
|
|
)
|
|
def i18n_robot_pull():
|
|
"""
|
|
Pull source strings, generate po and mo files, and validate
|
|
"""
|
|
sh('git clean -fdX conf/locale')
|
|
# sh('paver test_i18n') # tests were removed from repo, but there should still be tests that cover the translations...
|
|
|
|
# Validate the recently pulled translations, and give a bail option
|
|
cmd = "i18n_tool validate"
|
|
sh("{cmd}".format(cmd=cmd))
|
|
|
|
con = raw_input("Continue with committing these translations (y/n)? ")
|
|
|
|
if con.lower() == 'y':
|
|
sh('git add conf/locale')
|
|
|
|
sh(
|
|
'git commit --message="Update translations '
|
|
'(autogenerated message)" --edit'
|
|
)
|
|
|
|
|
|
@task
|
|
@needs(
|
|
"pavelib.i18n.i18n_extract",
|
|
"pavelib.i18n.i18n_transifex_push",
|
|
)
|
|
def i18n_robot_push():
|
|
"""
|
|
Extract new strings, and push to transifex
|
|
"""
|
|
pass
|