1
0
mirror of https://github.com/gryf/ebook-converter.git synced 2026-02-24 11:15:50 +01:00
Files
ebook-converter/ebook_converter/translations/dynamic.py
2020-04-11 19:27:06 +02:00

40 lines
1.1 KiB
Python

from __future__ import absolute_import, division, print_function, unicode_literals
'''
Dynamic language lookup of translations for user-visible strings.
'''
__license__ = 'GPL v3'
__copyright__ = '2008, Marshall T. Vandegrift <llasram@gmail.com>'
import io
from gettext import GNUTranslations
from calibre.constants import ispy3
from calibre.utils.localization import get_lc_messages_path
from zipfile import ZipFile
__all__ = ['translate']
_CACHE = {}
def translate(lang, text):
trans = None
if lang in _CACHE:
trans = _CACHE[lang]
else:
mpath = get_lc_messages_path(lang)
if mpath is not None:
with ZipFile(P('localization/locales.zip',
allow_user_override=False), 'r') as zf:
try:
buf = io.BytesIO(zf.read(mpath + '/messages.mo'))
except Exception:
pass
else:
trans = GNUTranslations(buf)
_CACHE[lang] = trans
if trans is None:
return getattr(__builtins__, '_', lambda x: x)(text)
f = getattr(trans, 'gettext' if ispy3 else 'ugettext')
return f(text)