You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
jumpserver/apps/common/utils/translate.py

48 lines
1.1 KiB

from django.utils.translation import gettext, gettext_noop
def translate_value(value):
if not value:
return value
sps = ['. ', ': ']
spb = {str(sp in value): sp for sp in sps}
sp = spb.get('True')
if not sp:
return value
tpl, data = value.split(sp, 1)
return gettext(tpl + sp) + data
def i18n_fmt(tpl, *args):
if '%' not in tpl:
raise ValueError('Invalid template, should contains %')
if not args:
return tpl
args = [str(arg) for arg in args]
args = [arg.replace(', ', ' ') for arg in args]
try:
tpl % tuple(args)
except TypeError:
raise ValueError('Invalid template, args not match: {} {}'.format(tpl, args))
return tpl + ' % ' + ', '.join(args)
def i18n_trans(s):
if ' % ' not in s:
return gettext(s)
tpl, args = s.split(' % ', 1)
args = args.split(', ')
args = [gettext(arg) for arg in args]
try:
return gettext(tpl) % tuple(args)
except TypeError:
return gettext(tpl)
def hello():
log = i18n_fmt(gettext_noop('Hello %s'), 'world')
print(i18n_trans(log))