mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Detect errors in language name translations
This commit is contained in:
parent
740dea6671
commit
af5de01227
@ -2024,7 +2024,7 @@ msgstr "Àzeri meridional"
|
|||||||
|
|
||||||
#. name for aze
|
#. name for aze
|
||||||
msgid "Azerbaijani"
|
msgid "Azerbaijani"
|
||||||
msgstr "Serbi"
|
msgstr ""
|
||||||
|
|
||||||
#. name for azg
|
#. name for azg
|
||||||
msgid "Amuzgo; San Pedro Amuzgos"
|
msgid "Amuzgo; San Pedro Amuzgos"
|
||||||
@ -21816,7 +21816,7 @@ msgstr "Ramoaaina"
|
|||||||
|
|
||||||
#. name for raj
|
#. name for raj
|
||||||
msgid "Rajasthani"
|
msgid "Rajasthani"
|
||||||
msgstr "Marwari"
|
msgstr ""
|
||||||
|
|
||||||
#. name for rak
|
#. name for rak
|
||||||
msgid "Tulu-Bohuai"
|
msgid "Tulu-Bohuai"
|
||||||
|
@ -13762,7 +13762,7 @@ msgstr ""
|
|||||||
|
|
||||||
#. name for lav
|
#. name for lav
|
||||||
msgid "Latvian"
|
msgid "Latvian"
|
||||||
msgstr "litevština"
|
msgstr ""
|
||||||
|
|
||||||
#. name for law
|
#. name for law
|
||||||
msgid "Lauje"
|
msgid "Lauje"
|
||||||
|
@ -1429,7 +1429,7 @@ msgstr ""
|
|||||||
|
|
||||||
#. name for arg
|
#. name for arg
|
||||||
msgid "Aragonese"
|
msgid "Aragonese"
|
||||||
msgstr "Færøsk"
|
msgstr ""
|
||||||
|
|
||||||
#. name for arh
|
#. name for arh
|
||||||
msgid "Arhuaco"
|
msgid "Arhuaco"
|
||||||
|
@ -319,7 +319,7 @@ msgstr "Adangme"
|
|||||||
|
|
||||||
#. name for adb
|
#. name for adb
|
||||||
msgid "Adabe"
|
msgid "Adabe"
|
||||||
msgstr "Adangme"
|
msgstr "Adabe"
|
||||||
|
|
||||||
#. name for add
|
#. name for add
|
||||||
msgid "Dzodinka"
|
msgid "Dzodinka"
|
||||||
@ -367,7 +367,7 @@ msgstr "Adap"
|
|||||||
|
|
||||||
#. name for adq
|
#. name for adq
|
||||||
msgid "Adangbe"
|
msgid "Adangbe"
|
||||||
msgstr "Adangme"
|
msgstr "Adangbe"
|
||||||
|
|
||||||
#. name for adr
|
#. name for adr
|
||||||
msgid "Adonara"
|
msgid "Adonara"
|
||||||
|
@ -2022,7 +2022,7 @@ msgstr ""
|
|||||||
|
|
||||||
#. name for aze
|
#. name for aze
|
||||||
msgid "Azerbaijani"
|
msgid "Azerbaijani"
|
||||||
msgstr "Turkiera"
|
msgstr ""
|
||||||
|
|
||||||
#. name for azg
|
#. name for azg
|
||||||
msgid "Amuzgo; San Pedro Amuzgos"
|
msgid "Amuzgo; San Pedro Amuzgos"
|
||||||
@ -13126,7 +13126,7 @@ msgstr ""
|
|||||||
|
|
||||||
#. name for kur
|
#. name for kur
|
||||||
msgid "Kurdish"
|
msgid "Kurdish"
|
||||||
msgstr "Turkiera"
|
msgstr ""
|
||||||
|
|
||||||
#. name for kus
|
#. name for kus
|
||||||
msgid "Kusaal"
|
msgid "Kusaal"
|
||||||
@ -16190,7 +16190,7 @@ msgstr ""
|
|||||||
|
|
||||||
#. name for mlt
|
#. name for mlt
|
||||||
msgid "Maltese"
|
msgid "Maltese"
|
||||||
msgstr "Koreera"
|
msgstr ""
|
||||||
|
|
||||||
#. name for mlu
|
#. name for mlu
|
||||||
msgid "To'abaita"
|
msgid "To'abaita"
|
||||||
|
@ -13764,7 +13764,7 @@ msgstr "Laba"
|
|||||||
|
|
||||||
#. name for lav
|
#. name for lav
|
||||||
msgid "Latvian"
|
msgid "Latvian"
|
||||||
msgstr "Lituano"
|
msgstr ""
|
||||||
|
|
||||||
#. name for law
|
#. name for law
|
||||||
msgid "Lauje"
|
msgid "Lauje"
|
||||||
@ -22212,7 +22212,7 @@ msgstr "Roglai do norte"
|
|||||||
|
|
||||||
#. name for roh
|
#. name for roh
|
||||||
msgid "Romansh"
|
msgid "Romansh"
|
||||||
msgstr "Romanés"
|
msgstr ""
|
||||||
|
|
||||||
#. name for rol
|
#. name for rol
|
||||||
msgid "Romblomanon"
|
msgid "Romblomanon"
|
||||||
|
@ -20538,7 +20538,7 @@ msgstr ""
|
|||||||
|
|
||||||
#. name for peo
|
#. name for peo
|
||||||
msgid "Persian; Old (ca. 600-400 B.C.)"
|
msgid "Persian; Old (ca. 600-400 B.C.)"
|
||||||
msgstr "perzsa"
|
msgstr ""
|
||||||
|
|
||||||
#. name for pep
|
#. name for pep
|
||||||
msgid "Kunja"
|
msgid "Kunja"
|
||||||
|
@ -15049,7 +15049,7 @@ msgstr "Magahi"
|
|||||||
|
|
||||||
#. name for mah
|
#. name for mah
|
||||||
msgid "Marshallese"
|
msgid "Marshallese"
|
||||||
msgstr "Maltneska"
|
msgstr ""
|
||||||
|
|
||||||
#. name for mai
|
#. name for mai
|
||||||
msgid "Maithili"
|
msgid "Maithili"
|
||||||
|
@ -3742,7 +3742,7 @@ msgstr ""
|
|||||||
|
|
||||||
#. name for bre
|
#. name for bre
|
||||||
msgid "Breton"
|
msgid "Breton"
|
||||||
msgstr "프랑스어"
|
msgstr ""
|
||||||
|
|
||||||
#. name for brf
|
#. name for brf
|
||||||
msgid "Bera"
|
msgid "Bera"
|
||||||
|
@ -6804,7 +6804,7 @@ msgstr "डोगोन; तेबुल उरे"
|
|||||||
|
|
||||||
#. name for dua
|
#. name for dua
|
||||||
msgid "Duala"
|
msgid "Duala"
|
||||||
msgstr "ड्युला"
|
msgstr ""
|
||||||
|
|
||||||
#. name for dub
|
#. name for dub
|
||||||
msgid "Dubli"
|
msgid "Dubli"
|
||||||
|
@ -27790,7 +27790,7 @@ msgstr ""
|
|||||||
|
|
||||||
#. name for wln
|
#. name for wln
|
||||||
msgid "Walloon"
|
msgid "Walloon"
|
||||||
msgstr "Vietnamesisk"
|
msgstr ""
|
||||||
|
|
||||||
#. name for wlo
|
#. name for wlo
|
||||||
msgid "Wolio"
|
msgid "Wolio"
|
||||||
|
@ -9862,7 +9862,7 @@ msgstr "Hya"
|
|||||||
|
|
||||||
#. name for hye
|
#. name for hye
|
||||||
msgid "Armenian"
|
msgid "Armenian"
|
||||||
msgstr "Albanés"
|
msgstr ""
|
||||||
|
|
||||||
#. name for iai
|
#. name for iai
|
||||||
msgid "Iaai"
|
msgid "Iaai"
|
||||||
@ -13762,7 +13762,7 @@ msgstr "Laba"
|
|||||||
|
|
||||||
#. name for lav
|
#. name for lav
|
||||||
msgid "Latvian"
|
msgid "Latvian"
|
||||||
msgstr "Lituanian"
|
msgstr ""
|
||||||
|
|
||||||
#. name for law
|
#. name for law
|
||||||
msgid "Lauje"
|
msgid "Lauje"
|
||||||
|
@ -2089,7 +2089,7 @@ msgstr "Башкирский"
|
|||||||
|
|
||||||
#. name for bal
|
#. name for bal
|
||||||
msgid "Baluchi"
|
msgid "Baluchi"
|
||||||
msgstr "Балийский"
|
msgstr ""
|
||||||
|
|
||||||
#. name for bam
|
#. name for bam
|
||||||
msgid "Bambara"
|
msgid "Bambara"
|
||||||
|
@ -13763,7 +13763,7 @@ msgstr ""
|
|||||||
|
|
||||||
#. name for lav
|
#. name for lav
|
||||||
msgid "Latvian"
|
msgid "Latvian"
|
||||||
msgstr "Lotyšský"
|
msgstr ""
|
||||||
|
|
||||||
#. name for law
|
#. name for law
|
||||||
msgid "Lauje"
|
msgid "Lauje"
|
||||||
|
@ -1016,7 +1016,7 @@ msgstr ""
|
|||||||
|
|
||||||
#. name for amh
|
#. name for amh
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
msgstr "阿拉伯语"
|
msgstr ""
|
||||||
|
|
||||||
#. name for ami
|
#. name for ami
|
||||||
msgid "Amis"
|
msgid "Amis"
|
||||||
|
@ -63,7 +63,6 @@ class POT(Command): # {{{
|
|||||||
|
|
||||||
return '\n'.join(ans)
|
return '\n'.join(ans)
|
||||||
|
|
||||||
|
|
||||||
def run(self, opts):
|
def run(self, opts):
|
||||||
pot_header = textwrap.dedent('''\
|
pot_header = textwrap.dedent('''\
|
||||||
# Translation template file..
|
# Translation template file..
|
||||||
@ -117,7 +116,6 @@ class POT(Command): # {{{
|
|||||||
f.write(src)
|
f.write(src)
|
||||||
self.info('Translations template:', os.path.abspath(pot))
|
self.info('Translations template:', os.path.abspath(pot))
|
||||||
|
|
||||||
|
|
||||||
return pot
|
return pot
|
||||||
# }}}
|
# }}}
|
||||||
|
|
||||||
@ -134,6 +132,7 @@ class Translations(POT): # {{{
|
|||||||
return locale, os.path.join(self.DEST, locale, 'messages.mo')
|
return locale, os.path.join(self.DEST, locale, 'messages.mo')
|
||||||
|
|
||||||
def run(self, opts):
|
def run(self, opts):
|
||||||
|
self.iso639_errors = []
|
||||||
for f in self.po_files():
|
for f in self.po_files():
|
||||||
locale, dest = self.mo_file(f)
|
locale, dest = self.mo_file(f)
|
||||||
base = os.path.dirname(dest)
|
base = os.path.dirname(dest)
|
||||||
@ -146,18 +145,46 @@ class Translations(POT): # {{{
|
|||||||
'%s.po'%iscpo)
|
'%s.po'%iscpo)
|
||||||
|
|
||||||
if os.path.exists(iso639):
|
if os.path.exists(iso639):
|
||||||
|
self.check_iso639(iso639)
|
||||||
dest = self.j(self.d(dest), 'iso639.mo')
|
dest = self.j(self.d(dest), 'iso639.mo')
|
||||||
if self.newer(dest, iso639):
|
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])
|
subprocess.check_call(['msgfmt', '-o', dest, iso639])
|
||||||
elif locale not in ('en_GB', 'en_CA', 'en_AU', 'si', 'ur', 'sc',
|
elif locale not in ('en_GB', 'en_CA', 'en_AU', 'si', 'ur', 'sc',
|
||||||
'ltg', 'nds', 'te', 'yi', 'fo', 'sq', 'ast', 'ml', 'ku',
|
'ltg', 'nds', 'te', 'yi', 'fo', 'sq', 'ast', 'ml', 'ku',
|
||||||
'fr_CA', 'him', 'jv', 'ka', 'fur', 'ber'):
|
'fr_CA', 'him', 'jv', 'ka', 'fur', 'ber'):
|
||||||
self.warn('No ISO 639 translations for locale:', locale)
|
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.write_stats()
|
||||||
self.freeze_locales()
|
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):
|
def freeze_locales(self):
|
||||||
zf = self.DEST + '.zip'
|
zf = self.DEST + '.zip'
|
||||||
from calibre import CurrentDir
|
from calibre import CurrentDir
|
||||||
@ -191,7 +218,6 @@ class Translations(POT): # {{{
|
|||||||
locale = self.mo_file(f)[0]
|
locale = self.mo_file(f)[0]
|
||||||
stats[locale] = min(1.0, float(trans)/total)
|
stats[locale] = min(1.0, float(trans)/total)
|
||||||
|
|
||||||
|
|
||||||
import cPickle
|
import cPickle
|
||||||
cPickle.dump(stats, open(dest, 'wb'), -1)
|
cPickle.dump(stats, open(dest, 'wb'), -1)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user