Merge pull request #762 from mwhudson/better-language-lists
make language list at snap build time
This commit is contained in:
commit
6b0428b095
|
@ -0,0 +1,28 @@
|
|||
console:en_US:English
|
||||
console:en_GB:English (UK)
|
||||
ssh:kab:Tamaziɣt Taqbaylit
|
||||
console:ca:Català
|
||||
ssh:zh_CN:中文(简体)
|
||||
console:hr:Hrvatski
|
||||
console:cs:Čeština
|
||||
console:ast:Asturianu
|
||||
console:be:Беларуская
|
||||
console:nl:Nederlands
|
||||
console:fi:Suomi
|
||||
console:fr:Français
|
||||
console:de:Deutsch
|
||||
console:el:Ελληνικά
|
||||
ssh:he:עברית
|
||||
console:hu:Magyar
|
||||
console:id:Bahasa Indonesia
|
||||
console:lv:Latviski
|
||||
console:lt:Lietuviškai
|
||||
console:pl:Polski
|
||||
console:ru:Русский
|
||||
console:sr:Српски
|
||||
console:es:Español
|
||||
console:sv:Svenska
|
||||
ssh:bo:བོད་ཡིག
|
||||
console:uk:Українська
|
||||
console:nb:Norsk bokmål
|
||||
ssh:oc:Galés
|
|
@ -0,0 +1,69 @@
|
|||
#!/usr/bin/python3
|
||||
|
||||
import gettext
|
||||
import glob
|
||||
import gzip
|
||||
import os
|
||||
import sys
|
||||
|
||||
DATA_PATH = '/usr/share/localechooser/languagelist.data.gz'
|
||||
|
||||
lang_dir = 'po'
|
||||
if len(sys.argv) > 1:
|
||||
lang_dir = sys.argv[1]
|
||||
|
||||
translations = set()
|
||||
for fname in glob.glob('{}/*.po'.format(lang_dir)):
|
||||
translations.add(os.path.splitext(os.path.basename(fname))[0])
|
||||
|
||||
if not translations:
|
||||
print("found no languages", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
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:
|
||||
print('do not know native name for {}'.format(code), file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
for level, code, name in langs:
|
||||
sys.stdout.write("{}:{}:{}\n".format(level, code, name))
|
|
@ -122,6 +122,14 @@ parts:
|
|||
font/subiquity.psf: subiquity.psf
|
||||
stage:
|
||||
- subiquity.psf
|
||||
languagelists:
|
||||
plugin: nil
|
||||
build-packages:
|
||||
- localechooser-data
|
||||
override-build: |
|
||||
$SNAPCRAFT_PROJECT_DIR/scripts/make-language-lists $SNAPCRAFT_PROJECT_DIR/po > $SNAPCRAFT_PART_INSTALL/languagelist
|
||||
stage:
|
||||
- languagelist
|
||||
probert:
|
||||
plugin: python
|
||||
build-packages: [python-setuptools, libnl-3-dev, libnl-genl-3-dev, libnl-route-3-dev]
|
||||
|
|
|
@ -39,9 +39,10 @@ class WelcomeController(SubiquityController):
|
|||
lang = os.environ.get("LANG")
|
||||
if lang is not None and lang.endswith(".UTF-8"):
|
||||
lang = lang.rsplit('.', 1)[0]
|
||||
for code, name in self.model.supported_languages:
|
||||
for code, name in self.model.get_languages(self.app.is_linux_tty):
|
||||
if code == lang:
|
||||
self.model.switch_language(code)
|
||||
break
|
||||
else:
|
||||
self.model.selected_language = lang
|
||||
|
||||
|
|
|
@ -14,8 +14,8 @@
|
|||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import logging
|
||||
import os
|
||||
|
||||
from subiquitycore import gettext38
|
||||
from subiquitycore import i18n
|
||||
|
||||
|
||||
|
@ -28,36 +28,20 @@ class LocaleModel(object):
|
|||
XXX Only represents *language* selection for now.
|
||||
"""
|
||||
|
||||
supported_languages = [
|
||||
('en_US', 'English'),
|
||||
('ast_ES', 'Asturian'),
|
||||
('ca_EN', 'Catalan'),
|
||||
('hr_HR', 'Croatian'),
|
||||
('nl_NL', 'Dutch'),
|
||||
('fi_FI', 'Finnish'),
|
||||
('fr_FR', 'French'),
|
||||
('de_DE', 'German'),
|
||||
('el_GR', 'Greek, Modern (1453-)'),
|
||||
# ('he_IL', 'Hebrew'), # noqa: disabled as it does not render correctly on a vt with default font
|
||||
('hu_HU', 'Hungarian'),
|
||||
('lv_LV', 'Latvian'),
|
||||
('nb_NO', 'Norsk bokmål'), # noqa: iso_639_3 for nb does not translate Norwgian
|
||||
('pl_PL', 'Polish'),
|
||||
('ru_RU', 'Russian'),
|
||||
('es_ES', 'Spanish'),
|
||||
('uk_UA', 'Ukrainian'),
|
||||
]
|
||||
selected_language = None
|
||||
|
||||
def get_languages(self):
|
||||
def get_languages(self, is_linux_tty):
|
||||
base = os.environ.get("SNAP", ".")
|
||||
lang_path = os.path.join(base, "languagelist")
|
||||
|
||||
languages = []
|
||||
for code, name in self.supported_languages:
|
||||
native = name
|
||||
if gettext38.find('iso_639_3', languages=[code]):
|
||||
native_lang = gettext38.translation('iso_639_3',
|
||||
languages=[code])
|
||||
native = native_lang.gettext(name).capitalize()
|
||||
languages.append((code, native))
|
||||
with open(lang_path) as lang_file:
|
||||
for line in lang_file:
|
||||
level, code, name = line.strip().split(':')
|
||||
if is_linux_tty and level != "console":
|
||||
continue
|
||||
languages.append((code, name))
|
||||
languages.sort(key=lambda x: x[1])
|
||||
return languages
|
||||
|
||||
def switch_language(self, code):
|
||||
|
|
|
@ -101,7 +101,8 @@ This is version {snap_version} of the installer.
|
|||
|
||||
SSH_HELP_PROLOGUE = _("""
|
||||
It is possible to connect to the installer over the network, which
|
||||
might allow the use of a more capable terminal.""")
|
||||
might allow the use of a more capable terminal and can offer more languages
|
||||
than can be rendered in the Linux console.""")
|
||||
|
||||
SSH_HELP_MULTIPLE_ADDRESSES = _("""
|
||||
To connect, SSH to any of these addresses:
|
||||
|
|
|
@ -10,6 +10,8 @@ from subiquity.ui.views.welcome import WelcomeView
|
|||
|
||||
|
||||
class FakeApp:
|
||||
is_linux_tty = True
|
||||
|
||||
class opts:
|
||||
run_on_serial = False
|
||||
|
||||
|
|
|
@ -64,6 +64,7 @@ class WelcomeView(BaseView):
|
|||
def __init__(self, model, controller):
|
||||
self.model = model
|
||||
self.controller = controller
|
||||
self.is_linux_tty = controller.app.is_linux_tty
|
||||
if controller.app.opts.run_on_serial and not controller.app.rich_mode:
|
||||
s = self.make_serial_choices()
|
||||
self.title = "Welcome!"
|
||||
|
@ -74,8 +75,14 @@ class WelcomeView(BaseView):
|
|||
def make_language_choices(self):
|
||||
btns = []
|
||||
current_index = None
|
||||
for i, (code, native) in enumerate(self.model.get_languages()):
|
||||
if code == self.model.selected_language:
|
||||
langs = self.model.get_languages(self.is_linux_tty)
|
||||
cur = self.model.selected_language
|
||||
log.debug("_build_model_inputs selected_language=%s", cur)
|
||||
if cur in ["C", None]:
|
||||
cur = "en_US"
|
||||
for i, (code, native) in enumerate(langs):
|
||||
log.debug("%s", (code, self.model.selected_language))
|
||||
if code == cur:
|
||||
current_index = i
|
||||
btns.append(
|
||||
forward_btn(
|
||||
|
|
Loading…
Reference in New Issue