def run(self, opts):
self.iso639_errors = []
-@@ -152,8 +152,9 @@ class Translations(POT): # {{{
- base = os.path.dirname(dest)
- if not os.path.exists(base):
- os.makedirs(base)
-- self.info('\tCompiling translations for', locale)
-- subprocess.check_call(['msgfmt', '-o', dest, f])
-+ if self.newer(dest, f):
-+ self.info('\tCompiling translations for', locale)
-+ subprocess.check_call(['msgfmt', '-o', dest, f])
- iscpo = {'bn':'bn_IN', 'zh_HK':'zh_CN'}.get(locale, locale)
- iso639 = self.j(self.LP_ISO_PATH, '%s.po'%iscpo)
-
@@ -174,7 +175,6 @@ class Translations(POT): # {{{
- raise SystemExit(1)
-
- self.write_stats()
+ def run(self, opts):
+ self.compile_main_translations()
+ self.compile_content_server_translations()
- self.freeze_locales()
+ self.compile_user_manual_translations()
- def check_iso639(self, path):
- from calibre.utils.localization import langnames_to_langcodes
+ def compile_group(self, files, handle_stats=None, file_ok=None, action_per_file=None):
@@ -198,15 +198,6 @@ class Translations(POT): # {{{
# raise SystemExit(1)
rmap[msgstr] = msgid
__copyright__ = '2008, Marshall T. Vandegrift <llasram@gmail.com>'
+import os
- import cStringIO
+ import io
from gettext import GNUTranslations
from calibre.utils.localization import get_lc_messages_path
-from zipfile import ZipFile
- with ZipFile(P('localization/locales.zip',
- allow_user_override=False), 'r') as zf:
- try:
-- buf = cStringIO.StringIO(zf.read(mpath + '/messages.mo'))
-- except:
+- buf = io.BytesIO(zf.read(mpath + '/messages.mo'))
+- except Exception:
- pass
- else:
- trans = GNUTranslations(buf)
- _CACHE[lang] = trans
-+ p = os.path.join(mpath, 'messages.mo')
++ p = os.path.join(mpath, 'calibre.mo')
+ if os.path.exists(p):
+ trans = GNUTranslations(open(p, 'rb'))
+ _CACHE[lang] = trans
return trans.ugettext(text)
--- calibre/src/calibre/utils/localization.py.wiget 2013-12-06 05:13:34.000000000 +0100
+++ calibre/src/calibre/utils/localization.py 2013-12-09 09:31:05.694326467 +0100
-@@ -74,20 +74,20 @@ def get_lang():
- lang = 'en'
- return lang
+@@ -74,21 +74,20 @@ def get_lang():
+ return get_lang()[:2].lower() in {'he', 'ar'}
+
+def messages_path(lang):
+ return ('/usr/share/locale/%s/LC_MESSAGES'%lang)
- hlang = xlang
- return hlang
-
+-
-def zf_exists():
- return os.path.exists(P('localization/locales.zip',
- allow_user_override=False))
+ xlang = lang.split('_')[0]
+ if xlang in available_translations():
+ hlang = xlang
-+ if hlang is not None:
-+ return messages_path(hlang)
-+ return None
++ if hlang is not None:
++ return messages_path(hlang)
++ return None
_lang_trans = None
-@@ -114,18 +114,12 @@ def set_translators():
- buf = cStringIO.StringIO(buf.getvalue())
+@@ -99,13 +99,14 @@
+ _lang_trans = None
+
+ def get_all_translators():
+- from zipfile import ZipFile
+- with ZipFile(P('localization/locales.zip', allow_user_override=False), 'r') as zf:
+- for lang in available_translations():
+- mpath = get_lc_messages_path(lang)
+- if mpath is not None:
+- buf = io.BytesIO(zf.read(mpath + '/messages.mo'))
+- yield lang, GNUTranslations(buf)
++ for lang in available_translations():
++ mpath = get_lc_messages_path(lang)
++ if mpath is not None:
++ try:
++ buf = open(os.path.join(mpath, 'calibre.mo'), 'rb')
++ yield lang, GNUTranslations(buf)
++ except:
++ pass
+
+ lcdata = {
+ u'abday': (u'Sun', u'Mon', u'Tue', u'Wed', u'Thu', u'Fri', u'Sat'),
+@@ -134,20 +134,11 @@
+
+
+ def get_single_translator(mpath, which='messages'):
+- from zipfile import ZipFile
+- with ZipFile(P('localization/locales.zip', allow_user_override=False), 'r') as zf:
+- path = '{}/{}.mo'.format(mpath, which)
+- data = zf.read(path)
+- buf = io.BytesIO(data)
+ try:
++ buf = open(os.path.join(mpath, '/%s.mo' % which), 'rb')
+ return GNUTranslations(buf)
+ except Exception as e:
+- import traceback
+- traceback.print_exc()
+- import hashlib
+- sig = hashlib.sha1(data).hexdigest()
+- raise ValueError('Failed to load translations for: {} (size: {} and signature: {}) with error: {}'.format(
+- path, len(data), sig, e))
++ pass # No translations for this lang
+
+
+ def get_iso639_translator(lang):
+@@ -145,22 +145,21 @@
+ buf = io.BytesIO(buf.getvalue())
if mpath is not None:
- from zipfile import ZipFile
- with ZipFile(P('localization/locales.zip',
- allow_user_override=False), 'r') as zf:
- if buf is None:
-- buf = cStringIO.StringIO(zf.read(mpath + '/messages.mo'))
-- if mpath == 'nds':
-- mpath = 'de'
-- isof = mpath + '/iso639.mo'
-- try:
-- iso639 = cStringIO.StringIO(zf.read(isof))
-- except:
-- pass # No iso639 translations for this lang
+- buf = io.BytesIO(zf.read(mpath + '/messages.mo'))
+ if buf is None:
-+ buf = open(os.path.join(mpath, 'calibre.mo'), 'rb')
-+ mpath = mpath.replace(os.sep+'nds'+os.sep, os.sep+'de'+os.sep)
-+ isof = os.path.join(mpath, 'calibre_iso639.mo')
-+ if os.path.exists(isof):
-+ iso639 = open(isof, 'rb')
++ try:
++ buf = open(os.path.join(mpath, 'calibre.mo'), 'rb')
++ except:
++ pass # No translations for this lang
+ if mpath == 'nds':
+ mpath = 'de'
+- isof = mpath + '/iso639.mo'
+ try:
+- iso639 = io.BytesIO(zf.read(isof))
++ iso639 = open(os.path.join(mpath, 'calibre_iso639.mo'), 'rb')
+ except:
+ pass # No iso639 translations for this lang
+ if buf is not None:
+ from calibre.utils.serialize import msgpack_loads
+ try:
+- lcdata = msgpack_loads(zf.read(mpath + '/lcdata.calibre_msgpack'))
++ lcdata = msgpack_loads(open(os.path.join(mpath, '/lcdata.calibre_msgpack')))
+ except:
+ pass # No lcdata
- if buf is not None:
- t = GNUTranslations(buf)