From af5de012277b3b2e98cfb07edd1fc3bc8fdb0361 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 6 May 2013 09:25:15 +0530 Subject: [PATCH] Detect errors in language name translations --- setup/iso_639/ca.po | 4 ++-- setup/iso_639/cs.po | 2 +- setup/iso_639/da.po | 2 +- setup/iso_639/de.po | 4 ++-- setup/iso_639/eu.po | 6 +++--- setup/iso_639/gl.po | 4 ++-- setup/iso_639/hu.po | 2 +- setup/iso_639/is.po | 2 +- setup/iso_639/ko.po | 2 +- setup/iso_639/mr.po | 2 +- setup/iso_639/nb.po | 2 +- setup/iso_639/oc.po | 4 ++-- setup/iso_639/ru.po | 2 +- setup/iso_639/sk.po | 2 +- setup/iso_639/zh_CN.po | 2 +- setup/translations.py | 42 ++++++++++++++++++++++++++++++++++-------- 16 files changed, 55 insertions(+), 29 deletions(-) diff --git a/setup/iso_639/ca.po b/setup/iso_639/ca.po index 46d17d543d..8f1d62cfb1 100644 --- a/setup/iso_639/ca.po +++ b/setup/iso_639/ca.po @@ -2024,7 +2024,7 @@ msgstr "Àzeri meridional" #. name for aze msgid "Azerbaijani" -msgstr "Serbi" +msgstr "" #. name for azg msgid "Amuzgo; San Pedro Amuzgos" @@ -21816,7 +21816,7 @@ msgstr "Ramoaaina" #. name for raj msgid "Rajasthani" -msgstr "Marwari" +msgstr "" #. name for rak msgid "Tulu-Bohuai" diff --git a/setup/iso_639/cs.po b/setup/iso_639/cs.po index 26cde97d21..4d088c7467 100644 --- a/setup/iso_639/cs.po +++ b/setup/iso_639/cs.po @@ -13762,7 +13762,7 @@ msgstr "" #. name for lav msgid "Latvian" -msgstr "litevština" +msgstr "" #. name for law msgid "Lauje" diff --git a/setup/iso_639/da.po b/setup/iso_639/da.po index 9f80f6f2fb..0e045d8cc4 100644 --- a/setup/iso_639/da.po +++ b/setup/iso_639/da.po @@ -1429,7 +1429,7 @@ msgstr "" #. name for arg msgid "Aragonese" -msgstr "Færøsk" +msgstr "" #. name for arh msgid "Arhuaco" diff --git a/setup/iso_639/de.po b/setup/iso_639/de.po index 1e5c880379..813120efc6 100644 --- a/setup/iso_639/de.po +++ b/setup/iso_639/de.po @@ -319,7 +319,7 @@ msgstr "Adangme" #. name for adb msgid "Adabe" -msgstr "Adangme" +msgstr "Adabe" #. name for add msgid "Dzodinka" @@ -367,7 +367,7 @@ msgstr "Adap" #. name for adq msgid "Adangbe" -msgstr "Adangme" +msgstr "Adangbe" #. name for adr msgid "Adonara" diff --git a/setup/iso_639/eu.po b/setup/iso_639/eu.po index 92b3057e51..d8652d91e0 100644 --- a/setup/iso_639/eu.po +++ b/setup/iso_639/eu.po @@ -2022,7 +2022,7 @@ msgstr "" #. name for aze msgid "Azerbaijani" -msgstr "Turkiera" +msgstr "" #. name for azg msgid "Amuzgo; San Pedro Amuzgos" @@ -13126,7 +13126,7 @@ msgstr "" #. name for kur msgid "Kurdish" -msgstr "Turkiera" +msgstr "" #. name for kus msgid "Kusaal" @@ -16190,7 +16190,7 @@ msgstr "" #. name for mlt msgid "Maltese" -msgstr "Koreera" +msgstr "" #. name for mlu msgid "To'abaita" diff --git a/setup/iso_639/gl.po b/setup/iso_639/gl.po index dca7bcdbd6..29ba6d291e 100644 --- a/setup/iso_639/gl.po +++ b/setup/iso_639/gl.po @@ -13764,7 +13764,7 @@ msgstr "Laba" #. name for lav msgid "Latvian" -msgstr "Lituano" +msgstr "" #. name for law msgid "Lauje" @@ -22212,7 +22212,7 @@ msgstr "Roglai do norte" #. name for roh msgid "Romansh" -msgstr "Romanés" +msgstr "" #. name for rol msgid "Romblomanon" diff --git a/setup/iso_639/hu.po b/setup/iso_639/hu.po index fa912f715f..b6fe5d12ff 100644 --- a/setup/iso_639/hu.po +++ b/setup/iso_639/hu.po @@ -20538,7 +20538,7 @@ msgstr "" #. name for peo msgid "Persian; Old (ca. 600-400 B.C.)" -msgstr "perzsa" +msgstr "" #. name for pep msgid "Kunja" diff --git a/setup/iso_639/is.po b/setup/iso_639/is.po index 1005120ba0..067b15b33b 100644 --- a/setup/iso_639/is.po +++ b/setup/iso_639/is.po @@ -15049,7 +15049,7 @@ msgstr "Magahi" #. name for mah msgid "Marshallese" -msgstr "Maltneska" +msgstr "" #. name for mai msgid "Maithili" diff --git a/setup/iso_639/ko.po b/setup/iso_639/ko.po index e4bccbb8f7..046bd1c1d6 100644 --- a/setup/iso_639/ko.po +++ b/setup/iso_639/ko.po @@ -3742,7 +3742,7 @@ msgstr "" #. name for bre msgid "Breton" -msgstr "프랑스어" +msgstr "" #. name for brf msgid "Bera" diff --git a/setup/iso_639/mr.po b/setup/iso_639/mr.po index beef0a1c61..56441979de 100644 --- a/setup/iso_639/mr.po +++ b/setup/iso_639/mr.po @@ -6804,7 +6804,7 @@ msgstr "डोगोन; तेबुल उरे" #. name for dua msgid "Duala" -msgstr "ड्युला" +msgstr "" #. name for dub msgid "Dubli" diff --git a/setup/iso_639/nb.po b/setup/iso_639/nb.po index 66527ebb47..2d86f9d25f 100644 --- a/setup/iso_639/nb.po +++ b/setup/iso_639/nb.po @@ -27790,7 +27790,7 @@ msgstr "" #. name for wln msgid "Walloon" -msgstr "Vietnamesisk" +msgstr "" #. name for wlo msgid "Wolio" diff --git a/setup/iso_639/oc.po b/setup/iso_639/oc.po index f73ce842b9..03eb65016a 100644 --- a/setup/iso_639/oc.po +++ b/setup/iso_639/oc.po @@ -9862,7 +9862,7 @@ msgstr "Hya" #. name for hye msgid "Armenian" -msgstr "Albanés" +msgstr "" #. name for iai msgid "Iaai" @@ -13762,7 +13762,7 @@ msgstr "Laba" #. name for lav msgid "Latvian" -msgstr "Lituanian" +msgstr "" #. name for law msgid "Lauje" diff --git a/setup/iso_639/ru.po b/setup/iso_639/ru.po index ecc5f756c2..b7de34435f 100644 --- a/setup/iso_639/ru.po +++ b/setup/iso_639/ru.po @@ -2089,7 +2089,7 @@ msgstr "Башкирский" #. name for bal msgid "Baluchi" -msgstr "Балийский" +msgstr "" #. name for bam msgid "Bambara" diff --git a/setup/iso_639/sk.po b/setup/iso_639/sk.po index e7e208efc4..f949e89803 100644 --- a/setup/iso_639/sk.po +++ b/setup/iso_639/sk.po @@ -13763,7 +13763,7 @@ msgstr "" #. name for lav msgid "Latvian" -msgstr "Lotyšský" +msgstr "" #. name for law msgid "Lauje" diff --git a/setup/iso_639/zh_CN.po b/setup/iso_639/zh_CN.po index fecc4d798e..cd119adb33 100644 --- a/setup/iso_639/zh_CN.po +++ b/setup/iso_639/zh_CN.po @@ -1016,7 +1016,7 @@ msgstr "" #. name for amh msgid "Amharic" -msgstr "阿拉伯语" +msgstr "" #. name for ami msgid "Amis" diff --git a/setup/translations.py b/setup/translations.py index e0a512d21c..d151e51ebc 100644 --- a/setup/translations.py +++ b/setup/translations.py @@ -18,7 +18,7 @@ def qt_sources(): 'src/gui/widgets/qdialogbuttonbox.cpp', ])) -class POT(Command): # {{{ +class POT(Command): # {{{ description = 'Update the .pot translation template' PATH = os.path.join(Command.SRC, __appname__, 'translations') @@ -63,7 +63,6 @@ class POT(Command): # {{{ return '\n'.join(ans) - def run(self, opts): pot_header = textwrap.dedent('''\ # Translation template file.. @@ -117,11 +116,10 @@ class POT(Command): # {{{ f.write(src) self.info('Translations template:', os.path.abspath(pot)) - return pot # }}} -class Translations(POT): # {{{ +class Translations(POT): # {{{ description='''Compile the translations''' DEST = os.path.join(os.path.dirname(POT.SRC), 'resources', 'localization', 'locales') @@ -134,6 +132,7 @@ class Translations(POT): # {{{ return locale, os.path.join(self.DEST, locale, 'messages.mo') def run(self, opts): + self.iso639_errors = [] for f in self.po_files(): locale, dest = self.mo_file(f) base = os.path.dirname(dest) @@ -146,18 +145,46 @@ class Translations(POT): # {{{ '%s.po'%iscpo) if os.path.exists(iso639): + self.check_iso639(iso639) dest = self.j(self.d(dest), 'iso639.mo') if self.newer(dest, iso639): - self.info('\tCopying ISO 639 translations') + self.info('\tCopying ISO 639 translations for %s' % iscpo) subprocess.check_call(['msgfmt', '-o', dest, iso639]) elif locale not in ('en_GB', 'en_CA', 'en_AU', 'si', 'ur', 'sc', 'ltg', 'nds', 'te', 'yi', 'fo', 'sq', 'ast', 'ml', 'ku', 'fr_CA', 'him', 'jv', 'ka', 'fur', 'ber'): self.warn('No ISO 639 translations for locale:', locale) + if self.iso639_errors: + for err in self.iso639_errors: + print (err) + raise SystemExit(1) + self.write_stats() self.freeze_locales() + def check_iso639(self, path): + from calibre.utils.localization import langnames_to_langcodes + with open(path, 'rb') as f: + raw = f.read() + rmap = {} + msgid = None + for match in re.finditer(r'^(msgid|msgstr)\s+"(.*?)"', raw, re.M): + if match.group(1) == 'msgid': + msgid = match.group(2) + else: + msgstr = match.group(2) + if not msgstr: + continue + omsgid = rmap.get(msgstr, None) + if omsgid is not None: + cm = langnames_to_langcodes([omsgid, msgid]) + if cm[msgid] and cm[omsgid] and cm[msgid] != cm[omsgid]: + self.iso639_errors.append('In file %s the name %s is used as translation for both %s and %s' % ( + os.path.basename(path), msgstr, msgid, rmap[msgstr])) + # raise SystemExit(1) + rmap[msgstr] = msgid + def freeze_locales(self): zf = self.DEST + '.zip' from calibre import CurrentDir @@ -191,7 +218,6 @@ class Translations(POT): # {{{ locale = self.mo_file(f)[0] stats[locale] = min(1.0, float(trans)/total) - import cPickle cPickle.dump(stats, open(dest, 'wb'), -1) @@ -211,7 +237,7 @@ class Translations(POT): # {{{ # }}} -class GetTranslations(Translations): # {{{ +class GetTranslations(Translations): # {{{ description = 'Get updated translations from Launchpad' BRANCH = 'lp:~kovid/calibre/translations' @@ -286,7 +312,7 @@ class GetTranslations(Translations): # {{{ # }}} -class ISO639(Command): # {{{ +class ISO639(Command): # {{{ description = 'Compile translations for ISO 639 codes' DEST = os.path.join(os.path.dirname(POT.SRC), 'resources', 'localization',