2020-05-07 00:47:09 +00:00
|
|
|
|
#!/usr/bin/python3
|
|
|
|
|
|
2020-05-11 04:02:44 +00:00
|
|
|
|
import gettext
|
2020-05-07 00:47:09 +00:00
|
|
|
|
import glob
|
|
|
|
|
import gzip
|
|
|
|
|
import os
|
2020-05-11 04:02:44 +00:00
|
|
|
|
import sys
|
2020-05-07 00:47:09 +00:00
|
|
|
|
|
2020-05-11 04:02:44 +00:00
|
|
|
|
DATA_PATH = '/usr/share/localechooser/languagelist.data.gz'
|
2020-05-07 00:47:09 +00:00
|
|
|
|
|
2020-05-11 04:36:42 +00:00
|
|
|
|
lang_dir = 'po'
|
|
|
|
|
if len(sys.argv) > 1:
|
|
|
|
|
lang_dir = sys.argv[1]
|
|
|
|
|
|
2020-05-07 00:47:09 +00:00
|
|
|
|
translations = set()
|
2020-05-11 04:36:42 +00:00
|
|
|
|
for fname in glob.glob('{}/*.po'.format(lang_dir)):
|
2020-05-07 00:47:09 +00:00
|
|
|
|
translations.add(os.path.splitext(os.path.basename(fname))[0])
|
|
|
|
|
|
2020-05-11 04:36:42 +00:00
|
|
|
|
if not translations:
|
|
|
|
|
print("found no languages", file=sys.stderr)
|
|
|
|
|
sys.exit(1)
|
2020-05-11 04:02:44 +00:00
|
|
|
|
|
|
|
|
|
langs = [
|
|
|
|
|
('console', 'en_US', 'English'),
|
|
|
|
|
('console', 'en_GB', 'English (UK)'),
|
|
|
|
|
('ssh', 'kab', 'Tamaziɣt Taqbaylit'),
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
for level, code, name in langs:
|
|
|
|
|
if code in translations:
|
|
|
|
|
translations.remove(code)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def kind_for_level(level):
|
|
|
|
|
if int(level) <= 2:
|
|
|
|
|
return "console"
|
|
|
|
|
else:
|
|
|
|
|
return "ssh"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
with gzip.open(DATA_PATH, mode='rt') as data:
|
|
|
|
|
for line in data:
|
|
|
|
|
level, code, name, desc = line.strip().split(':')
|
|
|
|
|
if code not in translations:
|
|
|
|
|
continue
|
|
|
|
|
langs.append((kind_for_level(level), code, desc))
|
|
|
|
|
translations.remove(code)
|
|
|
|
|
|
|
|
|
|
with gzip.open(DATA_PATH, mode='rt') as data:
|
|
|
|
|
for line in data:
|
|
|
|
|
level, code, name, desc = line.strip().split(':')
|
|
|
|
|
code = code.split("_", 1)[0]
|
|
|
|
|
if code not in translations:
|
|
|
|
|
continue
|
|
|
|
|
level = int(level)
|
|
|
|
|
langs.append((kind_for_level(level), code, desc))
|
|
|
|
|
translations.remove(code)
|
|
|
|
|
|
|
|
|
|
for code in translations:
|
|
|
|
|
if gettext.find('iso_639_3', languages=[code]):
|
|
|
|
|
native_lang = gettext.translation('iso_639_3', languages=[code])
|
|
|
|
|
native = native_lang.gettext(name).capitalize()
|
|
|
|
|
langs.append(('ssh', code, native))
|
|
|
|
|
else:
|
2020-05-11 04:36:42 +00:00
|
|
|
|
print('do not know native name for {}'.format(code), file=sys.stderr)
|
2020-05-11 04:02:44 +00:00
|
|
|
|
sys.exit(1)
|
|
|
|
|
|
2020-05-11 04:36:42 +00:00
|
|
|
|
for level, code, name in langs:
|
|
|
|
|
sys.stdout.write("{}:{}:{}\n".format(level, code, name))
|