From edb6081f31de58b8131493aedf79f45524a0235e Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 17 Aug 2011 19:46:28 -0600 Subject: [PATCH] ... --- src/calibre/ebooks/metadata/book/base.py | 2 -- src/calibre/ebooks/metadata/opf2.py | 5 +++-- src/calibre/ebooks/mobi/langcodes.py | 4 +++- src/calibre/ebooks/oeb/transforms/metadata.py | 6 ++++-- src/calibre/utils/localization.py | 6 ++++++ 5 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/calibre/ebooks/metadata/book/base.py b/src/calibre/ebooks/metadata/book/base.py index 93f657f7c9..1d2838c135 100644 --- a/src/calibre/ebooks/metadata/book/base.py +++ b/src/calibre/ebooks/metadata/book/base.py @@ -730,8 +730,6 @@ class Metadata(object): if self.identifiers: fmt('Identifiers', u', '.join(['%s:%s'%(k, v) for k, v in self.identifiers.iteritems()])) - if self.languages: - fmt('Languages', u', '.join(self.languages)) if self.comments: fmt('Comments', self.comments) diff --git a/src/calibre/ebooks/metadata/opf2.py b/src/calibre/ebooks/metadata/opf2.py index 6dcda8884b..9958ad75c9 100644 --- a/src/calibre/ebooks/metadata/opf2.py +++ b/src/calibre/ebooks/metadata/opf2.py @@ -1328,7 +1328,8 @@ def metadata_to_opf(mi, as_string=True): '[http://calibre-ebook.com]' if not mi.languages: - mi.languages = ['UND'] + lang = get_lang().replace('_', '-').partition('-')[0] + mi.languages = [lang] root = etree.fromstring(textwrap.dedent( ''' @@ -1380,7 +1381,7 @@ def metadata_to_opf(mi, as_string=True): factory(DC('rights'), mi.rights) for lang in mi.languages: if not lang or lang.lower() == 'und': - lang = get_lang().replace('_', '-').partition('-')[0] + continue factory(DC('language'), lang) if mi.tags: for tag in mi.tags: diff --git a/src/calibre/ebooks/mobi/langcodes.py b/src/calibre/ebooks/mobi/langcodes.py index 5d085906df..1b839dc54d 100644 --- a/src/calibre/ebooks/mobi/langcodes.py +++ b/src/calibre/ebooks/mobi/langcodes.py @@ -4,6 +4,7 @@ __copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net' __docformat__ = 'restructuredtext en' from struct import pack +from calibre.utils.localization import lang_as_iso639_1 lang_codes = { } @@ -314,7 +315,8 @@ def iana2mobi(icode): subtags = list(icode.split('-')) while len(subtags) > 0: lang = subtags.pop(0).lower() - if lang in IANA_MOBI: + lang = lang_as_iso639_1(lang) + if lang and lang in IANA_MOBI: langdict = IANA_MOBI[lang] break diff --git a/src/calibre/ebooks/oeb/transforms/metadata.py b/src/calibre/ebooks/oeb/transforms/metadata.py index 0db24dd2ad..41d5421dde 100644 --- a/src/calibre/ebooks/oeb/transforms/metadata.py +++ b/src/calibre/ebooks/oeb/transforms/metadata.py @@ -61,9 +61,11 @@ def meta_info_to_oeb_metadata(mi, m, log, override_input_metadata=False): m.add('identifier', val, scheme=typ.upper()) if override_input_metadata and not set_isbn: m.filter('identifier', lambda x: x.scheme.lower() == 'isbn') - if not mi.is_null('language'): + if not mi.is_null('languages'): m.clear('language') - m.add('language', mi.language) + for lang in mi.languages: + if lang and lang.lower() not in ('und', ''): + m.add('language', lang) if not mi.is_null('series_index'): m.clear('series_index') m.add('series_index', mi.format_series_index()) diff --git a/src/calibre/utils/localization.py b/src/calibre/utils/localization.py index c1dcbad25e..947ee823c6 100644 --- a/src/calibre/utils/localization.py +++ b/src/calibre/utils/localization.py @@ -260,6 +260,12 @@ def langnames_to_langcodes(names): return ans +def lang_as_iso639_1(name_or_code): + code = canonicalize_lang(name_or_code) + if code is not None: + iso639 = _load_iso639() + return iso639['3to2'].get(code, None) + _udc = None def get_udc():