Provide nationalization (#893)

* Nationalization

* Add _ as builtins to flake8

* Removing conflict hash tag

Co-authored-by: Daniel Girtler <girtler.daniel@gmail.com>
Co-authored-by: Anton Hvornum <anton@hvornum.se>
This commit is contained in:
Daniel 2022-02-05 10:27:29 +11:00 committed by GitHub
parent 68c2988358
commit f6d133804b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
16 changed files with 2575 additions and 93 deletions

View File

@ -6,4 +6,5 @@ max-complexity = 40
max-line-length = 236
show-source = True
statistics = True
per-file-ignores = __init__.py:F401,F403,F405 simple_menu.py:C901,W503 guided.py:C901
per-file-ignores = __init__.py:F401,F403,F405 simple_menu.py:C901,W503 guided.py:C901
builtins = _

View File

@ -36,6 +36,7 @@ from .lib.systemd import *
from .lib.user_interaction import *
from .lib.menu import Menu
from .lib.menu.selection_menu import GlobalMenu
from .lib.translation import Translation
from .lib.plugins import plugins, load_plugin # This initiates the plugin loading ceremony
parser = ArgumentParser()

View File

@ -27,6 +27,8 @@ from ..user_interaction import select_kernel
from ..user_interaction import select_encrypted_partitions
from ..user_interaction import select_harddrives
from ..user_interaction import select_profile
from ..user_interaction import select_archinstall_language
from ..translation import Translation
class Selector:
def __init__(
@ -128,29 +130,36 @@ class Selector:
class GlobalMenu:
def __init__(self):
self._translation = Translation.load_nationalization()
self._menu_options = {}
self._setup_selection_menu_options()
def _setup_selection_menu_options(self):
self._menu_options['archinstall-language'] = \
Selector(
_('Select Archinstall language'),
lambda: self._select_archinstall_language('English'),
default='English',
enabled=True)
self._menu_options['keyboard-layout'] = \
Selector('Select keyboard layout', lambda: select_language('us'), default='us')
Selector(_('Select keyboard layout'), lambda: select_language('us'), default='us')
self._menu_options['mirror-region'] = \
Selector(
'Select mirror region',
_('Select mirror region'),
lambda: select_mirror_regions(),
display_func=lambda x: list(x.keys()) if x else '[]',
default={})
self._menu_options['sys-language'] = \
Selector('Select locale language', lambda: select_locale_lang('en_US'), default='en_US')
Selector(_('Select locale language'), lambda: select_locale_lang('en_US'), default='en_US')
self._menu_options['sys-encoding'] = \
Selector('Select locale encoding', lambda: select_locale_enc('utf-8'), default='utf-8')
Selector(_('Select locale encoding'), lambda: select_locale_enc('utf-8'), default='utf-8')
self._menu_options['harddrives'] = \
Selector(
'Select harddrives',
_('Select harddrives'),
lambda: self._select_harddrives())
self._menu_options['disk_layouts'] = \
Selector(
'Select disk layout',
_('Select disk layout'),
lambda: select_disk_layout(
storage['arguments'].get('harddrives', []),
storage['arguments'].get('advanced', False)
@ -158,60 +167,60 @@ class GlobalMenu:
dependencies=['harddrives'])
self._menu_options['!encryption-password'] = \
Selector(
'Set encryption password',
_('Set encryption password'),
lambda: get_password(prompt='Enter disk encryption password (leave blank for no encryption): '),
display_func=lambda x: self._secret(x) if x else 'None',
dependencies=['harddrives'])
self._menu_options['swap'] = \
Selector(
'Use swap',
_('Use swap'),
lambda: ask_for_swap(),
default=True)
self._menu_options['bootloader'] = \
Selector(
'Select bootloader',
_('Select bootloader'),
lambda: ask_for_bootloader(storage['arguments'].get('advanced', False)),)
self._menu_options['hostname'] = \
Selector('Specify hostname', lambda: ask_hostname())
self._menu_options['!root-password'] = \
Selector(
'Set root password',
_('Set root password'),
lambda: self._set_root_password(),
display_func=lambda x: self._secret(x) if x else 'None')
self._menu_options['!superusers'] = \
Selector(
'Specify superuser account',
_('Specify superuser account'),
lambda: self._create_superuser_account(),
dependencies_not=['!root-password'],
display_func=lambda x: list(x.keys()) if x else '')
self._menu_options['!users'] = \
Selector(
'Specify user account',
_('Specify user account'),
lambda: self._create_user_account(),
default={},
display_func=lambda x: list(x.keys()) if x else '[]')
self._menu_options['profile'] = \
Selector(
'Specify profile',
_('Specify profile'),
lambda: self._select_profile(),
display_func=lambda x: x if x else 'None')
self._menu_options['audio'] = \
Selector(
'Select audio',
_('Select audio'),
lambda: ask_for_audio_selection(is_desktop_profile(storage['arguments'].get('profile', None))))
self._menu_options['kernels'] = \
Selector(
'Select kernels',
_('Select kernels'),
lambda: select_kernel(),
default=['linux'])
self._menu_options['packages'] = \
Selector(
'Additional packages to install',
_('Additional packages to install'),
lambda: ask_additional_packages_to_install(storage['arguments'].get('packages', None)),
default=[])
self._menu_options['nic'] = \
Selector(
'Configure network',
_('Configure network'),
lambda: ask_to_configure_network(),
display_func=lambda x: x if x else 'Not configured, unavailable unless setup manually',
default={})
@ -219,7 +228,7 @@ class GlobalMenu:
Selector('Select timezone', lambda: ask_for_a_timezone())
self._menu_options['ntp'] = \
Selector(
'Set automatic time sync (NTP)',
_('Set automatic time sync (NTP)'),
lambda: self._select_ntp(),
default=True)
self._menu_options['install'] = \
@ -323,6 +332,11 @@ class GlobalMenu:
return missing
def _select_archinstall_language(self, default_lang):
language = select_archinstall_language(default_lang)
self._translation.activate(language)
return language
def _set_root_password(self):
prompt = 'Enter root password (leave blank to disable root & create superuser): '
password = get_password(prompt=prompt)

View File

@ -0,0 +1,82 @@
from __future__ import annotations
import json
import os
import gettext
from pathlib import Path
from typing import List, Dict
class Languages:
def __init__(self):
self._mappings = self._get_language_mappings()
def _get_language_mappings(self) -> List[Dict[str, str]]:
locales_dir = Translation.get_locales_dir()
languages = Path.joinpath(locales_dir, 'languages.json')
with open(languages, 'r') as fp:
return json.load(fp)
def get_language(self, abbr: str) -> str:
for entry in self._mappings:
if entry['abbr'] == abbr:
return entry['lang']
raise ValueError(f'No language with abbrevation "{abbr}" found')
class DeferredTranslation:
def __init__(self, message):
self.message = message
def __len__(self) -> int:
return len(self.message)
def __str__(self) -> str:
translate = _
if translate is DeferredTranslation:
return self.message
return translate(self.message)
@classmethod
def install(cls):
import builtins
builtins._ = cls
class Translation:
def __init__(self, locales_dir):
DeferredTranslation.install()
self._languages = {}
for name in self.get_all_names():
self._languages[name] = gettext.translation('base', localedir=locales_dir, languages=[name])
def activate(self, name):
if language := self._languages.get(name, None):
language.install()
else:
raise ValueError(f'Language not supported: {name}')
@classmethod
def load_nationalization(cls) -> Translation:
locales_dir = cls.get_locales_dir()
return Translation(locales_dir)
@classmethod
def get_locales_dir(cls) -> Path:
cur_path = Path(__file__).parent.parent
locales_dir = Path.joinpath(cur_path, 'locales')
return locales_dir
@classmethod
def get_all_names(cls) -> List[str]:
locales_dir = cls.get_locales_dir()
filenames = os.listdir(locales_dir)
def_languages = filter(lambda x: len(x) == 2, filenames)
languages = Languages()
return [languages.get_language(lang) for lang in def_languages]

View File

@ -28,6 +28,7 @@ from .mirrors import list_mirrors
# TODO: Some inconsistencies between the selection processes.
# Some return the keys from the options, some the values?
from .translation import Translation
from .disk.validators import fs_types
from .packages.packages import validate_package_list
@ -79,7 +80,7 @@ def do_countdown() -> bool:
print(".", end='')
if SIG_TRIGGER:
prompt = 'Do you really want to abort'
prompt = _('Do you really want to abort?')
choice = Menu(prompt, ['yes', 'no'], skip=False).run()
if choice == 'yes':
exit(0)
@ -97,7 +98,7 @@ def do_countdown() -> bool:
def get_password(prompt :str = "Enter a password: ") -> Optional[str]:
while passwd := getpass.getpass(prompt):
passwd_verification = getpass.getpass(prompt='And one more time for verification: ')
passwd_verification = getpass.getpass(prompt=_('And one more time for verification: '))
if passwd != passwd_verification:
log(' * Passwords did not match * ', fg='red')
continue
@ -267,24 +268,26 @@ class MiniCurses:
return response
def ask_for_swap(prompt='Would you like to use swap on zram?', forced=False):
def ask_for_swap():
prompt = _('Would you like to use swap on zram?')
choice = Menu(prompt, ['yes', 'no'], default_option='yes').run()
return False if choice == 'no' else True
def ask_ntp() -> bool:
prompt = 'Would you like to use automatic time synchronization (NTP) with the default time servers?'
prompt += 'Hardware time and other post-configuration steps might be required in order for NTP to work. For more information, please check the Arch wiki'
prompt = _('Would you like to use automatic time synchronization (NTP) with the default time servers?')
prompt += _('Hardware time and other post-configuration steps might be required in order for NTP to work. For more information, please check the Arch wiki')
choice = Menu(prompt, ['yes', 'no'], skip=False, default_option='yes').run()
return False if choice == 'no' else True
def ask_hostname():
hostname = input('Desired hostname for the installation: ').strip(' ')
hostname = input(_('Desired hostname for the installation: ').strip(' '))
return hostname
def ask_for_superuser_account(prompt :str = 'Username for required superuser with sudo privileges: ', forced :bool = False) -> Dict[str, Dict[str, str]]:
def ask_for_superuser_account(prompt :str = '', forced :bool = False) -> Dict[str, Dict[str, str]]:
prompt = prompt if prompt else _('Username for required superuser with sudo privileges: ')
while 1:
new_user = input(prompt).strip(' ')
@ -298,11 +301,13 @@ def ask_for_superuser_account(prompt :str = 'Username for required superuser wit
elif not check_for_correct_username(new_user):
continue
password = get_password(prompt=f'Password for user {new_user}: ')
prompt = _('Password for user "{}"').format(new_user)
password = get_password(prompt=prompt)
return {new_user: {"!password": password}}
def ask_for_additional_users(prompt :str = 'Any additional users to install (leave blank for no users): ') -> List[Dict[str, Dict[str, str]]]:
def ask_for_additional_users(prompt :str = '') -> tuple[dict[str, dict[str, str | None]], dict[str, dict[str, str | None]]]:
prompt = prompt if prompt else _('Any additional users to install (leave blank for no users): ')
users = {}
superusers = {}
@ -312,9 +317,14 @@ def ask_for_additional_users(prompt :str = 'Any additional users to install (lea
break
if not check_for_correct_username(new_user):
continue
password = get_password(prompt=f'Password for user {new_user}: ')
if input("Should this user be a superuser (sudoer) [y/N]: ").strip(' ').lower() in ('y', 'yes'):
prompt = _('Password for user "{}"').format(new_user)
password = get_password(prompt=prompt)
prompt = _('Should this user be a superuser (sudoer)?')
choice = Menu(prompt, ['yes', 'no'], skip=False, default_option='no').run()
if choice == 'yes':
superusers[new_user] = {"!password": password}
else:
users[new_user] = {"!password": password}
@ -322,12 +332,12 @@ def ask_for_additional_users(prompt :str = 'Any additional users to install (lea
return users, superusers
def ask_for_a_timezone() -> str:
def ask_timezone() -> str:
timezones = list_timezones()
default = 'UTC'
selected_tz = Menu(
f'Select a timezone or leave blank to use default "{default}"',
_('Select a timezone'),
list(timezones),
skip=False,
default_option=default
@ -340,13 +350,18 @@ def ask_for_bootloader(advanced_options :bool = False) -> str:
bootloader = "systemd-bootctl" if has_uefi() else "grub-install"
if has_uefi():
if not advanced_options:
bootloader_choice = Menu('Would you like to use GRUB as a bootloader instead of systemd-boot?', ['yes', 'no'], default_option='no').run()
bootloader_choice = Menu(
_('Would you like to use GRUB as a bootloader instead of systemd-boot?'),
['yes', 'no'],
default_option='no'
).run()
if bootloader_choice == "yes":
bootloader = "grub-install"
else:
# We use the common names for the bootloader as the selection, and map it back to the expected values.
choices = ['systemd-boot', 'grub', 'efistub']
selection = Menu('Choose a bootloader or leave blank to use systemd-boot', choices).run()
selection = Menu(_('Choose a bootloader'), choices).run()
if selection != "":
if selection == 'systemd-boot':
bootloader = 'systemd-bootctl'
@ -362,7 +377,7 @@ def ask_for_audio_selection(desktop :bool = True) -> str:
audio = 'pipewire' if desktop else 'none'
choices = ['pipewire', 'pulseaudio'] if desktop else ['pipewire', 'pulseaudio', 'none']
selected_audio = Menu(
f'Choose an audio server',
_('Choose an audio server'),
choices,
default_option=audio,
skip=False
@ -373,14 +388,13 @@ def ask_for_audio_selection(desktop :bool = True) -> str:
# TODO: Remove? Moved?
def ask_additional_packages_to_install(packages :List[str] = None) -> List[str]:
# Additional packages (with some light weight error handling for invalid package names)
print(
"Only packages such as base, base-devel, linux, linux-firmware, efibootmgr and optional profile packages are installed.")
print("If you desire a web browser, such as firefox or chromium, you may specify it in the following prompt.")
print(_('Only packages such as base, base-devel, linux, linux-firmware, efibootmgr and optional profile packages are installed.'))
print(_('If you desire a web browser, such as firefox or chromium, you may specify it in the following prompt.'))
while True:
if packages is None:
packages = [p for p in input(
'Write additional packages to install (space separated, leave blank to skip): '
).split(' ') if len(p)]
packages = [p for p in input(
_('Write additional packages to install (space separated, leave blank to skip): ')
).split(' ') if len(p)]
if len(packages):
# Verify packages that were given
@ -401,16 +415,20 @@ def ask_to_configure_network() -> Dict[str, Any]:
# Optionally configure one network interface.
# while 1:
# {MAC: Ifname}
iso_config = _('Copy ISO network configuration to installation')
network_manager = _('Use NetworkManager (necessary to configure internet graphically in GNOME and KDE)')
interfaces = {
'ISO-CONFIG': 'Copy ISO network configuration to installation',
'NetworkManager': 'Use NetworkManager (necessary to configure internet graphically in GNOME and KDE)',
'ISO-CONFIG': iso_config,
'NetworkManager': network_manager,
**list_interfaces()
}
nic = Menu('Select one network interface to configure', list(interfaces.values())).run()
nic = Menu(_('Select one network interface to configure'), list(interfaces.values())).run()
if nic and nic != 'Copy ISO network configuration to installation':
if nic == 'Use NetworkManager (necessary to configure internet graphically in GNOME and KDE)':
if nic and nic != iso_config:
if nic == network_manager:
return {'nic': nic, 'NetworkManager': True}
# Current workaround:
@ -420,15 +438,13 @@ def ask_to_configure_network() -> Dict[str, Any]:
modes = ['DHCP (auto detect)', 'IP (static)']
default_mode = 'DHCP (auto detect)'
mode = Menu(
f'Select which mode to configure for "{nic}" or leave blank for default "{default_mode}"',
modes,
default_option=default_mode
).run()
prompt = _('Select which mode to configure for "{}" or skip to use default mode "{}"').format(nic, default_mode)
mode = Menu(prompt, modes, default_option=default_mode).run()
if mode == 'IP (static)':
while 1:
ip = input(f"Enter the IP and subnet for {nic} (example: 192.168.0.5/24): ").strip()
prompt = _('Enter the IP and subnet for {} (example: 192.168.0.5/24): ').format(nic)
ip = input(prompt).strip()
# Implemented new check for correct IP/subnet input
try:
ipaddress.ip_interface(ip)
@ -442,7 +458,7 @@ def ask_to_configure_network() -> Dict[str, Any]:
# Implemented new check for correct gateway IP address
while 1:
gateway = input('Enter your gateway (router) IP address or leave blank for none: ').strip()
gateway = input(_('Enter your gateway (router) IP address or leave blank for none: ')).strip()
try:
if len(gateway) == 0:
gateway = None
@ -457,7 +473,9 @@ def ask_to_configure_network() -> Dict[str, Any]:
)
dns = None
if len(dns_input := input('Enter your DNS servers (space separated, blank for none): ').strip()):
dns_input = input(_('Enter your DNS servers (space separated, blank for none): ')).strip()
if len(dns_input):
dns = dns_input.split(' ')
return {'nic': nic, 'dhcp': False, 'ip': ip, 'gateway': gateway, 'dns': dns}
@ -489,7 +507,9 @@ def ask_for_main_filesystem_format(advanced_options=False):
if advanced_options:
options.update(advanced)
return Menu('Select which filesystem your main partition should use', options, skip=False).run()
prompt = _('Select which filesystem your main partition should use')
choice = Menu(prompt, options, skip=False).run()
return choice
def current_partition_layout(partitions :List[Partition], with_idx :bool = False) -> Dict[str, Any]:
@ -533,7 +553,8 @@ def current_partition_layout(partitions :List[Partition], with_idx :bool = False
current_layout += f'{row[:-1]}\n'
return f'\n\nCurrent partition layout:\n\n{current_layout}'
title = _('Current partition layout')
return f'\n\n{title}:\n\n{current_layout}'
def select_partition(title :str, partitions :List[Partition], multiple :bool = False) -> Union[int, List[int], None]:
@ -583,7 +604,7 @@ def manage_new_and_existing_partitions(block_device :BlockDevice) -> Dict[str, A
"Set desired filesystem for a partition",
]
title = f'Select what to do with \n{block_device}'
title = _('Select what to do with\n{}').format(block_device)
# show current partition layout:
if len(block_device_struct["partitions"]):
@ -600,16 +621,19 @@ def manage_new_and_existing_partitions(block_device :BlockDevice) -> Dict[str, A
# # https://www.gnu.org/software/parted/manual/html_node/mklabel.html
# name = input("Enter a desired name for the partition: ").strip()
fstype = Menu('Enter a desired filesystem type for the partition', fs_types(), skip=False).run()
fstype = Menu(_('Enter a desired filesystem type for the partition'), fs_types(), skip=False).run()
prompt = _('Enter the start sector (percentage or block number, default: {}): ').format(block_device.first_free_sector)
start = input(prompt).strip()
start = input(f"Enter the start sector (percentage or block number, default: {block_device.first_free_sector}): ").strip()
if not start.strip():
start = block_device.first_free_sector
end_suggested = block_device.first_end_sector
else:
end_suggested = '100%'
end = input(f"Enter the end sector of the partition (percentage or block number, ex: {end_suggested}): ").strip()
prompt = _('Enter the end sector of the partition (percentage or block number, ex: {}): "').format(end_suggested)
end = input(prompt).strip()
if not end.strip():
end = end_suggested
@ -634,7 +658,10 @@ def manage_new_and_existing_partitions(block_device :BlockDevice) -> Dict[str, A
continue
elif task[:len("Suggest partition layout")] == "Suggest partition layout":
if len(block_device_struct["partitions"]):
if input(f"{block_device} contains queued partitions, this will remove those, are you sure? y/N: ").strip().lower() in ('', 'n'):
prompt = _('{} contains queued partitions, this will remove those, are you sure?').format(block_device)
choice = Menu(prompt, ['yes', 'no'], default_option='no').run()
if choice == 'no':
continue
block_device_struct.update(suggest_single_disk_layout(block_device)[block_device.path])
@ -644,7 +671,7 @@ def manage_new_and_existing_partitions(block_device :BlockDevice) -> Dict[str, A
current_layout = current_partition_layout(block_device_struct['partitions'], with_idx=True)
if task == "Delete a partition":
title = f'{current_layout}\n\nSelect by index which partitions to delete'
title = _('{}\n\nSelect by index which partitions to delete').format(current_layout)
to_delete = select_partition(title, block_device_struct["partitions"], multiple=True)
if to_delete:
@ -652,12 +679,12 @@ def manage_new_and_existing_partitions(block_device :BlockDevice) -> Dict[str, A
elif task == "Clear/Delete all partitions":
block_device_struct["partitions"] = []
elif task == "Assign mount-point for a partition":
title = f'{current_layout}\n\nSelect by index which partition to mount where'
title = _('{}\n\nSelect by index which partition to mount where').format(current_layout)
partition = select_partition(title, block_device_struct["partitions"])
if partition is not None:
print(' * Partition mount-points are relative to inside the installation, the boot would be /boot as an example.')
mountpoint = input('Select where to mount partition (leave blank to remove mountpoint): ').strip()
print(_(' * Partition mount-points are relative to inside the installation, the boot would be /boot as an example.'))
mountpoint = input(_('Select where to mount partition (leave blank to remove mountpoint): ')).strip()
if len(mountpoint):
block_device_struct["partitions"][partition]['mountpoint'] = mountpoint
@ -668,7 +695,7 @@ def manage_new_and_existing_partitions(block_device :BlockDevice) -> Dict[str, A
del(block_device_struct["partitions"][partition]['mountpoint'])
elif task == "Mark/Unmark a partition to be formatted (wipes data)":
title = f'{current_layout}\n\nSelect which partition to mask for formatting'
title = _('{}\n\nSelect which partition to mask for formatting').format(current_layout)
partition = select_partition(title, block_device_struct["partitions"])
if partition is not None:
@ -679,7 +706,7 @@ def manage_new_and_existing_partitions(block_device :BlockDevice) -> Dict[str, A
if not block_device_struct["partitions"][partition].get('filesystem', None):
block_device_struct["partitions"][partition]['filesystem'] = {}
fstype = Menu('Enter a desired filesystem type for the partition', fs_types(), skip=False).run()
fstype = Menu(_('Enter a desired filesystem type for the partition'), fs_types(), skip=False).run()
block_device_struct["partitions"][partition]['filesystem']['format'] = fstype
@ -687,7 +714,7 @@ def manage_new_and_existing_partitions(block_device :BlockDevice) -> Dict[str, A
block_device_struct["partitions"][partition]['wipe'] = not block_device_struct["partitions"][partition].get('wipe', False)
elif task == "Mark/Unmark a partition as encrypted":
title = f'{current_layout}\n\nSelect which partition to mark as encrypted'
title = _('{}\n\nSelect which partition to mark as encrypted').format(current_layout)
partition = select_partition(title, block_device_struct["partitions"])
if partition is not None:
@ -695,21 +722,21 @@ def manage_new_and_existing_partitions(block_device :BlockDevice) -> Dict[str, A
block_device_struct["partitions"][partition]['encrypted'] = not block_device_struct["partitions"][partition].get('encrypted', False)
elif task == "Mark/Unmark a partition as bootable (automatic for /boot)":
title = f'{current_layout}\n\nSelect which partition to mark as bootable'
title = _('{}\n\nSelect which partition to mark as bootable').format(current_layout)
partition = select_partition(title, block_device_struct["partitions"])
if partition is not None:
block_device_struct["partitions"][partition]['boot'] = not block_device_struct["partitions"][partition].get('boot', False)
elif task == "Set desired filesystem for a partition":
title = f'{current_layout}\n\nSelect which partition to set a filesystem on'
title = _('{}\n\nSelect which partition to set a filesystem on').format(current_layout)
partition = select_partition(title, block_device_struct["partitions"])
if partition is not None:
if not block_device_struct["partitions"][partition].get('filesystem', None):
block_device_struct["partitions"][partition]['filesystem'] = {}
fstype_title = 'Enter a desired filesystem type for the partition: '
fstype_title = _('Enter a desired filesystem type for the partition: ')
fstype = Menu(fstype_title, fs_types(), skip=False).run()
block_device_struct["partitions"][partition]['filesystem']['format'] = fstype
@ -728,15 +755,20 @@ def select_individual_blockdevice_usage(block_devices: list) -> Dict[str, Any]:
return result
def select_archinstall_language(default='English'):
languages = Translation.get_all_names()
language = Menu(_('Select Archinstall language'), languages, default_option=default).run()
return language
def select_disk_layout(block_devices :list, advanced_options=False) -> Dict[str, Any]:
modes = [
"Wipe all selected drives and use a best-effort default partition layout",
"Select what to do with each individual drive (followed by partition usage)"
]
wipe_mode = _('Wipe all selected drives and use a best-effort default partition layout')
custome_mode = _('Select what to do with each individual drive (followed by partition usage)')
modes = [wipe_mode, custome_mode]
mode = Menu('Select what you wish to do with the selected block devices', modes, skip=False).run()
mode = Menu(_('Select what you wish to do with the selected block devices'), modes, skip=False).run()
if mode == 'Wipe all selected drives and use a best-effort default partition layout':
if mode == wipe_mode:
return get_default_partition_layout(block_devices, advanced_options)
else:
return select_individual_blockdevice_usage(block_devices)
@ -787,8 +819,7 @@ def select_profile() -> Optional[str]:
option = f'{profile.profile}: {description}'
options[option] = profile
title = 'This is a list of pre-programmed profiles, ' \
'they might make it easier to install things like desktop environments'
title = _('This is a list of pre-programmed profiles, they might make it easier to install things like desktop environments')
selection = Menu(title=title, p_options=list(options.keys())).run()
@ -812,7 +843,7 @@ def select_language(default_value :str) -> str:
# allows for searching anyways
sorted_kb_lang = sorted(sorted(list(kb_lang)), key=len)
selected_lang = Menu('Select Keyboard layout', sorted_kb_lang, default_option=default_value, sort=False).run()
selected_lang = Menu(_('Select Keyboard layout'), sorted_kb_lang, default_option=default_value, sort=False).run()
return selected_lang
@ -827,7 +858,7 @@ def select_mirror_regions() -> Dict[str, Any]:
mirrors = list_mirrors()
selected_mirror = Menu(
'Select one of the regions to download packages from',
_('Select one of the regions to download packages from'),
list(mirrors.keys()),
multi=True
).run()
@ -849,7 +880,7 @@ def select_harddrives() -> Optional[str]:
options = {f'{option}': option for option in hard_drives}
selected_harddrive = Menu(
'Select one or more hard drives to use and configure',
_('Select one or more hard drives to use and configure'),
list(options.keys()),
multi=True
).run()
@ -876,18 +907,18 @@ def select_driver(options :Dict[str, Any] = AVAILABLE_GFX_DRIVERS, force_ask :bo
title = ''
if has_amd_graphics():
title += 'For the best compatibility with your AMD hardware, you may want to use either the all open-source or AMD / ATI options.\n'
title += _('For the best compatibility with your AMD hardware, you may want to use either the all open-source or AMD / ATI options.') + '\n'
if has_intel_graphics():
title += 'For the best compatibility with your Intel hardware, you may want to use either the all open-source or Intel options.\n'
title += _('For the best compatibility with your Intel hardware, you may want to use either the all open-source or Intel options.\n')
if has_nvidia_graphics():
title += 'For the best compatibility with your Nvidia hardware, you may want to use the Nvidia proprietary driver.\n'
title += _('For the best compatibility with your Nvidia hardware, you may want to use the Nvidia proprietary driver.\n')
if not arguments.get('gfx_driver', None) or force_ask:
title += '\n\nSelect a graphics driver or leave blank to install all open-source drivers'
title += _('\n\nSelect a graphics driver or leave blank to install all open-source drivers')
arguments['gfx_driver'] = Menu(title, drivers).run()
if arguments.get('gfx_driver', None) is None:
arguments['gfx_driver'] = "All open-source (default)"
arguments['gfx_driver'] = _("All open-source (default)")
return options.get(arguments.get('gfx_driver'))
@ -906,7 +937,7 @@ def select_kernel() -> List[str]:
default_kernel = "linux"
selected_kernels = Menu(
f'Choose which kernels to use or leave blank for default "{default_kernel}"',
_('Choose which kernels to use or leave blank for default "{}"').format(default_kernel),
kernels,
sort=True,
multi=True,
@ -920,7 +951,7 @@ def select_locale_lang(default):
locale_lang = set([locale.split()[0] for locale in locales])
selected_locale = Menu(
f'Choose which locale language to use',
_('Choose which locale language to use'),
locale_lang,
sort=True,
default_option=default
@ -934,7 +965,7 @@ def select_locale_enc(default):
locale_enc = set([locale.split()[1] for locale in locales])
selected_locale = Menu(
f'Choose which locale encoding to use',
_('Choose which locale encoding to use'),
locale_enc,
sort=True,
default_option=default
@ -942,8 +973,9 @@ def select_locale_enc(default):
return selected_locale
def generic_select(p_options :Union[list,dict],
input_text :str = "Select one of the values shown below: ",
input_text :str = '',
allow_empty_input :bool = True,
options_output :bool = True, # function not available
sort :bool = False,
@ -974,6 +1006,8 @@ def generic_select(p_options :Union[list,dict],
log(f"invalid parameter at Menu() call was at <{sys._getframe(1).f_code.co_name}>",level=logging.WARNING)
raise RequirementError("generic_select() requires an iterable as option.")
input_text = input_text if input_text else _('Select one of the values shown below: ')
if isinstance(p_options,dict):
options = list(p_options.values())
else:
@ -1008,11 +1042,13 @@ def generic_select(p_options :Union[list,dict],
def generic_multi_select(p_options :Union[list,dict],
text :str = "Select one or more of the options below: ",
text :str = '',
sort :bool = False,
default :Any = None,
allow_empty :bool = False) -> Any:
text = text if text else _("Select one or more of the options below: ")
return generic_select(p_options,
input_text=text,
allow_empty_input=allow_empty,

View File

@ -0,0 +1,33 @@
# Nationalization
Archinstall supports multiple languages, which depend on translations coming from the community :)
New languages can be added simply by creating a new folder with the proper language abbrevation (see list `languages.json` if unsure).
Run the following command to create a new template for a language
```
mkdir -p <abbr>/LC_MESSAGES/ && touch <abbr>/LC_MESSAGES/base.po
```
After that run the script `./locales_generator.sh` it will automatically populate the new `base.po` file with the strings that
need to be translated into the new language.
For example the `base.po` might contain something like the following now
```
#: lib/user_interaction.py:82
msgid "Do you really want to abort?"
msgstr ""
```
The `msgid` is the identifier of the string in the code as well as the default text to be displayed, meaning that if no
translation is provided for a language then this is the text that is going to be shown.
To provide a translation for the language, simply write the translation in the `msgstr` part
```
#: lib/user_interaction.py:82
msgid "Do you really want to abort?"
msgstr "Wollen sie wirklich abbrechen?"
```
After that run the script once more `./locales_generator.sh` and it will auto-generate the `base.mo` file with the included translations.
After that you're all ready to go and enjoy Archinstall in the new language :)

View File

@ -0,0 +1,354 @@
#: lib/user_interaction.py:82 lib/user_interaction.py:82
msgid "Do you really want to abort?"
msgstr ""
#: lib/user_interaction.py:100 lib/user_interaction.py:100
msgid "And one more time for verification: "
msgstr ""
#: lib/user_interaction.py:271 lib/user_interaction.py:271
msgid "Would you like to use swap on zram?"
msgstr ""
#: lib/user_interaction.py:277 lib/user_interaction.py:277
msgid ""
"Would you like to use automatic time synchronization (NTP) with the default "
"time servers?"
msgstr ""
#: lib/user_interaction.py:278 lib/user_interaction.py:278
msgid ""
"Hardware time and other post-configuration steps might be required in order "
"for NTP to work. For more information, please check the Arch wiki"
msgstr ""
#: lib/user_interaction.py:284 lib/user_interaction.py:284
msgid "Desired hostname for the installation: "
msgstr ""
#: lib/user_interaction.py:289 lib/user_interaction.py:289
msgid "Username for required superuser with sudo privileges: "
msgstr ""
#: lib/user_interaction.py:303 lib/user_interaction.py:320
#: lib/user_interaction.py:303 lib/user_interaction.py:320
msgid "Password for user \"{}\""
msgstr ""
#: lib/user_interaction.py:309 lib/user_interaction.py:309
msgid "Any additional users to install (leave blank for no users): "
msgstr ""
#: lib/user_interaction.py:323 lib/user_interaction.py:323
msgid "Should this user be a superuser (sudoer)?"
msgstr ""
#: lib/user_interaction.py:339 lib/user_interaction.py:339
msgid "Select a timezone"
msgstr ""
#: lib/user_interaction.py:353 lib/user_interaction.py:353
msgid "Would you like to use GRUB as a bootloader instead of systemd-boot?"
msgstr ""
#: lib/user_interaction.py:363 lib/user_interaction.py:363
msgid "Choose a bootloader"
msgstr ""
#: lib/user_interaction.py:379 lib/user_interaction.py:379
msgid "Choose an audio server"
msgstr ""
#: lib/user_interaction.py:390 lib/user_interaction.py:390
msgid ""
"Only packages such as base, base-devel, linux, linux-firmware, efibootmgr "
"and optional profile packages are installed."
msgstr ""
#: lib/user_interaction.py:391 lib/user_interaction.py:391
msgid ""
"If you desire a web browser, such as firefox or chromium, you may specify it "
"in the following prompt."
msgstr ""
#: lib/user_interaction.py:395 lib/user_interaction.py:395
msgid ""
"Write additional packages to install (space separated, leave blank to skip): "
msgstr ""
#: lib/user_interaction.py:418 lib/user_interaction.py:418
msgid "Copy ISO network configuration to installation"
msgstr ""
#: lib/user_interaction.py:419 lib/user_interaction.py:419
msgid ""
"Use NetworkManager (necessary to configure internet graphically in GNOME and "
"KDE)"
msgstr ""
#: lib/user_interaction.py:427 lib/user_interaction.py:427
msgid "Select one network interface to configure"
msgstr ""
#: lib/user_interaction.py:440 lib/user_interaction.py:440
msgid ""
"Select which mode to configure for \"{}\" or skip to use default mode \"{}\""
msgstr ""
#: lib/user_interaction.py:445 lib/user_interaction.py:445
msgid "Enter the IP and subnet for {} (example: 192.168.0.5/24): "
msgstr ""
#: lib/user_interaction.py:460 lib/user_interaction.py:460
msgid "Enter your gateway (router) IP address or leave blank for none: "
msgstr ""
#: lib/user_interaction.py:475 lib/user_interaction.py:475
msgid "Enter your DNS servers (space separated, blank for none): "
msgstr ""
#: lib/user_interaction.py:509 lib/user_interaction.py:509
msgid "Select which filesystem your main partition should use"
msgstr ""
#: lib/user_interaction.py:555 lib/user_interaction.py:555
msgid "Current partition layout"
msgstr ""
#: lib/user_interaction.py:606 lib/user_interaction.py:606
msgid ""
"Select what to do with\n"
"{}"
msgstr ""
#: lib/user_interaction.py:623 lib/user_interaction.py:708
#: lib/user_interaction.py:623 lib/user_interaction.py:708
msgid "Enter a desired filesystem type for the partition"
msgstr ""
#: lib/user_interaction.py:625 lib/user_interaction.py:625
msgid "Enter the start sector (percentage or block number, default: {}): "
msgstr ""
#: lib/user_interaction.py:634 lib/user_interaction.py:634
msgid ""
"Enter the end sector of the partition (percentage or block number, ex: {}): "
"\""
msgstr ""
#: lib/user_interaction.py:660 lib/user_interaction.py:660
msgid "{} contains queued partitions, this will remove those, are you sure?"
msgstr ""
#: lib/user_interaction.py:673 lib/user_interaction.py:673
msgid ""
"{}\n"
"\n"
"Select by index which partitions to delete"
msgstr ""
#: lib/user_interaction.py:681 lib/user_interaction.py:681
msgid ""
"{}\n"
"\n"
"Select by index which partition to mount where"
msgstr ""
#: lib/user_interaction.py:685 lib/user_interaction.py:685
msgid ""
" * Partition mount-points are relative to inside the installation, the boot "
"would be /boot as an example."
msgstr ""
#: lib/user_interaction.py:686 lib/user_interaction.py:686
msgid "Select where to mount partition (leave blank to remove mountpoint): "
msgstr ""
#: lib/user_interaction.py:697 lib/user_interaction.py:697
msgid ""
"{}\n"
"\n"
"Select which partition to mask for formatting"
msgstr ""
#: lib/user_interaction.py:716 lib/user_interaction.py:716
msgid ""
"{}\n"
"\n"
"Select which partition to mark as encrypted"
msgstr ""
#: lib/user_interaction.py:724 lib/user_interaction.py:724
msgid ""
"{}\n"
"\n"
"Select which partition to mark as bootable"
msgstr ""
#: lib/user_interaction.py:731 lib/user_interaction.py:731
msgid ""
"{}\n"
"\n"
"Select which partition to set a filesystem on"
msgstr ""
#: lib/user_interaction.py:738 lib/user_interaction.py:738
msgid "Enter a desired filesystem type for the partition: "
msgstr ""
#: lib/user_interaction.py:759 lib/menu/selection_menu.py:116
#: lib/user_interaction.py:759 lib/menu/selection_menu.py:116
msgid "Select Archinstall language"
msgstr ""
#: lib/user_interaction.py:764 lib/user_interaction.py:764
msgid "Wipe all selected drives and use a best-effort default partition layout"
msgstr ""
#: lib/user_interaction.py:765 lib/user_interaction.py:765
msgid ""
"Select what to do with each individual drive (followed by partition usage)"
msgstr ""
#: lib/user_interaction.py:768 lib/user_interaction.py:768
msgid "Select what you wish to do with the selected block devices"
msgstr ""
#: lib/user_interaction.py:821 lib/user_interaction.py:821
msgid ""
"This is a list of pre-programmed profiles, they might make it easier to "
"install things like desktop environments"
msgstr ""
#: lib/user_interaction.py:846 lib/user_interaction.py:846
msgid "Select Keyboard layout"
msgstr ""
#: lib/user_interaction.py:861 lib/user_interaction.py:861
msgid "Select one of the regions to download packages from"
msgstr ""
#: lib/user_interaction.py:883 lib/user_interaction.py:883
msgid "Select one or more hard drives to use and configure"
msgstr ""
#: lib/user_interaction.py:910 lib/user_interaction.py:910
msgid ""
"For the best compatibility with your AMD hardware, you may want to use "
"either the all open-source or AMD / ATI options."
msgstr ""
#: lib/user_interaction.py:912 lib/user_interaction.py:912
msgid ""
"For the best compatibility with your Intel hardware, you may want to use "
"either the all open-source or Intel options.\n"
msgstr ""
#: lib/user_interaction.py:914 lib/user_interaction.py:914
msgid ""
"For the best compatibility with your Nvidia hardware, you may want to use "
"the Nvidia proprietary driver.\n"
msgstr ""
#: lib/user_interaction.py:917 lib/user_interaction.py:917
msgid ""
"\n"
"\n"
"Select a graphics driver or leave blank to install all open-source drivers"
msgstr ""
#: lib/user_interaction.py:921 lib/user_interaction.py:921
msgid "All open-source (default)"
msgstr ""
#: lib/user_interaction.py:940 lib/user_interaction.py:940
msgid "Choose which kernels to use or leave blank for default \"{}\""
msgstr ""
#: lib/user_interaction.py:954 lib/user_interaction.py:954
msgid "Choose which locale language to use"
msgstr ""
#: lib/user_interaction.py:968 lib/user_interaction.py:968
msgid "Choose which locale encoding to use"
msgstr ""
#: lib/user_interaction.py:1009 lib/user_interaction.py:1009
msgid "Select one of the values shown below: "
msgstr ""
#: lib/user_interaction.py:1050 lib/user_interaction.py:1050
msgid "Select one or more of the options below: "
msgstr ""
#: lib/menu/selection_menu.py:122 lib/menu/selection_menu.py:122
msgid "Select keyboard layout"
msgstr ""
#: lib/menu/selection_menu.py:125 lib/menu/selection_menu.py:125
msgid "Select mirror region"
msgstr ""
#: lib/menu/selection_menu.py:130 lib/menu/selection_menu.py:130
msgid "Select locale language"
msgstr ""
#: lib/menu/selection_menu.py:132 lib/menu/selection_menu.py:132
msgid "Select locale encoding"
msgstr ""
#: lib/menu/selection_menu.py:135 lib/menu/selection_menu.py:135
msgid "Select harddrives"
msgstr ""
#: lib/menu/selection_menu.py:139 lib/menu/selection_menu.py:139
msgid "Select disk layout"
msgstr ""
#: lib/menu/selection_menu.py:147 lib/menu/selection_menu.py:147
msgid "Set encryption password"
msgstr ""
#: lib/menu/selection_menu.py:153 lib/menu/selection_menu.py:153
msgid "Use swap"
msgstr ""
#: lib/menu/selection_menu.py:158 lib/menu/selection_menu.py:158
msgid "Select bootloader"
msgstr ""
#: lib/menu/selection_menu.py:164 lib/menu/selection_menu.py:164
msgid "Set root password"
msgstr ""
#: lib/menu/selection_menu.py:169 lib/menu/selection_menu.py:169
msgid "Specify superuser account"
msgstr ""
#: lib/menu/selection_menu.py:175 lib/menu/selection_menu.py:175
msgid "Specify user account"
msgstr ""
#: lib/menu/selection_menu.py:181 lib/menu/selection_menu.py:181
msgid "Specify profile"
msgstr ""
#: lib/menu/selection_menu.py:186 lib/menu/selection_menu.py:186
msgid "Select audio"
msgstr ""
#: lib/menu/selection_menu.py:190 lib/menu/selection_menu.py:190
msgid "Select kernels"
msgstr ""
#: lib/menu/selection_menu.py:195 lib/menu/selection_menu.py:195
msgid "Additional packages to install"
msgstr ""
#: lib/menu/selection_menu.py:200 lib/menu/selection_menu.py:200
msgid "Configure network"
msgstr ""
#: lib/menu/selection_menu.py:208 lib/menu/selection_menu.py:208
msgid "Set automatic time sync (NTP)"
msgstr ""

Binary file not shown.

View File

@ -0,0 +1,351 @@
#: lib/user_interaction.py:82
msgid "Do you really want to abort?"
msgstr ""
#: lib/user_interaction.py:100
msgid "And one more time for verification: "
msgstr ""
#: lib/user_interaction.py:271
msgid "Would you like to use swap on zram?"
msgstr ""
#: lib/user_interaction.py:277
msgid ""
"Would you like to use automatic time synchronization (NTP) with the default "
"time servers?"
msgstr ""
#: lib/user_interaction.py:278
msgid ""
"Hardware time and other post-configuration steps might be required in order "
"for NTP to work. For more information, please check the Arch wiki"
msgstr ""
#: lib/user_interaction.py:284
msgid "Desired hostname for the installation: "
msgstr ""
#: lib/user_interaction.py:289
msgid "Username for required superuser with sudo privileges: "
msgstr ""
#: lib/user_interaction.py:303 lib/user_interaction.py:320
msgid "Password for user \"{}\""
msgstr ""
#: lib/user_interaction.py:309
msgid "Any additional users to install (leave blank for no users): "
msgstr ""
#: lib/user_interaction.py:323
msgid "Should this user be a superuser (sudoer)?"
msgstr ""
#: lib/user_interaction.py:339
msgid "Select a timezone"
msgstr ""
#: lib/user_interaction.py:353
msgid "Would you like to use GRUB as a bootloader instead of systemd-boot?"
msgstr ""
#: lib/user_interaction.py:363
msgid "Choose a bootloader"
msgstr ""
#: lib/user_interaction.py:379
msgid "Choose an audio server"
msgstr ""
#: lib/user_interaction.py:390
msgid ""
"Only packages such as base, base-devel, linux, linux-firmware, efibootmgr "
"and optional profile packages are installed."
msgstr ""
#: lib/user_interaction.py:391
msgid ""
"If you desire a web browser, such as firefox or chromium, you may specify it "
"in the following prompt."
msgstr ""
#: lib/user_interaction.py:395
msgid ""
"Write additional packages to install (space separated, leave blank to skip): "
msgstr ""
#: lib/user_interaction.py:418
msgid "Copy ISO network configuration to installation"
msgstr ""
#: lib/user_interaction.py:419
msgid ""
"Use NetworkManager (necessary to configure internet graphically in GNOME and "
"KDE)"
msgstr ""
#: lib/user_interaction.py:427
msgid "Select one network interface to configure"
msgstr ""
#: lib/user_interaction.py:440
msgid ""
"Select which mode to configure for \"{}\" or skip to use default mode \"{}\""
msgstr ""
#: lib/user_interaction.py:445
msgid "Enter the IP and subnet for {} (example: 192.168.0.5/24): "
msgstr ""
#: lib/user_interaction.py:460
msgid "Enter your gateway (router) IP address or leave blank for none: "
msgstr ""
#: lib/user_interaction.py:475
msgid "Enter your DNS servers (space separated, blank for none): "
msgstr ""
#: lib/user_interaction.py:509
msgid "Select which filesystem your main partition should use"
msgstr ""
#: lib/user_interaction.py:555
msgid "Current partition layout"
msgstr ""
#: lib/user_interaction.py:606
msgid ""
"Select what to do with\n"
"{}"
msgstr ""
#: lib/user_interaction.py:623 lib/user_interaction.py:708
msgid "Enter a desired filesystem type for the partition"
msgstr ""
#: lib/user_interaction.py:625
msgid "Enter the start sector (percentage or block number, default: {}): "
msgstr ""
#: lib/user_interaction.py:634
msgid ""
"Enter the end sector of the partition (percentage or block number, ex: {}): "
"\""
msgstr ""
#: lib/user_interaction.py:660
msgid "{} contains queued partitions, this will remove those, are you sure?"
msgstr ""
#: lib/user_interaction.py:673
msgid ""
"{}\n"
"\n"
"Select by index which partitions to delete"
msgstr ""
#: lib/user_interaction.py:681
msgid ""
"{}\n"
"\n"
"Select by index which partition to mount where"
msgstr ""
#: lib/user_interaction.py:685
msgid ""
" * Partition mount-points are relative to inside the installation, the boot "
"would be /boot as an example."
msgstr ""
#: lib/user_interaction.py:686
msgid "Select where to mount partition (leave blank to remove mountpoint): "
msgstr ""
#: lib/user_interaction.py:697
msgid ""
"{}\n"
"\n"
"Select which partition to mask for formatting"
msgstr ""
#: lib/user_interaction.py:716
msgid ""
"{}\n"
"\n"
"Select which partition to mark as encrypted"
msgstr ""
#: lib/user_interaction.py:724
msgid ""
"{}\n"
"\n"
"Select which partition to mark as bootable"
msgstr ""
#: lib/user_interaction.py:731
msgid ""
"{}\n"
"\n"
"Select which partition to set a filesystem on"
msgstr ""
#: lib/user_interaction.py:738
msgid "Enter a desired filesystem type for the partition: "
msgstr ""
#: lib/user_interaction.py:759 lib/menu/selection_menu.py:116
msgid "Select Archinstall language"
msgstr "Sprache fuer Archinstall"
#: lib/user_interaction.py:764
msgid "Wipe all selected drives and use a best-effort default partition layout"
msgstr ""
#: lib/user_interaction.py:765
msgid ""
"Select what to do with each individual drive (followed by partition usage)"
msgstr ""
#: lib/user_interaction.py:768
msgid "Select what you wish to do with the selected block devices"
msgstr ""
#: lib/user_interaction.py:821
msgid ""
"This is a list of pre-programmed profiles, they might make it easier to "
"install things like desktop environments"
msgstr ""
#: lib/user_interaction.py:846
msgid "Select Keyboard layout"
msgstr ""
#: lib/user_interaction.py:861
msgid "Select one of the regions to download packages from"
msgstr ""
#: lib/user_interaction.py:883
msgid "Select one or more hard drives to use and configure"
msgstr ""
#: lib/user_interaction.py:910
msgid ""
"For the best compatibility with your AMD hardware, you may want to use "
"either the all open-source or AMD / ATI options."
msgstr ""
#: lib/user_interaction.py:912
msgid ""
"For the best compatibility with your Intel hardware, you may want to use "
"either the all open-source or Intel options.\n"
msgstr ""
#: lib/user_interaction.py:914
msgid ""
"For the best compatibility with your Nvidia hardware, you may want to use "
"the Nvidia proprietary driver.\n"
msgstr ""
#: lib/user_interaction.py:917
msgid ""
"\n"
"\n"
"Select a graphics driver or leave blank to install all open-source drivers"
msgstr ""
#: lib/user_interaction.py:921
msgid "All open-source (default)"
msgstr ""
#: lib/user_interaction.py:940
msgid "Choose which kernels to use or leave blank for default \"{}\""
msgstr ""
#: lib/user_interaction.py:954
msgid "Choose which locale language to use"
msgstr ""
#: lib/user_interaction.py:968
msgid "Choose which locale encoding to use"
msgstr ""
#: lib/user_interaction.py:1009
msgid "Select one of the values shown below: "
msgstr ""
#: lib/user_interaction.py:1050
msgid "Select one or more of the options below: "
msgstr ""
#: lib/menu/selection_menu.py:122
msgid "Select keyboard layout"
msgstr ""
#: lib/menu/selection_menu.py:125
msgid "Select mirror region"
msgstr ""
#: lib/menu/selection_menu.py:130
msgid "Select locale language"
msgstr ""
#: lib/menu/selection_menu.py:132
msgid "Select locale encoding"
msgstr ""
#: lib/menu/selection_menu.py:135
msgid "Select harddrives"
msgstr ""
#: lib/menu/selection_menu.py:139
msgid "Select disk layout"
msgstr ""
#: lib/menu/selection_menu.py:147
msgid "Set encryption password"
msgstr ""
#: lib/menu/selection_menu.py:153
msgid "Use swap"
msgstr ""
#: lib/menu/selection_menu.py:158
msgid "Select bootloader"
msgstr ""
#: lib/menu/selection_menu.py:164
msgid "Set root password"
msgstr ""
#: lib/menu/selection_menu.py:169
msgid "Specify superuser account"
msgstr ""
#: lib/menu/selection_menu.py:175
msgid "Specify user account"
msgstr ""
#: lib/menu/selection_menu.py:181
msgid "Specify profile"
msgstr ""
#: lib/menu/selection_menu.py:186
msgid "Select audio"
msgstr ""
#: lib/menu/selection_menu.py:190
msgid "Select kernels"
msgstr ""
#: lib/menu/selection_menu.py:195
msgid "Additional packages to install"
msgstr ""
#: lib/menu/selection_menu.py:200
msgid "Configure network"
msgstr ""
#: lib/menu/selection_menu.py:208
msgid "Set automatic time sync (NTP)"
msgstr ""

Binary file not shown.

View File

@ -0,0 +1,351 @@
#: lib/user_interaction.py:82
msgid "Do you really want to abort?"
msgstr ""
#: lib/user_interaction.py:100
msgid "And one more time for verification: "
msgstr ""
#: lib/user_interaction.py:271
msgid "Would you like to use swap on zram?"
msgstr ""
#: lib/user_interaction.py:277
msgid ""
"Would you like to use automatic time synchronization (NTP) with the default "
"time servers?"
msgstr ""
#: lib/user_interaction.py:278
msgid ""
"Hardware time and other post-configuration steps might be required in order "
"for NTP to work. For more information, please check the Arch wiki"
msgstr ""
#: lib/user_interaction.py:284
msgid "Desired hostname for the installation: "
msgstr ""
#: lib/user_interaction.py:289
msgid "Username for required superuser with sudo privileges: "
msgstr ""
#: lib/user_interaction.py:303 lib/user_interaction.py:320
msgid "Password for user \"{}\""
msgstr ""
#: lib/user_interaction.py:309
msgid "Any additional users to install (leave blank for no users): "
msgstr ""
#: lib/user_interaction.py:323
msgid "Should this user be a superuser (sudoer)?"
msgstr ""
#: lib/user_interaction.py:339
msgid "Select a timezone"
msgstr ""
#: lib/user_interaction.py:353
msgid "Would you like to use GRUB as a bootloader instead of systemd-boot?"
msgstr ""
#: lib/user_interaction.py:363
msgid "Choose a bootloader"
msgstr ""
#: lib/user_interaction.py:379
msgid "Choose an audio server"
msgstr ""
#: lib/user_interaction.py:390
msgid ""
"Only packages such as base, base-devel, linux, linux-firmware, efibootmgr "
"and optional profile packages are installed."
msgstr ""
#: lib/user_interaction.py:391
msgid ""
"If you desire a web browser, such as firefox or chromium, you may specify it "
"in the following prompt."
msgstr ""
#: lib/user_interaction.py:395
msgid ""
"Write additional packages to install (space separated, leave blank to skip): "
msgstr ""
#: lib/user_interaction.py:418
msgid "Copy ISO network configuration to installation"
msgstr ""
#: lib/user_interaction.py:419
msgid ""
"Use NetworkManager (necessary to configure internet graphically in GNOME and "
"KDE)"
msgstr ""
#: lib/user_interaction.py:427
msgid "Select one network interface to configure"
msgstr ""
#: lib/user_interaction.py:440
msgid ""
"Select which mode to configure for \"{}\" or skip to use default mode \"{}\""
msgstr ""
#: lib/user_interaction.py:445
msgid "Enter the IP and subnet for {} (example: 192.168.0.5/24): "
msgstr ""
#: lib/user_interaction.py:460
msgid "Enter your gateway (router) IP address or leave blank for none: "
msgstr ""
#: lib/user_interaction.py:475
msgid "Enter your DNS servers (space separated, blank for none): "
msgstr ""
#: lib/user_interaction.py:509
msgid "Select which filesystem your main partition should use"
msgstr ""
#: lib/user_interaction.py:555
msgid "Current partition layout"
msgstr ""
#: lib/user_interaction.py:606
msgid ""
"Select what to do with\n"
"{}"
msgstr ""
#: lib/user_interaction.py:623 lib/user_interaction.py:708
msgid "Enter a desired filesystem type for the partition"
msgstr ""
#: lib/user_interaction.py:625
msgid "Enter the start sector (percentage or block number, default: {}): "
msgstr ""
#: lib/user_interaction.py:634
msgid ""
"Enter the end sector of the partition (percentage or block number, ex: {}): "
"\""
msgstr ""
#: lib/user_interaction.py:660
msgid "{} contains queued partitions, this will remove those, are you sure?"
msgstr ""
#: lib/user_interaction.py:673
msgid ""
"{}\n"
"\n"
"Select by index which partitions to delete"
msgstr ""
#: lib/user_interaction.py:681
msgid ""
"{}\n"
"\n"
"Select by index which partition to mount where"
msgstr ""
#: lib/user_interaction.py:685
msgid ""
" * Partition mount-points are relative to inside the installation, the boot "
"would be /boot as an example."
msgstr ""
#: lib/user_interaction.py:686
msgid "Select where to mount partition (leave blank to remove mountpoint): "
msgstr ""
#: lib/user_interaction.py:697
msgid ""
"{}\n"
"\n"
"Select which partition to mask for formatting"
msgstr ""
#: lib/user_interaction.py:716
msgid ""
"{}\n"
"\n"
"Select which partition to mark as encrypted"
msgstr ""
#: lib/user_interaction.py:724
msgid ""
"{}\n"
"\n"
"Select which partition to mark as bootable"
msgstr ""
#: lib/user_interaction.py:731
msgid ""
"{}\n"
"\n"
"Select which partition to set a filesystem on"
msgstr ""
#: lib/user_interaction.py:738
msgid "Enter a desired filesystem type for the partition: "
msgstr ""
#: lib/user_interaction.py:759 lib/menu/selection_menu.py:116
msgid "Select Archinstall language"
msgstr ""
#: lib/user_interaction.py:764
msgid "Wipe all selected drives and use a best-effort default partition layout"
msgstr ""
#: lib/user_interaction.py:765
msgid ""
"Select what to do with each individual drive (followed by partition usage)"
msgstr ""
#: lib/user_interaction.py:768
msgid "Select what you wish to do with the selected block devices"
msgstr ""
#: lib/user_interaction.py:821
msgid ""
"This is a list of pre-programmed profiles, they might make it easier to "
"install things like desktop environments"
msgstr ""
#: lib/user_interaction.py:846
msgid "Select Keyboard layout"
msgstr ""
#: lib/user_interaction.py:861
msgid "Select one of the regions to download packages from"
msgstr ""
#: lib/user_interaction.py:883
msgid "Select one or more hard drives to use and configure"
msgstr ""
#: lib/user_interaction.py:910
msgid ""
"For the best compatibility with your AMD hardware, you may want to use "
"either the all open-source or AMD / ATI options."
msgstr ""
#: lib/user_interaction.py:912
msgid ""
"For the best compatibility with your Intel hardware, you may want to use "
"either the all open-source or Intel options.\n"
msgstr ""
#: lib/user_interaction.py:914
msgid ""
"For the best compatibility with your Nvidia hardware, you may want to use "
"the Nvidia proprietary driver.\n"
msgstr ""
#: lib/user_interaction.py:917
msgid ""
"\n"
"\n"
"Select a graphics driver or leave blank to install all open-source drivers"
msgstr ""
#: lib/user_interaction.py:921
msgid "All open-source (default)"
msgstr ""
#: lib/user_interaction.py:940
msgid "Choose which kernels to use or leave blank for default \"{}\""
msgstr ""
#: lib/user_interaction.py:954
msgid "Choose which locale language to use"
msgstr ""
#: lib/user_interaction.py:968
msgid "Choose which locale encoding to use"
msgstr ""
#: lib/user_interaction.py:1009
msgid "Select one of the values shown below: "
msgstr ""
#: lib/user_interaction.py:1050
msgid "Select one or more of the options below: "
msgstr ""
#: lib/menu/selection_menu.py:122
msgid "Select keyboard layout"
msgstr ""
#: lib/menu/selection_menu.py:125
msgid "Select mirror region"
msgstr ""
#: lib/menu/selection_menu.py:130
msgid "Select locale language"
msgstr ""
#: lib/menu/selection_menu.py:132
msgid "Select locale encoding"
msgstr ""
#: lib/menu/selection_menu.py:135
msgid "Select harddrives"
msgstr ""
#: lib/menu/selection_menu.py:139
msgid "Select disk layout"
msgstr ""
#: lib/menu/selection_menu.py:147
msgid "Set encryption password"
msgstr ""
#: lib/menu/selection_menu.py:153
msgid "Use swap"
msgstr ""
#: lib/menu/selection_menu.py:158
msgid "Select bootloader"
msgstr ""
#: lib/menu/selection_menu.py:164
msgid "Set root password"
msgstr ""
#: lib/menu/selection_menu.py:169
msgid "Specify superuser account"
msgstr ""
#: lib/menu/selection_menu.py:175
msgid "Specify user account"
msgstr ""
#: lib/menu/selection_menu.py:181
msgid "Specify profile"
msgstr ""
#: lib/menu/selection_menu.py:186
msgid "Select audio"
msgstr ""
#: lib/menu/selection_menu.py:190
msgid "Select kernels"
msgstr ""
#: lib/menu/selection_menu.py:195
msgid "Additional packages to install"
msgstr ""
#: lib/menu/selection_menu.py:200
msgid "Configure network"
msgstr ""
#: lib/menu/selection_menu.py:208
msgid "Set automatic time sync (NTP)"
msgstr ""

View File

@ -0,0 +1,359 @@
#: lib/user_interaction.py:82
msgid "Do you really want to abort?"
msgstr ""
#: lib/user_interaction.py:100
msgid "And one more time for verification: "
msgstr ""
#: lib/user_interaction.py:271
msgid "Would you like to use swap on zram?"
msgstr ""
#: lib/user_interaction.py:277
msgid ""
"Would you like to use automatic time synchronization (NTP) with the default "
"time servers?"
msgstr ""
#: lib/user_interaction.py:278
msgid ""
"Hardware time and other post-configuration steps might be required in order "
"for NTP to work. For more information, please check the Arch wiki"
msgstr ""
#: lib/user_interaction.py:284
msgid "Desired hostname for the installation: "
msgstr ""
#: lib/user_interaction.py:289
msgid "Username for required superuser with sudo privileges: "
msgstr ""
#: lib/user_interaction.py:303 lib/user_interaction.py:320
msgid "Password for user \"{}\""
msgstr ""
#: lib/user_interaction.py:309
msgid "Any additional users to install (leave blank for no users): "
msgstr ""
#: lib/user_interaction.py:323
msgid "Should this user be a superuser (sudoer)?"
msgstr ""
#: lib/user_interaction.py:339
msgid "Select a timezone"
msgstr ""
#: lib/user_interaction.py:353
msgid "Would you like to use GRUB as a bootloader instead of systemd-boot?"
msgstr ""
#: lib/user_interaction.py:363
msgid "Choose a bootloader"
msgstr ""
#: lib/user_interaction.py:379
msgid "Choose an audio server"
msgstr ""
#: lib/user_interaction.py:390
msgid ""
"Only packages such as base, base-devel, linux, linux-firmware, efibootmgr "
"and optional profile packages are installed."
msgstr ""
#: lib/user_interaction.py:391
msgid ""
"If you desire a web browser, such as firefox or chromium, you may specify it "
"in the following prompt."
msgstr ""
#: lib/user_interaction.py:395
msgid ""
"Write additional packages to install (space separated, leave blank to skip): "
msgstr ""
#: lib/user_interaction.py:418
msgid "Copy ISO network configuration to installation"
msgstr ""
#: lib/user_interaction.py:419
msgid ""
"Use NetworkManager (necessary to configure internet graphically in GNOME and "
"KDE)"
msgstr ""
#: lib/user_interaction.py:427
msgid "Select one network interface to configure"
msgstr ""
#: lib/user_interaction.py:440
msgid ""
"Select which mode to configure for \"{}\" or skip to use default mode \"{}\""
msgstr ""
#: lib/user_interaction.py:445
msgid "Enter the IP and subnet for {} (example: 192.168.0.5/24): "
msgstr ""
#: lib/user_interaction.py:460
msgid "Enter your gateway (router) IP address or leave blank for none: "
msgstr ""
#: lib/user_interaction.py:475
msgid "Enter your DNS servers (space separated, blank for none): "
msgstr ""
#: lib/user_interaction.py:509
msgid "Select which filesystem your main partition should use"
msgstr ""
#: lib/user_interaction.py:555
msgid "Current partition layout"
msgstr ""
#: lib/user_interaction.py:606
msgid ""
"Select what to do with\n"
"{}"
msgstr ""
#: lib/user_interaction.py:623 lib/user_interaction.py:708
msgid "Enter a desired filesystem type for the partition"
msgstr ""
#: lib/user_interaction.py:625
msgid "Enter the start sector (percentage or block number, default: {}): "
msgstr ""
#: lib/user_interaction.py:634
msgid ""
"Enter the end sector of the partition (percentage or block number, ex: {}): "
"\""
msgstr ""
#: lib/user_interaction.py:660
msgid "{} contains queued partitions, this will remove those, are you sure?"
msgstr ""
#: lib/user_interaction.py:673
msgid ""
"{}\n"
"\n"
"Select by index which partitions to delete"
msgstr ""
#: lib/user_interaction.py:681
msgid ""
"{}\n"
"\n"
"Select by index which partition to mount where"
msgstr ""
#: lib/user_interaction.py:685
msgid ""
" * Partition mount-points are relative to inside the installation, the boot "
"would be /boot as an example."
msgstr ""
#: lib/user_interaction.py:686
msgid "Select where to mount partition (leave blank to remove mountpoint): "
msgstr ""
#: lib/user_interaction.py:697
msgid ""
"{}\n"
"\n"
"Select which partition to mask for formatting"
msgstr ""
#: lib/user_interaction.py:716
msgid ""
"{}\n"
"\n"
"Select which partition to mark as encrypted"
msgstr ""
#: lib/user_interaction.py:724
msgid ""
"{}\n"
"\n"
"Select which partition to mark as bootable"
msgstr ""
#: lib/user_interaction.py:731
msgid ""
"{}\n"
"\n"
"Select which partition to set a filesystem on"
msgstr ""
#: lib/user_interaction.py:738
msgid "Enter a desired filesystem type for the partition: "
msgstr ""
#: lib/user_interaction.py:759
msgid "Select archinstall language"
msgstr ""
#: lib/user_interaction.py:764
msgid "Wipe all selected drives and use a best-effort default partition layout"
msgstr ""
#: lib/user_interaction.py:765
msgid ""
"Select what to do with each individual drive (followed by partition usage)"
msgstr ""
#: lib/user_interaction.py:768
msgid "Select what you wish to do with the selected block devices"
msgstr ""
#: lib/user_interaction.py:821
msgid ""
"This is a list of pre-programmed profiles, they might make it easier to "
"install things like desktop environments"
msgstr ""
#: lib/user_interaction.py:846
msgid "Select Keyboard layout"
msgstr ""
#: lib/user_interaction.py:861
msgid "Select one of the regions to download packages from"
msgstr ""
#: lib/user_interaction.py:883
msgid "Select one or more hard drives to use and configure"
msgstr ""
#: lib/user_interaction.py:910
msgid ""
"For the best compatibility with your AMD hardware, you may want to use "
"either the all open-source or AMD / ATI options."
msgstr ""
#: lib/user_interaction.py:912
msgid ""
"For the best compatibility with your Intel hardware, you may want to use "
"either the all open-source or Intel options.\n"
msgstr ""
#: lib/user_interaction.py:914
msgid ""
"For the best compatibility with your Nvidia hardware, you may want to use "
"the Nvidia proprietary driver.\n"
msgstr ""
#: lib/user_interaction.py:917
msgid ""
"\n"
"\n"
"Select a graphics driver or leave blank to install all open-source drivers"
msgstr ""
#: lib/user_interaction.py:921
msgid "All open-source (default)"
msgstr ""
#: lib/user_interaction.py:940
msgid "Choose which kernels to use or leave blank for default \"{}\""
msgstr ""
#: lib/user_interaction.py:954
msgid "Choose which locale language to use"
msgstr ""
#: lib/user_interaction.py:968
msgid "Choose which locale encoding to use"
msgstr ""
#: lib/user_interaction.py:1009
msgid "Select one of the values shown below: "
msgstr ""
#: lib/user_interaction.py:1050
msgid "Select one or more of the options below: "
msgstr ""
#: lib/menu/selection_menu.py:116
msgid "Archinstall language"
msgstr ""
#: lib/menu/selection_menu.py:122
msgid "Select keyboard layout"
msgstr ""
#: lib/menu/selection_menu.py:125
msgid "Select mirror region"
msgstr ""
#: lib/menu/selection_menu.py:130
msgid "Select locale language"
msgstr ""
#: lib/menu/selection_menu.py:132
msgid "Select locale encoding"
msgstr ""
#: lib/menu/selection_menu.py:135
msgid "Select harddrives"
msgstr ""
#: lib/menu/selection_menu.py:139
msgid "Select disk layout"
msgstr ""
#: lib/menu/selection_menu.py:147
msgid "Set encryption password"
msgstr ""
#: lib/menu/selection_menu.py:153
msgid "Use swap"
msgstr ""
#: lib/menu/selection_menu.py:158
msgid "Select bootloader"
msgstr ""
#: lib/menu/selection_menu.py:164
msgid "Set root password"
msgstr ""
#: lib/menu/selection_menu.py:169
msgid "Specify superuser account"
msgstr ""
#: lib/menu/selection_menu.py:175
msgid "Specify user account"
msgstr ""
#: lib/menu/selection_menu.py:181
msgid "Specify profile"
msgstr ""
#: lib/menu/selection_menu.py:186
msgid "Select audio"
msgstr ""
#: lib/menu/selection_menu.py:190
msgid "Select kernels"
msgstr ""
#: lib/menu/selection_menu.py:195
msgid "Additional packages to install"
msgstr ""
#: lib/menu/selection_menu.py:200
msgid "Configure network"
msgstr ""
#: lib/menu/selection_menu.py:208
msgid "Set automatic time sync (NTP)"
msgstr ""
#: lib/user_interaction.py:759 lib/menu/selection_menu.py:116
msgid "Select Archinstall language"
msgstr ""

Binary file not shown.

View File

@ -0,0 +1,354 @@
#: lib/user_interaction.py:82
msgid "Do you really want to abort?"
msgstr ""
#: lib/user_interaction.py:100
msgid "And one more time for verification: "
msgstr ""
#: lib/user_interaction.py:271
msgid "Would you like to use swap on zram?"
msgstr ""
#: lib/user_interaction.py:277
msgid ""
"Would you like to use automatic time synchronization (NTP) with the default "
"time servers?"
msgstr ""
#: lib/user_interaction.py:278
msgid ""
"Hardware time and other post-configuration steps might be required in order "
"for NTP to work. For more information, please check the Arch wiki"
msgstr ""
#: lib/user_interaction.py:284
msgid "Desired hostname for the installation: "
msgstr ""
#: lib/user_interaction.py:289
msgid "Username for required superuser with sudo privileges: "
msgstr ""
#: lib/user_interaction.py:303 lib/user_interaction.py:320
msgid "Password for user \"{}\""
msgstr ""
#: lib/user_interaction.py:309
msgid "Any additional users to install (leave blank for no users): "
msgstr ""
#: lib/user_interaction.py:323
msgid "Should this user be a superuser (sudoer)?"
msgstr ""
#: lib/user_interaction.py:339
msgid "Select a timezone"
msgstr ""
#: lib/user_interaction.py:353
msgid "Would you like to use GRUB as a bootloader instead of systemd-boot?"
msgstr ""
#: lib/user_interaction.py:363
msgid "Choose a bootloader"
msgstr ""
#: lib/user_interaction.py:379
msgid "Choose an audio server"
msgstr ""
#: lib/user_interaction.py:390
msgid ""
"Only packages such as base, base-devel, linux, linux-firmware, efibootmgr "
"and optional profile packages are installed."
msgstr ""
#: lib/user_interaction.py:391
msgid ""
"If you desire a web browser, such as firefox or chromium, you may specify it "
"in the following prompt."
msgstr ""
#: lib/user_interaction.py:395
msgid ""
"Write additional packages to install (space separated, leave blank to skip): "
msgstr ""
#: lib/user_interaction.py:418
msgid "Copy ISO network configuration to installation"
msgstr ""
#: lib/user_interaction.py:419
msgid ""
"Use NetworkManager (necessary to configure internet graphically in GNOME and "
"KDE)"
msgstr ""
#: lib/user_interaction.py:427
msgid "Select one network interface to configure"
msgstr ""
#: lib/user_interaction.py:440
msgid ""
"Select which mode to configure for \"{}\" or skip to use default mode \"{}\""
msgstr ""
#: lib/user_interaction.py:445
msgid "Enter the IP and subnet for {} (example: 192.168.0.5/24): "
msgstr ""
#: lib/user_interaction.py:460
msgid "Enter your gateway (router) IP address or leave blank for none: "
msgstr ""
#: lib/user_interaction.py:475
msgid "Enter your DNS servers (space separated, blank for none): "
msgstr ""
#: lib/user_interaction.py:509
msgid "Select which filesystem your main partition should use"
msgstr ""
#: lib/user_interaction.py:555
msgid "Current partition layout"
msgstr ""
#: lib/user_interaction.py:606
msgid ""
"Select what to do with\n"
"{}"
msgstr ""
#: lib/user_interaction.py:623 lib/user_interaction.py:708
msgid "Enter a desired filesystem type for the partition"
msgstr ""
#: lib/user_interaction.py:625
msgid "Enter the start sector (percentage or block number, default: {}): "
msgstr ""
#: lib/user_interaction.py:634
msgid ""
"Enter the end sector of the partition (percentage or block number, ex: {}): "
"\""
msgstr ""
#: lib/user_interaction.py:660
msgid "{} contains queued partitions, this will remove those, are you sure?"
msgstr ""
#: lib/user_interaction.py:673
msgid ""
"{}\n"
"\n"
"Select by index which partitions to delete"
msgstr ""
#: lib/user_interaction.py:681
msgid ""
"{}\n"
"\n"
"Select by index which partition to mount where"
msgstr ""
#: lib/user_interaction.py:685
msgid ""
" * Partition mount-points are relative to inside the installation, the boot "
"would be /boot as an example."
msgstr ""
#: lib/user_interaction.py:686
msgid "Select where to mount partition (leave blank to remove mountpoint): "
msgstr ""
#: lib/user_interaction.py:697
msgid ""
"{}\n"
"\n"
"Select which partition to mask for formatting"
msgstr ""
#: lib/user_interaction.py:716
msgid ""
"{}\n"
"\n"
"Select which partition to mark as encrypted"
msgstr ""
#: lib/user_interaction.py:724
msgid ""
"{}\n"
"\n"
"Select which partition to mark as bootable"
msgstr ""
#: lib/user_interaction.py:731
msgid ""
"{}\n"
"\n"
"Select which partition to set a filesystem on"
msgstr ""
#: lib/user_interaction.py:738
msgid "Enter a desired filesystem type for the partition: "
msgstr ""
#: lib/user_interaction.py:759 lib/menu/selection_menu.py:116
msgid "Select Archinstall language"
msgstr ""
#: lib/user_interaction.py:764
msgid "Wipe all selected drives and use a best-effort default partition layout"
msgstr ""
#: lib/user_interaction.py:765
msgid ""
"Select what to do with each individual drive (followed by partition usage)"
msgstr ""
#: lib/user_interaction.py:768
msgid "Select what you wish to do with the selected block devices"
msgstr ""
#: lib/user_interaction.py:821
msgid ""
"This is a list of pre-programmed profiles, they might make it easier to "
"install things like desktop environments"
msgstr ""
#: lib/user_interaction.py:846
msgid "Select Keyboard layout"
msgstr ""
#: lib/user_interaction.py:861
msgid "Select one of the regions to download packages from"
msgstr ""
#: lib/user_interaction.py:883
msgid "Select one or more hard drives to use and configure"
msgstr ""
#: lib/user_interaction.py:910
msgid ""
"For the best compatibility with your AMD hardware, you may want to use "
"either the all open-source or AMD / ATI options."
msgstr ""
#: lib/user_interaction.py:912
msgid ""
"For the best compatibility with your Intel hardware, you may want to use "
"either the all open-source or Intel options.\n"
msgstr ""
#: lib/user_interaction.py:914
msgid ""
"For the best compatibility with your Nvidia hardware, you may want to use "
"the Nvidia proprietary driver.\n"
msgstr ""
#: lib/user_interaction.py:917
msgid ""
"\n"
"\n"
"Select a graphics driver or leave blank to install all open-source drivers"
msgstr ""
#: lib/user_interaction.py:921
msgid "All open-source (default)"
msgstr ""
#: lib/user_interaction.py:940
msgid "Choose which kernels to use or leave blank for default \"{}\""
msgstr ""
#: lib/user_interaction.py:954
msgid "Choose which locale language to use"
msgstr ""
#: lib/user_interaction.py:968
msgid "Choose which locale encoding to use"
msgstr ""
#: lib/user_interaction.py:1009
msgid "Select one of the values shown below: "
msgstr ""
#: lib/user_interaction.py:1050
msgid "Select one or more of the options below: "
msgstr ""
#: lib/menu/selection_menu.py:122
msgid "Select keyboard layout"
msgstr ""
#: lib/menu/selection_menu.py:125
msgid "Select mirror region"
msgstr ""
#: lib/menu/selection_menu.py:130
msgid "Select locale language"
msgstr ""
#: lib/menu/selection_menu.py:132
msgid "Select locale encoding"
msgstr ""
#: lib/menu/selection_menu.py:135
msgid "Select harddrives"
msgstr ""
#: lib/menu/selection_menu.py:139
msgid "Select disk layout"
msgstr ""
#: lib/menu/selection_menu.py:147
msgid "Set encryption password"
msgstr ""
#: lib/menu/selection_menu.py:153
msgid "Use swap"
msgstr ""
#: lib/menu/selection_menu.py:158
msgid "Select bootloader"
msgstr ""
#: lib/menu/selection_menu.py:164
msgid "Set root password"
msgstr ""
#: lib/menu/selection_menu.py:169
msgid "Specify superuser account"
msgstr ""
#: lib/menu/selection_menu.py:175
msgid "Specify user account"
msgstr ""
#: lib/menu/selection_menu.py:181
msgid "Specify profile"
msgstr ""
#: lib/menu/selection_menu.py:186
msgid "Select audio"
msgstr ""
#: lib/menu/selection_menu.py:190
msgid "Select kernels"
msgstr ""
#: lib/menu/selection_menu.py:195
msgid "Additional packages to install"
msgstr ""
#: lib/menu/selection_menu.py:200
msgid "Configure network"
msgstr ""
#: lib/menu/selection_menu.py:208
msgid "Set automatic time sync (NTP)"
msgstr ""
#~ msgid "this is a test string"
#~ msgstr "Questo e un esempio"

View File

@ -0,0 +1,362 @@
#: lib/user_interaction.py:82
msgid "Do you really want to abort?"
msgstr ""
#: lib/user_interaction.py:100
msgid "And one more time for verification: "
msgstr ""
#: lib/user_interaction.py:271
msgid "Would you like to use swap on zram?"
msgstr ""
#: lib/user_interaction.py:277
msgid ""
"Would you like to use automatic time synchronization (NTP) with the default "
"time servers?"
msgstr ""
#: lib/user_interaction.py:278
msgid ""
"Hardware time and other post-configuration steps might be required in order "
"for NTP to work. For more information, please check the Arch wiki"
msgstr ""
#: lib/user_interaction.py:284
msgid "Desired hostname for the installation: "
msgstr ""
#: lib/user_interaction.py:289
msgid "Username for required superuser with sudo privileges: "
msgstr ""
#: lib/user_interaction.py:303 lib/user_interaction.py:320
msgid "Password for user \"{}\""
msgstr ""
#: lib/user_interaction.py:309
msgid "Any additional users to install (leave blank for no users): "
msgstr ""
#: lib/user_interaction.py:323
msgid "Should this user be a superuser (sudoer)?"
msgstr ""
#: lib/user_interaction.py:339
msgid "Select a timezone"
msgstr ""
#: lib/user_interaction.py:353
msgid "Would you like to use GRUB as a bootloader instead of systemd-boot?"
msgstr ""
#: lib/user_interaction.py:363
msgid "Choose a bootloader"
msgstr ""
#: lib/user_interaction.py:379
msgid "Choose an audio server"
msgstr ""
#: lib/user_interaction.py:390
msgid ""
"Only packages such as base, base-devel, linux, linux-firmware, efibootmgr "
"and optional profile packages are installed."
msgstr ""
#: lib/user_interaction.py:391
msgid ""
"If you desire a web browser, such as firefox or chromium, you may specify it "
"in the following prompt."
msgstr ""
#: lib/user_interaction.py:395
msgid ""
"Write additional packages to install (space separated, leave blank to skip): "
msgstr ""
#: lib/user_interaction.py:418
msgid "Copy ISO network configuration to installation"
msgstr ""
#: lib/user_interaction.py:419
msgid ""
"Use NetworkManager (necessary to configure internet graphically in GNOME and "
"KDE)"
msgstr ""
#: lib/user_interaction.py:427
msgid "Select one network interface to configure"
msgstr ""
#: lib/user_interaction.py:440
msgid ""
"Select which mode to configure for \"{}\" or skip to use default mode \"{}\""
msgstr ""
#: lib/user_interaction.py:445
msgid "Enter the IP and subnet for {} (example: 192.168.0.5/24): "
msgstr ""
#: lib/user_interaction.py:460
msgid "Enter your gateway (router) IP address or leave blank for none: "
msgstr ""
#: lib/user_interaction.py:475
msgid "Enter your DNS servers (space separated, blank for none): "
msgstr ""
#: lib/user_interaction.py:509
msgid "Select which filesystem your main partition should use"
msgstr ""
#: lib/user_interaction.py:555
msgid "Current partition layout"
msgstr ""
#: lib/user_interaction.py:606
msgid ""
"Select what to do with\n"
"{}"
msgstr ""
#: lib/user_interaction.py:623 lib/user_interaction.py:708
msgid "Enter a desired filesystem type for the partition"
msgstr ""
#: lib/user_interaction.py:625
msgid "Enter the start sector (percentage or block number, default: {}): "
msgstr ""
#: lib/user_interaction.py:634
msgid ""
"Enter the end sector of the partition (percentage or block number, ex: {}): "
"\""
msgstr ""
#: lib/user_interaction.py:660
msgid "{} contains queued partitions, this will remove those, are you sure?"
msgstr ""
#: lib/user_interaction.py:673
msgid ""
"{}\n"
"\n"
"Select by index which partitions to delete"
msgstr ""
#: lib/user_interaction.py:681
msgid ""
"{}\n"
"\n"
"Select by index which partition to mount where"
msgstr ""
#: lib/user_interaction.py:685
msgid ""
" * Partition mount-points are relative to inside the installation, the boot "
"would be /boot as an example."
msgstr ""
#: lib/user_interaction.py:686
msgid "Select where to mount partition (leave blank to remove mountpoint): "
msgstr ""
#: lib/user_interaction.py:697
msgid ""
"{}\n"
"\n"
"Select which partition to mask for formatting"
msgstr ""
#: lib/user_interaction.py:716
msgid ""
"{}\n"
"\n"
"Select which partition to mark as encrypted"
msgstr ""
#: lib/user_interaction.py:724
msgid ""
"{}\n"
"\n"
"Select which partition to mark as bootable"
msgstr ""
#: lib/user_interaction.py:731
msgid ""
"{}\n"
"\n"
"Select which partition to set a filesystem on"
msgstr ""
#: lib/user_interaction.py:738
msgid "Enter a desired filesystem type for the partition: "
msgstr ""
#: lib/user_interaction.py:759
msgid "Select archinstall language"
msgstr ""
#: lib/user_interaction.py:764
msgid "Wipe all selected drives and use a best-effort default partition layout"
msgstr ""
#: lib/user_interaction.py:765
msgid ""
"Select what to do with each individual drive (followed by partition usage)"
msgstr ""
#: lib/user_interaction.py:768
msgid "Select what you wish to do with the selected block devices"
msgstr ""
#: lib/user_interaction.py:821
msgid ""
"This is a list of pre-programmed profiles, they might make it easier to "
"install things like desktop environments"
msgstr ""
#: lib/user_interaction.py:846
msgid "Select Keyboard layout"
msgstr ""
#: lib/user_interaction.py:861
msgid "Select one of the regions to download packages from"
msgstr ""
#: lib/user_interaction.py:883
msgid "Select one or more hard drives to use and configure"
msgstr ""
#: lib/user_interaction.py:910
msgid ""
"For the best compatibility with your AMD hardware, you may want to use "
"either the all open-source or AMD / ATI options."
msgstr ""
#: lib/user_interaction.py:912
msgid ""
"For the best compatibility with your Intel hardware, you may want to use "
"either the all open-source or Intel options.\n"
msgstr ""
#: lib/user_interaction.py:914
msgid ""
"For the best compatibility with your Nvidia hardware, you may want to use "
"the Nvidia proprietary driver.\n"
msgstr ""
#: lib/user_interaction.py:917
msgid ""
"\n"
"\n"
"Select a graphics driver or leave blank to install all open-source drivers"
msgstr ""
#: lib/user_interaction.py:921
msgid "All open-source (default)"
msgstr ""
#: lib/user_interaction.py:940
msgid "Choose which kernels to use or leave blank for default \"{}\""
msgstr ""
#: lib/user_interaction.py:954
msgid "Choose which locale language to use"
msgstr ""
#: lib/user_interaction.py:968
msgid "Choose which locale encoding to use"
msgstr ""
#: lib/user_interaction.py:1009
msgid "Select one of the values shown below: "
msgstr ""
#: lib/user_interaction.py:1050
msgid "Select one or more of the options below: "
msgstr ""
#: lib/menu/selection_menu.py:116
msgid "Archinstall language"
msgstr ""
#: lib/menu/selection_menu.py:122
msgid "Select keyboard layout"
msgstr ""
#: lib/menu/selection_menu.py:125
msgid "Select mirror region"
msgstr ""
#: lib/menu/selection_menu.py:130
msgid "Select locale language"
msgstr ""
#: lib/menu/selection_menu.py:132
msgid "Select locale encoding"
msgstr ""
#: lib/menu/selection_menu.py:135
msgid "Select harddrives"
msgstr ""
#: lib/menu/selection_menu.py:139
msgid "Select disk layout"
msgstr ""
#: lib/menu/selection_menu.py:147
msgid "Set encryption password"
msgstr ""
#: lib/menu/selection_menu.py:153
msgid "Use swap"
msgstr ""
#: lib/menu/selection_menu.py:158
msgid "Select bootloader"
msgstr ""
#: lib/menu/selection_menu.py:164
msgid "Set root password"
msgstr ""
#: lib/menu/selection_menu.py:169
msgid "Specify superuser account"
msgstr ""
#: lib/menu/selection_menu.py:175
msgid "Specify user account"
msgstr ""
#: lib/menu/selection_menu.py:181
msgid "Specify profile"
msgstr ""
#: lib/menu/selection_menu.py:186
msgid "Select audio"
msgstr ""
#: lib/menu/selection_menu.py:190
msgid "Select kernels"
msgstr ""
#: lib/menu/selection_menu.py:195
msgid "Additional packages to install"
msgstr ""
#: lib/menu/selection_menu.py:200
msgid "Configure network"
msgstr ""
#: lib/menu/selection_menu.py:208
msgid "Set automatic time sync (NTP)"
msgstr ""
#: lib/user_interaction.py:759 lib/menu/selection_menu.py:116
msgid "Select Archinstall language"
msgstr ""
#~ msgid "this is a test string"
#~ msgstr "Questo e un esempio"

View File

@ -0,0 +1,184 @@
[{"abbr": "aa", "lang": "Afar"},
{"abbr": "ab", "lang": "Abkhazian"},
{"abbr": "af", "lang": "Afrikaans"},
{"abbr": "ak", "lang": "Akan"},
{"abbr": "am", "lang": "Amharic"},
{"abbr": "ar", "lang": "Arabic"},
{"abbr": "an", "lang": "Aragonese"},
{"abbr": "as", "lang": "Assamese"},
{"abbr": "av", "lang": "Avaric"},
{"abbr": "ae", "lang": "Avestan"},
{"abbr": "ay", "lang": "Aymara"},
{"abbr": "az", "lang": "Azerbaijani"},
{"abbr": "ba", "lang": "Bashkir"},
{"abbr": "bm", "lang": "Bambara"},
{"abbr": "be", "lang": "Belarusian"},
{"abbr": "bn", "lang": "Bengali"},
{"abbr": "bi", "lang": "Bislama"},
{"abbr": "bo", "lang": "Tibetan"},
{"abbr": "bs", "lang": "Bosnian"},
{"abbr": "br", "lang": "Breton"},
{"abbr": "bg", "lang": "Bulgarian"},
{"abbr": "ca", "lang": "Catalan"},
{"abbr": "cs", "lang": "Czech"},
{"abbr": "ch", "lang": "Chamorro"},
{"abbr": "ce", "lang": "Chechen"},
{"abbr": "cu", "lang": "Church Slavic"},
{"abbr": "cv", "lang": "Chuvash"},
{"abbr": "kw", "lang": "Cornish"},
{"abbr": "co", "lang": "Corsican"},
{"abbr": "cr", "lang": "Cree"},
{"abbr": "cy", "lang": "Welsh"},
{"abbr": "da", "lang": "Danish"},
{"abbr": "de", "lang": "German"},
{"abbr": "dv", "lang": "Dhivehi"},
{"abbr": "dz", "lang": "Dzongkha"},
{"abbr": "el", "lang": "Modern Greek (1453-)"},
{"abbr": "en", "lang": "English"},
{"abbr": "eo", "lang": "Esperanto"},
{"abbr": "et", "lang": "Estonian"},
{"abbr": "eu", "lang": "Basque"},
{"abbr": "ee", "lang": "Ewe"},
{"abbr": "fo", "lang": "Faroese"},
{"abbr": "fa", "lang": "Persian"},
{"abbr": "fj", "lang": "Fijian"},
{"abbr": "fi", "lang": "Finnish"},
{"abbr": "fr", "lang": "French"},
{"abbr": "fy", "lang": "Western Frisian"},
{"abbr": "ff", "lang": "Fulah"},
{"abbr": "gd", "lang": "Scottish Gaelic"},
{"abbr": "ga", "lang": "Irish"},
{"abbr": "gl", "lang": "Galician"},
{"abbr": "gv", "lang": "Manx"},
{"abbr": "gn", "lang": "Guarani"},
{"abbr": "gu", "lang": "Gujarati"},
{"abbr": "ht", "lang": "Haitian"},
{"abbr": "ha", "lang": "Hausa"},
{"abbr": "sh", "lang": "Serbo-Croatian"},
{"abbr": "he", "lang": "Hebrew"},
{"abbr": "hz", "lang": "Herero"},
{"abbr": "hi", "lang": "Hindi"},
{"abbr": "ho", "lang": "Hiri Motu"},
{"abbr": "hr", "lang": "Croatian"},
{"abbr": "hu", "lang": "Hungarian"},
{"abbr": "hy", "lang": "Armenian"},
{"abbr": "ig", "lang": "Igbo"},
{"abbr": "io", "lang": "Ido"},
{"abbr": "ii", "lang": "Sichuan Yi"},
{"abbr": "iu", "lang": "Inuktitut"},
{"abbr": "ie", "lang": "Interlingue"},
{"abbr": "ia", "lang": "Interlingua (International Auxiliary Language Association)"},
{"abbr": "id", "lang": "Indonesian"},
{"abbr": "ik", "lang": "Inupiaq"},
{"abbr": "is", "lang": "Icelandic"},
{"abbr": "it", "lang": "Italian"},
{"abbr": "jv", "lang": "Javanese"},
{"abbr": "ja", "lang": "Japanese"},
{"abbr": "kl", "lang": "Kalaallisut"},
{"abbr": "kn", "lang": "Kannada"},
{"abbr": "ks", "lang": "Kashmiri"},
{"abbr": "ka", "lang": "Georgian"},
{"abbr": "kr", "lang": "Kanuri"},
{"abbr": "kk", "lang": "Kazakh"},
{"abbr": "km", "lang": "Central Khmer"},
{"abbr": "ki", "lang": "Kikuyu"},
{"abbr": "rw", "lang": "Kinyarwanda"},
{"abbr": "ky", "lang": "Kirghiz"},
{"abbr": "kv", "lang": "Komi"},
{"abbr": "kg", "lang": "Kongo"},
{"abbr": "ko", "lang": "Korean"},
{"abbr": "kj", "lang": "Kuanyama"},
{"abbr": "ku", "lang": "Kurdish"},
{"abbr": "lo", "lang": "Lao"},
{"abbr": "la", "lang": "Latin"},
{"abbr": "lv", "lang": "Latvian"},
{"abbr": "li", "lang": "Limburgan"},
{"abbr": "ln", "lang": "Lingala"},
{"abbr": "lt", "lang": "Lithuanian"},
{"abbr": "lb", "lang": "Luxembourgish"},
{"abbr": "lu", "lang": "Luba-Katanga"},
{"abbr": "lg", "lang": "Ganda"},
{"abbr": "mh", "lang": "Marshallese"},
{"abbr": "ml", "lang": "Malayalam"},
{"abbr": "mr", "lang": "Marathi"},
{"abbr": "mk", "lang": "Macedonian"},
{"abbr": "mg", "lang": "Malagasy"},
{"abbr": "mt", "lang": "Maltese"},
{"abbr": "mn", "lang": "Mongolian"},
{"abbr": "mi", "lang": "Maori"},
{"abbr": "ms", "lang": "Malay (macrolanguage)"},
{"abbr": "my", "lang": "Burmese"},
{"abbr": "na", "lang": "Nauru"},
{"abbr": "nv", "lang": "Navajo"},
{"abbr": "nr", "lang": "South Ndebele"},
{"abbr": "nd", "lang": "North Ndebele"},
{"abbr": "ng", "lang": "Ndonga"},
{"abbr": "ne", "lang": "Nepali (macrolanguage)"},
{"abbr": "nl", "lang": "Dutch"},
{"abbr": "nn", "lang": "Norwegian Nynorsk"},
{"abbr": "nb", "lang": "Norwegian Bokmål"},
{"abbr": "no", "lang": "Norwegian"},
{"abbr": "ny", "lang": "Nyanja"},
{"abbr": "oc", "lang": "Occitan (post 1500)"},
{"abbr": "oj", "lang": "Ojibwa"},
{"abbr": "or", "lang": "Oriya (macrolanguage)"},
{"abbr": "om", "lang": "Oromo"},
{"abbr": "os", "lang": "Ossetian"},
{"abbr": "pa", "lang": "Panjabi"},
{"abbr": "pi", "lang": "Pali"},
{"abbr": "pl", "lang": "Polish"},
{"abbr": "pt", "lang": "Portuguese"},
{"abbr": "ps", "lang": "Pushto"},
{"abbr": "qu", "lang": "Quechua"},
{"abbr": "rm", "lang": "Romansh"},
{"abbr": "ro", "lang": "Romanian"},
{"abbr": "rn", "lang": "Rundi"},
{"abbr": "ru", "lang": "Russian"},
{"abbr": "sg", "lang": "Sango"},
{"abbr": "sa", "lang": "Sanskrit"},
{"abbr": "si", "lang": "Sinhala"},
{"abbr": "sk", "lang": "Slovak"},
{"abbr": "sl", "lang": "Slovenian"},
{"abbr": "se", "lang": "Northern Sami"},
{"abbr": "sm", "lang": "Samoan"},
{"abbr": "sn", "lang": "Shona"},
{"abbr": "sd", "lang": "Sindhi"},
{"abbr": "so", "lang": "Somali"},
{"abbr": "st", "lang": "Southern Sotho"},
{"abbr": "es", "lang": "Spanish"},
{"abbr": "sq", "lang": "Albanian"},
{"abbr": "sc", "lang": "Sardinian"},
{"abbr": "sr", "lang": "Serbian"},
{"abbr": "ss", "lang": "Swati"},
{"abbr": "su", "lang": "Sundanese"},
{"abbr": "sw", "lang": "Swahili (macrolanguage)"},
{"abbr": "sv", "lang": "Swedish"},
{"abbr": "ty", "lang": "Tahitian"},
{"abbr": "ta", "lang": "Tamil"},
{"abbr": "tt", "lang": "Tatar"},
{"abbr": "te", "lang": "Telugu"},
{"abbr": "tg", "lang": "Tajik"},
{"abbr": "tl", "lang": "Tagalog"},
{"abbr": "th", "lang": "Thai"},
{"abbr": "ti", "lang": "Tigrinya"},
{"abbr": "to", "lang": "Tonga (Tonga Islands)"},
{"abbr": "tn", "lang": "Tswana"},
{"abbr": "ts", "lang": "Tsonga"},
{"abbr": "tk", "lang": "Turkmen"},
{"abbr": "tr", "lang": "Turkish"},
{"abbr": "tw", "lang": "Twi"},
{"abbr": "ug", "lang": "Uighur"},
{"abbr": "uk", "lang": "Ukrainian"},
{"abbr": "ur", "lang": "Urdu"},
{"abbr": "uz", "lang": "Uzbek"},
{"abbr": "ve", "lang": "Venda"},
{"abbr": "vi", "lang": "Vietnamese"},
{"abbr": "vo", "lang": "Volapük"},
{"abbr": "wa", "lang": "Walloon"},
{"abbr": "wo", "lang": "Wolof"},
{"abbr": "xh", "lang": "Xhosa"},
{"abbr": "yi", "lang": "Yiddish"},
{"abbr": "yo", "lang": "Yoruba"},
{"abbr": "za", "lang": "Zhuang"},
{"abbr": "zh", "lang": "Chinese"},
{"abbr": "zu", "lang": "Zulu"}]