mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Also write lang names to website locales zip file
This commit is contained in:
parent
a66cf0f185
commit
b6ef1092ce
@ -454,6 +454,7 @@ class Translations(POT): # {{{
|
|||||||
def compile_website_translations(self):
|
def compile_website_translations(self):
|
||||||
from calibre.utils.zipfile import ZipFile, ZipInfo, ZIP_STORED
|
from calibre.utils.zipfile import ZipFile, ZipInfo, ZIP_STORED
|
||||||
from calibre.ptempfile import TemporaryDirectory
|
from calibre.ptempfile import TemporaryDirectory
|
||||||
|
from calibre.utils.localization import get_iso639_translator, get_language, get_iso_language
|
||||||
self.info('Compiling website translations...')
|
self.info('Compiling website translations...')
|
||||||
srcbase = self.j(self.d(self.SRC), 'translations', 'website')
|
srcbase = self.j(self.d(self.SRC), 'translations', 'website')
|
||||||
fmap = {}
|
fmap = {}
|
||||||
@ -471,6 +472,9 @@ class Translations(POT): # {{{
|
|||||||
for f in os.listdir(srcbase):
|
for f in os.listdir(srcbase):
|
||||||
if f.endswith('.po'):
|
if f.endswith('.po'):
|
||||||
l = f.partition('.')[0]
|
l = f.partition('.')[0]
|
||||||
|
pf = l.split('_')[0]
|
||||||
|
if pf in {'en'}:
|
||||||
|
continue
|
||||||
d = os.path.join(tdir, l + '.mo')
|
d = os.path.join(tdir, l + '.mo')
|
||||||
f = os.path.join(srcbase, f)
|
f = os.path.join(srcbase, f)
|
||||||
fmap[f] = l
|
fmap[f] = l
|
||||||
@ -485,6 +489,19 @@ class Translations(POT): # {{{
|
|||||||
zi.compress_type = ZIP_STORED
|
zi.compress_type = ZIP_STORED
|
||||||
zf.writestr(zi, raw)
|
zf.writestr(zi, raw)
|
||||||
done.append(locale)
|
done.append(locale)
|
||||||
|
dl = done + ['en']
|
||||||
|
|
||||||
|
lang_names = {}
|
||||||
|
for l in dl:
|
||||||
|
if l == 'en':
|
||||||
|
t = get_language
|
||||||
|
else:
|
||||||
|
t = get_iso639_translator(l).ugettext
|
||||||
|
t = partial(get_iso_language, t)
|
||||||
|
lang_names[l] = {x: t(x) for x in dl}
|
||||||
|
zi = ZipInfo('lang-names.json')
|
||||||
|
zi.compress_type = ZIP_STORED
|
||||||
|
zf.writestr(zi, json.dumps(lang_names, ensure_ascii=False).encode('utf-8'))
|
||||||
dest = self.j(self.d(self.stats), 'website-languages.txt')
|
dest = self.j(self.d(self.stats), 'website-languages.txt')
|
||||||
with open(dest, 'wb') as f:
|
with open(dest, 'wb') as f:
|
||||||
f.write(' '.join(sorted(done)))
|
f.write(' '.join(sorted(done)))
|
||||||
|
@ -60,6 +60,18 @@ def get_system_locale():
|
|||||||
return lang
|
return lang
|
||||||
|
|
||||||
|
|
||||||
|
def sanitize_lang(lang):
|
||||||
|
if lang:
|
||||||
|
match = re.match('[a-z]{2,3}(_[A-Z]{2}){0,1}', lang)
|
||||||
|
if match:
|
||||||
|
lang = match.group()
|
||||||
|
if lang == 'zh':
|
||||||
|
lang = 'zh_CN'
|
||||||
|
if not lang:
|
||||||
|
lang = 'en'
|
||||||
|
return lang
|
||||||
|
|
||||||
|
|
||||||
def get_lang():
|
def get_lang():
|
||||||
'Try to figure out what language to display the interface in'
|
'Try to figure out what language to display the interface in'
|
||||||
from calibre.utils.config_base import prefs
|
from calibre.utils.config_base import prefs
|
||||||
@ -73,15 +85,7 @@ def get_lang():
|
|||||||
import traceback
|
import traceback
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
lang = None
|
lang = None
|
||||||
if lang:
|
return sanitize_lang(lang)
|
||||||
match = re.match('[a-z]{2,3}(_[A-Z]{2}){0,1}', lang)
|
|
||||||
if match:
|
|
||||||
lang = match.group()
|
|
||||||
if lang == 'zh':
|
|
||||||
lang = 'zh_CN'
|
|
||||||
if not lang:
|
|
||||||
lang = 'en'
|
|
||||||
return lang
|
|
||||||
|
|
||||||
|
|
||||||
def is_rtl():
|
def is_rtl():
|
||||||
@ -118,13 +122,19 @@ def get_all_translators():
|
|||||||
yield lang, GNUTranslations(buf)
|
yield lang, GNUTranslations(buf)
|
||||||
|
|
||||||
|
|
||||||
def get_single_translator(mpath):
|
def get_single_translator(mpath, which='messages'):
|
||||||
from zipfile import ZipFile
|
from zipfile import ZipFile
|
||||||
with ZipFile(P('localization/locales.zip', allow_user_override=False), 'r') as zf:
|
with ZipFile(P('localization/locales.zip', allow_user_override=False), 'r') as zf:
|
||||||
buf = cStringIO.StringIO(zf.read(mpath + '/messages.mo'))
|
buf = cStringIO.StringIO(zf.read(mpath + '/%s.mo' % which))
|
||||||
return GNUTranslations(buf)
|
return GNUTranslations(buf)
|
||||||
|
|
||||||
|
|
||||||
|
def get_iso639_translator(lang):
|
||||||
|
lang = sanitize_lang(lang)
|
||||||
|
mpath = get_lc_messages_path(lang) if lang else None
|
||||||
|
return get_single_translator(mpath, 'iso639') if mpath else None
|
||||||
|
|
||||||
|
|
||||||
def get_translator(bcp_47_code):
|
def get_translator(bcp_47_code):
|
||||||
parts = bcp_47_code.replace('-', '_').split('_')[:2]
|
parts = bcp_47_code.replace('-', '_').split('_')[:2]
|
||||||
parts[0] = lang_as_iso639_1(parts[0].lower()) or 'en'
|
parts[0] = lang_as_iso639_1(parts[0].lower()) or 'en'
|
||||||
@ -334,13 +344,7 @@ def _load_iso639():
|
|||||||
return _iso639
|
return _iso639
|
||||||
|
|
||||||
|
|
||||||
def get_language(lang):
|
def get_iso_language(lang_trans, lang):
|
||||||
translate = _
|
|
||||||
lang = _lcase_map.get(lang, lang)
|
|
||||||
if lang in _extra_lang_codes:
|
|
||||||
# The translator was not active when _extra_lang_codes was defined, so
|
|
||||||
# re-translate
|
|
||||||
return translate(_extra_lang_codes[lang])
|
|
||||||
iso639 = _load_iso639()
|
iso639 = _load_iso639()
|
||||||
ans = lang
|
ans = lang
|
||||||
lang = lang.split('_')[0].lower()
|
lang = lang.split('_')[0].lower()
|
||||||
@ -351,10 +355,17 @@ def get_language(lang):
|
|||||||
ans = iso639['by_3b'][lang]
|
ans = iso639['by_3b'][lang]
|
||||||
else:
|
else:
|
||||||
ans = iso639['by_3t'].get(lang, ans)
|
ans = iso639['by_3t'].get(lang, ans)
|
||||||
try:
|
return lang_trans(ans)
|
||||||
return _lang_trans.ugettext(ans)
|
|
||||||
except AttributeError:
|
|
||||||
return translate(ans)
|
def get_language(lang):
|
||||||
|
translate = _
|
||||||
|
lang = _lcase_map.get(lang, lang)
|
||||||
|
if lang in _extra_lang_codes:
|
||||||
|
# The translator was not active when _extra_lang_codes was defined, so
|
||||||
|
# re-translate
|
||||||
|
return translate(_extra_lang_codes[lang])
|
||||||
|
return get_iso_language(getattr(_lang_trans, 'ugettext', translate), lang)
|
||||||
|
|
||||||
|
|
||||||
def calibre_langcode_to_name(lc, localize=True):
|
def calibre_langcode_to_name(lc, localize=True):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user