From c40d27b0749690eddb95396a936b89238cb2fe57 Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Sun, 1 May 2022 17:06:23 +0200 Subject: The dict object is deprectrecated, instead .select() is suggested. (#1107) * The dict object is deprectrecated, instead .select() is suggested. * removed copy paste issue * Removed tests, they'll be added in a separate PR --- archinstall/lib/plugins.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'archinstall/lib') diff --git a/archinstall/lib/plugins.py b/archinstall/lib/plugins.py index 7f920317..cd7b14a4 100644 --- a/archinstall/lib/plugins.py +++ b/archinstall/lib/plugins.py @@ -18,7 +18,7 @@ plugins = {} # 1: List archinstall.plugin definitions # 2: Load the plugin entrypoint # 3: Initiate the plugin and store it as .name in plugins -for plugin_definition in metadata.entry_points().get('archinstall.plugin', []): +for plugin_definition in metadata.entry_points().select('archinstall.plugin'): plugin_entrypoint = plugin_definition.load() try: plugins[plugin_definition.name] = plugin_entrypoint() -- cgit v1.2.3-70-g09d2 From 48b1001734529c86d09c718d28e32cd6c23958bb Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Sun, 1 May 2022 17:08:05 +0200 Subject: Hotfix for plugins, forgot group= --- archinstall/lib/plugins.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'archinstall/lib') diff --git a/archinstall/lib/plugins.py b/archinstall/lib/plugins.py index cd7b14a4..99e3811c 100644 --- a/archinstall/lib/plugins.py +++ b/archinstall/lib/plugins.py @@ -18,7 +18,7 @@ plugins = {} # 1: List archinstall.plugin definitions # 2: Load the plugin entrypoint # 3: Initiate the plugin and store it as .name in plugins -for plugin_definition in metadata.entry_points().select('archinstall.plugin'): +for plugin_definition in metadata.entry_points().select(group='archinstall.plugin'): plugin_entrypoint = plugin_definition.load() try: plugins[plugin_definition.name] = plugin_entrypoint() -- cgit v1.2.3-70-g09d2 From f00717ff6fd1c72d61b6928444fbf26a3f5e0e64 Mon Sep 17 00:00:00 2001 From: Daniel Girtler Date: Mon, 2 May 2022 21:01:50 +1000 Subject: Fix #1106 (#1119) * Fix #1106 * flake8 * flake8 Co-authored-by: Daniel Girtler --- archinstall/lib/menu/global_menu.py | 10 +++--- .../lib/user_interaction/partitioning_conf.py | 2 +- archinstall/lib/user_interaction/system_conf.py | 7 ++-- profiles/desktop.py | 37 ++++++++++++---------- profiles/i3.py | 29 +++++++++-------- profiles/server.py | 17 ++++++---- profiles/sway.py | 16 +++++++--- profiles/xorg.py | 8 +++-- 8 files changed, 72 insertions(+), 54 deletions(-) (limited to 'archinstall/lib') diff --git a/archinstall/lib/menu/global_menu.py b/archinstall/lib/menu/global_menu.py index afccd45b..63b8c03e 100644 --- a/archinstall/lib/menu/global_menu.py +++ b/archinstall/lib/menu/global_menu.py @@ -8,7 +8,6 @@ from ..general import SysCommand, secret from ..hardware import has_uefi from ..models import NetworkConfiguration from ..storage import storage -from ..output import log from ..profiles import is_desktop_profile from ..disk import encrypted_partitions @@ -277,11 +276,12 @@ class GlobalMenu(GeneralMenu): if profile and profile.has_prep_function(): namespace = f'{profile.namespace}.py' with profile.load_instructions(namespace=namespace) as imported: - if not imported._prep_function(): - log(' * Profile\'s preparation requirements was not fulfilled.', fg='red') - exit(1) + if imported._prep_function(): + return profile + else: + return self._select_profile() - return profile + return self._data_store.get('profile', None) def _create_superuser_account(self): superusers = ask_for_superuser_account(str(_('Manage superuser accounts: '))) diff --git a/archinstall/lib/user_interaction/partitioning_conf.py b/archinstall/lib/user_interaction/partitioning_conf.py index af1d224f..db52d447 100644 --- a/archinstall/lib/user_interaction/partitioning_conf.py +++ b/archinstall/lib/user_interaction/partitioning_conf.py @@ -215,7 +215,7 @@ def manage_new_and_existing_partitions(block_device: 'BlockDevice') -> Dict[str, continue block_device_struct.update(suggest_single_disk_layout(block_device)[block_device.path]) - + elif task is None: return block_device_struct else: diff --git a/archinstall/lib/user_interaction/system_conf.py b/archinstall/lib/user_interaction/system_conf.py index 0120fd8a..5d4c80dc 100644 --- a/archinstall/lib/user_interaction/system_conf.py +++ b/archinstall/lib/user_interaction/system_conf.py @@ -60,7 +60,7 @@ def select_harddrives(preset: List[str] = []) -> List[str]: return [] -def select_driver(options: Dict[str, Any] = AVAILABLE_GFX_DRIVERS, force_ask: bool = False) -> str: +def select_driver(options: Dict[str, Any] = AVAILABLE_GFX_DRIVERS) -> str: """ Some what convoluted function, whose job is simple. Select a graphics driver from a pre-defined set of popular options. @@ -88,9 +88,8 @@ def select_driver(options: Dict[str, Any] = AVAILABLE_GFX_DRIVERS, force_ask: bo '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') - arguments['gfx_driver'] = Menu(title, drivers).run() + 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)") diff --git a/profiles/desktop.py b/profiles/desktop.py index bd3353e8..977fe2de 100644 --- a/profiles/desktop.py +++ b/profiles/desktop.py @@ -1,5 +1,6 @@ # A desktop environment selector. import archinstall +from archinstall import log is_top_level_profile = True @@ -38,29 +39,33 @@ __supported__ = [ ] -def _prep_function(*args, **kwargs): +def _prep_function(*args, **kwargs) -> bool: """ Magic function called by the importing installer before continuing any further. It also avoids executing any other code in this stage. So it's a safe way to ask the user for more input before any other installer steps start. """ - desktop = archinstall.Menu('Select your desired desktop environment', __supported__, skip=False).run() + desktop = archinstall.Menu('Select your desired desktop environment', __supported__).run() - # Temporarily store the selected desktop profile - # in a session-safe location, since this module will get reloaded - # the next time it gets executed. - if not archinstall.storage.get('_desktop_profile', None): - archinstall.storage['_desktop_profile'] = desktop - if not archinstall.arguments.get('desktop-environment', None): - archinstall.arguments['desktop-environment'] = desktop - profile = archinstall.Profile(None, desktop) - # Loading the instructions with a custom namespace, ensures that a __name__ comparison is never triggered. - with profile.load_instructions(namespace=f"{desktop}.py") as imported: - if hasattr(imported, '_prep_function'): - return imported._prep_function() - else: - print(f"Deprecated (??): {desktop} profile has no _prep_function() anymore") + if desktop: + # Temporarily store the selected desktop profile + # in a session-safe location, since this module will get reloaded + # the next time it gets executed. + if not archinstall.storage.get('_desktop_profile', None): + archinstall.storage['_desktop_profile'] = desktop + if not archinstall.arguments.get('desktop-environment', None): + archinstall.arguments['desktop-environment'] = desktop + profile = archinstall.Profile(None, desktop) + # Loading the instructions with a custom namespace, ensures that a __name__ comparison is never triggered. + with profile.load_instructions(namespace=f"{desktop}.py") as imported: + if hasattr(imported, '_prep_function'): + return imported._prep_function() + else: + log(f"Deprecated (??): {desktop} profile has no _prep_function() anymore") + exit(1) + + return False if __name__ == 'desktop': diff --git a/profiles/i3.py b/profiles/i3.py index 24956209..3283848e 100644 --- a/profiles/i3.py +++ b/profiles/i3.py @@ -27,20 +27,21 @@ def _prep_function(*args, **kwargs): supported_configurations = ['i3-wm', 'i3-gaps'] - desktop = archinstall.Menu('Select your desired configuration', supported_configurations, skip=False).run() - - # Temporarily store the selected desktop profile - # in a session-safe location, since this module will get reloaded - # the next time it gets executed. - archinstall.storage['_i3_configuration'] = desktop - - # i3 requires a functioning Xorg installation. - profile = archinstall.Profile(None, 'xorg') - with profile.load_instructions(namespace='xorg.py') as imported: - if hasattr(imported, '_prep_function'): - return imported._prep_function() - else: - print('Deprecated (??): xorg profile has no _prep_function() anymore') + desktop = archinstall.Menu('Select your desired configuration', supported_configurations).run() + + if desktop: + # Temporarily store the selected desktop profile + # in a session-safe location, since this module will get reloaded + # the next time it gets executed. + archinstall.storage['_i3_configuration'] = desktop + + # i3 requires a functioning Xorg installation. + profile = archinstall.Profile(None, 'xorg') + with profile.load_instructions(namespace='xorg.py') as imported: + if hasattr(imported, '_prep_function'): + return imported._prep_function() + else: + print('Deprecated (??): xorg profile has no _prep_function() anymore') if __name__ == 'i3': diff --git a/profiles/server.py b/profiles/server.py index c4f35f7b..bbeece12 100644 --- a/profiles/server.py +++ b/profiles/server.py @@ -26,15 +26,18 @@ def _prep_function(*args, **kwargs): Magic function called by the importing installer before continuing any further. """ - if not archinstall.storage.get('_selected_servers', None): - servers = archinstall.Menu( - 'Choose which servers to install, if none then a minimal installation wil be done', available_servers, - multi=True - ).run() - + servers = archinstall.Menu( + 'Choose which servers to install, if none then a minimal installation wil be done', + available_servers, + preset_values=archinstall.storage.get('_selected_servers', []), + multi=True + ).run() + + if servers: archinstall.storage['_selected_servers'] = servers + return True - return True + return False if __name__ == 'server': diff --git a/profiles/sway.py b/profiles/sway.py index 32d626d7..e9c71b79 100644 --- a/profiles/sway.py +++ b/profiles/sway.py @@ -18,7 +18,9 @@ __packages__ = [ def _check_driver() -> bool: - if "nvidia" in archinstall.storage.get("gfx_driver_packages", None): + packages = archinstall.storage.get("gfx_driver_packages", []) + + if packages and "nvidia" in packages: prompt = 'The proprietary Nvidia driver is not supported by Sway. It is likely that you will run into issues, are you okay with that?' choice = archinstall.Menu(prompt, ['yes', 'no'], default_option='no').run() if choice == 'no': @@ -34,11 +36,15 @@ def _prep_function(*args, **kwargs): other code in this stage. So it's a safe way to ask the user for more input before any other installer steps start. """ - archinstall.storage["gfx_driver_packages"] = archinstall.select_driver(force_ask=True) - if not _check_driver(): - return _prep_function(args, kwargs) + driver = archinstall.select_driver() - return True + if driver: + archinstall.storage["gfx_driver_packages"] = driver + if not _check_driver(): + return _prep_function(args, kwargs) + return True + + return False # Ensures that this code only gets executed if executed diff --git a/profiles/xorg.py b/profiles/xorg.py index 33d2aa4c..237e4350 100644 --- a/profiles/xorg.py +++ b/profiles/xorg.py @@ -25,12 +25,16 @@ def _prep_function(*args, **kwargs): for more input before any other installer steps start. """ - archinstall.storage["gfx_driver_packages"] = archinstall.select_driver() + driver = archinstall.select_driver() + + if driver: + archinstall.storage["gfx_driver_packages"] = driver + return True # TODO: Add language section and/or merge it with the locale selected # earlier in for instance guided.py installer. - return True + return False # Ensures that this code only gets executed if executed -- cgit v1.2.3-70-g09d2 From 2d371571783cde70554e3e4e272beab2546ffff9 Mon Sep 17 00:00:00 2001 From: Daniel Girtler Date: Mon, 2 May 2022 21:02:21 +1000 Subject: Fix 1091 and other minor fixes (#1103) * Fix 1091 * Update * flake8 * Only display btrfs options if there is a filesystem * Fix 1118 Co-authored-by: Daniel Girtler --- archinstall/lib/menu/list_manager.py | 35 ++++++++++------ archinstall/lib/user_interaction/disk_conf.py | 12 +++--- .../lib/user_interaction/manage_users_conf.py | 4 +- .../lib/user_interaction/partitioning_conf.py | 48 ++++++++++++++-------- .../lib/user_interaction/subvolume_config.py | 16 ++++---- 5 files changed, 71 insertions(+), 44 deletions(-) (limited to 'archinstall/lib') diff --git a/archinstall/lib/menu/list_manager.py b/archinstall/lib/menu/list_manager.py index 4e6dffbe..377d30f2 100644 --- a/archinstall/lib/menu/list_manager.py +++ b/archinstall/lib/menu/list_manager.py @@ -89,7 +89,7 @@ from .text_input import TextInput from .menu import Menu from os import system from copy import copy -from typing import Union, Any, List, TYPE_CHECKING +from typing import Union, Any, TYPE_CHECKING, Dict if TYPE_CHECKING: _: Any @@ -149,18 +149,26 @@ class ListManager: # default values for the null case self.target = None self.action = self._null_action + if len(self._data) == 0 and self._null_action: self.exec_action(self._data) def run(self): while True: - self._data_formatted = self.reformat(self._data) - options = self._data_formatted + [self.separator] + # this will return a dictionary with the key as the menu entry to be displayed + # and the value is the original value from the self._data container + data_formatted = self.reformat(self._data) + options = list(data_formatted.keys()) + options.append(self.separator) + if self._default_action: options += self._default_action + options += self.bottom_list + system('clear') - target = Menu(self._prompt, + target = Menu( + self._prompt, options, sort=False, clear_screen=False, @@ -171,19 +179,20 @@ class ListManager: if not target or target in self.bottom_list: self.action = target break - if target and target == self.separator: - continue + if target and target in self._default_action: self.action = target - target = None self.target = None self.exec_action(self._data) continue + if isinstance(self._data,dict): - key = list(self._data.keys())[self._data_formatted.index(target)] - self.target = {key: self._data[key]} + data_key = data_formatted[target] + key = self._data[data_key] + self.target = {data_key: key} else: - self.target = self._data[self._data_formatted.index(target)] + self.target = self._data[data_formatted[target]] + # Possible enhacement. If run_actions returns false a message line indicating the failure self.run_actions(target) @@ -211,15 +220,15 @@ class ListManager: The following methods are expected to be overwritten by the user if the needs of the list are beyond the simple case """ - def reformat(self, data: Any) -> List[Any]: + def reformat(self, data: Any) -> Dict[str, Any]: """ method to get the data in a format suitable to be shown It is executed once for run loop and processes the whole self._data structure """ if isinstance(data,dict): - return list(map(lambda x:f"{x} : {data[x]}",data)) + return {f'{k}: {v}': k for k, v in data.items()} else: - return list(map(lambda x:str(x),data)) + return {str(k): k for k in data} def action_list(self): """ diff --git a/archinstall/lib/user_interaction/disk_conf.py b/archinstall/lib/user_interaction/disk_conf.py index 9238a766..a51f10b8 100644 --- a/archinstall/lib/user_interaction/disk_conf.py +++ b/archinstall/lib/user_interaction/disk_conf.py @@ -41,13 +41,13 @@ def select_disk_layout(block_devices: list, advanced_options=False) -> Dict[str, custome_mode = str(_('Select what to do with each individual drive (followed by partition usage)')) modes = [wipe_mode, custome_mode] - print(modes) - 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).run() - if mode == wipe_mode: - return get_default_partition_layout(block_devices, advanced_options) - else: - return select_individual_blockdevice_usage(block_devices) + if mode: + if mode == wipe_mode: + return get_default_partition_layout(block_devices, advanced_options) + else: + return select_individual_blockdevice_usage(block_devices) def select_disk(dict_o_disks: Dict[str, BlockDevice]) -> BlockDevice: diff --git a/archinstall/lib/user_interaction/manage_users_conf.py b/archinstall/lib/user_interaction/manage_users_conf.py index a6ff3111..d69ccce9 100644 --- a/archinstall/lib/user_interaction/manage_users_conf.py +++ b/archinstall/lib/user_interaction/manage_users_conf.py @@ -36,7 +36,7 @@ class UserList(ListManager): ] super().__init__(prompt, lusers, self.actions, self.actions[0]) - def reformat(self, data: Any) -> List[Any]: + def reformat(self, data: List) -> Dict: def format_element(elem :str): # secret gives away the length of the password if data[elem].get('!password'): @@ -49,7 +49,7 @@ class UserList(ListManager): super_user = ' ' return f"{elem:16}: password {pwd:16} {super_user}" - return list(map(lambda x: format_element(x), data)) + return {format_element(e): e for e in data} def action_list(self): if self.target: diff --git a/archinstall/lib/user_interaction/partitioning_conf.py b/archinstall/lib/user_interaction/partitioning_conf.py index db52d447..2182c6b3 100644 --- a/archinstall/lib/user_interaction/partitioning_conf.py +++ b/archinstall/lib/user_interaction/partitioning_conf.py @@ -65,21 +65,26 @@ def _current_partition_layout(partitions: List[Partition], with_idx: bool = Fals return f'\n\n{title}:\n\n{current_layout}' -def select_partition(title :str, partitions :List[Partition], multiple :bool = False, filter :Callable = None) -> Union[int, List[int], None]: +def _get_partitions(partitions :List[Partition], filter_ :Callable = None) -> List[str]: """ filter allows to filter out the indexes once they are set. Should return True if element is to be included """ partition_indexes = [] for i in range(len(partitions)): - if filter: - if filter(partitions[i]): + if filter_: + if filter_(partitions[i]): partition_indexes.append(str(i)) else: partition_indexes.append(str(i)) + + return partition_indexes + + +def select_partition(title :str, partitions :List[Partition], multiple :bool = False, filter_ :Callable = None) -> Union[int, List[int], None]: + partition_indexes = _get_partitions(partitions, filter_) + if len(partition_indexes) == 0: return None - # old code without filter - # partition_indexes = list(map(str, range(len(partitions)))) partition = Menu(title, partition_indexes, multi=multiple).run() @@ -133,7 +138,7 @@ def manage_new_and_existing_partitions(block_device: 'BlockDevice') -> Dict[str, while True: modes = [new_partition, suggest_partition_layout] - if len(block_device_struct['partitions']): + if len(block_device_struct['partitions']) > 0: modes += [ delete_partition, delete_all_partitions, @@ -143,9 +148,16 @@ def manage_new_and_existing_partitions(block_device: 'BlockDevice') -> Dict[str, mark_bootable, mark_compressed, set_filesystem_partition, - set_btrfs_subvolumes, ] + indexes = _get_partitions( + block_device_struct["partitions"], + filter_=lambda x: True if x.get('filesystem', {}).get('format') == 'btrfs' else False + ) + + if len(indexes) > 0: + modes += [set_btrfs_subvolumes] + title = _('Select what to do with\n{}').format(block_device) # show current partition layout: @@ -165,7 +177,10 @@ def manage_new_and_existing_partitions(block_device: 'BlockDevice') -> Dict[str, # # 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()).run() + + if not fstype: + continue prompt = _('Enter the start sector (percentage or block number, default: {}): ').format( block_device.first_free_sector) @@ -273,14 +288,13 @@ def manage_new_and_existing_partitions(block_device: 'BlockDevice') -> Dict[str, 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()).run() - block_device_struct["partitions"][partition]['filesystem']['format'] = fstype + if fstype: + block_device_struct["partitions"][partition]['filesystem']['format'] = fstype # Negate the current wipe marking - block_device_struct["partitions"][partition][ - 'wipe'] = not block_device_struct["partitions"][partition].get('wipe', False) + block_device_struct["partitions"][partition]['wipe'] = not block_device_struct["partitions"][partition].get('wipe', False) elif task == mark_encrypted: title = _('{}\n\nSelect which partition to mark as encrypted').format(current_layout) @@ -308,16 +322,18 @@ def manage_new_and_existing_partitions(block_device: 'BlockDevice') -> Dict[str, block_device_struct["partitions"][partition]['filesystem'] = {} fstype_title = _('Enter a desired filesystem type for the partition: ') - fstype = Menu(fstype_title, fs_types(), skip=False).run() + fstype = Menu(fstype_title, fs_types()).run() - block_device_struct["partitions"][partition]['filesystem']['format'] = fstype + if fstype: + block_device_struct["partitions"][partition]['filesystem']['format'] = fstype elif task == set_btrfs_subvolumes: from .subvolume_config import SubvolumeList # TODO get preexisting partitions title = _('{}\n\nSelect which partition to set subvolumes on').format(current_layout) - partition = select_partition(title, block_device_struct["partitions"],filter=lambda x:True if x.get('filesystem',{}).get('format') == 'btrfs' else False) + partition = select_partition(title, block_device_struct["partitions"],filter_=lambda x:True if x.get('filesystem',{}).get('format') == 'btrfs' else False) + if partition is not None: if not block_device_struct["partitions"][partition].get('btrfs', {}): block_device_struct["partitions"][partition]['btrfs'] = {} diff --git a/archinstall/lib/user_interaction/subvolume_config.py b/archinstall/lib/user_interaction/subvolume_config.py index 0515876b..adbb7430 100644 --- a/archinstall/lib/user_interaction/subvolume_config.py +++ b/archinstall/lib/user_interaction/subvolume_config.py @@ -1,9 +1,10 @@ -from typing import List, Any, Dict +from typing import Any, Dict from ..menu.list_manager import ListManager from ..menu.selection_menu import Selector, GeneralMenu from ..menu.text_input import TextInput from ..menu import Menu + """ UI classes """ @@ -14,7 +15,7 @@ class SubvolumeList(ListManager): self.ObjectDefaultAction = str(_('Add')) super().__init__(prompt,list,None,self.ObjectNullAction,self.ObjectDefaultAction) - def reformat(self, data: Any) -> List[Any]: + def reformat(self, data: Dict) -> Dict: def presentation(key :str, value :Dict): text = _(" Subvolume :{:16}").format(key) if isinstance(value,str): @@ -28,14 +29,15 @@ class SubvolumeList(ListManager): text += _(" with option {}").format(', '.join(value['options'])) return text - return sorted(list(map(lambda x:presentation(x,data[x]),data))) + formatted = {presentation(k, v): k for k, v in data.items()} + return {k: v for k, v in sorted(formatted.items(), key=lambda e: e[0])} def action_list(self): return super().action_list() - def exec_action(self, data: Any): + def exec_action(self, data: Dict): if self.target: - origkey,origval = list(self.target.items())[0] + origkey, origval = list(self.target.items())[0] else: origkey = None @@ -46,8 +48,8 @@ class SubvolumeList(ListManager): self.target = {} print(_('\n Fill the desired values for a new subvolume \n')) with SubvolumeMenu(self.target,self.action) as add_menu: - for data in ['name','mountpoint','options']: - add_menu.exec_option(data) + for elem in ['name','mountpoint','options']: + add_menu.exec_option(elem) else: SubvolumeMenu(self.target,self.action).run() -- cgit v1.2.3-70-g09d2 From bcd810d2d20e657d96f36e0007facff71e9532bc Mon Sep 17 00:00:00 2001 From: Daniel Girtler Date: Thu, 5 May 2022 20:48:01 +1000 Subject: Fix 1117 (#1126) * Fix 1117 * Update * flake8 Co-authored-by: Daniel Girtler --- archinstall/lib/disk/user_guides.py | 36 +++++++++++++--------- archinstall/lib/menu/global_menu.py | 4 +-- archinstall/lib/menu/menu.py | 14 +++++++++ archinstall/lib/user_interaction/disk_conf.py | 4 +-- archinstall/lib/user_interaction/general_conf.py | 8 ++--- .../lib/user_interaction/manage_users_conf.py | 8 ++--- .../lib/user_interaction/partitioning_conf.py | 12 +++++--- .../lib/user_interaction/subvolume_config.py | 2 +- archinstall/lib/user_interaction/system_conf.py | 18 +++++------ archinstall/lib/user_interaction/utils.py | 11 +++---- examples/guided.py | 6 ++-- examples/swiss.py | 10 +++--- profiles/sway.py | 5 +-- 13 files changed, 79 insertions(+), 59 deletions(-) (limited to 'archinstall/lib') diff --git a/archinstall/lib/disk/user_guides.py b/archinstall/lib/disk/user_guides.py index 63ec1d9b..77da52e4 100644 --- a/archinstall/lib/disk/user_guides.py +++ b/archinstall/lib/disk/user_guides.py @@ -5,6 +5,7 @@ from typing import Optional, Dict, Any, List, TYPE_CHECKING # https://stackoverflow.com/a/39757388/929999 if TYPE_CHECKING: from .blockdevice import BlockDevice + _: Any from .helpers import sort_block_devices_based_on_performance, select_largest_device, select_disk_larger_than_or_close_to from ..hardware import has_uefi @@ -26,13 +27,13 @@ def suggest_single_disk_layout(block_device :BlockDevice, compression = False if default_filesystem == 'btrfs': - prompt = 'Would you like to use BTRFS subvolumes with a default structure?' - choice = Menu(prompt, ['yes', 'no'], skip=False, default_option='yes').run() - using_subvolumes = choice == 'yes' + prompt = str(_('Would you like to use BTRFS subvolumes with a default structure?')) + choice = Menu(prompt, Menu.yes_no(), skip=False, default_option=Menu.yes()).run() + using_subvolumes = choice == Menu.yes() - prompt = 'Would you like to use BTRFS compression?' - choice = Menu(prompt, ['yes', 'no'], skip=False, default_option='yes').run() - compression = choice == 'yes' + prompt = str(_('Would you like to use BTRFS compression?')) + choice = Menu(prompt, Menu.yes_no(), skip=False, default_option=Menu.yes()).run() + compression = choice == Menu.yes() layout = { block_device.path : { @@ -87,9 +88,9 @@ def suggest_single_disk_layout(block_device :BlockDevice, layout[block_device.path]['partitions'][-1]['start'] = '513MiB' if not using_subvolumes and block_device.size >= MIN_SIZE_TO_ALLOW_HOME_PART: - prompt = 'Would you like to create a separate partition for /home?' - choice = Menu(prompt, ['yes', 'no'], skip=False, default_option='yes').run() - using_home_partition = choice == 'yes' + prompt = str(_('Would you like to create a separate partition for /home?')) + choice = Menu(prompt, Menu.yes_no(), skip=False, default_option=Menu.yes()).run() + using_home_partition = choice == Menu.yes() # Set a size for / (/root) if using_subvolumes or block_device.size < MIN_SIZE_TO_ALLOW_HOME_PART or not using_home_partition: @@ -138,9 +139,7 @@ def suggest_single_disk_layout(block_device :BlockDevice, return layout -def suggest_multi_disk_layout(block_devices :List[BlockDevice], - default_filesystem :Optional[str] = None, - advanced_options :bool = False) -> Dict[str, Any]: +def suggest_multi_disk_layout(block_devices :List[BlockDevice], default_filesystem :Optional[str] = None, advanced_options :bool = False): if not default_filesystem: from ..user_interaction import ask_for_main_filesystem_format @@ -158,6 +157,13 @@ def suggest_multi_disk_layout(block_devices :List[BlockDevice], home_device = select_largest_device(block_devices, gigabytes=MIN_SIZE_TO_ALLOW_HOME_PART) root_device = select_disk_larger_than_or_close_to(block_devices, gigabytes=ARCH_LINUX_INSTALLED_SIZE, filter_out=[home_device]) + if home_device is None or root_device is None: + text = _('The selected drives do not have the minimum capacity required for an automatic suggestion\n') + text += _('Minimum capacity for /home partition: {}GB\n').format(MIN_SIZE_TO_ALLOW_HOME_PART) + text += _('Minimum capacity for Arch Linux partition: {}GB').format(ARCH_LINUX_INSTALLED_SIZE) + Menu(str(text), [str(_('Continue'))], skip=False).run() + return None + compression = False if default_filesystem == 'btrfs': @@ -165,9 +171,9 @@ def suggest_multi_disk_layout(block_devices :List[BlockDevice], # choice = Menu(prompt, ['yes', 'no'], skip=False, default_option='yes').run() # using_subvolumes = choice == 'yes' - prompt = 'Would you like to use BTRFS compression?' - choice = Menu(prompt, ['yes', 'no'], skip=False, default_option='yes').run() - compression = choice == 'yes' + prompt = str(_('Would you like to use BTRFS compression?')) + choice = Menu(prompt, Menu.yes_no(), skip=False, default_option=Menu.yes()).run() + compression = choice == Menu.yes() log(f"Suggesting multi-disk-layout using {len(block_devices)} disks, where {root_device} will be /root and {home_device} will be /home", level=logging.DEBUG) diff --git a/archinstall/lib/menu/global_menu.py b/archinstall/lib/menu/global_menu.py index 63b8c03e..b3c5c6a2 100644 --- a/archinstall/lib/menu/global_menu.py +++ b/archinstall/lib/menu/global_menu.py @@ -262,9 +262,9 @@ class GlobalMenu(GeneralMenu): "Do you wish to continue?" ).format(storage['MOUNT_POINT']) - choice = Menu(prompt, ['yes', 'no'], default_option='yes').run() + choice = Menu(prompt, Menu.yes_no(), default_option=Menu.yes()).run() - if choice == 'no': + if choice == Menu.no(): exit(1) return harddrives diff --git a/archinstall/lib/menu/menu.py b/archinstall/lib/menu/menu.py index d254e0f9..48ea4635 100644 --- a/archinstall/lib/menu/menu.py +++ b/archinstall/lib/menu/menu.py @@ -12,7 +12,21 @@ import logging if TYPE_CHECKING: _: Any + class Menu(TerminalMenu): + + @classmethod + def yes(cls): + return str(_('yes')) + + @classmethod + def no(cls): + return str(_('no')) + + @classmethod + def yes_no(cls): + return [cls.yes(), cls.no()] + def __init__( self, title :str, diff --git a/archinstall/lib/user_interaction/disk_conf.py b/archinstall/lib/user_interaction/disk_conf.py index a51f10b8..e84f647a 100644 --- a/archinstall/lib/user_interaction/disk_conf.py +++ b/archinstall/lib/user_interaction/disk_conf.py @@ -1,6 +1,6 @@ from __future__ import annotations -from typing import Any, Dict, TYPE_CHECKING +from typing import Any, Dict, TYPE_CHECKING, Optional from .partitioning_conf import manage_new_and_existing_partitions, get_default_partition_layout from ..disk import BlockDevice @@ -36,7 +36,7 @@ def select_individual_blockdevice_usage(block_devices: list) -> Dict[str, Any]: return result -def select_disk_layout(block_devices: list, advanced_options=False) -> Dict[str, Any]: +def select_disk_layout(block_devices: list, advanced_options=False) -> Optional[Dict[str, Any]]: wipe_mode = str(_('Wipe all selected drives and use a best-effort default partition layout')) custome_mode = str(_('Select what to do with each individual drive (followed by partition usage)')) modes = [wipe_mode, custome_mode] diff --git a/archinstall/lib/user_interaction/general_conf.py b/archinstall/lib/user_interaction/general_conf.py index c42e9e27..78f6b460 100644 --- a/archinstall/lib/user_interaction/general_conf.py +++ b/archinstall/lib/user_interaction/general_conf.py @@ -22,11 +22,11 @@ def ask_ntp(preset: bool = True) -> bool: prompt = str(_('Would you like to use automatic time synchronization (NTP) with the default time servers?\n')) prompt += str(_('Hardware time and other post-configuration steps might be required in order for NTP to work.\nFor more information, please check the Arch wiki')) if preset: - preset_val = 'yes' + preset_val = Menu.yes() else: - preset_val = 'no' - choice = Menu(prompt, ['yes', 'no'], skip=False, preset_values=preset_val, default_option='yes').run() - return False if choice == 'no' else True + preset_val = Menu.no() + choice = Menu(prompt, Menu.yes_no(), skip=False, preset_values=preset_val, default_option=Menu.yes()).run() + return False if choice == Menu.no() else True def ask_hostname(preset: str = None) -> str: diff --git a/archinstall/lib/user_interaction/manage_users_conf.py b/archinstall/lib/user_interaction/manage_users_conf.py index d69ccce9..ea909f35 100644 --- a/archinstall/lib/user_interaction/manage_users_conf.py +++ b/archinstall/lib/user_interaction/manage_users_conf.py @@ -109,11 +109,11 @@ class UserList(ListManager): sudoer = False else: sudoer = False - sudo_choice = Menu(str(_('Should {} be a superuser (sudoer)?')).format(userid), ['yes', 'no'], + sudo_choice = Menu(str(_('Should {} be a superuser (sudoer)?')).format(userid), Menu.yes_no(), skip=False, - preset_values='yes' if sudoer else 'no', - default_option='no').run() - sudoer = True if sudo_choice == 'yes' else False + preset_values=Menu.yes() if sudoer else Menu.no(), + default_option=Menu.no()).run() + sudoer = True if sudo_choice == Menu.yes() else False password = get_password(prompt=str(_('Password for user "{}": ').format(userid))) diff --git a/archinstall/lib/user_interaction/partitioning_conf.py b/archinstall/lib/user_interaction/partitioning_conf.py index 2182c6b3..afca1cef 100644 --- a/archinstall/lib/user_interaction/partitioning_conf.py +++ b/archinstall/lib/user_interaction/partitioning_conf.py @@ -1,6 +1,6 @@ from __future__ import annotations -from typing import List, Any, Dict, Union, TYPE_CHECKING, Callable +from typing import List, Any, Dict, Union, TYPE_CHECKING, Callable, Optional from ..menu import Menu from ..output import log @@ -97,8 +97,10 @@ def select_partition(title :str, partitions :List[Partition], multiple :bool = F return None -def get_default_partition_layout(block_devices: Union['BlockDevice', List['BlockDevice']], - advanced_options: bool = False) -> Dict[str, Any]: +def get_default_partition_layout( + block_devices: Union['BlockDevice', List['BlockDevice']], + advanced_options: bool = False +) -> Optional[Dict[str, Any]]: from ..disk import suggest_single_disk_layout, suggest_multi_disk_layout if len(block_devices) == 1: @@ -224,9 +226,9 @@ def manage_new_and_existing_partitions(block_device: 'BlockDevice') -> Dict[str, if len(block_device_struct["partitions"]): prompt = _('{} contains queued partitions, this will remove those, are you sure?').format(block_device) - choice = Menu(prompt, ['yes', 'no'], default_option='no').run() + choice = Menu(prompt, Menu.yes_no(), default_option=Menu.no()).run() - if choice == 'no': + if choice == Menu.no(): continue block_device_struct.update(suggest_single_disk_layout(block_device)[block_device.path]) diff --git a/archinstall/lib/user_interaction/subvolume_config.py b/archinstall/lib/user_interaction/subvolume_config.py index adbb7430..bb159a8b 100644 --- a/archinstall/lib/user_interaction/subvolume_config.py +++ b/archinstall/lib/user_interaction/subvolume_config.py @@ -1,4 +1,4 @@ -from typing import Any, Dict +from typing import Dict from ..menu.list_manager import ListManager from ..menu.selection_menu import Selector, GeneralMenu diff --git a/archinstall/lib/user_interaction/system_conf.py b/archinstall/lib/user_interaction/system_conf.py index 5d4c80dc..17c093c1 100644 --- a/archinstall/lib/user_interaction/system_conf.py +++ b/archinstall/lib/user_interaction/system_conf.py @@ -102,9 +102,9 @@ def select_driver(options: Dict[str, Any] = AVAILABLE_GFX_DRIVERS) -> str: def ask_for_bootloader(advanced_options: bool = False, preset: str = None) -> str: if preset == 'systemd-bootctl': - preset_val = 'systemd-boot' if advanced_options else 'no' + preset_val = 'systemd-boot' if advanced_options else Menu.no() elif preset == 'grub-install': - preset_val = 'grub' if advanced_options else 'yes' + preset_val = 'grub' if advanced_options else Menu.yes() else: preset_val = preset @@ -112,11 +112,11 @@ def ask_for_bootloader(advanced_options: bool = False, preset: str = None) -> st 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'], + Menu.yes_no(), preset_values=preset_val, - default_option='no').run() + default_option=Menu.no()).run() - if bootloader_choice == "yes": + if bootloader_choice == Menu.yes(): bootloader = "grub-install" else: # We use the common names for the bootloader as the selection, and map it back to the expected values. @@ -135,9 +135,9 @@ def ask_for_bootloader(advanced_options: bool = False, preset: str = None) -> st def ask_for_swap(preset: bool = True) -> bool: if preset: - preset_val = 'yes' + preset_val = Menu.yes() else: - preset_val = 'no' + preset_val = Menu.no() prompt = _('Would you like to use swap on zram?') - choice = Menu(prompt, ['yes', 'no'], default_option='yes', preset_values=preset_val).run() - return False if choice == 'no' else True + choice = Menu(prompt, Menu.yes_no(), default_option=Menu.yes(), preset_values=preset_val).run() + return False if choice == Menu.no() else True diff --git a/archinstall/lib/user_interaction/utils.py b/archinstall/lib/user_interaction/utils.py index 48b55e8c..59f2dfbc 100644 --- a/archinstall/lib/user_interaction/utils.py +++ b/archinstall/lib/user_interaction/utils.py @@ -28,12 +28,9 @@ def check_password_strong(passwd: str) -> bool: symbol_count += 40 if symbol_count**len(passwd) < 10e20: - - prompt = _("The password you are using seems to be weak,") - prompt += _("are you sure you want to use it?") - - choice = Menu(prompt, ["yes", "no"], default_option="yes").run() - return choice == "yes" + prompt = str(_("The password you are using seems to be weak, are you sure you want to use it?")) + choice = Menu(prompt, Menu.yes_no(), default_option=Menu.yes()).run() + return choice == Menu.yes() return True @@ -84,7 +81,7 @@ def do_countdown() -> bool: if SIG_TRIGGER: prompt = _('Do you really want to abort?') - choice = Menu(prompt, ['yes', 'no'], skip=False).run() + choice = Menu(prompt, Menu.yes_no(), skip=False).run() if choice == 'yes': exit(0) diff --git a/examples/guided.py b/examples/guided.py index 15226668..1cee499d 100644 --- a/examples/guided.py +++ b/examples/guided.py @@ -3,7 +3,7 @@ import os import time import archinstall -from archinstall import ConfigurationOutput +from archinstall import ConfigurationOutput, Menu from archinstall.lib.models.network_configuration import NetworkConfigurationHandler if archinstall.arguments.get('help'): @@ -258,8 +258,8 @@ def perform_installation(mountpoint): installation.log("For post-installation tips, see https://wiki.archlinux.org/index.php/Installation_guide#Post-installation", fg="yellow") if not archinstall.arguments.get('silent'): prompt = 'Would you like to chroot into the newly created installation and perform post-installation configuration?' - choice = archinstall.Menu(prompt, ['yes', 'no'], default_option='yes').run() - if choice == 'yes': + choice = Menu(prompt, Menu.yes_no(), default_option=Menu.yes()).run() + if choice == Menu.yes(): try: installation.drop_to_shell() except: diff --git a/examples/swiss.py b/examples/swiss.py index baf7b618..6d357191 100644 --- a/examples/swiss.py +++ b/examples/swiss.py @@ -20,7 +20,7 @@ import pathlib from typing import TYPE_CHECKING, Any import archinstall -from archinstall import ConfigurationOutput, NetworkConfigurationHandler +from archinstall import ConfigurationOutput, NetworkConfigurationHandler, Menu if TYPE_CHECKING: _: Any @@ -38,8 +38,8 @@ TODO exec con return parameter """ def select_activate_NTP(): prompt = "Would you like to use automatic time synchronization (NTP) with the default time servers? [Y/n]: " - choice = archinstall.Menu(prompt, ['yes', 'no'], default_option='yes').run() - if choice == 'yes': + choice = Menu(prompt, Menu.yes_no(), default_option=Menu.yes()).run() + if choice == Menu.yes(): return True else: return False @@ -480,8 +480,8 @@ def perform_installation(mountpoint, mode): installation.log("For post-installation tips, see https://wiki.archlinux.org/index.php/Installation_guide#Post-installation", fg="yellow") if not archinstall.arguments.get('silent'): prompt = 'Would you like to chroot into the newly created installation and perform post-installation configuration?' - choice = archinstall.Menu(prompt, ['yes', 'no'], default_option='yes').run() - if choice == 'yes': + choice = Menu(prompt, Menu.yes_no(), default_option=Menu.yes()).run() + if choice == Menu.yes(): try: installation.drop_to_shell() except: diff --git a/profiles/sway.py b/profiles/sway.py index e9c71b79..0819db95 100644 --- a/profiles/sway.py +++ b/profiles/sway.py @@ -1,5 +1,6 @@ # A desktop environment using "Sway" import archinstall +from archinstall import Menu is_top_level_profile = False @@ -22,8 +23,8 @@ def _check_driver() -> bool: if packages and "nvidia" in packages: prompt = 'The proprietary Nvidia driver is not supported by Sway. It is likely that you will run into issues, are you okay with that?' - choice = archinstall.Menu(prompt, ['yes', 'no'], default_option='no').run() - if choice == 'no': + choice = Menu(prompt, Menu.yes_no(), default_option=Menu.no()).run() + if choice == Menu.no(): return False return True -- cgit v1.2.3-70-g09d2 From 184373ee84eb566184685f965549a7cf4b2b3df3 Mon Sep 17 00:00:00 2001 From: Daniel Girtler Date: Fri, 6 May 2022 17:06:59 +1000 Subject: Fix menu alignment (#1102) Co-authored-by: Daniel Girtler --- archinstall/lib/menu/selection_menu.py | 35 +++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) (limited to 'archinstall/lib') diff --git a/archinstall/lib/menu/selection_menu.py b/archinstall/lib/menu/selection_menu.py index b2f99423..c29373f9 100644 --- a/archinstall/lib/menu/selection_menu.py +++ b/archinstall/lib/menu/selection_menu.py @@ -90,6 +90,10 @@ class Selector: self.mandatory = mandatory self._no_store = no_store + @property + def description(self) -> str: + return self._description + @property def dependencies(self) -> List: return self._dependencies @@ -115,7 +119,7 @@ class Selector: def update_description(self, description :str): self._description = description - def menu_text(self) -> str: + def menu_text(self, padding: int = 0) -> str: if self._description == '': # special menu option for __separator__ return '' @@ -128,14 +132,14 @@ class Selector: current = str(self._current_selection) if current: - padding = 35 - len(str(self._description)) - current = ' ' * padding + f'SET: {current}' - - return f'{self._description} {current}' + padding += 5 + description = str(self._description).ljust(padding, ' ') + current = str(_('set: {}').format(current)) + else: + description = self._description + current = '' - @property - def text(self): - return self.menu_text() + return f'{description} {current}' def set_current_selection(self, current :Optional[str]): self._current_selection = current @@ -262,8 +266,13 @@ class GeneralMenu: return preview() return None + def _get_menu_text_padding(self, entries: List[Selector]): + return max([len(selection.description) for selection in entries]) + def _find_selection(self, selection_name: str) -> Tuple[str, Selector]: - option = [(k, v) for k, v in self._menu_options.items() if v.text.strip() == selection_name.strip()] + padding = self._get_menu_text_padding(list(self._menu_options.values())) + option = [(k, v) for k, v in self._menu_options.items() if v.menu_text(padding).strip() == selection_name.strip()] + if len(option) != 1: raise ValueError(f'Selection not found: {selection_name}') config_name = option[0][0] @@ -275,14 +284,18 @@ class GeneralMenu: # we synch all the options just in case for item in self.list_options(): self.synch(item) - self.post_callback # as all the values can vary i have to exec this callback + + self.post_callback() # as all the values can vary i have to exec this callback cursor_pos = None + while True: # Before continuing, set the preferred keyboard layout/language in the current terminal. # This will just help the user with the next following questions. self._set_kb_language() enabled_menus = self._menus_to_enable() - menu_options = [m.text for m in enabled_menus.values()] + + padding = self._get_menu_text_padding(list(enabled_menus.values())) + menu_options = [m.menu_text(padding) for m in enabled_menus.values()] selection = Menu( _('Set/Modify the below options'), -- cgit v1.2.3-70-g09d2 From 050d7c9c13fdcf766511bc2ced5813ef1730478c Mon Sep 17 00:00:00 2001 From: Daniel Girtler Date: Fri, 6 May 2022 22:37:40 +1000 Subject: Fix minor issues (#1132) Co-authored-by: Daniel Girtler --- archinstall/lib/menu/menu.py | 1 + archinstall/lib/menu/selection_menu.py | 11 +++++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) (limited to 'archinstall/lib') diff --git a/archinstall/lib/menu/menu.py b/archinstall/lib/menu/menu.py index 48ea4635..b2f4146d 100644 --- a/archinstall/lib/menu/menu.py +++ b/archinstall/lib/menu/menu.py @@ -160,6 +160,7 @@ class Menu(TerminalMenu): preview_command=preview_command, preview_size=preview_size, preview_title=preview_title, + multi_select_select_on_accept=False, **kwargs, ) diff --git a/archinstall/lib/menu/selection_menu.py b/archinstall/lib/menu/selection_menu.py index c29373f9..8311344d 100644 --- a/archinstall/lib/menu/selection_menu.py +++ b/archinstall/lib/menu/selection_menu.py @@ -309,8 +309,15 @@ class GeneralMenu: if selection and self.auto_cursor: cursor_pos = menu_options.index(selection) + 1 # before the strip otherwise fails - if cursor_pos >= len(menu_options): - cursor_pos = len(menu_options) - 1 + + # in case the new position lands on a "placeholder" we'll skip them as well + while True: + if cursor_pos >= len(menu_options): + cursor_pos = 0 + if len(menu_options[cursor_pos]) > 0: + break + cursor_pos += 1 + selection = selection.strip() if selection: # if this calls returns false, we exit the menu. We allow for an callback for special processing on realeasing control -- cgit v1.2.3-70-g09d2 From 2316f5416438e11f65e007d7e411894c307391d9 Mon Sep 17 00:00:00 2001 From: Владислав Date: Fri, 6 May 2022 15:50:00 +0300 Subject: Change the logging text of CPU vendor check (#1094) * Fix small typo in the logging text of CPU vendor check * Make CPU check logging text unified --- archinstall/lib/installer.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'archinstall/lib') diff --git a/archinstall/lib/installer.py b/archinstall/lib/installer.py index 8b77317a..b0f7ac32 100644 --- a/archinstall/lib/installer.py +++ b/archinstall/lib/installer.py @@ -777,7 +777,7 @@ class Installer: elif vendor == "GenuineIntel": entry.write("initrd /intel-ucode.img\n") else: - self.log("unknow cpu vendor, not adding ucode to systemd-boot config") + self.log(f"Unknown CPU vendor '{vendor}' detected. Archinstall won't add any ucode to systemd-boot config.", level=logging.DEBUG) entry.write(f"initrd /initramfs-{kernel}.img\n") # blkid doesn't trigger on loopback devices really well, # so we'll use the old manual method until we get that sorted out. @@ -881,7 +881,7 @@ class Installer: elif vendor == "GenuineIntel": kernel_parameters.append("initrd=\\intel-ucode.img") else: - self.log("unknow cpu vendor, not adding ucode to firmware boot entry") + self.log(f"Unknown CPU vendor '{vendor}' detected. Archinstall won't add any ucode to firmware boot entry.", level=logging.DEBUG) kernel_parameters.append(f"initrd=\\initramfs-{kernel}.img") -- cgit v1.2.3-70-g09d2 From 7f6c49e677712f1c230cf733d0215a284c6e6ae8 Mon Sep 17 00:00:00 2001 From: Daniel Girtler Date: Sun, 8 May 2022 16:39:04 +1000 Subject: Fix alignment (#1139) * Fix alignment * Update Co-authored-by: Daniel Girtler --- archinstall/lib/menu/selection_menu.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'archinstall/lib') diff --git a/archinstall/lib/menu/selection_menu.py b/archinstall/lib/menu/selection_menu.py index 8311344d..e18d92c2 100644 --- a/archinstall/lib/menu/selection_menu.py +++ b/archinstall/lib/menu/selection_menu.py @@ -267,7 +267,7 @@ class GeneralMenu: return None def _get_menu_text_padding(self, entries: List[Selector]): - return max([len(selection.description) for selection in entries]) + return max([len(str(selection.description)) for selection in entries]) def _find_selection(self, selection_name: str) -> Tuple[str, Selector]: padding = self._get_menu_text_padding(list(self._menu_options.values())) -- cgit v1.2.3-70-g09d2 From 80cee500e0ef0cf4de84b8b60b35c25f667e7a34 Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Sun, 8 May 2022 18:36:32 +0200 Subject: SysCommand now sets working_directory on SysCommandWorker. Also made it so the parent process moves back to the original working directory, leaving the child process in the target working directory. (#1142) --- archinstall/lib/general.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'archinstall/lib') diff --git a/archinstall/lib/general.py b/archinstall/lib/general.py index 174acb8a..cf925de3 100644 --- a/archinstall/lib/general.py +++ b/archinstall/lib/general.py @@ -352,7 +352,6 @@ class SysCommandWorker: # only way to get the traceback without loosing it. self.pid, self.child_fd = pty.fork() - os.chdir(old_dir) # https://stackoverflow.com/questions/4022600/python-pty-fork-how-does-it-work if not self.pid: @@ -371,6 +370,9 @@ class SysCommandWorker: log(f"{self.cmd[0]} does not exist.", level=logging.ERROR, fg="red") self.exit_code = 1 return False + else: + # Only parent process moves back to the original working directory + os.chdir(old_dir) self.started = time.time() self.poll_object.register(self.child_fd, EPOLLIN | EPOLLHUP) @@ -457,7 +459,14 @@ class SysCommand: if self.session: return self.session - with SysCommandWorker(self.cmd, callbacks=self._callbacks, peak_output=self.peak_output, environment_vars=self.environment_vars, remove_vt100_escape_codes_from_lines=self.remove_vt100_escape_codes_from_lines) as session: + with SysCommandWorker( + self.cmd, + callbacks=self._callbacks, + peak_output=self.peak_output, + environment_vars=self.environment_vars, + remove_vt100_escape_codes_from_lines=self.remove_vt100_escape_codes_from_lines, + working_directory=self.working_directory) as session: + if not self.session: self.session = session -- cgit v1.2.3-70-g09d2 From 0fa52a5424e28ed62ef84bdc92868bbfc434e015 Mon Sep 17 00:00:00 2001 From: Daniel Girtler Date: Mon, 9 May 2022 20:02:48 +1000 Subject: Introduce ctrl+c and other bug fixes (#1152) * Intergrate ctrl+c * stash * Update * Fix profile reset * flake8 Co-authored-by: Daniel Girtler --- archinstall/lib/disk/user_guides.py | 8 +- archinstall/lib/menu/global_menu.py | 94 ++++++++++---- archinstall/lib/menu/list_manager.py | 29 +++-- archinstall/lib/menu/menu.py | 144 ++++++++++++++------- archinstall/lib/menu/selection_menu.py | 55 ++++---- archinstall/lib/menu/simple_menu.py | 15 ++- archinstall/lib/profiles.py | 4 + archinstall/lib/user_interaction/disk_conf.py | 32 +++-- archinstall/lib/user_interaction/general_conf.py | 127 +++++++++++------- archinstall/lib/user_interaction/locale_conf.py | 35 +++-- archinstall/lib/user_interaction/network_conf.py | 37 ++++-- .../lib/user_interaction/partitioning_conf.py | 81 ++++++------ archinstall/lib/user_interaction/save_conf.py | 27 ++-- archinstall/lib/user_interaction/system_conf.py | 113 ++++++++++------ archinstall/lib/user_interaction/utils.py | 6 +- examples/guided.py | 5 +- examples/swiss.py | 2 +- profiles/desktop.py | 25 ++-- profiles/i3.py | 13 +- profiles/minimal.py | 2 + profiles/server.py | 17 ++- profiles/sway.py | 5 +- 22 files changed, 569 insertions(+), 307 deletions(-) (limited to 'archinstall/lib') diff --git a/archinstall/lib/disk/user_guides.py b/archinstall/lib/disk/user_guides.py index 77da52e4..5fa6bfdc 100644 --- a/archinstall/lib/disk/user_guides.py +++ b/archinstall/lib/disk/user_guides.py @@ -29,11 +29,11 @@ def suggest_single_disk_layout(block_device :BlockDevice, if default_filesystem == 'btrfs': prompt = str(_('Would you like to use BTRFS subvolumes with a default structure?')) choice = Menu(prompt, Menu.yes_no(), skip=False, default_option=Menu.yes()).run() - using_subvolumes = choice == Menu.yes() + using_subvolumes = choice.value == Menu.yes() prompt = str(_('Would you like to use BTRFS compression?')) choice = Menu(prompt, Menu.yes_no(), skip=False, default_option=Menu.yes()).run() - compression = choice == Menu.yes() + compression = choice.value == Menu.yes() layout = { block_device.path : { @@ -90,7 +90,7 @@ def suggest_single_disk_layout(block_device :BlockDevice, if not using_subvolumes and block_device.size >= MIN_SIZE_TO_ALLOW_HOME_PART: prompt = str(_('Would you like to create a separate partition for /home?')) choice = Menu(prompt, Menu.yes_no(), skip=False, default_option=Menu.yes()).run() - using_home_partition = choice == Menu.yes() + using_home_partition = choice.value == Menu.yes() # Set a size for / (/root) if using_subvolumes or block_device.size < MIN_SIZE_TO_ALLOW_HOME_PART or not using_home_partition: @@ -173,7 +173,7 @@ def suggest_multi_disk_layout(block_devices :List[BlockDevice], default_filesyst prompt = str(_('Would you like to use BTRFS compression?')) choice = Menu(prompt, Menu.yes_no(), skip=False, default_option=Menu.yes()).run() - compression = choice == Menu.yes() + compression = choice.value == Menu.yes() log(f"Suggesting multi-disk-layout using {len(block_devices)} disks, where {root_device} will be /root and {home_device} will be /home", level=logging.DEBUG) diff --git a/archinstall/lib/menu/global_menu.py b/archinstall/lib/menu/global_menu.py index b3c5c6a2..23a8ec11 100644 --- a/archinstall/lib/menu/global_menu.py +++ b/archinstall/lib/menu/global_menu.py @@ -2,13 +2,15 @@ from __future__ import annotations from typing import Any, List, Optional, Union +import archinstall + from ..menu import Menu from ..menu.selection_menu import Selector, GeneralMenu from ..general import SysCommand, secret from ..hardware import has_uefi from ..models import NetworkConfiguration from ..storage import storage -from ..profiles import is_desktop_profile +from ..profiles import is_desktop_profile, Profile from ..disk import encrypted_partitions from ..user_interaction import get_password, ask_for_a_timezone, save_config @@ -41,28 +43,38 @@ class GlobalMenu(GeneralMenu): self._menu_options['archinstall-language'] = \ Selector( _('Select Archinstall language'), - lambda x: self._select_archinstall_language('English'), + lambda x: self._select_archinstall_language(x), default='English') self._menu_options['keyboard-layout'] = \ - Selector(_('Select keyboard layout'), lambda preset: select_language('us',preset), default='us') + Selector( + _('Select keyboard layout'), + lambda preset: select_language(preset), + default='us') self._menu_options['mirror-region'] = \ Selector( _('Select mirror region'), - select_mirror_regions, + lambda preset: select_mirror_regions(preset), display_func=lambda x: list(x.keys()) if x else '[]', default={}) self._menu_options['sys-language'] = \ - Selector(_('Select locale language'), lambda preset: select_locale_lang('en_US',preset), default='en_US') + Selector( + _('Select locale language'), + lambda preset: select_locale_lang(preset), + default='en_US') self._menu_options['sys-encoding'] = \ - Selector(_('Select locale encoding'), lambda preset: select_locale_enc('utf-8',preset), default='utf-8') + Selector( + _('Select locale encoding'), + lambda preset: select_locale_enc(preset), + default='UTF-8') self._menu_options['harddrives'] = \ Selector( _('Select harddrives'), - self._select_harddrives) + lambda preset: self._select_harddrives(preset)) self._menu_options['disk_layouts'] = \ Selector( _('Select disk layout'), - lambda x: select_disk_layout( + lambda preset: select_disk_layout( + preset, storage['arguments'].get('harddrives', []), storage['arguments'].get('advanced', False) ), @@ -112,7 +124,7 @@ class GlobalMenu(GeneralMenu): self._menu_options['profile'] = \ Selector( _('Specify profile'), - lambda x: self._select_profile(), + lambda preset: self._select_profile(preset), display_func=lambda x: x if x else 'None') self._menu_options['audio'] = \ Selector( @@ -247,41 +259,73 @@ class GlobalMenu(GeneralMenu): return ntp def _select_harddrives(self, old_harddrives : list) -> list: - # old_haddrives = storage['arguments'].get('harddrives', []) harddrives = select_harddrives(old_harddrives) - # in case the harddrives got changed we have to reset the disk layout as well - if old_harddrives != harddrives: - self._menu_options.get('disk_layouts').set_current_selection(None) - storage['arguments']['disk_layouts'] = {} - - if not harddrives: + if len(harddrives) == 0: prompt = _( "You decided to skip harddrive selection\nand will use whatever drive-setup is mounted at {} (experimental)\n" "WARNING: Archinstall won't check the suitability of this setup\n" "Do you wish to continue?" ).format(storage['MOUNT_POINT']) - choice = Menu(prompt, Menu.yes_no(), default_option=Menu.yes()).run() + choice = Menu(prompt, Menu.yes_no(), default_option=Menu.yes(), skip=False).run() - if choice == Menu.no(): - exit(1) + if choice.value == Menu.no(): + return self._select_harddrives(old_harddrives) + + # in case the harddrives got changed we have to reset the disk layout as well + if old_harddrives != harddrives: + self._menu_options.get('disk_layouts').set_current_selection(None) + storage['arguments']['disk_layouts'] = {} return harddrives - def _select_profile(self): - profile = select_profile() + def _select_profile(self, preset): + profile = select_profile(preset) + ret = None + + if profile is None: + if any([ + archinstall.storage.get('profile_minimal', False), + archinstall.storage.get('_selected_servers', None), + archinstall.storage.get('_desktop_profile', None), + archinstall.arguments.get('desktop-environment', None), + archinstall.arguments.get('gfx_driver_packages', None) + ]): + return preset + else: # ctrl+c was actioned and all profile settings have been reset + return None + + servers = archinstall.storage.get('_selected_servers', []) + desktop = archinstall.storage.get('_desktop_profile', None) + desktop_env = archinstall.arguments.get('desktop-environment', None) + gfx_driver = archinstall.arguments.get('gfx_driver_packages', None) # Check the potentially selected profiles preparations to get early checks if some additional questions are needed. if profile and profile.has_prep_function(): namespace = f'{profile.namespace}.py' with profile.load_instructions(namespace=namespace) as imported: - if imported._prep_function(): - return profile + if imported._prep_function(servers=servers, desktop=desktop, desktop_env=desktop_env, gfx_driver=gfx_driver): + ret: Profile = profile + + match ret.name: + case 'minimal': + reset = ['_selected_servers', '_desktop_profile', 'desktop-environment', 'gfx_driver_packages'] + case 'server': + reset = ['_desktop_profile', 'desktop-environment'] + case 'desktop': + reset = ['_selected_servers'] + case 'xorg': + reset = ['_selected_servers', '_desktop_profile', 'desktop-environment'] + + for r in reset: + archinstall.storage[r] = None else: - return self._select_profile() + return self._select_profile(preset) + elif profile: + ret = profile - return self._data_store.get('profile', None) + return ret def _create_superuser_account(self): superusers = ask_for_superuser_account(str(_('Manage superuser accounts: '))) diff --git a/archinstall/lib/menu/list_manager.py b/archinstall/lib/menu/list_manager.py index 377d30f2..f3927e6f 100644 --- a/archinstall/lib/menu/list_manager.py +++ b/archinstall/lib/menu/list_manager.py @@ -86,7 +86,7 @@ The contents in the base class of this methods serve for a very basic usage, and """ from .text_input import TextInput -from .menu import Menu +from .menu import Menu, MenuSelectionType from os import system from copy import copy from typing import Union, Any, TYPE_CHECKING, Dict @@ -167,6 +167,7 @@ class ListManager: options += self.bottom_list system('clear') + target = Menu( self._prompt, options, @@ -174,27 +175,31 @@ class ListManager: clear_screen=False, clear_menu_on_exit=False, header=self.header, - skip_empty_entries=True).run() + skip_empty_entries=True + ).run() + + if target.type_ == MenuSelectionType.Esc: + return self.run() - if not target or target in self.bottom_list: + if not target.value or target.value in self.bottom_list: self.action = target break - if target and target in self._default_action: - self.action = target + if target.value and target.value in self._default_action: + self.action = target.value self.target = None self.exec_action(self._data) continue if isinstance(self._data,dict): - data_key = data_formatted[target] + data_key = data_formatted[target.value] key = self._data[data_key] self.target = {data_key: key} else: - self.target = self._data[data_formatted[target]] + self.target = self._data[data_formatted[target.value]] # Possible enhacement. If run_actions returns false a message line indicating the failure - self.run_actions(target) + self.run_actions(target.value) if not target or target == self.cancel_action: # TODO dubious return self.base_data # return the original list @@ -204,14 +209,18 @@ class ListManager: def run_actions(self,prompt_data=None): options = self.action_list() + self.bottom_item prompt = _("Select an action for < {} >").format(prompt_data if prompt_data else self.target) - self.action = Menu( + choice = Menu( prompt, options, sort=False, clear_screen=False, clear_menu_on_exit=False, preset_values=self.bottom_item, - show_search_hint=False).run() + show_search_hint=False + ).run() + + self.action = choice.value + if not self.action or self.action == self.cancel_action: return False else: diff --git a/archinstall/lib/menu/menu.py b/archinstall/lib/menu/menu.py index b2f4146d..c34814eb 100644 --- a/archinstall/lib/menu/menu.py +++ b/archinstall/lib/menu/menu.py @@ -1,4 +1,6 @@ -from typing import Dict, List, Union, Any, TYPE_CHECKING +from dataclasses import dataclass +from enum import Enum, auto +from typing import Dict, List, Union, Any, TYPE_CHECKING, Optional from archinstall.lib.menu.simple_menu import TerminalMenu @@ -13,6 +15,18 @@ if TYPE_CHECKING: _: Any +class MenuSelectionType(Enum): + Selection = auto() + Esc = auto() + Ctrl_c = auto() + + +@dataclass +class MenuSelection: + type_: MenuSelectionType + value: Optional[Union[str, List[str]]] = None + + class Menu(TerminalMenu): @classmethod @@ -33,14 +47,16 @@ class Menu(TerminalMenu): p_options :Union[List[str], Dict[str, Any]], skip :bool = True, multi :bool = False, - default_option :str = None, + default_option : Optional[str] = None, sort :bool = True, preset_values :Union[str, List[str]] = None, - cursor_index :int = None, + cursor_index : Optional[int] = None, preview_command=None, preview_size=0.75, preview_title='Info', header :Union[List[str],str] = None, + explode_on_interrupt :bool = False, + explode_warning :str = '', **kwargs ): """ @@ -80,9 +96,15 @@ class Menu(TerminalMenu): :param preview_title: Title of the preview window :type preview_title: str - param: header one or more header lines for the menu + param header: one or more header lines for the menu type param: string or list + param explode_on_interrupt: This will explicitly handle a ctrl+c instead and return that specific state + type param: bool + + param explode_warning: If explode_on_interrupt is True and this is non-empty, there will be a warning with a user confirmation displayed + type param: str + :param kwargs : any SimpleTerminal parameter """ # we guarantee the inmutability of the options outside the class. @@ -99,6 +121,8 @@ class Menu(TerminalMenu): log(f"invalid parameter at Menu() call was at <{sys._getframe(1).f_code.co_name}>",level=logging.WARNING) raise RequirementError("Menu() requires an iterable as option.") + self._default_str = str(_('(default)')) + if isinstance(p_options,dict): options = list(p_options.keys()) else: @@ -117,27 +141,40 @@ class Menu(TerminalMenu): if sort: options = sorted(options) - self.menu_options = options - self.skip = skip - self.default_option = default_option - self.multi = multi + self._menu_options = options + self._skip = skip + self._default_option = default_option + self._multi = multi + self._explode_on_interrupt = explode_on_interrupt + self._explode_warning = explode_warning + menu_title = f'\n{title}\n\n' + if header: - separator = '\n ' if not isinstance(header,(list,tuple)): - header = [header,] - if skip: - menu_title += str(_("Use ESC to skip\n")) - menu_title += separator + separator.join(header) - elif skip: - menu_title += str(_("Use ESC to skip\n\n")) + header = [header] + header = '\n'.join(header) + menu_title += f'\n{header}\n' + + action_info = '' + if skip: + action_info += str(_("Use ESC to skip")) + + if self._explode_on_interrupt: + if len(action_info) > 0: + action_info += '\n' + action_info += str(_('Use CTRL+C to reset current selection\n\n')) + + menu_title += action_info + if default_option: # if a default value was specified we move that one # to the top of the list and mark it as default as well - default = f'{default_option} (default)' - self.menu_options = [default] + [o for o in self.menu_options if default_option != o] + default = f'{default_option} {self._default_str}' + self._menu_options = [default] + [o for o in self._menu_options if default_option != o] + + self._preselection(preset_values,cursor_index) - self.preselection(preset_values,cursor_index) cursor = "> " main_menu_cursor_style = ("fg_cyan", "bold") main_menu_style = ("bg_blue", "fg_gray") @@ -145,8 +182,9 @@ class Menu(TerminalMenu): kwargs['clear_screen'] = kwargs.get('clear_screen',True) kwargs['show_search_hint'] = kwargs.get('show_search_hint',True) kwargs['cycle_cursor'] = kwargs.get('cycle_cursor',True) + super().__init__( - menu_entries=self.menu_options, + menu_entries=self._menu_options, title=menu_title, menu_cursor=cursor, menu_cursor_style=main_menu_cursor_style, @@ -160,32 +198,46 @@ class Menu(TerminalMenu): preview_command=preview_command, preview_size=preview_size, preview_title=preview_title, + explode_on_interrupt=self._explode_on_interrupt, multi_select_select_on_accept=False, **kwargs, ) - def _show(self): - idx = self.show() + def _show(self) -> MenuSelection: + try: + idx = self.show() + except KeyboardInterrupt: + return MenuSelection(type_=MenuSelectionType.Ctrl_c) + + def check_default(elem): + if self._default_option is not None and f'{self._default_option} {self._default_str}' in elem: + return self._default_option + else: + return elem + if idx is not None: if isinstance(idx, (list, tuple)): - return [self.default_option if ' (default)' in self.menu_options[i] else self.menu_options[i] for i in idx] + results = [] + for i in idx: + option = check_default(self._menu_options[i]) + results.append(option) + return MenuSelection(type_=MenuSelectionType.Selection, value=results) else: - selected = self.menu_options[idx] - if ' (default)' in selected and self.default_option: - return self.default_option - return selected + result = check_default(self._menu_options[idx]) + return MenuSelection(type_=MenuSelectionType.Selection, value=result) else: - if self.default_option: - if self.multi: - return [self.default_option] - else: - return self.default_option - return None - - def run(self): + return MenuSelection(type_=MenuSelectionType.Esc) + + def run(self) -> MenuSelection: ret = self._show() - if ret is None and not self.skip: + if ret.type_ == MenuSelectionType.Ctrl_c: + if self._explode_on_interrupt and len(self._explode_warning) > 0: + response = Menu(self._explode_warning, Menu.yes_no(), skip=False).run() + if response.value == Menu.no(): + return self.run() + + if ret.type_ is not MenuSelectionType.Selection and not self._skip: return self.run() return ret @@ -200,15 +252,15 @@ class Menu(TerminalMenu): pos = self._menu_entries.index(value) self.set_cursor_pos(pos) - def preselection(self,preset_values :list = [],cursor_index :int = None): + def _preselection(self,preset_values :Union[str, List[str]] = [], cursor_index : Optional[int] = None): def from_preset_to_cursor(): if preset_values: # if the value is not extant return 0 as cursor index try: if isinstance(preset_values,str): - self.cursor_index = self.menu_options.index(self.preset_values) + self.cursor_index = self._menu_options.index(self.preset_values) else: # should return an error, but this is smoother - self.cursor_index = self.menu_options.index(self.preset_values[0]) + self.cursor_index = self._menu_options.index(self.preset_values[0]) except ValueError: self.cursor_index = 0 @@ -218,13 +270,13 @@ class Menu(TerminalMenu): return self.preset_values = preset_values - if self.default_option: - if isinstance(preset_values,str) and self.default_option == preset_values: - self.preset_values = f"{preset_values} (default)" - elif isinstance(preset_values,(list,tuple)) and self.default_option in preset_values: - idx = preset_values.index(self.default_option) - self.preset_values[idx] = f"{preset_values[idx]} (default)" - if cursor_index is None or not self.multi: + if self._default_option: + if isinstance(preset_values,str) and self._default_option == preset_values: + self.preset_values = f"{preset_values} {self._default_str}" + elif isinstance(preset_values,(list,tuple)) and self._default_option in preset_values: + idx = preset_values.index(self._default_option) + self.preset_values[idx] = f"{preset_values[idx]} {self._default_str}" + if cursor_index is None or not self._multi: from_preset_to_cursor() - if not self.multi: # Not supported by the infraestructure + if not self._multi: # Not supported by the infraestructure self.preset_values = None diff --git a/archinstall/lib/menu/selection_menu.py b/archinstall/lib/menu/selection_menu.py index e18d92c2..54b1441b 100644 --- a/archinstall/lib/menu/selection_menu.py +++ b/archinstall/lib/menu/selection_menu.py @@ -4,7 +4,7 @@ import logging import sys from typing import Callable, Any, List, Iterator, Tuple, Optional, Dict, TYPE_CHECKING -from .menu import Menu +from .menu import Menu, MenuSelectionType from ..locale_helpers import set_keyboard_language from ..output import log from ..translation import Translation @@ -12,13 +12,15 @@ from ..translation import Translation if TYPE_CHECKING: _: Any -def select_archinstall_language(default='English'): + +def select_archinstall_language(preset_value: str) -> Optional[str]: """ copied from user_interaction/general_conf.py as a temporary measure """ languages = Translation.get_all_names() - language = Menu(_('Select Archinstall language'), languages, default_option=default).run() - return language + language = Menu(_('Select Archinstall language'), languages, preset_values=preset_value).run() + return language.value + class Selector: def __init__( @@ -307,22 +309,27 @@ class GeneralMenu: skip_empty_entries=True ).run() - if selection and self.auto_cursor: - cursor_pos = menu_options.index(selection) + 1 # before the strip otherwise fails + if selection.type_ == MenuSelectionType.Selection: + value = selection.value + + if self.auto_cursor: + cursor_pos = menu_options.index(value) + 1 # before the strip otherwise fails + + # in case the new position lands on a "placeholder" we'll skip them as well + while True: + if cursor_pos >= len(menu_options): + cursor_pos = 0 + if len(menu_options[cursor_pos]) > 0: + break + cursor_pos += 1 - # in case the new position lands on a "placeholder" we'll skip them as well - while True: - if cursor_pos >= len(menu_options): - cursor_pos = 0 - if len(menu_options[cursor_pos]) > 0: + value = value.strip() + + # if this calls returns false, we exit the menu + # we allow for an callback for special processing on realeasing control + if not self._process_selection(value): break - cursor_pos += 1 - selection = selection.strip() - if selection: - # if this calls returns false, we exit the menu. We allow for an callback for special processing on realeasing control - if not self._process_selection(selection): - break if not self.is_context_mgr: self.__exit__() @@ -443,15 +450,17 @@ class GeneralMenu: def mandatory_overview(self) -> Tuple[int, int]: mandatory_fields = 0 mandatory_waiting = 0 - for field in self._menu_options: - option = self._menu_options[field] + for field, option in self._menu_options.items(): if option.is_mandatory(): mandatory_fields += 1 if not option.has_selection(): mandatory_waiting += 1 return mandatory_fields, mandatory_waiting - def _select_archinstall_language(self, default_lang): - language = select_archinstall_language(default_lang) - self._translation.activate(language) - return language + def _select_archinstall_language(self, preset_value: str) -> str: + language = select_archinstall_language(preset_value) + if language is not None: + self._translation.activate(language) + return language + + return preset_value diff --git a/archinstall/lib/menu/simple_menu.py b/archinstall/lib/menu/simple_menu.py index a0a241bd..947259eb 100644 --- a/archinstall/lib/menu/simple_menu.py +++ b/archinstall/lib/menu/simple_menu.py @@ -596,7 +596,8 @@ class TerminalMenu: status_bar: Optional[Union[str, Iterable[str], Callable[[str], str]]] = None, status_bar_below_preview: bool = DEFAULT_STATUS_BAR_BELOW_PREVIEW, status_bar_style: Optional[Iterable[str]] = DEFAULT_STATUS_BAR_STYLE, - title: Optional[Union[str, Iterable[str]]] = None + title: Optional[Union[str, Iterable[str]]] = None, + explode_on_interrupt: bool = False ): def extract_shortcuts_menu_entries_and_preview_arguments( entries: Iterable[str], @@ -718,6 +719,7 @@ class TerminalMenu: self._search_case_sensitive = search_case_sensitive self._search_highlight_style = tuple(search_highlight_style) if search_highlight_style is not None else () self._search_key = search_key + self._explode_on_interrupt = explode_on_interrupt self._shortcut_brackets_highlight_style = ( tuple(shortcut_brackets_highlight_style) if shortcut_brackets_highlight_style is not None else () ) @@ -1538,7 +1540,9 @@ class TerminalMenu: # Only append `next_key` if it is a printable character and the first character is not the # `search_start` key self._search.search_text += next_key - except KeyboardInterrupt: + except KeyboardInterrupt as e: + if self._explode_on_interrupt: + raise e menu_was_interrupted = True finally: reset_signal_handling() @@ -1841,6 +1845,12 @@ def get_argumentparser() -> argparse.ArgumentParser: ), ) parser.add_argument("-t", "--title", action="store", dest="title", help="menu title") + parser.add_argument( + "--explode-on-interrupt", + action="store_true", + dest="explode_on_interrupt", + help="Instead of quitting the menu, this will raise the KeyboardInterrupt Exception", + ) parser.add_argument( "-V", "--version", action="store_true", dest="print_version", help="print the version number and exit" ) @@ -1971,6 +1981,7 @@ def main() -> None: status_bar_below_preview=args.status_bar_below_preview, status_bar_style=args.status_bar_style, title=args.title, + explode_on_interrupt=args.explode_on_interrupt, ) except (InvalidParameterCombinationError, InvalidStyleError, UnknownMenuEntryError) as e: print(str(e), file=sys.stderr) diff --git a/archinstall/lib/profiles.py b/archinstall/lib/profiles.py index 65a30b0b..33214ee8 100644 --- a/archinstall/lib/profiles.py +++ b/archinstall/lib/profiles.py @@ -207,6 +207,10 @@ class Profile(Script): def __repr__(self, *args :str, **kwargs :str) -> str: return f'Profile({os.path.basename(self.profile)})' + @property + def name(self) -> str: + return os.path.basename(self.profile) + def install(self) -> ModuleType: # Before installing, revert any temporary changes to the namespace. # This ensures that the namespace during installation is the original initiation namespace. diff --git a/archinstall/lib/user_interaction/disk_conf.py b/archinstall/lib/user_interaction/disk_conf.py index e84f647a..41657e1b 100644 --- a/archinstall/lib/user_interaction/disk_conf.py +++ b/archinstall/lib/user_interaction/disk_conf.py @@ -6,13 +6,14 @@ from .partitioning_conf import manage_new_and_existing_partitions, get_default_p from ..disk import BlockDevice from ..exceptions import DiskError from ..menu import Menu +from ..menu.menu import MenuSelectionType from ..output import log if TYPE_CHECKING: _: Any -def ask_for_main_filesystem_format(advanced_options=False): +def ask_for_main_filesystem_format(advanced_options=False) -> str: options = {'btrfs': 'btrfs', 'ext4': 'ext4', 'xfs': 'xfs', 'f2fs': 'f2fs'} advanced = {'ntfs': 'ntfs'} @@ -22,7 +23,7 @@ def ask_for_main_filesystem_format(advanced_options=False): prompt = _('Select which filesystem your main partition should use') choice = Menu(prompt, options, skip=False).run() - return choice + return choice.value def select_individual_blockdevice_usage(block_devices: list) -> Dict[str, Any]: @@ -30,24 +31,33 @@ def select_individual_blockdevice_usage(block_devices: list) -> Dict[str, Any]: for device in block_devices: layout = manage_new_and_existing_partitions(device) - result[device.path] = layout return result -def select_disk_layout(block_devices: list, advanced_options=False) -> Optional[Dict[str, Any]]: +def select_disk_layout(preset: Optional[Dict[str, Any]], block_devices: list, advanced_options=False) -> Optional[Dict[str, Any]]: wipe_mode = str(_('Wipe all selected drives and use a best-effort default partition layout')) custome_mode = str(_('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).run() - - if mode: - if mode == wipe_mode: - return get_default_partition_layout(block_devices, advanced_options) - else: - return select_individual_blockdevice_usage(block_devices) + warning = str(_('Are you sure you want to reset this setting?')) + + choice = Menu( + _('Select what you wish to do with the selected block devices'), + modes, + explode_on_interrupt=True, + explode_warning=warning + ).run() + + match choice.type_: + case MenuSelectionType.Esc: return preset + case MenuSelectionType.Ctrl_c: return None + case MenuSelectionType.Selection: + if choice.value == wipe_mode: + return get_default_partition_layout(block_devices, advanced_options) + else: + return select_individual_blockdevice_usage(block_devices) def select_disk(dict_o_disks: Dict[str, BlockDevice]) -> BlockDevice: diff --git a/archinstall/lib/user_interaction/general_conf.py b/archinstall/lib/user_interaction/general_conf.py index 78f6b460..af996331 100644 --- a/archinstall/lib/user_interaction/general_conf.py +++ b/archinstall/lib/user_interaction/general_conf.py @@ -3,6 +3,9 @@ from __future__ import annotations import logging from typing import List, Any, Optional, Dict, TYPE_CHECKING +import archinstall + +from ..menu.menu import MenuSelectionType from ..menu.text_input import TextInput from ..locale_helpers import list_keyboard_languages, list_timezones @@ -26,7 +29,8 @@ def ask_ntp(preset: bool = True) -> bool: else: preset_val = Menu.no() choice = Menu(prompt, Menu.yes_no(), skip=False, preset_values=preset_val, default_option=Menu.yes()).run() - return False if choice == Menu.no() else True + + return False if choice.value == Menu.no() else True def ask_hostname(preset: str = None) -> str: @@ -38,23 +42,31 @@ def ask_for_a_timezone(preset: str = None) -> str: timezones = list_timezones() default = 'UTC' - selected_tz = Menu(_('Select a timezone'), - list(timezones), - skip=False, - preset_values=preset, - default_option=default).run() + choice = Menu( + _('Select a timezone'), + list(timezones), + preset_values=preset, + default_option=default + ).run() - return selected_tz + match choice.type_: + case MenuSelectionType.Esc: return preset + case MenuSelectionType.Selection: return choice.value def ask_for_audio_selection(desktop: bool = True, preset: str = None) -> str: - audio = 'pipewire' if desktop else 'none' - choices = ['pipewire', 'pulseaudio'] if desktop else ['pipewire', 'pulseaudio', 'none'] - selected_audio = Menu(_('Choose an audio server'), choices, preset_values=preset, default_option=audio, skip=False).run() - return selected_audio + no_audio = str(_('No audio server')) + choices = ['pipewire', 'pulseaudio'] if desktop else ['pipewire', 'pulseaudio', no_audio] + default = 'pipewire' if desktop else no_audio + + choice = Menu(_('Choose an audio server'), choices, preset_values=preset, default_option=default).run() + match choice.type_: + case MenuSelectionType.Esc: return preset + case MenuSelectionType.Selection: return choice.value -def select_language(default_value: str, preset_value: str = None) -> str: + +def select_language(preset_value: str = None) -> str: """ Asks the user to select a language Usually this is combined with :ref:`archinstall.list_keyboard_languages`. @@ -64,16 +76,19 @@ def select_language(default_value: str, preset_value: str = None) -> str: """ kb_lang = list_keyboard_languages() # sort alphabetically and then by length - # it's fine if the list is big because the Menu - # 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, - preset_values=preset_value, - sort=False).run() - return selected_lang + selected_lang = Menu( + _('Select Keyboard layout'), + sorted_kb_lang, + preset_values=preset_value, + sort=False + ).run() + + if selected_lang.value is None: + return preset_value + + return selected_lang.value def select_mirror_regions(preset_values: Dict[str, Any] = {}) -> Dict[str, Any]: @@ -89,15 +104,18 @@ def select_mirror_regions(preset_values: Dict[str, Any] = {}) -> Dict[str, Any]: else: preselected = list(preset_values.keys()) mirrors = list_mirrors() - selected_mirror = Menu(_('Select one of the regions to download packages from'), - list(mirrors.keys()), - preset_values=preselected, - multi=True).run() + selected_mirror = Menu( + _('Select one of the regions to download packages from'), + list(mirrors.keys()), + preset_values=preselected, + multi=True, + explode_on_interrupt=True + ).run() - if selected_mirror is not None: - return {selected: mirrors[selected] for selected in selected_mirror} - - return {} + match selected_mirror.type_: + case MenuSelectionType.Ctrl_c: return {} + case MenuSelectionType.Esc: return preset_values + case _: return {selected: mirrors[selected] for selected in selected_mirror.value} def select_archinstall_language(default='English'): @@ -106,7 +124,7 @@ def select_archinstall_language(default='English'): return language -def select_profile() -> Optional[Profile]: +def select_profile(preset) -> Optional[Profile]: """ # Asks the user to select a profile from the available profiles. # @@ -125,12 +143,27 @@ def select_profile() -> Optional[Profile]: 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() - - if selection is not None: - return options[selection] - - return None + warning = str(_('Are you sure you want to reset this setting?')) + + selection = Menu( + title=title, + p_options=list(options.keys()), + explode_on_interrupt=True, + explode_warning=warning + ).run() + + match selection.type_: + case MenuSelectionType.Selection: + return options[selection.value] if selection.value is not None else None + case MenuSelectionType.Ctrl_c: + archinstall.storage['profile_minimal'] = False + archinstall.storage['_selected_servers'] = [] + archinstall.storage['_desktop_profile'] = None + archinstall.arguments['desktop-environment'] = None + archinstall.arguments['gfx_driver_packages'] = None + return None + case MenuSelectionType.Esc: + return None def ask_additional_packages_to_install(pre_set_packages: List[str] = []) -> List[str]: @@ -171,14 +204,16 @@ def select_additional_repositories(preset: List[str]) -> List[str]: repositories = ["multilib", "testing"] - additional_repositories = Menu(_('Choose which optional additional repositories to enable'), - repositories, - sort=False, - multi=True, - preset_values=preset, - default_option=[]).run() - - if additional_repositories is not None: - return additional_repositories - - return [] + choice = Menu( + _('Choose which optional additional repositories to enable'), + repositories, + sort=False, + multi=True, + preset_values=preset, + explode_on_interrupt=True + ).run() + + match choice.type_: + case MenuSelectionType.Esc: return preset + case MenuSelectionType.Ctrl_c: return [] + case MenuSelectionType.Selection: return choice.value diff --git a/archinstall/lib/user_interaction/locale_conf.py b/archinstall/lib/user_interaction/locale_conf.py index d48018cf..15720064 100644 --- a/archinstall/lib/user_interaction/locale_conf.py +++ b/archinstall/lib/user_interaction/locale_conf.py @@ -4,32 +4,39 @@ from typing import Any, TYPE_CHECKING from ..locale_helpers import list_locales from ..menu import Menu +from ..menu.menu import MenuSelectionType if TYPE_CHECKING: _: Any -def select_locale_lang(default: str, preset: str = None) -> str: +def select_locale_lang(preset: str = None) -> str: locales = list_locales() locale_lang = set([locale.split()[0] for locale in locales]) - selected_locale = Menu(_('Choose which locale language to use'), - locale_lang, - sort=True, - preset_values=preset, - default_option=default).run() + selected_locale = Menu( + _('Choose which locale language to use'), + list(locale_lang), + sort=True, + preset_values=preset + ).run() - return selected_locale + match selected_locale.type_: + case MenuSelectionType.Selection: return selected_locale.value + case MenuSelectionType.Esc: return preset -def select_locale_enc(default: str, preset: str = None) -> str: +def select_locale_enc(preset: str = None) -> str: locales = list_locales() locale_enc = set([locale.split()[1] for locale in locales]) - selected_locale = Menu(_('Choose which locale encoding to use'), - locale_enc, - sort=True, - preset_values=preset, - default_option=default).run() + selected_locale = Menu( + _('Choose which locale encoding to use'), + list(locale_enc), + sort=True, + preset_values=preset + ).run() - return selected_locale + match selected_locale.type_: + case MenuSelectionType.Selection: return selected_locale.value + case MenuSelectionType.Esc: return preset diff --git a/archinstall/lib/user_interaction/network_conf.py b/archinstall/lib/user_interaction/network_conf.py index 80c9106b..e4e681ce 100644 --- a/archinstall/lib/user_interaction/network_conf.py +++ b/archinstall/lib/user_interaction/network_conf.py @@ -4,6 +4,7 @@ import ipaddress import logging from typing import Any, Optional, TYPE_CHECKING, List, Union +from ..menu.menu import MenuSelectionType from ..menu.text_input import TextInput from ..models.network_configuration import NetworkConfiguration, NicType @@ -66,8 +67,12 @@ class ManualNetworkConfig(ListManager): def _select_iface(self, existing_ifaces: List[str]) -> Optional[str]: all_ifaces = list_interfaces().values() available = set(all_ifaces) - set(existing_ifaces) - iface = Menu(str(_('Select interface to add')), list(available), skip=True).run() - return iface + choice = Menu(str(_('Select interface to add')), list(available), skip=True).run() + + if choice.type_ == MenuSelectionType.Esc: + return None + + return choice.value def _edit_iface(self, edit_iface :NetworkConfiguration): iface_name = edit_iface.iface @@ -75,9 +80,9 @@ class ManualNetworkConfig(ListManager): default_mode = 'DHCP (auto detect)' prompt = _('Select which mode to configure for "{}" or skip to use default mode "{}"').format(iface_name, default_mode) - mode = Menu(prompt, modes, default_option=default_mode).run() + mode = Menu(prompt, modes, default_option=default_mode, skip=False).run() - if mode == 'IP (static)': + if mode.value == 'IP (static)': while 1: prompt = _('Enter the IP and subnet for {} (example: 192.168.0.5/24): ').format(iface_name) ip = TextInput(prompt, edit_iface.ip).run().strip() @@ -107,6 +112,7 @@ class ManualNetworkConfig(ListManager): display_dns = None dns_input = TextInput(_('Enter your DNS servers (space separated, blank for none): '), display_dns).run().strip() + dns = [] if len(dns_input): dns = dns_input.split(' ') @@ -135,23 +141,28 @@ def ask_to_configure_network(preset: Union[None, NetworkConfiguration, List[Netw elif preset.type == 'network_manager': cursor_idx = 1 - nic = Menu(_( - 'Select one network interface to configure'), + warning = str(_('Are you sure you want to reset this setting?')) + + choice = Menu( + _('Select one network interface to configure'), list(network_options.values()), cursor_index=cursor_idx, - sort=False + sort=False, + explode_on_interrupt=True, + explode_warning=warning ).run() - if not nic: - return preset + match choice.type_: + case MenuSelectionType.Esc: return preset + case MenuSelectionType.Ctrl_c: return None - if nic == network_options['none']: + if choice.value == network_options['none']: return None - elif nic == network_options['iso_config']: + elif choice.value == network_options['iso_config']: return NetworkConfiguration(NicType.ISO) - elif nic == network_options['network_manager']: + elif choice.value == network_options['network_manager']: return NetworkConfiguration(NicType.NM) - elif nic == network_options['manual']: + elif choice.value == network_options['manual']: manual = ManualNetworkConfig('Configure interfaces', preset) return manual.run_manual() diff --git a/archinstall/lib/user_interaction/partitioning_conf.py b/archinstall/lib/user_interaction/partitioning_conf.py index afca1cef..c3dc4146 100644 --- a/archinstall/lib/user_interaction/partitioning_conf.py +++ b/archinstall/lib/user_interaction/partitioning_conf.py @@ -1,8 +1,10 @@ from __future__ import annotations +import copy from typing import List, Any, Dict, Union, TYPE_CHECKING, Callable, Optional from ..menu import Menu +from ..menu.menu import MenuSelectionType from ..output import log from ..disk.validators import fs_types @@ -80,21 +82,26 @@ def _get_partitions(partitions :List[Partition], filter_ :Callable = None) -> Li return partition_indexes -def select_partition(title :str, partitions :List[Partition], multiple :bool = False, filter_ :Callable = None) -> Union[int, List[int], None]: +def select_partition( + title :str, + partitions :List[Partition], + multiple :bool = False, + filter_ :Callable = None +) -> Optional[int, List[int]]: partition_indexes = _get_partitions(partitions, filter_) if len(partition_indexes) == 0: return None - partition = Menu(title, partition_indexes, multi=multiple).run() + choice = Menu(title, partition_indexes, multi=multiple).run() - if partition is not None: - if isinstance(partition, list): - return [int(p) for p in partition] - else: - return int(partition) + if choice.type_ == MenuSelectionType.Esc: + return None - return None + if isinstance(choice.value, list): + return [int(p) for p in choice.value] + else: + return int(choice.value) def get_default_partition_layout( @@ -114,14 +121,15 @@ def select_individual_blockdevice_usage(block_devices: list) -> Dict[str, Any]: for device in block_devices: layout = manage_new_and_existing_partitions(device) - result[device.path] = layout return result -def manage_new_and_existing_partitions(block_device: 'BlockDevice') -> Dict[str, Any]: # noqa: max-complexity: 50 +def manage_new_and_existing_partitions(block_device: 'BlockDevice') -> Dict[str, Any]: # noqa: max-complexity: 50 block_device_struct = {"partitions": [partition.__dump__() for partition in block_device.partitions.values()]} + original_layout = copy.deepcopy(block_device_struct) + # Test code: [part.__dump__() for part in block_device.partitions.values()] # TODO: Squeeze in BTRFS subvolumes here @@ -136,6 +144,8 @@ def manage_new_and_existing_partitions(block_device: 'BlockDevice') -> Dict[str, mark_bootable = str(_('Mark/Unmark a partition as bootable (automatic for /boot)')) set_filesystem_partition = str(_('Set desired filesystem for a partition')) set_btrfs_subvolumes = str(_('Set desired subvolumes on a btrfs partition')) + save_and_exit = str(_('Save and exit')) + cancel = str(_('Cancel')) while True: modes = [new_partition, suggest_partition_layout] @@ -166,11 +176,15 @@ def manage_new_and_existing_partitions(block_device: 'BlockDevice') -> Dict[str, if len(block_device_struct["partitions"]): title += _current_partition_layout(block_device_struct['partitions']) + '\n' - task = Menu(title, modes, sort=False).run() + modes += [save_and_exit, cancel] - if not task: - break + task = Menu(title, modes, sort=False, skip=False).run() + task = task.value + if task == cancel: + return original_layout + elif task == save_and_exit: + break if task == new_partition: from ..disk import valid_parted_position @@ -179,9 +193,9 @@ def manage_new_and_existing_partitions(block_device: 'BlockDevice') -> Dict[str, # # 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()).run() + fs_choice = Menu(_('Enter a desired filesystem type for the partition'), fs_types()).run() - if not fstype: + if fs_choice.type_ == MenuSelectionType.Esc: continue prompt = _('Enter the start sector (percentage or block number, default: {}): ').format( @@ -214,7 +228,7 @@ def manage_new_and_existing_partitions(block_device: 'BlockDevice') -> Dict[str, "mountpoint": None, "wipe": True, "filesystem": { - "format": fstype + "format": fs_choice.value } }) else: @@ -225,16 +239,13 @@ def manage_new_and_existing_partitions(block_device: 'BlockDevice') -> Dict[str, from ..disk import suggest_single_disk_layout if len(block_device_struct["partitions"]): - prompt = _('{} contains queued partitions, this will remove those, are you sure?').format(block_device) - choice = Menu(prompt, Menu.yes_no(), default_option=Menu.no()).run() + prompt = _('{}\ncontains queued partitions, this will remove those, are you sure?').format(block_device) + choice = Menu(prompt, Menu.yes_no(), default_option=Menu.no(), skip=False).run() - if choice == Menu.no(): + if choice.value == Menu.no(): continue block_device_struct.update(suggest_single_disk_layout(block_device)[block_device.path]) - - elif task is None: - return block_device_struct else: current_layout = _current_partition_layout(block_device_struct['partitions'], with_idx=True) @@ -265,10 +276,8 @@ def manage_new_and_existing_partitions(block_device: 'BlockDevice') -> Dict[str, 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 @@ -290,10 +299,10 @@ def manage_new_and_existing_partitions(block_device: 'BlockDevice') -> Dict[str, 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()).run() + fs_choice = Menu(_('Enter a desired filesystem type for the partition'), fs_types()).run() - if fstype: - block_device_struct["partitions"][partition]['filesystem']['format'] = fstype + if fs_choice.type_ == MenuSelectionType.Selection: + block_device_struct["partitions"][partition]['filesystem']['format'] = fs_choice.value # Negate the current wipe marking block_device_struct["partitions"][partition]['wipe'] = not block_device_struct["partitions"][partition].get('wipe', False) @@ -304,16 +313,16 @@ def manage_new_and_existing_partitions(block_device: 'BlockDevice') -> Dict[str, if partition is not None: # Negate the current encryption marking - block_device_struct["partitions"][partition][ - 'encrypted'] = not block_device_struct["partitions"][partition].get('encrypted', False) + block_device_struct["partitions"][partition]['encrypted'] = \ + not block_device_struct["partitions"][partition].get('encrypted', False) elif task == mark_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) + block_device_struct["partitions"][partition]['boot'] = \ + not block_device_struct["partitions"][partition].get('boot', False) elif task == set_filesystem_partition: title = _('{}\n\nSelect which partition to set a filesystem on').format(current_layout) @@ -324,10 +333,10 @@ def manage_new_and_existing_partitions(block_device: 'BlockDevice') -> Dict[str, block_device_struct["partitions"][partition]['filesystem'] = {} fstype_title = _('Enter a desired filesystem type for the partition: ') - fstype = Menu(fstype_title, fs_types()).run() + fs_choice = Menu(fstype_title, fs_types()).run() - if fstype: - block_device_struct["partitions"][partition]['filesystem']['format'] = fstype + if fs_choice.type_ == MenuSelectionType.Selection: + block_device_struct["partitions"][partition]['filesystem']['format'] = fs_choice.value elif task == set_btrfs_subvolumes: from .subvolume_config import SubvolumeList diff --git a/archinstall/lib/user_interaction/save_conf.py b/archinstall/lib/user_interaction/save_conf.py index c52b97e2..f542bc9b 100644 --- a/archinstall/lib/user_interaction/save_conf.py +++ b/archinstall/lib/user_interaction/save_conf.py @@ -5,6 +5,7 @@ from typing import Any, Dict, TYPE_CHECKING from ..configuration import ConfigurationOutput from ..menu import Menu +from ..menu.menu import MenuSelectionType from ..output import log if TYPE_CHECKING: @@ -45,14 +46,16 @@ def save_config(config: Dict): 'all': str(_('Save all')) } - selection = Menu(_('Choose which configuration to save'), - list(options.values()), - sort=False, - skip=True, - preview_size=0.75, - preview_command=preview).run() + choice = Menu( + _('Choose which configuration to save'), + list(options.values()), + sort=False, + skip=True, + preview_size=0.75, + preview_command=preview + ).run() - if not selection: + if choice.type_ == MenuSelectionType.Esc: return while True: @@ -62,13 +65,13 @@ def save_config(config: Dict): break log(_('Not a valid directory: {}').format(dest_path), fg='red') - if options['user_config'] == selection: + if options['user_config'] == choice.value: config_output.save_user_config(dest_path) - elif options['user_creds'] == selection: + elif options['user_creds'] == choice.value: config_output.save_user_creds(dest_path) - elif options['disk_layout'] == selection: + elif options['disk_layout'] == choice.value: config_output.save_disk_layout(dest_path) - elif options['all'] == selection: + elif options['all'] == choice.value: config_output.save_user_config(dest_path) config_output.save_user_creds(dest_path) - config_output.save_disk_layout + config_output.save_disk_layout(dest_path) diff --git a/archinstall/lib/user_interaction/system_conf.py b/archinstall/lib/user_interaction/system_conf.py index 17c093c1..f4ada14b 100644 --- a/archinstall/lib/user_interaction/system_conf.py +++ b/archinstall/lib/user_interaction/system_conf.py @@ -6,10 +6,9 @@ from ..disk import all_blockdevices from ..exceptions import RequirementError from ..hardware import AVAILABLE_GFX_DRIVERS, has_uefi, has_amd_graphics, has_intel_graphics, has_nvidia_graphics from ..menu import Menu +from ..menu.menu import MenuSelectionType from ..storage import storage -from ..translation import DeferredTranslation - if TYPE_CHECKING: _: Any @@ -25,13 +24,22 @@ def select_kernel(preset: List[str] = None) -> List[str]: kernels = ["linux", "linux-lts", "linux-zen", "linux-hardened"] default_kernel = "linux" - selected_kernels = Menu(_('Choose which kernels to use or leave blank for default "{}"').format(default_kernel), - kernels, - sort=True, - multi=True, - preset_values=preset, - default_option=default_kernel).run() - return selected_kernels + warning = str(_('Are you sure you want to reset this setting?')) + + choice = Menu( + _('Choose which kernels to use or leave blank for default "{}"').format(default_kernel), + kernels, + sort=True, + multi=True, + preset_values=preset, + explode_on_interrupt=True, + explode_warning=warning + ).run() + + match choice.type_: + case MenuSelectionType.Esc: return preset + case MenuSelectionType.Ctrl_c: return [] + case MenuSelectionType.Selection: return choice.value def select_harddrives(preset: List[str] = []) -> List[str]: @@ -49,15 +57,24 @@ def select_harddrives(preset: List[str] = []) -> List[str]: else: preset_disks = {} - selected_harddrive = Menu(_('Select one or more hard drives to use and configure'), - list(options.keys()), - preset_values=list(preset_disks.keys()), - multi=True).run() + title = str(_('Select one or more hard drives to use and configure\n')) + title += str(_('Any modifications to the existing setting will reset the disk layout!')) - if selected_harddrive and len(selected_harddrive) > 0: - return [options[i] for i in selected_harddrive] + warning = str(_('If you reset the harddrive selection this will also reset the current disk layout. Are you sure?')) - return [] + selected_harddrive = Menu( + title, + list(options.keys()), + preset_values=list(preset_disks.keys()), + multi=True, + explode_on_interrupt=True, + explode_warning=warning + ).run() + + match selected_harddrive.type_: + case MenuSelectionType.Ctrl_c: return [] + case MenuSelectionType.Esc: return preset + case MenuSelectionType.Selection: return [options[i] for i in selected_harddrive.value] def select_driver(options: Dict[str, Any] = AVAILABLE_GFX_DRIVERS) -> str: @@ -73,34 +90,34 @@ def select_driver(options: Dict[str, Any] = AVAILABLE_GFX_DRIVERS) -> str: if drivers: arguments = storage.get('arguments', {}) - title = DeferredTranslation('') + title = '' if has_amd_graphics(): - title += _( + title += str(_( 'For the best compatibility with your AMD hardware, you may want to use either the all open-source or AMD / ATI options.' - ) + '\n' + )) + '\n' if has_intel_graphics(): - title += _( + title += str(_( '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 += _( + title += str(_( 'For the best compatibility with your Nvidia hardware, you may want to use the Nvidia proprietary driver.\n' - ) + )) - title += _('\n\nSelect a graphics driver or leave blank to install all open-source drivers') - arguments['gfx_driver'] = Menu(title, drivers).run() + title += str(_('\n\nSelect a graphics driver or leave blank to install all open-source drivers')) + choice = Menu(title, drivers).run() - if arguments.get('gfx_driver', None) is None: - arguments['gfx_driver'] = _("All open-source (default)") + if choice.type_ != MenuSelectionType.Selection: + return arguments.get('gfx_driver') - return options.get(arguments.get('gfx_driver')) + arguments['gfx_driver'] = choice.value + return options.get(choice.value) raise RequirementError("Selecting drivers require a least one profile to be given as an option.") def ask_for_bootloader(advanced_options: bool = False, preset: str = None) -> str: - if preset == 'systemd-bootctl': preset_val = 'systemd-boot' if advanced_options else Menu.no() elif preset == 'grub-install': @@ -109,26 +126,36 @@ def ask_for_bootloader(advanced_options: bool = False, preset: str = None) -> st preset_val = preset 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?'), - Menu.yes_no(), - preset_values=preset_val, - default_option=Menu.no()).run() - - if bootloader_choice == Menu.yes(): - bootloader = "grub-install" + selection = Menu( + _('Would you like to use GRUB as a bootloader instead of systemd-boot?'), + Menu.yes_no(), + preset_values=preset_val, + default_option=Menu.no() + ).run() + + match selection.type_: + case MenuSelectionType.Esc: return preset + case MenuSelectionType.Selection: bootloader = 'grub-install' if selection.value == Menu.yes() else bootloader 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'), choices, preset_values=preset_val).run() - if selection != "": - if selection == 'systemd-boot': + + value = '' + match selection.type_: + case MenuSelectionType.Esc: value = preset_val + case MenuSelectionType.Selection: value = selection.value + + if value != "": + if value == 'systemd-boot': bootloader = 'systemd-bootctl' - elif selection == 'grub': + elif value == 'grub': bootloader = 'grub-install' else: - bootloader = selection + bootloader = value return bootloader @@ -138,6 +165,10 @@ def ask_for_swap(preset: bool = True) -> bool: preset_val = Menu.yes() else: preset_val = Menu.no() + prompt = _('Would you like to use swap on zram?') choice = Menu(prompt, Menu.yes_no(), default_option=Menu.yes(), preset_values=preset_val).run() - return False if choice == Menu.no() else True + + match choice.type_: + case MenuSelectionType.Esc: return preset + case MenuSelectionType.Selection: return False if choice.value == Menu.no() else True diff --git a/archinstall/lib/user_interaction/utils.py b/archinstall/lib/user_interaction/utils.py index 59f2dfbc..ce48607d 100644 --- a/archinstall/lib/user_interaction/utils.py +++ b/archinstall/lib/user_interaction/utils.py @@ -30,7 +30,7 @@ def check_password_strong(passwd: str) -> bool: if symbol_count**len(passwd) < 10e20: prompt = str(_("The password you are using seems to be weak, are you sure you want to use it?")) choice = Menu(prompt, Menu.yes_no(), default_option=Menu.yes()).run() - return choice == Menu.yes() + return choice.value == Menu.yes() return True @@ -40,7 +40,6 @@ def get_password(prompt: str = '') -> Optional[str]: prompt = _("Enter a password: ") while passwd := getpass.getpass(prompt): - if len(passwd.strip()) <= 0: break @@ -82,11 +81,12 @@ def do_countdown() -> bool: if SIG_TRIGGER: prompt = _('Do you really want to abort?') choice = Menu(prompt, Menu.yes_no(), skip=False).run() - if choice == 'yes': + if choice.value == Menu.yes(): exit(0) if SIG_TRIGGER is False: sys.stdin.read() + SIG_TRIGGER = False signal.signal(signal.SIGINT, sig_handler) diff --git a/examples/guided.py b/examples/guided.py index b653ea2a..f104b7e3 100644 --- a/examples/guided.py +++ b/examples/guided.py @@ -45,9 +45,8 @@ def ask_user_questions(): # Set which region to download packages from during the installation global_menu.enable('mirror-region') - if archinstall.arguments.get('advanced', False): - global_menu.enable('sys-language', True) - global_menu.enable('sys-encoding', True) + global_menu.enable('sys-language') + global_menu.enable('sys-encoding') # Ask which harddrives/block-devices we will install to # and convert them into archinstall.BlockDevice() objects. diff --git a/examples/swiss.py b/examples/swiss.py index 6d357191..9c0d469a 100644 --- a/examples/swiss.py +++ b/examples/swiss.py @@ -161,7 +161,7 @@ class SetupMenu(archinstall.GeneralMenu): self.set_option('archinstall-language', archinstall.Selector( _('Select Archinstall language'), - lambda x: self._select_archinstall_language('English'), + lambda x: self._select_archinstall_language(x), default='English', enabled=True)) self.set_option('ntp', diff --git a/profiles/desktop.py b/profiles/desktop.py index eaece9f5..e94d3505 100644 --- a/profiles/desktop.py +++ b/profiles/desktop.py @@ -1,6 +1,12 @@ # A desktop environment selector. +from typing import Any, TYPE_CHECKING + import archinstall -from archinstall import log +from archinstall import log, Menu +from archinstall.lib.menu.menu import MenuSelectionType + +if TYPE_CHECKING: + _: Any is_top_level_profile = True @@ -46,23 +52,26 @@ def _prep_function(*args, **kwargs) -> bool: other code in this stage. So it's a safe way to ask the user for more input before any other installer steps start. """ - desktop = archinstall.Menu(str(_('Select your desired desktop environment')), __supported__).run() + choice = Menu(str(_('Select your desired desktop environment')), __supported__).run() + + if choice.type_ != MenuSelectionType.Selection: + return False - if desktop: + if choice.value: # Temporarily store the selected desktop profile # in a session-safe location, since this module will get reloaded # the next time it gets executed. if not archinstall.storage.get('_desktop_profile', None): - archinstall.storage['_desktop_profile'] = desktop + archinstall.storage['_desktop_profile'] = choice.value if not archinstall.arguments.get('desktop-environment', None): - archinstall.arguments['desktop-environment'] = desktop - profile = archinstall.Profile(None, desktop) + archinstall.arguments['desktop-environment'] = choice.value + profile = archinstall.Profile(None, choice.value) # Loading the instructions with a custom namespace, ensures that a __name__ comparison is never triggered. - with profile.load_instructions(namespace=f"{desktop}.py") as imported: + with profile.load_instructions(namespace=f"{choice.value}.py") as imported: if hasattr(imported, '_prep_function'): return imported._prep_function() else: - log(f"Deprecated (??): {desktop} profile has no _prep_function() anymore") + log(f"Deprecated (??): {choice.value} profile has no _prep_function() anymore") exit(1) return False diff --git a/profiles/i3.py b/profiles/i3.py index 3283848e..37029a02 100644 --- a/profiles/i3.py +++ b/profiles/i3.py @@ -1,6 +1,8 @@ # Common package for i3, lets user select which i3 configuration they want. import archinstall +from archinstall import Menu +from archinstall.lib.menu.menu import MenuSelectionType is_top_level_profile = False @@ -27,13 +29,16 @@ def _prep_function(*args, **kwargs): supported_configurations = ['i3-wm', 'i3-gaps'] - desktop = archinstall.Menu('Select your desired configuration', supported_configurations).run() + choice = Menu('Select your desired configuration', supported_configurations).run() - if desktop: + if choice.type_ != MenuSelectionType.Selection: + return False + + if choice.value: # Temporarily store the selected desktop profile # in a session-safe location, since this module will get reloaded # the next time it gets executed. - archinstall.storage['_i3_configuration'] = desktop + archinstall.storage['_i3_configuration'] = choice.value # i3 requires a functioning Xorg installation. profile = archinstall.Profile(None, 'xorg') @@ -43,6 +48,8 @@ def _prep_function(*args, **kwargs): else: print('Deprecated (??): xorg profile has no _prep_function() anymore') + return False + if __name__ == 'i3': """ diff --git a/profiles/minimal.py b/profiles/minimal.py index 3b161511..a412aa81 100644 --- a/profiles/minimal.py +++ b/profiles/minimal.py @@ -1,4 +1,5 @@ # Used to do a minimal install +import archinstall is_top_level_profile = True @@ -12,6 +13,7 @@ def _prep_function(*args, **kwargs): we don't need to do anything special here, but it needs to exist and return True. """ + archinstall.storage['profile_minimal'] = True return True # Do nothing and just return True diff --git a/profiles/server.py b/profiles/server.py index 91ac7cf2..21681c2f 100644 --- a/profiles/server.py +++ b/profiles/server.py @@ -1,8 +1,14 @@ # Used to select various server application profiles on top of a minimal installation. import logging +from typing import Any, TYPE_CHECKING import archinstall +from archinstall import Menu +from archinstall.lib.menu.menu import MenuSelectionType + +if TYPE_CHECKING: + _: Any is_top_level_profile = True @@ -26,15 +32,18 @@ def _prep_function(*args, **kwargs): Magic function called by the importing installer before continuing any further. """ - servers = archinstall.Menu(str(_( + choice = Menu(str(_( 'Choose which servers to install, if none then a minimal installation wil be done')), available_servers, - preset_values=archinstall.storage.get('_selected_servers', []), + preset_values=kwargs['servers'], multi=True ).run() - if servers: - archinstall.storage['_selected_servers'] = servers + if choice.type_ != MenuSelectionType.Selection: + return False + + if choice.value: + archinstall.storage['_selected_servers'] = choice.value return True return False diff --git a/profiles/sway.py b/profiles/sway.py index 0819db95..b7266da3 100644 --- a/profiles/sway.py +++ b/profiles/sway.py @@ -23,8 +23,9 @@ def _check_driver() -> bool: if packages and "nvidia" in packages: prompt = 'The proprietary Nvidia driver is not supported by Sway. It is likely that you will run into issues, are you okay with that?' - choice = Menu(prompt, Menu.yes_no(), default_option=Menu.no()).run() - if choice == Menu.no(): + choice = Menu(prompt, Menu.yes_no(), default_option=Menu.no(), skip=False).run() + + if choice.value == Menu.no(): return False return True -- cgit v1.2.3-70-g09d2 From f80144e7c709013184c7a5536ac2ae9487af690f Mon Sep 17 00:00:00 2001 From: Daniel Girtler Date: Wed, 11 May 2022 00:20:53 +1000 Subject: Fixes #1048 and translation updates (#1156) * Remove comments from translation files * Add german translations Co-authored-by: Daniel Girtler --- archinstall/lib/menu/list_manager.py | 8 +- archinstall/lib/menu/selection_menu.py | 5 +- archinstall/lib/translation.py | 26 +- archinstall/lib/user_interaction/general_conf.py | 2 +- archinstall/locales/base.pot | 673 ++------------- archinstall/locales/de/LC_MESSAGES/base.mo | Bin 14323 -> 24066 bytes archinstall/locales/de/LC_MESSAGES/base.po | 467 +++++----- archinstall/locales/en/LC_MESSAGES/base.po | 327 +++---- archinstall/locales/es/LC_MESSAGES/base.mo | Bin 19267 -> 19044 bytes archinstall/locales/es/LC_MESSAGES/base.po | 628 ++++---------- archinstall/locales/fr/LC_MESSAGES/base.mo | Bin 19981 -> 23395 bytes archinstall/locales/fr/LC_MESSAGES/base.po | 945 ++++----------------- archinstall/locales/locales_generator.sh | 4 +- archinstall/locales/nl/LC_MESSAGES/base.mo | Bin 18826 -> 18594 bytes archinstall/locales/nl/LC_MESSAGES/base.po | 808 +++++------------- archinstall/locales/pl/LC_MESSAGES/base.mo | Bin 19258 -> 19034 bytes archinstall/locales/pl/LC_MESSAGES/base.po | 359 ++++---- archinstall/locales/pt/LC_MESSAGES/base.mo | Bin 19227 -> 18996 bytes archinstall/locales/pt/LC_MESSAGES/base.po | 558 +++++------- archinstall/locales/ru/LC_MESSAGES/base.mo | Bin 30101 -> 29871 bytes archinstall/locales/ru/LC_MESSAGES/base.po | 931 ++++---------------- archinstall/locales/sv/LC_MESSAGES/base.po | 341 ++++---- archinstall/locales/ur/LC_MESSAGES/base.mo | Bin 0 -> 21961 bytes archinstall/locales/ur/LC_MESSAGES/base.po | 762 +++++++++++++++++ .../locales/ur_issue_1048/LC_MESSAGES/base.mo | Bin 22244 -> 0 bytes .../locales/ur_issue_1048/LC_MESSAGES/base.po | 783 ----------------- 26 files changed, 2429 insertions(+), 5198 deletions(-) create mode 100644 archinstall/locales/ur/LC_MESSAGES/base.mo create mode 100644 archinstall/locales/ur/LC_MESSAGES/base.po delete mode 100644 archinstall/locales/ur_issue_1048/LC_MESSAGES/base.mo delete mode 100644 archinstall/locales/ur_issue_1048/LC_MESSAGES/base.po (limited to 'archinstall/lib') diff --git a/archinstall/lib/menu/list_manager.py b/archinstall/lib/menu/list_manager.py index f3927e6f..4c7e9907 100644 --- a/archinstall/lib/menu/list_manager.py +++ b/archinstall/lib/menu/list_manager.py @@ -260,14 +260,14 @@ class ListManager: self._data.append(self.target) if self.action == str(_('Copy')): while True: - target = TextInput(_('Copy to :'),self.target).run() + target = TextInput(_('Copy to: '),self.target).run() if target != self.target: self._data.append(self.target) break elif self.action == str(_('Edit')): tgt = self.target idx = self._data.index(self.target) - result = TextInput(_('Edite :'),tgt).run() + result = TextInput(_('Edit: '),tgt).run() self._data[idx] = result elif self.action == str(_('Delete')): del self._data[self._data.index(self.target)] @@ -279,7 +279,7 @@ class ListManager: origkey = None origval = None if self.action == str(_('Add')): - key = TextInput(_('Key :'),None).run() + key = TextInput(_('Key: '),None).run() value = TextInput(_('Value :'),None).run() self._data[key] = value if self.action == str(_('Copy')): @@ -289,7 +289,7 @@ class ListManager: self._data[key] = origval break elif self.action == str(_('Edit')): - value = TextInput(_(f'Edit {origkey} :'),origval).run() + value = TextInput(_('Edit {}: ').format(origkey), origval).run() self._data[origkey] = value elif self.action == str(_('Delete')): del self._data[origkey] diff --git a/archinstall/lib/menu/selection_menu.py b/archinstall/lib/menu/selection_menu.py index 54b1441b..123ddf7e 100644 --- a/archinstall/lib/menu/selection_menu.py +++ b/archinstall/lib/menu/selection_menu.py @@ -17,7 +17,7 @@ def select_archinstall_language(preset_value: str) -> Optional[str]: """ copied from user_interaction/general_conf.py as a temporary measure """ - languages = Translation.get_all_names() + languages = Translation.get_available_lang() language = Menu(_('Select Archinstall language'), languages, preset_values=preset_value).run() return language.value @@ -306,7 +306,8 @@ class GeneralMenu: cursor_index=cursor_pos, preview_command=self._preview_display, preview_size=self.preview_size, - skip_empty_entries=True + skip_empty_entries=True, + skip=False ).run() if selection.type_ == MenuSelectionType.Selection: diff --git a/archinstall/lib/translation.py b/archinstall/lib/translation.py index 74ffd691..c9dd065a 100644 --- a/archinstall/lib/translation.py +++ b/archinstall/lib/translation.py @@ -5,14 +5,14 @@ import os import gettext from pathlib import Path -from typing import List, Dict, Any, TYPE_CHECKING +from typing import List, Dict, Any, TYPE_CHECKING, Tuple from .exceptions import TranslationError if TYPE_CHECKING: _: Any -class Languages: +class LanguageDefinitions: def __init__(self): self._mappings = self._get_language_mappings() @@ -70,11 +70,12 @@ class Translation: def __init__(self, locales_dir): self._languages = {} - for name in self.get_all_names(): + for names in self._get_translation_lang(): try: - self._languages[name] = gettext.translation('base', localedir=locales_dir, languages=[name]) + print(names) + self._languages[names[0]] = gettext.translation('base', localedir=locales_dir, languages=names) except FileNotFoundError as error: - raise TranslationError(f"Could not locate language file for '{name}': {error}") + raise TranslationError(f"Could not locate language file for '{names}': {error}") def activate(self, name): if language := self._languages.get(name, None): @@ -94,10 +95,19 @@ class Translation: return locales_dir @classmethod - def get_all_names(cls) -> List[str]: + def _defined_languages(cls) -> List[str]: locales_dir = cls.get_locales_dir() filenames = os.listdir(locales_dir) - def_languages = filter(lambda x: len(x) == 2, filenames) + return list(filter(lambda x: len(x) == 2, filenames)) - languages = Languages() + @classmethod + def _get_translation_lang(cls) -> List[Tuple[str, str]]: + def_languages = cls._defined_languages() + languages = LanguageDefinitions() + return [(languages.get_language(lang), lang) for lang in def_languages] + + @classmethod + def get_available_lang(cls) -> List[str]: + def_languages = cls._defined_languages() + languages = LanguageDefinitions() return [languages.get_language(lang) for lang in def_languages] diff --git a/archinstall/lib/user_interaction/general_conf.py b/archinstall/lib/user_interaction/general_conf.py index af996331..43afef8d 100644 --- a/archinstall/lib/user_interaction/general_conf.py +++ b/archinstall/lib/user_interaction/general_conf.py @@ -119,7 +119,7 @@ def select_mirror_regions(preset_values: Dict[str, Any] = {}) -> Dict[str, Any]: def select_archinstall_language(default='English'): - languages = Translation.get_all_names() + languages = Translation.get_available_lang() language = Menu(_('Select Archinstall language'), languages, default_option=default).run() return language diff --git a/archinstall/locales/base.pot b/archinstall/locales/base.pot index 4be7b458..d82b7ccd 100644 --- a/archinstall/locales/base.pot +++ b/archinstall/locales/base.pot @@ -4,627 +4,293 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: lib/installer.py:144 lib/installer.py:152 msgid "[!] A log file has been created here: {} {}" msgstr "" -#: lib/installer.py:145 lib/installer.py:153 lib/installer.py:155 msgid "" " Please submit this issue (and file) to https://github.com/archlinux/" "archinstall/issues" msgstr "" -#: lib/user_interaction.py:83 lib/user_interaction/utils.py:86 -#: lib/user_interaction/utils.py:83 msgid "Do you really want to abort?" msgstr "" -#: lib/user_interaction.py:101 lib/user_interaction.py:104 -#: lib/user_interaction/utils.py:53 lib/user_interaction/utils.py:50 msgid "And one more time for verification: " msgstr "" -#: lib/user_interaction.py:272 lib/user_interaction.py:275 -#: lib/user_interaction/system_conf.py:142 -#: lib/user_interaction/system_conf.py:141 msgid "Would you like to use swap on zram?" msgstr "" -#: lib/user_interaction.py:285 lib/user_interaction.py:288 -#: lib/user_interaction/general_conf.py:33 msgid "Desired hostname for the installation: " msgstr "" -#: lib/user_interaction.py:290 lib/user_interaction.py:293 msgid "Username for required superuser with sudo privileges: " msgstr "" -#: lib/user_interaction.py:310 lib/user_interaction.py:313 -#: lib/user_interaction/manage_users_conf.py:167 -#: lib/user_interaction/manage_users_conf.py:164 msgid "Any additional users to install (leave blank for no users): " msgstr "" -#: lib/user_interaction.py:324 lib/user_interaction.py:327 msgid "Should this user be a superuser (sudoer)?" msgstr "" -#: lib/user_interaction.py:340 lib/user_interaction.py:343 -#: lib/user_interaction.py:346 lib/user_interaction/general_conf.py:41 msgid "Select a timezone" msgstr "" -#: lib/user_interaction.py:354 lib/user_interaction.py:357 -#: lib/user_interaction.py:360 lib/user_interaction.py:359 -#: lib/user_interaction/system_conf.py:115 -#: lib/user_interaction/system_conf.py:114 msgid "Would you like to use GRUB as a bootloader instead of systemd-boot?" msgstr "" -#: lib/user_interaction.py:364 lib/user_interaction.py:367 -#: lib/user_interaction.py:370 lib/user_interaction.py:369 -#: lib/user_interaction/system_conf.py:125 -#: lib/user_interaction/system_conf.py:124 msgid "Choose a bootloader" msgstr "" -#: lib/user_interaction.py:380 lib/user_interaction.py:383 -#: lib/user_interaction.py:386 lib/user_interaction.py:385 -#: lib/user_interaction/general_conf.py:53 msgid "Choose an audio server" msgstr "" -#: lib/user_interaction.py:391 lib/user_interaction.py:394 -#: lib/user_interaction.py:397 lib/user_interaction.py:396 -#: lib/user_interaction/general_conf.py:138 msgid "" "Only packages such as base, base-devel, linux, linux-firmware, efibootmgr " "and optional profile packages are installed." msgstr "" -#: lib/user_interaction.py:392 lib/user_interaction.py:395 -#: lib/user_interaction.py:398 lib/user_interaction.py:397 -#: lib/user_interaction/general_conf.py:139 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:396 lib/user_interaction.py:399 -#: lib/user_interaction.py:402 lib/user_interaction.py:401 -#: lib/user_interaction/general_conf.py:143 msgid "" "Write additional packages to install (space separated, leave blank to skip): " msgstr "" -#: lib/user_interaction.py:419 lib/user_interaction.py:422 -#: lib/user_interaction.py:425 lib/user_interaction.py:424 -#: lib/user_interaction/network_conf.py:25 -#: lib/user_interaction/network_conf.py:125 msgid "Copy ISO network configuration to installation" msgstr "" -#: lib/user_interaction.py:420 lib/user_interaction.py:423 -#: lib/user_interaction.py:426 lib/user_interaction.py:425 -#: lib/user_interaction/network_conf.py:26 -#: lib/user_interaction/network_conf.py:126 msgid "" "Use NetworkManager (necessary to configure internet graphically in GNOME and " "KDE)" msgstr "" -#: lib/user_interaction.py:428 lib/user_interaction.py:431 -#: lib/user_interaction.py:434 lib/user_interaction.py:433 -#: lib/user_interaction/network_conf.py:43 -#: lib/user_interaction/network_conf.py:139 msgid "Select one network interface to configure" msgstr "" -#: lib/user_interaction.py:441 lib/user_interaction.py:444 -#: lib/user_interaction.py:447 lib/user_interaction.py:446 -#: lib/user_interaction/network_conf.py:70 -#: lib/user_interaction/network_conf.py:77 msgid "" "Select which mode to configure for \"{}\" or skip to use default mode \"{}\"" msgstr "" -#: lib/user_interaction.py:446 lib/user_interaction.py:449 -#: lib/user_interaction.py:452 lib/user_interaction.py:451 -#: lib/user_interaction/network_conf.py:75 -#: lib/user_interaction/network_conf.py:82 msgid "Enter the IP and subnet for {} (example: 192.168.0.5/24): " msgstr "" -#: lib/user_interaction.py:461 lib/user_interaction.py:464 -#: lib/user_interaction.py:467 lib/user_interaction.py:466 -#: lib/user_interaction/network_conf.py:86 -#: lib/user_interaction/network_conf.py:93 msgid "Enter your gateway (router) IP address or leave blank for none: " msgstr "" -#: lib/user_interaction.py:476 lib/user_interaction.py:479 -#: lib/user_interaction.py:482 lib/user_interaction.py:481 -#: lib/user_interaction/network_conf.py:102 -#: lib/user_interaction/network_conf.py:108 msgid "Enter your DNS servers (space separated, blank for none): " msgstr "" -#: lib/user_interaction.py:510 lib/user_interaction.py:513 -#: lib/user_interaction.py:516 lib/user_interaction.py:515 -#: lib/user_interaction/disk_conf.py:23 msgid "Select which filesystem your main partition should use" msgstr "" -#: lib/user_interaction.py:556 lib/user_interaction.py:559 -#: lib/user_interaction.py:562 lib/user_interaction.py:561 -#: lib/user_interaction/partitioning_conf.py:63 -#: lib/user_interaction/partitioning_conf.py:64 msgid "Current partition layout" msgstr "" -#: lib/user_interaction.py:607 lib/user_interaction.py:614 -#: lib/user_interaction.py:617 lib/user_interaction.py:620 -#: lib/user_interaction.py:619 lib/user_interaction/partitioning_conf.py:145 -#: lib/user_interaction/partitioning_conf.py:146 -#: lib/user_interaction/partitioning_conf.py:163 msgid "" "Select what to do with\n" "{}" msgstr "" -#: lib/user_interaction.py:624 lib/user_interaction.py:709 -#: lib/user_interaction.py:631 lib/user_interaction.py:716 -#: lib/user_interaction.py:634 lib/user_interaction.py:719 -#: lib/user_interaction.py:637 lib/user_interaction.py:722 -#: lib/user_interaction.py:636 lib/user_interaction.py:721 -#: lib/user_interaction/partitioning_conf.py:162 -#: lib/user_interaction/partitioning_conf.py:255 -#: lib/user_interaction/partitioning_conf.py:165 -#: lib/user_interaction/partitioning_conf.py:260 -#: lib/user_interaction/partitioning_conf.py:182 -#: lib/user_interaction/partitioning_conf.py:293 msgid "Enter a desired filesystem type for the partition" msgstr "" -#: lib/user_interaction.py:626 lib/user_interaction.py:633 -#: lib/user_interaction.py:636 lib/user_interaction.py:639 -#: lib/user_interaction.py:638 lib/user_interaction/partitioning_conf.py:164 -#: lib/user_interaction/partitioning_conf.py:167 -#: lib/user_interaction/partitioning_conf.py:187 msgid "Enter the start sector (percentage or block number, default: {}): " msgstr "" -#: lib/user_interaction.py:635 lib/user_interaction.py:642 -#: lib/user_interaction.py:645 lib/user_interaction.py:648 -#: lib/user_interaction.py:647 lib/user_interaction/partitioning_conf.py:174 -#: lib/user_interaction/partitioning_conf.py:177 -#: lib/user_interaction/partitioning_conf.py:197 msgid "" "Enter the end sector of the partition (percentage or block number, ex: {}): " msgstr "" -#: lib/user_interaction.py:661 lib/user_interaction.py:668 -#: lib/user_interaction.py:671 lib/user_interaction.py:674 -#: lib/user_interaction.py:673 lib/user_interaction/partitioning_conf.py:203 -#: lib/user_interaction/partitioning_conf.py:208 -#: lib/user_interaction/partitioning_conf.py:228 msgid "{} contains queued partitions, this will remove those, are you sure?" msgstr "" -#: lib/user_interaction.py:674 lib/user_interaction.py:681 -#: lib/user_interaction.py:684 lib/user_interaction.py:687 -#: lib/user_interaction.py:686 lib/user_interaction/partitioning_conf.py:216 -#: lib/user_interaction/partitioning_conf.py:221 -#: lib/user_interaction/partitioning_conf.py:242 msgid "" "{}\n" "\n" "Select by index which partitions to delete" msgstr "" -#: lib/user_interaction.py:682 lib/user_interaction.py:689 -#: lib/user_interaction.py:692 lib/user_interaction.py:695 -#: lib/user_interaction.py:694 lib/user_interaction/partitioning_conf.py:226 -#: lib/user_interaction/partitioning_conf.py:231 -#: lib/user_interaction/partitioning_conf.py:264 msgid "" "{}\n" "\n" "Select by index which partition to mount where" msgstr "" -#: lib/user_interaction.py:686 lib/user_interaction.py:693 -#: lib/user_interaction.py:696 lib/user_interaction.py:699 -#: lib/user_interaction.py:698 lib/user_interaction/partitioning_conf.py:231 -#: lib/user_interaction/partitioning_conf.py:236 -#: lib/user_interaction/partitioning_conf.py:269 msgid "" " * Partition mount-points are relative to inside the installation, the boot " "would be /boot as an example." msgstr "" -#: lib/user_interaction.py:687 lib/user_interaction.py:694 -#: lib/user_interaction.py:697 lib/user_interaction.py:700 -#: lib/user_interaction.py:699 lib/user_interaction/partitioning_conf.py:233 -#: lib/user_interaction/partitioning_conf.py:238 -#: lib/user_interaction/partitioning_conf.py:271 msgid "Select where to mount partition (leave blank to remove mountpoint): " msgstr "" -#: lib/user_interaction.py:698 lib/user_interaction.py:705 -#: lib/user_interaction.py:708 lib/user_interaction.py:711 -#: lib/user_interaction.py:710 lib/user_interaction/partitioning_conf.py:244 -#: lib/user_interaction/partitioning_conf.py:249 -#: lib/user_interaction/partitioning_conf.py:282 msgid "" "{}\n" "\n" "Select which partition to mask for formatting" msgstr "" -#: lib/user_interaction.py:717 lib/user_interaction.py:724 -#: lib/user_interaction.py:727 lib/user_interaction.py:730 -#: lib/user_interaction.py:729 lib/user_interaction/partitioning_conf.py:265 -#: lib/user_interaction/partitioning_conf.py:270 -#: lib/user_interaction/partitioning_conf.py:302 msgid "" "{}\n" "\n" "Select which partition to mark as encrypted" msgstr "" -#: lib/user_interaction.py:725 lib/user_interaction.py:732 -#: lib/user_interaction.py:735 lib/user_interaction.py:738 -#: lib/user_interaction.py:737 lib/user_interaction/partitioning_conf.py:274 -#: lib/user_interaction/partitioning_conf.py:279 -#: lib/user_interaction/partitioning_conf.py:250 -#: lib/user_interaction/partitioning_conf.py:311 msgid "" "{}\n" "\n" "Select which partition to mark as bootable" msgstr "" -#: lib/user_interaction.py:732 lib/user_interaction.py:739 -#: lib/user_interaction.py:742 lib/user_interaction.py:745 -#: lib/user_interaction.py:744 lib/user_interaction/partitioning_conf.py:282 -#: lib/user_interaction/partitioning_conf.py:287 -#: lib/user_interaction/partitioning_conf.py:319 msgid "" "{}\n" "\n" "Select which partition to set a filesystem on" msgstr "" -#: lib/user_interaction.py:739 lib/user_interaction.py:746 -#: lib/user_interaction.py:749 lib/user_interaction.py:752 -#: lib/user_interaction.py:751 lib/user_interaction/partitioning_conf.py:289 -#: lib/user_interaction/partitioning_conf.py:294 -#: lib/user_interaction/partitioning_conf.py:326 msgid "Enter a desired filesystem type for the partition: " msgstr "" -#: lib/user_interaction.py:760 lib/menu/selection_menu.py:141 -#: lib/user_interaction.py:767 lib/menu/selection_menu.py:139 -#: lib/menu/selection_menu.py:143 lib/user_interaction.py:770 -#: lib/user_interaction.py:773 lib/user_interaction.py:772 -#: lib/menu/selection_menu.py:407 lib/menu/selection_menu.py:415 -#: lib/menu/selection_menu.py:17 lib/user_interaction/general_conf.py:105 -#: lib/user_interaction/global_menu.py:43 lib/menu/selection_menu.py:53 -#: lib/menu/selection_menu.py:463 lib/menu/global_menu.py:43 -#: lib/menu/selection_menu.py:20 -#: lib/user_interaction/general_conf.py:105 msgid "Select Archinstall language" msgstr "" -#: lib/user_interaction.py:765 lib/user_interaction.py:772 -#: lib/user_interaction.py:775 lib/user_interaction.py:778 -#: lib/user_interaction.py:777 lib/user_interaction/disk_conf.py:40 msgid "Wipe all selected drives and use a best-effort default partition layout" msgstr "" -#: lib/user_interaction.py:766 lib/user_interaction.py:773 -#: lib/user_interaction.py:776 lib/user_interaction.py:779 -#: lib/user_interaction.py:778 lib/user_interaction/disk_conf.py:41 msgid "" "Select what to do with each individual drive (followed by partition usage)" msgstr "" -#: lib/user_interaction.py:769 lib/user_interaction.py:770 -#: lib/user_interaction.py:777 lib/user_interaction.py:780 -#: lib/user_interaction.py:783 lib/user_interaction.py:782 -#: lib/user_interaction/disk_conf.py:45 lib/user_interaction/disk_conf.py:44 msgid "Select what you wish to do with the selected block devices" msgstr "" -#: lib/user_interaction.py:822 lib/user_interaction.py:823 -#: lib/user_interaction.py:830 lib/user_interaction.py:833 -#: lib/user_interaction.py:836 lib/user_interaction.py:835 -#: lib/user_interaction/general_conf.py:126 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:847 -#: lib/user_interaction.py:854 lib/user_interaction.py:857 -#: lib/user_interaction.py:860 lib/user_interaction.py:859 -#: lib/user_interaction/general_conf.py:71 msgid "Select Keyboard layout" msgstr "" -#: lib/user_interaction.py:861 lib/user_interaction.py:862 -#: lib/user_interaction.py:869 lib/user_interaction.py:872 -#: lib/user_interaction.py:875 lib/user_interaction.py:874 -#: lib/user_interaction/general_conf.py:92 msgid "Select one of the regions to download packages from" msgstr "" -#: lib/user_interaction.py:883 lib/user_interaction.py:884 -#: lib/user_interaction.py:891 lib/user_interaction.py:894 -#: lib/user_interaction.py:897 lib/user_interaction.py:896 -#: lib/user_interaction/system_conf.py:52 msgid "Select one or more hard drives to use and configure" msgstr "" -#: lib/user_interaction.py:910 lib/user_interaction.py:911 -#: lib/user_interaction.py:918 lib/user_interaction.py:921 -#: lib/user_interaction.py:924 lib/user_interaction.py:923 -#: lib/user_interaction/system_conf.py:80 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:913 -#: lib/user_interaction.py:920 lib/user_interaction.py:923 -#: lib/user_interaction.py:926 lib/user_interaction.py:925 -#: lib/user_interaction/system_conf.py:84 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:915 -#: lib/user_interaction.py:922 lib/user_interaction.py:925 -#: lib/user_interaction.py:928 lib/user_interaction.py:927 -#: lib/user_interaction/system_conf.py:88 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:918 -#: lib/user_interaction.py:925 lib/user_interaction.py:928 -#: lib/user_interaction.py:931 lib/user_interaction.py:930 -#: lib/user_interaction/system_conf.py:92 -#: lib/user_interaction/system_conf.py:91 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:922 -#: lib/user_interaction.py:929 lib/user_interaction.py:932 -#: lib/user_interaction.py:935 lib/user_interaction.py:934 -#: lib/user_interaction/system_conf.py:96 -#: lib/user_interaction/system_conf.py:95 msgid "All open-source (default)" msgstr "" -#: lib/user_interaction.py:940 lib/user_interaction.py:941 -#: lib/user_interaction.py:948 lib/user_interaction.py:951 -#: lib/user_interaction.py:954 lib/user_interaction.py:953 -#: lib/user_interaction/system_conf.py:28 msgid "Choose which kernels to use or leave blank for default \"{}\"" msgstr "" -#: lib/user_interaction.py:954 lib/user_interaction.py:955 -#: lib/user_interaction.py:962 lib/user_interaction.py:965 -#: lib/user_interaction.py:968 lib/user_interaction.py:967 -#: lib/user_interaction/locale_conf.py:16 msgid "Choose which locale language to use" msgstr "" -#: lib/user_interaction.py:968 lib/user_interaction.py:969 -#: lib/user_interaction.py:976 lib/user_interaction.py:979 -#: lib/user_interaction.py:982 lib/user_interaction.py:981 -#: lib/user_interaction/locale_conf.py:29 msgid "Choose which locale encoding to use" msgstr "" -#: lib/user_interaction.py:1009 lib/user_interaction.py:1010 -#: lib/user_interaction.py:1017 lib/user_interaction.py:1020 -#: lib/user_interaction.py:1023 lib/user_interaction.py:1022 -#: lib/user_interaction/backwards_compatible_conf.py:49 msgid "Select one of the values shown below: " msgstr "" -#: lib/user_interaction.py:1050 lib/user_interaction.py:1051 -#: lib/user_interaction.py:1058 lib/user_interaction.py:1061 -#: lib/user_interaction.py:1064 lib/user_interaction.py:1063 -#: lib/user_interaction/backwards_compatible_conf.py:88 msgid "Select one or more of the options below: " msgstr "" -#: lib/disk/filesystem.py:86 lib/disk/filesystem.py:87 -#: lib/disk/filesystem.py:85 msgid "Adding partition...." msgstr "" -#: lib/disk/filesystem.py:139 lib/disk/filesystem.py:141 -#: lib/disk/filesystem.py:142 lib/disk/filesystem.py:140 msgid "" "You need to enter a valid fs-type in order to continue. See `man parted` for " "valid fs-type's." msgstr "" -#: lib/profiles.py:89 lib/profiles.py:90 msgid "Error: Listing profiles on URL \"{}\" resulted in:" msgstr "" -#: lib/profiles.py:92 lib/profiles.py:93 msgid "Error: Could not decode \"{}\" result as JSON:" msgstr "" -#: lib/menu/selection_menu.py:146 lib/menu/selection_menu.py:144 -#: lib/menu/selection_menu.py:148 lib/menu/selection_menu.py:412 -#: lib/menu/selection_menu.py:420 lib/user_interaction/global_menu.py:48 -#: lib/menu/selection_menu.py:468 lib/menu/global_menu.py:48 -#: lib/menu/global_menu.py:47 msgid "Select keyboard layout" msgstr "" -#: lib/menu/selection_menu.py:149 lib/menu/selection_menu.py:147 -#: lib/menu/selection_menu.py:151 lib/menu/selection_menu.py:415 -#: lib/menu/selection_menu.py:423 lib/user_interaction/global_menu.py:51 -#: lib/menu/selection_menu.py:471 lib/menu/global_menu.py:51 -#: lib/menu/global_menu.py:50 msgid "Select mirror region" msgstr "" -#: lib/menu/selection_menu.py:154 lib/menu/selection_menu.py:152 -#: lib/menu/selection_menu.py:156 lib/menu/selection_menu.py:420 -#: lib/menu/selection_menu.py:428 lib/user_interaction/global_menu.py:56 -#: lib/menu/selection_menu.py:476 lib/menu/global_menu.py:56 -#: lib/menu/global_menu.py:55 msgid "Select locale language" msgstr "" -#: lib/menu/selection_menu.py:156 lib/menu/selection_menu.py:154 -#: lib/menu/selection_menu.py:158 lib/menu/selection_menu.py:422 -#: lib/menu/selection_menu.py:430 lib/user_interaction/global_menu.py:58 -#: lib/menu/selection_menu.py:478 lib/menu/global_menu.py:58 -#: lib/menu/global_menu.py:57 msgid "Select locale encoding" msgstr "" -#: lib/menu/selection_menu.py:159 lib/menu/selection_menu.py:157 -#: lib/menu/selection_menu.py:161 lib/menu/selection_menu.py:425 -#: lib/menu/selection_menu.py:433 lib/user_interaction/global_menu.py:61 -#: lib/menu/selection_menu.py:481 lib/menu/global_menu.py:61 -#: lib/menu/global_menu.py:60 msgid "Select harddrives" msgstr "" -#: lib/menu/selection_menu.py:163 lib/menu/selection_menu.py:161 -#: lib/menu/selection_menu.py:165 lib/menu/selection_menu.py:429 -#: lib/menu/selection_menu.py:437 lib/user_interaction/global_menu.py:65 -#: lib/menu/selection_menu.py:485 lib/menu/global_menu.py:65 -#: lib/menu/global_menu.py:64 msgid "Select disk layout" msgstr "" -#: lib/menu/selection_menu.py:171 lib/menu/selection_menu.py:169 -#: lib/menu/selection_menu.py:173 lib/menu/selection_menu.py:437 -#: lib/menu/selection_menu.py:445 lib/user_interaction/global_menu.py:73 -#: lib/menu/selection_menu.py:493 lib/menu/global_menu.py:73 -#: lib/menu/global_menu.py:72 msgid "Set encryption password" msgstr "" -#: lib/menu/selection_menu.py:177 lib/menu/selection_menu.py:175 -#: lib/menu/selection_menu.py:179 lib/menu/selection_menu.py:443 -#: lib/menu/selection_menu.py:451 lib/user_interaction/global_menu.py:79 -#: lib/menu/selection_menu.py:499 lib/menu/global_menu.py:79 -#: lib/menu/global_menu.py:78 msgid "Use swap" msgstr "" -#: lib/menu/selection_menu.py:182 lib/menu/selection_menu.py:180 -#: lib/menu/selection_menu.py:184 lib/menu/selection_menu.py:448 -#: lib/menu/selection_menu.py:456 lib/user_interaction/global_menu.py:84 -#: lib/menu/selection_menu.py:504 lib/menu/global_menu.py:84 -#: lib/menu/global_menu.py:83 msgid "Select bootloader" msgstr "" -#: lib/menu/selection_menu.py:188 lib/menu/selection_menu.py:186 -#: lib/menu/selection_menu.py:190 lib/menu/selection_menu.py:454 -#: lib/menu/selection_menu.py:462 lib/user_interaction/global_menu.py:95 -#: lib/menu/selection_menu.py:515 lib/menu/global_menu.py:95 -#: lib/menu/global_menu.py:94 msgid "Set root password" msgstr "" -#: lib/menu/selection_menu.py:193 lib/menu/selection_menu.py:191 -#: lib/menu/selection_menu.py:195 lib/menu/selection_menu.py:459 -#: lib/menu/selection_menu.py:467 lib/user_interaction/global_menu.py:100 -#: lib/menu/selection_menu.py:520 lib/menu/global_menu.py:100 -#: lib/menu/global_menu.py:99 msgid "Specify superuser account" msgstr "" -#: lib/menu/selection_menu.py:199 lib/menu/selection_menu.py:197 -#: lib/menu/selection_menu.py:201 lib/menu/selection_menu.py:465 -#: lib/menu/selection_menu.py:473 lib/user_interaction/global_menu.py:107 -#: lib/menu/selection_menu.py:528 lib/menu/global_menu.py:107 -#: lib/menu/global_menu.py:107 msgid "Specify user account" msgstr "" -#: lib/menu/selection_menu.py:205 lib/menu/selection_menu.py:203 -#: lib/menu/selection_menu.py:207 lib/menu/selection_menu.py:471 -#: lib/menu/selection_menu.py:479 lib/user_interaction/global_menu.py:114 -#: lib/menu/selection_menu.py:535 lib/menu/global_menu.py:114 -#: lib/menu/global_menu.py:114 msgid "Specify profile" msgstr "" -#: lib/menu/selection_menu.py:210 lib/menu/selection_menu.py:208 -#: lib/menu/selection_menu.py:212 lib/menu/selection_menu.py:476 -#: lib/menu/selection_menu.py:484 lib/user_interaction/global_menu.py:119 -#: lib/menu/selection_menu.py:540 lib/menu/global_menu.py:119 -#: lib/menu/global_menu.py:119 msgid "Select audio" msgstr "" -#: lib/menu/selection_menu.py:214 lib/menu/selection_menu.py:212 -#: lib/menu/selection_menu.py:216 lib/menu/selection_menu.py:480 -#: lib/menu/selection_menu.py:488 lib/user_interaction/global_menu.py:123 -#: lib/menu/selection_menu.py:544 lib/menu/global_menu.py:123 -#: lib/menu/global_menu.py:126 msgid "Select kernels" msgstr "" -#: lib/menu/selection_menu.py:219 lib/menu/selection_menu.py:217 -#: lib/menu/selection_menu.py:221 lib/menu/selection_menu.py:485 -#: lib/menu/selection_menu.py:493 lib/user_interaction/global_menu.py:128 -#: lib/menu/selection_menu.py:549 lib/menu/global_menu.py:128 -#: lib/menu/global_menu.py:131 msgid "Additional packages to install" msgstr "" -#: lib/menu/selection_menu.py:224 lib/menu/selection_menu.py:222 -#: lib/menu/selection_menu.py:226 lib/menu/selection_menu.py:490 -#: lib/menu/selection_menu.py:498 lib/user_interaction/global_menu.py:139 -#: lib/menu/selection_menu.py:560 lib/menu/global_menu.py:139 -#: lib/menu/global_menu.py:142 msgid "Configure network" msgstr "" -#: lib/menu/selection_menu.py:232 lib/menu/selection_menu.py:230 -#: lib/menu/selection_menu.py:234 lib/menu/selection_menu.py:498 -#: lib/menu/selection_menu.py:506 lib/user_interaction/global_menu.py:150 -#: lib/menu/selection_menu.py:571 lib/menu/global_menu.py:150 -#: lib/menu/global_menu.py:153 msgid "Set automatic time sync (NTP)" msgstr "" -#: lib/menu/selection_menu.py:310 lib/menu/selection_menu.py:308 -#: lib/menu/selection_menu.py:315 lib/menu/selection_menu.py:527 -#: lib/menu/selection_menu.py:535 lib/user_interaction/global_menu.py:187 -#: lib/menu/selection_menu.py:608 lib/menu/global_menu.py:187 -#: lib/menu/global_menu.py:190 msgid "Install ({} config(s) missing)" msgstr "" -#: lib/menu/selection_menu.py:373 lib/menu/selection_menu.py:371 -#: lib/menu/selection_menu.py:378 lib/menu/selection_menu.py:591 -#: lib/menu/selection_menu.py:599 lib/user_interaction/global_menu.py:249 -#: lib/menu/selection_menu.py:669 lib/menu/global_menu.py:249 -#: lib/menu/global_menu.py:260 msgid "" "You decided to skip harddrive selection\n" "and will use whatever drive-setup is mounted at {} (experimental)\n" @@ -632,632 +298,425 @@ msgid "" "Do you wish to continue?" msgstr "" -#: lib/disk/filesystem.py:97 lib/disk/filesystem.py:98 -#: lib/disk/filesystem.py:96 msgid "Re-using partition instance: {}" msgstr "" -#: lib/user_interaction.py:590 lib/user_interaction.py:593 -#: lib/user_interaction.py:596 lib/user_interaction.py:595 -#: lib/user_interaction/partitioning_conf.py:119 -#: lib/user_interaction/partitioning_conf.py:120 -#: lib/user_interaction/partitioning_conf.py:128 msgid "Create a new partition" msgstr "" -#: lib/user_interaction.py:592 lib/user_interaction.py:595 -#: lib/user_interaction.py:598 lib/user_interaction.py:597 -#: lib/user_interaction/partitioning_conf.py:121 -#: lib/user_interaction/partitioning_conf.py:122 -#: lib/user_interaction/partitioning_conf.py:130 msgid "Delete a partition" msgstr "" -#: lib/user_interaction.py:593 lib/user_interaction.py:596 -#: lib/user_interaction.py:599 lib/user_interaction.py:598 -#: lib/user_interaction/partitioning_conf.py:122 -#: lib/user_interaction/partitioning_conf.py:123 -#: lib/user_interaction/partitioning_conf.py:131 msgid "Clear/Delete all partitions" msgstr "" -#: lib/user_interaction.py:594 lib/user_interaction.py:597 -#: lib/user_interaction.py:600 lib/user_interaction.py:599 -#: lib/user_interaction/partitioning_conf.py:123 -#: lib/user_interaction/partitioning_conf.py:124 -#: lib/user_interaction/partitioning_conf.py:132 msgid "Assign mount-point for a partition" msgstr "" -#: lib/user_interaction.py:595 lib/user_interaction.py:598 -#: lib/user_interaction.py:601 lib/user_interaction.py:600 -#: lib/user_interaction/partitioning_conf.py:124 -#: lib/user_interaction/partitioning_conf.py:125 -#: lib/user_interaction/partitioning_conf.py:133 msgid "Mark/Unmark a partition to be formatted (wipes data)" msgstr "" -#: lib/user_interaction.py:596 lib/user_interaction.py:599 -#: lib/user_interaction.py:602 lib/user_interaction.py:601 -#: lib/user_interaction/partitioning_conf.py:125 -#: lib/user_interaction/partitioning_conf.py:126 -#: lib/user_interaction/partitioning_conf.py:134 msgid "Mark/Unmark a partition as encrypted" msgstr "" -#: lib/user_interaction.py:597 lib/user_interaction.py:600 -#: lib/user_interaction.py:603 lib/user_interaction.py:602 -#: lib/user_interaction/partitioning_conf.py:126 -#: lib/user_interaction/partitioning_conf.py:127 -#: lib/user_interaction/partitioning_conf.py:136 msgid "Mark/Unmark a partition as bootable (automatic for /boot)" msgstr "" -#: lib/user_interaction.py:598 lib/user_interaction.py:601 -#: lib/user_interaction.py:604 lib/user_interaction.py:603 -#: lib/user_interaction/partitioning_conf.py:127 -#: lib/user_interaction/partitioning_conf.py:128 -#: lib/user_interaction/partitioning_conf.py:137 msgid "Set desired filesystem for a partition" msgstr "" -#: lib/menu/selection_menu.py:239 lib/menu/selection_menu.py:237 -#: lib/menu/selection_menu.py:241 lib/menu/selection_menu.py:270 -#: lib/menu/selection_menu.py:507 lib/menu/selection_menu.py:515 -#: lib/user_interaction/global_menu.py:167 lib/menu/selection_menu.py:588 -#: lib/menu/global_menu.py:167 lib/menu/global_menu.py:170 msgid "Abort" msgstr "" -#: lib/menu/selection_menu.py:183 lib/menu/selection_menu.py:187 -#: lib/menu/selection_menu.py:451 lib/menu/selection_menu.py:459 -#: lib/user_interaction/global_menu.py:89 lib/menu/selection_menu.py:509 -#: lib/menu/global_menu.py:89 lib/menu/global_menu.py:88 msgid "Specify hostname" msgstr "" -#: lib/menu/selection_menu.py:228 lib/menu/selection_menu.py:492 -#: lib/menu/selection_menu.py:500 lib/user_interaction/global_menu.py:141 -#: lib/menu/selection_menu.py:562 lib/menu/global_menu.py:141 -#: lib/menu/global_menu.py:195 msgid "Not configured, unavailable unless setup manually" msgstr "" -#: lib/menu/selection_menu.py:231 lib/menu/selection_menu.py:495 -#: lib/menu/selection_menu.py:503 lib/user_interaction/global_menu.py:145 -#: lib/menu/selection_menu.py:566 lib/menu/global_menu.py:145 -#: lib/menu/global_menu.py:148 msgid "Select timezone" msgstr "" -#: lib/menu/selection_menu.py:266 lib/menu/selection_menu.py:276 -#: lib/menu/selection_menu.py:312 lib/menu/selection_menu.py:301 msgid "Set/Modify the below options" msgstr "" -#: lib/menu/selection_menu.py:272 msgid "Install" msgstr "" -#: lib/menu/menu.py:68 lib/menu/menu.py:75 lib/menu/menu.py:119 -#: lib/menu/menu.py:133 msgid "" "Use ESC to skip\n" "\n" msgstr "" -#: lib/user_interaction.py:591 lib/user_interaction.py:594 -#: lib/user_interaction.py:597 lib/user_interaction.py:596 -#: lib/user_interaction/partitioning_conf.py:120 -#: lib/user_interaction/partitioning_conf.py:121 -#: lib/user_interaction/partitioning_conf.py:129 msgid "Suggest partition layout" msgstr "" -#: lib/user_interaction.py:101 lib/user_interaction/utils.py:43 -#: lib/user_interaction/utils.py:40 msgid "Enter a password: " msgstr "" -#: lib/disk/filesystem.py:117 lib/disk/filesystem.py:118 -#: lib/disk/filesystem.py:116 msgid "Enter a encryption password for {}" msgstr "" -#: lib/menu/selection_menu.py:174 lib/menu/selection_menu.py:567 -#: lib/menu/selection_menu.py:575 lib/user_interaction/global_menu.py:225 -#: lib/menu/selection_menu.py:646 lib/menu/global_menu.py:225 -#: lib/menu/global_menu.py:236 msgid "Enter disk encryption password (leave blank for no encryption): " msgstr "" -#: lib/menu/selection_menu.py:407 lib/menu/selection_menu.py:617 -#: lib/menu/selection_menu.py:625 msgid "Create a required super-user with sudo privileges: " msgstr "" -#: lib/menu/selection_menu.py:347 lib/menu/selection_menu.py:554 -#: lib/menu/selection_menu.py:562 lib/user_interaction/global_menu.py:220 -#: lib/menu/selection_menu.py:641 lib/menu/global_menu.py:220 -#: lib/menu/global_menu.py:231 msgid "Enter root password (leave blank to disable root): " msgstr "" -#: lib/user_interaction.py:307 lib/user_interaction.py:324 -#: lib/user_interaction/manage_users_conf.py:86 -#: lib/user_interaction/manage_users_conf.py:121 -#: lib/user_interaction/manage_users_conf.py:83 -#: lib/user_interaction/manage_users_conf.py:118 msgid "Password for user \"{}\": " msgstr "" -#: lib/user_interaction.py:405 lib/user_interaction.py:408 -#: lib/user_interaction.py:407 lib/user_interaction/general_conf.py:152 -#: lib/user_interaction/general_conf.py:152 msgid "" "Verifying that additional packages exist (this might take a few seconds)" msgstr "" -#: lib/user_interaction.py:281 lib/user_interaction/general_conf.py:22 -#: lib/user_interaction/general_conf.py:22 msgid "" "Would you like to use automatic time synchronization (NTP) with the default " "time servers?\n" msgstr "" -#: lib/user_interaction.py:282 lib/user_interaction/general_conf.py:23 -#: lib/user_interaction/general_conf.py:23 msgid "" "Hardware time and other post-configuration steps might be required in order " "for NTP to work.\n" "For more information, please check the Arch wiki" msgstr "" -#: lib/menu/selection_menu.py:411 lib/menu/selection_menu.py:621 -#: lib/menu/selection_menu.py:629 msgid "Enter a username to create an additional user (leave blank to skip): " msgstr "" -#: lib/menu/menu.py:116 lib/menu/menu.py:130 msgid "Use ESC to skip\n" msgstr "" -#: lib/menu/list_manager.py:117 lib/menu/list_manager.py:128 msgid "" "\n" " Choose an object from the list, and select one of the available actions for " "it to execute" msgstr "" -#: lib/menu/list_manager.py:130 lib/user_interaction/subvolume_config.py:90 -#: lib/menu/list_manager.py:141 lib/user_interaction/subvolume_config.py:93 msgid "Cancel" msgstr "" -#: lib/menu/list_manager.py:131 lib/menu/list_manager.py:142 msgid "Confirm and exit" msgstr "" -#: lib/menu/list_manager.py:135 lib/menu/list_manager.py:228 -#: lib/menu/list_manager.py:251 lib/menu/list_manager.py:276 -#: lib/user_interaction/subvolume_config.py:12 -#: lib/user_interaction/subvolume_config.py:44 -#: lib/user_interaction/subvolume_config.py:78 -#: lib/user_interaction/subvolume_config.py:82 -#: lib/user_interaction/subvolume_config.py:85 lib/menu/list_manager.py:146 -#: lib/menu/list_manager.py:249 lib/menu/list_manager.py:272 -#: lib/user_interaction/subvolume_config.py:15 -#: lib/user_interaction/subvolume_config.py:47 -#: lib/user_interaction/subvolume_config.py:81 -#: lib/user_interaction/subvolume_config.py:85 -#: lib/user_interaction/subvolume_config.py:88 msgid "Add" msgstr "" -#: lib/menu/list_manager.py:135 lib/menu/list_manager.py:231 -#: lib/menu/list_manager.py:255 lib/user_interaction/subvolume_config.py:78 -#: lib/menu/list_manager.py:146 lib/menu/list_manager.py:252 -#: lib/menu/list_manager.py:276 lib/user_interaction/subvolume_config.py:81 msgid "Copy" msgstr "" -#: lib/menu/list_manager.py:135 lib/menu/list_manager.py:237 -#: lib/menu/list_manager.py:261 lib/user_interaction/subvolume_config.py:82 -#: lib/user_interaction/subvolume_config.py:85 lib/menu/list_manager.py:146 -#: lib/menu/list_manager.py:258 lib/menu/list_manager.py:282 -#: lib/user_interaction/subvolume_config.py:85 -#: lib/user_interaction/subvolume_config.py:88 msgid "Edit" msgstr "" -#: lib/menu/list_manager.py:135 lib/menu/list_manager.py:242 -#: lib/menu/list_manager.py:264 lib/user_interaction/subvolume_config.py:40 -#: lib/menu/list_manager.py:146 lib/menu/list_manager.py:263 -#: lib/menu/list_manager.py:285 lib/user_interaction/subvolume_config.py:44 msgid "Delete" msgstr "" -#: lib/menu/list_manager.py:185 lib/menu/list_manager.py:206 msgid "Select an action for < {} >" msgstr "" -#: lib/menu/list_manager.py:229 lib/menu/list_manager.py:250 -msgid "Add :" -msgstr "" - -#: lib/menu/list_manager.py:233 lib/menu/list_manager.py:254 -msgid "Copy to :" -msgstr "" - -#: lib/menu/list_manager.py:240 lib/menu/list_manager.py:261 -msgid "Edite :" -msgstr "" - -#: lib/menu/list_manager.py:252 lib/menu/list_manager.py:273 -msgid "Key :" -msgstr "" - -#: lib/menu/list_manager.py:253 lib/menu/list_manager.py:274 -msgid "Value :" -msgstr "" - -#: lib/menu/list_manager.py:257 lib/menu/list_manager.py:278 msgid "Copy to new key:" msgstr "" -#: lib/menu/list_manager.py:262 lib/menu/list_manager.py:283 -#, python-brace-format -msgid "Edit {origkey} :" -msgstr "" - -#: lib/models/network_configuration.py:53 -#: lib/models/network_configuration.py:74 -#: lib/models/network_configuration.py:167 msgid "Unknown nic type: {}. Possible values are {}" msgstr "" -#: lib/configuration.py:75 lib/configuration.py:75 msgid "" "\n" "This is your chosen configuration:" msgstr "" -#: lib/pacman.py:18 lib/pacman.py:18 msgid "" "Pacman is already running, waiting maximum 10 minutes for it to terminate." msgstr "" -#: lib/pacman.py:25 lib/pacman.py:25 msgid "" "Pre-existing pacman lock never exited. Please clean up any existing pacman " "sessions before using archinstall." msgstr "" -#: lib/user_interaction/general_conf.py:174 -#: lib/user_interaction/general_conf.py:174 msgid "Choose which optional additional repositories to enable" msgstr "" -#: lib/user_interaction/manage_users_conf.py:32 -#: lib/user_interaction/manage_users_conf.py:32 msgid "Add a user" msgstr "" -#: lib/user_interaction/manage_users_conf.py:33 -#: lib/user_interaction/manage_users_conf.py:33 msgid "Change password" msgstr "" -#: lib/user_interaction/manage_users_conf.py:34 -#: lib/user_interaction/manage_users_conf.py:34 msgid "Promote/Demote user" msgstr "" -#: lib/user_interaction/manage_users_conf.py:35 -#: lib/user_interaction/manage_users_conf.py:35 msgid "Delete User" msgstr "" -#: lib/user_interaction/manage_users_conf.py:99 -#: lib/user_interaction/manage_users_conf.py:96 msgid "" "\n" "Define a new user\n" msgstr "" -#: lib/user_interaction/manage_users_conf.py:100 -#: lib/user_interaction/manage_users_conf.py:97 msgid "User Name : " msgstr "" -#: lib/user_interaction/manage_users_conf.py:115 -#: lib/user_interaction/manage_users_conf.py:112 msgid "Should {} be a superuser (sudoer)?" msgstr "" -#: lib/user_interaction/manage_users_conf.py:161 msgid "Define users with sudo privilege: " msgstr "" -#: lib/user_interaction/network_conf.py:24 -#: lib/user_interaction/network_conf.py:124 msgid "No network configuration" msgstr "" -#: lib/user_interaction/partitioning_conf.py:128 -#: lib/user_interaction/partitioning_conf.py:129 -#: lib/user_interaction/partitioning_conf.py:138 msgid "Set desired subvolumes on a btrfs partition" msgstr "" -#: lib/user_interaction/partitioning_conf.py:296 -#: lib/user_interaction/partitioning_conf.py:303 -#: lib/user_interaction/partitioning_conf.py:336 msgid "" "{}\n" "\n" "Select which partition to set subvolumes on" msgstr "" -#: lib/user_interaction/partitioning_conf.py:305 -#: lib/user_interaction/partitioning_conf.py:312 -#: lib/user_interaction/partitioning_conf.py:346 msgid "Manage btrfs subvolumes for current partition" msgstr "" -#: lib/user_interaction/save_conf.py:24 lib/user_interaction/save_conf.py:29 -#: lib/user_interaction/save_conf.py:24 lib/user_interaction/save_conf.py:29 msgid "No configuration" msgstr "" -#: lib/user_interaction/save_conf.py:42 lib/user_interaction/save_conf.py:42 msgid "Save user configuration" msgstr "" -#: lib/user_interaction/save_conf.py:43 lib/user_interaction/save_conf.py:43 msgid "Save user credentials" msgstr "" -#: lib/user_interaction/save_conf.py:44 lib/user_interaction/save_conf.py:44 msgid "Save disk layout" msgstr "" -#: lib/user_interaction/save_conf.py:45 lib/user_interaction/save_conf.py:45 msgid "Save all" msgstr "" -#: lib/user_interaction/save_conf.py:48 lib/user_interaction/save_conf.py:48 msgid "Choose which configuration to save" msgstr "" -#: lib/user_interaction/save_conf.py:59 lib/user_interaction/save_conf.py:59 msgid "Enter a directory for the configuration(s) to be saved: " msgstr "" -#: lib/user_interaction/save_conf.py:63 lib/user_interaction/save_conf.py:63 msgid "Not a valid directory: {}" msgstr "" -#: lib/user_interaction/utils.py:32 msgid "The password you are using seems to be weak," msgstr "" -#: lib/user_interaction/utils.py:33 msgid "are you sure you want to use it?" msgstr "" -#: lib/user_interaction/global_menu.py:134 lib/menu/selection_menu.py:555 -#: lib/menu/global_menu.py:134 lib/menu/global_menu.py:137 msgid "Additional repositories to enable" msgstr "" -#: lib/user_interaction/global_menu.py:155 lib/menu/selection_menu.py:576 -#: lib/menu/global_menu.py:155 lib/menu/global_menu.py:160 msgid "Save configuration" msgstr "" -#: lib/user_interaction/global_menu.py:192 lib/menu/selection_menu.py:613 -#: lib/menu/global_menu.py:192 lib/menu/global_menu.py:205 msgid "Missing configurations:\n" msgstr "" -#: lib/user_interaction/global_menu.py:210 lib/menu/selection_menu.py:631 -#: lib/menu/global_menu.py:210 lib/menu/global_menu.py:221 msgid "Either root-password or at least 1 superuser must be specified" msgstr "" -#: lib/user_interaction/global_menu.py:275 lib/menu/selection_menu.py:695 -#: lib/menu/global_menu.py:275 lib/menu/global_menu.py:287 msgid "Manage superuser accounts: " msgstr "" -#: lib/user_interaction/global_menu.py:279 lib/menu/selection_menu.py:699 -#: lib/menu/global_menu.py:279 lib/menu/global_menu.py:291 msgid "Manage ordinary user accounts: " msgstr "" -#: lib/user_interaction/subvolume_config.py:17 -#: lib/user_interaction/subvolume_config.py:20 msgid " Subvolume :{:16}" msgstr "" -#: lib/user_interaction/subvolume_config.py:19 -#: lib/user_interaction/subvolume_config.py:22 -#: lib/user_interaction/subvolume_config.py:22 -#: lib/user_interaction/subvolume_config.py:25 msgid " mounted at {:16}" msgstr "" -#: lib/user_interaction/subvolume_config.py:26 -#: lib/user_interaction/subvolume_config.py:29 msgid " with option {}" msgstr "" -#: lib/user_interaction/subvolume_config.py:46 -#: lib/user_interaction/subvolume_config.py:49 msgid "" "\n" " Fill the desired values for a new subvolume \n" msgstr "" -#: lib/user_interaction/subvolume_config.py:77 -#: lib/user_interaction/subvolume_config.py:80 msgid "Subvolume name " msgstr "" -#: lib/user_interaction/subvolume_config.py:81 -#: lib/user_interaction/subvolume_config.py:84 msgid "Subvolume mountpoint" msgstr "" -#: lib/user_interaction/subvolume_config.py:84 -#: lib/user_interaction/subvolume_config.py:87 msgid "Subvolume options" msgstr "" -#: lib/user_interaction/subvolume_config.py:87 -#: lib/user_interaction/subvolume_config.py:90 msgid "Save" msgstr "" -#: lib/user_interaction/subvolume_config.py:121 -#: lib/user_interaction/subvolume_config.py:124 msgid "Subvolume name :" msgstr "" -#: lib/user_interaction/subvolume_config.py:124 -#: lib/user_interaction/subvolume_config.py:127 msgid "Select a mount point :" msgstr "" -#: lib/user_interaction/subvolume_config.py:128 -#: lib/user_interaction/subvolume_config.py:131 msgid "Select the desired subvolume options " msgstr "" -#: lib/user_interaction/manage_users_conf.py:161 -#: lib/user_interaction/manage_users_conf.py:158 msgid "Define users with sudo privilege, by username: " msgstr "" -#: lib/installer.py:152 lib/installer.py:154 msgid "[!] A log file has been created here: {}" msgstr "" -#: lib/disk/user_guides.py:30 msgid "Would you like to use BTRFS subvolumes with a default structure?" msgstr "" -#: lib/disk/user_guides.py:34 lib/disk/user_guides.py:174 msgid "Would you like to use BTRFS compression?" msgstr "" -#: lib/disk/user_guides.py:91 msgid "Would you like to create a separate partition for /home?" msgstr "" -#: lib/disk/user_guides.py:161 msgid "" "The selected drives do not have the minimum capacity required for an " "automatic suggestion\n" msgstr "" -#: lib/disk/user_guides.py:162 msgid "Minimum capacity for /home partition: {}GB\n" msgstr "" -#: lib/disk/user_guides.py:163 msgid "Minimum capacity for Arch Linux partition: {}GB" msgstr "" -#: lib/disk/user_guides.py:164 msgid "Continue" msgstr "" -#: lib/menu/menu.py:20 msgid "yes" msgstr "" -#: lib/menu/menu.py:24 msgid "no" msgstr "" -#: lib/menu/selection_menu.py:137 msgid "set: {}" msgstr "" -#: lib/models/network_configuration.py:118 msgid "Manual configuration setting must be a list" msgstr "" -#: lib/models/network_configuration.py:127 msgid "No iface specified for manual configuration" msgstr "" -#: lib/models/network_configuration.py:137 msgid "Manual nic configuration with no auto DHCP requires an IP address" msgstr "" -#: lib/user_interaction/network_conf.py:37 msgid "Add interface" msgstr "" -#: lib/user_interaction/network_conf.py:38 msgid "Edit interface" msgstr "" -#: lib/user_interaction/network_conf.py:39 msgid "Delete interface" msgstr "" -#: lib/user_interaction/network_conf.py:69 msgid "Select interface to add" msgstr "" -#: lib/user_interaction/network_conf.py:127 msgid "Manual configuration" msgstr "" -#: lib/user_interaction/partitioning_conf.py:135 msgid "Mark/Unmark a partition as compressed (btrfs only)" msgstr "" -#: lib/user_interaction/utils.py:31 msgid "" "The password you are using seems to be weak, are you sure you want to use it?" msgstr "" -#: profiles/desktop.py:7 msgid "" -"Provides a selection of desktop environments and tiling window managers, e.g. gnome, kde, sway" +"Provides a selection of desktop environments and tiling window managers, e." +"g. gnome, kde, sway" msgstr "" -#: profiles/desktop.py:49 msgid "Select your desired desktop environment" msgstr "" -#: profiles/minimal.py:5 -msgid "A very basic installation that allows you to customize Arch Linux as you see fit." +msgid "" +"A very basic installation that allows you to customize Arch Linux as you see " +"fit." msgstr "" -#: profiles/server.py:9 msgid "" -"Provides a selection of various server packages to install and enable, e.g. httpd, nginx, mariadb" +"Provides a selection of various server packages to install and enable, e.g. " +"httpd, nginx, mariadb" msgstr "" -#: profiles/server.py:30 -msgid "Choose which servers to install, if none then a minimal installation wil be done" +msgid "" +"Choose which servers to install, if none then a minimal installation wil be " +"done" msgstr "" -#: profiles/xorg.py:9 msgid "Installs a minimal system as well as xorg and graphics drivers." msgstr "" -#: examples/guided.py:303 msgid "Press Enter to continue." msgstr "" -#: examples/guided.py:260 msgid "" -"Would you like to chroot into the newly created installation and perform post-installation configuration?" +"Would you like to chroot into the newly created installation and perform " +"post-installation configuration?" +msgstr "" + +msgid "Are you sure you want to reset this setting?" +msgstr "" + +msgid "Select one or more hard drives to use and configure\n" +msgstr "" + +msgid "Any modifications to the existing setting will reset the disk layout!" +msgstr "" + +msgid "" +"If you reset the harddrive selection this will also reset the current disk " +"layout. Are you sure?" +msgstr "" + +msgid "Save and exit" +msgstr "" + +msgid "" +"{}\n" +"contains queued partitions, this will remove those, are you sure?" +msgstr "" + +msgid "No audio server" +msgstr "" + +msgid "(default)" +msgstr "" + +msgid "Use ESC to skip" +msgstr "" + +msgid "" +"Use CTRL+C to reset current selection\n" +"\n" +msgstr "" + +msgid "Copy to: " +msgstr "" + +msgid "Edit: " +msgstr "" + +msgid "Key: " +msgstr "" + +msgid "Edit {}: " +msgstr "" + +msgid "Add :" +msgstr "" + +msgid "Value :" msgstr "" diff --git a/archinstall/locales/de/LC_MESSAGES/base.mo b/archinstall/locales/de/LC_MESSAGES/base.mo index da89e7b1..b687fee7 100644 Binary files a/archinstall/locales/de/LC_MESSAGES/base.mo and b/archinstall/locales/de/LC_MESSAGES/base.mo differ diff --git a/archinstall/locales/de/LC_MESSAGES/base.po b/archinstall/locales/de/LC_MESSAGES/base.po index 5be554b7..4fe7904d 100644 --- a/archinstall/locales/de/LC_MESSAGES/base.po +++ b/archinstall/locales/de/LC_MESSAGES/base.po @@ -9,109 +9,83 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 3.0\n" +"X-Generator: Poedit 3.0.1\n" -#: lib/installer.py:144 lib/installer.py:152 msgid "[!] A log file has been created here: {} {}" msgstr "[!] Eine Logdatei wurde erstellt: {} {}" -#: lib/installer.py:145 lib/installer.py:153 msgid " Please submit this issue (and file) to https://github.com/archlinux/archinstall/issues" msgstr "Bitte melden sie das Problem mit der erstellten Datei auf https://github.com/archlinux/archinstall/issues" -#: lib/user_interaction.py:83 lib/user_interaction/utils.py:86 msgid "Do you really want to abort?" msgstr "Wollen Sie wirklich abbrechen?" -#: lib/user_interaction.py:101 lib/user_interaction.py:104 lib/user_interaction/utils.py:53 msgid "And one more time for verification: " msgstr "Und nocheinmal zur Besätigung: " -#: lib/user_interaction.py:272 lib/user_interaction.py:275 lib/user_interaction/system_conf.py:142 msgid "Would you like to use swap on zram?" msgstr "Möchten Sie swap mit zram verwenden?" -#: lib/user_interaction.py:285 lib/user_interaction.py:288 lib/user_interaction/general_conf.py:33 msgid "Desired hostname for the installation: " msgstr "Gewnüschter Hostname für die Installation: " -#: lib/user_interaction.py:290 lib/user_interaction.py:293 msgid "Username for required superuser with sudo privileges: " msgstr "Benutzername für den erforderlichen superuser mit sudo Rechten: " -#: lib/user_interaction.py:310 lib/user_interaction.py:313 lib/user_interaction/manage_users_conf.py:167 msgid "Any additional users to install (leave blank for no users): " msgstr "Geben Sie weitere Benutzernamen ein die installiert werden sollen (leer lassen für keine weiteren Benutzer): " -#: lib/user_interaction.py:324 lib/user_interaction.py:327 msgid "Should this user be a superuser (sudoer)?" msgstr "Soll dieser Benutzer ein superuser sein (sudoer)?" -#: lib/user_interaction.py:340 lib/user_interaction.py:343 lib/user_interaction.py:346 lib/user_interaction/general_conf.py:41 msgid "Select a timezone" msgstr "Bitte wählen Sie eine Zeitzone aus" -#: lib/user_interaction.py:354 lib/user_interaction.py:357 lib/user_interaction.py:360 lib/user_interaction.py:359 lib/user_interaction/system_conf.py:115 msgid "Would you like to use GRUB as a bootloader instead of systemd-boot?" msgstr "Möchten Sie GRUB als bootloader anstelle von system-boot verwenden?" -#: lib/user_interaction.py:364 lib/user_interaction.py:367 lib/user_interaction.py:370 lib/user_interaction.py:369 lib/user_interaction/system_conf.py:125 msgid "Choose a bootloader" msgstr "Bitte wählen Sie einen bootloader aus" -#: lib/user_interaction.py:380 lib/user_interaction.py:383 lib/user_interaction.py:386 lib/user_interaction.py:385 lib/user_interaction/general_conf.py:53 msgid "Choose an audio server" msgstr "Bitte wählen Sie einen Audio server aus" -#: lib/user_interaction.py:391 lib/user_interaction.py:394 lib/user_interaction.py:397 lib/user_interaction.py:396 lib/user_interaction/general_conf.py:138 msgid "Only packages such as base, base-devel, linux, linux-firmware, efibootmgr and optional profile packages are installed." msgstr "Nur die Packete base, base-devel, linux, linux-firmware, efibootmgr und optionale Profilpackete werden installiert" -#: lib/user_interaction.py:392 lib/user_interaction.py:395 lib/user_interaction.py:398 lib/user_interaction.py:397 lib/user_interaction/general_conf.py:139 msgid "If you desire a web browser, such as firefox or chromium, you may specify it in the following prompt." msgstr "Wenn Sie einen Webbrowser, z.B. Firefox oder Chromium, installieren möchten, können Sie diese nun eingeben." -#: lib/user_interaction.py:396 lib/user_interaction.py:399 lib/user_interaction.py:402 lib/user_interaction.py:401 lib/user_interaction/general_conf.py:143 msgid "Write additional packages to install (space separated, leave blank to skip): " msgstr "Schreiben Sie zusätzliche Packete die installiert werden sollen mit einem Leerzeichen getrennt (zum Überspringen leer lassen): " -#: lib/user_interaction.py:419 lib/user_interaction.py:422 lib/user_interaction.py:425 lib/user_interaction.py:424 lib/user_interaction/network_conf.py:25 msgid "Copy ISO network configuration to installation" msgstr "ISO netzwerk Einstellungen in die Installation kopieren" -#: lib/user_interaction.py:420 lib/user_interaction.py:423 lib/user_interaction.py:426 lib/user_interaction.py:425 lib/user_interaction/network_conf.py:26 msgid "Use NetworkManager (necessary to configure internet graphically in GNOME and KDE)" msgstr "NetworkManager benutzen (notwendig um Internet auf graphische Weise in GNOME und KDE einzustellen)" -#: lib/user_interaction.py:428 lib/user_interaction.py:431 lib/user_interaction.py:434 lib/user_interaction.py:433 lib/user_interaction/network_conf.py:43 msgid "Select one network interface to configure" msgstr "Bitte wählen Sie ein netzwerk zur Konfiguration aus" -#: lib/user_interaction.py:441 lib/user_interaction.py:444 lib/user_interaction.py:447 lib/user_interaction.py:446 lib/user_interaction/network_conf.py:70 msgid "Select which mode to configure for \"{}\" or skip to use default mode \"{}\"" msgstr "Bitte wählen Sie einen Modus zur Konfiguration von \"{}\" aus oder Überspringen um mit dem voreingestellten Modus \"{}\" fortzufahren" -#: lib/user_interaction.py:446 lib/user_interaction.py:449 lib/user_interaction.py:452 lib/user_interaction.py:451 lib/user_interaction/network_conf.py:75 msgid "Enter the IP and subnet for {} (example: 192.168.0.5/24): " msgstr "Bitte geben Sie eine IP Adresse und ein Subnet für {} ein (z.B. 192.168.0.5/24)" -#: lib/user_interaction.py:461 lib/user_interaction.py:464 lib/user_interaction.py:467 lib/user_interaction.py:466 lib/user_interaction/network_conf.py:86 msgid "Enter your gateway (router) IP address or leave blank for none: " msgstr "Bitte geben Sie eine gateway (router) IP Adresse ein (leer lassen für kein Adresse): " -#: lib/user_interaction.py:476 lib/user_interaction.py:479 lib/user_interaction.py:482 lib/user_interaction.py:481 lib/user_interaction/network_conf.py:102 msgid "Enter your DNS servers (space separated, blank for none): " msgstr "Bitte geben Sie die DNS server ein (mit Leerzeichen getrennt oder leer lassen für keinen server): " -#: lib/user_interaction.py:510 lib/user_interaction.py:513 lib/user_interaction.py:516 lib/user_interaction.py:515 lib/user_interaction/disk_conf.py:23 msgid "Select which filesystem your main partition should use" msgstr "Bitte wählen Sie ein Dateisystem aus, welches für die Hauptpartition verwendet werden soll" -#: lib/user_interaction.py:556 lib/user_interaction.py:559 lib/user_interaction.py:562 lib/user_interaction.py:561 lib/user_interaction/partitioning_conf.py:64 lib/user_interaction/partitioning_conf.py:63 msgid "Current partition layout" msgstr "Momentanes Partitionslayout" -#: lib/user_interaction.py:607 lib/user_interaction.py:614 lib/user_interaction.py:617 lib/user_interaction.py:620 lib/user_interaction.py:619 lib/user_interaction/partitioning_conf.py:145 lib/user_interaction/partitioning_conf.py:146 msgid "" "Select what to do with\n" "{}" @@ -119,23 +93,18 @@ msgstr "" "Bitte wählen Sie eine Aktion aus für\n" "{}" -#: lib/user_interaction.py:624 lib/user_interaction.py:709 lib/user_interaction.py:631 lib/user_interaction.py:716 lib/user_interaction.py:634 lib/user_interaction.py:719 lib/user_interaction.py:637 lib/user_interaction.py:722 lib/user_interaction.py:636 lib/user_interaction.py:721 lib/user_interaction/partitioning_conf.py:162 lib/user_interaction/partitioning_conf.py:255 lib/user_interaction/partitioning_conf.py:165 lib/user_interaction/partitioning_conf.py:260 msgid "Enter a desired filesystem type for the partition" msgstr "Bitte wählen Sie einen Dateisystemtyp für die Partition aus" -#: lib/user_interaction.py:626 lib/user_interaction.py:633 lib/user_interaction.py:636 lib/user_interaction.py:639 lib/user_interaction.py:638 lib/user_interaction/partitioning_conf.py:164 lib/user_interaction/partitioning_conf.py:167 msgid "Enter the start sector (percentage or block number, default: {}): " msgstr "Bitte geben Sie den start Sektor ein (in Prozent oder Blocknummer, default: {}): " -#: lib/user_interaction.py:635 lib/user_interaction.py:642 lib/user_interaction.py:645 lib/user_interaction.py:648 lib/user_interaction.py:647 lib/user_interaction/partitioning_conf.py:174 lib/user_interaction/partitioning_conf.py:177 msgid "Enter the end sector of the partition (percentage or block number, ex: {}): " msgstr "Bitte geben Sie den end Sektor ein (in Prozent oder Blocknummer, default: {}): " -#: lib/user_interaction.py:661 lib/user_interaction.py:668 lib/user_interaction.py:671 lib/user_interaction.py:674 lib/user_interaction.py:673 lib/user_interaction/partitioning_conf.py:203 lib/user_interaction/partitioning_conf.py:208 msgid "{} contains queued partitions, this will remove those, are you sure?" msgstr "{} enthält Partitionen in der Warteschlange, dies werden damit entfernt, sind sie sicher?" -#: lib/user_interaction.py:674 lib/user_interaction.py:681 lib/user_interaction.py:684 lib/user_interaction.py:687 lib/user_interaction.py:686 lib/user_interaction/partitioning_conf.py:216 lib/user_interaction/partitioning_conf.py:221 msgid "" "{}\n" "\n" @@ -145,7 +114,6 @@ msgstr "" "\n" "Wählen sie anhand vom index welche Partitionen gelöscht werden sollen" -#: lib/user_interaction.py:682 lib/user_interaction.py:689 lib/user_interaction.py:692 lib/user_interaction.py:695 lib/user_interaction.py:694 lib/user_interaction/partitioning_conf.py:226 lib/user_interaction/partitioning_conf.py:231 msgid "" "{}\n" "\n" @@ -155,15 +123,12 @@ msgstr "" "\n" "Wählen sie anhand vom index welche Partitionen zu mounten" -#: lib/user_interaction.py:686 lib/user_interaction.py:693 lib/user_interaction.py:696 lib/user_interaction.py:699 lib/user_interaction.py:698 lib/user_interaction/partitioning_conf.py:231 lib/user_interaction/partitioning_conf.py:236 msgid " * Partition mount-points are relative to inside the installation, the boot would be /boot as an example." msgstr " * Die Mountorte sind relativ zur Installation, zum Beispiel boot würde gemountet auf /boot" -#: lib/user_interaction.py:687 lib/user_interaction.py:694 lib/user_interaction.py:697 lib/user_interaction.py:700 lib/user_interaction.py:699 lib/user_interaction/partitioning_conf.py:233 lib/user_interaction/partitioning_conf.py:238 msgid "Select where to mount partition (leave blank to remove mountpoint): " msgstr "Bitte geben sie an wo die Partition gemounted werden soll (leer lassen um den Mountort zu entfernen): " -#: lib/user_interaction.py:698 lib/user_interaction.py:705 lib/user_interaction.py:708 lib/user_interaction.py:711 lib/user_interaction.py:710 lib/user_interaction/partitioning_conf.py:244 lib/user_interaction/partitioning_conf.py:249 msgid "" "{}\n" "\n" @@ -173,7 +138,6 @@ msgstr "" "\n" "Bitte wählen sie welche Partition formatiert werden soll" -#: lib/user_interaction.py:717 lib/user_interaction.py:724 lib/user_interaction.py:727 lib/user_interaction.py:730 lib/user_interaction.py:729 lib/user_interaction/partitioning_conf.py:265 lib/user_interaction/partitioning_conf.py:270 msgid "" "{}\n" "\n" @@ -183,7 +147,6 @@ msgstr "" "\n" "Bitte wählen sie welche Partition verschlüsselt werden soll" -#: lib/user_interaction.py:725 lib/user_interaction.py:732 lib/user_interaction.py:735 lib/user_interaction.py:738 lib/user_interaction.py:737 lib/user_interaction/partitioning_conf.py:274 lib/user_interaction/partitioning_conf.py:279 msgid "" "{}\n" "\n" @@ -193,7 +156,6 @@ msgstr "" "\n" "Bitte wählen sie welche Partition bootbar ist" -#: lib/user_interaction.py:732 lib/user_interaction.py:739 lib/user_interaction.py:742 lib/user_interaction.py:745 lib/user_interaction.py:744 lib/user_interaction/partitioning_conf.py:282 lib/user_interaction/partitioning_conf.py:287 msgid "" "{}\n" "\n" @@ -203,55 +165,42 @@ msgstr "" "\n" "Bitte wählen sie auf welche Partition ein Dateisystem eingerichtet werden soll" -#: lib/user_interaction.py:739 lib/user_interaction.py:746 lib/user_interaction.py:749 lib/user_interaction.py:752 lib/user_interaction.py:751 lib/user_interaction/partitioning_conf.py:289 lib/user_interaction/partitioning_conf.py:294 msgid "Enter a desired filesystem type for the partition: " msgstr "Bitte geben sie einen gewünschten Dateisystemtyp für die Partition ein: " -#: lib/user_interaction.py:760 lib/menu/selection_menu.py:141 lib/user_interaction.py:767 lib/menu/selection_menu.py:139 lib/menu/selection_menu.py:143 lib/user_interaction.py:770 lib/user_interaction.py:773 lib/user_interaction.py:772 lib/menu/selection_menu.py:407 lib/menu/selection_menu.py:415 lib/menu/selection_menu.py:17 lib/user_interaction/general_conf.py:105 lib/user_interaction/global_menu.py:43 lib/menu/selection_menu.py:53 lib/menu/selection_menu.py:463 lib/menu/global_menu.py:43 msgid "Select Archinstall language" msgstr "Sprache für Archinstall" -#: lib/user_interaction.py:765 lib/user_interaction.py:772 lib/user_interaction.py:775 lib/user_interaction.py:778 lib/user_interaction.py:777 lib/user_interaction/disk_conf.py:40 msgid "Wipe all selected drives and use a best-effort default partition layout" msgstr "Alle Laufwerke löschen und ein vorgegebenes Partitionenlayout verwenden" -#: lib/user_interaction.py:766 lib/user_interaction.py:773 lib/user_interaction.py:776 lib/user_interaction.py:779 lib/user_interaction.py:778 lib/user_interaction/disk_conf.py:41 msgid "Select what to do with each individual drive (followed by partition usage)" msgstr "Bitte geben sie an was mit jedem individuellem Laufwerk geschehen soll" -#: lib/user_interaction.py:769 lib/user_interaction.py:770 lib/user_interaction.py:777 lib/user_interaction.py:780 lib/user_interaction.py:783 lib/user_interaction.py:782 lib/user_interaction/disk_conf.py:45 msgid "Select what you wish to do with the selected block devices" msgstr "Bitte wählen sie was mit dem ausgewählten Gerät geschehen soll" -#: lib/user_interaction.py:822 lib/user_interaction.py:823 lib/user_interaction.py:830 lib/user_interaction.py:833 lib/user_interaction.py:836 lib/user_interaction.py:835 lib/user_interaction/general_conf.py:126 msgid "This is a list of pre-programmed profiles, they might make it easier to install things like desktop environments" msgstr "Dies ist eine Liste von bereits programmierten Profilen, diese ermöglichen es einfacher Desktop Umgebungen einzustellen" -#: lib/user_interaction.py:846 lib/user_interaction.py:847 lib/user_interaction.py:854 lib/user_interaction.py:857 lib/user_interaction.py:860 lib/user_interaction.py:859 lib/user_interaction/general_conf.py:71 msgid "Select Keyboard layout" msgstr "Bitte wählen sie ein Tastaturlayout aus" -#: lib/user_interaction.py:861 lib/user_interaction.py:862 lib/user_interaction.py:869 lib/user_interaction.py:872 lib/user_interaction.py:875 lib/user_interaction.py:874 lib/user_interaction/general_conf.py:92 msgid "Select one of the regions to download packages from" msgstr "Bitte wählen sie eine Region zum downloaden von Packeten aus" -#: lib/user_interaction.py:883 lib/user_interaction.py:884 lib/user_interaction.py:891 lib/user_interaction.py:894 lib/user_interaction.py:897 lib/user_interaction.py:896 lib/user_interaction/system_conf.py:52 msgid "Select one or more hard drives to use and configure" msgstr "Bitte wählen sie eine oder mehrere Laufwerke aus die konfiguriert werden sollen" -#: lib/user_interaction.py:910 lib/user_interaction.py:911 lib/user_interaction.py:918 lib/user_interaction.py:921 lib/user_interaction.py:924 lib/user_interaction.py:923 lib/user_interaction/system_conf.py:80 msgid "For the best compatibility with your AMD hardware, you may want to use either the all open-source or AMD / ATI options." msgstr "Für die beste kompabilität mit ihrer AMD hardware, sollten sie womöglich die open-source oder AMD / ATI optionen verwenden" -#: lib/user_interaction.py:912 lib/user_interaction.py:913 lib/user_interaction.py:920 lib/user_interaction.py:923 lib/user_interaction.py:926 lib/user_interaction.py:925 lib/user_interaction/system_conf.py:84 msgid "For the best compatibility with your Intel hardware, you may want to use either the all open-source or Intel options.\n" msgstr "Für die beste kompabilität mit ihrer Intel hardware, sollten sie womöglich die open-source oder Intel optionen verwenden.\n" -#: lib/user_interaction.py:914 lib/user_interaction.py:915 lib/user_interaction.py:922 lib/user_interaction.py:925 lib/user_interaction.py:928 lib/user_interaction.py:927 lib/user_interaction/system_conf.py:88 msgid "For the best compatibility with your Nvidia hardware, you may want to use the Nvidia proprietary driver.\n" msgstr "Für die beste kompabilität mit ihrer Nvidia hardware, sollten sie womöglich die Nvidia proprietary driver option verwenden.\n" -#: lib/user_interaction.py:917 lib/user_interaction.py:918 lib/user_interaction.py:925 lib/user_interaction.py:928 lib/user_interaction.py:931 lib/user_interaction.py:930 lib/user_interaction/system_conf.py:92 msgid "" "\n" "\n" @@ -261,123 +210,93 @@ msgstr "" "\n" "Bitte wählen sie einen Grafiktreiber aus oder leer lassen um alle open-source Treiber zu installieren" -#: lib/user_interaction.py:921 lib/user_interaction.py:922 lib/user_interaction.py:929 lib/user_interaction.py:932 lib/user_interaction.py:935 lib/user_interaction.py:934 lib/user_interaction/system_conf.py:96 msgid "All open-source (default)" msgstr "Alle open-source (default)" -#: lib/user_interaction.py:940 lib/user_interaction.py:941 lib/user_interaction.py:948 lib/user_interaction.py:951 lib/user_interaction.py:954 lib/user_interaction.py:953 lib/user_interaction/system_conf.py:28 msgid "Choose which kernels to use or leave blank for default \"{}\"" msgstr "Bitte wählen sie welche Kernel benutzt werden sollen oder leer lassen für default \"{}\"" -#: lib/user_interaction.py:954 lib/user_interaction.py:955 lib/user_interaction.py:962 lib/user_interaction.py:965 lib/user_interaction.py:968 lib/user_interaction.py:967 lib/user_interaction/locale_conf.py:16 msgid "Choose which locale language to use" msgstr "Bitte wählen sie eine lokale Sprache aus" -#: lib/user_interaction.py:968 lib/user_interaction.py:969 lib/user_interaction.py:976 lib/user_interaction.py:979 lib/user_interaction.py:982 lib/user_interaction.py:981 lib/user_interaction/locale_conf.py:29 msgid "Choose which locale encoding to use" msgstr "Bitte wählen sie eine lokale Kodierung aus" -#: lib/user_interaction.py:1009 lib/user_interaction.py:1010 lib/user_interaction.py:1017 lib/user_interaction.py:1020 lib/user_interaction.py:1023 lib/user_interaction.py:1022 lib/user_interaction/backwards_compatible_conf.py:49 msgid "Select one of the values shown below: " msgstr "Bitte wählen sie einen der folgenden Werte aus:" -#: lib/user_interaction.py:1050 lib/user_interaction.py:1051 lib/user_interaction.py:1058 lib/user_interaction.py:1061 lib/user_interaction.py:1064 lib/user_interaction.py:1063 lib/user_interaction/backwards_compatible_conf.py:88 msgid "Select one or more of the options below: " msgstr "Bitte wählen sie eine oder mehrere Optionen aus: " -#: lib/disk/filesystem.py:86 lib/disk/filesystem.py:87 msgid "Adding partition...." msgstr "Partitionen werden hinzugefügt..." -#: lib/disk/filesystem.py:139 lib/disk/filesystem.py:141 lib/disk/filesystem.py:142 msgid "You need to enter a valid fs-type in order to continue. See `man parted` for valid fs-type's." msgstr "Bitte geben sie einen gültigen Dateisystemtyp ein um fortzufahren. Wenden sie sich an \"man parted\" für eine Liste von gültigen Typen." -#: lib/profiles.py:89 lib/profiles.py:90 msgid "Error: Listing profiles on URL \"{}\" resulted in:" msgstr "Fehler: Auflistung von Profilen mit URL \"{}\":" -#: lib/profiles.py:92 lib/profiles.py:93 msgid "Error: Could not decode \"{}\" result as JSON:" msgstr "Fehler: \"{}\" konnte nicht in ein JSON format dekodiert werden:" -#: lib/menu/selection_menu.py:146 lib/menu/selection_menu.py:144 lib/menu/selection_menu.py:148 lib/menu/selection_menu.py:412 lib/menu/selection_menu.py:420 lib/user_interaction/global_menu.py:48 lib/menu/selection_menu.py:468 lib/menu/global_menu.py:48 msgid "Select keyboard layout" msgstr "Tastaturlayout auswählen" -#: lib/menu/selection_menu.py:149 lib/menu/selection_menu.py:147 lib/menu/selection_menu.py:151 lib/menu/selection_menu.py:415 lib/menu/selection_menu.py:423 lib/user_interaction/global_menu.py:51 lib/menu/selection_menu.py:471 lib/menu/global_menu.py:51 msgid "Select mirror region" msgstr "Mirror-region auswählen" -#: lib/menu/selection_menu.py:154 lib/menu/selection_menu.py:152 lib/menu/selection_menu.py:156 lib/menu/selection_menu.py:420 lib/menu/selection_menu.py:428 lib/user_interaction/global_menu.py:56 lib/menu/selection_menu.py:476 lib/menu/global_menu.py:56 msgid "Select locale language" msgstr "Lokale Sprache auswählen" -#: lib/menu/selection_menu.py:156 lib/menu/selection_menu.py:154 lib/menu/selection_menu.py:158 lib/menu/selection_menu.py:422 lib/menu/selection_menu.py:430 lib/user_interaction/global_menu.py:58 lib/menu/selection_menu.py:478 lib/menu/global_menu.py:58 msgid "Select locale encoding" msgstr "Lokale Kodierung auswählen" -#: lib/menu/selection_menu.py:159 lib/menu/selection_menu.py:157 lib/menu/selection_menu.py:161 lib/menu/selection_menu.py:425 lib/menu/selection_menu.py:433 lib/user_interaction/global_menu.py:61 lib/menu/selection_menu.py:481 lib/menu/global_menu.py:61 msgid "Select harddrives" msgstr "Laufwerke auswählen" -#: lib/menu/selection_menu.py:163 lib/menu/selection_menu.py:161 lib/menu/selection_menu.py:165 lib/menu/selection_menu.py:429 lib/menu/selection_menu.py:437 lib/user_interaction/global_menu.py:65 lib/menu/selection_menu.py:485 lib/menu/global_menu.py:65 msgid "Select disk layout" msgstr "Laufwerke-layout auswählen" -#: lib/menu/selection_menu.py:171 lib/menu/selection_menu.py:169 lib/menu/selection_menu.py:173 lib/menu/selection_menu.py:437 lib/menu/selection_menu.py:445 lib/user_interaction/global_menu.py:73 lib/menu/selection_menu.py:493 lib/menu/global_menu.py:73 msgid "Set encryption password" msgstr "Verschlüsselungspasswort angeben" -#: lib/menu/selection_menu.py:177 lib/menu/selection_menu.py:175 lib/menu/selection_menu.py:179 lib/menu/selection_menu.py:443 lib/menu/selection_menu.py:451 lib/user_interaction/global_menu.py:79 lib/menu/selection_menu.py:499 lib/menu/global_menu.py:79 msgid "Use swap" msgstr "Swap benützen" -#: lib/menu/selection_menu.py:182 lib/menu/selection_menu.py:180 lib/menu/selection_menu.py:184 lib/menu/selection_menu.py:448 lib/menu/selection_menu.py:456 lib/user_interaction/global_menu.py:84 lib/menu/selection_menu.py:504 lib/menu/global_menu.py:84 msgid "Select bootloader" msgstr "Bootloader auswählen" -#: lib/menu/selection_menu.py:188 lib/menu/selection_menu.py:186 lib/menu/selection_menu.py:190 lib/menu/selection_menu.py:454 lib/menu/selection_menu.py:462 lib/user_interaction/global_menu.py:95 lib/menu/selection_menu.py:515 lib/menu/global_menu.py:95 msgid "Set root password" msgstr "Root Passwort wählen" -#: lib/menu/selection_menu.py:193 lib/menu/selection_menu.py:191 lib/menu/selection_menu.py:195 lib/menu/selection_menu.py:459 lib/menu/selection_menu.py:467 lib/user_interaction/global_menu.py:100 lib/menu/selection_menu.py:520 lib/menu/global_menu.py:100 msgid "Specify superuser account" msgstr "Superuser Konto wählen" -#: lib/menu/selection_menu.py:199 lib/menu/selection_menu.py:197 lib/menu/selection_menu.py:201 lib/menu/selection_menu.py:465 lib/menu/selection_menu.py:473 lib/user_interaction/global_menu.py:107 lib/menu/selection_menu.py:528 lib/menu/global_menu.py:107 msgid "Specify user account" msgstr "Benutzerkonto wählen" -#: lib/menu/selection_menu.py:205 lib/menu/selection_menu.py:203 lib/menu/selection_menu.py:207 lib/menu/selection_menu.py:471 lib/menu/selection_menu.py:479 lib/user_interaction/global_menu.py:114 lib/menu/selection_menu.py:535 lib/menu/global_menu.py:114 msgid "Specify profile" msgstr "Profile auswählen" -#: lib/menu/selection_menu.py:210 lib/menu/selection_menu.py:208 lib/menu/selection_menu.py:212 lib/menu/selection_menu.py:476 lib/menu/selection_menu.py:484 lib/user_interaction/global_menu.py:119 lib/menu/selection_menu.py:540 lib/menu/global_menu.py:119 msgid "Select audio" msgstr "Audio auswählen" -#: lib/menu/selection_menu.py:214 lib/menu/selection_menu.py:212 lib/menu/selection_menu.py:216 lib/menu/selection_menu.py:480 lib/menu/selection_menu.py:488 lib/user_interaction/global_menu.py:123 lib/menu/selection_menu.py:544 lib/menu/global_menu.py:123 msgid "Select kernels" msgstr "Kernel auswählen" -#: lib/menu/selection_menu.py:219 lib/menu/selection_menu.py:217 lib/menu/selection_menu.py:221 lib/menu/selection_menu.py:485 lib/menu/selection_menu.py:493 lib/user_interaction/global_menu.py:128 lib/menu/selection_menu.py:549 lib/menu/global_menu.py:128 msgid "Additional packages to install" msgstr "Zus. Packete für die Installation" -#: lib/menu/selection_menu.py:224 lib/menu/selection_menu.py:222 lib/menu/selection_menu.py:226 lib/menu/selection_menu.py:490 lib/menu/selection_menu.py:498 lib/user_interaction/global_menu.py:139 lib/menu/selection_menu.py:560 lib/menu/global_menu.py:139 msgid "Configure network" msgstr "Netzwerkonfiguration" -#: lib/menu/selection_menu.py:232 lib/menu/selection_menu.py:230 lib/menu/selection_menu.py:234 lib/menu/selection_menu.py:498 lib/menu/selection_menu.py:506 lib/user_interaction/global_menu.py:150 lib/menu/selection_menu.py:571 lib/menu/global_menu.py:150 msgid "Set automatic time sync (NTP)" msgstr "Autom. Zeitsynchronisierung (NTP)" -#: lib/menu/selection_menu.py:310 lib/menu/selection_menu.py:308 lib/menu/selection_menu.py:315 lib/menu/selection_menu.py:527 lib/menu/selection_menu.py:535 lib/user_interaction/global_menu.py:187 lib/menu/selection_menu.py:608 lib/menu/global_menu.py:187 msgid "Install ({} config(s) missing)" msgstr "Installieren ({} konfiguration(en) ausständig)" -#: lib/menu/selection_menu.py:373 lib/menu/selection_menu.py:371 lib/menu/selection_menu.py:378 lib/menu/selection_menu.py:591 lib/menu/selection_menu.py:599 lib/user_interaction/global_menu.py:249 lib/menu/selection_menu.py:669 lib/menu/global_menu.py:249 msgid "" "You decided to skip harddrive selection\n" "and will use whatever drive-setup is mounted at {} (experimental)\n" @@ -389,67 +308,51 @@ msgstr "" "WARNUNG: Archinstall wird die Kompabilität der Einstellung nicht überprüfen\n" "Wollen sie trotzdem fortfahren?" -#: lib/disk/filesystem.py:97 lib/disk/filesystem.py:98 msgid "Re-using partition instance: {}" msgstr "Wiederverwenden der Partitionsinstanz: {}" -#: lib/user_interaction.py:590 lib/user_interaction.py:593 lib/user_interaction.py:596 lib/user_interaction.py:595 lib/user_interaction/partitioning_conf.py:119 lib/user_interaction/partitioning_conf.py:120 msgid "Create a new partition" msgstr "Neue Partition erstellen" -#: lib/user_interaction.py:592 lib/user_interaction.py:595 lib/user_interaction.py:598 lib/user_interaction.py:597 lib/user_interaction/partitioning_conf.py:121 lib/user_interaction/partitioning_conf.py:122 msgid "Delete a partition" msgstr "Partition löschen" -#: lib/user_interaction.py:593 lib/user_interaction.py:596 lib/user_interaction.py:599 lib/user_interaction.py:598 lib/user_interaction/partitioning_conf.py:122 lib/user_interaction/partitioning_conf.py:123 msgid "Clear/Delete all partitions" msgstr "Alle partitionen löschen" -#: lib/user_interaction.py:594 lib/user_interaction.py:597 lib/user_interaction.py:600 lib/user_interaction.py:599 lib/user_interaction/partitioning_conf.py:123 lib/user_interaction/partitioning_conf.py:124 msgid "Assign mount-point for a partition" msgstr "Mountort für Partition angeben" -#: lib/user_interaction.py:595 lib/user_interaction.py:598 lib/user_interaction.py:601 lib/user_interaction.py:600 lib/user_interaction/partitioning_conf.py:124 lib/user_interaction/partitioning_conf.py:125 msgid "Mark/Unmark a partition to be formatted (wipes data)" msgstr "Markieren welche Partition formattiert werden soll (alle Daten werden gelöscht)" -#: lib/user_interaction.py:596 lib/user_interaction.py:599 lib/user_interaction.py:602 lib/user_interaction.py:601 lib/user_interaction/partitioning_conf.py:125 lib/user_interaction/partitioning_conf.py:126 msgid "Mark/Unmark a partition as encrypted" msgstr "Markieren welche Partitionen verschlüsselt werden sollen" -#: lib/user_interaction.py:597 lib/user_interaction.py:600 lib/user_interaction.py:603 lib/user_interaction.py:602 lib/user_interaction/partitioning_conf.py:126 lib/user_interaction/partitioning_conf.py:127 msgid "Mark/Unmark a partition as bootable (automatic for /boot)" msgstr "Markieren welche Partition bootbar ist (automatisch für /boot)" -#: lib/user_interaction.py:598 lib/user_interaction.py:601 lib/user_interaction.py:604 lib/user_interaction.py:603 lib/user_interaction/partitioning_conf.py:127 lib/user_interaction/partitioning_conf.py:128 msgid "Set desired filesystem for a partition" msgstr "Bitte wählen Sie einen Dateisystemtyp für die Partition aus" -#: lib/menu/selection_menu.py:239 lib/menu/selection_menu.py:237 lib/menu/selection_menu.py:241 lib/menu/selection_menu.py:270 lib/menu/selection_menu.py:507 lib/menu/selection_menu.py:515 lib/user_interaction/global_menu.py:167 lib/menu/selection_menu.py:588 lib/menu/global_menu.py:167 msgid "Abort" msgstr "Abbrechen" -#: lib/menu/selection_menu.py:183 lib/menu/selection_menu.py:187 lib/menu/selection_menu.py:451 lib/menu/selection_menu.py:459 lib/user_interaction/global_menu.py:89 lib/menu/selection_menu.py:509 lib/menu/global_menu.py:89 msgid "Specify hostname" msgstr "Hostnamen wählen" -#: lib/menu/selection_menu.py:228 lib/menu/selection_menu.py:492 lib/menu/selection_menu.py:500 lib/user_interaction/global_menu.py:141 lib/menu/selection_menu.py:562 lib/menu/global_menu.py:141 msgid "Not configured, unavailable unless setup manually" msgstr "Nicht konfiguriert, unverfügbar wenn nicht selber eingestellt" -#: lib/menu/selection_menu.py:231 lib/menu/selection_menu.py:495 lib/menu/selection_menu.py:503 lib/user_interaction/global_menu.py:145 lib/menu/selection_menu.py:566 lib/menu/global_menu.py:145 msgid "Select timezone" msgstr "Zeitzone wählen" -#: lib/menu/selection_menu.py:266 lib/menu/selection_menu.py:276 lib/menu/selection_menu.py:312 msgid "Set/Modify the below options" msgstr "Setzen sie die unten stehenden Einstellungen" -#: lib/menu/selection_menu.py:272 msgid "Install" msgstr "Installieren" -#: lib/menu/menu.py:68 lib/menu/menu.py:75 lib/menu/menu.py:119 msgid "" "Use ESC to skip\n" "\n" @@ -457,43 +360,33 @@ msgstr "" "ESC um zu Überspringen\n" "\n" -#: lib/user_interaction.py:591 lib/user_interaction.py:594 lib/user_interaction.py:597 lib/user_interaction.py:596 lib/user_interaction/partitioning_conf.py:120 lib/user_interaction/partitioning_conf.py:121 msgid "Suggest partition layout" msgstr "Ein Partitionslayout vorschlagen" -#: lib/user_interaction.py:101 lib/user_interaction/utils.py:43 msgid "Enter a password: " msgstr "Passwort eingeben: " -#: lib/disk/filesystem.py:117 lib/disk/filesystem.py:118 msgid "Enter a encryption password for {}" msgstr "Verschlüsselungspasswort angeben für {}" -#: lib/menu/selection_menu.py:174 lib/menu/selection_menu.py:567 lib/menu/selection_menu.py:575 lib/user_interaction/global_menu.py:225 lib/menu/selection_menu.py:646 lib/menu/global_menu.py:225 msgid "Enter disk encryption password (leave blank for no encryption): " msgstr "Geben sie ein Verschlüsselungspasswort ein (leer lassen um zu Überspringen): " -#: lib/menu/selection_menu.py:407 lib/menu/selection_menu.py:617 lib/menu/selection_menu.py:625 msgid "Create a required super-user with sudo privileges: " msgstr "Geben sie einen super-user mit sudo Privilegien an: " -#: lib/menu/selection_menu.py:347 lib/menu/selection_menu.py:554 lib/menu/selection_menu.py:562 lib/user_interaction/global_menu.py:220 lib/menu/selection_menu.py:641 lib/menu/global_menu.py:220 msgid "Enter root password (leave blank to disable root): " msgstr "Geben sie ein Root passwort ein (leer lassen um Root zu deaktivieren): " -#: lib/user_interaction.py:307 lib/user_interaction.py:324 lib/user_interaction/manage_users_conf.py:86 lib/user_interaction/manage_users_conf.py:121 msgid "Password for user \"{}\": " msgstr "Passwort für Benutzer \"{}\": " -#: lib/user_interaction.py:405 lib/user_interaction.py:408 lib/user_interaction.py:407 lib/user_interaction/general_conf.py:152 msgid "Verifying that additional packages exist (this might take a few seconds)" msgstr "Angegebene Packete werden verifiziert (dies könnte einige Sekunden dauern)" -#: lib/user_interaction.py:281 lib/user_interaction/general_conf.py:22 msgid "Would you like to use automatic time synchronization (NTP) with the default time servers?\n" msgstr "Möchten sie automatische Zeitsynchronisierung mit dem default Server einschalten?\n" -#: lib/user_interaction.py:282 lib/user_interaction/general_conf.py:23 msgid "" "Hardware time and other post-configuration steps might be required in order for NTP to work.\n" "For more information, please check the Arch wiki" @@ -501,155 +394,96 @@ msgstr "" "Hardware Zeit und andere Einstellungsschritte könnten notwendig sein um NTP zu benutzen.\n" "Für weitere Informationen wenden sie sich bitte an das Arch wiki" -#: lib/menu/selection_menu.py:411 lib/menu/selection_menu.py:621 lib/menu/selection_menu.py:629 msgid "Enter a username to create an additional user (leave blank to skip): " msgstr "Geben sie einen weiteren Benutzernamen an der angelegt werden soll (leer lassen um zu Überspringen): " -#: lib/menu/menu.py:116 -#, fuzzy msgid "Use ESC to skip\n" -msgstr "" -"ESC um zu Überspringen\n" -"\n" +msgstr "ESC um zu Überspringen\n" -#: lib/menu/list_manager.py:117 msgid "" "\n" " Choose an object from the list, and select one of the available actions for it to execute" msgstr "" +"\n" +" Wählen sie ein Object aus der Liste aus und wählen sie anschließend eine Aktion dafür aus " -#: lib/menu/list_manager.py:130 lib/user_interaction/subvolume_config.py:90 msgid "Cancel" -msgstr "" +msgstr "Abbrechen" -#: lib/menu/list_manager.py:131 -#, fuzzy msgid "Confirm and exit" -msgstr "Netzwerkonfiguration" +msgstr "Bestätigen und Schließen" -#: lib/menu/list_manager.py:135 lib/menu/list_manager.py:228 lib/menu/list_manager.py:251 lib/menu/list_manager.py:276 lib/user_interaction/subvolume_config.py:12 lib/user_interaction/subvolume_config.py:44 lib/user_interaction/subvolume_config.py:78 lib/user_interaction/subvolume_config.py:82 lib/user_interaction/subvolume_config.py:85 msgid "Add" -msgstr "" +msgstr "Hinzufügen" -#: lib/menu/list_manager.py:135 lib/menu/list_manager.py:231 lib/menu/list_manager.py:255 lib/user_interaction/subvolume_config.py:78 msgid "Copy" -msgstr "" +msgstr "Kopieren" -#: lib/menu/list_manager.py:135 lib/menu/list_manager.py:237 lib/menu/list_manager.py:261 lib/user_interaction/subvolume_config.py:82 lib/user_interaction/subvolume_config.py:85 msgid "Edit" -msgstr "" +msgstr "Bearbeiten" -#: lib/menu/list_manager.py:135 lib/menu/list_manager.py:242 lib/menu/list_manager.py:264 lib/user_interaction/subvolume_config.py:40 msgid "Delete" -msgstr "" +msgstr "Löschen" -#: lib/menu/list_manager.py:185 -#, fuzzy msgid "Select an action for < {} >" -msgstr "" -"Bitte wählen Sie eine Aktion aus für\n" -"{}" - -#: lib/menu/list_manager.py:229 -msgid "Add :" -msgstr "" +msgstr "Wählen sie eine Aktion aus für < {} >" -#: lib/menu/list_manager.py:233 -msgid "Copy to :" -msgstr "" - -#: lib/menu/list_manager.py:240 -msgid "Edite :" -msgstr "" - -#: lib/menu/list_manager.py:252 -msgid "Key :" -msgstr "" - -#: lib/menu/list_manager.py:253 -msgid "Value :" -msgstr "" - -#: lib/menu/list_manager.py:257 msgid "Copy to new key:" -msgstr "" - -#: lib/menu/list_manager.py:262 -#, python-brace-format -msgid "Edit {origkey} :" -msgstr "" +msgstr "Kopieren nach neuem Schlüssel:" -#: lib/models/network_configuration.py:53 lib/models/network_configuration.py:74 msgid "Unknown nic type: {}. Possible values are {}" -msgstr "" +msgstr "Nicht erkannter Netzwerinterfacecontroller: {}. Erlaubte Werte {}" -#: lib/configuration.py:75 msgid "" "\n" "This is your chosen configuration:" msgstr "" +"\n" +"Das ist ihre gewählte Konfiguration:" -#: lib/pacman.py:18 msgid "Pacman is already running, waiting maximum 10 minutes for it to terminate." -msgstr "" +msgstr "Pacman läuft bereits, warten für maximal 10min auf Beendigung." -#: lib/pacman.py:25 msgid "Pre-existing pacman lock never exited. Please clean up any existing pacman sessions before using archinstall." -msgstr "" +msgstr "Existierendes Pacman lock wurde nicht beendet. Bitte beenden sie existierende Pacman Sessions um archinstall benützen zu können." -#: lib/user_interaction/general_conf.py:174 msgid "Choose which optional additional repositories to enable" -msgstr "" +msgstr "Wählen sie welche zusätzlichen Repositories eingeschaltet werden sollen" -#: lib/user_interaction/manage_users_conf.py:32 -msgid "Add an user" -msgstr "" +msgid "Add a user" +msgstr "Benutzerkonto hinzufügen" -#: lib/user_interaction/manage_users_conf.py:33 -#, fuzzy msgid "Change password" -msgstr "Passwort eingeben: " +msgstr "Passwort ändern" -#: lib/user_interaction/manage_users_conf.py:34 msgid "Promote/Demote user" -msgstr "" +msgstr "Benutzerkonto Berechtigen/Einschränken" -#: lib/user_interaction/manage_users_conf.py:35 msgid "Delete User" -msgstr "" +msgstr "Benutzerkonto löschen" -#: lib/user_interaction/manage_users_conf.py:99 msgid "" "\n" "Define a new user\n" msgstr "" +"\n" +"Neues Benutzerkonto anlegen\n" -#: lib/user_interaction/manage_users_conf.py:100 msgid "User Name : " -msgstr "" +msgstr "Benutzername: " -#: lib/user_interaction/manage_users_conf.py:115 -#, fuzzy msgid "Should {} be a superuser (sudoer)?" -msgstr "Soll dieser Benutzer ein superuser sein (sudoer)?" +msgstr "Soll {} ein superuser sein (sudoer)?" -#: lib/user_interaction/manage_users_conf.py:161 -#, fuzzy msgid "Define users with sudo privilege: " -msgstr "Geben sie einen super-user mit sudo Privilegien an: " +msgstr "Geben sie super-user mit sudo Privilegien an: " -#: lib/user_interaction/network_conf.py:24 -#, fuzzy msgid "No network configuration" -msgstr "ISO netzwerk Einstellungen in die Installation kopieren" +msgstr "Keine Netzwerkkonfiguration" -#: lib/user_interaction/partitioning_conf.py:128 lib/user_interaction/partitioning_conf.py:129 -#, fuzzy msgid "Set desired subvolumes on a btrfs partition" -msgstr "Bitte wählen Sie einen Dateisystemtyp für die Partition aus" +msgstr "Bitte wählen Sie subvolumes für die Btrfs Partition" -#: lib/user_interaction/partitioning_conf.py:296 lib/user_interaction/partitioning_conf.py:303 -#, fuzzy msgid "" "{}\n" "\n" @@ -657,135 +491,238 @@ msgid "" msgstr "" "{}\n" "\n" -"Bitte wählen sie auf welche Partition ein Dateisystem eingerichtet werden soll" +"Bitte wählen sie auf welcher Partition subvolumes eingerichtet werden sollen" -#: lib/user_interaction/partitioning_conf.py:305 lib/user_interaction/partitioning_conf.py:312 msgid "Manage btrfs subvolumes for current partition" -msgstr "" +msgstr "Bearbeiten von Btrfs subvolumes für die aktuelle Partition" -#: lib/user_interaction/save_conf.py:24 lib/user_interaction/save_conf.py:29 msgid "No configuration" -msgstr "" +msgstr "Keine Konfiguration" -#: lib/user_interaction/save_conf.py:42 msgid "Save user configuration" -msgstr "" +msgstr "Benutzerkonfiguration speichern" -#: lib/user_interaction/save_conf.py:43 msgid "Save user credentials" -msgstr "" +msgstr "Benutzeranmeldedaten speichern" -#: lib/user_interaction/save_conf.py:44 -#, fuzzy msgid "Save disk layout" -msgstr "Laufwerke-layout auswählen" +msgstr "Laufwerke-layout speichern" -#: lib/user_interaction/save_conf.py:45 msgid "Save all" -msgstr "" +msgstr "Alle speichern" -#: lib/user_interaction/save_conf.py:48 -#, fuzzy msgid "Choose which configuration to save" -msgstr "Bitte wählen sie eine lokale Sprache aus" +msgstr "Bitte wählen sie eine Konfiguration aus welche gespeichert werden soll" -#: lib/user_interaction/save_conf.py:59 msgid "Enter a directory for the configuration(s) to be saved: " -msgstr "" +msgstr "Geben sie eine Ordner an wo die Konfigurationen gespeichert werden sollen: " -#: lib/user_interaction/save_conf.py:63 msgid "Not a valid directory: {}" -msgstr "" +msgstr "Ordner existiert nicht: {}" -#: lib/user_interaction/utils.py:32 msgid "The password you are using seems to be weak," -msgstr "" +msgstr "Das gewählte Passwort ist sehr schwach," -#: lib/user_interaction/utils.py:33 -#, fuzzy msgid "are you sure you want to use it?" -msgstr "Wollen Sie wirklich abbrechen?" +msgstr "wollen sie dieses wirklich verwenden?" -#: lib/user_interaction/global_menu.py:134 lib/menu/selection_menu.py:555 lib/menu/global_menu.py:134 -#, fuzzy msgid "Additional repositories to enable" -msgstr "Zus. Packete für die Installation" +msgstr "Zus. Repositories einzuschalten" -#: lib/user_interaction/global_menu.py:155 lib/menu/selection_menu.py:576 lib/menu/global_menu.py:155 msgid "Save configuration" -msgstr "" +msgstr "Konfiguration speichern" -#: lib/user_interaction/global_menu.py:192 lib/menu/selection_menu.py:613 lib/menu/global_menu.py:192 msgid "Missing configurations:\n" -msgstr "" +msgstr "Ausständige Konfigurationen:\n" -#: lib/user_interaction/global_menu.py:210 lib/menu/selection_menu.py:631 lib/menu/global_menu.py:210 msgid "Either root-password or at least 1 superuser must be specified" -msgstr "" +msgstr "Entweder root Passwort oder wenigstens 1 super-user muss konfiguriert sein" -#: lib/user_interaction/global_menu.py:275 lib/menu/selection_menu.py:695 lib/menu/global_menu.py:275 -#, fuzzy msgid "Manage superuser accounts: " -msgstr "Superuser Konto wählen" +msgstr "Superuser Konto bearbeiten: " -#: lib/user_interaction/global_menu.py:279 lib/menu/selection_menu.py:699 lib/menu/global_menu.py:279 -#, fuzzy msgid "Manage ordinary user accounts: " -msgstr "Benutzerkonto wählen" +msgstr "Benutzerkonten bearbeiten: " -#: lib/user_interaction/subvolume_config.py:17 msgid " Subvolume :{:16}" -msgstr "" +msgstr " Subvolume :{:16}" -#: lib/user_interaction/subvolume_config.py:19 lib/user_interaction/subvolume_config.py:22 msgid " mounted at {:16}" -msgstr "" +msgstr " Mounted an {:16}" -#: lib/user_interaction/subvolume_config.py:26 msgid " with option {}" -msgstr "" +msgstr "mit option {}" -#: lib/user_interaction/subvolume_config.py:46 msgid "" "\n" " Fill the desired values for a new subvolume \n" msgstr "" +"\n" +" Geben sie die gewünschten Werte für ein neues Subvolumen an \n" -#: lib/user_interaction/subvolume_config.py:77 msgid "Subvolume name " -msgstr "" +msgstr "Subvolumen name" -#: lib/user_interaction/subvolume_config.py:81 msgid "Subvolume mountpoint" -msgstr "" +msgstr "Subvolumen mountpunkt" -#: lib/user_interaction/subvolume_config.py:84 msgid "Subvolume options" -msgstr "" +msgstr "Subvolumen Optionen" -#: lib/user_interaction/subvolume_config.py:87 msgid "Save" -msgstr "" +msgstr "Speichern" -#: lib/user_interaction/subvolume_config.py:121 msgid "Subvolume name :" -msgstr "" +msgstr "Subvolumen name :" -#: lib/user_interaction/subvolume_config.py:124 -#, fuzzy msgid "Select a mount point :" -msgstr "Bitte wählen Sie eine Zeitzone aus" +msgstr "Bitte wählen Sie einen Mountpunkt aus" -#: lib/user_interaction/subvolume_config.py:128 msgid "Select the desired subvolume options " -msgstr "" +msgstr "Wählen sie die gewünschte Subvolumen Optionen" -#: lib/user_interaction/manage_users_conf.py:161 -#, fuzzy msgid "Define users with sudo privilege, by username: " -msgstr "Geben sie einen super-user mit sudo Privilegien an: " +msgstr "Geben sie Benutzer mit sudo Privilegien an: " -#: lib/installer.py:152 -#, fuzzy msgid "[!] A log file has been created here: {}" -msgstr "[!] Eine Logdatei wurde erstellt: {} {}" +msgstr "[!] Eine Logdatei wurde erstellt: {}" + +msgid "Would you like to use BTRFS subvolumes with a default structure?" +msgstr "Möchten sie Btrfs Subvolumen mit vorgebener Struktur?" + +msgid "Would you like to use BTRFS compression?" +msgstr "Möchten sie Btrfs kompression?" + +msgid "Would you like to create a separate partition for /home?" +msgstr "Möchten sie eine separate Partition für /home?" + +msgid "The selected drives do not have the minimum capacity required for an automatic suggestion\n" +msgstr "Die ausgewählten Laufwerke haben nicht genug Speicherplatz für eine automatische Vorgabe\n" + +msgid "Minimum capacity for /home partition: {}GB\n" +msgstr "Minimaler Speicherplatz für /home Partition: {}GB\n" + +msgid "Minimum capacity for Arch Linux partition: {}GB" +msgstr "Minimaler Speicherplatz für Arch Linux Partition: {}GB" + +msgid "Continue" +msgstr "Weiter" + +msgid "yes" +msgstr "ja" + +msgid "no" +msgstr "nein" + +msgid "set: {}" +msgstr "gewählt: {}" + +msgid "Manual configuration setting must be a list" +msgstr "Manuelle Konfiguration muss eine Liste sein" + +msgid "No iface specified for manual configuration" +msgstr "Kein Verbindung angegeben für eine manuelle Konfiguration" + +msgid "Manual nic configuration with no auto DHCP requires an IP address" +msgstr "Manuelle Konfiguration für Netzwerverbindung mit keinem auto DHCP benötigt eien IP Addresse" + +msgid "Add interface" +msgstr "Verbindung hinzufügen" + +msgid "Edit interface" +msgstr "Verbindung bearbeiten" + +msgid "Delete interface" +msgstr "Verbindung löschen" + +msgid "Select interface to add" +msgstr "Wählen sie eine Verbindung welche hinzugefügt werden soll" + +msgid "Manual configuration" +msgstr "Manuelle konfiguration" + +msgid "Mark/Unmark a partition as compressed (btrfs only)" +msgstr "Markieren/Unmarkieren Kompression von einer Partition (nur Btrfs) " + +msgid "The password you are using seems to be weak, are you sure you want to use it?" +msgstr "Das gewählte Passwort ist schwach, möchten sie trotzdem fortfahren?" + +msgid "Provides a selection of desktop environments and tiling window managers, e.g. gnome, kde, sway" +msgstr "Auswahl von Desktopumgebungen und tiling window managern, z.B. gnome, kde, sway" + +msgid "Select your desired desktop environment" +msgstr "Wählen sie eine Desktopumgebung aus" + +msgid "A very basic installation that allows you to customize Arch Linux as you see fit." +msgstr "Eine sehr minimale Installation welche es erlaubt Arch Linux weitgehend anzupassen" + +msgid "Provides a selection of various server packages to install and enable, e.g. httpd, nginx, mariadb" +msgstr "Auswahl von Serverpaketen welche installiert werden sollen, z.B. httpd, nginx, mariadb" + +msgid "Choose which servers to install, if none then a minimal installation wil be done" +msgstr "Wählen sie die gewünschten Server aus welche installiert werden sollen" + +msgid "Installs a minimal system as well as xorg and graphics drivers." +msgstr "Installiert ein minimales System inklusive xorg und Graphiktreibern" + +msgid "Press Enter to continue." +msgstr "Drücken sie Enter um fortzufahren." + +msgid "Would you like to chroot into the newly created installation and perform post-installation configuration?" +msgstr "Möchten sie chroot in das neu installierte System um noch weitere manuelle Konfigurationen forzunehmen?" + +msgid "Are you sure you want to reset this setting?" +msgstr "Wollen Sie wirklich diese Konfiguration zurücksetzen?" + +msgid "Select one or more hard drives to use and configure\n" +msgstr "Bitte wählen sie eine oder mehrere Laufwerke aus die konfiguriert werden sollen\n" + +msgid "Any modifications to the existing setting will reset the disk layout!" +msgstr "Modifikationen zur momentanen Konfiguration führen zu einem Löschen der Laufwerkskonfiguration!" + +msgid "If you reset the harddrive selection this will also reset the current disk layout. Are you sure?" +msgstr "Wenn sie die Laufwerkkonfiguration ändern, dann wird die Laufwer-layout zurückgesetzt. Sind sie sicher?" + +msgid "Save and exit" +msgstr "Speichern und zurück" + +msgid "" +"{}\n" +"contains queued partitions, this will remove those, are you sure?" +msgstr "" +"{}\n" +"enthält Partitionen in der Warteschlange, dies werden damit entfernt, sind sie sicher?" + +msgid "No audio server" +msgstr "Kein Audio server" + +msgid "(default)" +msgstr "(vorgegeben)" + +msgid "Use ESC to skip" +msgstr "ESC drücken um zu überspringen" + +msgid "" +"Use CTRL+C to reset current selection\n" +"\n" +msgstr "" +"Ctrl+C drücken um die Einstellungen zurückzusetzen\n" +"\n" + +msgid "Copy to: " +msgstr "Kopieren nach: " + +msgid "Edit: " +msgstr "Bearbeiten: " + +msgid "Key: " +msgstr "Schlüssel: " + +msgid "Edit {}: " +msgstr "Bearbeiten {}: " + +msgid "Add :" +msgstr "Hinzufügen :" + +msgid "Value :" +msgstr "Wert :" diff --git a/archinstall/locales/en/LC_MESSAGES/base.po b/archinstall/locales/en/LC_MESSAGES/base.po index 36fb34b9..3d849e9d 100644 --- a/archinstall/locales/en/LC_MESSAGES/base.po +++ b/archinstall/locales/en/LC_MESSAGES/base.po @@ -4,350 +4,269 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: lib/installer.py:144 lib/installer.py:152 msgid "[!] A log file has been created here: {} {}" msgstr "" -#: lib/installer.py:145 lib/installer.py:153 msgid " Please submit this issue (and file) to https://github.com/archlinux/archinstall/issues" msgstr "" -#: lib/user_interaction.py:83 lib/user_interaction/utils.py:86 msgid "Do you really want to abort?" msgstr "" -#: lib/user_interaction.py:101 lib/user_interaction.py:104 lib/user_interaction/utils.py:53 msgid "And one more time for verification: " msgstr "" -#: lib/user_interaction.py:272 lib/user_interaction.py:275 lib/user_interaction/system_conf.py:142 msgid "Would you like to use swap on zram?" msgstr "" -#: lib/user_interaction.py:285 lib/user_interaction.py:288 lib/user_interaction/general_conf.py:33 msgid "Desired hostname for the installation: " msgstr "" -#: lib/user_interaction.py:290 lib/user_interaction.py:293 msgid "Username for required superuser with sudo privileges: " msgstr "" -#: lib/user_interaction.py:310 lib/user_interaction.py:313 lib/user_interaction/manage_users_conf.py:167 msgid "Any additional users to install (leave blank for no users): " msgstr "" -#: lib/user_interaction.py:324 lib/user_interaction.py:327 msgid "Should this user be a superuser (sudoer)?" msgstr "" -#: lib/user_interaction.py:340 lib/user_interaction.py:343 lib/user_interaction.py:346 lib/user_interaction/general_conf.py:41 msgid "Select a timezone" msgstr "" -#: lib/user_interaction.py:354 lib/user_interaction.py:357 lib/user_interaction.py:360 lib/user_interaction.py:359 lib/user_interaction/system_conf.py:115 msgid "Would you like to use GRUB as a bootloader instead of systemd-boot?" msgstr "" -#: lib/user_interaction.py:364 lib/user_interaction.py:367 lib/user_interaction.py:370 lib/user_interaction.py:369 lib/user_interaction/system_conf.py:125 msgid "Choose a bootloader" msgstr "" -#: lib/user_interaction.py:380 lib/user_interaction.py:383 lib/user_interaction.py:386 lib/user_interaction.py:385 lib/user_interaction/general_conf.py:53 msgid "Choose an audio server" msgstr "" -#: lib/user_interaction.py:391 lib/user_interaction.py:394 lib/user_interaction.py:397 lib/user_interaction.py:396 lib/user_interaction/general_conf.py:138 msgid "Only packages such as base, base-devel, linux, linux-firmware, efibootmgr and optional profile packages are installed." msgstr "" -#: lib/user_interaction.py:392 lib/user_interaction.py:395 lib/user_interaction.py:398 lib/user_interaction.py:397 lib/user_interaction/general_conf.py:139 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:396 lib/user_interaction.py:399 lib/user_interaction.py:402 lib/user_interaction.py:401 lib/user_interaction/general_conf.py:143 msgid "Write additional packages to install (space separated, leave blank to skip): " msgstr "" -#: lib/user_interaction.py:419 lib/user_interaction.py:422 lib/user_interaction.py:425 lib/user_interaction.py:424 lib/user_interaction/network_conf.py:25 msgid "Copy ISO network configuration to installation" msgstr "" -#: lib/user_interaction.py:420 lib/user_interaction.py:423 lib/user_interaction.py:426 lib/user_interaction.py:425 lib/user_interaction/network_conf.py:26 msgid "Use NetworkManager (necessary to configure internet graphically in GNOME and KDE)" msgstr "" -#: lib/user_interaction.py:428 lib/user_interaction.py:431 lib/user_interaction.py:434 lib/user_interaction.py:433 lib/user_interaction/network_conf.py:43 msgid "Select one network interface to configure" msgstr "" -#: lib/user_interaction.py:441 lib/user_interaction.py:444 lib/user_interaction.py:447 lib/user_interaction.py:446 lib/user_interaction/network_conf.py:70 msgid "Select which mode to configure for \"{}\" or skip to use default mode \"{}\"" msgstr "" -#: lib/user_interaction.py:446 lib/user_interaction.py:449 lib/user_interaction.py:452 lib/user_interaction.py:451 lib/user_interaction/network_conf.py:75 msgid "Enter the IP and subnet for {} (example: 192.168.0.5/24): " msgstr "" -#: lib/user_interaction.py:461 lib/user_interaction.py:464 lib/user_interaction.py:467 lib/user_interaction.py:466 lib/user_interaction/network_conf.py:86 msgid "Enter your gateway (router) IP address or leave blank for none: " msgstr "" -#: lib/user_interaction.py:476 lib/user_interaction.py:479 lib/user_interaction.py:482 lib/user_interaction.py:481 lib/user_interaction/network_conf.py:102 msgid "Enter your DNS servers (space separated, blank for none): " msgstr "" -#: lib/user_interaction.py:510 lib/user_interaction.py:513 lib/user_interaction.py:516 lib/user_interaction.py:515 lib/user_interaction/disk_conf.py:23 msgid "Select which filesystem your main partition should use" msgstr "" -#: lib/user_interaction.py:556 lib/user_interaction.py:559 lib/user_interaction.py:562 lib/user_interaction.py:561 lib/user_interaction/partitioning_conf.py:64 lib/user_interaction/partitioning_conf.py:63 msgid "Current partition layout" msgstr "" -#: lib/user_interaction.py:607 lib/user_interaction.py:614 lib/user_interaction.py:617 lib/user_interaction.py:620 lib/user_interaction.py:619 lib/user_interaction/partitioning_conf.py:145 lib/user_interaction/partitioning_conf.py:146 msgid "" "Select what to do with\n" "{}" msgstr "" -#: lib/user_interaction.py:624 lib/user_interaction.py:709 lib/user_interaction.py:631 lib/user_interaction.py:716 lib/user_interaction.py:634 lib/user_interaction.py:719 lib/user_interaction.py:637 lib/user_interaction.py:722 lib/user_interaction.py:636 lib/user_interaction.py:721 lib/user_interaction/partitioning_conf.py:162 lib/user_interaction/partitioning_conf.py:255 lib/user_interaction/partitioning_conf.py:165 lib/user_interaction/partitioning_conf.py:260 msgid "Enter a desired filesystem type for the partition" msgstr "" -#: lib/user_interaction.py:626 lib/user_interaction.py:633 lib/user_interaction.py:636 lib/user_interaction.py:639 lib/user_interaction.py:638 lib/user_interaction/partitioning_conf.py:164 lib/user_interaction/partitioning_conf.py:167 msgid "Enter the start sector (percentage or block number, default: {}): " msgstr "" -#: lib/user_interaction.py:635 lib/user_interaction.py:642 lib/user_interaction.py:645 lib/user_interaction.py:648 lib/user_interaction.py:647 lib/user_interaction/partitioning_conf.py:174 lib/user_interaction/partitioning_conf.py:177 msgid "Enter the end sector of the partition (percentage or block number, ex: {}): " msgstr "" -#: lib/user_interaction.py:661 lib/user_interaction.py:668 lib/user_interaction.py:671 lib/user_interaction.py:674 lib/user_interaction.py:673 lib/user_interaction/partitioning_conf.py:203 lib/user_interaction/partitioning_conf.py:208 msgid "{} contains queued partitions, this will remove those, are you sure?" msgstr "" -#: lib/user_interaction.py:674 lib/user_interaction.py:681 lib/user_interaction.py:684 lib/user_interaction.py:687 lib/user_interaction.py:686 lib/user_interaction/partitioning_conf.py:216 lib/user_interaction/partitioning_conf.py:221 msgid "" "{}\n" "\n" "Select by index which partitions to delete" msgstr "" -#: lib/user_interaction.py:682 lib/user_interaction.py:689 lib/user_interaction.py:692 lib/user_interaction.py:695 lib/user_interaction.py:694 lib/user_interaction/partitioning_conf.py:226 lib/user_interaction/partitioning_conf.py:231 msgid "" "{}\n" "\n" "Select by index which partition to mount where" msgstr "" -#: lib/user_interaction.py:686 lib/user_interaction.py:693 lib/user_interaction.py:696 lib/user_interaction.py:699 lib/user_interaction.py:698 lib/user_interaction/partitioning_conf.py:231 lib/user_interaction/partitioning_conf.py:236 msgid " * Partition mount-points are relative to inside the installation, the boot would be /boot as an example." msgstr "" -#: lib/user_interaction.py:687 lib/user_interaction.py:694 lib/user_interaction.py:697 lib/user_interaction.py:700 lib/user_interaction.py:699 lib/user_interaction/partitioning_conf.py:233 lib/user_interaction/partitioning_conf.py:238 msgid "Select where to mount partition (leave blank to remove mountpoint): " msgstr "" -#: lib/user_interaction.py:698 lib/user_interaction.py:705 lib/user_interaction.py:708 lib/user_interaction.py:711 lib/user_interaction.py:710 lib/user_interaction/partitioning_conf.py:244 lib/user_interaction/partitioning_conf.py:249 msgid "" "{}\n" "\n" "Select which partition to mask for formatting" msgstr "" -#: lib/user_interaction.py:717 lib/user_interaction.py:724 lib/user_interaction.py:727 lib/user_interaction.py:730 lib/user_interaction.py:729 lib/user_interaction/partitioning_conf.py:265 lib/user_interaction/partitioning_conf.py:270 msgid "" "{}\n" "\n" "Select which partition to mark as encrypted" msgstr "" -#: lib/user_interaction.py:725 lib/user_interaction.py:732 lib/user_interaction.py:735 lib/user_interaction.py:738 lib/user_interaction.py:737 lib/user_interaction/partitioning_conf.py:274 lib/user_interaction/partitioning_conf.py:279 msgid "" "{}\n" "\n" "Select which partition to mark as bootable" msgstr "" -#: lib/user_interaction.py:732 lib/user_interaction.py:739 lib/user_interaction.py:742 lib/user_interaction.py:745 lib/user_interaction.py:744 lib/user_interaction/partitioning_conf.py:282 lib/user_interaction/partitioning_conf.py:287 msgid "" "{}\n" "\n" "Select which partition to set a filesystem on" msgstr "" -#: lib/user_interaction.py:739 lib/user_interaction.py:746 lib/user_interaction.py:749 lib/user_interaction.py:752 lib/user_interaction.py:751 lib/user_interaction/partitioning_conf.py:289 lib/user_interaction/partitioning_conf.py:294 msgid "Enter a desired filesystem type for the partition: " msgstr "" -#: lib/user_interaction.py:760 lib/menu/selection_menu.py:141 lib/user_interaction.py:767 lib/menu/selection_menu.py:139 lib/menu/selection_menu.py:143 lib/user_interaction.py:770 lib/user_interaction.py:773 lib/user_interaction.py:772 lib/menu/selection_menu.py:407 lib/menu/selection_menu.py:415 lib/menu/selection_menu.py:17 lib/user_interaction/general_conf.py:105 lib/user_interaction/global_menu.py:43 lib/menu/selection_menu.py:53 lib/menu/selection_menu.py:463 lib/menu/global_menu.py:43 msgid "Select Archinstall language" msgstr "" -#: lib/user_interaction.py:765 lib/user_interaction.py:772 lib/user_interaction.py:775 lib/user_interaction.py:778 lib/user_interaction.py:777 lib/user_interaction/disk_conf.py:40 msgid "Wipe all selected drives and use a best-effort default partition layout" msgstr "" -#: lib/user_interaction.py:766 lib/user_interaction.py:773 lib/user_interaction.py:776 lib/user_interaction.py:779 lib/user_interaction.py:778 lib/user_interaction/disk_conf.py:41 msgid "Select what to do with each individual drive (followed by partition usage)" msgstr "" -#: lib/user_interaction.py:769 lib/user_interaction.py:770 lib/user_interaction.py:777 lib/user_interaction.py:780 lib/user_interaction.py:783 lib/user_interaction.py:782 lib/user_interaction/disk_conf.py:45 msgid "Select what you wish to do with the selected block devices" msgstr "" -#: lib/user_interaction.py:822 lib/user_interaction.py:823 lib/user_interaction.py:830 lib/user_interaction.py:833 lib/user_interaction.py:836 lib/user_interaction.py:835 lib/user_interaction/general_conf.py:126 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:847 lib/user_interaction.py:854 lib/user_interaction.py:857 lib/user_interaction.py:860 lib/user_interaction.py:859 lib/user_interaction/general_conf.py:71 msgid "Select Keyboard layout" msgstr "" -#: lib/user_interaction.py:861 lib/user_interaction.py:862 lib/user_interaction.py:869 lib/user_interaction.py:872 lib/user_interaction.py:875 lib/user_interaction.py:874 lib/user_interaction/general_conf.py:92 msgid "Select one of the regions to download packages from" msgstr "" -#: lib/user_interaction.py:883 lib/user_interaction.py:884 lib/user_interaction.py:891 lib/user_interaction.py:894 lib/user_interaction.py:897 lib/user_interaction.py:896 lib/user_interaction/system_conf.py:52 msgid "Select one or more hard drives to use and configure" msgstr "" -#: lib/user_interaction.py:910 lib/user_interaction.py:911 lib/user_interaction.py:918 lib/user_interaction.py:921 lib/user_interaction.py:924 lib/user_interaction.py:923 lib/user_interaction/system_conf.py:80 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:913 lib/user_interaction.py:920 lib/user_interaction.py:923 lib/user_interaction.py:926 lib/user_interaction.py:925 lib/user_interaction/system_conf.py:84 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:915 lib/user_interaction.py:922 lib/user_interaction.py:925 lib/user_interaction.py:928 lib/user_interaction.py:927 lib/user_interaction/system_conf.py:88 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:918 lib/user_interaction.py:925 lib/user_interaction.py:928 lib/user_interaction.py:931 lib/user_interaction.py:930 lib/user_interaction/system_conf.py:92 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:922 lib/user_interaction.py:929 lib/user_interaction.py:932 lib/user_interaction.py:935 lib/user_interaction.py:934 lib/user_interaction/system_conf.py:96 msgid "All open-source (default)" msgstr "" -#: lib/user_interaction.py:940 lib/user_interaction.py:941 lib/user_interaction.py:948 lib/user_interaction.py:951 lib/user_interaction.py:954 lib/user_interaction.py:953 lib/user_interaction/system_conf.py:28 msgid "Choose which kernels to use or leave blank for default \"{}\"" msgstr "" -#: lib/user_interaction.py:954 lib/user_interaction.py:955 lib/user_interaction.py:962 lib/user_interaction.py:965 lib/user_interaction.py:968 lib/user_interaction.py:967 lib/user_interaction/locale_conf.py:16 msgid "Choose which locale language to use" msgstr "" -#: lib/user_interaction.py:968 lib/user_interaction.py:969 lib/user_interaction.py:976 lib/user_interaction.py:979 lib/user_interaction.py:982 lib/user_interaction.py:981 lib/user_interaction/locale_conf.py:29 msgid "Choose which locale encoding to use" msgstr "" -#: lib/user_interaction.py:1009 lib/user_interaction.py:1010 lib/user_interaction.py:1017 lib/user_interaction.py:1020 lib/user_interaction.py:1023 lib/user_interaction.py:1022 lib/user_interaction/backwards_compatible_conf.py:49 msgid "Select one of the values shown below: " msgstr "" -#: lib/user_interaction.py:1050 lib/user_interaction.py:1051 lib/user_interaction.py:1058 lib/user_interaction.py:1061 lib/user_interaction.py:1064 lib/user_interaction.py:1063 lib/user_interaction/backwards_compatible_conf.py:88 msgid "Select one or more of the options below: " msgstr "" -#: lib/disk/filesystem.py:86 lib/disk/filesystem.py:87 msgid "Adding partition...." msgstr "" -#: lib/disk/filesystem.py:139 lib/disk/filesystem.py:141 lib/disk/filesystem.py:142 msgid "You need to enter a valid fs-type in order to continue. See `man parted` for valid fs-type's." msgstr "" -#: lib/profiles.py:89 lib/profiles.py:90 msgid "Error: Listing profiles on URL \"{}\" resulted in:" msgstr "" -#: lib/profiles.py:92 lib/profiles.py:93 msgid "Error: Could not decode \"{}\" result as JSON:" msgstr "" -#: lib/menu/selection_menu.py:146 lib/menu/selection_menu.py:144 lib/menu/selection_menu.py:148 lib/menu/selection_menu.py:412 lib/menu/selection_menu.py:420 lib/user_interaction/global_menu.py:48 lib/menu/selection_menu.py:468 lib/menu/global_menu.py:48 msgid "Select keyboard layout" msgstr "" -#: lib/menu/selection_menu.py:149 lib/menu/selection_menu.py:147 lib/menu/selection_menu.py:151 lib/menu/selection_menu.py:415 lib/menu/selection_menu.py:423 lib/user_interaction/global_menu.py:51 lib/menu/selection_menu.py:471 lib/menu/global_menu.py:51 msgid "Select mirror region" msgstr "" -#: lib/menu/selection_menu.py:154 lib/menu/selection_menu.py:152 lib/menu/selection_menu.py:156 lib/menu/selection_menu.py:420 lib/menu/selection_menu.py:428 lib/user_interaction/global_menu.py:56 lib/menu/selection_menu.py:476 lib/menu/global_menu.py:56 msgid "Select locale language" msgstr "" -#: lib/menu/selection_menu.py:156 lib/menu/selection_menu.py:154 lib/menu/selection_menu.py:158 lib/menu/selection_menu.py:422 lib/menu/selection_menu.py:430 lib/user_interaction/global_menu.py:58 lib/menu/selection_menu.py:478 lib/menu/global_menu.py:58 msgid "Select locale encoding" msgstr "" -#: lib/menu/selection_menu.py:159 lib/menu/selection_menu.py:157 lib/menu/selection_menu.py:161 lib/menu/selection_menu.py:425 lib/menu/selection_menu.py:433 lib/user_interaction/global_menu.py:61 lib/menu/selection_menu.py:481 lib/menu/global_menu.py:61 msgid "Select harddrives" msgstr "" -#: lib/menu/selection_menu.py:163 lib/menu/selection_menu.py:161 lib/menu/selection_menu.py:165 lib/menu/selection_menu.py:429 lib/menu/selection_menu.py:437 lib/user_interaction/global_menu.py:65 lib/menu/selection_menu.py:485 lib/menu/global_menu.py:65 msgid "Select disk layout" msgstr "" -#: lib/menu/selection_menu.py:171 lib/menu/selection_menu.py:169 lib/menu/selection_menu.py:173 lib/menu/selection_menu.py:437 lib/menu/selection_menu.py:445 lib/user_interaction/global_menu.py:73 lib/menu/selection_menu.py:493 lib/menu/global_menu.py:73 msgid "Set encryption password" msgstr "" -#: lib/menu/selection_menu.py:177 lib/menu/selection_menu.py:175 lib/menu/selection_menu.py:179 lib/menu/selection_menu.py:443 lib/menu/selection_menu.py:451 lib/user_interaction/global_menu.py:79 lib/menu/selection_menu.py:499 lib/menu/global_menu.py:79 msgid "Use swap" msgstr "" -#: lib/menu/selection_menu.py:182 lib/menu/selection_menu.py:180 lib/menu/selection_menu.py:184 lib/menu/selection_menu.py:448 lib/menu/selection_menu.py:456 lib/user_interaction/global_menu.py:84 lib/menu/selection_menu.py:504 lib/menu/global_menu.py:84 msgid "Select bootloader" msgstr "" -#: lib/menu/selection_menu.py:188 lib/menu/selection_menu.py:186 lib/menu/selection_menu.py:190 lib/menu/selection_menu.py:454 lib/menu/selection_menu.py:462 lib/user_interaction/global_menu.py:95 lib/menu/selection_menu.py:515 lib/menu/global_menu.py:95 msgid "Set root password" msgstr "" -#: lib/menu/selection_menu.py:193 lib/menu/selection_menu.py:191 lib/menu/selection_menu.py:195 lib/menu/selection_menu.py:459 lib/menu/selection_menu.py:467 lib/user_interaction/global_menu.py:100 lib/menu/selection_menu.py:520 lib/menu/global_menu.py:100 msgid "Specify superuser account" msgstr "" -#: lib/menu/selection_menu.py:199 lib/menu/selection_menu.py:197 lib/menu/selection_menu.py:201 lib/menu/selection_menu.py:465 lib/menu/selection_menu.py:473 lib/user_interaction/global_menu.py:107 lib/menu/selection_menu.py:528 lib/menu/global_menu.py:107 msgid "Specify user account" msgstr "" -#: lib/menu/selection_menu.py:205 lib/menu/selection_menu.py:203 lib/menu/selection_menu.py:207 lib/menu/selection_menu.py:471 lib/menu/selection_menu.py:479 lib/user_interaction/global_menu.py:114 lib/menu/selection_menu.py:535 lib/menu/global_menu.py:114 msgid "Specify profile" msgstr "" -#: lib/menu/selection_menu.py:210 lib/menu/selection_menu.py:208 lib/menu/selection_menu.py:212 lib/menu/selection_menu.py:476 lib/menu/selection_menu.py:484 lib/user_interaction/global_menu.py:119 lib/menu/selection_menu.py:540 lib/menu/global_menu.py:119 msgid "Select audio" msgstr "" -#: lib/menu/selection_menu.py:214 lib/menu/selection_menu.py:212 lib/menu/selection_menu.py:216 lib/menu/selection_menu.py:480 lib/menu/selection_menu.py:488 lib/user_interaction/global_menu.py:123 lib/menu/selection_menu.py:544 lib/menu/global_menu.py:123 msgid "Select kernels" msgstr "" -#: lib/menu/selection_menu.py:219 lib/menu/selection_menu.py:217 lib/menu/selection_menu.py:221 lib/menu/selection_menu.py:485 lib/menu/selection_menu.py:493 lib/user_interaction/global_menu.py:128 lib/menu/selection_menu.py:549 lib/menu/global_menu.py:128 msgid "Additional packages to install" msgstr "" -#: lib/menu/selection_menu.py:224 lib/menu/selection_menu.py:222 lib/menu/selection_menu.py:226 lib/menu/selection_menu.py:490 lib/menu/selection_menu.py:498 lib/user_interaction/global_menu.py:139 lib/menu/selection_menu.py:560 lib/menu/global_menu.py:139 msgid "Configure network" msgstr "" -#: lib/menu/selection_menu.py:232 lib/menu/selection_menu.py:230 lib/menu/selection_menu.py:234 lib/menu/selection_menu.py:498 lib/menu/selection_menu.py:506 lib/user_interaction/global_menu.py:150 lib/menu/selection_menu.py:571 lib/menu/global_menu.py:150 msgid "Set automatic time sync (NTP)" msgstr "" -#: lib/menu/selection_menu.py:310 lib/menu/selection_menu.py:308 lib/menu/selection_menu.py:315 lib/menu/selection_menu.py:527 lib/menu/selection_menu.py:535 lib/user_interaction/global_menu.py:187 lib/menu/selection_menu.py:608 lib/menu/global_menu.py:187 msgid "Install ({} config(s) missing)" msgstr "" -#: lib/menu/selection_menu.py:373 lib/menu/selection_menu.py:371 lib/menu/selection_menu.py:378 lib/menu/selection_menu.py:591 lib/menu/selection_menu.py:599 lib/user_interaction/global_menu.py:249 lib/menu/selection_menu.py:669 lib/menu/global_menu.py:249 msgid "" "You decided to skip harddrive selection\n" "and will use whatever drive-setup is mounted at {} (experimental)\n" @@ -355,374 +274,402 @@ msgid "" "Do you wish to continue?" msgstr "" -#: lib/disk/filesystem.py:97 lib/disk/filesystem.py:98 msgid "Re-using partition instance: {}" msgstr "" -#: lib/user_interaction.py:590 lib/user_interaction.py:593 lib/user_interaction.py:596 lib/user_interaction.py:595 lib/user_interaction/partitioning_conf.py:119 lib/user_interaction/partitioning_conf.py:120 msgid "Create a new partition" msgstr "" -#: lib/user_interaction.py:592 lib/user_interaction.py:595 lib/user_interaction.py:598 lib/user_interaction.py:597 lib/user_interaction/partitioning_conf.py:121 lib/user_interaction/partitioning_conf.py:122 msgid "Delete a partition" msgstr "" -#: lib/user_interaction.py:593 lib/user_interaction.py:596 lib/user_interaction.py:599 lib/user_interaction.py:598 lib/user_interaction/partitioning_conf.py:122 lib/user_interaction/partitioning_conf.py:123 msgid "Clear/Delete all partitions" msgstr "" -#: lib/user_interaction.py:594 lib/user_interaction.py:597 lib/user_interaction.py:600 lib/user_interaction.py:599 lib/user_interaction/partitioning_conf.py:123 lib/user_interaction/partitioning_conf.py:124 msgid "Assign mount-point for a partition" msgstr "" -#: lib/user_interaction.py:595 lib/user_interaction.py:598 lib/user_interaction.py:601 lib/user_interaction.py:600 lib/user_interaction/partitioning_conf.py:124 lib/user_interaction/partitioning_conf.py:125 msgid "Mark/Unmark a partition to be formatted (wipes data)" msgstr "" -#: lib/user_interaction.py:596 lib/user_interaction.py:599 lib/user_interaction.py:602 lib/user_interaction.py:601 lib/user_interaction/partitioning_conf.py:125 lib/user_interaction/partitioning_conf.py:126 msgid "Mark/Unmark a partition as encrypted" msgstr "" -#: lib/user_interaction.py:597 lib/user_interaction.py:600 lib/user_interaction.py:603 lib/user_interaction.py:602 lib/user_interaction/partitioning_conf.py:126 lib/user_interaction/partitioning_conf.py:127 msgid "Mark/Unmark a partition as bootable (automatic for /boot)" msgstr "" -#: lib/user_interaction.py:598 lib/user_interaction.py:601 lib/user_interaction.py:604 lib/user_interaction.py:603 lib/user_interaction/partitioning_conf.py:127 lib/user_interaction/partitioning_conf.py:128 msgid "Set desired filesystem for a partition" msgstr "" -#: lib/menu/selection_menu.py:239 lib/menu/selection_menu.py:237 lib/menu/selection_menu.py:241 lib/menu/selection_menu.py:270 lib/menu/selection_menu.py:507 lib/menu/selection_menu.py:515 lib/user_interaction/global_menu.py:167 lib/menu/selection_menu.py:588 lib/menu/global_menu.py:167 msgid "Abort" msgstr "" -#: lib/menu/selection_menu.py:183 lib/menu/selection_menu.py:187 lib/menu/selection_menu.py:451 lib/menu/selection_menu.py:459 lib/user_interaction/global_menu.py:89 lib/menu/selection_menu.py:509 lib/menu/global_menu.py:89 msgid "Specify hostname" msgstr "" -#: lib/menu/selection_menu.py:228 lib/menu/selection_menu.py:492 lib/menu/selection_menu.py:500 lib/user_interaction/global_menu.py:141 lib/menu/selection_menu.py:562 lib/menu/global_menu.py:141 msgid "Not configured, unavailable unless setup manually" msgstr "" -#: lib/menu/selection_menu.py:231 lib/menu/selection_menu.py:495 lib/menu/selection_menu.py:503 lib/user_interaction/global_menu.py:145 lib/menu/selection_menu.py:566 lib/menu/global_menu.py:145 msgid "Select timezone" msgstr "" -#: lib/menu/selection_menu.py:266 lib/menu/selection_menu.py:276 lib/menu/selection_menu.py:312 msgid "Set/Modify the below options" msgstr "" -#: lib/menu/selection_menu.py:272 msgid "Install" msgstr "" -#: lib/menu/menu.py:68 lib/menu/menu.py:75 lib/menu/menu.py:119 msgid "" "Use ESC to skip\n" "\n" msgstr "" -#: lib/user_interaction.py:591 lib/user_interaction.py:594 lib/user_interaction.py:597 lib/user_interaction.py:596 lib/user_interaction/partitioning_conf.py:120 lib/user_interaction/partitioning_conf.py:121 msgid "Suggest partition layout" msgstr "" -#: lib/user_interaction.py:101 lib/user_interaction/utils.py:43 msgid "Enter a password: " msgstr "" -#: lib/disk/filesystem.py:117 lib/disk/filesystem.py:118 msgid "Enter a encryption password for {}" msgstr "" -#: lib/menu/selection_menu.py:174 lib/menu/selection_menu.py:567 lib/menu/selection_menu.py:575 lib/user_interaction/global_menu.py:225 lib/menu/selection_menu.py:646 lib/menu/global_menu.py:225 msgid "Enter disk encryption password (leave blank for no encryption): " msgstr "" -#: lib/menu/selection_menu.py:407 lib/menu/selection_menu.py:617 lib/menu/selection_menu.py:625 msgid "Create a required super-user with sudo privileges: " msgstr "" -#: lib/menu/selection_menu.py:347 lib/menu/selection_menu.py:554 lib/menu/selection_menu.py:562 lib/user_interaction/global_menu.py:220 lib/menu/selection_menu.py:641 lib/menu/global_menu.py:220 msgid "Enter root password (leave blank to disable root): " msgstr "" -#: lib/user_interaction.py:307 lib/user_interaction.py:324 lib/user_interaction/manage_users_conf.py:86 lib/user_interaction/manage_users_conf.py:121 msgid "Password for user \"{}\": " msgstr "" -#: lib/user_interaction.py:405 lib/user_interaction.py:408 lib/user_interaction.py:407 lib/user_interaction/general_conf.py:152 msgid "Verifying that additional packages exist (this might take a few seconds)" msgstr "" -#: lib/user_interaction.py:281 lib/user_interaction/general_conf.py:22 msgid "Would you like to use automatic time synchronization (NTP) with the default time servers?\n" msgstr "" -#: lib/user_interaction.py:282 lib/user_interaction/general_conf.py:23 msgid "" "Hardware time and other post-configuration steps might be required in order for NTP to work.\n" "For more information, please check the Arch wiki" msgstr "" -#: lib/menu/selection_menu.py:411 lib/menu/selection_menu.py:621 lib/menu/selection_menu.py:629 msgid "Enter a username to create an additional user (leave blank to skip): " msgstr "" -#: lib/menu/menu.py:116 msgid "Use ESC to skip\n" msgstr "" -#: lib/menu/list_manager.py:117 msgid "" "\n" " Choose an object from the list, and select one of the available actions for it to execute" msgstr "" -#: lib/menu/list_manager.py:130 lib/user_interaction/subvolume_config.py:90 msgid "Cancel" msgstr "" -#: lib/menu/list_manager.py:131 msgid "Confirm and exit" msgstr "" -#: lib/menu/list_manager.py:135 lib/menu/list_manager.py:228 lib/menu/list_manager.py:251 lib/menu/list_manager.py:276 lib/user_interaction/subvolume_config.py:12 lib/user_interaction/subvolume_config.py:44 lib/user_interaction/subvolume_config.py:78 lib/user_interaction/subvolume_config.py:82 lib/user_interaction/subvolume_config.py:85 msgid "Add" msgstr "" -#: lib/menu/list_manager.py:135 lib/menu/list_manager.py:231 lib/menu/list_manager.py:255 lib/user_interaction/subvolume_config.py:78 msgid "Copy" msgstr "" -#: lib/menu/list_manager.py:135 lib/menu/list_manager.py:237 lib/menu/list_manager.py:261 lib/user_interaction/subvolume_config.py:82 lib/user_interaction/subvolume_config.py:85 msgid "Edit" msgstr "" -#: lib/menu/list_manager.py:135 lib/menu/list_manager.py:242 lib/menu/list_manager.py:264 lib/user_interaction/subvolume_config.py:40 msgid "Delete" msgstr "" -#: lib/menu/list_manager.py:185 msgid "Select an action for < {} >" msgstr "" -#: lib/menu/list_manager.py:229 -msgid "Add :" -msgstr "" - -#: lib/menu/list_manager.py:233 -msgid "Copy to :" -msgstr "" - -#: lib/menu/list_manager.py:240 -msgid "Edite :" -msgstr "" - -#: lib/menu/list_manager.py:252 -msgid "Key :" -msgstr "" - -#: lib/menu/list_manager.py:253 -msgid "Value :" -msgstr "" - -#: lib/menu/list_manager.py:257 msgid "Copy to new key:" msgstr "" -#: lib/menu/list_manager.py:262 -#, python-brace-format -msgid "Edit {origkey} :" -msgstr "" - -#: lib/models/network_configuration.py:53 lib/models/network_configuration.py:74 msgid "Unknown nic type: {}. Possible values are {}" msgstr "" -#: lib/configuration.py:75 msgid "" "\n" "This is your chosen configuration:" msgstr "" -#: lib/pacman.py:18 msgid "Pacman is already running, waiting maximum 10 minutes for it to terminate." msgstr "" -#: lib/pacman.py:25 msgid "Pre-existing pacman lock never exited. Please clean up any existing pacman sessions before using archinstall." msgstr "" -#: lib/user_interaction/general_conf.py:174 msgid "Choose which optional additional repositories to enable" msgstr "" -#: lib/user_interaction/manage_users_conf.py:32 -msgid "Add an user" +msgid "Add a user" msgstr "" -#: lib/user_interaction/manage_users_conf.py:33 msgid "Change password" msgstr "" -#: lib/user_interaction/manage_users_conf.py:34 msgid "Promote/Demote user" msgstr "" -#: lib/user_interaction/manage_users_conf.py:35 msgid "Delete User" msgstr "" -#: lib/user_interaction/manage_users_conf.py:99 msgid "" "\n" "Define a new user\n" msgstr "" -#: lib/user_interaction/manage_users_conf.py:100 msgid "User Name : " msgstr "" -#: lib/user_interaction/manage_users_conf.py:115 msgid "Should {} be a superuser (sudoer)?" msgstr "" -#: lib/user_interaction/manage_users_conf.py:161 msgid "Define users with sudo privilege: " msgstr "" -#: lib/user_interaction/network_conf.py:24 msgid "No network configuration" msgstr "" -#: lib/user_interaction/partitioning_conf.py:128 lib/user_interaction/partitioning_conf.py:129 msgid "Set desired subvolumes on a btrfs partition" msgstr "" -#: lib/user_interaction/partitioning_conf.py:296 lib/user_interaction/partitioning_conf.py:303 msgid "" "{}\n" "\n" "Select which partition to set subvolumes on" msgstr "" -#: lib/user_interaction/partitioning_conf.py:305 lib/user_interaction/partitioning_conf.py:312 msgid "Manage btrfs subvolumes for current partition" msgstr "" -#: lib/user_interaction/save_conf.py:24 lib/user_interaction/save_conf.py:29 msgid "No configuration" msgstr "" -#: lib/user_interaction/save_conf.py:42 msgid "Save user configuration" msgstr "" -#: lib/user_interaction/save_conf.py:43 msgid "Save user credentials" msgstr "" -#: lib/user_interaction/save_conf.py:44 msgid "Save disk layout" msgstr "" -#: lib/user_interaction/save_conf.py:45 msgid "Save all" msgstr "" -#: lib/user_interaction/save_conf.py:48 msgid "Choose which configuration to save" msgstr "" -#: lib/user_interaction/save_conf.py:59 msgid "Enter a directory for the configuration(s) to be saved: " msgstr "" -#: lib/user_interaction/save_conf.py:63 msgid "Not a valid directory: {}" msgstr "" -#: lib/user_interaction/utils.py:32 msgid "The password you are using seems to be weak," msgstr "" -#: lib/user_interaction/utils.py:33 msgid "are you sure you want to use it?" msgstr "" -#: lib/user_interaction/global_menu.py:134 lib/menu/selection_menu.py:555 lib/menu/global_menu.py:134 msgid "Additional repositories to enable" msgstr "" -#: lib/user_interaction/global_menu.py:155 lib/menu/selection_menu.py:576 lib/menu/global_menu.py:155 msgid "Save configuration" msgstr "" -#: lib/user_interaction/global_menu.py:192 lib/menu/selection_menu.py:613 lib/menu/global_menu.py:192 msgid "Missing configurations:\n" msgstr "" -#: lib/user_interaction/global_menu.py:210 lib/menu/selection_menu.py:631 lib/menu/global_menu.py:210 msgid "Either root-password or at least 1 superuser must be specified" msgstr "" -#: lib/user_interaction/global_menu.py:275 lib/menu/selection_menu.py:695 lib/menu/global_menu.py:275 msgid "Manage superuser accounts: " msgstr "" -#: lib/user_interaction/global_menu.py:279 lib/menu/selection_menu.py:699 lib/menu/global_menu.py:279 msgid "Manage ordinary user accounts: " msgstr "" -#: lib/user_interaction/subvolume_config.py:17 msgid " Subvolume :{:16}" msgstr "" -#: lib/user_interaction/subvolume_config.py:19 lib/user_interaction/subvolume_config.py:22 msgid " mounted at {:16}" msgstr "" -#: lib/user_interaction/subvolume_config.py:26 msgid " with option {}" msgstr "" -#: lib/user_interaction/subvolume_config.py:46 msgid "" "\n" " Fill the desired values for a new subvolume \n" msgstr "" -#: lib/user_interaction/subvolume_config.py:77 msgid "Subvolume name " msgstr "" -#: lib/user_interaction/subvolume_config.py:81 msgid "Subvolume mountpoint" msgstr "" -#: lib/user_interaction/subvolume_config.py:84 msgid "Subvolume options" msgstr "" -#: lib/user_interaction/subvolume_config.py:87 msgid "Save" msgstr "" -#: lib/user_interaction/subvolume_config.py:121 msgid "Subvolume name :" msgstr "" -#: lib/user_interaction/subvolume_config.py:124 msgid "Select a mount point :" msgstr "" -#: lib/user_interaction/subvolume_config.py:128 msgid "Select the desired subvolume options " msgstr "" -#: lib/user_interaction/manage_users_conf.py:161 msgid "Define users with sudo privilege, by username: " msgstr "" -#: lib/installer.py:152 msgid "[!] A log file has been created here: {}" msgstr "" + +msgid "Would you like to use BTRFS subvolumes with a default structure?" +msgstr "" + +msgid "Would you like to use BTRFS compression?" +msgstr "" + +msgid "Would you like to create a separate partition for /home?" +msgstr "" + +msgid "The selected drives do not have the minimum capacity required for an automatic suggestion\n" +msgstr "" + +msgid "Minimum capacity for /home partition: {}GB\n" +msgstr "" + +msgid "Minimum capacity for Arch Linux partition: {}GB" +msgstr "" + +msgid "Continue" +msgstr "" + +msgid "yes" +msgstr "" + +msgid "no" +msgstr "" + +msgid "set: {}" +msgstr "" + +msgid "Manual configuration setting must be a list" +msgstr "" + +msgid "No iface specified for manual configuration" +msgstr "" + +msgid "Manual nic configuration with no auto DHCP requires an IP address" +msgstr "" + +msgid "Add interface" +msgstr "" + +msgid "Edit interface" +msgstr "" + +msgid "Delete interface" +msgstr "" + +msgid "Select interface to add" +msgstr "" + +msgid "Manual configuration" +msgstr "" + +msgid "Mark/Unmark a partition as compressed (btrfs only)" +msgstr "" + +msgid "The password you are using seems to be weak, are you sure you want to use it?" +msgstr "" + +msgid "Provides a selection of desktop environments and tiling window managers, e.g. gnome, kde, sway" +msgstr "" + +msgid "Select your desired desktop environment" +msgstr "" + +msgid "A very basic installation that allows you to customize Arch Linux as you see fit." +msgstr "" + +msgid "Provides a selection of various server packages to install and enable, e.g. httpd, nginx, mariadb" +msgstr "" + +msgid "Choose which servers to install, if none then a minimal installation wil be done" +msgstr "" + +msgid "Installs a minimal system as well as xorg and graphics drivers." +msgstr "" + +msgid "Press Enter to continue." +msgstr "" + +msgid "Would you like to chroot into the newly created installation and perform post-installation configuration?" +msgstr "" + +msgid "Are you sure you want to reset this setting?" +msgstr "" + +msgid "Select one or more hard drives to use and configure\n" +msgstr "" + +msgid "Any modifications to the existing setting will reset the disk layout!" +msgstr "" + +msgid "If you reset the harddrive selection this will also reset the current disk layout. Are you sure?" +msgstr "" + +msgid "Save and exit" +msgstr "" + +msgid "" +"{}\n" +"contains queued partitions, this will remove those, are you sure?" +msgstr "" + +msgid "No audio server" +msgstr "" + +msgid "(default)" +msgstr "" + +msgid "Use ESC to skip" +msgstr "" + +msgid "" +"Use CTRL+C to reset current selection\n" +"\n" +msgstr "" + +msgid "Copy to: " +msgstr "" + +msgid "Edit: " +msgstr "" + +msgid "Key: " +msgstr "" + +msgid "Edit {}: " +msgstr "" + +msgid "Add :" +msgstr "" + +msgid "Value :" +msgstr "" diff --git a/archinstall/locales/es/LC_MESSAGES/base.mo b/archinstall/locales/es/LC_MESSAGES/base.mo index 19ad37bf..dddbb326 100644 Binary files a/archinstall/locales/es/LC_MESSAGES/base.mo and b/archinstall/locales/es/LC_MESSAGES/base.mo differ diff --git a/archinstall/locales/es/LC_MESSAGES/base.po b/archinstall/locales/es/LC_MESSAGES/base.po index 3efcf608..abcec69b 100644 --- a/archinstall/locales/es/LC_MESSAGES/base.po +++ b/archinstall/locales/es/LC_MESSAGES/base.po @@ -11,146 +11,81 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 3.0.1\n" -#: lib/installer.py:144 lib/installer.py:152 msgid "[!] A log file has been created here: {} {}" msgstr "[!] Se ha creado un archivo de registro aquí: {} {}" -#: lib/installer.py:145 lib/installer.py:153 msgid " Please submit this issue (and file) to https://github.com/archlinux/archinstall/issues" msgstr " Por favor envíe este problema (y archivo) a https://github.com/archlinux/archinstall/issues" -#: lib/user_interaction.py:83 lib/user_interaction/utils.py:86 msgid "Do you really want to abort?" msgstr "¿Realmente desea abortar?" -#: lib/user_interaction.py:101 lib/user_interaction.py:104 -#: lib/user_interaction/utils.py:53 msgid "And one more time for verification: " msgstr "Una última vez para verificación: " -#: lib/user_interaction.py:272 lib/user_interaction.py:275 -#: lib/user_interaction/system_conf.py:142 msgid "Would you like to use swap on zram?" msgstr "¿Te gustaría usar swap en zram?" -#: lib/user_interaction.py:285 lib/user_interaction.py:288 -#: lib/user_interaction/general_conf.py:33 msgid "Desired hostname for the installation: " msgstr "Nombre de host deseado para la instalación: " -#: lib/user_interaction.py:290 lib/user_interaction.py:293 msgid "Username for required superuser with sudo privileges: " msgstr "Nombre de usuario para el superusuario con privilegios sudo: " -#: lib/user_interaction.py:310 lib/user_interaction.py:313 -#: lib/user_interaction/manage_users_conf.py:167 msgid "Any additional users to install (leave blank for no users): " msgstr "Algún usuario adicional a instalar (deje en blanco para no agregar ninguno): " -#: lib/user_interaction.py:324 lib/user_interaction.py:327 msgid "Should this user be a superuser (sudoer)?" msgstr "Debería este usuario ser un superusuario (sudoer)?" -#: lib/user_interaction.py:340 lib/user_interaction.py:343 -#: lib/user_interaction.py:346 lib/user_interaction/general_conf.py:41 msgid "Select a timezone" msgstr "Selecciona una zona horaria" -#: lib/user_interaction.py:354 lib/user_interaction.py:357 -#: lib/user_interaction.py:360 lib/user_interaction.py:359 -#: lib/user_interaction/system_conf.py:115 msgid "Would you like to use GRUB as a bootloader instead of systemd-boot?" msgstr "Te gustaría usar GRUB como gestor de arranque en lugar de systemd-boot?" -#: lib/user_interaction.py:364 lib/user_interaction.py:367 -#: lib/user_interaction.py:370 lib/user_interaction.py:369 -#: lib/user_interaction/system_conf.py:125 msgid "Choose a bootloader" msgstr "Elige un gestor de arranque" -#: lib/user_interaction.py:380 lib/user_interaction.py:383 -#: lib/user_interaction.py:386 lib/user_interaction.py:385 -#: lib/user_interaction/general_conf.py:53 msgid "Choose an audio server" msgstr "Elige un servidor de audio" -#: lib/user_interaction.py:391 lib/user_interaction.py:394 -#: lib/user_interaction.py:397 lib/user_interaction.py:396 -#: lib/user_interaction/general_conf.py:138 msgid "Only packages such as base, base-devel, linux, linux-firmware, efibootmgr and optional profile packages are installed." msgstr "Solo paquetes como base, base-devel, linux, linux-firmware, efibootmgr y paquetes opcionales de perfil se instalan." -#: lib/user_interaction.py:392 lib/user_interaction.py:395 -#: lib/user_interaction.py:398 lib/user_interaction.py:397 -#: lib/user_interaction/general_conf.py:139 msgid "If you desire a web browser, such as firefox or chromium, you may specify it in the following prompt." msgstr "Si desea un navegador web, como firefox o chromium, puede especificarlo en el siguiente diálogo." -#: lib/user_interaction.py:396 lib/user_interaction.py:399 -#: lib/user_interaction.py:402 lib/user_interaction.py:401 -#: lib/user_interaction/general_conf.py:143 msgid "Write additional packages to install (space separated, leave blank to skip): " msgstr "Escriba paquetes adicionales para instalar (separados por espacios, deja en blanco para omitir): " -#: lib/user_interaction.py:419 lib/user_interaction.py:422 -#: lib/user_interaction.py:425 lib/user_interaction.py:424 -#: lib/user_interaction/network_conf.py:25 msgid "Copy ISO network configuration to installation" msgstr "Copiar la configuración de red ISO a la instalación" -#: lib/user_interaction.py:420 lib/user_interaction.py:423 -#: lib/user_interaction.py:426 lib/user_interaction.py:425 -#: lib/user_interaction/network_conf.py:26 msgid "Use NetworkManager (necessary to configure internet graphically in GNOME and KDE)" msgstr "Usar NetworkManager (necesario para configurar internet gráficamente en GNOME y KDE)" -#: lib/user_interaction.py:428 lib/user_interaction.py:431 -#: lib/user_interaction.py:434 lib/user_interaction.py:433 -#: lib/user_interaction/network_conf.py:43 msgid "Select one network interface to configure" msgstr "Selecciona una interfaz de red para configurar" -#: lib/user_interaction.py:441 lib/user_interaction.py:444 -#: lib/user_interaction.py:447 lib/user_interaction.py:446 -#: lib/user_interaction/network_conf.py:70 msgid "Select which mode to configure for \"{}\" or skip to use default mode \"{}\"" msgstr "Selecciona el modo para configurar \"{}\" u omitir para usar el modo \"{}\" predeterminado" -#: lib/user_interaction.py:446 lib/user_interaction.py:449 -#: lib/user_interaction.py:452 lib/user_interaction.py:451 -#: lib/user_interaction/network_conf.py:75 msgid "Enter the IP and subnet for {} (example: 192.168.0.5/24): " msgstr "Escriba la IP y subred para {} (ejemplo: 192.168.0.5/24): " -#: lib/user_interaction.py:461 lib/user_interaction.py:464 -#: lib/user_interaction.py:467 lib/user_interaction.py:466 -#: lib/user_interaction/network_conf.py:86 msgid "Enter your gateway (router) IP address or leave blank for none: " msgstr "Escriba la IP de su puerta de enlace (router) o deje en blanco para no usar ninguna: " -#: lib/user_interaction.py:476 lib/user_interaction.py:479 -#: lib/user_interaction.py:482 lib/user_interaction.py:481 -#: lib/user_interaction/network_conf.py:102 msgid "Enter your DNS servers (space separated, blank for none): " msgstr "Escriba los servidores DNS (separados por espacios, en blanco para no usar ninguno): " -#: lib/user_interaction.py:510 lib/user_interaction.py:513 -#: lib/user_interaction.py:516 lib/user_interaction.py:515 -#: lib/user_interaction/disk_conf.py:23 msgid "Select which filesystem your main partition should use" msgstr "Selecciona el sistema de archivos que su partición principal debe usar" -#: lib/user_interaction.py:556 lib/user_interaction.py:559 -#: lib/user_interaction.py:562 lib/user_interaction.py:561 -#: lib/user_interaction/partitioning_conf.py:64 -#: lib/user_interaction/partitioning_conf.py:63 msgid "Current partition layout" msgstr "Distribución actual de las particiones" -#: lib/user_interaction.py:607 lib/user_interaction.py:614 -#: lib/user_interaction.py:617 lib/user_interaction.py:620 -#: lib/user_interaction.py:619 lib/user_interaction/partitioning_conf.py:145 -#: lib/user_interaction/partitioning_conf.py:146 msgid "" "Select what to do with\n" "{}" @@ -158,43 +93,18 @@ msgstr "" "Selecciona qué hacer con\n" "{}" -#: lib/user_interaction.py:624 lib/user_interaction.py:709 -#: lib/user_interaction.py:631 lib/user_interaction.py:716 -#: lib/user_interaction.py:634 lib/user_interaction.py:719 -#: lib/user_interaction.py:637 lib/user_interaction.py:722 -#: lib/user_interaction.py:636 lib/user_interaction.py:721 -#: lib/user_interaction/partitioning_conf.py:162 -#: lib/user_interaction/partitioning_conf.py:255 -#: lib/user_interaction/partitioning_conf.py:165 -#: lib/user_interaction/partitioning_conf.py:260 msgid "Enter a desired filesystem type for the partition" msgstr "Escriba el tipo de sistema de archivos que desea para la partición" -#: lib/user_interaction.py:626 lib/user_interaction.py:633 -#: lib/user_interaction.py:636 lib/user_interaction.py:639 -#: lib/user_interaction.py:638 lib/user_interaction/partitioning_conf.py:164 -#: lib/user_interaction/partitioning_conf.py:167 msgid "Enter the start sector (percentage or block number, default: {}): " msgstr "Escriba el sector de inicio (porcentaje o número de bloque, por defecto: {}): " -#: lib/user_interaction.py:635 lib/user_interaction.py:642 -#: lib/user_interaction.py:645 lib/user_interaction.py:648 -#: lib/user_interaction.py:647 lib/user_interaction/partitioning_conf.py:174 -#: lib/user_interaction/partitioning_conf.py:177 msgid "Enter the end sector of the partition (percentage or block number, ex: {}): " msgstr "Escriba el sector final de la partición (porcentaje o número de bloque, ej: {}): " -#: lib/user_interaction.py:661 lib/user_interaction.py:668 -#: lib/user_interaction.py:671 lib/user_interaction.py:674 -#: lib/user_interaction.py:673 lib/user_interaction/partitioning_conf.py:203 -#: lib/user_interaction/partitioning_conf.py:208 msgid "{} contains queued partitions, this will remove those, are you sure?" msgstr "{} contiene particiones en cola, esto eliminará esas particiones, ¿estás seguro?" -#: lib/user_interaction.py:674 lib/user_interaction.py:681 -#: lib/user_interaction.py:684 lib/user_interaction.py:687 -#: lib/user_interaction.py:686 lib/user_interaction/partitioning_conf.py:216 -#: lib/user_interaction/partitioning_conf.py:221 msgid "" "{}\n" "\n" @@ -204,10 +114,6 @@ msgstr "" "\n" "Selecciona por índice las particiones a eliminar" -#: lib/user_interaction.py:682 lib/user_interaction.py:689 -#: lib/user_interaction.py:692 lib/user_interaction.py:695 -#: lib/user_interaction.py:694 lib/user_interaction/partitioning_conf.py:226 -#: lib/user_interaction/partitioning_conf.py:231 msgid "" "{}\n" "\n" @@ -217,24 +123,12 @@ msgstr "" "\n" "Selecciona por índice la ubicación de la partición a montar" -#: lib/user_interaction.py:686 lib/user_interaction.py:693 -#: lib/user_interaction.py:696 lib/user_interaction.py:699 -#: lib/user_interaction.py:698 lib/user_interaction/partitioning_conf.py:231 -#: lib/user_interaction/partitioning_conf.py:236 msgid " * Partition mount-points are relative to inside the installation, the boot would be /boot as an example." msgstr " * Los puntos de montaje de partición son relativos a la instalación, el arranque sería /boot como ejemplo." -#: lib/user_interaction.py:687 lib/user_interaction.py:694 -#: lib/user_interaction.py:697 lib/user_interaction.py:700 -#: lib/user_interaction.py:699 lib/user_interaction/partitioning_conf.py:233 -#: lib/user_interaction/partitioning_conf.py:238 msgid "Select where to mount partition (leave blank to remove mountpoint): " msgstr "Selecciona dónde montar la partición (deja en blanco para eliminar el punto de montaje): " -#: lib/user_interaction.py:698 lib/user_interaction.py:705 -#: lib/user_interaction.py:708 lib/user_interaction.py:711 -#: lib/user_interaction.py:710 lib/user_interaction/partitioning_conf.py:244 -#: lib/user_interaction/partitioning_conf.py:249 msgid "" "{}\n" "\n" @@ -244,10 +138,6 @@ msgstr "" "\n" "Selecciona la partición a ocultar para formatear" -#: lib/user_interaction.py:717 lib/user_interaction.py:724 -#: lib/user_interaction.py:727 lib/user_interaction.py:730 -#: lib/user_interaction.py:729 lib/user_interaction/partitioning_conf.py:265 -#: lib/user_interaction/partitioning_conf.py:270 msgid "" "{}\n" "\n" @@ -257,10 +147,6 @@ msgstr "" "\n" "Selecciona la partición a marcar como encriptada" -#: lib/user_interaction.py:725 lib/user_interaction.py:732 -#: lib/user_interaction.py:735 lib/user_interaction.py:738 -#: lib/user_interaction.py:737 lib/user_interaction/partitioning_conf.py:274 -#: lib/user_interaction/partitioning_conf.py:279 msgid "" "{}\n" "\n" @@ -270,10 +156,6 @@ msgstr "" "\n" "Selecciona la partición a marcar como bootable" -#: lib/user_interaction.py:732 lib/user_interaction.py:739 -#: lib/user_interaction.py:742 lib/user_interaction.py:745 -#: lib/user_interaction.py:744 lib/user_interaction/partitioning_conf.py:282 -#: lib/user_interaction/partitioning_conf.py:287 msgid "" "{}\n" "\n" @@ -283,96 +165,42 @@ msgstr "" "\n" "Selecciona la partición a configurar con un sistema de archivos" -#: lib/user_interaction.py:739 lib/user_interaction.py:746 -#: lib/user_interaction.py:749 lib/user_interaction.py:752 -#: lib/user_interaction.py:751 lib/user_interaction/partitioning_conf.py:289 -#: lib/user_interaction/partitioning_conf.py:294 msgid "Enter a desired filesystem type for the partition: " msgstr "Escriba el tipo de sistema de archivos que desea para la partición: " -#: lib/user_interaction.py:760 lib/menu/selection_menu.py:141 -#: lib/user_interaction.py:767 lib/menu/selection_menu.py:139 -#: lib/menu/selection_menu.py:143 lib/user_interaction.py:770 -#: lib/user_interaction.py:773 lib/user_interaction.py:772 -#: lib/menu/selection_menu.py:407 lib/menu/selection_menu.py:415 -#: lib/menu/selection_menu.py:17 lib/user_interaction/general_conf.py:105 -#: lib/user_interaction/global_menu.py:43 lib/menu/selection_menu.py:53 -#: lib/menu/selection_menu.py:463 lib/menu/global_menu.py:43 msgid "Select Archinstall language" msgstr "Selecciona el idioma de Archinstall" -#: lib/user_interaction.py:765 lib/user_interaction.py:772 -#: lib/user_interaction.py:775 lib/user_interaction.py:778 -#: lib/user_interaction.py:777 lib/user_interaction/disk_conf.py:40 msgid "Wipe all selected drives and use a best-effort default partition layout" msgstr "Limpiar todos los discos seleccionados y usar una distribución de particiones por defecto" -#: lib/user_interaction.py:766 lib/user_interaction.py:773 -#: lib/user_interaction.py:776 lib/user_interaction.py:779 -#: lib/user_interaction.py:778 lib/user_interaction/disk_conf.py:41 msgid "Select what to do with each individual drive (followed by partition usage)" msgstr "Selecciona qué hacer con cada disco individual (seguido por el uso de partición)" -#: lib/user_interaction.py:769 lib/user_interaction.py:770 -#: lib/user_interaction.py:777 lib/user_interaction.py:780 -#: lib/user_interaction.py:783 lib/user_interaction.py:782 -#: lib/user_interaction/disk_conf.py:45 msgid "Select what you wish to do with the selected block devices" msgstr "Selecciona qué quieres hacer con los dispositivos de bloque seleccionados" -#: lib/user_interaction.py:822 lib/user_interaction.py:823 -#: lib/user_interaction.py:830 lib/user_interaction.py:833 -#: lib/user_interaction.py:836 lib/user_interaction.py:835 -#: lib/user_interaction/general_conf.py:126 msgid "This is a list of pre-programmed profiles, they might make it easier to install things like desktop environments" msgstr "Esta es una lista de perfiles pre-programados, pueden facilitar la instalación de aplicaciones como entornos de escritorio" -#: lib/user_interaction.py:846 lib/user_interaction.py:847 -#: lib/user_interaction.py:854 lib/user_interaction.py:857 -#: lib/user_interaction.py:860 lib/user_interaction.py:859 -#: lib/user_interaction/general_conf.py:71 msgid "Select Keyboard layout" msgstr "Selecciona la distribución del teclado" -#: lib/user_interaction.py:861 lib/user_interaction.py:862 -#: lib/user_interaction.py:869 lib/user_interaction.py:872 -#: lib/user_interaction.py:875 lib/user_interaction.py:874 -#: lib/user_interaction/general_conf.py:92 msgid "Select one of the regions to download packages from" msgstr "Selecciona una de las regiones para descargar paquetes" -#: lib/user_interaction.py:883 lib/user_interaction.py:884 -#: lib/user_interaction.py:891 lib/user_interaction.py:894 -#: lib/user_interaction.py:897 lib/user_interaction.py:896 -#: lib/user_interaction/system_conf.py:52 msgid "Select one or more hard drives to use and configure" msgstr "Selecciona uno o más discos duros para usar y configurar" -#: lib/user_interaction.py:910 lib/user_interaction.py:911 -#: lib/user_interaction.py:918 lib/user_interaction.py:921 -#: lib/user_interaction.py:924 lib/user_interaction.py:923 -#: lib/user_interaction/system_conf.py:80 msgid "For the best compatibility with your AMD hardware, you may want to use either the all open-source or AMD / ATI options." msgstr "Para la mejor compatibilidad con tu hardware AMD, puedes querer usar tanto la opción de todo código abierto como la opción AMD / ATI." -#: lib/user_interaction.py:912 lib/user_interaction.py:913 -#: lib/user_interaction.py:920 lib/user_interaction.py:923 -#: lib/user_interaction.py:926 lib/user_interaction.py:925 -#: lib/user_interaction/system_conf.py:84 msgid "For the best compatibility with your Intel hardware, you may want to use either the all open-source or Intel options.\n" msgstr "Para la mejor compatibilidad con tu hardware Intel, puedes querer usar tanto la opción de todo código abierto como la opción Intel.\n" -#: lib/user_interaction.py:914 lib/user_interaction.py:915 -#: lib/user_interaction.py:922 lib/user_interaction.py:925 -#: lib/user_interaction.py:928 lib/user_interaction.py:927 -#: lib/user_interaction/system_conf.py:88 msgid "For the best compatibility with your Nvidia hardware, you may want to use the Nvidia proprietary driver.\n" msgstr "Para la mejor compatibilidad con tu hardware Nvidia, puedes querer usar el controlador propietario Nvidia.\n" -#: lib/user_interaction.py:917 lib/user_interaction.py:918 -#: lib/user_interaction.py:925 lib/user_interaction.py:928 -#: lib/user_interaction.py:931 lib/user_interaction.py:930 -#: lib/user_interaction/system_conf.py:92 msgid "" "\n" "\n" @@ -382,202 +210,93 @@ msgstr "" "\n" "Selecciona un controlador de gráficos o deja en blanco para instalar todos los controladores de código abierto" -#: lib/user_interaction.py:921 lib/user_interaction.py:922 -#: lib/user_interaction.py:929 lib/user_interaction.py:932 -#: lib/user_interaction.py:935 lib/user_interaction.py:934 -#: lib/user_interaction/system_conf.py:96 msgid "All open-source (default)" msgstr "Todo código abierto (por defecto)" -#: lib/user_interaction.py:940 lib/user_interaction.py:941 -#: lib/user_interaction.py:948 lib/user_interaction.py:951 -#: lib/user_interaction.py:954 lib/user_interaction.py:953 -#: lib/user_interaction/system_conf.py:28 msgid "Choose which kernels to use or leave blank for default \"{}\"" msgstr "Elige qué kernels usar o deja en blanco para usar los por defecto \"{}\"" -#: lib/user_interaction.py:954 lib/user_interaction.py:955 -#: lib/user_interaction.py:962 lib/user_interaction.py:965 -#: lib/user_interaction.py:968 lib/user_interaction.py:967 -#: lib/user_interaction/locale_conf.py:16 msgid "Choose which locale language to use" msgstr "Elige qué idioma local usar" -#: lib/user_interaction.py:968 lib/user_interaction.py:969 -#: lib/user_interaction.py:976 lib/user_interaction.py:979 -#: lib/user_interaction.py:982 lib/user_interaction.py:981 -#: lib/user_interaction/locale_conf.py:29 msgid "Choose which locale encoding to use" msgstr "Elige qué codificación local usar" -#: lib/user_interaction.py:1009 lib/user_interaction.py:1010 -#: lib/user_interaction.py:1017 lib/user_interaction.py:1020 -#: lib/user_interaction.py:1023 lib/user_interaction.py:1022 -#: lib/user_interaction/backwards_compatible_conf.py:49 msgid "Select one of the values shown below: " msgstr "Selecciona uno de los valores mostrados abajo: " -#: lib/user_interaction.py:1050 lib/user_interaction.py:1051 -#: lib/user_interaction.py:1058 lib/user_interaction.py:1061 -#: lib/user_interaction.py:1064 lib/user_interaction.py:1063 -#: lib/user_interaction/backwards_compatible_conf.py:88 msgid "Select one or more of the options below: " msgstr "Selecciona una o más opciones de abajo: " -#: lib/disk/filesystem.py:86 lib/disk/filesystem.py:87 msgid "Adding partition...." msgstr "Añadiendo partición..." -#: lib/disk/filesystem.py:139 lib/disk/filesystem.py:141 -#: lib/disk/filesystem.py:142 msgid "You need to enter a valid fs-type in order to continue. See `man parted` for valid fs-type's." msgstr "Necesitas ingresar un tip de filesystem valido para continuar. Vea `man parted` para tipos de sistemas de archivos válidos." -#: lib/profiles.py:89 lib/profiles.py:90 msgid "Error: Listing profiles on URL \"{}\" resulted in:" msgstr "Error: Enlistar perfiles en la URL \"{}\" resultó en:" -#: lib/profiles.py:92 lib/profiles.py:93 msgid "Error: Could not decode \"{}\" result as JSON:" msgstr "Error: No se pudo decodificar el resultado \"{}\" como JSON:" -#: lib/menu/selection_menu.py:146 lib/menu/selection_menu.py:144 -#: lib/menu/selection_menu.py:148 lib/menu/selection_menu.py:412 -#: lib/menu/selection_menu.py:420 lib/user_interaction/global_menu.py:48 -#: lib/menu/selection_menu.py:468 lib/menu/global_menu.py:48 msgid "Select keyboard layout" msgstr "Selecciona la distribución del teclado" -#: lib/menu/selection_menu.py:149 lib/menu/selection_menu.py:147 -#: lib/menu/selection_menu.py:151 lib/menu/selection_menu.py:415 -#: lib/menu/selection_menu.py:423 lib/user_interaction/global_menu.py:51 -#: lib/menu/selection_menu.py:471 lib/menu/global_menu.py:51 msgid "Select mirror region" msgstr "Selecciona la región del mirror" -#: lib/menu/selection_menu.py:154 lib/menu/selection_menu.py:152 -#: lib/menu/selection_menu.py:156 lib/menu/selection_menu.py:420 -#: lib/menu/selection_menu.py:428 lib/user_interaction/global_menu.py:56 -#: lib/menu/selection_menu.py:476 lib/menu/global_menu.py:56 msgid "Select locale language" msgstr "Selecciona el idioma local" -#: lib/menu/selection_menu.py:156 lib/menu/selection_menu.py:154 -#: lib/menu/selection_menu.py:158 lib/menu/selection_menu.py:422 -#: lib/menu/selection_menu.py:430 lib/user_interaction/global_menu.py:58 -#: lib/menu/selection_menu.py:478 lib/menu/global_menu.py:58 msgid "Select locale encoding" msgstr "Selecciona la codificación local" -#: lib/menu/selection_menu.py:159 lib/menu/selection_menu.py:157 -#: lib/menu/selection_menu.py:161 lib/menu/selection_menu.py:425 -#: lib/menu/selection_menu.py:433 lib/user_interaction/global_menu.py:61 -#: lib/menu/selection_menu.py:481 lib/menu/global_menu.py:61 msgid "Select harddrives" msgstr "Selecciona los discos duros" -#: lib/menu/selection_menu.py:163 lib/menu/selection_menu.py:161 -#: lib/menu/selection_menu.py:165 lib/menu/selection_menu.py:429 -#: lib/menu/selection_menu.py:437 lib/user_interaction/global_menu.py:65 -#: lib/menu/selection_menu.py:485 lib/menu/global_menu.py:65 msgid "Select disk layout" msgstr "Selecciona la distribución de los discos" -#: lib/menu/selection_menu.py:171 lib/menu/selection_menu.py:169 -#: lib/menu/selection_menu.py:173 lib/menu/selection_menu.py:437 -#: lib/menu/selection_menu.py:445 lib/user_interaction/global_menu.py:73 -#: lib/menu/selection_menu.py:493 lib/menu/global_menu.py:73 msgid "Set encryption password" msgstr "Establecer la contraseña de cifrado" -#: lib/menu/selection_menu.py:177 lib/menu/selection_menu.py:175 -#: lib/menu/selection_menu.py:179 lib/menu/selection_menu.py:443 -#: lib/menu/selection_menu.py:451 lib/user_interaction/global_menu.py:79 -#: lib/menu/selection_menu.py:499 lib/menu/global_menu.py:79 msgid "Use swap" msgstr "Usar swap" -#: lib/menu/selection_menu.py:182 lib/menu/selection_menu.py:180 -#: lib/menu/selection_menu.py:184 lib/menu/selection_menu.py:448 -#: lib/menu/selection_menu.py:456 lib/user_interaction/global_menu.py:84 -#: lib/menu/selection_menu.py:504 lib/menu/global_menu.py:84 msgid "Select bootloader" msgstr "Selecciona el cargador de arranque" -#: lib/menu/selection_menu.py:188 lib/menu/selection_menu.py:186 -#: lib/menu/selection_menu.py:190 lib/menu/selection_menu.py:454 -#: lib/menu/selection_menu.py:462 lib/user_interaction/global_menu.py:95 -#: lib/menu/selection_menu.py:515 lib/menu/global_menu.py:95 msgid "Set root password" msgstr "Establecer la contraseña de root" -#: lib/menu/selection_menu.py:193 lib/menu/selection_menu.py:191 -#: lib/menu/selection_menu.py:195 lib/menu/selection_menu.py:459 -#: lib/menu/selection_menu.py:467 lib/user_interaction/global_menu.py:100 -#: lib/menu/selection_menu.py:520 lib/menu/global_menu.py:100 msgid "Specify superuser account" msgstr "Especificar la cuenta de superusuario" -#: lib/menu/selection_menu.py:199 lib/menu/selection_menu.py:197 -#: lib/menu/selection_menu.py:201 lib/menu/selection_menu.py:465 -#: lib/menu/selection_menu.py:473 lib/user_interaction/global_menu.py:107 -#: lib/menu/selection_menu.py:528 lib/menu/global_menu.py:107 msgid "Specify user account" msgstr "Especificar la cuenta de usuario" -#: lib/menu/selection_menu.py:205 lib/menu/selection_menu.py:203 -#: lib/menu/selection_menu.py:207 lib/menu/selection_menu.py:471 -#: lib/menu/selection_menu.py:479 lib/user_interaction/global_menu.py:114 -#: lib/menu/selection_menu.py:535 lib/menu/global_menu.py:114 msgid "Specify profile" msgstr "Especificar el perfil" -#: lib/menu/selection_menu.py:210 lib/menu/selection_menu.py:208 -#: lib/menu/selection_menu.py:212 lib/menu/selection_menu.py:476 -#: lib/menu/selection_menu.py:484 lib/user_interaction/global_menu.py:119 -#: lib/menu/selection_menu.py:540 lib/menu/global_menu.py:119 msgid "Select audio" msgstr "Selecciona el audio" -#: lib/menu/selection_menu.py:214 lib/menu/selection_menu.py:212 -#: lib/menu/selection_menu.py:216 lib/menu/selection_menu.py:480 -#: lib/menu/selection_menu.py:488 lib/user_interaction/global_menu.py:123 -#: lib/menu/selection_menu.py:544 lib/menu/global_menu.py:123 msgid "Select kernels" msgstr "Selecciona los kernels" -#: lib/menu/selection_menu.py:219 lib/menu/selection_menu.py:217 -#: lib/menu/selection_menu.py:221 lib/menu/selection_menu.py:485 -#: lib/menu/selection_menu.py:493 lib/user_interaction/global_menu.py:128 -#: lib/menu/selection_menu.py:549 lib/menu/global_menu.py:128 msgid "Additional packages to install" msgstr "Paquetes adicionales a instalar" -#: lib/menu/selection_menu.py:224 lib/menu/selection_menu.py:222 -#: lib/menu/selection_menu.py:226 lib/menu/selection_menu.py:490 -#: lib/menu/selection_menu.py:498 lib/user_interaction/global_menu.py:139 -#: lib/menu/selection_menu.py:560 lib/menu/global_menu.py:139 msgid "Configure network" msgstr "Configurar la red" -#: lib/menu/selection_menu.py:232 lib/menu/selection_menu.py:230 -#: lib/menu/selection_menu.py:234 lib/menu/selection_menu.py:498 -#: lib/menu/selection_menu.py:506 lib/user_interaction/global_menu.py:150 -#: lib/menu/selection_menu.py:571 lib/menu/global_menu.py:150 msgid "Set automatic time sync (NTP)" msgstr "Establecer la sincronización automática de hora (NTP)" -#: lib/menu/selection_menu.py:310 lib/menu/selection_menu.py:308 -#: lib/menu/selection_menu.py:315 lib/menu/selection_menu.py:527 -#: lib/menu/selection_menu.py:535 lib/user_interaction/global_menu.py:187 -#: lib/menu/selection_menu.py:608 lib/menu/global_menu.py:187 msgid "Install ({} config(s) missing)" msgstr "Instalar ({} ajuste(s) faltantes)" -#: lib/menu/selection_menu.py:373 lib/menu/selection_menu.py:371 -#: lib/menu/selection_menu.py:378 lib/menu/selection_menu.py:591 -#: lib/menu/selection_menu.py:599 lib/user_interaction/global_menu.py:249 -#: lib/menu/selection_menu.py:669 lib/menu/global_menu.py:249 msgid "" "You decided to skip harddrive selection\n" "and will use whatever drive-setup is mounted at {} (experimental)\n" @@ -589,103 +308,51 @@ msgstr "" "ADVERTENCIA: Archinstall no verificará la idoneidad de esta configuración\n" "¿Desea continuar?" -#: lib/disk/filesystem.py:97 lib/disk/filesystem.py:98 msgid "Re-using partition instance: {}" msgstr "Reutilizando instancia de partición: {}" -#: lib/user_interaction.py:590 lib/user_interaction.py:593 -#: lib/user_interaction.py:596 lib/user_interaction.py:595 -#: lib/user_interaction/partitioning_conf.py:119 -#: lib/user_interaction/partitioning_conf.py:120 msgid "Create a new partition" msgstr "Crear una nueva partición" -#: lib/user_interaction.py:592 lib/user_interaction.py:595 -#: lib/user_interaction.py:598 lib/user_interaction.py:597 -#: lib/user_interaction/partitioning_conf.py:121 -#: lib/user_interaction/partitioning_conf.py:122 msgid "Delete a partition" msgstr "Eliminar una partición" -#: lib/user_interaction.py:593 lib/user_interaction.py:596 -#: lib/user_interaction.py:599 lib/user_interaction.py:598 -#: lib/user_interaction/partitioning_conf.py:122 -#: lib/user_interaction/partitioning_conf.py:123 msgid "Clear/Delete all partitions" msgstr "Limpiar/Eliminar todas las particiones" -#: lib/user_interaction.py:594 lib/user_interaction.py:597 -#: lib/user_interaction.py:600 lib/user_interaction.py:599 -#: lib/user_interaction/partitioning_conf.py:123 -#: lib/user_interaction/partitioning_conf.py:124 msgid "Assign mount-point for a partition" msgstr "Asignar punto de montaje para una partición" -#: lib/user_interaction.py:595 lib/user_interaction.py:598 -#: lib/user_interaction.py:601 lib/user_interaction.py:600 -#: lib/user_interaction/partitioning_conf.py:124 -#: lib/user_interaction/partitioning_conf.py:125 msgid "Mark/Unmark a partition to be formatted (wipes data)" msgstr "Marcar/Desmarcar una partición para ser formateada (borra los datos)" -#: lib/user_interaction.py:596 lib/user_interaction.py:599 -#: lib/user_interaction.py:602 lib/user_interaction.py:601 -#: lib/user_interaction/partitioning_conf.py:125 -#: lib/user_interaction/partitioning_conf.py:126 msgid "Mark/Unmark a partition as encrypted" msgstr "Marcar/Desmarcar una partición como encriptada" -#: lib/user_interaction.py:597 lib/user_interaction.py:600 -#: lib/user_interaction.py:603 lib/user_interaction.py:602 -#: lib/user_interaction/partitioning_conf.py:126 -#: lib/user_interaction/partitioning_conf.py:127 msgid "Mark/Unmark a partition as bootable (automatic for /boot)" msgstr "Marcar/Desmarcar una partición como bootable (automática para /boot)" -#: lib/user_interaction.py:598 lib/user_interaction.py:601 -#: lib/user_interaction.py:604 lib/user_interaction.py:603 -#: lib/user_interaction/partitioning_conf.py:127 -#: lib/user_interaction/partitioning_conf.py:128 msgid "Set desired filesystem for a partition" msgstr "Establecer el sistema de archivos deseado para una partición" -#: lib/menu/selection_menu.py:239 lib/menu/selection_menu.py:237 -#: lib/menu/selection_menu.py:241 lib/menu/selection_menu.py:270 -#: lib/menu/selection_menu.py:507 lib/menu/selection_menu.py:515 -#: lib/user_interaction/global_menu.py:167 lib/menu/selection_menu.py:588 -#: lib/menu/global_menu.py:167 msgid "Abort" msgstr "Cancelar" -#: lib/menu/selection_menu.py:183 lib/menu/selection_menu.py:187 -#: lib/menu/selection_menu.py:451 lib/menu/selection_menu.py:459 -#: lib/user_interaction/global_menu.py:89 lib/menu/selection_menu.py:509 -#: lib/menu/global_menu.py:89 msgid "Specify hostname" msgstr "Especificar el nombre del host" -#: lib/menu/selection_menu.py:228 lib/menu/selection_menu.py:492 -#: lib/menu/selection_menu.py:500 lib/user_interaction/global_menu.py:141 -#: lib/menu/selection_menu.py:562 lib/menu/global_menu.py:141 msgid "Not configured, unavailable unless setup manually" msgstr "No configurado, no disponible a menos que se configure manualmente" -#: lib/menu/selection_menu.py:231 lib/menu/selection_menu.py:495 -#: lib/menu/selection_menu.py:503 lib/user_interaction/global_menu.py:145 -#: lib/menu/selection_menu.py:566 lib/menu/global_menu.py:145 msgid "Select timezone" msgstr "Selecciona la zona horaria" -#: lib/menu/selection_menu.py:266 lib/menu/selection_menu.py:276 -#: lib/menu/selection_menu.py:312 msgid "Set/Modify the below options" msgstr "Establecer/Modificar las opciones siguientes" -#: lib/menu/selection_menu.py:272 msgid "Install" msgstr "Instalar" -#: lib/menu/menu.py:68 lib/menu/menu.py:75 lib/menu/menu.py:119 msgid "" "Use ESC to skip\n" "\n" @@ -693,69 +360,44 @@ msgstr "" "Usar ESC para saltar\n" "\n" -#: lib/user_interaction.py:591 lib/user_interaction.py:594 -#: lib/user_interaction.py:597 lib/user_interaction.py:596 -#: lib/user_interaction/partitioning_conf.py:120 -#: lib/user_interaction/partitioning_conf.py:121 msgid "Suggest partition layout" msgstr "Sugerir el diseño de partición" -#: lib/user_interaction.py:101 lib/user_interaction/utils.py:43 msgid "Enter a password: " msgstr "Introduzca una contraseña: " -#: lib/disk/filesystem.py:117 lib/disk/filesystem.py:118 msgid "Enter a encryption password for {}" msgstr "Introduzca una contraseña de cifrado para {}" -#: lib/menu/selection_menu.py:174 lib/menu/selection_menu.py:567 -#: lib/menu/selection_menu.py:575 lib/user_interaction/global_menu.py:225 -#: lib/menu/selection_menu.py:646 lib/menu/global_menu.py:225 msgid "Enter disk encryption password (leave blank for no encryption): " msgstr "Introduzca la contraseña de cifrado de disco (dejar en blanco para no cifrar): " -#: lib/menu/selection_menu.py:407 lib/menu/selection_menu.py:617 -#: lib/menu/selection_menu.py:625 msgid "Create a required super-user with sudo privileges: " msgstr "Crear un super-usuario requerido con privilegios sudo: " -#: lib/menu/selection_menu.py:347 lib/menu/selection_menu.py:554 -#: lib/menu/selection_menu.py:562 lib/user_interaction/global_menu.py:220 -#: lib/menu/selection_menu.py:641 lib/menu/global_menu.py:220 msgid "Enter root password (leave blank to disable root): " msgstr "Introduzca la contraseña de root (dejar en blanco para desactivar root): " -#: lib/user_interaction.py:307 lib/user_interaction.py:324 -#: lib/user_interaction/manage_users_conf.py:86 -#: lib/user_interaction/manage_users_conf.py:121 msgid "Password for user \"{}\": " msgstr "Contraseña para el usuario “{}”: " -#: lib/user_interaction.py:405 lib/user_interaction.py:408 -#: lib/user_interaction.py:407 lib/user_interaction/general_conf.py:152 msgid "Verifying that additional packages exist (this might take a few seconds)" msgstr "Verificando que los paquetes adicionales existen (esto puede tardar unos segundos)" -#: lib/user_interaction.py:281 lib/user_interaction/general_conf.py:22 msgid "Would you like to use automatic time synchronization (NTP) with the default time servers?\n" msgstr "Te gustaría utilizar la sincronización automática de hora (NTP) con los servidores de hora predeterminados?\n" -#: lib/user_interaction.py:282 lib/user_interaction/general_conf.py:23 msgid "" "Hardware time and other post-configuration steps might be required in order for NTP to work.\n" "For more information, please check the Arch wiki" msgstr "La hora del hardware y otros pasos post-configuración pueden ser necesarios para que NTP funcione. Para más información, por favor, consulte la wiki de Arch" -#: lib/menu/selection_menu.py:411 lib/menu/selection_menu.py:621 -#: lib/menu/selection_menu.py:629 msgid "Enter a username to create an additional user (leave blank to skip): " msgstr "Introduzca un nombre de usuario para crear un usuario adicional (dejar en blanco para saltar): " -#: lib/menu/menu.py:116 msgid "Use ESC to skip\n" msgstr "Use ESC para saltar\n" -#: lib/menu/list_manager.py:117 msgid "" "\n" " Choose an object from the list, and select one of the available actions for it to execute" @@ -763,79 +405,33 @@ msgstr "" "\n" "Elija un objeto de la lista y seleccione una de las acciones disponibles para que se ejecute" -#: lib/menu/list_manager.py:130 lib/user_interaction/subvolume_config.py:90 msgid "Cancel" msgstr "Cancelar" -#: lib/menu/list_manager.py:131 msgid "Confirm and exit" msgstr "Confirmar y salir" -#: lib/menu/list_manager.py:135 lib/menu/list_manager.py:228 -#: lib/menu/list_manager.py:251 lib/menu/list_manager.py:276 -#: lib/user_interaction/subvolume_config.py:12 -#: lib/user_interaction/subvolume_config.py:44 -#: lib/user_interaction/subvolume_config.py:78 -#: lib/user_interaction/subvolume_config.py:82 -#: lib/user_interaction/subvolume_config.py:85 msgid "Add" msgstr "Añadir" -#: lib/menu/list_manager.py:135 lib/menu/list_manager.py:231 -#: lib/menu/list_manager.py:255 lib/user_interaction/subvolume_config.py:78 msgid "Copy" msgstr "Copiar" -#: lib/menu/list_manager.py:135 lib/menu/list_manager.py:237 -#: lib/menu/list_manager.py:261 lib/user_interaction/subvolume_config.py:82 -#: lib/user_interaction/subvolume_config.py:85 msgid "Edit" msgstr "Editar" -#: lib/menu/list_manager.py:135 lib/menu/list_manager.py:242 -#: lib/menu/list_manager.py:264 lib/user_interaction/subvolume_config.py:40 msgid "Delete" msgstr "Eliminar" -#: lib/menu/list_manager.py:185 msgid "Select an action for < {} >" msgstr "Seleccione una acción para < {} >" -#: lib/menu/list_manager.py:229 -msgid "Add :" -msgstr "Añadir :" - -#: lib/menu/list_manager.py:233 -msgid "Copy to :" -msgstr "Copiar a :" - -#: lib/menu/list_manager.py:240 -msgid "Edite :" -msgstr "Editar :" - -#: lib/menu/list_manager.py:252 -msgid "Key :" -msgstr "Clave :" - -#: lib/menu/list_manager.py:253 -msgid "Value :" -msgstr "Valor :" - -#: lib/menu/list_manager.py:257 msgid "Copy to new key:" msgstr "Copiar a nueva clave :" -#: lib/menu/list_manager.py:262 -#, python-brace-format -msgid "Edit {origkey} :" -msgstr "Editar {origkey} :" - -#: lib/models/network_configuration.py:53 -#: lib/models/network_configuration.py:74 msgid "Unknown nic type: {}. Possible values are {}" msgstr "Tipo de nic desconocido: {}. Los valores posibles son {}" -#: lib/configuration.py:75 msgid "" "\n" "This is your chosen configuration:" @@ -843,35 +439,28 @@ msgstr "" "\n" "Esta es su configuración elegida:" -#: lib/pacman.py:18 msgid "Pacman is already running, waiting maximum 10 minutes for it to terminate." msgstr "Pacman ya se está ejecutando, esperando un máximo de 10 minutos para que finalice." -#: lib/pacman.py:25 msgid "Pre-existing pacman lock never exited. Please clean up any existing pacman sessions before using archinstall." msgstr "El bloqueo de pacman preexistente nunca salió. Limpie cualquier sesión de pacman existente antes de usar archinstall." -#: lib/user_interaction/general_conf.py:174 msgid "Choose which optional additional repositories to enable" msgstr "Elija qué repositorios adicionales opcionales habilitar" -#: lib/user_interaction/manage_users_conf.py:32 -msgid "Add an user" +#, fuzzy +msgid "Add a user" msgstr "Añadir un usuario" -#: lib/user_interaction/manage_users_conf.py:33 msgid "Change password" msgstr "Cambiar contraseña" -#: lib/user_interaction/manage_users_conf.py:34 msgid "Promote/Demote user" msgstr "Promocionar/Degradar usuario" -#: lib/user_interaction/manage_users_conf.py:35 msgid "Delete User" msgstr "Eliminar usuario" -#: lib/user_interaction/manage_users_conf.py:99 msgid "" "\n" "Define a new user\n" @@ -879,29 +468,21 @@ msgstr "" "\n" "Definir un nuevo usuario\n" -#: lib/user_interaction/manage_users_conf.py:100 msgid "User Name : " msgstr "Nombre de usuario : " -#: lib/user_interaction/manage_users_conf.py:115 msgid "Should {} be a superuser (sudoer)?" msgstr "¿Debe {} ser un superusuario (sudoer)?" -#: lib/user_interaction/manage_users_conf.py:161 msgid "Define users with sudo privilege: " msgstr "Defina usuarios con privilegio sudo: " -#: lib/user_interaction/network_conf.py:24 msgid "No network configuration" msgstr "Sin configuración de red" -#: lib/user_interaction/partitioning_conf.py:128 -#: lib/user_interaction/partitioning_conf.py:129 msgid "Set desired subvolumes on a btrfs partition" msgstr "Establecer los subvolúmenes deseados en una partición btrfs" -#: lib/user_interaction/partitioning_conf.py:296 -#: lib/user_interaction/partitioning_conf.py:303 msgid "" "{}\n" "\n" @@ -911,95 +492,66 @@ msgstr "" "\n" "Seleccione en qué partición configurar los subvolúmenes" -#: lib/user_interaction/partitioning_conf.py:305 -#: lib/user_interaction/partitioning_conf.py:312 msgid "Manage btrfs subvolumes for current partition" msgstr "Administrar subvolúmenes btrfs para la partición actual" -#: lib/user_interaction/save_conf.py:24 lib/user_interaction/save_conf.py:29 msgid "No configuration" msgstr "Sin configuración" -#: lib/user_interaction/save_conf.py:42 msgid "Save user configuration" msgstr "Guardar configuración de usuario" -#: lib/user_interaction/save_conf.py:43 msgid "Save user credentials" msgstr "Guardar credenciales de usuario" -#: lib/user_interaction/save_conf.py:44 msgid "Save disk layout" msgstr "Guardar diseño de disco" -#: lib/user_interaction/save_conf.py:45 msgid "Save all" msgstr "Guardar todo" -#: lib/user_interaction/save_conf.py:48 msgid "Choose which configuration to save" msgstr "Elija qué configuración guardar" -#: lib/user_interaction/save_conf.py:59 msgid "Enter a directory for the configuration(s) to be saved: " msgstr "Introduzca un directorio para guardar la(s) configuración(es): " -#: lib/user_interaction/save_conf.py:63 msgid "Not a valid directory: {}" msgstr "No es un directorio válido: {}" -#: lib/user_interaction/utils.py:32 msgid "The password you are using seems to be weak," msgstr "La contraseña que está utilizando parece ser débil," -#: lib/user_interaction/utils.py:33 msgid "are you sure you want to use it?" msgstr "¿Estás seguro de que quieres usarlo?" -#: lib/user_interaction/global_menu.py:134 lib/menu/selection_menu.py:555 -#: lib/menu/global_menu.py:134 msgid "Additional repositories to enable" msgstr "Repositorios adicionales para habilitar" -#: lib/user_interaction/global_menu.py:155 lib/menu/selection_menu.py:576 -#: lib/menu/global_menu.py:155 msgid "Save configuration" msgstr "Guardar configuración" -#: lib/user_interaction/global_menu.py:192 lib/menu/selection_menu.py:613 -#: lib/menu/global_menu.py:192 msgid "Missing configurations:\n" msgstr "Configuraciones que faltan:\n" -#: lib/user_interaction/global_menu.py:210 lib/menu/selection_menu.py:631 -#: lib/menu/global_menu.py:210 msgid "Either root-password or at least 1 superuser must be specified" msgstr "Se debe especificar una contraseña raíz o al menos 1 superusuario" -#: lib/user_interaction/global_menu.py:275 lib/menu/selection_menu.py:695 -#: lib/menu/global_menu.py:275 msgid "Manage superuser accounts: " msgstr "Administrar cuentas de superusuario: " -#: lib/user_interaction/global_menu.py:279 lib/menu/selection_menu.py:699 -#: lib/menu/global_menu.py:279 msgid "Manage ordinary user accounts: " msgstr "Administrar cuentas de usuario ordinarias: " -#: lib/user_interaction/subvolume_config.py:17 msgid " Subvolume :{:16}" msgstr " Subvolumen :{:16}" -#: lib/user_interaction/subvolume_config.py:19 -#: lib/user_interaction/subvolume_config.py:22 msgid " mounted at {:16}" msgstr " montado en {:16}" -#: lib/user_interaction/subvolume_config.py:26 msgid " with option {}" msgstr " con opción {}" -#: lib/user_interaction/subvolume_config.py:46 msgid "" "\n" " Fill the desired values for a new subvolume \n" @@ -1007,38 +559,196 @@ msgstr "" "\n" "Rellene los valores deseados para un nuevo subvolumen\n" -#: lib/user_interaction/subvolume_config.py:77 msgid "Subvolume name " msgstr "Nombre del subvolumen " -#: lib/user_interaction/subvolume_config.py:81 msgid "Subvolume mountpoint" msgstr "Punto de montaje de subvolumen" -#: lib/user_interaction/subvolume_config.py:84 msgid "Subvolume options" msgstr "Opciones de subvolumen" -#: lib/user_interaction/subvolume_config.py:87 msgid "Save" msgstr "Guardar" -#: lib/user_interaction/subvolume_config.py:121 msgid "Subvolume name :" msgstr "Nombre del subvolumen :" -#: lib/user_interaction/subvolume_config.py:124 msgid "Select a mount point :" msgstr "Seleccione un punto de montaje :" -#: lib/user_interaction/subvolume_config.py:128 msgid "Select the desired subvolume options " msgstr "Seleccione las opciones de subvolumen deseadas " -#: lib/user_interaction/manage_users_conf.py:161 msgid "Define users with sudo privilege, by username: " msgstr "Defina usuarios con privilegio sudo, por nombre de usuario: " -#: lib/installer.py:152 msgid "[!] A log file has been created here: {}" msgstr "[!] Se ha creado un archivo de registro aquí: {}" + +#, fuzzy +msgid "Would you like to use BTRFS subvolumes with a default structure?" +msgstr "Te gustaría usar GRUB como gestor de arranque en lugar de systemd-boot?" + +#, fuzzy +msgid "Would you like to use BTRFS compression?" +msgstr "¿Te gustaría usar swap en zram?" + +#, fuzzy +msgid "Would you like to create a separate partition for /home?" +msgstr "¿Te gustaría usar swap en zram?" + +msgid "The selected drives do not have the minimum capacity required for an automatic suggestion\n" +msgstr "" + +msgid "Minimum capacity for /home partition: {}GB\n" +msgstr "" + +msgid "Minimum capacity for Arch Linux partition: {}GB" +msgstr "" + +msgid "Continue" +msgstr "" + +msgid "yes" +msgstr "" + +msgid "no" +msgstr "" + +msgid "set: {}" +msgstr "" + +msgid "Manual configuration setting must be a list" +msgstr "" + +#, fuzzy +msgid "No iface specified for manual configuration" +msgstr "Guardar configuración de usuario" + +msgid "Manual nic configuration with no auto DHCP requires an IP address" +msgstr "" + +msgid "Add interface" +msgstr "" + +msgid "Edit interface" +msgstr "" + +#, fuzzy +msgid "Delete interface" +msgstr "Eliminar usuario" + +#, fuzzy +msgid "Select interface to add" +msgstr "Selecciona una interfaz de red para configurar" + +#, fuzzy +msgid "Manual configuration" +msgstr "Guardar configuración" + +#, fuzzy +msgid "Mark/Unmark a partition as compressed (btrfs only)" +msgstr "Marcar/Desmarcar una partición como encriptada" + +#, fuzzy +msgid "The password you are using seems to be weak, are you sure you want to use it?" +msgstr "La contraseña que está utilizando parece ser débil," + +msgid "Provides a selection of desktop environments and tiling window managers, e.g. gnome, kde, sway" +msgstr "" + +msgid "Select your desired desktop environment" +msgstr "" + +msgid "A very basic installation that allows you to customize Arch Linux as you see fit." +msgstr "" + +msgid "Provides a selection of various server packages to install and enable, e.g. httpd, nginx, mariadb" +msgstr "" + +msgid "Choose which servers to install, if none then a minimal installation wil be done" +msgstr "" + +msgid "Installs a minimal system as well as xorg and graphics drivers." +msgstr "" + +msgid "Press Enter to continue." +msgstr "" + +msgid "Would you like to chroot into the newly created installation and perform post-installation configuration?" +msgstr "" + +#, fuzzy +msgid "Are you sure you want to reset this setting?" +msgstr "¿Estás seguro de que quieres usarlo?" + +#, fuzzy +msgid "Select one or more hard drives to use and configure\n" +msgstr "Selecciona uno o más discos duros para usar y configurar" + +msgid "Any modifications to the existing setting will reset the disk layout!" +msgstr "" + +msgid "If you reset the harddrive selection this will also reset the current disk layout. Are you sure?" +msgstr "" + +#, fuzzy +msgid "Save and exit" +msgstr "Confirmar y salir" + +#, fuzzy +msgid "" +"{}\n" +"contains queued partitions, this will remove those, are you sure?" +msgstr "{} contiene particiones en cola, esto eliminará esas particiones, ¿estás seguro?" + +#, fuzzy +msgid "No audio server" +msgstr "Elige un servidor de audio" + +msgid "(default)" +msgstr "" + +#, fuzzy +msgid "Use ESC to skip" +msgstr "Use ESC para saltar\n" + +msgid "" +"Use CTRL+C to reset current selection\n" +"\n" +msgstr "" + +#, fuzzy +msgid "Copy to: " +msgstr "Copiar a :" + +#, fuzzy +msgid "Edit: " +msgstr "Editar" + +msgid "Key: " +msgstr "" + +#, fuzzy +msgid "Edit {}: " +msgstr "Editar :" + +msgid "Add :" +msgstr "Añadir :" + +msgid "Value :" +msgstr "Valor :" + +#, python-brace-format +#~ msgid "Edit {origkey} :" +#~ msgstr "Editar {origkey} :" + +#~ msgid "Copy to :" +#~ msgstr "Copiar a :" + +#~ msgid "Edite :" +#~ msgstr "Editar :" + +#~ msgid "Key :" +#~ msgstr "Clave :" diff --git a/archinstall/locales/fr/LC_MESSAGES/base.mo b/archinstall/locales/fr/LC_MESSAGES/base.mo index a54f039e..eb0654fc 100644 Binary files a/archinstall/locales/fr/LC_MESSAGES/base.mo and b/archinstall/locales/fr/LC_MESSAGES/base.mo differ diff --git a/archinstall/locales/fr/LC_MESSAGES/base.po b/archinstall/locales/fr/LC_MESSAGES/base.po index 7f01eab6..b4c52428 100644 --- a/archinstall/locales/fr/LC_MESSAGES/base.po +++ b/archinstall/locales/fr/LC_MESSAGES/base.po @@ -11,190 +11,81 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 3.0.1\n" -#: lib/installer.py:144 lib/installer.py:152 msgid "[!] A log file has been created here: {} {}" msgstr "[!] Un fichier journal a été créé ici : {} {}" -#: lib/installer.py:145 lib/installer.py:153 lib/installer.py:155 -msgid "" -" Please submit this issue (and file) to https://github.com/archlinux/" -"archinstall/issues" -msgstr "" -" Veuillez soumettre ce problème (et le fichier) à https://github.com/" -"archlinux/archinstall/issues" +msgid " Please submit this issue (and file) to https://github.com/archlinux/archinstall/issues" +msgstr " Veuillez soumettre ce problème (et le fichier) à https://github.com/archlinux/archinstall/issues" -#: lib/user_interaction.py:83 lib/user_interaction/utils.py:86 -#: lib/user_interaction/utils.py:83 msgid "Do you really want to abort?" msgstr "Voulez-vous vraiment abandonner ?" -#: lib/user_interaction.py:101 lib/user_interaction.py:104 -#: lib/user_interaction/utils.py:53 lib/user_interaction/utils.py:50 msgid "And one more time for verification: " msgstr "Et encore une fois pour vérification : " -#: lib/user_interaction.py:272 lib/user_interaction.py:275 -#: lib/user_interaction/system_conf.py:142 -#: lib/user_interaction/system_conf.py:141 msgid "Would you like to use swap on zram?" msgstr "Souhaitez-vous utiliser le swap sur zram ?" -#: lib/user_interaction.py:285 lib/user_interaction.py:288 -#: lib/user_interaction/general_conf.py:33 msgid "Desired hostname for the installation: " msgstr "Nom d'hôte souhaité pour l'installation : " -#: lib/user_interaction.py:290 lib/user_interaction.py:293 msgid "Username for required superuser with sudo privileges: " -msgstr "" -"Nom d'utilisateur pour le superutilisateur requis avec les privilèges sudo : " +msgstr "Nom d'utilisateur pour le superutilisateur requis avec les privilèges sudo : " -#: lib/user_interaction.py:310 lib/user_interaction.py:313 -#: lib/user_interaction/manage_users_conf.py:167 -#: lib/user_interaction/manage_users_conf.py:164 msgid "Any additional users to install (leave blank for no users): " -msgstr "" -"Utilisateur supplémentaire à installer (laisser vide pour aucun " -"utilisateur) : " +msgstr "Utilisateur supplémentaire à installer (laisser vide pour aucun utilisateur) : " -#: lib/user_interaction.py:324 lib/user_interaction.py:327 msgid "Should this user be a superuser (sudoer)?" msgstr "Cet utilisateur doit-il être un superutilisateur (sudoer) ?" -#: lib/user_interaction.py:340 lib/user_interaction.py:343 -#: lib/user_interaction.py:346 lib/user_interaction/general_conf.py:41 msgid "Select a timezone" msgstr "Sélectionner un fuseau horaire" -#: lib/user_interaction.py:354 lib/user_interaction.py:357 -#: lib/user_interaction.py:360 lib/user_interaction.py:359 -#: lib/user_interaction/system_conf.py:115 -#: lib/user_interaction/system_conf.py:114 msgid "Would you like to use GRUB as a bootloader instead of systemd-boot?" -msgstr "" -"Souhaitez-vous utiliser GRUB comme chargeur de démarrage au lieu de systemd-" -"boot ?" +msgstr "Souhaitez-vous utiliser GRUB comme chargeur de démarrage au lieu de systemd-boot ?" -#: lib/user_interaction.py:364 lib/user_interaction.py:367 -#: lib/user_interaction.py:370 lib/user_interaction.py:369 -#: lib/user_interaction/system_conf.py:125 -#: lib/user_interaction/system_conf.py:124 msgid "Choose a bootloader" msgstr "Choisir un chargeur de démarrage" -#: lib/user_interaction.py:380 lib/user_interaction.py:383 -#: lib/user_interaction.py:386 lib/user_interaction.py:385 -#: lib/user_interaction/general_conf.py:53 msgid "Choose an audio server" msgstr "Choisir un serveur audio" -#: lib/user_interaction.py:391 lib/user_interaction.py:394 -#: lib/user_interaction.py:397 lib/user_interaction.py:396 -#: lib/user_interaction/general_conf.py:138 -msgid "" -"Only packages such as base, base-devel, linux, linux-firmware, efibootmgr " -"and optional profile packages are installed." -msgstr "" -"Seuls les packages tels que base, base-devel, linux, linux-firmware, " -"efibootmgr et les packages de profil optionnels sont installés." +msgid "Only packages such as base, base-devel, linux, linux-firmware, efibootmgr and optional profile packages are installed." +msgstr "Seuls les packages tels que base, base-devel, linux, linux-firmware, efibootmgr et les packages de profil optionnels sont installés." -#: lib/user_interaction.py:392 lib/user_interaction.py:395 -#: lib/user_interaction.py:398 lib/user_interaction.py:397 -#: lib/user_interaction/general_conf.py:139 -msgid "" -"If you desire a web browser, such as firefox or chromium, you may specify it " -"in the following prompt." -msgstr "" -"Si vous désirez un navigateur Web, tel que firefox ou chrome, vous pouvez le " -"spécifier dans l'invite suivante." +msgid "If you desire a web browser, such as firefox or chromium, you may specify it in the following prompt." +msgstr "Si vous désirez un navigateur Web, tel que firefox ou chrome, vous pouvez le spécifier dans l'invite suivante." -#: lib/user_interaction.py:396 lib/user_interaction.py:399 -#: lib/user_interaction.py:402 lib/user_interaction.py:401 -#: lib/user_interaction/general_conf.py:143 -msgid "" -"Write additional packages to install (space separated, leave blank to skip): " -msgstr "" -"Écrire des packages supplémentaires à installer (espaces séparés, laisser " -"vide pour ignorer) : " +msgid "Write additional packages to install (space separated, leave blank to skip): " +msgstr "Écrire des packages supplémentaires à installer (espaces séparés, laisser vide pour ignorer) : " -#: lib/user_interaction.py:419 lib/user_interaction.py:422 -#: lib/user_interaction.py:425 lib/user_interaction.py:424 -#: lib/user_interaction/network_conf.py:25 -#: lib/user_interaction/network_conf.py:125 msgid "Copy ISO network configuration to installation" msgstr "Copier la configuration réseau ISO dans l'installation" -#: lib/user_interaction.py:420 lib/user_interaction.py:423 -#: lib/user_interaction.py:426 lib/user_interaction.py:425 -#: lib/user_interaction/network_conf.py:26 -#: lib/user_interaction/network_conf.py:126 -msgid "" -"Use NetworkManager (necessary to configure internet graphically in GNOME and " -"KDE)" -msgstr "" -"Utiliser NetworkManager (nécessaire pour configurer graphiquement Internet " -"dans GNOME et KDE)" +msgid "Use NetworkManager (necessary to configure internet graphically in GNOME and KDE)" +msgstr "Utiliser NetworkManager (nécessaire pour configurer graphiquement Internet dans GNOME et KDE)" -#: lib/user_interaction.py:428 lib/user_interaction.py:431 -#: lib/user_interaction.py:434 lib/user_interaction.py:433 -#: lib/user_interaction/network_conf.py:43 -#: lib/user_interaction/network_conf.py:139 msgid "Select one network interface to configure" msgstr "Sélectionner une interface réseau à configurer" -#: lib/user_interaction.py:441 lib/user_interaction.py:444 -#: lib/user_interaction.py:447 lib/user_interaction.py:446 -#: lib/user_interaction/network_conf.py:70 -#: lib/user_interaction/network_conf.py:77 -msgid "" -"Select which mode to configure for \"{}\" or skip to use default mode \"{}\"" -msgstr "" -"Sélectionner le mode à configurer pour \"{}\" ou ignorer pour utiliser le " -"mode par défaut \"{}\"" +msgid "Select which mode to configure for \"{}\" or skip to use default mode \"{}\"" +msgstr "Sélectionner le mode à configurer pour \"{}\" ou ignorer pour utiliser le mode par défaut \"{}\"" -#: lib/user_interaction.py:446 lib/user_interaction.py:449 -#: lib/user_interaction.py:452 lib/user_interaction.py:451 -#: lib/user_interaction/network_conf.py:75 -#: lib/user_interaction/network_conf.py:82 msgid "Enter the IP and subnet for {} (example: 192.168.0.5/24): " msgstr "Entrer l'IP et le sous-réseau pour {} (exemple : 192.168.0.5/24) : " -#: lib/user_interaction.py:461 lib/user_interaction.py:464 -#: lib/user_interaction.py:467 lib/user_interaction.py:466 -#: lib/user_interaction/network_conf.py:86 -#: lib/user_interaction/network_conf.py:93 msgid "Enter your gateway (router) IP address or leave blank for none: " -msgstr "" -"Entrer l'adresse IP de votre passerelle (routeur) ou laisser vide pour " -"aucune : " +msgstr "Entrer l'adresse IP de votre passerelle (routeur) ou laisser vide pour aucune : " -#: lib/user_interaction.py:476 lib/user_interaction.py:479 -#: lib/user_interaction.py:482 lib/user_interaction.py:481 -#: lib/user_interaction/network_conf.py:102 -#: lib/user_interaction/network_conf.py:108 msgid "Enter your DNS servers (space separated, blank for none): " msgstr "Entrer vos serveurs DNS (séparés par des espaces, vide pour aucun) : " -#: lib/user_interaction.py:510 lib/user_interaction.py:513 -#: lib/user_interaction.py:516 lib/user_interaction.py:515 -#: lib/user_interaction/disk_conf.py:23 msgid "Select which filesystem your main partition should use" -msgstr "" -"Sélectionner le système de fichiers que votre partition principale doit " -"utiliser" +msgstr "Sélectionner le système de fichiers que votre partition principale doit utiliser" -#: lib/user_interaction.py:556 lib/user_interaction.py:559 -#: lib/user_interaction.py:562 lib/user_interaction.py:561 -#: lib/user_interaction/partitioning_conf.py:63 -#: lib/user_interaction/partitioning_conf.py:64 msgid "Current partition layout" msgstr "Disposition actuelle des partitions" -#: lib/user_interaction.py:607 lib/user_interaction.py:614 -#: lib/user_interaction.py:617 lib/user_interaction.py:620 -#: lib/user_interaction.py:619 lib/user_interaction/partitioning_conf.py:145 -#: lib/user_interaction/partitioning_conf.py:146 -#: lib/user_interaction/partitioning_conf.py:163 msgid "" "Select what to do with\n" "{}" @@ -202,56 +93,18 @@ msgstr "" "Sélectionner quoi faire avec\n" "{}" -#: lib/user_interaction.py:624 lib/user_interaction.py:709 -#: lib/user_interaction.py:631 lib/user_interaction.py:716 -#: lib/user_interaction.py:634 lib/user_interaction.py:719 -#: lib/user_interaction.py:637 lib/user_interaction.py:722 -#: lib/user_interaction.py:636 lib/user_interaction.py:721 -#: lib/user_interaction/partitioning_conf.py:162 -#: lib/user_interaction/partitioning_conf.py:255 -#: lib/user_interaction/partitioning_conf.py:165 -#: lib/user_interaction/partitioning_conf.py:260 -#: lib/user_interaction/partitioning_conf.py:182 -#: lib/user_interaction/partitioning_conf.py:293 msgid "Enter a desired filesystem type for the partition" msgstr "Entrer un type de système de fichiers souhaité pour la partition" -#: lib/user_interaction.py:626 lib/user_interaction.py:633 -#: lib/user_interaction.py:636 lib/user_interaction.py:639 -#: lib/user_interaction.py:638 lib/user_interaction/partitioning_conf.py:164 -#: lib/user_interaction/partitioning_conf.py:167 -#: lib/user_interaction/partitioning_conf.py:187 msgid "Enter the start sector (percentage or block number, default: {}): " -msgstr "" -"Entrer le secteur de début (pourcentage ou numéro de bloc, par défaut : " -"{}) : " - -#: lib/user_interaction.py:635 lib/user_interaction.py:642 -#: lib/user_interaction.py:645 lib/user_interaction.py:648 -#: lib/user_interaction.py:647 lib/user_interaction/partitioning_conf.py:174 -#: lib/user_interaction/partitioning_conf.py:177 -#: lib/user_interaction/partitioning_conf.py:197 -msgid "" -"Enter the end sector of the partition (percentage or block number, ex: {}): " -msgstr "" -"Entrer le secteur de fin de la partition (pourcentage ou numéro de bloc, " -"ex : {}) : " - -#: lib/user_interaction.py:661 lib/user_interaction.py:668 -#: lib/user_interaction.py:671 lib/user_interaction.py:674 -#: lib/user_interaction.py:673 lib/user_interaction/partitioning_conf.py:203 -#: lib/user_interaction/partitioning_conf.py:208 -#: lib/user_interaction/partitioning_conf.py:228 +msgstr "Entrer le secteur de début (pourcentage ou numéro de bloc, par défaut : {}) : " + +msgid "Enter the end sector of the partition (percentage or block number, ex: {}): " +msgstr "Entrer le secteur de fin de la partition (pourcentage ou numéro de bloc, ex : {}) : " + msgid "{} contains queued partitions, this will remove those, are you sure?" -msgstr "" -"{} contient des partitions en file d'attente, cela les supprimera, êtes-vous " -"sûr ?" - -#: lib/user_interaction.py:674 lib/user_interaction.py:681 -#: lib/user_interaction.py:684 lib/user_interaction.py:687 -#: lib/user_interaction.py:686 lib/user_interaction/partitioning_conf.py:216 -#: lib/user_interaction/partitioning_conf.py:221 -#: lib/user_interaction/partitioning_conf.py:242 +msgstr "{} contient des partitions en file d'attente, cela les supprimera, êtes-vous sûr ?" + msgid "" "{}\n" "\n" @@ -261,11 +114,6 @@ msgstr "" "\n" "Sélectionner par index les partitions à supprimer" -#: lib/user_interaction.py:682 lib/user_interaction.py:689 -#: lib/user_interaction.py:692 lib/user_interaction.py:695 -#: lib/user_interaction.py:694 lib/user_interaction/partitioning_conf.py:226 -#: lib/user_interaction/partitioning_conf.py:231 -#: lib/user_interaction/partitioning_conf.py:264 msgid "" "{}\n" "\n" @@ -275,33 +123,12 @@ msgstr "" "\n" "Sélectionner par index où et quelle partition montée" -#: lib/user_interaction.py:686 lib/user_interaction.py:693 -#: lib/user_interaction.py:696 lib/user_interaction.py:699 -#: lib/user_interaction.py:698 lib/user_interaction/partitioning_conf.py:231 -#: lib/user_interaction/partitioning_conf.py:236 -#: lib/user_interaction/partitioning_conf.py:269 -msgid "" -" * Partition mount-points are relative to inside the installation, the boot " -"would be /boot as an example." -msgstr "" -" * Les points de montage de la partition sont relatifs à l'intérieur de " -"l'installation, le démarrage serait /boot par exemple." - -#: lib/user_interaction.py:687 lib/user_interaction.py:694 -#: lib/user_interaction.py:697 lib/user_interaction.py:700 -#: lib/user_interaction.py:699 lib/user_interaction/partitioning_conf.py:233 -#: lib/user_interaction/partitioning_conf.py:238 -#: lib/user_interaction/partitioning_conf.py:271 +msgid " * Partition mount-points are relative to inside the installation, the boot would be /boot as an example." +msgstr " * Les points de montage de la partition sont relatifs à l'intérieur de l'installation, le démarrage serait /boot par exemple." + msgid "Select where to mount partition (leave blank to remove mountpoint): " -msgstr "" -"Sélectionner où monter la partition (laisser vide pour supprimer le point de " -"montage) : " - -#: lib/user_interaction.py:698 lib/user_interaction.py:705 -#: lib/user_interaction.py:708 lib/user_interaction.py:711 -#: lib/user_interaction.py:710 lib/user_interaction/partitioning_conf.py:244 -#: lib/user_interaction/partitioning_conf.py:249 -#: lib/user_interaction/partitioning_conf.py:282 +msgstr "Sélectionner où monter la partition (laisser vide pour supprimer le point de montage) : " + msgid "" "{}\n" "\n" @@ -311,11 +138,6 @@ msgstr "" "\n" "Sélectionner la partition à masquer pour le formatage" -#: lib/user_interaction.py:717 lib/user_interaction.py:724 -#: lib/user_interaction.py:727 lib/user_interaction.py:730 -#: lib/user_interaction.py:729 lib/user_interaction/partitioning_conf.py:265 -#: lib/user_interaction/partitioning_conf.py:270 -#: lib/user_interaction/partitioning_conf.py:302 msgid "" "{}\n" "\n" @@ -325,12 +147,6 @@ msgstr "" "\n" "Sélectionner la partition à marquer comme chiffrée" -#: lib/user_interaction.py:725 lib/user_interaction.py:732 -#: lib/user_interaction.py:735 lib/user_interaction.py:738 -#: lib/user_interaction.py:737 lib/user_interaction/partitioning_conf.py:274 -#: lib/user_interaction/partitioning_conf.py:279 -#: lib/user_interaction/partitioning_conf.py:250 -#: lib/user_interaction/partitioning_conf.py:311 msgid "" "{}\n" "\n" @@ -340,11 +156,6 @@ msgstr "" "\n" "Sélectionner la partition à marquer comme amorçable" -#: lib/user_interaction.py:732 lib/user_interaction.py:739 -#: lib/user_interaction.py:742 lib/user_interaction.py:745 -#: lib/user_interaction.py:744 lib/user_interaction/partitioning_conf.py:282 -#: lib/user_interaction/partitioning_conf.py:287 -#: lib/user_interaction/partitioning_conf.py:319 msgid "" "{}\n" "\n" @@ -354,123 +165,42 @@ msgstr "" "\n" "Sélectionner la partition sur laquelle définir un système de fichiers" -#: lib/user_interaction.py:739 lib/user_interaction.py:746 -#: lib/user_interaction.py:749 lib/user_interaction.py:752 -#: lib/user_interaction.py:751 lib/user_interaction/partitioning_conf.py:289 -#: lib/user_interaction/partitioning_conf.py:294 -#: lib/user_interaction/partitioning_conf.py:326 msgid "Enter a desired filesystem type for the partition: " msgstr "Entrer un type de système de fichiers souhaité pour la partition : " -#: lib/user_interaction.py:760 lib/menu/selection_menu.py:141 -#: lib/user_interaction.py:767 lib/menu/selection_menu.py:139 -#: lib/menu/selection_menu.py:143 lib/user_interaction.py:770 -#: lib/user_interaction.py:773 lib/user_interaction.py:772 -#: lib/menu/selection_menu.py:407 lib/menu/selection_menu.py:415 -#: lib/menu/selection_menu.py:17 lib/user_interaction/general_conf.py:105 -#: lib/user_interaction/global_menu.py:43 lib/menu/selection_menu.py:53 -#: lib/menu/selection_menu.py:463 lib/menu/global_menu.py:43 -#: lib/menu/selection_menu.py:20 msgid "Select Archinstall language" msgstr "Sélectionner la langue d'Archinstall" -#: lib/user_interaction.py:765 lib/user_interaction.py:772 -#: lib/user_interaction.py:775 lib/user_interaction.py:778 -#: lib/user_interaction.py:777 lib/user_interaction/disk_conf.py:40 msgid "Wipe all selected drives and use a best-effort default partition layout" -msgstr "" -"Effacer tous les lecteurs sélectionnés et utiliser une disposition de " -"partition par défaut optimale" +msgstr "Effacer tous les lecteurs sélectionnés et utiliser une disposition de partition par défaut optimale" -#: lib/user_interaction.py:766 lib/user_interaction.py:773 -#: lib/user_interaction.py:776 lib/user_interaction.py:779 -#: lib/user_interaction.py:778 lib/user_interaction/disk_conf.py:41 -msgid "" -"Select what to do with each individual drive (followed by partition usage)" -msgstr "" -"Sélectionner ce qu'il faut faire avec chaque lecteur individuel (suivi de " -"l'utilisation de la partition)" +msgid "Select what to do with each individual drive (followed by partition usage)" +msgstr "Sélectionner ce qu'il faut faire avec chaque lecteur individuel (suivi de l'utilisation de la partition)" -#: lib/user_interaction.py:769 lib/user_interaction.py:770 -#: lib/user_interaction.py:777 lib/user_interaction.py:780 -#: lib/user_interaction.py:783 lib/user_interaction.py:782 -#: lib/user_interaction/disk_conf.py:45 lib/user_interaction/disk_conf.py:44 msgid "Select what you wish to do with the selected block devices" -msgstr "" -"Sélectionner ce que vous souhaitez faire avec les périphériques de bloc " -"sélectionnés" +msgstr "Sélectionner ce que vous souhaitez faire avec les périphériques de bloc sélectionnés" -#: lib/user_interaction.py:822 lib/user_interaction.py:823 -#: lib/user_interaction.py:830 lib/user_interaction.py:833 -#: lib/user_interaction.py:836 lib/user_interaction.py:835 -#: lib/user_interaction/general_conf.py:126 -msgid "" -"This is a list of pre-programmed profiles, they might make it easier to " -"install things like desktop environments" -msgstr "" -"Ceci est une liste de profils préprogrammés, ils pourraient faciliter " -"l'installation d'outils comme les environnements de bureau" +msgid "This is a list of pre-programmed profiles, they might make it easier to install things like desktop environments" +msgstr "Ceci est une liste de profils préprogrammés, ils pourraient faciliter l'installation d'outils comme les environnements de bureau" -#: lib/user_interaction.py:846 lib/user_interaction.py:847 -#: lib/user_interaction.py:854 lib/user_interaction.py:857 -#: lib/user_interaction.py:860 lib/user_interaction.py:859 -#: lib/user_interaction/general_conf.py:71 msgid "Select Keyboard layout" msgstr "Sélectionner la disposition du clavier" -#: lib/user_interaction.py:861 lib/user_interaction.py:862 -#: lib/user_interaction.py:869 lib/user_interaction.py:872 -#: lib/user_interaction.py:875 lib/user_interaction.py:874 -#: lib/user_interaction/general_conf.py:92 msgid "Select one of the regions to download packages from" -msgstr "" -"Sélectionner l'une des régions depuis lesquelles télécharger les packages" +msgstr "Sélectionner l'une des régions depuis lesquelles télécharger les packages" -#: lib/user_interaction.py:883 lib/user_interaction.py:884 -#: lib/user_interaction.py:891 lib/user_interaction.py:894 -#: lib/user_interaction.py:897 lib/user_interaction.py:896 -#: lib/user_interaction/system_conf.py:52 msgid "Select one or more hard drives to use and configure" msgstr "Sélectionner un ou plusieurs disques durs à utiliser et à configurer" -#: lib/user_interaction.py:910 lib/user_interaction.py:911 -#: lib/user_interaction.py:918 lib/user_interaction.py:921 -#: lib/user_interaction.py:924 lib/user_interaction.py:923 -#: lib/user_interaction/system_conf.py:80 -msgid "" -"For the best compatibility with your AMD hardware, you may want to use " -"either the all open-source or AMD / ATI options." -msgstr "" -"Pour une meilleure compatibilité avec votre matériel AMD, vous pouvez " -"utiliser les options entièrement open source ou AMD / ATI." +msgid "For the best compatibility with your AMD hardware, you may want to use either the all open-source or AMD / ATI options." +msgstr "Pour une meilleure compatibilité avec votre matériel AMD, vous pouvez utiliser les options entièrement open source ou AMD / ATI." -#: lib/user_interaction.py:912 lib/user_interaction.py:913 -#: lib/user_interaction.py:920 lib/user_interaction.py:923 -#: lib/user_interaction.py:926 lib/user_interaction.py:925 -#: lib/user_interaction/system_conf.py:84 -msgid "" -"For the best compatibility with your Intel hardware, you may want to use " -"either the all open-source or Intel options.\n" -msgstr "" -"Pour une compatibilité optimale avec votre matériel Intel, vous pouvez " -"utiliser les options entièrement open source ou Intel.\n" +msgid "For the best compatibility with your Intel hardware, you may want to use either the all open-source or Intel options.\n" +msgstr "Pour une compatibilité optimale avec votre matériel Intel, vous pouvez utiliser les options entièrement open source ou Intel.\n" + +msgid "For the best compatibility with your Nvidia hardware, you may want to use the Nvidia proprietary driver.\n" +msgstr "Pour une meilleure compatibilité avec votre matériel Nvidia, vous pouvez utiliser le pilote propriétaire Nvidia.\n" -#: lib/user_interaction.py:914 lib/user_interaction.py:915 -#: lib/user_interaction.py:922 lib/user_interaction.py:925 -#: lib/user_interaction.py:928 lib/user_interaction.py:927 -#: lib/user_interaction/system_conf.py:88 -msgid "" -"For the best compatibility with your Nvidia hardware, you may want to use " -"the Nvidia proprietary driver.\n" -msgstr "" -"Pour une meilleure compatibilité avec votre matériel Nvidia, vous pouvez " -"utiliser le pilote propriétaire Nvidia.\n" - -#: lib/user_interaction.py:917 lib/user_interaction.py:918 -#: lib/user_interaction.py:925 lib/user_interaction.py:928 -#: lib/user_interaction.py:931 lib/user_interaction.py:930 -#: lib/user_interaction/system_conf.py:92 -#: lib/user_interaction/system_conf.py:91 msgid "" "\n" "\n" @@ -478,228 +208,95 @@ msgid "" msgstr "" "\n" "\n" -"Sélectionner un pilote graphique ou laisser vide pour installer tous les " -"pilotes open-source" - -#: lib/user_interaction.py:921 lib/user_interaction.py:922 -#: lib/user_interaction.py:929 lib/user_interaction.py:932 -#: lib/user_interaction.py:935 lib/user_interaction.py:934 -#: lib/user_interaction/system_conf.py:96 -#: lib/user_interaction/system_conf.py:95 +"Sélectionner un pilote graphique ou laisser vide pour installer tous les pilotes open-source" + msgid "All open-source (default)" msgstr "Tout open-source (par défaut)" -#: lib/user_interaction.py:940 lib/user_interaction.py:941 -#: lib/user_interaction.py:948 lib/user_interaction.py:951 -#: lib/user_interaction.py:954 lib/user_interaction.py:953 -#: lib/user_interaction/system_conf.py:28 msgid "Choose which kernels to use or leave blank for default \"{}\"" msgstr "Choisir les noyaux à utiliser ou laissez vide par défaut \"{}\"" -#: lib/user_interaction.py:954 lib/user_interaction.py:955 -#: lib/user_interaction.py:962 lib/user_interaction.py:965 -#: lib/user_interaction.py:968 lib/user_interaction.py:967 -#: lib/user_interaction/locale_conf.py:16 msgid "Choose which locale language to use" msgstr "Choisir la langue locale à utiliser" -#: lib/user_interaction.py:968 lib/user_interaction.py:969 -#: lib/user_interaction.py:976 lib/user_interaction.py:979 -#: lib/user_interaction.py:982 lib/user_interaction.py:981 -#: lib/user_interaction/locale_conf.py:29 msgid "Choose which locale encoding to use" msgstr "Choisir quel encodage de paramètres régionaux utiliser" -#: lib/user_interaction.py:1009 lib/user_interaction.py:1010 -#: lib/user_interaction.py:1017 lib/user_interaction.py:1020 -#: lib/user_interaction.py:1023 lib/user_interaction.py:1022 -#: lib/user_interaction/backwards_compatible_conf.py:49 msgid "Select one of the values shown below: " msgstr "Sélectionner l'une des valeurs ci-dessous : " -#: lib/user_interaction.py:1050 lib/user_interaction.py:1051 -#: lib/user_interaction.py:1058 lib/user_interaction.py:1061 -#: lib/user_interaction.py:1064 lib/user_interaction.py:1063 -#: lib/user_interaction/backwards_compatible_conf.py:88 msgid "Select one or more of the options below: " msgstr "Sélectionner une ou plusieurs des options ci-dessous : " -#: lib/disk/filesystem.py:86 lib/disk/filesystem.py:87 -#: lib/disk/filesystem.py:85 msgid "Adding partition...." msgstr "Ajout de partition...." -#: lib/disk/filesystem.py:139 lib/disk/filesystem.py:141 -#: lib/disk/filesystem.py:142 lib/disk/filesystem.py:140 -msgid "" -"You need to enter a valid fs-type in order to continue. See `man parted` for " -"valid fs-type's." -msgstr "" -"Vous devez entrer un type de fs valide pour continuer. Voir `man parted` " -"pour les types de fs valides." +msgid "You need to enter a valid fs-type in order to continue. See `man parted` for valid fs-type's." +msgstr "Vous devez entrer un type de fs valide pour continuer. Voir `man parted` pour les types de fs valides." -#: lib/profiles.py:89 lib/profiles.py:90 msgid "Error: Listing profiles on URL \"{}\" resulted in:" msgstr "Erreur : la liste des profils sur l'URL \"{}\" a entraîné :" -#: lib/profiles.py:92 lib/profiles.py:93 msgid "Error: Could not decode \"{}\" result as JSON:" msgstr "Erreur : Impossible de décoder le résultat \"{}\" en tant que JSON :" -#: lib/menu/selection_menu.py:146 lib/menu/selection_menu.py:144 -#: lib/menu/selection_menu.py:148 lib/menu/selection_menu.py:412 -#: lib/menu/selection_menu.py:420 lib/user_interaction/global_menu.py:48 -#: lib/menu/selection_menu.py:468 lib/menu/global_menu.py:48 -#: lib/menu/global_menu.py:47 msgid "Select keyboard layout" msgstr "Sélectionner la disposition du clavier" -#: lib/menu/selection_menu.py:149 lib/menu/selection_menu.py:147 -#: lib/menu/selection_menu.py:151 lib/menu/selection_menu.py:415 -#: lib/menu/selection_menu.py:423 lib/user_interaction/global_menu.py:51 -#: lib/menu/selection_menu.py:471 lib/menu/global_menu.py:51 -#: lib/menu/global_menu.py:50 msgid "Select mirror region" msgstr "Sélectionner la région miroir" -#: lib/menu/selection_menu.py:154 lib/menu/selection_menu.py:152 -#: lib/menu/selection_menu.py:156 lib/menu/selection_menu.py:420 -#: lib/menu/selection_menu.py:428 lib/user_interaction/global_menu.py:56 -#: lib/menu/selection_menu.py:476 lib/menu/global_menu.py:56 -#: lib/menu/global_menu.py:55 msgid "Select locale language" msgstr "Sélectionner la langue locale" -#: lib/menu/selection_menu.py:156 lib/menu/selection_menu.py:154 -#: lib/menu/selection_menu.py:158 lib/menu/selection_menu.py:422 -#: lib/menu/selection_menu.py:430 lib/user_interaction/global_menu.py:58 -#: lib/menu/selection_menu.py:478 lib/menu/global_menu.py:58 -#: lib/menu/global_menu.py:57 msgid "Select locale encoding" msgstr "Sélectionner l'encodage des paramètres régionaux" -#: lib/menu/selection_menu.py:159 lib/menu/selection_menu.py:157 -#: lib/menu/selection_menu.py:161 lib/menu/selection_menu.py:425 -#: lib/menu/selection_menu.py:433 lib/user_interaction/global_menu.py:61 -#: lib/menu/selection_menu.py:481 lib/menu/global_menu.py:61 -#: lib/menu/global_menu.py:60 msgid "Select harddrives" msgstr "Sélectionner les disques durs" -#: lib/menu/selection_menu.py:163 lib/menu/selection_menu.py:161 -#: lib/menu/selection_menu.py:165 lib/menu/selection_menu.py:429 -#: lib/menu/selection_menu.py:437 lib/user_interaction/global_menu.py:65 -#: lib/menu/selection_menu.py:485 lib/menu/global_menu.py:65 -#: lib/menu/global_menu.py:64 msgid "Select disk layout" msgstr "Sélectionner la disposition du disque" -#: lib/menu/selection_menu.py:171 lib/menu/selection_menu.py:169 -#: lib/menu/selection_menu.py:173 lib/menu/selection_menu.py:437 -#: lib/menu/selection_menu.py:445 lib/user_interaction/global_menu.py:73 -#: lib/menu/selection_menu.py:493 lib/menu/global_menu.py:73 -#: lib/menu/global_menu.py:72 msgid "Set encryption password" msgstr "Définir le mot de passe de chiffrement" -#: lib/menu/selection_menu.py:177 lib/menu/selection_menu.py:175 -#: lib/menu/selection_menu.py:179 lib/menu/selection_menu.py:443 -#: lib/menu/selection_menu.py:451 lib/user_interaction/global_menu.py:79 -#: lib/menu/selection_menu.py:499 lib/menu/global_menu.py:79 -#: lib/menu/global_menu.py:78 msgid "Use swap" msgstr "Utiliser swap (partition d'échange)" -#: lib/menu/selection_menu.py:182 lib/menu/selection_menu.py:180 -#: lib/menu/selection_menu.py:184 lib/menu/selection_menu.py:448 -#: lib/menu/selection_menu.py:456 lib/user_interaction/global_menu.py:84 -#: lib/menu/selection_menu.py:504 lib/menu/global_menu.py:84 -#: lib/menu/global_menu.py:83 msgid "Select bootloader" msgstr "Sélectionner le chargeur de démarrage" -#: lib/menu/selection_menu.py:188 lib/menu/selection_menu.py:186 -#: lib/menu/selection_menu.py:190 lib/menu/selection_menu.py:454 -#: lib/menu/selection_menu.py:462 lib/user_interaction/global_menu.py:95 -#: lib/menu/selection_menu.py:515 lib/menu/global_menu.py:95 -#: lib/menu/global_menu.py:94 msgid "Set root password" msgstr "Définir le mot de passe root" -#: lib/menu/selection_menu.py:193 lib/menu/selection_menu.py:191 -#: lib/menu/selection_menu.py:195 lib/menu/selection_menu.py:459 -#: lib/menu/selection_menu.py:467 lib/user_interaction/global_menu.py:100 -#: lib/menu/selection_menu.py:520 lib/menu/global_menu.py:100 -#: lib/menu/global_menu.py:99 msgid "Specify superuser account" msgstr "Spécifier le compte superutilisateur" -#: lib/menu/selection_menu.py:199 lib/menu/selection_menu.py:197 -#: lib/menu/selection_menu.py:201 lib/menu/selection_menu.py:465 -#: lib/menu/selection_menu.py:473 lib/user_interaction/global_menu.py:107 -#: lib/menu/selection_menu.py:528 lib/menu/global_menu.py:107 msgid "Specify user account" msgstr "Spécifier le compte utilisateur" -#: lib/menu/selection_menu.py:205 lib/menu/selection_menu.py:203 -#: lib/menu/selection_menu.py:207 lib/menu/selection_menu.py:471 -#: lib/menu/selection_menu.py:479 lib/user_interaction/global_menu.py:114 -#: lib/menu/selection_menu.py:535 lib/menu/global_menu.py:114 msgid "Specify profile" msgstr "Spécifier le profil" -#: lib/menu/selection_menu.py:210 lib/menu/selection_menu.py:208 -#: lib/menu/selection_menu.py:212 lib/menu/selection_menu.py:476 -#: lib/menu/selection_menu.py:484 lib/user_interaction/global_menu.py:119 -#: lib/menu/selection_menu.py:540 lib/menu/global_menu.py:119 msgid "Select audio" msgstr "Sélectionner l'audio" -#: lib/menu/selection_menu.py:214 lib/menu/selection_menu.py:212 -#: lib/menu/selection_menu.py:216 lib/menu/selection_menu.py:480 -#: lib/menu/selection_menu.py:488 lib/user_interaction/global_menu.py:123 -#: lib/menu/selection_menu.py:544 lib/menu/global_menu.py:123 -#: lib/menu/global_menu.py:126 msgid "Select kernels" msgstr "Sélectionner les noyaux" -#: lib/menu/selection_menu.py:219 lib/menu/selection_menu.py:217 -#: lib/menu/selection_menu.py:221 lib/menu/selection_menu.py:485 -#: lib/menu/selection_menu.py:493 lib/user_interaction/global_menu.py:128 -#: lib/menu/selection_menu.py:549 lib/menu/global_menu.py:128 -#: lib/menu/global_menu.py:131 msgid "Additional packages to install" msgstr "Packages supplémentaires à installer" -#: lib/menu/selection_menu.py:224 lib/menu/selection_menu.py:222 -#: lib/menu/selection_menu.py:226 lib/menu/selection_menu.py:490 -#: lib/menu/selection_menu.py:498 lib/user_interaction/global_menu.py:139 -#: lib/menu/selection_menu.py:560 lib/menu/global_menu.py:139 -#: lib/menu/global_menu.py:142 msgid "Configure network" msgstr "Configurer le réseau" -#: lib/menu/selection_menu.py:232 lib/menu/selection_menu.py:230 -#: lib/menu/selection_menu.py:234 lib/menu/selection_menu.py:498 -#: lib/menu/selection_menu.py:506 lib/user_interaction/global_menu.py:150 -#: lib/menu/selection_menu.py:571 lib/menu/global_menu.py:150 -#: lib/menu/global_menu.py:153 msgid "Set automatic time sync (NTP)" msgstr "Définir la synchronisation automatique de l'heure (NTP)" -#: lib/menu/selection_menu.py:310 lib/menu/selection_menu.py:308 -#: lib/menu/selection_menu.py:315 lib/menu/selection_menu.py:527 -#: lib/menu/selection_menu.py:535 lib/user_interaction/global_menu.py:187 -#: lib/menu/selection_menu.py:608 lib/menu/global_menu.py:187 -#: lib/menu/global_menu.py:190 msgid "Install ({} config(s) missing)" msgstr "Installer ({} configuration(s) manquante(s))" -#: lib/menu/selection_menu.py:373 lib/menu/selection_menu.py:371 -#: lib/menu/selection_menu.py:378 lib/menu/selection_menu.py:591 -#: lib/menu/selection_menu.py:599 lib/user_interaction/global_menu.py:249 -#: lib/menu/selection_menu.py:669 lib/menu/global_menu.py:249 -#: lib/menu/global_menu.py:260 msgid "" "You decided to skip harddrive selection\n" "and will use whatever drive-setup is mounted at {} (experimental)\n" @@ -708,120 +305,54 @@ msgid "" msgstr "" "Vous avez décidé d'ignorer la sélection du disque dur\n" "et vous utiliserez la configuration de disque montée sur {} (expérimental)\n" -"ATTENTION : Archinstall ne vérifiera pas l'adéquation de cette " -"configuration\n" +"ATTENTION : Archinstall ne vérifiera pas l'adéquation de cette configuration\n" "Souhaitez-vous continuer ?" -#: lib/disk/filesystem.py:97 lib/disk/filesystem.py:98 -#: lib/disk/filesystem.py:96 msgid "Re-using partition instance: {}" msgstr "Réutilisation de l'instance de partition : {}" -#: lib/user_interaction.py:590 lib/user_interaction.py:593 -#: lib/user_interaction.py:596 lib/user_interaction.py:595 -#: lib/user_interaction/partitioning_conf.py:119 -#: lib/user_interaction/partitioning_conf.py:120 -#: lib/user_interaction/partitioning_conf.py:128 msgid "Create a new partition" msgstr "Créer une nouvelle partition" -#: lib/user_interaction.py:592 lib/user_interaction.py:595 -#: lib/user_interaction.py:598 lib/user_interaction.py:597 -#: lib/user_interaction/partitioning_conf.py:121 -#: lib/user_interaction/partitioning_conf.py:122 -#: lib/user_interaction/partitioning_conf.py:130 msgid "Delete a partition" msgstr "Supprimer une partition" -#: lib/user_interaction.py:593 lib/user_interaction.py:596 -#: lib/user_interaction.py:599 lib/user_interaction.py:598 -#: lib/user_interaction/partitioning_conf.py:122 -#: lib/user_interaction/partitioning_conf.py:123 -#: lib/user_interaction/partitioning_conf.py:131 msgid "Clear/Delete all partitions" msgstr "Effacer/Supprimer toutes les partitions" -#: lib/user_interaction.py:594 lib/user_interaction.py:597 -#: lib/user_interaction.py:600 lib/user_interaction.py:599 -#: lib/user_interaction/partitioning_conf.py:123 -#: lib/user_interaction/partitioning_conf.py:124 -#: lib/user_interaction/partitioning_conf.py:132 msgid "Assign mount-point for a partition" msgstr "Attribuer un point de montage pour une partition" -#: lib/user_interaction.py:595 lib/user_interaction.py:598 -#: lib/user_interaction.py:601 lib/user_interaction.py:600 -#: lib/user_interaction/partitioning_conf.py:124 -#: lib/user_interaction/partitioning_conf.py:125 -#: lib/user_interaction/partitioning_conf.py:133 msgid "Mark/Unmark a partition to be formatted (wipes data)" msgstr "Marquer/Démarquer une partition à formater (efface les données)" -#: lib/user_interaction.py:596 lib/user_interaction.py:599 -#: lib/user_interaction.py:602 lib/user_interaction.py:601 -#: lib/user_interaction/partitioning_conf.py:125 -#: lib/user_interaction/partitioning_conf.py:126 -#: lib/user_interaction/partitioning_conf.py:134 msgid "Mark/Unmark a partition as encrypted" msgstr "Marquer/Démarquer une partition comme chiffrée" -#: lib/user_interaction.py:597 lib/user_interaction.py:600 -#: lib/user_interaction.py:603 lib/user_interaction.py:602 -#: lib/user_interaction/partitioning_conf.py:126 -#: lib/user_interaction/partitioning_conf.py:127 -#: lib/user_interaction/partitioning_conf.py:136 msgid "Mark/Unmark a partition as bootable (automatic for /boot)" -msgstr "" -"Marquer/Démarquer une partition comme amorçable (automatique pour /boot)" +msgstr "Marquer/Démarquer une partition comme amorçable (automatique pour /boot)" -#: lib/user_interaction.py:598 lib/user_interaction.py:601 -#: lib/user_interaction.py:604 lib/user_interaction.py:603 -#: lib/user_interaction/partitioning_conf.py:127 -#: lib/user_interaction/partitioning_conf.py:128 -#: lib/user_interaction/partitioning_conf.py:137 msgid "Set desired filesystem for a partition" msgstr "Définir le système de fichiers souhaité pour une partition" -#: lib/menu/selection_menu.py:239 lib/menu/selection_menu.py:237 -#: lib/menu/selection_menu.py:241 lib/menu/selection_menu.py:270 -#: lib/menu/selection_menu.py:507 lib/menu/selection_menu.py:515 -#: lib/user_interaction/global_menu.py:167 lib/menu/selection_menu.py:588 -#: lib/menu/global_menu.py:167 lib/menu/global_menu.py:170 msgid "Abort" msgstr "Abandonner" -#: lib/menu/selection_menu.py:183 lib/menu/selection_menu.py:187 -#: lib/menu/selection_menu.py:451 lib/menu/selection_menu.py:459 -#: lib/user_interaction/global_menu.py:89 lib/menu/selection_menu.py:509 -#: lib/menu/global_menu.py:89 lib/menu/global_menu.py:88 msgid "Specify hostname" msgstr "Spécifier le nom d'hôte" -#: lib/menu/selection_menu.py:228 lib/menu/selection_menu.py:492 -#: lib/menu/selection_menu.py:500 lib/user_interaction/global_menu.py:141 -#: lib/menu/selection_menu.py:562 lib/menu/global_menu.py:141 -#: lib/menu/global_menu.py:195 msgid "Not configured, unavailable unless setup manually" msgstr "Non configuré, indisponible sauf configuration manuelle" -#: lib/menu/selection_menu.py:231 lib/menu/selection_menu.py:495 -#: lib/menu/selection_menu.py:503 lib/user_interaction/global_menu.py:145 -#: lib/menu/selection_menu.py:566 lib/menu/global_menu.py:145 -#: lib/menu/global_menu.py:148 msgid "Select timezone" msgstr "Sélectionner le fuseau horaire" -#: lib/menu/selection_menu.py:266 lib/menu/selection_menu.py:276 -#: lib/menu/selection_menu.py:312 lib/menu/selection_menu.py:301 msgid "Set/Modify the below options" msgstr "Définir/Modifier les options ci-dessous" -#: lib/menu/selection_menu.py:272 msgid "Install" msgstr "Installer" -#: lib/menu/menu.py:68 lib/menu/menu.py:75 lib/menu/menu.py:119 -#: lib/menu/menu.py:133 msgid "" "Use ESC to skip\n" "\n" @@ -829,186 +360,80 @@ msgstr "" "Utiliser ESC pour ignorer\n" "\n" -#: lib/user_interaction.py:591 lib/user_interaction.py:594 -#: lib/user_interaction.py:597 lib/user_interaction.py:596 -#: lib/user_interaction/partitioning_conf.py:120 -#: lib/user_interaction/partitioning_conf.py:121 -#: lib/user_interaction/partitioning_conf.py:129 msgid "Suggest partition layout" msgstr "Suggérer la disposition des partitions" -#: lib/user_interaction.py:101 lib/user_interaction/utils.py:43 -#: lib/user_interaction/utils.py:40 msgid "Enter a password: " msgstr "Entrer un mot de passe : " -#: lib/disk/filesystem.py:117 lib/disk/filesystem.py:118 -#: lib/disk/filesystem.py:116 msgid "Enter a encryption password for {}" msgstr "Entrer un mot de passe de cryptage pour {}" -#: lib/menu/selection_menu.py:174 lib/menu/selection_menu.py:567 -#: lib/menu/selection_menu.py:575 lib/user_interaction/global_menu.py:225 -#: lib/menu/selection_menu.py:646 lib/menu/global_menu.py:225 -#: lib/menu/global_menu.py:236 msgid "Enter disk encryption password (leave blank for no encryption): " -msgstr "" -"Entrer le mot de passe de chiffrement du disque (laisser vide pour aucun " -"chiffrement) : " +msgstr "Entrer le mot de passe de chiffrement du disque (laisser vide pour aucun chiffrement) : " -#: lib/menu/selection_menu.py:407 lib/menu/selection_menu.py:617 -#: lib/menu/selection_menu.py:625 msgid "Create a required super-user with sudo privileges: " msgstr "Créer un super-utilisateur requis avec les privilèges sudo : " -#: lib/menu/selection_menu.py:347 lib/menu/selection_menu.py:554 -#: lib/menu/selection_menu.py:562 lib/user_interaction/global_menu.py:220 -#: lib/menu/selection_menu.py:641 lib/menu/global_menu.py:220 -#: lib/menu/global_menu.py:231 msgid "Enter root password (leave blank to disable root): " msgstr "Entrer le mot de passe root (laisser vide pour désactiver root) : " -#: lib/user_interaction.py:307 lib/user_interaction.py:324 -#: lib/user_interaction/manage_users_conf.py:86 -#: lib/user_interaction/manage_users_conf.py:121 -#: lib/user_interaction/manage_users_conf.py:83 -#: lib/user_interaction/manage_users_conf.py:118 msgid "Password for user \"{}\": " msgstr "Mot de passe pour l'utilisateur \"{}\" : " -#: lib/user_interaction.py:405 lib/user_interaction.py:408 -#: lib/user_interaction.py:407 lib/user_interaction/general_conf.py:152 -msgid "" -"Verifying that additional packages exist (this might take a few seconds)" -msgstr "" -"Vérifier que des packages supplémentaires existent (cela peut prendre " -"quelques secondes)" +msgid "Verifying that additional packages exist (this might take a few seconds)" +msgstr "Vérifier que des packages supplémentaires existent (cela peut prendre quelques secondes)" -#: lib/user_interaction.py:281 lib/user_interaction/general_conf.py:22 -msgid "" -"Would you like to use automatic time synchronization (NTP) with the default " -"time servers?\n" -msgstr "" -"Souhaitez-vous utiliser la synchronisation automatique de l'heure (NTP) avec " -"les serveurs de temps par défaut ?\n" +msgid "Would you like to use automatic time synchronization (NTP) with the default time servers?\n" +msgstr "Souhaitez-vous utiliser la synchronisation automatique de l'heure (NTP) avec les serveurs de temps par défaut ?\n" -#: lib/user_interaction.py:282 lib/user_interaction/general_conf.py:23 msgid "" -"Hardware time and other post-configuration steps might be required in order " -"for NTP to work.\n" +"Hardware time and other post-configuration steps might be required in order for NTP to work.\n" "For more information, please check the Arch wiki" msgstr "" -"Le temps matériel et d'autres étapes de post-configuration peuvent être " -"nécessaires pour que NTP fonctionne.\n" +"Le temps matériel et d'autres étapes de post-configuration peuvent être nécessaires pour que NTP fonctionne.\n" "Pour plus d'informations, veuillez consulter le wiki Arch" -#: lib/menu/selection_menu.py:411 lib/menu/selection_menu.py:621 -#: lib/menu/selection_menu.py:629 msgid "Enter a username to create an additional user (leave blank to skip): " -msgstr "" -"Entrer un nom d'utilisateur pour créer un utilisateur supplémentaire " -"(laisser vide pour ignorer) : " +msgstr "Entrer un nom d'utilisateur pour créer un utilisateur supplémentaire (laisser vide pour ignorer) : " -#: lib/menu/menu.py:116 lib/menu/menu.py:130 msgid "Use ESC to skip\n" msgstr "Utiliser ESC pour ignorer\n" -#: lib/menu/list_manager.py:117 lib/menu/list_manager.py:128 msgid "" "\n" -" Choose an object from the list, and select one of the available actions for " -"it to execute" +" Choose an object from the list, and select one of the available actions for it to execute" msgstr "" "\n" -"Choisir un objet dans la liste et sélectionner l'une des actions disponibles " -"pour qu'il s'exécute" +"Choisir un objet dans la liste et sélectionner l'une des actions disponibles pour qu'il s'exécute" -#: lib/menu/list_manager.py:130 lib/user_interaction/subvolume_config.py:90 -#: lib/menu/list_manager.py:141 lib/user_interaction/subvolume_config.py:93 msgid "Cancel" msgstr "Annuler" -#: lib/menu/list_manager.py:131 lib/menu/list_manager.py:142 msgid "Confirm and exit" msgstr "Confirmer et quitter" -#: lib/menu/list_manager.py:135 lib/menu/list_manager.py:228 -#: lib/menu/list_manager.py:251 lib/menu/list_manager.py:276 -#: lib/user_interaction/subvolume_config.py:12 -#: lib/user_interaction/subvolume_config.py:44 -#: lib/user_interaction/subvolume_config.py:78 -#: lib/user_interaction/subvolume_config.py:82 -#: lib/user_interaction/subvolume_config.py:85 lib/menu/list_manager.py:146 -#: lib/menu/list_manager.py:249 lib/menu/list_manager.py:272 -#: lib/user_interaction/subvolume_config.py:15 -#: lib/user_interaction/subvolume_config.py:47 -#: lib/user_interaction/subvolume_config.py:81 -#: lib/user_interaction/subvolume_config.py:88 msgid "Add" msgstr "Ajouter" -#: lib/menu/list_manager.py:135 lib/menu/list_manager.py:231 -#: lib/menu/list_manager.py:255 lib/user_interaction/subvolume_config.py:78 -#: lib/menu/list_manager.py:146 lib/menu/list_manager.py:252 -#: lib/menu/list_manager.py:276 lib/user_interaction/subvolume_config.py:81 msgid "Copy" msgstr "Copier" -#: lib/menu/list_manager.py:135 lib/menu/list_manager.py:237 -#: lib/menu/list_manager.py:261 lib/user_interaction/subvolume_config.py:82 -#: lib/user_interaction/subvolume_config.py:85 lib/menu/list_manager.py:146 -#: lib/menu/list_manager.py:258 lib/menu/list_manager.py:282 -#: lib/user_interaction/subvolume_config.py:88 msgid "Edit" msgstr "Modifier" -#: lib/menu/list_manager.py:135 lib/menu/list_manager.py:242 -#: lib/menu/list_manager.py:264 lib/user_interaction/subvolume_config.py:40 -#: lib/menu/list_manager.py:146 lib/menu/list_manager.py:263 -#: lib/menu/list_manager.py:285 lib/user_interaction/subvolume_config.py:44 msgid "Delete" msgstr "Supprimer" -#: lib/menu/list_manager.py:185 lib/menu/list_manager.py:206 msgid "Select an action for < {} >" msgstr "Sélectionner une action pour < {} >" -#: lib/menu/list_manager.py:229 lib/menu/list_manager.py:250 -msgid "Add :" -msgstr "Ajouter :" - -#: lib/menu/list_manager.py:233 lib/menu/list_manager.py:254 -msgid "Copy to :" -msgstr "Copier :" - -#: lib/menu/list_manager.py:240 lib/menu/list_manager.py:261 -msgid "Edite :" -msgstr "Modifier :" - -#: lib/menu/list_manager.py:252 lib/menu/list_manager.py:273 -msgid "Key :" -msgstr "Clé :" - -#: lib/menu/list_manager.py:253 lib/menu/list_manager.py:274 -msgid "Value :" -msgstr "Valeur :" - -#: lib/menu/list_manager.py:257 lib/menu/list_manager.py:278 msgid "Copy to new key:" msgstr "Copier vers une nouvelle clé :" -#: lib/menu/list_manager.py:262 lib/menu/list_manager.py:283 -#, python-brace-format -msgid "Edit {origkey} :" -msgstr "Modifier {origkey} :" - -#: lib/models/network_configuration.py:53 -#: lib/models/network_configuration.py:74 -#: lib/models/network_configuration.py:167 msgid "Unknown nic type: {}. Possible values are {}" msgstr "Type de carte réseau inconnu : {}. Les valeurs possibles sont {}" -#: lib/configuration.py:75 msgid "" "\n" "This is your chosen configuration:" @@ -1016,43 +441,27 @@ msgstr "" "\n" "Voici la configuration choisie :" -#: lib/pacman.py:18 -msgid "" -"Pacman is already running, waiting maximum 10 minutes for it to terminate." -msgstr "" -"Pacman est déjà en cours d'exécution, attendez au maximum 10 minutes pour " -"qu'il se termine." +msgid "Pacman is already running, waiting maximum 10 minutes for it to terminate." +msgstr "Pacman est déjà en cours d'exécution, attendez au maximum 10 minutes pour qu'il se termine." -#: lib/pacman.py:25 -msgid "" -"Pre-existing pacman lock never exited. Please clean up any existing pacman " -"sessions before using archinstall." -msgstr "" -"Le verrou pacman préexistant n'a jamais été fermé. Veuillez nettoyer toutes " -"les sessions pacman existantes avant d'utiliser archinstall." +msgid "Pre-existing pacman lock never exited. Please clean up any existing pacman sessions before using archinstall." +msgstr "Le verrou pacman préexistant n'a jamais été fermé. Veuillez nettoyer toutes les sessions pacman existantes avant d'utiliser archinstall." -#: lib/user_interaction/general_conf.py:174 msgid "Choose which optional additional repositories to enable" msgstr "Choisir les référentiels supplémentaires en option à activer" -#: lib/user_interaction/manage_users_conf.py:32 msgid "Add a user" msgstr "Ajouter un utilisateur" -#: lib/user_interaction/manage_users_conf.py:33 msgid "Change password" msgstr "Changer le mot de passe" -#: lib/user_interaction/manage_users_conf.py:34 msgid "Promote/Demote user" msgstr "Promouvoir/Rétrograder l'utilisateur" -#: lib/user_interaction/manage_users_conf.py:35 msgid "Delete User" msgstr "Supprimer l'utilisateur" -#: lib/user_interaction/manage_users_conf.py:99 -#: lib/user_interaction/manage_users_conf.py:96 msgid "" "\n" "Define a new user\n" @@ -1060,34 +469,21 @@ msgstr "" "\n" "Définir un nouvel utilisateur\n" -#: lib/user_interaction/manage_users_conf.py:100 -#: lib/user_interaction/manage_users_conf.py:97 msgid "User Name : " msgstr "Nom d'utilisateur : " -#: lib/user_interaction/manage_users_conf.py:115 -#: lib/user_interaction/manage_users_conf.py:112 msgid "Should {} be a superuser (sudoer)?" msgstr "Cet utilisateur {} doit-il être un superutilisateur (sudoer) ?" -#: lib/user_interaction/manage_users_conf.py:161 msgid "Define users with sudo privilege: " msgstr "Définir les utilisateurs avec le privilège sudo : " -#: lib/user_interaction/network_conf.py:24 -#: lib/user_interaction/network_conf.py:124 msgid "No network configuration" msgstr "Aucune configuration réseau" -#: lib/user_interaction/partitioning_conf.py:128 -#: lib/user_interaction/partitioning_conf.py:129 -#: lib/user_interaction/partitioning_conf.py:138 msgid "Set desired subvolumes on a btrfs partition" msgstr "Définir les sous-volumes souhaités sur une partition btrfs" -#: lib/user_interaction/partitioning_conf.py:296 -#: lib/user_interaction/partitioning_conf.py:303 -#: lib/user_interaction/partitioning_conf.py:336 msgid "" "{}\n" "\n" @@ -1097,100 +493,66 @@ msgstr "" "\n" "Sélectionner la partition sur laquelle définir les sous-volumes" -#: lib/user_interaction/partitioning_conf.py:305 -#: lib/user_interaction/partitioning_conf.py:312 -#: lib/user_interaction/partitioning_conf.py:346 msgid "Manage btrfs subvolumes for current partition" msgstr "Gérer les sous-volumes btrfs pour la partition actuelle" -#: lib/user_interaction/save_conf.py:24 lib/user_interaction/save_conf.py:29 msgid "No configuration" msgstr "Aucune configuration" -#: lib/user_interaction/save_conf.py:42 msgid "Save user configuration" msgstr "Enregistrer la configuration utilisateur" -#: lib/user_interaction/save_conf.py:43 msgid "Save user credentials" msgstr "Enregistrer les informations d'identification de l'utilisateur" -#: lib/user_interaction/save_conf.py:44 msgid "Save disk layout" msgstr "Enregistrer la disposition du disque" -#: lib/user_interaction/save_conf.py:45 msgid "Save all" msgstr "Tout enregistrer" -#: lib/user_interaction/save_conf.py:48 msgid "Choose which configuration to save" msgstr "Choisir la configuration à enregistrer" -#: lib/user_interaction/save_conf.py:59 msgid "Enter a directory for the configuration(s) to be saved: " msgstr "Saisir un répertoire pour la ou les configuration(s) à enregistrer : " -#: lib/user_interaction/save_conf.py:63 msgid "Not a valid directory: {}" msgstr "Répertoire non valide : {}" -#: lib/user_interaction/utils.py:32 msgid "The password you are using seems to be weak," msgstr "Le mot de passe que vous utilisez semble faible," -#: lib/user_interaction/utils.py:33 msgid "are you sure you want to use it?" msgstr "êtes-vous sûr de vouloir l'utiliser ?" -#: lib/user_interaction/global_menu.py:134 lib/menu/selection_menu.py:555 -#: lib/menu/global_menu.py:134 lib/menu/global_menu.py:137 msgid "Additional repositories to enable" msgstr "Référentiels supplémentaires à activer" -#: lib/user_interaction/global_menu.py:155 lib/menu/selection_menu.py:576 -#: lib/menu/global_menu.py:155 lib/menu/global_menu.py:160 msgid "Save configuration" msgstr "Enregistrer la configuration" -#: lib/user_interaction/global_menu.py:192 lib/menu/selection_menu.py:613 -#: lib/menu/global_menu.py:192 lib/menu/global_menu.py:205 msgid "Missing configurations:\n" msgstr "Configurations manquantes :\n" -#: lib/user_interaction/global_menu.py:210 lib/menu/selection_menu.py:631 -#: lib/menu/global_menu.py:210 lib/menu/global_menu.py:221 msgid "Either root-password or at least 1 superuser must be specified" msgstr "Le mot de passe root ou au moins 1 superutilisateur doit être spécifié" -#: lib/user_interaction/global_menu.py:275 lib/menu/selection_menu.py:695 -#: lib/menu/global_menu.py:275 lib/menu/global_menu.py:287 msgid "Manage superuser accounts: " msgstr "Gérer les comptes de superutilisateur : " -#: lib/user_interaction/global_menu.py:279 lib/menu/selection_menu.py:699 -#: lib/menu/global_menu.py:279 lib/menu/global_menu.py:291 msgid "Manage ordinary user accounts: " msgstr "Gérer les comptes d'utilisateurs ordinaires : " -#: lib/user_interaction/subvolume_config.py:17 -#: lib/user_interaction/subvolume_config.py:20 msgid " Subvolume :{:16}" msgstr " Sous-volume :{:16}" -#: lib/user_interaction/subvolume_config.py:19 -#: lib/user_interaction/subvolume_config.py:22 -#: lib/user_interaction/subvolume_config.py:25 msgid " mounted at {:16}" msgstr " monté à {:16}" -#: lib/user_interaction/subvolume_config.py:26 -#: lib/user_interaction/subvolume_config.py:29 msgid " with option {}" msgstr " avec option {}" -#: lib/user_interaction/subvolume_config.py:46 -#: lib/user_interaction/subvolume_config.py:49 msgid "" "\n" " Fill the desired values for a new subvolume \n" @@ -1198,190 +560,187 @@ msgstr "" "\n" " Remplir les valeurs souhaitées pour un nouveau sous-volume \n" -#: lib/user_interaction/subvolume_config.py:77 -#: lib/user_interaction/subvolume_config.py:80 msgid "Subvolume name " msgstr "Nom du sous-volume " -#: lib/user_interaction/subvolume_config.py:81 -#: lib/user_interaction/subvolume_config.py:84 msgid "Subvolume mountpoint" msgstr "Point de montage du sous-volume" -#: lib/user_interaction/subvolume_config.py:84 -#: lib/user_interaction/subvolume_config.py:87 msgid "Subvolume options" msgstr "Options de sous-volume" -#: lib/user_interaction/subvolume_config.py:87 -#: lib/user_interaction/subvolume_config.py:90 msgid "Save" msgstr "Sauver" -#: lib/user_interaction/subvolume_config.py:121 -#: lib/user_interaction/subvolume_config.py:124 msgid "Subvolume name :" msgstr "Nom du sous-volume :" -#: lib/user_interaction/subvolume_config.py:124 -#: lib/user_interaction/subvolume_config.py:127 msgid "Select a mount point :" msgstr "Sélectionner un point de montage :" -#: lib/user_interaction/subvolume_config.py:128 -#: lib/user_interaction/subvolume_config.py:131 msgid "Select the desired subvolume options " msgstr "Sélectionner les options de sous-volume souhaitées " -#: lib/user_interaction/manage_users_conf.py:161 -#: lib/user_interaction/manage_users_conf.py:158 msgid "Define users with sudo privilege, by username: " -msgstr "" -"Définir les utilisateurs avec le privilège sudo, par nom d'utilisateur : " +msgstr "Définir les utilisateurs avec le privilège sudo, par nom d'utilisateur : " -#: lib/installer.py:152 lib/installer.py:154 msgid "[!] A log file has been created here: {}" msgstr "[!] Un fichier journal a été créé ici : {}" -#: lib/disk/user_guides.py:30 msgid "Would you like to use BTRFS subvolumes with a default structure?" -msgstr "" -"Souhaitez-vous utiliser des sous-volumes BTRFS avec une structure par " -"défaut ?" +msgstr "Souhaitez-vous utiliser des sous-volumes BTRFS avec une structure par défaut ?" -#: lib/disk/user_guides.py:34 lib/disk/user_guides.py:174 msgid "Would you like to use BTRFS compression?" msgstr "Souhaitez-vous utiliser la compression BTRFS ?" -#: lib/disk/user_guides.py:91 msgid "Would you like to create a separate partition for /home?" msgstr "Souhaitez-vous créer une partition séparée pour /home ?" -#: lib/disk/user_guides.py:161 -msgid "" -"The selected drives do not have the minimum capacity required for an " -"automatic suggestion\n" -msgstr "" -"Les disques sélectionnés n'ont pas la capacité minimale requise pour une " -"suggestion automatique\n" +msgid "The selected drives do not have the minimum capacity required for an automatic suggestion\n" +msgstr "Les disques sélectionnés n'ont pas la capacité minimale requise pour une suggestion automatique\n" -#: lib/disk/user_guides.py:162 msgid "Minimum capacity for /home partition: {}GB\n" msgstr "Capacité minimale pour la partition /home : {} Go\n" -#: lib/disk/user_guides.py:163 msgid "Minimum capacity for Arch Linux partition: {}GB" msgstr "Capacité minimale pour la partition Arch Linux : {} Go" -#: lib/disk/user_guides.py:164 msgid "Continue" msgstr "Poursuivre" -#: lib/menu/menu.py:20 msgid "yes" msgstr "oui" -#: lib/menu/menu.py:24 msgid "no" msgstr "non" -#: lib/menu/selection_menu.py:137 msgid "set: {}" msgstr "définir : {}" -#: lib/models/network_configuration.py:118 msgid "Manual configuration setting must be a list" msgstr "Le paramètre de configuration manuelle doit être une liste" -#: lib/models/network_configuration.py:127 msgid "No iface specified for manual configuration" msgstr "Aucun iface spécifié pour la configuration manuelle" -#: lib/models/network_configuration.py:137 msgid "Manual nic configuration with no auto DHCP requires an IP address" -msgstr "" -"La configuration manuelle de la carte réseau sans DHCP automatique nécessite " -"une adresse IP" +msgstr "La configuration manuelle de la carte réseau sans DHCP automatique nécessite une adresse IP" -#: lib/user_interaction/network_conf.py:37 msgid "Add interface" msgstr "Ajouter une interface" -#: lib/user_interaction/network_conf.py:38 msgid "Edit interface" msgstr "Modifier l'interface" -#: lib/user_interaction/network_conf.py:39 msgid "Delete interface" msgstr "Supprimer l'interface" -#: lib/user_interaction/network_conf.py:69 msgid "Select interface to add" msgstr "Sélectionner l'interface à ajouter" -#: lib/user_interaction/network_conf.py:127 msgid "Manual configuration" msgstr "Configuration manuelle" -#: lib/user_interaction/partitioning_conf.py:135 msgid "Mark/Unmark a partition as compressed (btrfs only)" msgstr "Marquer/Démarquer une partition comme compressée (btrfs uniquement)" -#: lib/user_interaction/utils.py:31 -msgid "" -"The password you are using seems to be weak, are you sure you want to use it?" -msgstr "" -"Le mot de passe que vous utilisez semble faible, êtes-vous sûr de vouloir " -"l'utiliser ?" +msgid "The password you are using seems to be weak, are you sure you want to use it?" +msgstr "Le mot de passe que vous utilisez semble faible, êtes-vous sûr de vouloir l'utiliser ?" -#: profiles/desktop.py:7 -msgid "" -"Provides a selection of desktop environments and tiling window managers, e." -"g. gnome, kde, sway" -msgstr "" -"Fournit une sélection d'environnements de bureau et de gestionnaires de " -"fenêtres en mosaïque, par ex. gnome, kde, sway" +msgid "Provides a selection of desktop environments and tiling window managers, e.g. gnome, kde, sway" +msgstr "Fournit une sélection d'environnements de bureau et de gestionnaires de fenêtres en mosaïque, par ex. gnome, kde, sway" -#: profiles/desktop.py:49 msgid "Select your desired desktop environment" msgstr "Sélectionner l'environnement de bureau souhaité" -#: profiles/minimal.py:5 -msgid "" -"A very basic installation that allows you to customize Arch Linux as you see " -"fit." -msgstr "" -"Une installation très basique qui vous permet de personnaliser Arch Linux " -"comme bon vous semble." +msgid "A very basic installation that allows you to customize Arch Linux as you see fit." +msgstr "Une installation très basique qui vous permet de personnaliser Arch Linux comme bon vous semble." -#: profiles/server.py:9 -msgid "" -"Provides a selection of various server packages to install and enable, e.g. " -"httpd, nginx, mariadb" -msgstr "" -"Fournit une sélection de divers paquets de serveur à installer et à activer, " -"par ex. httpd, nginx, mariadb" +msgid "Provides a selection of various server packages to install and enable, e.g. httpd, nginx, mariadb" +msgstr "Fournit une sélection de divers paquets de serveur à installer et à activer, par ex. httpd, nginx, mariadb" -#: profiles/server.py:30 -msgid "" -"Choose which servers to install, if none then a minimal installation wil be " -"done" -msgstr "" -"Choisir les serveurs à installer, s'il n'y en a pas, une installation " -"minimale sera effectuée" +msgid "Choose which servers to install, if none then a minimal installation wil be done" +msgstr "Choisir les serveurs à installer, s'il n'y en a pas, une installation minimale sera effectuée" -#: profiles/xorg.py:9 msgid "Installs a minimal system as well as xorg and graphics drivers." msgstr "Installe un système minimal ainsi que les pilotes graphiques et xorg." -#: examples/guided.py:303 msgid "Press Enter to continue." msgstr "Appuyer sur Entrée pour continuer." -#: examples/guided.py:260 +msgid "Would you like to chroot into the newly created installation and perform post-installation configuration?" +msgstr "Souhaitez-vous chrooter dans l'installation nouvellement créée et effectuer la configuration post-installation ?" + +#, fuzzy +msgid "Are you sure you want to reset this setting?" +msgstr "êtes-vous sûr de vouloir l'utiliser ?" + +#, fuzzy +msgid "Select one or more hard drives to use and configure\n" +msgstr "Sélectionner un ou plusieurs disques durs à utiliser et à configurer" + +msgid "Any modifications to the existing setting will reset the disk layout!" +msgstr "" + +msgid "If you reset the harddrive selection this will also reset the current disk layout. Are you sure?" +msgstr "" + +#, fuzzy +msgid "Save and exit" +msgstr "Confirmer et quitter" + +#, fuzzy +msgid "" +"{}\n" +"contains queued partitions, this will remove those, are you sure?" +msgstr "{} contient des partitions en file d'attente, cela les supprimera, êtes-vous sûr ?" + +#, fuzzy +msgid "No audio server" +msgstr "Choisir un serveur audio" + +msgid "(default)" +msgstr "" + +#, fuzzy +msgid "Use ESC to skip" +msgstr "Utiliser ESC pour ignorer\n" + msgid "" -"Would you like to chroot into the newly created installation and perform " -"post-installation configuration?" +"Use CTRL+C to reset current selection\n" +"\n" msgstr "" -"Souhaitez-vous chrooter dans l'installation nouvellement créée et effectuer " -"la configuration post-installation ?" + +#, fuzzy +msgid "Copy to: " +msgstr "Copier :" + +#, fuzzy +msgid "Edit: " +msgstr "Modifier" + +msgid "Key: " +msgstr "" + +#, fuzzy +msgid "Edit {}: " +msgstr "Modifier :" + +msgid "Add :" +msgstr "Ajouter :" + +msgid "Value :" +msgstr "Valeur :" + +#, python-brace-format +#~ msgid "Edit {origkey} :" +#~ msgstr "Modifier {origkey} :" + +#~ msgid "Copy to :" +#~ msgstr "Copier :" + +#~ msgid "Edite :" +#~ msgstr "Modifier :" + +#~ msgid "Key :" +#~ msgstr "Clé :" diff --git a/archinstall/locales/locales_generator.sh b/archinstall/locales/locales_generator.sh index 43e004d4..9432f83f 100755 --- a/archinstall/locales/locales_generator.sh +++ b/archinstall/locales/locales_generator.sh @@ -2,11 +2,11 @@ cd $(dirname "$0")/.. -find . -type f -iname "*.py" | xargs xgettext -j --omit-header -d base -o locales/base.pot +find . -type f -iname "*.py" | xargs xgettext --join-existing --no-location --omit-header -d base -o locales/base.pot for file in $(find locales/ -name "base.po"); do echo "Updating: $file" path=$(dirname $file) - msgmerge --quiet --width 512 --update $file locales/base.pot + msgmerge --quiet --no-location --width 512 --update $file locales/base.pot msgfmt -o $path/base.mo $file done diff --git a/archinstall/locales/nl/LC_MESSAGES/base.mo b/archinstall/locales/nl/LC_MESSAGES/base.mo index ad8619c3..5a6fa8ff 100644 Binary files a/archinstall/locales/nl/LC_MESSAGES/base.mo and b/archinstall/locales/nl/LC_MESSAGES/base.mo differ diff --git a/archinstall/locales/nl/LC_MESSAGES/base.po b/archinstall/locales/nl/LC_MESSAGES/base.po index bc93b36f..d1d54922 100644 --- a/archinstall/locales/nl/LC_MESSAGES/base.po +++ b/archinstall/locales/nl/LC_MESSAGES/base.po @@ -12,172 +12,81 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 3.0.1\n" -#: lib/installer.py:144 lib/installer.py:152 msgid "[!] A log file has been created here: {} {}" msgstr "[!] Er is een logboek aangemaakt: {} {}" -#: lib/installer.py:145 lib/installer.py:153 -msgid "" -" Please submit this issue (and file) to https://github.com/archlinux/" -"archinstall/issues" -msgstr "" -" Meld dit voorval (inclusief het logboek) op https://github.com/archlinux/" -"archinstall/issues" +msgid " Please submit this issue (and file) to https://github.com/archlinux/archinstall/issues" +msgstr " Meld dit voorval (inclusief het logboek) op https://github.com/archlinux/archinstall/issues" -#: lib/user_interaction.py:83 lib/user_interaction/utils.py:86 msgid "Do you really want to abort?" msgstr "Weet u zeker dat u wilt afbreken?" -#: lib/user_interaction.py:101 lib/user_interaction.py:104 -#: lib/user_interaction/utils.py:53 msgid "And one more time for verification: " msgstr "Nog eenmaal ter verificatie: " -#: lib/user_interaction.py:272 lib/user_interaction.py:275 -#: lib/user_interaction/system_conf.py:142 msgid "Would you like to use swap on zram?" msgstr "Wilt u wisselgeheugen i.c.m. zram gebruiken?" -#: lib/user_interaction.py:285 lib/user_interaction.py:288 -#: lib/user_interaction/general_conf.py:33 msgid "Desired hostname for the installation: " msgstr "Standaard hostnaam van installatie: " -#: lib/user_interaction.py:290 lib/user_interaction.py:293 msgid "Username for required superuser with sudo privileges: " msgstr "Gebruikersnaam van beheerder met sudo-rechten (vereist): " -#: lib/user_interaction.py:310 lib/user_interaction.py:313 -#: lib/user_interaction/manage_users_conf.py:167 msgid "Any additional users to install (leave blank for no users): " msgstr "Andere toe te voegen gebruikers (laat leeg om niemand toe te voegen): " -#: lib/user_interaction.py:324 lib/user_interaction.py:327 msgid "Should this user be a superuser (sudoer)?" msgstr "Moet deze gebruiker beheerder (sudoer) worden?" -#: lib/user_interaction.py:340 lib/user_interaction.py:343 -#: lib/user_interaction.py:346 lib/user_interaction/general_conf.py:41 msgid "Select a timezone" msgstr "Kies een tijdzone" -#: lib/user_interaction.py:354 lib/user_interaction.py:357 -#: lib/user_interaction.py:360 lib/user_interaction.py:359 -#: lib/user_interaction/system_conf.py:115 msgid "Would you like to use GRUB as a bootloader instead of systemd-boot?" msgstr "Wilt u GRUB gebruiken als opstartlader in plaats van systemd-boot?" -#: lib/user_interaction.py:364 lib/user_interaction.py:367 -#: lib/user_interaction.py:370 lib/user_interaction.py:369 -#: lib/user_interaction/system_conf.py:125 msgid "Choose a bootloader" msgstr "Kies een opstartlader" -#: lib/user_interaction.py:380 lib/user_interaction.py:383 -#: lib/user_interaction.py:386 lib/user_interaction.py:385 -#: lib/user_interaction/general_conf.py:53 msgid "Choose an audio server" msgstr "Kies een audioserver" -#: lib/user_interaction.py:391 lib/user_interaction.py:394 -#: lib/user_interaction.py:397 lib/user_interaction.py:396 -#: lib/user_interaction/general_conf.py:138 -msgid "" -"Only packages such as base, base-devel, linux, linux-firmware, efibootmgr " -"and optional profile packages are installed." -msgstr "" -"Er worden alleen basispakketten geïnstalleerd, zoals base, base-devel, " -"linux, linux-firmware, efibootmgr en profielpakketten (optioneel)." +msgid "Only packages such as base, base-devel, linux, linux-firmware, efibootmgr and optional profile packages are installed." +msgstr "Er worden alleen basispakketten geïnstalleerd, zoals base, base-devel, linux, linux-firmware, efibootmgr en profielpakketten (optioneel)." -#: lib/user_interaction.py:392 lib/user_interaction.py:395 -#: lib/user_interaction.py:398 lib/user_interaction.py:397 -#: lib/user_interaction/general_conf.py:139 -msgid "" -"If you desire a web browser, such as firefox or chromium, you may specify it " -"in the following prompt." -msgstr "" -"Als u een webbrowser wenst, zoals Firefox of Chromium, dan kunt u dit " -"handmatig aangeven." +msgid "If you desire a web browser, such as firefox or chromium, you may specify it in the following prompt." +msgstr "Als u een webbrowser wenst, zoals Firefox of Chromium, dan kunt u dit handmatig aangeven." -#: lib/user_interaction.py:396 lib/user_interaction.py:399 -#: lib/user_interaction.py:402 lib/user_interaction.py:401 -#: lib/user_interaction/general_conf.py:143 -msgid "" -"Write additional packages to install (space separated, leave blank to skip): " -msgstr "" -"Typ de namen van te installeren pakketten (spatiegescheiden - laat leeg om " -"over te slaan): " +msgid "Write additional packages to install (space separated, leave blank to skip): " +msgstr "Typ de namen van te installeren pakketten (spatiegescheiden - laat leeg om over te slaan): " -#: lib/user_interaction.py:419 lib/user_interaction.py:422 -#: lib/user_interaction.py:425 lib/user_interaction.py:424 -#: lib/user_interaction/network_conf.py:25 msgid "Copy ISO network configuration to installation" msgstr "ISO-netwerkinstellingen overzetten naar fysieke installatie" -#: lib/user_interaction.py:420 lib/user_interaction.py:423 -#: lib/user_interaction.py:426 lib/user_interaction.py:425 -#: lib/user_interaction/network_conf.py:26 -msgid "" -"Use NetworkManager (necessary to configure internet graphically in GNOME and " -"KDE)" -msgstr "" -"NetworkManager gebruiken (benodigd om internetinstellingen grafisch in te " -"stellen in GNOME en KDE)" +msgid "Use NetworkManager (necessary to configure internet graphically in GNOME and KDE)" +msgstr "NetworkManager gebruiken (benodigd om internetinstellingen grafisch in te stellen in GNOME en KDE)" -#: lib/user_interaction.py:428 lib/user_interaction.py:431 -#: lib/user_interaction.py:434 lib/user_interaction.py:433 -#: lib/user_interaction/network_conf.py:43 msgid "Select one network interface to configure" msgstr "Kies een in te stellen netwerkkaart" -#: lib/user_interaction.py:441 lib/user_interaction.py:444 -#: lib/user_interaction.py:447 lib/user_interaction.py:446 -#: lib/user_interaction/network_conf.py:70 -msgid "" -"Select which mode to configure for \"{}\" or skip to use default mode \"{}\"" -msgstr "" -"Geef aan welke modus moet worden gebruikt bij ‘{}’ of sla over om de " -"standaardmodus (‘{}’) te gebruiken" +msgid "Select which mode to configure for \"{}\" or skip to use default mode \"{}\"" +msgstr "Geef aan welke modus moet worden gebruikt bij ‘{}’ of sla over om de standaardmodus (‘{}’) te gebruiken" -#: lib/user_interaction.py:446 lib/user_interaction.py:449 -#: lib/user_interaction.py:452 lib/user_interaction.py:451 -#: lib/user_interaction/network_conf.py:75 msgid "Enter the IP and subnet for {} (example: 192.168.0.5/24): " msgstr "Voer het ip-adres en subnet in van ‘{}’ (voorbeeld: 192.168.0.5/24): " -#: lib/user_interaction.py:461 lib/user_interaction.py:464 -#: lib/user_interaction.py:467 lib/user_interaction.py:466 -#: lib/user_interaction/network_conf.py:86 msgid "Enter your gateway (router) IP address or leave blank for none: " -msgstr "" -"Voer uw eigen gateway-adres (router-ip-adres) in of laag leeg om over te " -"slaan: " +msgstr "Voer uw eigen gateway-adres (router-ip-adres) in of laag leeg om over te slaan: " -#: lib/user_interaction.py:476 lib/user_interaction.py:479 -#: lib/user_interaction.py:482 lib/user_interaction.py:481 -#: lib/user_interaction/network_conf.py:102 msgid "Enter your DNS servers (space separated, blank for none): " -msgstr "" -"Voer uw eigen dns-servers in (spatiegescheiden - laat leeg om over te " -"slaan): " +msgstr "Voer uw eigen dns-servers in (spatiegescheiden - laat leeg om over te slaan): " -#: lib/user_interaction.py:510 lib/user_interaction.py:513 -#: lib/user_interaction.py:516 lib/user_interaction.py:515 -#: lib/user_interaction/disk_conf.py:23 msgid "Select which filesystem your main partition should use" msgstr "Kies het te gebruiken bestandssysteem van de hoofdpartitie" -#: lib/user_interaction.py:556 lib/user_interaction.py:559 -#: lib/user_interaction.py:562 lib/user_interaction.py:561 -#: lib/user_interaction/partitioning_conf.py:64 -#: lib/user_interaction/partitioning_conf.py:63 msgid "Current partition layout" msgstr "Huidige partitie-indeling" -#: lib/user_interaction.py:607 lib/user_interaction.py:614 -#: lib/user_interaction.py:617 lib/user_interaction.py:620 -#: lib/user_interaction.py:619 lib/user_interaction/partitioning_conf.py:145 -#: lib/user_interaction/partitioning_conf.py:146 msgid "" "Select what to do with\n" "{}" @@ -185,46 +94,18 @@ msgstr "" "Geef aan wat er moet worden gedaan met\n" "{}" -#: lib/user_interaction.py:624 lib/user_interaction.py:709 -#: lib/user_interaction.py:631 lib/user_interaction.py:716 -#: lib/user_interaction.py:634 lib/user_interaction.py:719 -#: lib/user_interaction.py:637 lib/user_interaction.py:722 -#: lib/user_interaction.py:636 lib/user_interaction.py:721 -#: lib/user_interaction/partitioning_conf.py:162 -#: lib/user_interaction/partitioning_conf.py:255 -#: lib/user_interaction/partitioning_conf.py:165 -#: lib/user_interaction/partitioning_conf.py:260 msgid "Enter a desired filesystem type for the partition" msgstr "Kies het gewenste bestandssysteem voor de partitie" -#: lib/user_interaction.py:626 lib/user_interaction.py:633 -#: lib/user_interaction.py:636 lib/user_interaction.py:639 -#: lib/user_interaction.py:638 lib/user_interaction/partitioning_conf.py:164 -#: lib/user_interaction/partitioning_conf.py:167 msgid "Enter the start sector (percentage or block number, default: {}): " msgstr "Voer de beginsector in (percentage of bloknummer - standaard: {}): " -#: lib/user_interaction.py:635 lib/user_interaction.py:642 -#: lib/user_interaction.py:645 lib/user_interaction.py:648 -#: lib/user_interaction.py:647 lib/user_interaction/partitioning_conf.py:174 -#: lib/user_interaction/partitioning_conf.py:177 -msgid "" -"Enter the end sector of the partition (percentage or block number, ex: {}): " +msgid "Enter the end sector of the partition (percentage or block number, ex: {}): " msgstr "Voer de eindsector in (percentage of bloknummer - bijvoorbeeld: {}): " -#: lib/user_interaction.py:661 lib/user_interaction.py:668 -#: lib/user_interaction.py:671 lib/user_interaction.py:674 -#: lib/user_interaction.py:673 lib/user_interaction/partitioning_conf.py:203 -#: lib/user_interaction/partitioning_conf.py:208 msgid "{} contains queued partitions, this will remove those, are you sure?" -msgstr "" -"‘{}’ bevat in behandeling zijnde partities, welke hierdoor worden " -"verwijderd. Weet u zeker dat u wilt doorgaan?" +msgstr "‘{}’ bevat in behandeling zijnde partities, welke hierdoor worden verwijderd. Weet u zeker dat u wilt doorgaan?" -#: lib/user_interaction.py:674 lib/user_interaction.py:681 -#: lib/user_interaction.py:684 lib/user_interaction.py:687 -#: lib/user_interaction.py:686 lib/user_interaction/partitioning_conf.py:216 -#: lib/user_interaction/partitioning_conf.py:221 msgid "" "{}\n" "\n" @@ -234,10 +115,6 @@ msgstr "" "\n" "Selecteer te verwijderen partities op indexnummer" -#: lib/user_interaction.py:682 lib/user_interaction.py:689 -#: lib/user_interaction.py:692 lib/user_interaction.py:695 -#: lib/user_interaction.py:694 lib/user_interaction/partitioning_conf.py:226 -#: lib/user_interaction/partitioning_conf.py:231 msgid "" "{}\n" "\n" @@ -247,30 +124,12 @@ msgstr "" "\n" "Selecteer aan te koppelen partities op indexnummer" -#: lib/user_interaction.py:686 lib/user_interaction.py:693 -#: lib/user_interaction.py:696 lib/user_interaction.py:699 -#: lib/user_interaction.py:698 lib/user_interaction/partitioning_conf.py:231 -#: lib/user_interaction/partitioning_conf.py:236 -msgid "" -" * Partition mount-points are relative to inside the installation, the boot " -"would be /boot as an example." -msgstr "" -" *Partitie-aankoppelpunten zijn gekoppeld aan de fysieke installatie. " -"Voorbeeld: ‘boot’ wordt ‘/boot’." +msgid " * Partition mount-points are relative to inside the installation, the boot would be /boot as an example." +msgstr " *Partitie-aankoppelpunten zijn gekoppeld aan de fysieke installatie. Voorbeeld: ‘boot’ wordt ‘/boot’." -#: lib/user_interaction.py:687 lib/user_interaction.py:694 -#: lib/user_interaction.py:697 lib/user_interaction.py:700 -#: lib/user_interaction.py:699 lib/user_interaction/partitioning_conf.py:233 -#: lib/user_interaction/partitioning_conf.py:238 msgid "Select where to mount partition (leave blank to remove mountpoint): " -msgstr "" -"Geef aan waar de partitie moet worden aangekoppeld (laat leeg om te " -"verwijderen): " +msgstr "Geef aan waar de partitie moet worden aangekoppeld (laat leeg om te verwijderen): " -#: lib/user_interaction.py:698 lib/user_interaction.py:705 -#: lib/user_interaction.py:708 lib/user_interaction.py:711 -#: lib/user_interaction.py:710 lib/user_interaction/partitioning_conf.py:244 -#: lib/user_interaction/partitioning_conf.py:249 msgid "" "{}\n" "\n" @@ -280,10 +139,6 @@ msgstr "" "\n" "Kies welke partitie moet worden gemaskeerd alvorens te formatteren" -#: lib/user_interaction.py:717 lib/user_interaction.py:724 -#: lib/user_interaction.py:727 lib/user_interaction.py:730 -#: lib/user_interaction.py:729 lib/user_interaction/partitioning_conf.py:265 -#: lib/user_interaction/partitioning_conf.py:270 msgid "" "{}\n" "\n" @@ -293,10 +148,6 @@ msgstr "" "\n" "Kies welke partitie moet worden versleuteld" -#: lib/user_interaction.py:725 lib/user_interaction.py:732 -#: lib/user_interaction.py:735 lib/user_interaction.py:738 -#: lib/user_interaction.py:737 lib/user_interaction/partitioning_conf.py:274 -#: lib/user_interaction/partitioning_conf.py:279 msgid "" "{}\n" "\n" @@ -306,10 +157,6 @@ msgstr "" "\n" "Kies welke partitie moet worden aangemerkt als opstartbaar" -#: lib/user_interaction.py:732 lib/user_interaction.py:739 -#: lib/user_interaction.py:742 lib/user_interaction.py:745 -#: lib/user_interaction.py:744 lib/user_interaction/partitioning_conf.py:282 -#: lib/user_interaction/partitioning_conf.py:287 msgid "" "{}\n" "\n" @@ -319,117 +166,42 @@ msgstr "" "\n" "Kies op welke partitie een bestandssysteem moet worden ingesteld" -#: lib/user_interaction.py:739 lib/user_interaction.py:746 -#: lib/user_interaction.py:749 lib/user_interaction.py:752 -#: lib/user_interaction.py:751 lib/user_interaction/partitioning_conf.py:289 -#: lib/user_interaction/partitioning_conf.py:294 msgid "Enter a desired filesystem type for the partition: " msgstr "Voer de naam in van het gewenste bestandssysteem: " -#: lib/user_interaction.py:760 lib/menu/selection_menu.py:141 -#: lib/user_interaction.py:767 lib/menu/selection_menu.py:139 -#: lib/menu/selection_menu.py:143 lib/user_interaction.py:770 -#: lib/user_interaction.py:773 lib/user_interaction.py:772 -#: lib/menu/selection_menu.py:407 lib/menu/selection_menu.py:415 -#: lib/menu/selection_menu.py:17 lib/user_interaction/general_conf.py:105 -#: lib/user_interaction/global_menu.py:43 lib/menu/selection_menu.py:53 -#: lib/menu/selection_menu.py:463 lib/menu/global_menu.py:43 msgid "Select Archinstall language" msgstr "Kies een Archinstall-taal" -#: lib/user_interaction.py:765 lib/user_interaction.py:772 -#: lib/user_interaction.py:775 lib/user_interaction.py:778 -#: lib/user_interaction.py:777 lib/user_interaction/disk_conf.py:40 msgid "Wipe all selected drives and use a best-effort default partition layout" -msgstr "" -"Alle geselecteerde schijven formatteren en best mogelijke partitie-indeling " -"gebruiken" +msgstr "Alle geselecteerde schijven formatteren en best mogelijke partitie-indeling gebruiken" -#: lib/user_interaction.py:766 lib/user_interaction.py:773 -#: lib/user_interaction.py:776 lib/user_interaction.py:779 -#: lib/user_interaction.py:778 lib/user_interaction/disk_conf.py:41 -msgid "" -"Select what to do with each individual drive (followed by partition usage)" -msgstr "" -"Geef per schijf aan welke actie moet worden uitgevoerd (gevolgd door " -"partitiegebruik)" +msgid "Select what to do with each individual drive (followed by partition usage)" +msgstr "Geef per schijf aan welke actie moet worden uitgevoerd (gevolgd door partitiegebruik)" -#: lib/user_interaction.py:769 lib/user_interaction.py:770 -#: lib/user_interaction.py:777 lib/user_interaction.py:780 -#: lib/user_interaction.py:783 lib/user_interaction.py:782 -#: lib/user_interaction/disk_conf.py:45 msgid "Select what you wish to do with the selected block devices" msgstr "Geef aan wat er moet worden gedaan met de gekozen blokapparaten" -#: lib/user_interaction.py:822 lib/user_interaction.py:823 -#: lib/user_interaction.py:830 lib/user_interaction.py:833 -#: lib/user_interaction.py:836 lib/user_interaction.py:835 -#: lib/user_interaction/general_conf.py:126 -msgid "" -"This is a list of pre-programmed profiles, they might make it easier to " -"install things like desktop environments" -msgstr "" -"Dit is een vooraf opgestelde lijst met profielen, welke het installeren van " -"zaken als werkomgevingen vereenvoudigt" +msgid "This is a list of pre-programmed profiles, they might make it easier to install things like desktop environments" +msgstr "Dit is een vooraf opgestelde lijst met profielen, welke het installeren van zaken als werkomgevingen vereenvoudigt" -#: lib/user_interaction.py:846 lib/user_interaction.py:847 -#: lib/user_interaction.py:854 lib/user_interaction.py:857 -#: lib/user_interaction.py:860 lib/user_interaction.py:859 -#: lib/user_interaction/general_conf.py:71 msgid "Select Keyboard layout" msgstr "Kies een toetsenbordindeling" -#: lib/user_interaction.py:861 lib/user_interaction.py:862 -#: lib/user_interaction.py:869 lib/user_interaction.py:872 -#: lib/user_interaction.py:875 lib/user_interaction.py:874 -#: lib/user_interaction/general_conf.py:92 msgid "Select one of the regions to download packages from" msgstr "Geef aan uit welke regio pakketten moeten worden opgehaald" -#: lib/user_interaction.py:883 lib/user_interaction.py:884 -#: lib/user_interaction.py:891 lib/user_interaction.py:894 -#: lib/user_interaction.py:897 lib/user_interaction.py:896 -#: lib/user_interaction/system_conf.py:52 msgid "Select one or more hard drives to use and configure" msgstr "Selecteer één of meer in te stellen harde schijven" -#: lib/user_interaction.py:910 lib/user_interaction.py:911 -#: lib/user_interaction.py:918 lib/user_interaction.py:921 -#: lib/user_interaction.py:924 lib/user_interaction.py:923 -#: lib/user_interaction/system_conf.py:80 -msgid "" -"For the best compatibility with your AMD hardware, you may want to use " -"either the all open-source or AMD / ATI options." -msgstr "" -"Op AMD-hardware is het aanbevolen om alle opensource- of AMD-/ATI-opties te " -"kiezen." +msgid "For the best compatibility with your AMD hardware, you may want to use either the all open-source or AMD / ATI options." +msgstr "Op AMD-hardware is het aanbevolen om alle opensource- of AMD-/ATI-opties te kiezen." -#: lib/user_interaction.py:912 lib/user_interaction.py:913 -#: lib/user_interaction.py:920 lib/user_interaction.py:923 -#: lib/user_interaction.py:926 lib/user_interaction.py:925 -#: lib/user_interaction/system_conf.py:84 -msgid "" -"For the best compatibility with your Intel hardware, you may want to use " -"either the all open-source or Intel options.\n" -msgstr "" -"Op Intel-hardware is het aanbevolen om alle opensource- of Intel-opties te " -"kiezen.\n" +msgid "For the best compatibility with your Intel hardware, you may want to use either the all open-source or Intel options.\n" +msgstr "Op Intel-hardware is het aanbevolen om alle opensource- of Intel-opties te kiezen.\n" -#: lib/user_interaction.py:914 lib/user_interaction.py:915 -#: lib/user_interaction.py:922 lib/user_interaction.py:925 -#: lib/user_interaction.py:928 lib/user_interaction.py:927 -#: lib/user_interaction/system_conf.py:88 -msgid "" -"For the best compatibility with your Nvidia hardware, you may want to use " -"the Nvidia proprietary driver.\n" -msgstr "" -"Op Nvidia-hardware is het aanbevolen om het gesloten Nvidia-stuurprogramma " -"te kiezen.\n" +msgid "For the best compatibility with your Nvidia hardware, you may want to use the Nvidia proprietary driver.\n" +msgstr "Op Nvidia-hardware is het aanbevolen om het gesloten Nvidia-stuurprogramma te kiezen.\n" -#: lib/user_interaction.py:917 lib/user_interaction.py:918 -#: lib/user_interaction.py:925 lib/user_interaction.py:928 -#: lib/user_interaction.py:931 lib/user_interaction.py:930 -#: lib/user_interaction/system_conf.py:92 msgid "" "\n" "\n" @@ -437,209 +209,95 @@ msgid "" msgstr "" "\n" "\n" -"Kies een grafisch stuurprogramma of laat leeg om alle opensource-" -"stuurprogramma's te installeren" +"Kies een grafisch stuurprogramma of laat leeg om alle opensource-stuurprogramma's te installeren" -#: lib/user_interaction.py:921 lib/user_interaction.py:922 -#: lib/user_interaction.py:929 lib/user_interaction.py:932 -#: lib/user_interaction.py:935 lib/user_interaction.py:934 -#: lib/user_interaction/system_conf.py:96 msgid "All open-source (default)" msgstr "Alle opensource-stuurprogramma's (standaard)" -#: lib/user_interaction.py:940 lib/user_interaction.py:941 -#: lib/user_interaction.py:948 lib/user_interaction.py:951 -#: lib/user_interaction.py:954 lib/user_interaction.py:953 -#: lib/user_interaction/system_conf.py:28 msgid "Choose which kernels to use or leave blank for default \"{}\"" msgstr "Kies de te installeren kernels of laat leeg om ‘{}’ te installeren" -#: lib/user_interaction.py:954 lib/user_interaction.py:955 -#: lib/user_interaction.py:962 lib/user_interaction.py:965 -#: lib/user_interaction.py:968 lib/user_interaction.py:967 -#: lib/user_interaction/locale_conf.py:16 msgid "Choose which locale language to use" msgstr "Kies de te gebruiken taal" -#: lib/user_interaction.py:968 lib/user_interaction.py:969 -#: lib/user_interaction.py:976 lib/user_interaction.py:979 -#: lib/user_interaction.py:982 lib/user_interaction.py:981 -#: lib/user_interaction/locale_conf.py:29 msgid "Choose which locale encoding to use" msgstr "Kies de te gebruiken taalvariant" -#: lib/user_interaction.py:1009 lib/user_interaction.py:1010 -#: lib/user_interaction.py:1017 lib/user_interaction.py:1020 -#: lib/user_interaction.py:1023 lib/user_interaction.py:1022 -#: lib/user_interaction/backwards_compatible_conf.py:49 msgid "Select one of the values shown below: " msgstr "Kies één van onderstaande waarden: " -#: lib/user_interaction.py:1050 lib/user_interaction.py:1051 -#: lib/user_interaction.py:1058 lib/user_interaction.py:1061 -#: lib/user_interaction.py:1064 lib/user_interaction.py:1063 -#: lib/user_interaction/backwards_compatible_conf.py:88 msgid "Select one or more of the options below: " msgstr "Kies één van onderstaande opties: " -#: lib/disk/filesystem.py:86 lib/disk/filesystem.py:87 msgid "Adding partition...." msgstr "Bezig met toevoegen van partitie…" -#: lib/disk/filesystem.py:139 lib/disk/filesystem.py:141 -#: lib/disk/filesystem.py:142 -msgid "" -"You need to enter a valid fs-type in order to continue. See `man parted` for " -"valid fs-type's." -msgstr "" -"Voer een geldig bestandssysteemtype in om door te gaan. Bekijk voor meer " -"informatie `man parted`." +msgid "You need to enter a valid fs-type in order to continue. See `man parted` for valid fs-type's." +msgstr "Voer een geldig bestandssysteemtype in om door te gaan. Bekijk voor meer informatie `man parted`." -#: lib/profiles.py:89 lib/profiles.py:90 msgid "Error: Listing profiles on URL \"{}\" resulted in:" msgstr "Foutmelding: het opsommen van de profielen op {} leidde tot" -#: lib/profiles.py:92 lib/profiles.py:93 msgid "Error: Could not decode \"{}\" result as JSON:" msgstr "Foutmelding: ‘{}’ kan niet gedecodeerd worden als json:" -#: lib/menu/selection_menu.py:146 lib/menu/selection_menu.py:144 -#: lib/menu/selection_menu.py:148 lib/menu/selection_menu.py:412 -#: lib/menu/selection_menu.py:420 lib/user_interaction/global_menu.py:48 -#: lib/menu/selection_menu.py:468 lib/menu/global_menu.py:48 msgid "Select keyboard layout" msgstr "Kies een toetsenbordindeling" -#: lib/menu/selection_menu.py:149 lib/menu/selection_menu.py:147 -#: lib/menu/selection_menu.py:151 lib/menu/selection_menu.py:415 -#: lib/menu/selection_menu.py:423 lib/user_interaction/global_menu.py:51 -#: lib/menu/selection_menu.py:471 lib/menu/global_menu.py:51 msgid "Select mirror region" msgstr "Kies een spiegelserverregio" -#: lib/menu/selection_menu.py:154 lib/menu/selection_menu.py:152 -#: lib/menu/selection_menu.py:156 lib/menu/selection_menu.py:420 -#: lib/menu/selection_menu.py:428 lib/user_interaction/global_menu.py:56 -#: lib/menu/selection_menu.py:476 lib/menu/global_menu.py:56 msgid "Select locale language" msgstr "Kies een taal" -#: lib/menu/selection_menu.py:156 lib/menu/selection_menu.py:154 -#: lib/menu/selection_menu.py:158 lib/menu/selection_menu.py:422 -#: lib/menu/selection_menu.py:430 lib/user_interaction/global_menu.py:58 -#: lib/menu/selection_menu.py:478 lib/menu/global_menu.py:58 msgid "Select locale encoding" msgstr "Kies een taalvariant" -#: lib/menu/selection_menu.py:159 lib/menu/selection_menu.py:157 -#: lib/menu/selection_menu.py:161 lib/menu/selection_menu.py:425 -#: lib/menu/selection_menu.py:433 lib/user_interaction/global_menu.py:61 -#: lib/menu/selection_menu.py:481 lib/menu/global_menu.py:61 msgid "Select harddrives" msgstr "Selecteer de harde schijven" -#: lib/menu/selection_menu.py:163 lib/menu/selection_menu.py:161 -#: lib/menu/selection_menu.py:165 lib/menu/selection_menu.py:429 -#: lib/menu/selection_menu.py:437 lib/user_interaction/global_menu.py:65 -#: lib/menu/selection_menu.py:485 lib/menu/global_menu.py:65 msgid "Select disk layout" msgstr "Kies een schijfindeling" -#: lib/menu/selection_menu.py:171 lib/menu/selection_menu.py:169 -#: lib/menu/selection_menu.py:173 lib/menu/selection_menu.py:437 -#: lib/menu/selection_menu.py:445 lib/user_interaction/global_menu.py:73 -#: lib/menu/selection_menu.py:493 lib/menu/global_menu.py:73 msgid "Set encryption password" msgstr "Versleutelwachtwoord instellen" -#: lib/menu/selection_menu.py:177 lib/menu/selection_menu.py:175 -#: lib/menu/selection_menu.py:179 lib/menu/selection_menu.py:443 -#: lib/menu/selection_menu.py:451 lib/user_interaction/global_menu.py:79 -#: lib/menu/selection_menu.py:499 lib/menu/global_menu.py:79 msgid "Use swap" msgstr "Wisselgeheugen gebruiken" -#: lib/menu/selection_menu.py:182 lib/menu/selection_menu.py:180 -#: lib/menu/selection_menu.py:184 lib/menu/selection_menu.py:448 -#: lib/menu/selection_menu.py:456 lib/user_interaction/global_menu.py:84 -#: lib/menu/selection_menu.py:504 lib/menu/global_menu.py:84 msgid "Select bootloader" msgstr "Kies een opstartlader" -#: lib/menu/selection_menu.py:188 lib/menu/selection_menu.py:186 -#: lib/menu/selection_menu.py:190 lib/menu/selection_menu.py:454 -#: lib/menu/selection_menu.py:462 lib/user_interaction/global_menu.py:95 -#: lib/menu/selection_menu.py:515 lib/menu/global_menu.py:95 msgid "Set root password" msgstr "Rootwachtwoord instellen" -#: lib/menu/selection_menu.py:193 lib/menu/selection_menu.py:191 -#: lib/menu/selection_menu.py:195 lib/menu/selection_menu.py:459 -#: lib/menu/selection_menu.py:467 lib/user_interaction/global_menu.py:100 -#: lib/menu/selection_menu.py:520 lib/menu/global_menu.py:100 msgid "Specify superuser account" msgstr "Geef aan welk account superuserrechten dient te hebben" -#: lib/menu/selection_menu.py:199 lib/menu/selection_menu.py:197 -#: lib/menu/selection_menu.py:201 lib/menu/selection_menu.py:465 -#: lib/menu/selection_menu.py:473 lib/user_interaction/global_menu.py:107 -#: lib/menu/selection_menu.py:528 lib/menu/global_menu.py:107 msgid "Specify user account" msgstr "Kies een gebruikersaccount" -#: lib/menu/selection_menu.py:205 lib/menu/selection_menu.py:203 -#: lib/menu/selection_menu.py:207 lib/menu/selection_menu.py:471 -#: lib/menu/selection_menu.py:479 lib/user_interaction/global_menu.py:114 -#: lib/menu/selection_menu.py:535 lib/menu/global_menu.py:114 msgid "Specify profile" msgstr "Kies een profiel" -#: lib/menu/selection_menu.py:210 lib/menu/selection_menu.py:208 -#: lib/menu/selection_menu.py:212 lib/menu/selection_menu.py:476 -#: lib/menu/selection_menu.py:484 lib/user_interaction/global_menu.py:119 -#: lib/menu/selection_menu.py:540 lib/menu/global_menu.py:119 msgid "Select audio" msgstr "Kies audio" -#: lib/menu/selection_menu.py:214 lib/menu/selection_menu.py:212 -#: lib/menu/selection_menu.py:216 lib/menu/selection_menu.py:480 -#: lib/menu/selection_menu.py:488 lib/user_interaction/global_menu.py:123 -#: lib/menu/selection_menu.py:544 lib/menu/global_menu.py:123 msgid "Select kernels" msgstr "Selecteer kernels" -#: lib/menu/selection_menu.py:219 lib/menu/selection_menu.py:217 -#: lib/menu/selection_menu.py:221 lib/menu/selection_menu.py:485 -#: lib/menu/selection_menu.py:493 lib/user_interaction/global_menu.py:128 -#: lib/menu/selection_menu.py:549 lib/menu/global_menu.py:128 msgid "Additional packages to install" msgstr "Aanvullende te installeren pakketten" -#: lib/menu/selection_menu.py:224 lib/menu/selection_menu.py:222 -#: lib/menu/selection_menu.py:226 lib/menu/selection_menu.py:490 -#: lib/menu/selection_menu.py:498 lib/user_interaction/global_menu.py:139 -#: lib/menu/selection_menu.py:560 lib/menu/global_menu.py:139 msgid "Configure network" msgstr "Netwerk instellen" -#: lib/menu/selection_menu.py:232 lib/menu/selection_menu.py:230 -#: lib/menu/selection_menu.py:234 lib/menu/selection_menu.py:498 -#: lib/menu/selection_menu.py:506 lib/user_interaction/global_menu.py:150 -#: lib/menu/selection_menu.py:571 lib/menu/global_menu.py:150 msgid "Set automatic time sync (NTP)" msgstr "Automatische tijdsynchronisatie (NTP) gebruiken" -#: lib/menu/selection_menu.py:310 lib/menu/selection_menu.py:308 -#: lib/menu/selection_menu.py:315 lib/menu/selection_menu.py:527 -#: lib/menu/selection_menu.py:535 lib/user_interaction/global_menu.py:187 -#: lib/menu/selection_menu.py:608 lib/menu/global_menu.py:187 msgid "Install ({} config(s) missing)" msgstr "Installeren ({} confirguratie(s) ontbreekt/ontbreken)" -#: lib/menu/selection_menu.py:373 lib/menu/selection_menu.py:371 -#: lib/menu/selection_menu.py:378 lib/menu/selection_menu.py:591 -#: lib/menu/selection_menu.py:599 lib/user_interaction/global_menu.py:249 -#: lib/menu/selection_menu.py:669 lib/menu/global_menu.py:249 msgid "" "You decided to skip harddrive selection\n" "and will use whatever drive-setup is mounted at {} (experimental)\n" @@ -651,103 +309,51 @@ msgstr "" "WAARSCHUWING: Archinstall controleert niet of deze schijf geschikt is.\n" "Weet u zeker dat u wilt doorgaan?" -#: lib/disk/filesystem.py:97 lib/disk/filesystem.py:98 msgid "Re-using partition instance: {}" msgstr "De partitie op {} wordt hergebruikt" -#: lib/user_interaction.py:590 lib/user_interaction.py:593 -#: lib/user_interaction.py:596 lib/user_interaction.py:595 -#: lib/user_interaction/partitioning_conf.py:119 -#: lib/user_interaction/partitioning_conf.py:120 msgid "Create a new partition" msgstr "Partitie aanmaken" -#: lib/user_interaction.py:592 lib/user_interaction.py:595 -#: lib/user_interaction.py:598 lib/user_interaction.py:597 -#: lib/user_interaction/partitioning_conf.py:121 -#: lib/user_interaction/partitioning_conf.py:122 msgid "Delete a partition" msgstr "Partitie verwijderen" -#: lib/user_interaction.py:593 lib/user_interaction.py:596 -#: lib/user_interaction.py:599 lib/user_interaction.py:598 -#: lib/user_interaction/partitioning_conf.py:122 -#: lib/user_interaction/partitioning_conf.py:123 msgid "Clear/Delete all partitions" msgstr "Alle partities verwijderen" -#: lib/user_interaction.py:594 lib/user_interaction.py:597 -#: lib/user_interaction.py:600 lib/user_interaction.py:599 -#: lib/user_interaction/partitioning_conf.py:123 -#: lib/user_interaction/partitioning_conf.py:124 msgid "Assign mount-point for a partition" msgstr "Aankoppelpunt toekennen aan partitie" -#: lib/user_interaction.py:595 lib/user_interaction.py:598 -#: lib/user_interaction.py:601 lib/user_interaction.py:600 -#: lib/user_interaction/partitioning_conf.py:124 -#: lib/user_interaction/partitioning_conf.py:125 msgid "Mark/Unmark a partition to be formatted (wipes data)" msgstr "Partitie (de)markeren voor formatteren (alle gegevens worden gewist)" -#: lib/user_interaction.py:596 lib/user_interaction.py:599 -#: lib/user_interaction.py:602 lib/user_interaction.py:601 -#: lib/user_interaction/partitioning_conf.py:125 -#: lib/user_interaction/partitioning_conf.py:126 msgid "Mark/Unmark a partition as encrypted" msgstr "Partitie (de)markeren voor versleuteling" -#: lib/user_interaction.py:597 lib/user_interaction.py:600 -#: lib/user_interaction.py:603 lib/user_interaction.py:602 -#: lib/user_interaction/partitioning_conf.py:126 -#: lib/user_interaction/partitioning_conf.py:127 msgid "Mark/Unmark a partition as bootable (automatic for /boot)" msgstr "Partitie (de)markeren als opstartbaar (automatisch voor /boot)" -#: lib/user_interaction.py:598 lib/user_interaction.py:601 -#: lib/user_interaction.py:604 lib/user_interaction.py:603 -#: lib/user_interaction/partitioning_conf.py:127 -#: lib/user_interaction/partitioning_conf.py:128 msgid "Set desired filesystem for a partition" msgstr "Gewenste bestandssysteem van partitie instellen" -#: lib/menu/selection_menu.py:239 lib/menu/selection_menu.py:237 -#: lib/menu/selection_menu.py:241 lib/menu/selection_menu.py:270 -#: lib/menu/selection_menu.py:507 lib/menu/selection_menu.py:515 -#: lib/user_interaction/global_menu.py:167 lib/menu/selection_menu.py:588 -#: lib/menu/global_menu.py:167 msgid "Abort" msgstr "Afbreken" -#: lib/menu/selection_menu.py:183 lib/menu/selection_menu.py:187 -#: lib/menu/selection_menu.py:451 lib/menu/selection_menu.py:459 -#: lib/user_interaction/global_menu.py:89 lib/menu/selection_menu.py:509 -#: lib/menu/global_menu.py:89 msgid "Specify hostname" msgstr "Hostnaam opgeven" -#: lib/menu/selection_menu.py:228 lib/menu/selection_menu.py:492 -#: lib/menu/selection_menu.py:500 lib/user_interaction/global_menu.py:141 -#: lib/menu/selection_menu.py:562 lib/menu/global_menu.py:141 msgid "Not configured, unavailable unless setup manually" msgstr "Niet ingesteld en dus niet beschikbaar, tenzij handmatig ingesteld" -#: lib/menu/selection_menu.py:231 lib/menu/selection_menu.py:495 -#: lib/menu/selection_menu.py:503 lib/user_interaction/global_menu.py:145 -#: lib/menu/selection_menu.py:566 lib/menu/global_menu.py:145 msgid "Select timezone" msgstr "Kies een tijdzone" -#: lib/menu/selection_menu.py:266 lib/menu/selection_menu.py:276 -#: lib/menu/selection_menu.py:312 msgid "Set/Modify the below options" msgstr "Onderstaande opties instellen/aanpassen" -#: lib/menu/selection_menu.py:272 msgid "Install" msgstr "Installeren" -#: lib/menu/menu.py:68 lib/menu/menu.py:75 lib/menu/menu.py:119 msgid "" "Use ESC to skip\n" "\n" @@ -755,163 +361,80 @@ msgstr "" "Druk op Esc om over te slaan\n" "\n" -#: lib/user_interaction.py:591 lib/user_interaction.py:594 -#: lib/user_interaction.py:597 lib/user_interaction.py:596 -#: lib/user_interaction/partitioning_conf.py:120 -#: lib/user_interaction/partitioning_conf.py:121 msgid "Suggest partition layout" msgstr "Partitie-indeling voorstellen" -#: lib/user_interaction.py:101 lib/user_interaction/utils.py:43 msgid "Enter a password: " msgstr "Voer een wachtwoord in: " -#: lib/disk/filesystem.py:117 lib/disk/filesystem.py:118 msgid "Enter a encryption password for {}" msgstr "Voer een versleutelwachtwoord in voor {}" -#: lib/menu/selection_menu.py:174 lib/menu/selection_menu.py:567 -#: lib/menu/selection_menu.py:575 lib/user_interaction/global_menu.py:225 -#: lib/menu/selection_menu.py:646 lib/menu/global_menu.py:225 msgid "Enter disk encryption password (leave blank for no encryption): " -msgstr "" -"Voer een versleutelwachtwoord in voor (laat leeg om niet te versleutelen): " +msgstr "Voer een versleutelwachtwoord in voor (laat leeg om niet te versleutelen): " -#: lib/menu/selection_menu.py:407 lib/menu/selection_menu.py:617 -#: lib/menu/selection_menu.py:625 msgid "Create a required super-user with sudo privileges: " msgstr "Beheerder met sudo-rechten toevoegen (vereist): " -#: lib/menu/selection_menu.py:347 lib/menu/selection_menu.py:554 -#: lib/menu/selection_menu.py:562 lib/user_interaction/global_menu.py:220 -#: lib/menu/selection_menu.py:641 lib/menu/global_menu.py:220 msgid "Enter root password (leave blank to disable root): " msgstr "Voer een beheerderswachtwoord in (laat leeg om uit te schakelen): " -#: lib/user_interaction.py:307 lib/user_interaction.py:324 -#: lib/user_interaction/manage_users_conf.py:86 -#: lib/user_interaction/manage_users_conf.py:121 msgid "Password for user \"{}\": " msgstr "Wachtwoord van ‘{}’: " -#: lib/user_interaction.py:405 lib/user_interaction.py:408 -#: lib/user_interaction.py:407 lib/user_interaction/general_conf.py:152 -msgid "" -"Verifying that additional packages exist (this might take a few seconds)" +msgid "Verifying that additional packages exist (this might take a few seconds)" msgstr "Bezig met verifiëren van aanvullende pakketten… (dit kan even duren)" -#: lib/user_interaction.py:281 lib/user_interaction/general_conf.py:22 -msgid "" -"Would you like to use automatic time synchronization (NTP) with the default " -"time servers?\n" -msgstr "" -"Wilt u automatische tijdsynchronisatie (NTP) met de standaard tijdservers " -"gebruiken?\n" +msgid "Would you like to use automatic time synchronization (NTP) with the default time servers?\n" +msgstr "Wilt u automatische tijdsynchronisatie (NTP) met de standaard tijdservers gebruiken?\n" -#: lib/user_interaction.py:282 lib/user_interaction/general_conf.py:23 msgid "" -"Hardware time and other post-configuration steps might be required in order " -"for NTP to work.\n" +"Hardware time and other post-configuration steps might be required in order for NTP to work.\n" "For more information, please check the Arch wiki" msgstr "" -"De hardwarematige tijd en andere gelijkaardige instelstappen kunnen vereist " -"zijn om NTP te gebruiken.\n" +"De hardwarematige tijd en andere gelijkaardige instelstappen kunnen vereist zijn om NTP te gebruiken.\n" "Lees voor meer informatie de Arch-wiki." -#: lib/menu/selection_menu.py:411 lib/menu/selection_menu.py:621 -#: lib/menu/selection_menu.py:629 msgid "Enter a username to create an additional user (leave blank to skip): " -msgstr "" -"Voer een gebruikersnaam in om een tweede account toe te voegen (laat leeg om " -"over te slaan): " +msgstr "Voer een gebruikersnaam in om een tweede account toe te voegen (laat leeg om over te slaan): " -#: lib/menu/menu.py:116 msgid "Use ESC to skip\n" msgstr "Druk op Esc om over te slaan\n" -#: lib/menu/list_manager.py:117 msgid "" "\n" -" Choose an object from the list, and select one of the available actions for " -"it to execute" +" Choose an object from the list, and select one of the available actions for it to execute" msgstr "" "\n" -" Kies een item van de lijst en kies vervolgens een van de beschikbare acties " -"om uit te voeren" +" Kies een item van de lijst en kies vervolgens een van de beschikbare acties om uit te voeren" -#: lib/menu/list_manager.py:130 lib/user_interaction/subvolume_config.py:90 msgid "Cancel" msgstr "Annuleren" -#: lib/menu/list_manager.py:131 msgid "Confirm and exit" msgstr "Bevestigen en afsluiten" -#: lib/menu/list_manager.py:135 lib/menu/list_manager.py:228 -#: lib/menu/list_manager.py:251 lib/menu/list_manager.py:276 -#: lib/user_interaction/subvolume_config.py:12 -#: lib/user_interaction/subvolume_config.py:44 -#: lib/user_interaction/subvolume_config.py:78 -#: lib/user_interaction/subvolume_config.py:82 -#: lib/user_interaction/subvolume_config.py:85 msgid "Add" msgstr "Toevoegen" -#: lib/menu/list_manager.py:135 lib/menu/list_manager.py:231 -#: lib/menu/list_manager.py:255 lib/user_interaction/subvolume_config.py:78 msgid "Copy" msgstr "Kopiëren" -#: lib/menu/list_manager.py:135 lib/menu/list_manager.py:237 -#: lib/menu/list_manager.py:261 lib/user_interaction/subvolume_config.py:82 -#: lib/user_interaction/subvolume_config.py:85 msgid "Edit" msgstr "Bewerken" -#: lib/menu/list_manager.py:135 lib/menu/list_manager.py:242 -#: lib/menu/list_manager.py:264 lib/user_interaction/subvolume_config.py:40 msgid "Delete" msgstr "Verwijderen" -#: lib/menu/list_manager.py:185 msgid "Select an action for < {} >" msgstr "Kies een actie voor < {} >" -#: lib/menu/list_manager.py:229 -msgid "Add :" -msgstr "Toevoegen:" - -#: lib/menu/list_manager.py:233 -msgid "Copy to :" -msgstr "Kopiëren naar:" - -#: lib/menu/list_manager.py:240 -msgid "Edite :" -msgstr "Bewerken:" - -#: lib/menu/list_manager.py:252 -msgid "Key :" -msgstr "Sleutel:" - -#: lib/menu/list_manager.py:253 -msgid "Value :" -msgstr "Waarde:" - -#: lib/menu/list_manager.py:257 msgid "Copy to new key:" msgstr "Kopiëren naar nieuwe sleutel:" -#: lib/menu/list_manager.py:262 -#, python-brace-format -msgid "Edit {origkey} :" -msgstr "{origkey} bewerken:" - -#: lib/models/network_configuration.py:53 -#: lib/models/network_configuration.py:74 msgid "Unknown nic type: {}. Possible values are {}" msgstr "Onbekend nic-type: {}. Mogelijke waarden zijn {}" -#: lib/configuration.py:75 msgid "" "\n" "This is your chosen configuration:" @@ -919,44 +442,28 @@ msgstr "" "\n" "Dit is de door u gekozen configuratie:" -#: lib/pacman.py:18 -msgid "" -"Pacman is already running, waiting maximum 10 minutes for it to terminate." -msgstr "" -"Pacman is al actief. Er wordt maximaal 10 minuten gewacht alvorens het " -"opnieuw te proberen." +msgid "Pacman is already running, waiting maximum 10 minutes for it to terminate." +msgstr "Pacman is al actief. Er wordt maximaal 10 minuten gewacht alvorens het opnieuw te proberen." -#: lib/pacman.py:25 -msgid "" -"Pre-existing pacman lock never exited. Please clean up any existing pacman " -"sessions before using archinstall." -msgstr "" -"De eerdere Pacman-vergrendeling is niet opgeheven. Sluit actieve Pacman-" -"sessies af alvorens deze installatiewizard te gebruiken." +msgid "Pre-existing pacman lock never exited. Please clean up any existing pacman sessions before using archinstall." +msgstr "De eerdere Pacman-vergrendeling is niet opgeheven. Sluit actieve Pacman-sessies af alvorens deze installatiewizard te gebruiken." -#: lib/user_interaction/general_conf.py:174 msgid "Choose which optional additional repositories to enable" -msgstr "" -"Geef aan welke aanvullende pakketbronnen dienen te worden gebruikt " -"(optioneel)" +msgstr "Geef aan welke aanvullende pakketbronnen dienen te worden gebruikt (optioneel)" -#: lib/user_interaction/manage_users_conf.py:32 -msgid "Add an user" +#, fuzzy +msgid "Add a user" msgstr "Gebruiker toevoegen" -#: lib/user_interaction/manage_users_conf.py:33 msgid "Change password" msgstr "Wachtwoord wijzigen" -#: lib/user_interaction/manage_users_conf.py:34 msgid "Promote/Demote user" msgstr "Gebruiker op-/afwaarderen" -#: lib/user_interaction/manage_users_conf.py:35 msgid "Delete User" msgstr "Gebruiker verwijderen" -#: lib/user_interaction/manage_users_conf.py:99 msgid "" "\n" "Define a new user\n" @@ -964,29 +471,21 @@ msgstr "" "\n" "Stel een nieuwe gebruiker in\n" -#: lib/user_interaction/manage_users_conf.py:100 msgid "User Name : " msgstr "Gebruikersnaam: " -#: lib/user_interaction/manage_users_conf.py:115 msgid "Should {} be a superuser (sudoer)?" msgstr "Moet {} gebruiker een beheerder (sudoer) worden?" -#: lib/user_interaction/manage_users_conf.py:161 msgid "Define users with sudo privilege: " msgstr "Gebruikersnamen van gebruikers met sudo-rechten: " -#: lib/user_interaction/network_conf.py:24 msgid "No network configuration" msgstr "Geen netwerkconfiguratie" -#: lib/user_interaction/partitioning_conf.py:128 -#: lib/user_interaction/partitioning_conf.py:129 msgid "Set desired subvolumes on a btrfs partition" msgstr "Gewenste subvolumes op btrfs-partitie instellen" -#: lib/user_interaction/partitioning_conf.py:296 -#: lib/user_interaction/partitioning_conf.py:303 msgid "" "{}\n" "\n" @@ -996,97 +495,66 @@ msgstr "" "\n" "Kies op welke partitie de subvolumes dienen te worden ingesteld" -#: lib/user_interaction/partitioning_conf.py:305 -#: lib/user_interaction/partitioning_conf.py:312 msgid "Manage btrfs subvolumes for current partition" msgstr "Btrfs-subvolumes van huidige partitie beheren" -#: lib/user_interaction/save_conf.py:24 lib/user_interaction/save_conf.py:29 msgid "No configuration" msgstr "Geen configuratie" -#: lib/user_interaction/save_conf.py:42 msgid "Save user configuration" msgstr "Gebruikersconfiguratie vastleggen" -#: lib/user_interaction/save_conf.py:43 msgid "Save user credentials" msgstr "Aanmeldgegevens vastleggen" -#: lib/user_interaction/save_conf.py:44 msgid "Save disk layout" msgstr "Schijfindeling vastleggen" -#: lib/user_interaction/save_conf.py:45 msgid "Save all" msgstr "Alles opslaan" -#: lib/user_interaction/save_conf.py:48 msgid "Choose which configuration to save" msgstr "Geef aan welke configuratie er moet worden vastgelegd" -#: lib/user_interaction/save_conf.py:59 msgid "Enter a directory for the configuration(s) to be saved: " -msgstr "" -"Voer de naam in van de map waarin de configuratie(s) moet(en) worden " -"vastgelegd: " +msgstr "Voer de naam in van de map waarin de configuratie(s) moet(en) worden vastgelegd: " -#: lib/user_interaction/save_conf.py:63 msgid "Not a valid directory: {}" msgstr "Ongeldige map: {}" -#: lib/user_interaction/utils.py:32 msgid "The password you are using seems to be weak," msgstr "Het gekozen wachtwoord is zwak." -#: lib/user_interaction/utils.py:33 msgid "are you sure you want to use it?" msgstr "Weet u zeker dat u het wilt gebruiken?" -#: lib/user_interaction/global_menu.py:134 lib/menu/selection_menu.py:555 -#: lib/menu/global_menu.py:134 msgid "Additional repositories to enable" msgstr "Aanvullende te gebruiken pakketbronnen" -#: lib/user_interaction/global_menu.py:155 lib/menu/selection_menu.py:576 -#: lib/menu/global_menu.py:155 msgid "Save configuration" msgstr "Configuratie vastleggen" -#: lib/user_interaction/global_menu.py:192 lib/menu/selection_menu.py:613 -#: lib/menu/global_menu.py:192 msgid "Missing configurations:\n" msgstr "Ontbrekende configuraties:\n" -#: lib/user_interaction/global_menu.py:210 lib/menu/selection_menu.py:631 -#: lib/menu/global_menu.py:210 msgid "Either root-password or at least 1 superuser must be specified" msgstr "Stel een rootwachtwoord of minimaal één beheerder in" -#: lib/user_interaction/global_menu.py:275 lib/menu/selection_menu.py:695 -#: lib/menu/global_menu.py:275 msgid "Manage superuser accounts: " msgstr "Beheerdersaccounts beheren: " -#: lib/user_interaction/global_menu.py:279 lib/menu/selection_menu.py:699 -#: lib/menu/global_menu.py:279 msgid "Manage ordinary user accounts: " msgstr "Beheer reguliere gebruikersaccounts: " -#: lib/user_interaction/subvolume_config.py:17 msgid " Subvolume :{:16}" msgstr " Subvolume :{:16}" -#: lib/user_interaction/subvolume_config.py:19 -#: lib/user_interaction/subvolume_config.py:22 msgid " mounted at {:16}" msgstr " aangekoppeld op {:16}" -#: lib/user_interaction/subvolume_config.py:26 msgid " with option {}" msgstr " met optie {}" -#: lib/user_interaction/subvolume_config.py:46 msgid "" "\n" " Fill the desired values for a new subvolume \n" @@ -1094,38 +562,196 @@ msgstr "" "\n" " Voer de gewenste waarden van het nieuwe subvolume in\n" -#: lib/user_interaction/subvolume_config.py:77 msgid "Subvolume name " msgstr "Subvolumenaam " -#: lib/user_interaction/subvolume_config.py:81 msgid "Subvolume mountpoint" msgstr "Subvolume-aankoppelpunt" -#: lib/user_interaction/subvolume_config.py:84 msgid "Subvolume options" msgstr "Subvolume-opties" -#: lib/user_interaction/subvolume_config.py:87 msgid "Save" msgstr "Opslaan" -#: lib/user_interaction/subvolume_config.py:121 msgid "Subvolume name :" msgstr "Subvolumenaam:" -#: lib/user_interaction/subvolume_config.py:124 msgid "Select a mount point :" msgstr "Kies een aankoppelpunt:" -#: lib/user_interaction/subvolume_config.py:128 msgid "Select the desired subvolume options " msgstr "Stel gewenste subvolume-opties in " -#: lib/user_interaction/manage_users_conf.py:161 msgid "Define users with sudo privilege, by username: " msgstr "Gebruikersnamen van gebruikers met sudo-rechten: " -#: lib/installer.py:152 msgid "[!] A log file has been created here: {}" msgstr "[!] Er is een logboek aangemaakt: {} {}" + +#, fuzzy +msgid "Would you like to use BTRFS subvolumes with a default structure?" +msgstr "Wilt u GRUB gebruiken als opstartlader in plaats van systemd-boot?" + +#, fuzzy +msgid "Would you like to use BTRFS compression?" +msgstr "Wilt u wisselgeheugen i.c.m. zram gebruiken?" + +#, fuzzy +msgid "Would you like to create a separate partition for /home?" +msgstr "Wilt u wisselgeheugen i.c.m. zram gebruiken?" + +msgid "The selected drives do not have the minimum capacity required for an automatic suggestion\n" +msgstr "" + +msgid "Minimum capacity for /home partition: {}GB\n" +msgstr "" + +msgid "Minimum capacity for Arch Linux partition: {}GB" +msgstr "" + +msgid "Continue" +msgstr "" + +msgid "yes" +msgstr "" + +msgid "no" +msgstr "" + +msgid "set: {}" +msgstr "" + +msgid "Manual configuration setting must be a list" +msgstr "" + +#, fuzzy +msgid "No iface specified for manual configuration" +msgstr "Gebruikersconfiguratie vastleggen" + +msgid "Manual nic configuration with no auto DHCP requires an IP address" +msgstr "" + +msgid "Add interface" +msgstr "" + +msgid "Edit interface" +msgstr "" + +#, fuzzy +msgid "Delete interface" +msgstr "Gebruiker verwijderen" + +#, fuzzy +msgid "Select interface to add" +msgstr "Kies een in te stellen netwerkkaart" + +#, fuzzy +msgid "Manual configuration" +msgstr "Configuratie vastleggen" + +#, fuzzy +msgid "Mark/Unmark a partition as compressed (btrfs only)" +msgstr "Partitie (de)markeren voor versleuteling" + +#, fuzzy +msgid "The password you are using seems to be weak, are you sure you want to use it?" +msgstr "Het gekozen wachtwoord is zwak." + +msgid "Provides a selection of desktop environments and tiling window managers, e.g. gnome, kde, sway" +msgstr "" + +msgid "Select your desired desktop environment" +msgstr "" + +msgid "A very basic installation that allows you to customize Arch Linux as you see fit." +msgstr "" + +msgid "Provides a selection of various server packages to install and enable, e.g. httpd, nginx, mariadb" +msgstr "" + +msgid "Choose which servers to install, if none then a minimal installation wil be done" +msgstr "" + +msgid "Installs a minimal system as well as xorg and graphics drivers." +msgstr "" + +msgid "Press Enter to continue." +msgstr "" + +msgid "Would you like to chroot into the newly created installation and perform post-installation configuration?" +msgstr "" + +#, fuzzy +msgid "Are you sure you want to reset this setting?" +msgstr "Weet u zeker dat u het wilt gebruiken?" + +#, fuzzy +msgid "Select one or more hard drives to use and configure\n" +msgstr "Selecteer één of meer in te stellen harde schijven" + +msgid "Any modifications to the existing setting will reset the disk layout!" +msgstr "" + +msgid "If you reset the harddrive selection this will also reset the current disk layout. Are you sure?" +msgstr "" + +#, fuzzy +msgid "Save and exit" +msgstr "Bevestigen en afsluiten" + +#, fuzzy +msgid "" +"{}\n" +"contains queued partitions, this will remove those, are you sure?" +msgstr "‘{}’ bevat in behandeling zijnde partities, welke hierdoor worden verwijderd. Weet u zeker dat u wilt doorgaan?" + +#, fuzzy +msgid "No audio server" +msgstr "Kies een audioserver" + +msgid "(default)" +msgstr "" + +#, fuzzy +msgid "Use ESC to skip" +msgstr "Druk op Esc om over te slaan\n" + +msgid "" +"Use CTRL+C to reset current selection\n" +"\n" +msgstr "" + +#, fuzzy +msgid "Copy to: " +msgstr "Kopiëren naar:" + +#, fuzzy +msgid "Edit: " +msgstr "Bewerken" + +msgid "Key: " +msgstr "" + +#, fuzzy +msgid "Edit {}: " +msgstr "Bewerken:" + +msgid "Add :" +msgstr "Toevoegen:" + +msgid "Value :" +msgstr "Waarde:" + +#, python-brace-format +#~ msgid "Edit {origkey} :" +#~ msgstr "{origkey} bewerken:" + +#~ msgid "Copy to :" +#~ msgstr "Kopiëren naar:" + +#~ msgid "Edite :" +#~ msgstr "Bewerken:" + +#~ msgid "Key :" +#~ msgstr "Sleutel:" diff --git a/archinstall/locales/pl/LC_MESSAGES/base.mo b/archinstall/locales/pl/LC_MESSAGES/base.mo index 33293c0f..34b83499 100644 Binary files a/archinstall/locales/pl/LC_MESSAGES/base.mo and b/archinstall/locales/pl/LC_MESSAGES/base.mo differ diff --git a/archinstall/locales/pl/LC_MESSAGES/base.po b/archinstall/locales/pl/LC_MESSAGES/base.po index aa3f2fa5..87a3a8e7 100644 --- a/archinstall/locales/pl/LC_MESSAGES/base.po +++ b/archinstall/locales/pl/LC_MESSAGES/base.po @@ -10,107 +10,81 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: lib/installer.py:144 lib/installer.py:152 msgid "[!] A log file has been created here: {} {}" msgstr "Plik dziennika został stworzony tutaj: {} {}" -#: lib/installer.py:145 lib/installer.py:153 msgid " Please submit this issue (and file) to https://github.com/archlinux/archinstall/issues" msgstr " Proszę zgłosić ten błąd (i plik) pod adresem https://github.com/archlinux/archinstall/issues" -#: lib/user_interaction.py:83 lib/user_interaction/utils.py:86 msgid "Do you really want to abort?" msgstr "Czy napewno chcesz przerwać proces?" -#: lib/user_interaction.py:101 lib/user_interaction.py:104 lib/user_interaction/utils.py:53 msgid "And one more time for verification: " msgstr "I jeszcze raz w celu weryfikacji: " -#: lib/user_interaction.py:272 lib/user_interaction.py:275 lib/user_interaction/system_conf.py:142 msgid "Would you like to use swap on zram?" msgstr "Czy chcesz używać swap w zramie?" -#: lib/user_interaction.py:285 lib/user_interaction.py:288 lib/user_interaction/general_conf.py:33 msgid "Desired hostname for the installation: " msgstr "Nazwa hosta użyta do instalacji: " -#: lib/user_interaction.py:290 lib/user_interaction.py:293 msgid "Username for required superuser with sudo privileges: " msgstr "Nazwa użytkownika dla wymaganego superużytkownika z uprawnieniami sudo: " -#: lib/user_interaction.py:310 lib/user_interaction.py:313 lib/user_interaction/manage_users_conf.py:167 msgid "Any additional users to install (leave blank for no users): " msgstr "Ewentualni użytkownicy do instalacji (pozostaw puste jeśli nie chcesz tworzyć użytkowników): " -#: lib/user_interaction.py:324 lib/user_interaction.py:327 msgid "Should this user be a superuser (sudoer)?" msgstr "Czy użytkownik powinien superużytkownikiem (sudoer)?" -#: lib/user_interaction.py:340 lib/user_interaction.py:343 lib/user_interaction.py:346 lib/user_interaction/general_conf.py:41 msgid "Select a timezone" msgstr "Wybierz strefę czasową" -#: lib/user_interaction.py:354 lib/user_interaction.py:357 lib/user_interaction.py:360 lib/user_interaction.py:359 lib/user_interaction/system_conf.py:115 msgid "Would you like to use GRUB as a bootloader instead of systemd-boot?" msgstr "Czy chcesz użyć GRUB-a jako programu rozruchowego zamiast systemd-boot?" -#: lib/user_interaction.py:364 lib/user_interaction.py:367 lib/user_interaction.py:370 lib/user_interaction.py:369 lib/user_interaction/system_conf.py:125 msgid "Choose a bootloader" msgstr "Wybierz program rozruchowy" -#: lib/user_interaction.py:380 lib/user_interaction.py:383 lib/user_interaction.py:386 lib/user_interaction.py:385 lib/user_interaction/general_conf.py:53 msgid "Choose an audio server" msgstr "Wybierz serwer dźwięku" -#: lib/user_interaction.py:391 lib/user_interaction.py:394 lib/user_interaction.py:397 lib/user_interaction.py:396 lib/user_interaction/general_conf.py:138 msgid "Only packages such as base, base-devel, linux, linux-firmware, efibootmgr and optional profile packages are installed." msgstr "Instalowane są tylko pakiety takie jak base, base-devel, linux, linux-firmware, efibootmgr i opcjonalne pakiety profili." -#: lib/user_interaction.py:392 lib/user_interaction.py:395 lib/user_interaction.py:398 lib/user_interaction.py:397 lib/user_interaction/general_conf.py:139 msgid "If you desire a web browser, such as firefox or chromium, you may specify it in the following prompt." msgstr "Jeśli wymagana jest przeglądarka internetowa, taka jak firefox lub chromium, można ją określić w następującym oknie dialogowym" -#: lib/user_interaction.py:396 lib/user_interaction.py:399 lib/user_interaction.py:402 lib/user_interaction.py:401 lib/user_interaction/general_conf.py:143 msgid "Write additional packages to install (space separated, leave blank to skip): " msgstr "Wpisz dodatkowe pakiety do zainstalowania (oddzielone spacjami, pozostaw puste aby pominąć): " -#: lib/user_interaction.py:419 lib/user_interaction.py:422 lib/user_interaction.py:425 lib/user_interaction.py:424 lib/user_interaction/network_conf.py:25 msgid "Copy ISO network configuration to installation" msgstr "Skopiuj ustawienia sieciowe ISO do instalacji" -#: lib/user_interaction.py:420 lib/user_interaction.py:423 lib/user_interaction.py:426 lib/user_interaction.py:425 lib/user_interaction/network_conf.py:26 msgid "Use NetworkManager (necessary to configure internet graphically in GNOME and KDE)" msgstr "Użyj programu NetworkManager (niezbędne do graficznej konfiguracji Internetu w środowiskach GNOME i KDE)" -#: lib/user_interaction.py:428 lib/user_interaction.py:431 lib/user_interaction.py:434 lib/user_interaction.py:433 lib/user_interaction/network_conf.py:43 msgid "Select one network interface to configure" msgstr "Wybierz jeden interfejs sieciowy do skonfigurowania" -#: lib/user_interaction.py:441 lib/user_interaction.py:444 lib/user_interaction.py:447 lib/user_interaction.py:446 lib/user_interaction/network_conf.py:70 msgid "Select which mode to configure for \"{}\" or skip to use default mode \"{}\"" msgstr "Wybierz tryb, który ma być skonfigurowany dla \"{}\" lub pomiń, aby użyć trybu domyślnego \"{}\"" -#: lib/user_interaction.py:446 lib/user_interaction.py:449 lib/user_interaction.py:452 lib/user_interaction.py:451 lib/user_interaction/network_conf.py:75 msgid "Enter the IP and subnet for {} (example: 192.168.0.5/24): " msgstr "Wprowadź adres IP i podsieć dla {}. (przykład: 192.168.0.5/24): " -#: lib/user_interaction.py:461 lib/user_interaction.py:464 lib/user_interaction.py:467 lib/user_interaction.py:466 lib/user_interaction/network_conf.py:86 msgid "Enter your gateway (router) IP address or leave blank for none: " msgstr "Wprowadź adres IP bramy sieciowej (routera) (pozostaw puste pole w przypadku braku adresu): " -#: lib/user_interaction.py:476 lib/user_interaction.py:479 lib/user_interaction.py:482 lib/user_interaction.py:481 lib/user_interaction/network_conf.py:102 msgid "Enter your DNS servers (space separated, blank for none): " msgstr "Wpisz swoje serwery DNS (oddzielone spacjami, pozostaw puste w przypadku braku): " -#: lib/user_interaction.py:510 lib/user_interaction.py:513 lib/user_interaction.py:516 lib/user_interaction.py:515 lib/user_interaction/disk_conf.py:23 msgid "Select which filesystem your main partition should use" msgstr "Wybierz, który system plików ma być używany na partycji głównej" -#: lib/user_interaction.py:556 lib/user_interaction.py:559 lib/user_interaction.py:562 lib/user_interaction.py:561 lib/user_interaction/partitioning_conf.py:64 lib/user_interaction/partitioning_conf.py:63 msgid "Current partition layout" msgstr "Aktualny układ partycji" -#: lib/user_interaction.py:607 lib/user_interaction.py:614 lib/user_interaction.py:617 lib/user_interaction.py:620 lib/user_interaction.py:619 lib/user_interaction/partitioning_conf.py:145 lib/user_interaction/partitioning_conf.py:146 msgid "" "Select what to do with\n" "{}" @@ -118,23 +92,18 @@ msgstr "" "Wybierz, co ma być zrobione z\n" "{}" -#: lib/user_interaction.py:624 lib/user_interaction.py:709 lib/user_interaction.py:631 lib/user_interaction.py:716 lib/user_interaction.py:634 lib/user_interaction.py:719 lib/user_interaction.py:637 lib/user_interaction.py:722 lib/user_interaction.py:636 lib/user_interaction.py:721 lib/user_interaction/partitioning_conf.py:162 lib/user_interaction/partitioning_conf.py:255 lib/user_interaction/partitioning_conf.py:165 lib/user_interaction/partitioning_conf.py:260 msgid "Enter a desired filesystem type for the partition" msgstr "Wprowadź typ systemu plików dla partycji" -#: lib/user_interaction.py:626 lib/user_interaction.py:633 lib/user_interaction.py:636 lib/user_interaction.py:639 lib/user_interaction.py:638 lib/user_interaction/partitioning_conf.py:164 lib/user_interaction/partitioning_conf.py:167 msgid "Enter the start sector (percentage or block number, default: {}): " msgstr "Wprowadź sektor początkowy (procent lub numer bloku, domyślnie: {}): " -#: lib/user_interaction.py:635 lib/user_interaction.py:642 lib/user_interaction.py:645 lib/user_interaction.py:648 lib/user_interaction.py:647 lib/user_interaction/partitioning_conf.py:174 lib/user_interaction/partitioning_conf.py:177 msgid "Enter the end sector of the partition (percentage or block number, ex: {}): " msgstr "Wprowadź sektor końcowy (procent lub numer bloku, domyślnie: {}): " -#: lib/user_interaction.py:661 lib/user_interaction.py:668 lib/user_interaction.py:671 lib/user_interaction.py:674 lib/user_interaction.py:673 lib/user_interaction/partitioning_conf.py:203 lib/user_interaction/partitioning_conf.py:208 msgid "{} contains queued partitions, this will remove those, are you sure?" msgstr "{} zawiera partycje oczekujące w kolejce, to spowoduje ich usunięcie, czy jesteś pewien?" -#: lib/user_interaction.py:674 lib/user_interaction.py:681 lib/user_interaction.py:684 lib/user_interaction.py:687 lib/user_interaction.py:686 lib/user_interaction/partitioning_conf.py:216 lib/user_interaction/partitioning_conf.py:221 msgid "" "{}\n" "\n" @@ -144,7 +113,6 @@ msgstr "" "\n" "Wybierz według indeksu, które partycje mają zostać usunięte" -#: lib/user_interaction.py:682 lib/user_interaction.py:689 lib/user_interaction.py:692 lib/user_interaction.py:695 lib/user_interaction.py:694 lib/user_interaction/partitioning_conf.py:226 lib/user_interaction/partitioning_conf.py:231 msgid "" "{}\n" "\n" @@ -154,15 +122,12 @@ msgstr "" "\n" "Wybierz według indeksu, które partycje mają zostać zamontowane" -#: lib/user_interaction.py:686 lib/user_interaction.py:693 lib/user_interaction.py:696 lib/user_interaction.py:699 lib/user_interaction.py:698 lib/user_interaction/partitioning_conf.py:231 lib/user_interaction/partitioning_conf.py:236 msgid " * Partition mount-points are relative to inside the installation, the boot would be /boot as an example." msgstr " * Punkty montowania partycji są względne w stosunku do wnętrza instalacji, np. partycja startowa to /boot." -#: lib/user_interaction.py:687 lib/user_interaction.py:694 lib/user_interaction.py:697 lib/user_interaction.py:700 lib/user_interaction.py:699 lib/user_interaction/partitioning_conf.py:233 lib/user_interaction/partitioning_conf.py:238 msgid "Select where to mount partition (leave blank to remove mountpoint): " msgstr "Wybierz gdzie chcesz zamontować partycję (pozostaw puste, aby usunąć punkt montowania): " -#: lib/user_interaction.py:698 lib/user_interaction.py:705 lib/user_interaction.py:708 lib/user_interaction.py:711 lib/user_interaction.py:710 lib/user_interaction/partitioning_conf.py:244 lib/user_interaction/partitioning_conf.py:249 msgid "" "{}\n" "\n" @@ -172,7 +137,6 @@ msgstr "" "\n" "Wybierz partycja która ma zostać sformatowana" -#: lib/user_interaction.py:717 lib/user_interaction.py:724 lib/user_interaction.py:727 lib/user_interaction.py:730 lib/user_interaction.py:729 lib/user_interaction/partitioning_conf.py:265 lib/user_interaction/partitioning_conf.py:270 msgid "" "{}\n" "\n" @@ -182,7 +146,6 @@ msgstr "" "\n" "Wybierz partycja która ma zostać zaszyfrowana" -#: lib/user_interaction.py:725 lib/user_interaction.py:732 lib/user_interaction.py:735 lib/user_interaction.py:738 lib/user_interaction.py:737 lib/user_interaction/partitioning_conf.py:274 lib/user_interaction/partitioning_conf.py:279 msgid "" "{}\n" "\n" @@ -192,7 +155,6 @@ msgstr "" "\n" "Wybierz partycja która ma zostać oznaczona jako startowa (rozruchowa/bootowalna)" -#: lib/user_interaction.py:732 lib/user_interaction.py:739 lib/user_interaction.py:742 lib/user_interaction.py:745 lib/user_interaction.py:744 lib/user_interaction/partitioning_conf.py:282 lib/user_interaction/partitioning_conf.py:287 msgid "" "{}\n" "\n" @@ -202,55 +164,42 @@ msgstr "" "\n" "Wybierz partycję, na której ma zostać utworzony system plików" -#: lib/user_interaction.py:739 lib/user_interaction.py:746 lib/user_interaction.py:749 lib/user_interaction.py:752 lib/user_interaction.py:751 lib/user_interaction/partitioning_conf.py:289 lib/user_interaction/partitioning_conf.py:294 msgid "Enter a desired filesystem type for the partition: " msgstr "Wprowadź typ systemu plików dla partycji: " -#: lib/user_interaction.py:760 lib/menu/selection_menu.py:141 lib/user_interaction.py:767 lib/menu/selection_menu.py:139 lib/menu/selection_menu.py:143 lib/user_interaction.py:770 lib/user_interaction.py:773 lib/user_interaction.py:772 lib/menu/selection_menu.py:407 lib/menu/selection_menu.py:415 lib/menu/selection_menu.py:17 lib/user_interaction/general_conf.py:105 lib/user_interaction/global_menu.py:43 lib/menu/selection_menu.py:53 lib/menu/selection_menu.py:463 lib/menu/global_menu.py:43 msgid "Select Archinstall language" msgstr "Wybierz język Archinstall" -#: lib/user_interaction.py:765 lib/user_interaction.py:772 lib/user_interaction.py:775 lib/user_interaction.py:778 lib/user_interaction.py:777 lib/user_interaction/disk_conf.py:40 msgid "Wipe all selected drives and use a best-effort default partition layout" msgstr "Wymaż wszystkie wybrane dyski i użyj najlepszego domyślnego układu partycji" -#: lib/user_interaction.py:766 lib/user_interaction.py:773 lib/user_interaction.py:776 lib/user_interaction.py:779 lib/user_interaction.py:778 lib/user_interaction/disk_conf.py:41 msgid "Select what to do with each individual drive (followed by partition usage)" msgstr "Wybierz, co ma być zrobione z każdym dyskiem z osobna (a następnie z wykorzystaniem partycji)" -#: lib/user_interaction.py:769 lib/user_interaction.py:770 lib/user_interaction.py:777 lib/user_interaction.py:780 lib/user_interaction.py:783 lib/user_interaction.py:782 lib/user_interaction/disk_conf.py:45 msgid "Select what you wish to do with the selected block devices" msgstr "Wybierz, co chcesz zrobić z wybranymi urządzeniami blokowymi" -#: lib/user_interaction.py:822 lib/user_interaction.py:823 lib/user_interaction.py:830 lib/user_interaction.py:833 lib/user_interaction.py:836 lib/user_interaction.py:835 lib/user_interaction/general_conf.py:126 msgid "This is a list of pre-programmed profiles, they might make it easier to install things like desktop environments" msgstr "To jest lista wstępnie zaprogramowanych profili, które mogą ułatwić instalację takich rzeczy jak środowiska graficzne" -#: lib/user_interaction.py:846 lib/user_interaction.py:847 lib/user_interaction.py:854 lib/user_interaction.py:857 lib/user_interaction.py:860 lib/user_interaction.py:859 lib/user_interaction/general_conf.py:71 msgid "Select Keyboard layout" msgstr "Wybierz układ klawiatury" -#: lib/user_interaction.py:861 lib/user_interaction.py:862 lib/user_interaction.py:869 lib/user_interaction.py:872 lib/user_interaction.py:875 lib/user_interaction.py:874 lib/user_interaction/general_conf.py:92 msgid "Select one of the regions to download packages from" msgstr "Wybierz jeden z regionów, z których chcesz pobrać pakiety" -#: lib/user_interaction.py:883 lib/user_interaction.py:884 lib/user_interaction.py:891 lib/user_interaction.py:894 lib/user_interaction.py:897 lib/user_interaction.py:896 lib/user_interaction/system_conf.py:52 msgid "Select one or more hard drives to use and configure" msgstr "Wybierz jeden lub więcej dysków twardych do użycia i skonfiguruj je" -#: lib/user_interaction.py:910 lib/user_interaction.py:911 lib/user_interaction.py:918 lib/user_interaction.py:921 lib/user_interaction.py:924 lib/user_interaction.py:923 lib/user_interaction/system_conf.py:80 msgid "For the best compatibility with your AMD hardware, you may want to use either the all open-source or AMD / ATI options." msgstr "Aby uzyskać najlepszą kompatybilność ze sprzętem AMD, warto skorzystać z opcji całkowicie otawrto źródłowe (open-source) lub AMD / ATI." -#: lib/user_interaction.py:912 lib/user_interaction.py:913 lib/user_interaction.py:920 lib/user_interaction.py:923 lib/user_interaction.py:926 lib/user_interaction.py:925 lib/user_interaction/system_conf.py:84 msgid "For the best compatibility with your Intel hardware, you may want to use either the all open-source or Intel options.\n" msgstr "Aby uzyskać najlepszą kompatybilność ze sprzętem Intel, warto skorzystać z opcji całkowicie otawrto źródłowe (open-source) lub Intel.\n" -#: lib/user_interaction.py:914 lib/user_interaction.py:915 lib/user_interaction.py:922 lib/user_interaction.py:925 lib/user_interaction.py:928 lib/user_interaction.py:927 lib/user_interaction/system_conf.py:88 msgid "For the best compatibility with your Nvidia hardware, you may want to use the Nvidia proprietary driver.\n" msgstr "Aby uzyskać najlepszą kompatybilność ze sprzętem firmy Nvidia, warto skorzystać z firmowego sterownika firmy Nvidia.\n" -#: lib/user_interaction.py:917 lib/user_interaction.py:918 lib/user_interaction.py:925 lib/user_interaction.py:928 lib/user_interaction.py:931 lib/user_interaction.py:930 lib/user_interaction/system_conf.py:92 msgid "" "\n" "\n" @@ -260,123 +209,93 @@ msgstr "" "\n" "Wybierz sterownik graficzny lub pozostaw puste pole, aby zainstalować wszystkie sterowniki typu open source" -#: lib/user_interaction.py:921 lib/user_interaction.py:922 lib/user_interaction.py:929 lib/user_interaction.py:932 lib/user_interaction.py:935 lib/user_interaction.py:934 lib/user_interaction/system_conf.py:96 msgid "All open-source (default)" msgstr "Wszystkie otwarto źródłowe (domyślnie)" -#: lib/user_interaction.py:940 lib/user_interaction.py:941 lib/user_interaction.py:948 lib/user_interaction.py:951 lib/user_interaction.py:954 lib/user_interaction.py:953 lib/user_interaction/system_conf.py:28 msgid "Choose which kernels to use or leave blank for default \"{}\"" msgstr "Wybierz które jądra mają być używane, lub pozostaw puste dla ustawień domyślnych \"{}\"" -#: lib/user_interaction.py:954 lib/user_interaction.py:955 lib/user_interaction.py:962 lib/user_interaction.py:965 lib/user_interaction.py:968 lib/user_interaction.py:967 lib/user_interaction/locale_conf.py:16 msgid "Choose which locale language to use" msgstr "Wybierz które locale języka mają zostać użyte" -#: lib/user_interaction.py:968 lib/user_interaction.py:969 lib/user_interaction.py:976 lib/user_interaction.py:979 lib/user_interaction.py:982 lib/user_interaction.py:981 lib/user_interaction/locale_conf.py:29 msgid "Choose which locale encoding to use" msgstr "Wybierz które locale kodowania mają zostać użyte" -#: lib/user_interaction.py:1009 lib/user_interaction.py:1010 lib/user_interaction.py:1017 lib/user_interaction.py:1020 lib/user_interaction.py:1023 lib/user_interaction.py:1022 lib/user_interaction/backwards_compatible_conf.py:49 msgid "Select one of the values shown below: " msgstr "Wybierz jedną z wartości przedstawionych poniżej: " -#: lib/user_interaction.py:1050 lib/user_interaction.py:1051 lib/user_interaction.py:1058 lib/user_interaction.py:1061 lib/user_interaction.py:1064 lib/user_interaction.py:1063 lib/user_interaction/backwards_compatible_conf.py:88 msgid "Select one or more of the options below: " msgstr "Wybierz jedną lub więcej z poniższych opcji: " -#: lib/disk/filesystem.py:86 lib/disk/filesystem.py:87 msgid "Adding partition...." msgstr "Dodawanie partycji..." -#: lib/disk/filesystem.py:139 lib/disk/filesystem.py:141 lib/disk/filesystem.py:142 msgid "You need to enter a valid fs-type in order to continue. See `man parted` for valid fs-type's." msgstr "Aby kontynuować, musisz podać poprawny typ fs. Zobacz `man parted`, aby poznać prawidłowe typy fs." -#: lib/profiles.py:89 lib/profiles.py:90 msgid "Error: Listing profiles on URL \"{}\" resulted in:" msgstr "Błąd: Lista profili z URL \"{}\":" -#: lib/profiles.py:92 lib/profiles.py:93 msgid "Error: Could not decode \"{}\" result as JSON:" msgstr "Błąd: Nie można dekodować \"{}\" jako JSON:" -#: lib/menu/selection_menu.py:146 lib/menu/selection_menu.py:144 lib/menu/selection_menu.py:148 lib/menu/selection_menu.py:412 lib/menu/selection_menu.py:420 lib/user_interaction/global_menu.py:48 lib/menu/selection_menu.py:468 lib/menu/global_menu.py:48 msgid "Select keyboard layout" msgstr "Wybierz układ klawiatury" -#: lib/menu/selection_menu.py:149 lib/menu/selection_menu.py:147 lib/menu/selection_menu.py:151 lib/menu/selection_menu.py:415 lib/menu/selection_menu.py:423 lib/user_interaction/global_menu.py:51 lib/menu/selection_menu.py:471 lib/menu/global_menu.py:51 msgid "Select mirror region" msgstr "Wybierz region lustra" -#: lib/menu/selection_menu.py:154 lib/menu/selection_menu.py:152 lib/menu/selection_menu.py:156 lib/menu/selection_menu.py:420 lib/menu/selection_menu.py:428 lib/user_interaction/global_menu.py:56 lib/menu/selection_menu.py:476 lib/menu/global_menu.py:56 msgid "Select locale language" msgstr "Wybierz locale języka" -#: lib/menu/selection_menu.py:156 lib/menu/selection_menu.py:154 lib/menu/selection_menu.py:158 lib/menu/selection_menu.py:422 lib/menu/selection_menu.py:430 lib/user_interaction/global_menu.py:58 lib/menu/selection_menu.py:478 lib/menu/global_menu.py:58 msgid "Select locale encoding" msgstr "Wybierz locale kodowania" -#: lib/menu/selection_menu.py:159 lib/menu/selection_menu.py:157 lib/menu/selection_menu.py:161 lib/menu/selection_menu.py:425 lib/menu/selection_menu.py:433 lib/user_interaction/global_menu.py:61 lib/menu/selection_menu.py:481 lib/menu/global_menu.py:61 msgid "Select harddrives" msgstr "Wybierz dyski twarde" -#: lib/menu/selection_menu.py:163 lib/menu/selection_menu.py:161 lib/menu/selection_menu.py:165 lib/menu/selection_menu.py:429 lib/menu/selection_menu.py:437 lib/user_interaction/global_menu.py:65 lib/menu/selection_menu.py:485 lib/menu/global_menu.py:65 msgid "Select disk layout" msgstr "Wybierz układ dysku" -#: lib/menu/selection_menu.py:171 lib/menu/selection_menu.py:169 lib/menu/selection_menu.py:173 lib/menu/selection_menu.py:437 lib/menu/selection_menu.py:445 lib/user_interaction/global_menu.py:73 lib/menu/selection_menu.py:493 lib/menu/global_menu.py:73 msgid "Set encryption password" msgstr "Ustaw hasło szyfrowania" -#: lib/menu/selection_menu.py:177 lib/menu/selection_menu.py:175 lib/menu/selection_menu.py:179 lib/menu/selection_menu.py:443 lib/menu/selection_menu.py:451 lib/user_interaction/global_menu.py:79 lib/menu/selection_menu.py:499 lib/menu/global_menu.py:79 msgid "Use swap" msgstr "Użyj swap-u" -#: lib/menu/selection_menu.py:182 lib/menu/selection_menu.py:180 lib/menu/selection_menu.py:184 lib/menu/selection_menu.py:448 lib/menu/selection_menu.py:456 lib/user_interaction/global_menu.py:84 lib/menu/selection_menu.py:504 lib/menu/global_menu.py:84 msgid "Select bootloader" msgstr "Wybierz program rozruchowy (bootloader)" -#: lib/menu/selection_menu.py:188 lib/menu/selection_menu.py:186 lib/menu/selection_menu.py:190 lib/menu/selection_menu.py:454 lib/menu/selection_menu.py:462 lib/user_interaction/global_menu.py:95 lib/menu/selection_menu.py:515 lib/menu/global_menu.py:95 msgid "Set root password" msgstr "Ustaw hasło administratora" -#: lib/menu/selection_menu.py:193 lib/menu/selection_menu.py:191 lib/menu/selection_menu.py:195 lib/menu/selection_menu.py:459 lib/menu/selection_menu.py:467 lib/user_interaction/global_menu.py:100 lib/menu/selection_menu.py:520 lib/menu/global_menu.py:100 msgid "Specify superuser account" msgstr "Określ konto superużytkownika" -#: lib/menu/selection_menu.py:199 lib/menu/selection_menu.py:197 lib/menu/selection_menu.py:201 lib/menu/selection_menu.py:465 lib/menu/selection_menu.py:473 lib/user_interaction/global_menu.py:107 lib/menu/selection_menu.py:528 lib/menu/global_menu.py:107 msgid "Specify user account" msgstr "Określ konto użytkownika" -#: lib/menu/selection_menu.py:205 lib/menu/selection_menu.py:203 lib/menu/selection_menu.py:207 lib/menu/selection_menu.py:471 lib/menu/selection_menu.py:479 lib/user_interaction/global_menu.py:114 lib/menu/selection_menu.py:535 lib/menu/global_menu.py:114 msgid "Specify profile" msgstr "Określ profil" -#: lib/menu/selection_menu.py:210 lib/menu/selection_menu.py:208 lib/menu/selection_menu.py:212 lib/menu/selection_menu.py:476 lib/menu/selection_menu.py:484 lib/user_interaction/global_menu.py:119 lib/menu/selection_menu.py:540 lib/menu/global_menu.py:119 msgid "Select audio" msgstr "Wybierz audio" -#: lib/menu/selection_menu.py:214 lib/menu/selection_menu.py:212 lib/menu/selection_menu.py:216 lib/menu/selection_menu.py:480 lib/menu/selection_menu.py:488 lib/user_interaction/global_menu.py:123 lib/menu/selection_menu.py:544 lib/menu/global_menu.py:123 msgid "Select kernels" msgstr "Wybierz jądra" -#: lib/menu/selection_menu.py:219 lib/menu/selection_menu.py:217 lib/menu/selection_menu.py:221 lib/menu/selection_menu.py:485 lib/menu/selection_menu.py:493 lib/user_interaction/global_menu.py:128 lib/menu/selection_menu.py:549 lib/menu/global_menu.py:128 msgid "Additional packages to install" msgstr "Dodatkowe pakiety do instalacji" -#: lib/menu/selection_menu.py:224 lib/menu/selection_menu.py:222 lib/menu/selection_menu.py:226 lib/menu/selection_menu.py:490 lib/menu/selection_menu.py:498 lib/user_interaction/global_menu.py:139 lib/menu/selection_menu.py:560 lib/menu/global_menu.py:139 msgid "Configure network" msgstr "Konfiguracja sieci" -#: lib/menu/selection_menu.py:232 lib/menu/selection_menu.py:230 lib/menu/selection_menu.py:234 lib/menu/selection_menu.py:498 lib/menu/selection_menu.py:506 lib/user_interaction/global_menu.py:150 lib/menu/selection_menu.py:571 lib/menu/global_menu.py:150 msgid "Set automatic time sync (NTP)" msgstr "Ustawianie automatycznej synchronizacji czasu (NTP)" -#: lib/menu/selection_menu.py:310 lib/menu/selection_menu.py:308 lib/menu/selection_menu.py:315 lib/menu/selection_menu.py:527 lib/menu/selection_menu.py:535 lib/user_interaction/global_menu.py:187 lib/menu/selection_menu.py:608 lib/menu/global_menu.py:187 msgid "Install ({} config(s) missing)" msgstr "Zainstaluj ({} brakuje konfiguracji)" -#: lib/menu/selection_menu.py:373 lib/menu/selection_menu.py:371 lib/menu/selection_menu.py:378 lib/menu/selection_menu.py:591 lib/menu/selection_menu.py:599 lib/user_interaction/global_menu.py:249 lib/menu/selection_menu.py:669 lib/menu/global_menu.py:249 msgid "" "You decided to skip harddrive selection\n" "and will use whatever drive-setup is mounted at {} (experimental)\n" @@ -388,67 +307,51 @@ msgstr "" "OSTRZEŻENIE: Archinstall nie sprawdzi przydatności tej konfiguracji\n" "Czy chcesz kontynuować?" -#: lib/disk/filesystem.py:97 lib/disk/filesystem.py:98 msgid "Re-using partition instance: {}" msgstr "Ponowne wykorzystanie instancji partycji" -#: lib/user_interaction.py:590 lib/user_interaction.py:593 lib/user_interaction.py:596 lib/user_interaction.py:595 lib/user_interaction/partitioning_conf.py:119 lib/user_interaction/partitioning_conf.py:120 msgid "Create a new partition" msgstr "Utwórz nową partycję" -#: lib/user_interaction.py:592 lib/user_interaction.py:595 lib/user_interaction.py:598 lib/user_interaction.py:597 lib/user_interaction/partitioning_conf.py:121 lib/user_interaction/partitioning_conf.py:122 msgid "Delete a partition" msgstr "Usuń partycje" -#: lib/user_interaction.py:593 lib/user_interaction.py:596 lib/user_interaction.py:599 lib/user_interaction.py:598 lib/user_interaction/partitioning_conf.py:122 lib/user_interaction/partitioning_conf.py:123 msgid "Clear/Delete all partitions" msgstr "Wyczyść/Usuń wszystkie partycje" -#: lib/user_interaction.py:594 lib/user_interaction.py:597 lib/user_interaction.py:600 lib/user_interaction.py:599 lib/user_interaction/partitioning_conf.py:123 lib/user_interaction/partitioning_conf.py:124 msgid "Assign mount-point for a partition" msgstr "Przydzielanie punktu montowania dla partycji" -#: lib/user_interaction.py:595 lib/user_interaction.py:598 lib/user_interaction.py:601 lib/user_interaction.py:600 lib/user_interaction/partitioning_conf.py:124 lib/user_interaction/partitioning_conf.py:125 msgid "Mark/Unmark a partition to be formatted (wipes data)" msgstr "Zaznacz/odznacz partycję, która ma zostać sformatowana (wymazuje dane)" -#: lib/user_interaction.py:596 lib/user_interaction.py:599 lib/user_interaction.py:602 lib/user_interaction.py:601 lib/user_interaction/partitioning_conf.py:125 lib/user_interaction/partitioning_conf.py:126 msgid "Mark/Unmark a partition as encrypted" msgstr "Oznaczanie/odznaczanie partycji jako zaszyfrowanej" -#: lib/user_interaction.py:597 lib/user_interaction.py:600 lib/user_interaction.py:603 lib/user_interaction.py:602 lib/user_interaction/partitioning_conf.py:126 lib/user_interaction/partitioning_conf.py:127 msgid "Mark/Unmark a partition as bootable (automatic for /boot)" msgstr "Oznaczanie/odznaczanie partycji jako startowe (rozruchowe/bootowalne) (automatyczne dla /boot)" -#: lib/user_interaction.py:598 lib/user_interaction.py:601 lib/user_interaction.py:604 lib/user_interaction.py:603 lib/user_interaction/partitioning_conf.py:127 lib/user_interaction/partitioning_conf.py:128 msgid "Set desired filesystem for a partition" msgstr "Ustaw system plików dla partycji" -#: lib/menu/selection_menu.py:239 lib/menu/selection_menu.py:237 lib/menu/selection_menu.py:241 lib/menu/selection_menu.py:270 lib/menu/selection_menu.py:507 lib/menu/selection_menu.py:515 lib/user_interaction/global_menu.py:167 lib/menu/selection_menu.py:588 lib/menu/global_menu.py:167 msgid "Abort" msgstr "Anuluj" -#: lib/menu/selection_menu.py:183 lib/menu/selection_menu.py:187 lib/menu/selection_menu.py:451 lib/menu/selection_menu.py:459 lib/user_interaction/global_menu.py:89 lib/menu/selection_menu.py:509 lib/menu/global_menu.py:89 msgid "Specify hostname" msgstr "Podaj nazwę hosta" -#: lib/menu/selection_menu.py:228 lib/menu/selection_menu.py:492 lib/menu/selection_menu.py:500 lib/user_interaction/global_menu.py:141 lib/menu/selection_menu.py:562 lib/menu/global_menu.py:141 msgid "Not configured, unavailable unless setup manually" msgstr "Nie skonfigurowana, niedostępna, chyba że zostanie skonfigurowana ręcznie" -#: lib/menu/selection_menu.py:231 lib/menu/selection_menu.py:495 lib/menu/selection_menu.py:503 lib/user_interaction/global_menu.py:145 lib/menu/selection_menu.py:566 lib/menu/global_menu.py:145 msgid "Select timezone" msgstr "Wybierz strefe czasową" -#: lib/menu/selection_menu.py:266 lib/menu/selection_menu.py:276 lib/menu/selection_menu.py:312 msgid "Set/Modify the below options" msgstr "Ustaw/zmodyfikuj poniższe opcje" -#: lib/menu/selection_menu.py:272 msgid "Install" msgstr "Zainstaluj" -#: lib/menu/menu.py:68 lib/menu/menu.py:75 lib/menu/menu.py:119 msgid "" "Use ESC to skip\n" "\n" @@ -456,43 +359,33 @@ msgstr "" "Użyj ESC aby pominąć\n" "\n" -#: lib/user_interaction.py:591 lib/user_interaction.py:594 lib/user_interaction.py:597 lib/user_interaction.py:596 lib/user_interaction/partitioning_conf.py:120 lib/user_interaction/partitioning_conf.py:121 msgid "Suggest partition layout" msgstr "Sugerowany układ partycji" -#: lib/user_interaction.py:101 lib/user_interaction/utils.py:43 msgid "Enter a password: " msgstr "Wprowadź hasło: " -#: lib/disk/filesystem.py:117 lib/disk/filesystem.py:118 msgid "Enter a encryption password for {}" msgstr "Wprowadź hasło szyfrowania dla {}" -#: lib/menu/selection_menu.py:174 lib/menu/selection_menu.py:567 lib/menu/selection_menu.py:575 lib/user_interaction/global_menu.py:225 lib/menu/selection_menu.py:646 lib/menu/global_menu.py:225 msgid "Enter disk encryption password (leave blank for no encryption): " msgstr "Wprowadź hasło do szyfrowania dysku (pozostaw puste aby nie ustawiać szyfrowania): " -#: lib/menu/selection_menu.py:407 lib/menu/selection_menu.py:617 lib/menu/selection_menu.py:625 msgid "Create a required super-user with sudo privileges: " msgstr "Utwórz wymaganego superużytkownika z uprawnieniami sudo: " -#: lib/menu/selection_menu.py:347 lib/menu/selection_menu.py:554 lib/menu/selection_menu.py:562 lib/user_interaction/global_menu.py:220 lib/menu/selection_menu.py:641 lib/menu/global_menu.py:220 msgid "Enter root password (leave blank to disable root): " msgstr "Wprowadź hasło roota (pozostaw puste, aby wyłączyć roota): " -#: lib/user_interaction.py:307 lib/user_interaction.py:324 lib/user_interaction/manage_users_conf.py:86 lib/user_interaction/manage_users_conf.py:121 msgid "Password for user \"{}\": " msgstr "Hasło dla użytkownika \"{}\": " -#: lib/user_interaction.py:405 lib/user_interaction.py:408 lib/user_interaction.py:407 lib/user_interaction/general_conf.py:152 msgid "Verifying that additional packages exist (this might take a few seconds)" msgstr "Sprawdzenie, czy istnieją dodatkowe pakiety (może to potrwać kilka sekund)" -#: lib/user_interaction.py:281 lib/user_interaction/general_conf.py:22 msgid "Would you like to use automatic time synchronization (NTP) with the default time servers?\n" msgstr "Czy chcesz korzystać z automatycznej synchronizacji czasu (NTP) z domyślnymi serwerami czasu?\n" -#: lib/user_interaction.py:282 lib/user_interaction/general_conf.py:23 msgid "" "Hardware time and other post-configuration steps might be required in order for NTP to work.\n" "For more information, please check the Arch wiki" @@ -500,15 +393,12 @@ msgstr "" "Aby NTP działał, może być wymagany czas sprzętowy i inne kroki po konfiguracji.\n" "Aby uzyskać więcej informacji, proszę sprawdzić Arch wiki" -#: lib/menu/selection_menu.py:411 lib/menu/selection_menu.py:621 lib/menu/selection_menu.py:629 msgid "Enter a username to create an additional user (leave blank to skip): " msgstr "Wprowadź nazwę użytkownika, aby utworzyć dodatkowego użytkownika (pozostaw puste, aby pominąć): " -#: lib/menu/menu.py:116 msgid "Use ESC to skip\n" msgstr "Kliknij ESC aby pominąć\n" -#: lib/menu/list_manager.py:117 msgid "" "\n" " Choose an object from the list, and select one of the available actions for it to execute" @@ -516,68 +406,33 @@ msgstr "" "\n" " Wybierz obiekt z listy, a następnie wybierz jedną z dostępnych akcji do wykonania" -#: lib/menu/list_manager.py:130 lib/user_interaction/subvolume_config.py:90 msgid "Cancel" msgstr "Anuluj" -#: lib/menu/list_manager.py:131 msgid "Confirm and exit" msgstr "Potwierdź i wyjdź" -#: lib/menu/list_manager.py:135 lib/menu/list_manager.py:228 lib/menu/list_manager.py:251 lib/menu/list_manager.py:276 lib/user_interaction/subvolume_config.py:12 lib/user_interaction/subvolume_config.py:44 lib/user_interaction/subvolume_config.py:78 lib/user_interaction/subvolume_config.py:82 lib/user_interaction/subvolume_config.py:85 msgid "Add" msgstr "Dodaj" -#: lib/menu/list_manager.py:135 lib/menu/list_manager.py:231 lib/menu/list_manager.py:255 lib/user_interaction/subvolume_config.py:78 msgid "Copy" msgstr "Kopiuj" -#: lib/menu/list_manager.py:135 lib/menu/list_manager.py:237 lib/menu/list_manager.py:261 lib/user_interaction/subvolume_config.py:82 lib/user_interaction/subvolume_config.py:85 msgid "Edit" msgstr "Edytuj" -#: lib/menu/list_manager.py:135 lib/menu/list_manager.py:242 lib/menu/list_manager.py:264 lib/user_interaction/subvolume_config.py:40 msgid "Delete" msgstr "Usuń" -#: lib/menu/list_manager.py:185 msgid "Select an action for < {} >" msgstr "Wybierz akcję dla < {} >" -#: lib/menu/list_manager.py:229 -msgid "Add :" -msgstr "Dodaj :" - -#: lib/menu/list_manager.py:233 -msgid "Copy to :" -msgstr "Kopiuj do :" - -#: lib/menu/list_manager.py:240 -msgid "Edite :" -msgstr "Edytuj :" - -#: lib/menu/list_manager.py:252 -msgid "Key :" -msgstr "Klucz :" - -#: lib/menu/list_manager.py:253 -msgid "Value :" -msgstr "Wartość :" - -#: lib/menu/list_manager.py:257 msgid "Copy to new key:" msgstr "Skopiuj do nowego klucza:" -#: lib/menu/list_manager.py:262 -#, python-brace-format -msgid "Edit {origkey} :" -msgstr "Edytuj {origkey} :" - -#: lib/models/network_configuration.py:53 lib/models/network_configuration.py:74 msgid "Unknown nic type: {}. Possible values are {}" msgstr "Nieznany typ niszy: {}. Możliwe wartości to {}" -#: lib/configuration.py:75 msgid "" "\n" "This is your chosen configuration:" @@ -585,35 +440,28 @@ msgstr "" "\n" "To jest wybrana konfiguracja:" -#: lib/pacman.py:18 msgid "Pacman is already running, waiting maximum 10 minutes for it to terminate." msgstr "Pacman jest już uruchomiony i czeka maksymalnie 10 minut na zakończenie pracy." -#: lib/pacman.py:25 msgid "Pre-existing pacman lock never exited. Please clean up any existing pacman sessions before using archinstall." msgstr "Istniejąca wcześniej blokada programu pacman nie została zakończona. Proszę wyczyścić wszystkie istniejące sesje pacmana przed użyciem archinstall." -#: lib/user_interaction/general_conf.py:174 msgid "Choose which optional additional repositories to enable" msgstr "Wybierz, które z opcjonalnych dodatkowych repozytoriów mają być włączone" -#: lib/user_interaction/manage_users_conf.py:32 -msgid "Add an user" +#, fuzzy +msgid "Add a user" msgstr "Dodaj użytkownika" -#: lib/user_interaction/manage_users_conf.py:33 msgid "Change password" msgstr "Zmień hasło" -#: lib/user_interaction/manage_users_conf.py:34 msgid "Promote/Demote user" msgstr "Promuj/usuń użytkownika" -#: lib/user_interaction/manage_users_conf.py:35 msgid "Delete User" msgstr "Usuń użytkownika" -#: lib/user_interaction/manage_users_conf.py:99 msgid "" "\n" "Define a new user\n" @@ -621,114 +469,87 @@ msgstr "" "\n" "Zdefiniuj nowego użytkownika\n" -#: lib/user_interaction/manage_users_conf.py:100 msgid "User Name : " msgstr "Nazwa użytkownika : " -#: lib/user_interaction/manage_users_conf.py:115 msgid "Should {} be a superuser (sudoer)?" msgstr "Czy {} powinien być superużytkownikiem (sudoer)?" -#: lib/user_interaction/manage_users_conf.py:161 msgid "Define users with sudo privilege: " msgstr "Zdefiniuj użytkowników z przywilejem sudo: " -#: lib/user_interaction/network_conf.py:24 msgid "No network configuration" msgstr "Brak konfiguracji sieciowej" -#: lib/user_interaction/partitioning_conf.py:128 lib/user_interaction/partitioning_conf.py:129 msgid "Set desired subvolumes on a btrfs partition" msgstr "Ustawianie żądanych subwoluminów na partycji btrfs" -#: lib/user_interaction/partitioning_conf.py:296 lib/user_interaction/partitioning_conf.py:303 msgid "" "{}\n" "\n" "Select which partition to set subvolumes on" msgstr "Wybierz partycję, na której mają być ustawione subwoluminów" -#: lib/user_interaction/partitioning_conf.py:305 lib/user_interaction/partitioning_conf.py:312 msgid "Manage btrfs subvolumes for current partition" msgstr "Zarządzaj subwoluminami btrfs dla bieżącej partycji" -#: lib/user_interaction/save_conf.py:24 lib/user_interaction/save_conf.py:29 msgid "No configuration" msgstr "Brak konfiguracji" -#: lib/user_interaction/save_conf.py:42 msgid "Save user configuration" msgstr "Zapisz konfiguracje użytkownika" -#: lib/user_interaction/save_conf.py:43 msgid "Save user credentials" msgstr "Zapisz dane uwierzytelniające użytkownika" -#: lib/user_interaction/save_conf.py:44 msgid "Save disk layout" msgstr "Zapisz układ dysku" -#: lib/user_interaction/save_conf.py:45 msgid "Save all" msgstr "Zapisz wszystko" -#: lib/user_interaction/save_conf.py:48 msgid "Choose which configuration to save" msgstr "Wybierz, która konfiguracja ma zostać zapisana" -#: lib/user_interaction/save_conf.py:59 msgid "Enter a directory for the configuration(s) to be saved: " msgstr "Wprowadź katalog, w którym ma zostać zapisana konfiguracja: " -#: lib/user_interaction/save_conf.py:63 msgid "Not a valid directory: {}" msgstr "Nie jest to prawidłowy katalog: {}" -#: lib/user_interaction/utils.py:32 msgid "The password you are using seems to be weak," msgstr "Używane przez Ciebie hasło wydaje się być słabe," -#: lib/user_interaction/utils.py:33 msgid "are you sure you want to use it?" msgstr "czy na pewno chcesz go używać?" -#: lib/user_interaction/global_menu.py:134 lib/menu/selection_menu.py:555 lib/menu/global_menu.py:134 msgid "Additional repositories to enable" msgstr "Dodatkowe repozytoria do włączenia" -#: lib/user_interaction/global_menu.py:155 lib/menu/selection_menu.py:576 lib/menu/global_menu.py:155 msgid "Save configuration" msgstr "Zapisz konfiguracje" -#: lib/user_interaction/global_menu.py:192 lib/menu/selection_menu.py:613 lib/menu/global_menu.py:192 msgid "Missing configurations:\n" msgstr "Brak konfiguracji:\n" -#: lib/user_interaction/global_menu.py:210 lib/menu/selection_menu.py:631 lib/menu/global_menu.py:210 msgid "Either root-password or at least 1 superuser must be specified" msgstr "Musi być podane albo hasło root, albo co najmniej jednego superużytkownika" -#: lib/user_interaction/global_menu.py:275 lib/menu/selection_menu.py:695 lib/menu/global_menu.py:275 msgid "Manage superuser accounts: " msgstr "Zarządzaj kontami superużytkowników: " -#: lib/user_interaction/global_menu.py:279 lib/menu/selection_menu.py:699 lib/menu/global_menu.py:279 msgid "Manage ordinary user accounts: " msgstr "Zarządzaj kontami zwykłych użytkowników: " -#: lib/user_interaction/subvolume_config.py:17 msgid " Subvolume :{:16}" msgstr " Subwolumin :{:16}" -#: lib/user_interaction/subvolume_config.py:19 lib/user_interaction/subvolume_config.py:22 msgid " mounted at {:16}" msgstr " zamontowany w {:16}" -#: lib/user_interaction/subvolume_config.py:26 msgid " with option {}" msgstr " z opcjami {}" -#: lib/user_interaction/subvolume_config.py:46 msgid "" "\n" " Fill the desired values for a new subvolume \n" @@ -736,38 +557,196 @@ msgstr "" "\n" " Wypełnij żądane wartości dla nowego subwolumenu \n" -#: lib/user_interaction/subvolume_config.py:77 msgid "Subvolume name " msgstr "Nazwa subwolumenu " -#: lib/user_interaction/subvolume_config.py:81 msgid "Subvolume mountpoint" msgstr "Punkt montowania subwolumenu" -#: lib/user_interaction/subvolume_config.py:84 msgid "Subvolume options" msgstr "Opcje subwolumenu" -#: lib/user_interaction/subvolume_config.py:87 msgid "Save" msgstr "Zapisz" -#: lib/user_interaction/subvolume_config.py:121 msgid "Subvolume name :" msgstr "Nazwa subwolumenu :" -#: lib/user_interaction/subvolume_config.py:124 msgid "Select a mount point :" msgstr "Wybierz punkt montowania :" -#: lib/user_interaction/subvolume_config.py:128 msgid "Select the desired subvolume options " msgstr "Wybierz opcje subwolumenu " -#: lib/user_interaction/manage_users_conf.py:161 msgid "Define users with sudo privilege, by username: " msgstr "Określanie użytkowników z uprawnieniami sudo według nazwy użytkownika: " -#: lib/installer.py:152 msgid "[!] A log file has been created here: {}" msgstr "[!] Plik dziennika został zapisany tutaj: {}" + +#, fuzzy +msgid "Would you like to use BTRFS subvolumes with a default structure?" +msgstr "Czy chcesz użyć GRUB-a jako programu rozruchowego zamiast systemd-boot?" + +#, fuzzy +msgid "Would you like to use BTRFS compression?" +msgstr "Czy chcesz używać swap w zramie?" + +#, fuzzy +msgid "Would you like to create a separate partition for /home?" +msgstr "Czy chcesz używać swap w zramie?" + +msgid "The selected drives do not have the minimum capacity required for an automatic suggestion\n" +msgstr "" + +msgid "Minimum capacity for /home partition: {}GB\n" +msgstr "" + +msgid "Minimum capacity for Arch Linux partition: {}GB" +msgstr "" + +msgid "Continue" +msgstr "" + +msgid "yes" +msgstr "" + +msgid "no" +msgstr "" + +msgid "set: {}" +msgstr "" + +msgid "Manual configuration setting must be a list" +msgstr "" + +#, fuzzy +msgid "No iface specified for manual configuration" +msgstr "Zapisz konfiguracje użytkownika" + +msgid "Manual nic configuration with no auto DHCP requires an IP address" +msgstr "" + +msgid "Add interface" +msgstr "" + +msgid "Edit interface" +msgstr "" + +#, fuzzy +msgid "Delete interface" +msgstr "Usuń użytkownika" + +#, fuzzy +msgid "Select interface to add" +msgstr "Wybierz jeden interfejs sieciowy do skonfigurowania" + +#, fuzzy +msgid "Manual configuration" +msgstr "Zapisz konfiguracje" + +#, fuzzy +msgid "Mark/Unmark a partition as compressed (btrfs only)" +msgstr "Oznaczanie/odznaczanie partycji jako zaszyfrowanej" + +#, fuzzy +msgid "The password you are using seems to be weak, are you sure you want to use it?" +msgstr "Używane przez Ciebie hasło wydaje się być słabe," + +msgid "Provides a selection of desktop environments and tiling window managers, e.g. gnome, kde, sway" +msgstr "" + +msgid "Select your desired desktop environment" +msgstr "" + +msgid "A very basic installation that allows you to customize Arch Linux as you see fit." +msgstr "" + +msgid "Provides a selection of various server packages to install and enable, e.g. httpd, nginx, mariadb" +msgstr "" + +msgid "Choose which servers to install, if none then a minimal installation wil be done" +msgstr "" + +msgid "Installs a minimal system as well as xorg and graphics drivers." +msgstr "" + +msgid "Press Enter to continue." +msgstr "" + +msgid "Would you like to chroot into the newly created installation and perform post-installation configuration?" +msgstr "" + +#, fuzzy +msgid "Are you sure you want to reset this setting?" +msgstr "czy na pewno chcesz go używać?" + +#, fuzzy +msgid "Select one or more hard drives to use and configure\n" +msgstr "Wybierz jeden lub więcej dysków twardych do użycia i skonfiguruj je" + +msgid "Any modifications to the existing setting will reset the disk layout!" +msgstr "" + +msgid "If you reset the harddrive selection this will also reset the current disk layout. Are you sure?" +msgstr "" + +#, fuzzy +msgid "Save and exit" +msgstr "Potwierdź i wyjdź" + +#, fuzzy +msgid "" +"{}\n" +"contains queued partitions, this will remove those, are you sure?" +msgstr "{} zawiera partycje oczekujące w kolejce, to spowoduje ich usunięcie, czy jesteś pewien?" + +#, fuzzy +msgid "No audio server" +msgstr "Wybierz serwer dźwięku" + +msgid "(default)" +msgstr "" + +#, fuzzy +msgid "Use ESC to skip" +msgstr "Kliknij ESC aby pominąć\n" + +msgid "" +"Use CTRL+C to reset current selection\n" +"\n" +msgstr "" + +#, fuzzy +msgid "Copy to: " +msgstr "Kopiuj do :" + +#, fuzzy +msgid "Edit: " +msgstr "Edytuj" + +msgid "Key: " +msgstr "" + +#, fuzzy +msgid "Edit {}: " +msgstr "Edytuj :" + +msgid "Add :" +msgstr "Dodaj :" + +msgid "Value :" +msgstr "Wartość :" + +#, python-brace-format +#~ msgid "Edit {origkey} :" +#~ msgstr "Edytuj {origkey} :" + +#~ msgid "Copy to :" +#~ msgstr "Kopiuj do :" + +#~ msgid "Edite :" +#~ msgstr "Edytuj :" + +#~ msgid "Key :" +#~ msgstr "Klucz :" diff --git a/archinstall/locales/pt/LC_MESSAGES/base.mo b/archinstall/locales/pt/LC_MESSAGES/base.mo index 229709e8..211e920f 100644 Binary files a/archinstall/locales/pt/LC_MESSAGES/base.mo and b/archinstall/locales/pt/LC_MESSAGES/base.mo differ diff --git a/archinstall/locales/pt/LC_MESSAGES/base.po b/archinstall/locales/pt/LC_MESSAGES/base.po index 70285d93..45b29950 100644 --- a/archinstall/locales/pt/LC_MESSAGES/base.po +++ b/archinstall/locales/pt/LC_MESSAGES/base.po @@ -1,146 +1,92 @@ # lucaspcamargo , 2022. msgid "" msgstr "" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Last-Translator: lpcamargo \n" -"PO-Revision-Date: 2022-05-05 20:10-0300\n" "Project-Id-Version: \n" +"PO-Revision-Date: 2022-05-05 20:10-0300\n" +"Last-Translator: lpcamargo \n" "Language-Team: Portuguese \n" "Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Generator: Lokalize 22.04.0\n" -#: lib/installer.py:144 lib/installer.py:152 msgid "[!] A log file has been created here: {} {}" msgstr "[!] Um arquivo de log foi criado em: {} {}" -#: lib/installer.py:145 lib/installer.py:153 -msgid "" -" Please submit this issue (and file) to" -" https://github.com/archlinux/archinstall/issues" -msgstr "" -" Por favor envie esse problema (e o arquivo) para" -" https://github.com/archlinux/archinstall/issues" +msgid " Please submit this issue (and file) to https://github.com/archlinux/archinstall/issues" +msgstr " Por favor envie esse problema (e o arquivo) para https://github.com/archlinux/archinstall/issues" -#: lib/user_interaction.py:83 lib/user_interaction/utils.py:86 msgid "Do you really want to abort?" msgstr "Você realmente quer abortar? " -#: lib/user_interaction.py:101 lib/user_interaction.py:104 lib/user_interaction/utils.py:53 msgid "And one more time for verification: " msgstr "E mais uma vez para verificação: " -#: lib/user_interaction.py:272 lib/user_interaction.py:275 lib/user_interaction/system_conf.py:142 msgid "Would you like to use swap on zram?" msgstr "Você gostaria de usar swap ou zram?" -#: lib/user_interaction.py:285 lib/user_interaction.py:288 lib/user_interaction/general_conf.py:33 msgid "Desired hostname for the installation: " msgstr "Hostname desejado para a instalação: " -#: lib/user_interaction.py:290 lib/user_interaction.py:293 msgid "Username for required superuser with sudo privileges: " msgstr "Nome para o superusuário com permissões de sudo: " -#: lib/user_interaction.py:310 lib/user_interaction.py:313 lib/user_interaction/manage_users_conf.py:167 msgid "Any additional users to install (leave blank for no users): " -msgstr "" -"Quaisquer usuários adicionais a instalar (deixe em branco para nenhum): " +msgstr "Quaisquer usuários adicionais a instalar (deixe em branco para nenhum): " -#: lib/user_interaction.py:324 lib/user_interaction.py:327 msgid "Should this user be a superuser (sudoer)?" msgstr "Esse usuário deve ser um superusuário (sudoer)?" -#: lib/user_interaction.py:340 lib/user_interaction.py:343 lib/user_interaction.py:346 lib/user_interaction/general_conf.py:41 msgid "Select a timezone" msgstr "Selecione um fuso-horário" -#: lib/user_interaction.py:354 lib/user_interaction.py:357 lib/user_interaction.py:360 lib/user_interaction.py:359 lib/user_interaction/system_conf.py:115 msgid "Would you like to use GRUB as a bootloader instead of systemd-boot?" -msgstr "" -"Você gostaria de utilizar o GRUB como bootloader, ao invés do systemd-boot?" +msgstr "Você gostaria de utilizar o GRUB como bootloader, ao invés do systemd-boot?" -#: lib/user_interaction.py:364 lib/user_interaction.py:367 lib/user_interaction.py:370 lib/user_interaction.py:369 lib/user_interaction/system_conf.py:125 msgid "Choose a bootloader" msgstr "Escolha um bootloader" -#: lib/user_interaction.py:380 lib/user_interaction.py:383 lib/user_interaction.py:386 lib/user_interaction.py:385 lib/user_interaction/general_conf.py:53 msgid "Choose an audio server" msgstr "Escolha um servidor de áudio" -#: lib/user_interaction.py:391 lib/user_interaction.py:394 lib/user_interaction.py:397 lib/user_interaction.py:396 lib/user_interaction/general_conf.py:138 -msgid "" -"Only packages such as base, base-devel, linux, linux-firmware, efibootmgr and" -" optional profile packages are installed." -msgstr "" -"Apenas pacote como base, base-devel, linux, linux-firmware, efibootmgr, e" -" conjuntos de pacotes opcionais (perfis) são instalados." +msgid "Only packages such as base, base-devel, linux, linux-firmware, efibootmgr and optional profile packages are installed." +msgstr "Apenas pacote como base, base-devel, linux, linux-firmware, efibootmgr, e conjuntos de pacotes opcionais (perfis) são instalados." -#: lib/user_interaction.py:392 lib/user_interaction.py:395 lib/user_interaction.py:398 lib/user_interaction.py:397 lib/user_interaction/general_conf.py:139 -msgid "" -"If you desire a web browser, such as firefox or chromium, you may specify it" -" in the following prompt." -msgstr "" -"Se você deseja um navegador de internet, como Firefox ou Chromium, você pode" -" especificá-lo na seguinte configuração." +msgid "If you desire a web browser, such as firefox or chromium, you may specify it in the following prompt." +msgstr "Se você deseja um navegador de internet, como Firefox ou Chromium, você pode especificá-lo na seguinte configuração." -#: lib/user_interaction.py:396 lib/user_interaction.py:399 lib/user_interaction.py:402 lib/user_interaction.py:401 lib/user_interaction/general_conf.py:143 -msgid "" -"Write additional packages to install (space separated, leave blank to skip): " -msgstr "" -"Insira pacotes adicionais a instalar (separados por espaços, deixe em branco" -" para ignorar): " +msgid "Write additional packages to install (space separated, leave blank to skip): " +msgstr "Insira pacotes adicionais a instalar (separados por espaços, deixe em branco para ignorar): " -#: lib/user_interaction.py:419 lib/user_interaction.py:422 lib/user_interaction.py:425 lib/user_interaction.py:424 lib/user_interaction/network_conf.py:25 msgid "Copy ISO network configuration to installation" msgstr "Copie a configuração de rede atual para a instalação" -#: lib/user_interaction.py:420 lib/user_interaction.py:423 lib/user_interaction.py:426 lib/user_interaction.py:425 lib/user_interaction/network_conf.py:26 -msgid "" -"Use NetworkManager (necessary to configure internet graphically in GNOME and" -" KDE)" -msgstr "" -"Use NetworkManager (necessário para configurar a rede graficamente no GNOME" -" ou no KDE)" +msgid "Use NetworkManager (necessary to configure internet graphically in GNOME and KDE)" +msgstr "Use NetworkManager (necessário para configurar a rede graficamente no GNOME ou no KDE)" -#: lib/user_interaction.py:428 lib/user_interaction.py:431 lib/user_interaction.py:434 lib/user_interaction.py:433 lib/user_interaction/network_conf.py:43 msgid "Select one network interface to configure" msgstr "Selecione uma interface de rede para configurar" -#: lib/user_interaction.py:441 lib/user_interaction.py:444 lib/user_interaction.py:447 lib/user_interaction.py:446 lib/user_interaction/network_conf.py:70 -msgid "" -"Select which mode to configure for \"{}\" or skip to use default mode \"{}\"" -msgstr "" -"Selecione qual modo a configurar para \"{}\", ou pule para utilizar o modo" -" padrão \"{}\"" +msgid "Select which mode to configure for \"{}\" or skip to use default mode \"{}\"" +msgstr "Selecione qual modo a configurar para \"{}\", ou pule para utilizar o modo padrão \"{}\"" -#: lib/user_interaction.py:446 lib/user_interaction.py:449 lib/user_interaction.py:452 lib/user_interaction.py:451 lib/user_interaction/network_conf.py:75 msgid "Enter the IP and subnet for {} (example: 192.168.0.5/24): " msgstr "Insira o endereço IP e subrede para {} (exemplo: 192.168.0.5/24): " -#: lib/user_interaction.py:461 lib/user_interaction.py:464 lib/user_interaction.py:467 lib/user_interaction.py:466 lib/user_interaction/network_conf.py:86 msgid "Enter your gateway (router) IP address or leave blank for none: " -msgstr "" -"Entre o endereço IP do seu gateway (roteador), ou deixe em branco para" -" nenhum: " +msgstr "Entre o endereço IP do seu gateway (roteador), ou deixe em branco para nenhum: " -#: lib/user_interaction.py:476 lib/user_interaction.py:479 lib/user_interaction.py:482 lib/user_interaction.py:481 lib/user_interaction/network_conf.py:102 msgid "Enter your DNS servers (space separated, blank for none): " -msgstr "" -"Entre seus servidores DNS (separados por espaços, em branco para nenhum): " +msgstr "Entre seus servidores DNS (separados por espaços, em branco para nenhum): " -#: lib/user_interaction.py:510 lib/user_interaction.py:513 lib/user_interaction.py:516 lib/user_interaction.py:515 lib/user_interaction/disk_conf.py:23 msgid "Select which filesystem your main partition should use" -msgstr "" -"Selecione qual sistema de arquivos sua partição principal deve utilizar" +msgstr "Selecione qual sistema de arquivos sua partição principal deve utilizar" -#: lib/user_interaction.py:556 lib/user_interaction.py:559 lib/user_interaction.py:562 lib/user_interaction.py:561 lib/user_interaction/partitioning_conf.py:64 lib/user_interaction/partitioning_conf.py:63 msgid "Current partition layout" msgstr "Tabela de partições atual" -#: lib/user_interaction.py:607 lib/user_interaction.py:614 lib/user_interaction.py:617 lib/user_interaction.py:620 lib/user_interaction.py:619 lib/user_interaction/partitioning_conf.py:145 lib/user_interaction/partitioning_conf.py:146 msgid "" "Select what to do with\n" "{}" @@ -148,25 +94,18 @@ msgstr "" "Selecione o que fazer com\n" "{}" -#: lib/user_interaction.py:624 lib/user_interaction.py:709 lib/user_interaction.py:631 lib/user_interaction.py:716 lib/user_interaction.py:634 lib/user_interaction.py:719 lib/user_interaction.py:637 lib/user_interaction.py:722 lib/user_interaction.py:636 lib/user_interaction.py:721 lib/user_interaction/partitioning_conf.py:162 lib/user_interaction/partitioning_conf.py:255 lib/user_interaction/partitioning_conf.py:165 lib/user_interaction/partitioning_conf.py:260 msgid "Enter a desired filesystem type for the partition" msgstr "Insira o tipo de sistema de arquivos desejado para a partição" -#: lib/user_interaction.py:626 lib/user_interaction.py:633 lib/user_interaction.py:636 lib/user_interaction.py:639 lib/user_interaction.py:638 lib/user_interaction/partitioning_conf.py:164 lib/user_interaction/partitioning_conf.py:167 msgid "Enter the start sector (percentage or block number, default: {}): " msgstr "Insira o setor inicial (porcentagem ou número de bloco, padrão: {}): " -#: lib/user_interaction.py:635 lib/user_interaction.py:642 lib/user_interaction.py:645 lib/user_interaction.py:648 lib/user_interaction.py:647 lib/user_interaction/partitioning_conf.py:174 lib/user_interaction/partitioning_conf.py:177 -msgid "" -"Enter the end sector of the partition (percentage or block number, ex: {}): " -msgstr "" -"Insira o setor final da partição (porcentagem ou número de bloco, ex: {}): " +msgid "Enter the end sector of the partition (percentage or block number, ex: {}): " +msgstr "Insira o setor final da partição (porcentagem ou número de bloco, ex: {}): " -#: lib/user_interaction.py:661 lib/user_interaction.py:668 lib/user_interaction.py:671 lib/user_interaction.py:674 lib/user_interaction.py:673 lib/user_interaction/partitioning_conf.py:203 lib/user_interaction/partitioning_conf.py:208 msgid "{} contains queued partitions, this will remove those, are you sure?" msgstr "{} contém partições na fila, e isso irá removê-las, tem certeza?" -#: lib/user_interaction.py:674 lib/user_interaction.py:681 lib/user_interaction.py:684 lib/user_interaction.py:687 lib/user_interaction.py:686 lib/user_interaction/partitioning_conf.py:216 lib/user_interaction/partitioning_conf.py:221 msgid "" "{}\n" "\n" @@ -176,7 +115,6 @@ msgstr "" "\n" "Selecione por índice quais partições deletar" -#: lib/user_interaction.py:682 lib/user_interaction.py:689 lib/user_interaction.py:692 lib/user_interaction.py:695 lib/user_interaction.py:694 lib/user_interaction/partitioning_conf.py:226 lib/user_interaction/partitioning_conf.py:231 msgid "" "{}\n" "\n" @@ -186,21 +124,12 @@ msgstr "" "\n" "Selecione por índice qual partição montar, e onde" -#: lib/user_interaction.py:686 lib/user_interaction.py:693 lib/user_interaction.py:696 lib/user_interaction.py:699 lib/user_interaction.py:698 lib/user_interaction/partitioning_conf.py:231 lib/user_interaction/partitioning_conf.py:236 -msgid "" -" * Partition mount-points are relative to inside the installation, the boot" -" would be /boot as an example." -msgstr "" -" * Pontos de montagem de partição são relativos ao ponto de instalação. A" -" partição de boot ficaria em /boot, por exemplo." +msgid " * Partition mount-points are relative to inside the installation, the boot would be /boot as an example." +msgstr " * Pontos de montagem de partição são relativos ao ponto de instalação. A partição de boot ficaria em /boot, por exemplo." -#: lib/user_interaction.py:687 lib/user_interaction.py:694 lib/user_interaction.py:697 lib/user_interaction.py:700 lib/user_interaction.py:699 lib/user_interaction/partitioning_conf.py:233 lib/user_interaction/partitioning_conf.py:238 msgid "Select where to mount partition (leave blank to remove mountpoint): " -msgstr "" -"Selecione onde montar a partição (deixe em branco para remover o ponto de" -" montagem): " +msgstr "Selecione onde montar a partição (deixe em branco para remover o ponto de montagem): " -#: lib/user_interaction.py:698 lib/user_interaction.py:705 lib/user_interaction.py:708 lib/user_interaction.py:711 lib/user_interaction.py:710 lib/user_interaction/partitioning_conf.py:244 lib/user_interaction/partitioning_conf.py:249 msgid "" "{}\n" "\n" @@ -210,7 +139,6 @@ msgstr "" "\n" "Selecione qual partição a mascarar para formatação" -#: lib/user_interaction.py:717 lib/user_interaction.py:724 lib/user_interaction.py:727 lib/user_interaction.py:730 lib/user_interaction.py:729 lib/user_interaction/partitioning_conf.py:265 lib/user_interaction/partitioning_conf.py:270 msgid "" "{}\n" "\n" @@ -220,7 +148,6 @@ msgstr "" "\n" "Selecione qual partição marcar como encriptada" -#: lib/user_interaction.py:725 lib/user_interaction.py:732 lib/user_interaction.py:735 lib/user_interaction.py:738 lib/user_interaction.py:737 lib/user_interaction/partitioning_conf.py:274 lib/user_interaction/partitioning_conf.py:279 msgid "" "{}\n" "\n" @@ -230,7 +157,6 @@ msgstr "" "\n" "Selecione qual partição marcar como bootável" -#: lib/user_interaction.py:732 lib/user_interaction.py:739 lib/user_interaction.py:742 lib/user_interaction.py:745 lib/user_interaction.py:744 lib/user_interaction/partitioning_conf.py:282 lib/user_interaction/partitioning_conf.py:287 msgid "" "{}\n" "\n" @@ -240,74 +166,42 @@ msgstr "" "\n" "Selecione em qual partição configurar um sistema de arquivos" -#: lib/user_interaction.py:739 lib/user_interaction.py:746 lib/user_interaction.py:749 lib/user_interaction.py:752 lib/user_interaction.py:751 lib/user_interaction/partitioning_conf.py:289 lib/user_interaction/partitioning_conf.py:294 msgid "Enter a desired filesystem type for the partition: " msgstr "Entre um tipo desejado de sistema de arquivos para a partição: " -#: lib/user_interaction.py:760 lib/menu/selection_menu.py:141 lib/user_interaction.py:767 lib/menu/selection_menu.py:139 lib/menu/selection_menu.py:143 lib/user_interaction.py:770 lib/user_interaction.py:773 lib/user_interaction.py:772 lib/menu/selection_menu.py:407 lib/menu/selection_menu.py:415 lib/menu/selection_menu.py:17 lib/user_interaction/general_conf.py:105 lib/user_interaction/global_menu.py:43 lib/menu/selection_menu.py:53 lib/menu/selection_menu.py:463 lib/menu/global_menu.py:43 msgid "Select Archinstall language" msgstr "Selecione o idioma do Archinstall" -#: lib/user_interaction.py:765 lib/user_interaction.py:772 lib/user_interaction.py:775 lib/user_interaction.py:778 lib/user_interaction.py:777 lib/user_interaction/disk_conf.py:40 msgid "Wipe all selected drives and use a best-effort default partition layout" -msgstr "" -"Apagar todos os drives selecionados e calcular uma tabela de partições padrão" +msgstr "Apagar todos os drives selecionados e calcular uma tabela de partições padrão" -#: lib/user_interaction.py:766 lib/user_interaction.py:773 lib/user_interaction.py:776 lib/user_interaction.py:779 lib/user_interaction.py:778 lib/user_interaction/disk_conf.py:41 -msgid "" -"Select what to do with each individual drive (followed by partition usage)" -msgstr "" -"Selecione o que fazer com cada drive (selecionado por utilização de partições)" +msgid "Select what to do with each individual drive (followed by partition usage)" +msgstr "Selecione o que fazer com cada drive (selecionado por utilização de partições)" -#: lib/user_interaction.py:769 lib/user_interaction.py:770 lib/user_interaction.py:777 lib/user_interaction.py:780 lib/user_interaction.py:783 lib/user_interaction.py:782 lib/user_interaction/disk_conf.py:45 msgid "Select what you wish to do with the selected block devices" msgstr "Selecione o que deseja fazer com os dispositivos de bloco selecionados" -#: lib/user_interaction.py:822 lib/user_interaction.py:823 lib/user_interaction.py:830 lib/user_interaction.py:833 lib/user_interaction.py:836 lib/user_interaction.py:835 lib/user_interaction/general_conf.py:126 -msgid "" -"This is a list of pre-programmed profiles, they might make it easier to" -" install things like desktop environments" -msgstr "" -"Essa é uma lista dos perfis pré-programados; eles podem tornar mais fácil" -" instalar ambientes de desktop, por exemplo" +msgid "This is a list of pre-programmed profiles, they might make it easier to install things like desktop environments" +msgstr "Essa é uma lista dos perfis pré-programados; eles podem tornar mais fácil instalar ambientes de desktop, por exemplo" -#: lib/user_interaction.py:846 lib/user_interaction.py:847 lib/user_interaction.py:854 lib/user_interaction.py:857 lib/user_interaction.py:860 lib/user_interaction.py:859 lib/user_interaction/general_conf.py:71 msgid "Select Keyboard layout" msgstr "Selecione o layout de teclado" -#: lib/user_interaction.py:861 lib/user_interaction.py:862 lib/user_interaction.py:869 lib/user_interaction.py:872 lib/user_interaction.py:875 lib/user_interaction.py:874 lib/user_interaction/general_conf.py:92 msgid "Select one of the regions to download packages from" msgstr "Selecione uma das regiões de onde baixar pacotes" -#: lib/user_interaction.py:883 lib/user_interaction.py:884 lib/user_interaction.py:891 lib/user_interaction.py:894 lib/user_interaction.py:897 lib/user_interaction.py:896 lib/user_interaction/system_conf.py:52 msgid "Select one or more hard drives to use and configure" msgstr "Selecione um ou mais drives para utilizar e configurar" -#: lib/user_interaction.py:910 lib/user_interaction.py:911 lib/user_interaction.py:918 lib/user_interaction.py:921 lib/user_interaction.py:924 lib/user_interaction.py:923 lib/user_interaction/system_conf.py:80 -msgid "" -"For the best compatibility with your AMD hardware, you may want to use either" -" the all open-source or AMD / ATI options." -msgstr "" -"Para a melhor compatibilidade com seu hardware AMD, você pode querer utilizar" -" as opções completamente open-source, ou as da AMD / ATI." +msgid "For the best compatibility with your AMD hardware, you may want to use either the all open-source or AMD / ATI options." +msgstr "Para a melhor compatibilidade com seu hardware AMD, você pode querer utilizar as opções completamente open-source, ou as da AMD / ATI." -#: lib/user_interaction.py:912 lib/user_interaction.py:913 lib/user_interaction.py:920 lib/user_interaction.py:923 lib/user_interaction.py:926 lib/user_interaction.py:925 lib/user_interaction/system_conf.py:84 -msgid "" -"For the best compatibility with your Intel hardware, you may want to use" -" either the all open-source or Intel options.\n" -msgstr "" -"Para a melhor compatibilidade com seu hardware Intel, você pode querer" -" utilizar as opções completamente open-source, ou as da Intel.\n" +msgid "For the best compatibility with your Intel hardware, you may want to use either the all open-source or Intel options.\n" +msgstr "Para a melhor compatibilidade com seu hardware Intel, você pode querer utilizar as opções completamente open-source, ou as da Intel.\n" -#: lib/user_interaction.py:914 lib/user_interaction.py:915 lib/user_interaction.py:922 lib/user_interaction.py:925 lib/user_interaction.py:928 lib/user_interaction.py:927 lib/user_interaction/system_conf.py:88 -msgid "" -"For the best compatibility with your Nvidia hardware, you may want to use the" -" Nvidia proprietary driver.\n" -msgstr "" -"Para a melhor compatibilidade com seu hardware Nvidia, você pode querer" -" utilizar o driver proprietário da Nvidia.\n" +msgid "For the best compatibility with your Nvidia hardware, you may want to use the Nvidia proprietary driver.\n" +msgstr "Para a melhor compatibilidade com seu hardware Nvidia, você pode querer utilizar o driver proprietário da Nvidia.\n" -#: lib/user_interaction.py:917 lib/user_interaction.py:918 lib/user_interaction.py:925 lib/user_interaction.py:928 lib/user_interaction.py:931 lib/user_interaction.py:930 lib/user_interaction/system_conf.py:92 msgid "" "\n" "\n" @@ -315,131 +209,95 @@ msgid "" msgstr "" "\n" "\n" -"Selecione um driver de hardware gráfico, ou deixe em branco para instalar" -" drivers completamente open-source" +"Selecione um driver de hardware gráfico, ou deixe em branco para instalar drivers completamente open-source" -#: lib/user_interaction.py:921 lib/user_interaction.py:922 lib/user_interaction.py:929 lib/user_interaction.py:932 lib/user_interaction.py:935 lib/user_interaction.py:934 lib/user_interaction/system_conf.py:96 msgid "All open-source (default)" msgstr "Completamente open-source (padrão)" -#: lib/user_interaction.py:940 lib/user_interaction.py:941 lib/user_interaction.py:948 lib/user_interaction.py:951 lib/user_interaction.py:954 lib/user_interaction.py:953 lib/user_interaction/system_conf.py:28 msgid "Choose which kernels to use or leave blank for default \"{}\"" -msgstr "" -"Escolha quais kernels utilizar, ou deixe em branco para o padrão \"{}\"" +msgstr "Escolha quais kernels utilizar, ou deixe em branco para o padrão \"{}\"" -#: lib/user_interaction.py:954 lib/user_interaction.py:955 lib/user_interaction.py:962 lib/user_interaction.py:965 lib/user_interaction.py:968 lib/user_interaction.py:967 lib/user_interaction/locale_conf.py:16 msgid "Choose which locale language to use" msgstr "Escolha qual idioma utilizar" -#: lib/user_interaction.py:968 lib/user_interaction.py:969 lib/user_interaction.py:976 lib/user_interaction.py:979 lib/user_interaction.py:982 lib/user_interaction.py:981 lib/user_interaction/locale_conf.py:29 msgid "Choose which locale encoding to use" msgstr "Escolha qual codificação utilizar" -#: lib/user_interaction.py:1009 lib/user_interaction.py:1010 lib/user_interaction.py:1017 lib/user_interaction.py:1020 lib/user_interaction.py:1023 lib/user_interaction.py:1022 lib/user_interaction/backwards_compatible_conf.py:49 msgid "Select one of the values shown below: " msgstr "Selecione um dos valores abaixo: " -#: lib/user_interaction.py:1050 lib/user_interaction.py:1051 lib/user_interaction.py:1058 lib/user_interaction.py:1061 lib/user_interaction.py:1064 lib/user_interaction.py:1063 lib/user_interaction/backwards_compatible_conf.py:88 msgid "Select one or more of the options below: " msgstr "Selecione uma ou mais das opções abaixo: " -#: lib/disk/filesystem.py:86 lib/disk/filesystem.py:87 msgid "Adding partition...." msgstr "Adicionando partição..." -#: lib/disk/filesystem.py:139 lib/disk/filesystem.py:141 lib/disk/filesystem.py:142 -msgid "" -"You need to enter a valid fs-type in order to continue. See `man parted` for" -" valid fs-type's." -msgstr "" -"Você precisa inserir um tipo de sistema de arquivos válido para continuar." -" Veja `man parted` para tipos de sistema de arquivos válidos." +msgid "You need to enter a valid fs-type in order to continue. See `man parted` for valid fs-type's." +msgstr "Você precisa inserir um tipo de sistema de arquivos válido para continuar. Veja `man parted` para tipos de sistema de arquivos válidos." -#: lib/profiles.py:89 lib/profiles.py:90 msgid "Error: Listing profiles on URL \"{}\" resulted in:" msgstr "Erro: Listar perfis na URL \"{}\" resultou em:" -#: lib/profiles.py:92 lib/profiles.py:93 msgid "Error: Could not decode \"{}\" result as JSON:" msgstr "Erro: Não pude decodificar o resultado de \"{}\" como JSON:" -#: lib/menu/selection_menu.py:146 lib/menu/selection_menu.py:144 lib/menu/selection_menu.py:148 lib/menu/selection_menu.py:412 lib/menu/selection_menu.py:420 lib/user_interaction/global_menu.py:48 lib/menu/selection_menu.py:468 lib/menu/global_menu.py:48 msgid "Select keyboard layout" msgstr "Selecione um layout de teclado" -#: lib/menu/selection_menu.py:149 lib/menu/selection_menu.py:147 lib/menu/selection_menu.py:151 lib/menu/selection_menu.py:415 lib/menu/selection_menu.py:423 lib/user_interaction/global_menu.py:51 lib/menu/selection_menu.py:471 lib/menu/global_menu.py:51 msgid "Select mirror region" msgstr "Selecione uma região de mirror" -#: lib/menu/selection_menu.py:154 lib/menu/selection_menu.py:152 lib/menu/selection_menu.py:156 lib/menu/selection_menu.py:420 lib/menu/selection_menu.py:428 lib/user_interaction/global_menu.py:56 lib/menu/selection_menu.py:476 lib/menu/global_menu.py:56 msgid "Select locale language" msgstr "Selecione um idioma de localização" -#: lib/menu/selection_menu.py:156 lib/menu/selection_menu.py:154 lib/menu/selection_menu.py:158 lib/menu/selection_menu.py:422 lib/menu/selection_menu.py:430 lib/user_interaction/global_menu.py:58 lib/menu/selection_menu.py:478 lib/menu/global_menu.py:58 msgid "Select locale encoding" msgstr "Selecione uma codificação de localização" -#: lib/menu/selection_menu.py:159 lib/menu/selection_menu.py:157 lib/menu/selection_menu.py:161 lib/menu/selection_menu.py:425 lib/menu/selection_menu.py:433 lib/user_interaction/global_menu.py:61 lib/menu/selection_menu.py:481 lib/menu/global_menu.py:61 msgid "Select harddrives" msgstr "Selecione os drives" -#: lib/menu/selection_menu.py:163 lib/menu/selection_menu.py:161 lib/menu/selection_menu.py:165 lib/menu/selection_menu.py:429 lib/menu/selection_menu.py:437 lib/user_interaction/global_menu.py:65 lib/menu/selection_menu.py:485 lib/menu/global_menu.py:65 msgid "Select disk layout" msgstr "Selecione um layout de disco" -#: lib/menu/selection_menu.py:171 lib/menu/selection_menu.py:169 lib/menu/selection_menu.py:173 lib/menu/selection_menu.py:437 lib/menu/selection_menu.py:445 lib/user_interaction/global_menu.py:73 lib/menu/selection_menu.py:493 lib/menu/global_menu.py:73 msgid "Set encryption password" msgstr "Configurar senha de criptografia" -#: lib/menu/selection_menu.py:177 lib/menu/selection_menu.py:175 lib/menu/selection_menu.py:179 lib/menu/selection_menu.py:443 lib/menu/selection_menu.py:451 lib/user_interaction/global_menu.py:79 lib/menu/selection_menu.py:499 lib/menu/global_menu.py:79 msgid "Use swap" msgstr "Utilizar swap" -#: lib/menu/selection_menu.py:182 lib/menu/selection_menu.py:180 lib/menu/selection_menu.py:184 lib/menu/selection_menu.py:448 lib/menu/selection_menu.py:456 lib/user_interaction/global_menu.py:84 lib/menu/selection_menu.py:504 lib/menu/global_menu.py:84 msgid "Select bootloader" msgstr "Selecione bootloader" -#: lib/menu/selection_menu.py:188 lib/menu/selection_menu.py:186 lib/menu/selection_menu.py:190 lib/menu/selection_menu.py:454 lib/menu/selection_menu.py:462 lib/user_interaction/global_menu.py:95 lib/menu/selection_menu.py:515 lib/menu/global_menu.py:95 msgid "Set root password" msgstr "Configure a senha do root" -#: lib/menu/selection_menu.py:193 lib/menu/selection_menu.py:191 lib/menu/selection_menu.py:195 lib/menu/selection_menu.py:459 lib/menu/selection_menu.py:467 lib/user_interaction/global_menu.py:100 lib/menu/selection_menu.py:520 lib/menu/global_menu.py:100 msgid "Specify superuser account" msgstr "Especifique uma conta de superusuário" -#: lib/menu/selection_menu.py:199 lib/menu/selection_menu.py:197 lib/menu/selection_menu.py:201 lib/menu/selection_menu.py:465 lib/menu/selection_menu.py:473 lib/user_interaction/global_menu.py:107 lib/menu/selection_menu.py:528 lib/menu/global_menu.py:107 msgid "Specify user account" msgstr "Especifique a conta de usuário" -#: lib/menu/selection_menu.py:205 lib/menu/selection_menu.py:203 lib/menu/selection_menu.py:207 lib/menu/selection_menu.py:471 lib/menu/selection_menu.py:479 lib/user_interaction/global_menu.py:114 lib/menu/selection_menu.py:535 lib/menu/global_menu.py:114 msgid "Specify profile" msgstr "Especifique o perfil" -#: lib/menu/selection_menu.py:210 lib/menu/selection_menu.py:208 lib/menu/selection_menu.py:212 lib/menu/selection_menu.py:476 lib/menu/selection_menu.py:484 lib/user_interaction/global_menu.py:119 lib/menu/selection_menu.py:540 lib/menu/global_menu.py:119 msgid "Select audio" msgstr "Selecionar áudio" -#: lib/menu/selection_menu.py:214 lib/menu/selection_menu.py:212 lib/menu/selection_menu.py:216 lib/menu/selection_menu.py:480 lib/menu/selection_menu.py:488 lib/user_interaction/global_menu.py:123 lib/menu/selection_menu.py:544 lib/menu/global_menu.py:123 msgid "Select kernels" msgstr "Selecionar kernels" -#: lib/menu/selection_menu.py:219 lib/menu/selection_menu.py:217 lib/menu/selection_menu.py:221 lib/menu/selection_menu.py:485 lib/menu/selection_menu.py:493 lib/user_interaction/global_menu.py:128 lib/menu/selection_menu.py:549 lib/menu/global_menu.py:128 msgid "Additional packages to install" msgstr "Pacotes adicionais a instalar" -#: lib/menu/selection_menu.py:224 lib/menu/selection_menu.py:222 lib/menu/selection_menu.py:226 lib/menu/selection_menu.py:490 lib/menu/selection_menu.py:498 lib/user_interaction/global_menu.py:139 lib/menu/selection_menu.py:560 lib/menu/global_menu.py:139 msgid "Configure network" msgstr "Configurar rede" -#: lib/menu/selection_menu.py:232 lib/menu/selection_menu.py:230 lib/menu/selection_menu.py:234 lib/menu/selection_menu.py:498 lib/menu/selection_menu.py:506 lib/user_interaction/global_menu.py:150 lib/menu/selection_menu.py:571 lib/menu/global_menu.py:150 msgid "Set automatic time sync (NTP)" msgstr "Configurar sincronia automática de relógio (NTP)" -#: lib/menu/selection_menu.py:310 lib/menu/selection_menu.py:308 lib/menu/selection_menu.py:315 lib/menu/selection_menu.py:527 lib/menu/selection_menu.py:535 lib/user_interaction/global_menu.py:187 lib/menu/selection_menu.py:608 lib/menu/global_menu.py:187 msgid "Install ({} config(s) missing)" msgstr "Instalar ({} configurações faltantes)" -#: lib/menu/selection_menu.py:373 lib/menu/selection_menu.py:371 lib/menu/selection_menu.py:378 lib/menu/selection_menu.py:591 lib/menu/selection_menu.py:599 lib/user_interaction/global_menu.py:249 lib/menu/selection_menu.py:669 lib/menu/global_menu.py:249 msgid "" "You decided to skip harddrive selection\n" "and will use whatever drive-setup is mounted at {} (experimental)\n" @@ -447,72 +305,55 @@ msgid "" "Do you wish to continue?" msgstr "" "Você decidiu pular a seleção de drive de instalação,\n" -"e irá utilizar qualquer configuração de drive que estiver montada em {}" -" (experimental)\n" +"e irá utilizar qualquer configuração de drive que estiver montada em {} (experimental)\n" "AVISO: Archinstall não vai verificar se esse setup funciona.\n" "Você deseja continuar?" -#: lib/disk/filesystem.py:97 lib/disk/filesystem.py:98 msgid "Re-using partition instance: {}" msgstr "Reutilizando instância de partição: {}" -#: lib/user_interaction.py:590 lib/user_interaction.py:593 lib/user_interaction.py:596 lib/user_interaction.py:595 lib/user_interaction/partitioning_conf.py:119 lib/user_interaction/partitioning_conf.py:120 msgid "Create a new partition" msgstr "Criar uma nova partição" -#: lib/user_interaction.py:592 lib/user_interaction.py:595 lib/user_interaction.py:598 lib/user_interaction.py:597 lib/user_interaction/partitioning_conf.py:121 lib/user_interaction/partitioning_conf.py:122 msgid "Delete a partition" msgstr "Deletar uma partição" -#: lib/user_interaction.py:593 lib/user_interaction.py:596 lib/user_interaction.py:599 lib/user_interaction.py:598 lib/user_interaction/partitioning_conf.py:122 lib/user_interaction/partitioning_conf.py:123 msgid "Clear/Delete all partitions" msgstr "Limpar/Deletar todas as partições" -#: lib/user_interaction.py:594 lib/user_interaction.py:597 lib/user_interaction.py:600 lib/user_interaction.py:599 lib/user_interaction/partitioning_conf.py:123 lib/user_interaction/partitioning_conf.py:124 msgid "Assign mount-point for a partition" msgstr "Definir ponto de montagem para uma partição" -#: lib/user_interaction.py:595 lib/user_interaction.py:598 lib/user_interaction.py:601 lib/user_interaction.py:600 lib/user_interaction/partitioning_conf.py:124 lib/user_interaction/partitioning_conf.py:125 msgid "Mark/Unmark a partition to be formatted (wipes data)" msgstr "Marcar/Desmarcar uma partição para ser formatada (apaga dados)" -#: lib/user_interaction.py:596 lib/user_interaction.py:599 lib/user_interaction.py:602 lib/user_interaction.py:601 lib/user_interaction/partitioning_conf.py:125 lib/user_interaction/partitioning_conf.py:126 msgid "Mark/Unmark a partition as encrypted" msgstr "Marcar/Desmarcar uma partição como criptografada" -#: lib/user_interaction.py:597 lib/user_interaction.py:600 lib/user_interaction.py:603 lib/user_interaction.py:602 lib/user_interaction/partitioning_conf.py:126 lib/user_interaction/partitioning_conf.py:127 msgid "Mark/Unmark a partition as bootable (automatic for /boot)" msgstr "Marcar/Desmarcar uma partição como bootável (automático para /boot)" -#: lib/user_interaction.py:598 lib/user_interaction.py:601 lib/user_interaction.py:604 lib/user_interaction.py:603 lib/user_interaction/partitioning_conf.py:127 lib/user_interaction/partitioning_conf.py:128 msgid "Set desired filesystem for a partition" msgstr "Definir o sistema de arquivos desejado para a partição" -#: lib/menu/selection_menu.py:239 lib/menu/selection_menu.py:237 lib/menu/selection_menu.py:241 lib/menu/selection_menu.py:270 lib/menu/selection_menu.py:507 lib/menu/selection_menu.py:515 lib/user_interaction/global_menu.py:167 lib/menu/selection_menu.py:588 lib/menu/global_menu.py:167 msgid "Abort" msgstr "Abortar" -#: lib/menu/selection_menu.py:183 lib/menu/selection_menu.py:187 lib/menu/selection_menu.py:451 lib/menu/selection_menu.py:459 lib/user_interaction/global_menu.py:89 lib/menu/selection_menu.py:509 lib/menu/global_menu.py:89 msgid "Specify hostname" msgstr "Especifique o hostname" -#: lib/menu/selection_menu.py:228 lib/menu/selection_menu.py:492 lib/menu/selection_menu.py:500 lib/user_interaction/global_menu.py:141 lib/menu/selection_menu.py:562 lib/menu/global_menu.py:141 msgid "Not configured, unavailable unless setup manually" msgstr "Não configurado, indisponível a menos que configurado manualmente" -#: lib/menu/selection_menu.py:231 lib/menu/selection_menu.py:495 lib/menu/selection_menu.py:503 lib/user_interaction/global_menu.py:145 lib/menu/selection_menu.py:566 lib/menu/global_menu.py:145 msgid "Select timezone" msgstr "Selecione fuso-horário" -#: lib/menu/selection_menu.py:266 lib/menu/selection_menu.py:276 lib/menu/selection_menu.py:312 msgid "Set/Modify the below options" msgstr "Selecione/Modifique as opções abaixo" -#: lib/menu/selection_menu.py:272 msgid "Install" msgstr "Instalar" -#: lib/menu/menu.py:68 lib/menu/menu.py:75 lib/menu/menu.py:119 msgid "" "Use ESC to skip\n" "\n" @@ -520,142 +361,80 @@ msgstr "" "Use ESC para pular\n" "\n" -#: lib/user_interaction.py:591 lib/user_interaction.py:594 lib/user_interaction.py:597 lib/user_interaction.py:596 lib/user_interaction/partitioning_conf.py:120 lib/user_interaction/partitioning_conf.py:121 msgid "Suggest partition layout" msgstr "Sugerir layout de partição" -#: lib/user_interaction.py:101 lib/user_interaction/utils.py:43 msgid "Enter a password: " msgstr "Insira uma senha: " -#: lib/disk/filesystem.py:117 lib/disk/filesystem.py:118 msgid "Enter a encryption password for {}" msgstr "Insira uma senha de encriptação para {}" -#: lib/menu/selection_menu.py:174 lib/menu/selection_menu.py:567 lib/menu/selection_menu.py:575 lib/user_interaction/global_menu.py:225 lib/menu/selection_menu.py:646 lib/menu/global_menu.py:225 msgid "Enter disk encryption password (leave blank for no encryption): " -msgstr "" -"Insira a senha de criptografia de dados (deixe em branco para nenhuma" -" criptografia): " +msgstr "Insira a senha de criptografia de dados (deixe em branco para nenhuma criptografia): " -#: lib/menu/selection_menu.py:407 lib/menu/selection_menu.py:617 lib/menu/selection_menu.py:625 msgid "Create a required super-user with sudo privileges: " msgstr "Criar um superusuário obrigatório, com privilégios de sudo: " -#: lib/menu/selection_menu.py:347 lib/menu/selection_menu.py:554 lib/menu/selection_menu.py:562 lib/user_interaction/global_menu.py:220 lib/menu/selection_menu.py:641 lib/menu/global_menu.py:220 msgid "Enter root password (leave blank to disable root): " msgstr "Insira a senha de root (deixe em branco para desabilitar o root): " -#: lib/user_interaction.py:307 lib/user_interaction.py:324 lib/user_interaction/manage_users_conf.py:86 lib/user_interaction/manage_users_conf.py:121 msgid "Password for user \"{}\": " msgstr "Senha para o usuário \"{}\": " -#: lib/user_interaction.py:405 lib/user_interaction.py:408 lib/user_interaction.py:407 lib/user_interaction/general_conf.py:152 -msgid "" -"Verifying that additional packages exist (this might take a few seconds)" -msgstr "" -"Verificando que pacotes adicionais existem (isso pode levar alguns segundos)" +msgid "Verifying that additional packages exist (this might take a few seconds)" +msgstr "Verificando que pacotes adicionais existem (isso pode levar alguns segundos)" -#: lib/user_interaction.py:281 lib/user_interaction/general_conf.py:22 -msgid "" -"Would you like to use automatic time synchronization (NTP) with the default" -" time servers?\n" -msgstr "" -"Você gostaria de utilizar a sincronização automática do relógio (NTP) com os" -" servidores de tempo padrão?\n" +msgid "Would you like to use automatic time synchronization (NTP) with the default time servers?\n" +msgstr "Você gostaria de utilizar a sincronização automática do relógio (NTP) com os servidores de tempo padrão?\n" -#: lib/user_interaction.py:282 lib/user_interaction/general_conf.py:23 msgid "" -"Hardware time and other post-configuration steps might be required in order" -" for NTP to work.\n" +"Hardware time and other post-configuration steps might be required in order for NTP to work.\n" "For more information, please check the Arch wiki" msgstr "" -"Relógio do hardware, e demais configurações, podem ser necessárias para que o" -" NTP funcione.\n" +"Relógio do hardware, e demais configurações, podem ser necessárias para que o NTP funcione.\n" "Para mais informações, por favor verifique a wiki do Arch" -#: lib/menu/selection_menu.py:411 lib/menu/selection_menu.py:621 lib/menu/selection_menu.py:629 msgid "Enter a username to create an additional user (leave blank to skip): " -msgstr "" -"Insira um nome de usuário para criar um usuário adicional (deixe em branco" -" para pular): " +msgstr "Insira um nome de usuário para criar um usuário adicional (deixe em branco para pular): " -#: lib/menu/menu.py:116 msgid "Use ESC to skip\n" msgstr "Use ESC para pular\n" -#: lib/menu/list_manager.py:117 msgid "" "\n" -" Choose an object from the list, and select one of the available actions for" -" it to execute" +" Choose an object from the list, and select one of the available actions for it to execute" msgstr "" "\n" -"Escolha um objeto da lista, e selecione uma das ações disponíveis para" -" execução" +"Escolha um objeto da lista, e selecione uma das ações disponíveis para execução" -#: lib/menu/list_manager.py:130 lib/user_interaction/subvolume_config.py:90 msgid "Cancel" msgstr "Cancelar" -#: lib/menu/list_manager.py:131 msgid "Confirm and exit" msgstr "Confirmar e sair" -#: lib/menu/list_manager.py:135 lib/menu/list_manager.py:228 lib/menu/list_manager.py:251 lib/menu/list_manager.py:276 lib/user_interaction/subvolume_config.py:12 lib/user_interaction/subvolume_config.py:44 lib/user_interaction/subvolume_config.py:78 lib/user_interaction/subvolume_config.py:82 lib/user_interaction/subvolume_config.py:85 msgid "Add" msgstr "Adicionar" -#: lib/menu/list_manager.py:135 lib/menu/list_manager.py:231 lib/menu/list_manager.py:255 lib/user_interaction/subvolume_config.py:78 msgid "Copy" msgstr "Copiar" -#: lib/menu/list_manager.py:135 lib/menu/list_manager.py:237 lib/menu/list_manager.py:261 lib/user_interaction/subvolume_config.py:82 lib/user_interaction/subvolume_config.py:85 msgid "Edit" msgstr "Editar" -#: lib/menu/list_manager.py:135 lib/menu/list_manager.py:242 lib/menu/list_manager.py:264 lib/user_interaction/subvolume_config.py:40 msgid "Delete" msgstr "Deletar" -#: lib/menu/list_manager.py:185 msgid "Select an action for < {} >" msgstr "Selecione uma ação para < {} >" -#: lib/menu/list_manager.py:229 -msgid "Add :" -msgstr "Adicionar :" - -#: lib/menu/list_manager.py:233 -msgid "Copy to :" -msgstr "Copiar para :" - -#: lib/menu/list_manager.py:240 -msgid "Edite :" -msgstr "Editar :" - -#: lib/menu/list_manager.py:252 -msgid "Key :" -msgstr "Chave :" - -#: lib/menu/list_manager.py:253 -msgid "Value :" -msgstr "Valor :" - -#: lib/menu/list_manager.py:257 msgid "Copy to new key:" msgstr "Copiar para nova chave:" -#: lib/menu/list_manager.py:262 -#, python-brace-format -msgid "Edit {origkey} :" -msgstr "Editar {origkey} :" - -#: lib/models/network_configuration.py:53 lib/models/network_configuration.py:74 msgid "Unknown nic type: {}. Possible values are {}" msgstr "Tipo de interface de rede desconhecido: {}. Valores possíveis são {}" -#: lib/configuration.py:75 msgid "" "\n" "This is your chosen configuration:" @@ -663,41 +442,28 @@ msgstr "" "\n" "Essa é sua configuração escolhida:" -#: lib/pacman.py:18 -msgid "" -"Pacman is already running, waiting maximum 10 minutes for it to terminate." -msgstr "" -"Pacman já está em execução, aguardando no máximo 10 minutos para que finalize." +msgid "Pacman is already running, waiting maximum 10 minutes for it to terminate." +msgstr "Pacman já está em execução, aguardando no máximo 10 minutos para que finalize." -#: lib/pacman.py:25 -msgid "" -"Pre-existing pacman lock never exited. Please clean up any existing pacman" -" sessions before using archinstall." -msgstr "" -"Trava anterior do Pacman nunca foi terminada. Por favor, limpe quaisquer" -" sessões existentes do Pacman antes de utilizar o Archinstall." +msgid "Pre-existing pacman lock never exited. Please clean up any existing pacman sessions before using archinstall." +msgstr "Trava anterior do Pacman nunca foi terminada. Por favor, limpe quaisquer sessões existentes do Pacman antes de utilizar o Archinstall." -#: lib/user_interaction/general_conf.py:174 msgid "Choose which optional additional repositories to enable" msgstr "Escolha quais repositórios adicionais ativar" -#: lib/user_interaction/manage_users_conf.py:32 -msgid "Add an user" +#, fuzzy +msgid "Add a user" msgstr "Adicionar um usuário" -#: lib/user_interaction/manage_users_conf.py:33 msgid "Change password" msgstr "Mudar senha" -#: lib/user_interaction/manage_users_conf.py:34 msgid "Promote/Demote user" msgstr "Promover/Rebaixar usuário" -#: lib/user_interaction/manage_users_conf.py:35 msgid "Delete User" msgstr "Deletar Usuário" -#: lib/user_interaction/manage_users_conf.py:99 msgid "" "\n" "Define a new user\n" @@ -705,27 +471,21 @@ msgstr "" "\n" "Definir um novo usuário\n" -#: lib/user_interaction/manage_users_conf.py:100 msgid "User Name : " msgstr "Nome de Usuário :" -#: lib/user_interaction/manage_users_conf.py:115 msgid "Should {} be a superuser (sudoer)?" msgstr "Deve {} ser um superusuário (sudoer)?" -#: lib/user_interaction/manage_users_conf.py:161 msgid "Define users with sudo privilege: " msgstr "Defina os usuários com privilégios de sudo: " -#: lib/user_interaction/network_conf.py:24 msgid "No network configuration" msgstr "Nenhuma configuração de rede" -#: lib/user_interaction/partitioning_conf.py:128 lib/user_interaction/partitioning_conf.py:129 msgid "Set desired subvolumes on a btrfs partition" msgstr "Selecione os subvolumes desejados em uma partição btrfs" -#: lib/user_interaction/partitioning_conf.py:296 lib/user_interaction/partitioning_conf.py:303 msgid "" "{}\n" "\n" @@ -735,88 +495,66 @@ msgstr "" "\n" "Selecione em qual partição configurar subvolumes" -#: lib/user_interaction/partitioning_conf.py:305 lib/user_interaction/partitioning_conf.py:312 msgid "Manage btrfs subvolumes for current partition" msgstr "Gerenciar subvolumes btrfs para a partição atual" -#: lib/user_interaction/save_conf.py:24 lib/user_interaction/save_conf.py:29 msgid "No configuration" msgstr "Sem configuração" -#: lib/user_interaction/save_conf.py:42 msgid "Save user configuration" msgstr "Salvar configuração de usuário" -#: lib/user_interaction/save_conf.py:43 msgid "Save user credentials" msgstr "Salvar credenciais de usuário" -#: lib/user_interaction/save_conf.py:44 msgid "Save disk layout" msgstr "Salvar layout de disco" -#: lib/user_interaction/save_conf.py:45 msgid "Save all" msgstr "Salvar tudo" -#: lib/user_interaction/save_conf.py:48 msgid "Choose which configuration to save" msgstr "Escolha qual configuração salvar" -#: lib/user_interaction/save_conf.py:59 msgid "Enter a directory for the configuration(s) to be saved: " msgstr "Insira um diretório para as configurações a salvar: " -#: lib/user_interaction/save_conf.py:63 msgid "Not a valid directory: {}" msgstr "Não é um diretório válido: {}" -#: lib/user_interaction/utils.py:32 msgid "The password you are using seems to be weak," msgstr "A senha que você escolheu parece ser fraca," -#: lib/user_interaction/utils.py:33 msgid "are you sure you want to use it?" msgstr "deseja continuar assim mesmo?" -#: lib/user_interaction/global_menu.py:134 lib/menu/selection_menu.py:555 lib/menu/global_menu.py:134 msgid "Additional repositories to enable" msgstr "Repositórios adicionais a ativar" -#: lib/user_interaction/global_menu.py:155 lib/menu/selection_menu.py:576 lib/menu/global_menu.py:155 msgid "Save configuration" msgstr "Salvar configuração" -#: lib/user_interaction/global_menu.py:192 lib/menu/selection_menu.py:613 lib/menu/global_menu.py:192 msgid "Missing configurations:\n" msgstr "Configurações faltantes:\n" -#: lib/user_interaction/global_menu.py:210 lib/menu/selection_menu.py:631 lib/menu/global_menu.py:210 msgid "Either root-password or at least 1 superuser must be specified" -msgstr "" -"Uma senha de root, ou pelo menos um superusuário, devem ser especificados" +msgstr "Uma senha de root, ou pelo menos um superusuário, devem ser especificados" -#: lib/user_interaction/global_menu.py:275 lib/menu/selection_menu.py:695 lib/menu/global_menu.py:275 msgid "Manage superuser accounts: " msgstr "Gerenciar contas de superusuário: " -#: lib/user_interaction/global_menu.py:279 lib/menu/selection_menu.py:699 lib/menu/global_menu.py:279 msgid "Manage ordinary user accounts: " msgstr "Gerenciar contas de usuário normais: " -#: lib/user_interaction/subvolume_config.py:17 msgid " Subvolume :{:16}" msgstr " Subvolume :{:16}" -#: lib/user_interaction/subvolume_config.py:19 lib/user_interaction/subvolume_config.py:22 msgid " mounted at {:16}" msgstr " montado em {:16}" -#: lib/user_interaction/subvolume_config.py:26 msgid " with option {}" msgstr " com opções {}" -#: lib/user_interaction/subvolume_config.py:46 msgid "" "\n" " Fill the desired values for a new subvolume \n" @@ -824,38 +562,196 @@ msgstr "" "\n" "Insira os valores desejados para um novo subvolume \n" -#: lib/user_interaction/subvolume_config.py:77 msgid "Subvolume name " msgstr "Nome do subvolume" -#: lib/user_interaction/subvolume_config.py:81 msgid "Subvolume mountpoint" msgstr "Ponto de montagem do subvolume" -#: lib/user_interaction/subvolume_config.py:84 msgid "Subvolume options" msgstr "Opções do subvolume" -#: lib/user_interaction/subvolume_config.py:87 msgid "Save" msgstr "Salvar" -#: lib/user_interaction/subvolume_config.py:121 msgid "Subvolume name :" msgstr "Nome do subvolume :" -#: lib/user_interaction/subvolume_config.py:124 msgid "Select a mount point :" msgstr "Selecione um ponto de montagem :" -#: lib/user_interaction/subvolume_config.py:128 msgid "Select the desired subvolume options " msgstr "Selecione as opções de montagem do subvolume desejadas " -#: lib/user_interaction/manage_users_conf.py:161 msgid "Define users with sudo privilege, by username: " msgstr "Definir usuários com privilégios de sudo, por nome de usuário: " -#: lib/installer.py:152 msgid "[!] A log file has been created here: {}" msgstr "[!] Um arquivo de log foi criado aqui: {}" + +#, fuzzy +msgid "Would you like to use BTRFS subvolumes with a default structure?" +msgstr "Você gostaria de utilizar o GRUB como bootloader, ao invés do systemd-boot?" + +#, fuzzy +msgid "Would you like to use BTRFS compression?" +msgstr "Você gostaria de usar swap ou zram?" + +#, fuzzy +msgid "Would you like to create a separate partition for /home?" +msgstr "Você gostaria de usar swap ou zram?" + +msgid "The selected drives do not have the minimum capacity required for an automatic suggestion\n" +msgstr "" + +msgid "Minimum capacity for /home partition: {}GB\n" +msgstr "" + +msgid "Minimum capacity for Arch Linux partition: {}GB" +msgstr "" + +msgid "Continue" +msgstr "" + +msgid "yes" +msgstr "" + +msgid "no" +msgstr "" + +msgid "set: {}" +msgstr "" + +msgid "Manual configuration setting must be a list" +msgstr "" + +#, fuzzy +msgid "No iface specified for manual configuration" +msgstr "Salvar configuração de usuário" + +msgid "Manual nic configuration with no auto DHCP requires an IP address" +msgstr "" + +msgid "Add interface" +msgstr "" + +msgid "Edit interface" +msgstr "" + +#, fuzzy +msgid "Delete interface" +msgstr "Deletar Usuário" + +#, fuzzy +msgid "Select interface to add" +msgstr "Selecione uma interface de rede para configurar" + +#, fuzzy +msgid "Manual configuration" +msgstr "Salvar configuração" + +#, fuzzy +msgid "Mark/Unmark a partition as compressed (btrfs only)" +msgstr "Marcar/Desmarcar uma partição como criptografada" + +#, fuzzy +msgid "The password you are using seems to be weak, are you sure you want to use it?" +msgstr "A senha que você escolheu parece ser fraca," + +msgid "Provides a selection of desktop environments and tiling window managers, e.g. gnome, kde, sway" +msgstr "" + +msgid "Select your desired desktop environment" +msgstr "" + +msgid "A very basic installation that allows you to customize Arch Linux as you see fit." +msgstr "" + +msgid "Provides a selection of various server packages to install and enable, e.g. httpd, nginx, mariadb" +msgstr "" + +msgid "Choose which servers to install, if none then a minimal installation wil be done" +msgstr "" + +msgid "Installs a minimal system as well as xorg and graphics drivers." +msgstr "" + +msgid "Press Enter to continue." +msgstr "" + +msgid "Would you like to chroot into the newly created installation and perform post-installation configuration?" +msgstr "" + +#, fuzzy +msgid "Are you sure you want to reset this setting?" +msgstr "deseja continuar assim mesmo?" + +#, fuzzy +msgid "Select one or more hard drives to use and configure\n" +msgstr "Selecione um ou mais drives para utilizar e configurar" + +msgid "Any modifications to the existing setting will reset the disk layout!" +msgstr "" + +msgid "If you reset the harddrive selection this will also reset the current disk layout. Are you sure?" +msgstr "" + +#, fuzzy +msgid "Save and exit" +msgstr "Confirmar e sair" + +#, fuzzy +msgid "" +"{}\n" +"contains queued partitions, this will remove those, are you sure?" +msgstr "{} contém partições na fila, e isso irá removê-las, tem certeza?" + +#, fuzzy +msgid "No audio server" +msgstr "Escolha um servidor de áudio" + +msgid "(default)" +msgstr "" + +#, fuzzy +msgid "Use ESC to skip" +msgstr "Use ESC para pular\n" + +msgid "" +"Use CTRL+C to reset current selection\n" +"\n" +msgstr "" + +#, fuzzy +msgid "Copy to: " +msgstr "Copiar para :" + +#, fuzzy +msgid "Edit: " +msgstr "Editar" + +msgid "Key: " +msgstr "" + +#, fuzzy +msgid "Edit {}: " +msgstr "Editar :" + +msgid "Add :" +msgstr "Adicionar :" + +msgid "Value :" +msgstr "Valor :" + +#, python-brace-format +#~ msgid "Edit {origkey} :" +#~ msgstr "Editar {origkey} :" + +#~ msgid "Copy to :" +#~ msgstr "Copiar para :" + +#~ msgid "Edite :" +#~ msgstr "Editar :" + +#~ msgid "Key :" +#~ msgstr "Chave :" diff --git a/archinstall/locales/ru/LC_MESSAGES/base.mo b/archinstall/locales/ru/LC_MESSAGES/base.mo index 53dcba03..912bf476 100644 Binary files a/archinstall/locales/ru/LC_MESSAGES/base.mo and b/archinstall/locales/ru/LC_MESSAGES/base.mo differ diff --git a/archinstall/locales/ru/LC_MESSAGES/base.po b/archinstall/locales/ru/LC_MESSAGES/base.po index e76f2b31..9f06d1b8 100644 --- a/archinstall/locales/ru/LC_MESSAGES/base.po +++ b/archinstall/locales/ru/LC_MESSAGES/base.po @@ -9,191 +9,84 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" -"%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" "X-Generator: Poedit 3.0.1\n" -#: lib/installer.py:144 lib/installer.py:152 msgid "[!] A log file has been created here: {} {}" msgstr "[!] Здесь был создан файл журнала: {} {}" -#: lib/installer.py:145 lib/installer.py:153 lib/installer.py:155 -msgid "" -" Please submit this issue (and file) to https://github.com/archlinux/" -"archinstall/issues" -msgstr "" -" Пожалуйста, отправьте эту проблему (и файл) по адресу https://github.com/" -"archlinux/archinstall/issues" +msgid " Please submit this issue (and file) to https://github.com/archlinux/archinstall/issues" +msgstr " Пожалуйста, отправьте эту проблему (и файл) по адресу https://github.com/archlinux/archinstall/issues" -#: lib/user_interaction.py:83 lib/user_interaction/utils.py:86 -#: lib/user_interaction/utils.py:83 msgid "Do you really want to abort?" msgstr "Вы действительно хотите прекратить?" -#: lib/user_interaction.py:101 lib/user_interaction.py:104 -#: lib/user_interaction/utils.py:53 lib/user_interaction/utils.py:50 msgid "And one more time for verification: " msgstr "И еще раз для проверки: " -#: lib/user_interaction.py:272 lib/user_interaction.py:275 -#: lib/user_interaction/system_conf.py:142 -#: lib/user_interaction/system_conf.py:141 msgid "Would you like to use swap on zram?" msgstr "Вы хотите использовать подкачку на zram?" -#: lib/user_interaction.py:285 lib/user_interaction.py:288 -#: lib/user_interaction/general_conf.py:33 msgid "Desired hostname for the installation: " msgstr "Желаемое имя хоста для установки: " -#: lib/user_interaction.py:290 lib/user_interaction.py:293 msgid "Username for required superuser with sudo privileges: " -msgstr "" -"Имя пользователя для требуемого суперпользователя с привилегиями sudo: " +msgstr "Имя пользователя для требуемого суперпользователя с привилегиями sudo: " -#: lib/user_interaction.py:310 lib/user_interaction.py:313 -#: lib/user_interaction/manage_users_conf.py:167 -#: lib/user_interaction/manage_users_conf.py:164 msgid "Any additional users to install (leave blank for no users): " -msgstr "" -"Любые дополнительные пользователи для установки (оставьте пустым, если " -"пользователей нет): " +msgstr "Любые дополнительные пользователи для установки (оставьте пустым, если пользователей нет): " -#: lib/user_interaction.py:324 lib/user_interaction.py:327 msgid "Should this user be a superuser (sudoer)?" msgstr "Должен ли этот пользователь быть суперпользователем (sudoer)?" -#: lib/user_interaction.py:340 lib/user_interaction.py:343 -#: lib/user_interaction.py:346 lib/user_interaction/general_conf.py:41 msgid "Select a timezone" msgstr "Выберите часовой пояс" -#: lib/user_interaction.py:354 lib/user_interaction.py:357 -#: lib/user_interaction.py:360 lib/user_interaction.py:359 -#: lib/user_interaction/system_conf.py:115 -#: lib/user_interaction/system_conf.py:114 msgid "Would you like to use GRUB as a bootloader instead of systemd-boot?" msgstr "Вы хотите использовать GRUB в качестве загрузчика вместо systemd-boot?" -#: lib/user_interaction.py:364 lib/user_interaction.py:367 -#: lib/user_interaction.py:370 lib/user_interaction.py:369 -#: lib/user_interaction/system_conf.py:125 -#: lib/user_interaction/system_conf.py:124 msgid "Choose a bootloader" msgstr "Выберите загрузчик" -#: lib/user_interaction.py:380 lib/user_interaction.py:383 -#: lib/user_interaction.py:386 lib/user_interaction.py:385 -#: lib/user_interaction/general_conf.py:53 msgid "Choose an audio server" msgstr "Выберите звуковой сервер" -#: lib/user_interaction.py:391 lib/user_interaction.py:394 -#: lib/user_interaction.py:397 lib/user_interaction.py:396 -#: lib/user_interaction/general_conf.py:138 -msgid "" -"Only packages such as base, base-devel, linux, linux-firmware, efibootmgr " -"and optional profile packages are installed." -msgstr "" -"Устанавливаются только такие пакеты, как base, base-devel, linux, linux-" -"firmware, efibootmgr и дополнительные пакеты профиля." +msgid "Only packages such as base, base-devel, linux, linux-firmware, efibootmgr and optional profile packages are installed." +msgstr "Устанавливаются только такие пакеты, как base, base-devel, linux, linux-firmware, efibootmgr и дополнительные пакеты профиля." -#: lib/user_interaction.py:392 lib/user_interaction.py:395 -#: lib/user_interaction.py:398 lib/user_interaction.py:397 -#: lib/user_interaction/general_conf.py:139 -msgid "" -"If you desire a web browser, such as firefox or chromium, you may specify it " -"in the following prompt." -msgstr "" -"Если вы хотите использовать веб-браузер, например, firefox или chromium, вы " -"можете указать его в следующем запросе." +msgid "If you desire a web browser, such as firefox or chromium, you may specify it in the following prompt." +msgstr "Если вы хотите использовать веб-браузер, например, firefox или chromium, вы можете указать его в следующем запросе." -#: lib/user_interaction.py:396 lib/user_interaction.py:399 -#: lib/user_interaction.py:402 lib/user_interaction.py:401 -#: lib/user_interaction/general_conf.py:143 -msgid "" -"Write additional packages to install (space separated, leave blank to skip): " -msgstr "" -"Напишите дополнительные пакеты для установки (разделите пробелами, оставьте " -"пустым, чтобы пропустить): " +msgid "Write additional packages to install (space separated, leave blank to skip): " +msgstr "Напишите дополнительные пакеты для установки (разделите пробелами, оставьте пустым, чтобы пропустить): " -#: lib/user_interaction.py:419 lib/user_interaction.py:422 -#: lib/user_interaction.py:425 lib/user_interaction.py:424 -#: lib/user_interaction/network_conf.py:25 -#: lib/user_interaction/network_conf.py:125 msgid "Copy ISO network configuration to installation" msgstr "Копировать сетевую конфигурацию ISO в установку" -#: lib/user_interaction.py:420 lib/user_interaction.py:423 -#: lib/user_interaction.py:426 lib/user_interaction.py:425 -#: lib/user_interaction/network_conf.py:26 -#: lib/user_interaction/network_conf.py:126 -msgid "" -"Use NetworkManager (necessary to configure internet graphically in GNOME and " -"KDE)" -msgstr "" -"Использовать NetworkManager (необходим для графической настройки интернета в " -"GNOME и KDE)" +msgid "Use NetworkManager (necessary to configure internet graphically in GNOME and KDE)" +msgstr "Использовать NetworkManager (необходим для графической настройки интернета в GNOME и KDE)" -#: lib/user_interaction.py:428 lib/user_interaction.py:431 -#: lib/user_interaction.py:434 lib/user_interaction.py:433 -#: lib/user_interaction/network_conf.py:43 -#: lib/user_interaction/network_conf.py:139 msgid "Select one network interface to configure" msgstr "Выберите один сетевой интерфейс для настройки" -#: lib/user_interaction.py:441 lib/user_interaction.py:444 -#: lib/user_interaction.py:447 lib/user_interaction.py:446 -#: lib/user_interaction/network_conf.py:70 -#: lib/user_interaction/network_conf.py:77 -msgid "" -"Select which mode to configure for \"{}\" or skip to use default mode \"{}\"" -msgstr "" -"Выберите режим для конфигурации \"{}\" или пропустите, чтобы использовать " -"режим по умолчанию \"{}\"." +msgid "Select which mode to configure for \"{}\" or skip to use default mode \"{}\"" +msgstr "Выберите режим для конфигурации \"{}\" или пропустите, чтобы использовать режим по умолчанию \"{}\"." -#: lib/user_interaction.py:446 lib/user_interaction.py:449 -#: lib/user_interaction.py:452 lib/user_interaction.py:451 -#: lib/user_interaction/network_conf.py:75 -#: lib/user_interaction/network_conf.py:82 msgid "Enter the IP and subnet for {} (example: 192.168.0.5/24): " msgstr "Введите IP-адрес и подсеть для {} (пример: 192.168.0.5/24): " -#: lib/user_interaction.py:461 lib/user_interaction.py:464 -#: lib/user_interaction.py:467 lib/user_interaction.py:466 -#: lib/user_interaction/network_conf.py:86 -#: lib/user_interaction/network_conf.py:93 msgid "Enter your gateway (router) IP address or leave blank for none: " -msgstr "" -"Введите IP-адрес вашего шлюза (маршрутизатора) или оставьте пустым, если его " -"нет: " +msgstr "Введите IP-адрес вашего шлюза (маршрутизатора) или оставьте пустым, если его нет: " -#: lib/user_interaction.py:476 lib/user_interaction.py:479 -#: lib/user_interaction.py:482 lib/user_interaction.py:481 -#: lib/user_interaction/network_conf.py:102 -#: lib/user_interaction/network_conf.py:108 msgid "Enter your DNS servers (space separated, blank for none): " msgstr "Введите ваши DNS-серверы (через пробел, пустой - нет): " -#: lib/user_interaction.py:510 lib/user_interaction.py:513 -#: lib/user_interaction.py:516 lib/user_interaction.py:515 -#: lib/user_interaction/disk_conf.py:23 msgid "Select which filesystem your main partition should use" -msgstr "" -"Выберите, какую файловую систему должен использовать ваш основной раздел" +msgstr "Выберите, какую файловую систему должен использовать ваш основной раздел" -#: lib/user_interaction.py:556 lib/user_interaction.py:559 -#: lib/user_interaction.py:562 lib/user_interaction.py:561 -#: lib/user_interaction/partitioning_conf.py:63 -#: lib/user_interaction/partitioning_conf.py:64 msgid "Current partition layout" msgstr "Текущая разметка разделов" -#: lib/user_interaction.py:607 lib/user_interaction.py:614 -#: lib/user_interaction.py:617 lib/user_interaction.py:620 -#: lib/user_interaction.py:619 lib/user_interaction/partitioning_conf.py:145 -#: lib/user_interaction/partitioning_conf.py:146 -#: lib/user_interaction/partitioning_conf.py:163 msgid "" "Select what to do with\n" "{}" @@ -201,51 +94,18 @@ msgstr "" "Выберите, что делать с\n" "{}" -#: lib/user_interaction.py:624 lib/user_interaction.py:709 -#: lib/user_interaction.py:631 lib/user_interaction.py:716 -#: lib/user_interaction.py:634 lib/user_interaction.py:719 -#: lib/user_interaction.py:637 lib/user_interaction.py:722 -#: lib/user_interaction.py:636 lib/user_interaction.py:721 -#: lib/user_interaction/partitioning_conf.py:162 -#: lib/user_interaction/partitioning_conf.py:255 -#: lib/user_interaction/partitioning_conf.py:165 -#: lib/user_interaction/partitioning_conf.py:260 -#: lib/user_interaction/partitioning_conf.py:182 -#: lib/user_interaction/partitioning_conf.py:293 msgid "Enter a desired filesystem type for the partition" msgstr "Введите желаемый тип файловой системы для раздела" -#: lib/user_interaction.py:626 lib/user_interaction.py:633 -#: lib/user_interaction.py:636 lib/user_interaction.py:639 -#: lib/user_interaction.py:638 lib/user_interaction/partitioning_conf.py:164 -#: lib/user_interaction/partitioning_conf.py:167 -#: lib/user_interaction/partitioning_conf.py:187 msgid "Enter the start sector (percentage or block number, default: {}): " msgstr "Введите начальный сектор (процент или номер блока, по умолчанию: {}): " -#: lib/user_interaction.py:635 lib/user_interaction.py:642 -#: lib/user_interaction.py:645 lib/user_interaction.py:648 -#: lib/user_interaction.py:647 lib/user_interaction/partitioning_conf.py:174 -#: lib/user_interaction/partitioning_conf.py:177 -#: lib/user_interaction/partitioning_conf.py:197 -msgid "" -"Enter the end sector of the partition (percentage or block number, ex: {}): " -msgstr "" -"Введите конечный сектор раздела (процент или номер блока, например: {}): " +msgid "Enter the end sector of the partition (percentage or block number, ex: {}): " +msgstr "Введите конечный сектор раздела (процент или номер блока, например: {}): " -#: lib/user_interaction.py:661 lib/user_interaction.py:668 -#: lib/user_interaction.py:671 lib/user_interaction.py:674 -#: lib/user_interaction.py:673 lib/user_interaction/partitioning_conf.py:203 -#: lib/user_interaction/partitioning_conf.py:208 -#: lib/user_interaction/partitioning_conf.py:228 msgid "{} contains queued partitions, this will remove those, are you sure?" msgstr "{} содержит разделы в очереди, это удалит их, вы уверены?" -#: lib/user_interaction.py:674 lib/user_interaction.py:681 -#: lib/user_interaction.py:684 lib/user_interaction.py:687 -#: lib/user_interaction.py:686 lib/user_interaction/partitioning_conf.py:216 -#: lib/user_interaction/partitioning_conf.py:221 -#: lib/user_interaction/partitioning_conf.py:242 msgid "" "{}\n" "\n" @@ -255,11 +115,6 @@ msgstr "" "\n" "Выберите по индексу, какие разделы следует удалить" -#: lib/user_interaction.py:682 lib/user_interaction.py:689 -#: lib/user_interaction.py:692 lib/user_interaction.py:695 -#: lib/user_interaction.py:694 lib/user_interaction/partitioning_conf.py:226 -#: lib/user_interaction/partitioning_conf.py:231 -#: lib/user_interaction/partitioning_conf.py:264 msgid "" "{}\n" "\n" @@ -269,33 +124,12 @@ msgstr "" "\n" "Выберите по индексу, какой раздел куда монтировать" -#: lib/user_interaction.py:686 lib/user_interaction.py:693 -#: lib/user_interaction.py:696 lib/user_interaction.py:699 -#: lib/user_interaction.py:698 lib/user_interaction/partitioning_conf.py:231 -#: lib/user_interaction/partitioning_conf.py:236 -#: lib/user_interaction/partitioning_conf.py:269 -msgid "" -" * Partition mount-points are relative to inside the installation, the boot " -"would be /boot as an example." -msgstr "" -" * Точки монтирования разделов являются относительными внутри установки, " -"например, загрузочный будет /boot." - -#: lib/user_interaction.py:687 lib/user_interaction.py:694 -#: lib/user_interaction.py:697 lib/user_interaction.py:700 -#: lib/user_interaction.py:699 lib/user_interaction/partitioning_conf.py:233 -#: lib/user_interaction/partitioning_conf.py:238 -#: lib/user_interaction/partitioning_conf.py:271 +msgid " * Partition mount-points are relative to inside the installation, the boot would be /boot as an example." +msgstr " * Точки монтирования разделов являются относительными внутри установки, например, загрузочный будет /boot." + msgid "Select where to mount partition (leave blank to remove mountpoint): " -msgstr "" -"Выберите куда монтировать раздел (оставьте пустым, чтобы удалить точку " -"монтирования): " - -#: lib/user_interaction.py:698 lib/user_interaction.py:705 -#: lib/user_interaction.py:708 lib/user_interaction.py:711 -#: lib/user_interaction.py:710 lib/user_interaction/partitioning_conf.py:244 -#: lib/user_interaction/partitioning_conf.py:249 -#: lib/user_interaction/partitioning_conf.py:282 +msgstr "Выберите куда монтировать раздел (оставьте пустым, чтобы удалить точку монтирования): " + msgid "" "{}\n" "\n" @@ -305,11 +139,6 @@ msgstr "" "\n" "Выберите, какой раздел следует отметить для форматирования" -#: lib/user_interaction.py:717 lib/user_interaction.py:724 -#: lib/user_interaction.py:727 lib/user_interaction.py:730 -#: lib/user_interaction.py:729 lib/user_interaction/partitioning_conf.py:265 -#: lib/user_interaction/partitioning_conf.py:270 -#: lib/user_interaction/partitioning_conf.py:302 msgid "" "{}\n" "\n" @@ -319,12 +148,6 @@ msgstr "" "\n" "Выберите раздел, который следует пометить как зашифрованный" -#: lib/user_interaction.py:725 lib/user_interaction.py:732 -#: lib/user_interaction.py:735 lib/user_interaction.py:738 -#: lib/user_interaction.py:737 lib/user_interaction/partitioning_conf.py:274 -#: lib/user_interaction/partitioning_conf.py:279 -#: lib/user_interaction/partitioning_conf.py:250 -#: lib/user_interaction/partitioning_conf.py:311 msgid "" "{}\n" "\n" @@ -334,11 +157,6 @@ msgstr "" "\n" "Выберите раздел, который следует отметить как загрузочный" -#: lib/user_interaction.py:732 lib/user_interaction.py:739 -#: lib/user_interaction.py:742 lib/user_interaction.py:745 -#: lib/user_interaction.py:744 lib/user_interaction/partitioning_conf.py:282 -#: lib/user_interaction/partitioning_conf.py:287 -#: lib/user_interaction/partitioning_conf.py:319 msgid "" "{}\n" "\n" @@ -348,121 +166,42 @@ msgstr "" "\n" "Выберите раздел, на котором будет установлена файловая система" -#: lib/user_interaction.py:739 lib/user_interaction.py:746 -#: lib/user_interaction.py:749 lib/user_interaction.py:752 -#: lib/user_interaction.py:751 lib/user_interaction/partitioning_conf.py:289 -#: lib/user_interaction/partitioning_conf.py:294 -#: lib/user_interaction/partitioning_conf.py:326 msgid "Enter a desired filesystem type for the partition: " msgstr "Введите желаемый тип файловой системы для раздела: " -#: lib/user_interaction.py:760 lib/menu/selection_menu.py:141 -#: lib/user_interaction.py:767 lib/menu/selection_menu.py:139 -#: lib/menu/selection_menu.py:143 lib/user_interaction.py:770 -#: lib/user_interaction.py:773 lib/user_interaction.py:772 -#: lib/menu/selection_menu.py:407 lib/menu/selection_menu.py:415 -#: lib/menu/selection_menu.py:17 lib/user_interaction/general_conf.py:105 -#: lib/user_interaction/global_menu.py:43 lib/menu/selection_menu.py:53 -#: lib/menu/selection_menu.py:463 lib/menu/global_menu.py:43 -#: lib/menu/selection_menu.py:20 msgid "Select Archinstall language" msgstr "Выберите язык Archinstall" -#: lib/user_interaction.py:765 lib/user_interaction.py:772 -#: lib/user_interaction.py:775 lib/user_interaction.py:778 -#: lib/user_interaction.py:777 lib/user_interaction/disk_conf.py:40 msgid "Wipe all selected drives and use a best-effort default partition layout" -msgstr "" -"Стереть все выбранные диски и использовать оптимальную схему разделов по " -"умолчанию" +msgstr "Стереть все выбранные диски и использовать оптимальную схему разделов по умолчанию" -#: lib/user_interaction.py:766 lib/user_interaction.py:773 -#: lib/user_interaction.py:776 lib/user_interaction.py:779 -#: lib/user_interaction.py:778 lib/user_interaction/disk_conf.py:41 -msgid "" -"Select what to do with each individual drive (followed by partition usage)" -msgstr "" -"Выберите, что делать с каждым отдельным диском (с последующим использованием " -"разделов)" +msgid "Select what to do with each individual drive (followed by partition usage)" +msgstr "Выберите, что делать с каждым отдельным диском (с последующим использованием разделов)" -#: lib/user_interaction.py:769 lib/user_interaction.py:770 -#: lib/user_interaction.py:777 lib/user_interaction.py:780 -#: lib/user_interaction.py:783 lib/user_interaction.py:782 -#: lib/user_interaction/disk_conf.py:45 lib/user_interaction/disk_conf.py:44 msgid "Select what you wish to do with the selected block devices" msgstr "Выберите, что вы хотите сделать с выбранными блочными устройствами" -#: lib/user_interaction.py:822 lib/user_interaction.py:823 -#: lib/user_interaction.py:830 lib/user_interaction.py:833 -#: lib/user_interaction.py:836 lib/user_interaction.py:835 -#: lib/user_interaction/general_conf.py:126 -msgid "" -"This is a list of pre-programmed profiles, they might make it easier to " -"install things like desktop environments" -msgstr "" -"Это список предварительно запрограммированных профилей, они могут облегчить " -"установку таких вещей, как окружения рабочего стола" +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:847 -#: lib/user_interaction.py:854 lib/user_interaction.py:857 -#: lib/user_interaction.py:860 lib/user_interaction.py:859 -#: lib/user_interaction/general_conf.py:71 msgid "Select Keyboard layout" msgstr "Выберите раскладку клавиатуры" -#: lib/user_interaction.py:861 lib/user_interaction.py:862 -#: lib/user_interaction.py:869 lib/user_interaction.py:872 -#: lib/user_interaction.py:875 lib/user_interaction.py:874 -#: lib/user_interaction/general_conf.py:92 msgid "Select one of the regions to download packages from" msgstr "Выберите один из регионов для загрузки пакетов" -#: lib/user_interaction.py:883 lib/user_interaction.py:884 -#: lib/user_interaction.py:891 lib/user_interaction.py:894 -#: lib/user_interaction.py:897 lib/user_interaction.py:896 -#: lib/user_interaction/system_conf.py:52 msgid "Select one or more hard drives to use and configure" -msgstr "" -"Выберите один или несколько жестких дисков для использования и настройте их" +msgstr "Выберите один или несколько жестких дисков для использования и настройте их" -#: lib/user_interaction.py:910 lib/user_interaction.py:911 -#: lib/user_interaction.py:918 lib/user_interaction.py:921 -#: lib/user_interaction.py:924 lib/user_interaction.py:923 -#: lib/user_interaction/system_conf.py:80 -msgid "" -"For the best compatibility with your AMD hardware, you may want to use " -"either the all open-source or AMD / ATI options." -msgstr "" -"Для наилучшей совместимости с оборудованием AMD вы можете использовать либо " -"все варианты с открытым исходным кодом, либо AMD / ATI." +msgid "For the best compatibility with your AMD hardware, you may want to use either the all open-source or AMD / ATI options." +msgstr "Для наилучшей совместимости с оборудованием AMD вы можете использовать либо все варианты с открытым исходным кодом, либо AMD / ATI." -#: lib/user_interaction.py:912 lib/user_interaction.py:913 -#: lib/user_interaction.py:920 lib/user_interaction.py:923 -#: lib/user_interaction.py:926 lib/user_interaction.py:925 -#: lib/user_interaction/system_conf.py:84 -msgid "" -"For the best compatibility with your Intel hardware, you may want to use " -"either the all open-source or Intel options.\n" -msgstr "" -"Для лучшей совместимости с оборудованием Intel вы можете использовать либо " -"все варианты с открытым исходным кодом, либо Intel.\n" +msgid "For the best compatibility with your Intel hardware, you may want to use either the all open-source or Intel options.\n" +msgstr "Для лучшей совместимости с оборудованием Intel вы можете использовать либо все варианты с открытым исходным кодом, либо Intel.\n" + +msgid "For the best compatibility with your Nvidia hardware, you may want to use the Nvidia proprietary driver.\n" +msgstr "Для наилучшей совместимости с оборудованием Nvidia вы можете использовать проприетарный драйвер Nvidia.\n" -#: lib/user_interaction.py:914 lib/user_interaction.py:915 -#: lib/user_interaction.py:922 lib/user_interaction.py:925 -#: lib/user_interaction.py:928 lib/user_interaction.py:927 -#: lib/user_interaction/system_conf.py:88 -msgid "" -"For the best compatibility with your Nvidia hardware, you may want to use " -"the Nvidia proprietary driver.\n" -msgstr "" -"Для наилучшей совместимости с оборудованием Nvidia вы можете использовать " -"проприетарный драйвер Nvidia.\n" - -#: lib/user_interaction.py:917 lib/user_interaction.py:918 -#: lib/user_interaction.py:925 lib/user_interaction.py:928 -#: lib/user_interaction.py:931 lib/user_interaction.py:930 -#: lib/user_interaction/system_conf.py:92 -#: lib/user_interaction/system_conf.py:91 msgid "" "\n" "\n" @@ -470,229 +209,95 @@ msgid "" msgstr "" "\n" "\n" -"Выберите графический драйвер или оставьте пустым, чтобы установить все " -"драйверы с открытым исходным кодом" - -#: lib/user_interaction.py:921 lib/user_interaction.py:922 -#: lib/user_interaction.py:929 lib/user_interaction.py:932 -#: lib/user_interaction.py:935 lib/user_interaction.py:934 -#: lib/user_interaction/system_conf.py:96 -#: lib/user_interaction/system_conf.py:95 +"Выберите графический драйвер или оставьте пустым, чтобы установить все драйверы с открытым исходным кодом" + msgid "All open-source (default)" msgstr "Все с открытым исходным кодом (по умолчанию)" -#: lib/user_interaction.py:940 lib/user_interaction.py:941 -#: lib/user_interaction.py:948 lib/user_interaction.py:951 -#: lib/user_interaction.py:954 lib/user_interaction.py:953 -#: lib/user_interaction/system_conf.py:28 msgid "Choose which kernels to use or leave blank for default \"{}\"" -msgstr "" -"Выберите, какие ядра использовать, или оставьте пустым по умолчанию \"{}\"." +msgstr "Выберите, какие ядра использовать, или оставьте пустым по умолчанию \"{}\"." -#: lib/user_interaction.py:954 lib/user_interaction.py:955 -#: lib/user_interaction.py:962 lib/user_interaction.py:965 -#: lib/user_interaction.py:968 lib/user_interaction.py:967 -#: lib/user_interaction/locale_conf.py:16 msgid "Choose which locale language to use" msgstr "Выберите, какой язык локали использовать" -#: lib/user_interaction.py:968 lib/user_interaction.py:969 -#: lib/user_interaction.py:976 lib/user_interaction.py:979 -#: lib/user_interaction.py:982 lib/user_interaction.py:981 -#: lib/user_interaction/locale_conf.py:29 msgid "Choose which locale encoding to use" msgstr "Выберите, какую кодировку локали использовать" -#: lib/user_interaction.py:1009 lib/user_interaction.py:1010 -#: lib/user_interaction.py:1017 lib/user_interaction.py:1020 -#: lib/user_interaction.py:1023 lib/user_interaction.py:1022 -#: lib/user_interaction/backwards_compatible_conf.py:49 msgid "Select one of the values shown below: " msgstr "Выберите одно из значений, показанных ниже: " -#: lib/user_interaction.py:1050 lib/user_interaction.py:1051 -#: lib/user_interaction.py:1058 lib/user_interaction.py:1061 -#: lib/user_interaction.py:1064 lib/user_interaction.py:1063 -#: lib/user_interaction/backwards_compatible_conf.py:88 msgid "Select one or more of the options below: " msgstr "Выберите один или несколько из приведенных ниже вариантов: " -#: lib/disk/filesystem.py:86 lib/disk/filesystem.py:87 -#: lib/disk/filesystem.py:85 msgid "Adding partition...." msgstr "Добавление раздела...." -#: lib/disk/filesystem.py:139 lib/disk/filesystem.py:141 -#: lib/disk/filesystem.py:142 lib/disk/filesystem.py:140 -msgid "" -"You need to enter a valid fs-type in order to continue. See `man parted` for " -"valid fs-type's." -msgstr "" -"Чтобы продолжить, вам нужно ввести действительный fs-тип. Смотрите `man " -"parted` для правильных fs-типов." +msgid "You need to enter a valid fs-type in order to continue. See `man parted` for valid fs-type's." +msgstr "Чтобы продолжить, вам нужно ввести действительный fs-тип. Смотрите `man parted` для правильных fs-типов." -#: lib/profiles.py:89 lib/profiles.py:90 msgid "Error: Listing profiles on URL \"{}\" resulted in:" msgstr "Ошибка: Перечисление профилей по URL \"{}\" привело к:" -#: lib/profiles.py:92 lib/profiles.py:93 msgid "Error: Could not decode \"{}\" result as JSON:" msgstr "Ошибка: Не удалось декодировать результат \"{}\" как JSON:" -#: lib/menu/selection_menu.py:146 lib/menu/selection_menu.py:144 -#: lib/menu/selection_menu.py:148 lib/menu/selection_menu.py:412 -#: lib/menu/selection_menu.py:420 lib/user_interaction/global_menu.py:48 -#: lib/menu/selection_menu.py:468 lib/menu/global_menu.py:48 -#: lib/menu/global_menu.py:47 msgid "Select keyboard layout" msgstr "Выберите раскладку клавиатуры" -#: lib/menu/selection_menu.py:149 lib/menu/selection_menu.py:147 -#: lib/menu/selection_menu.py:151 lib/menu/selection_menu.py:415 -#: lib/menu/selection_menu.py:423 lib/user_interaction/global_menu.py:51 -#: lib/menu/selection_menu.py:471 lib/menu/global_menu.py:51 -#: lib/menu/global_menu.py:50 msgid "Select mirror region" msgstr "Выберите регион зеркала" -#: lib/menu/selection_menu.py:154 lib/menu/selection_menu.py:152 -#: lib/menu/selection_menu.py:156 lib/menu/selection_menu.py:420 -#: lib/menu/selection_menu.py:428 lib/user_interaction/global_menu.py:56 -#: lib/menu/selection_menu.py:476 lib/menu/global_menu.py:56 -#: lib/menu/global_menu.py:55 msgid "Select locale language" msgstr "Выберите язык локали" -#: lib/menu/selection_menu.py:156 lib/menu/selection_menu.py:154 -#: lib/menu/selection_menu.py:158 lib/menu/selection_menu.py:422 -#: lib/menu/selection_menu.py:430 lib/user_interaction/global_menu.py:58 -#: lib/menu/selection_menu.py:478 lib/menu/global_menu.py:58 -#: lib/menu/global_menu.py:57 msgid "Select locale encoding" msgstr "Выберите кодировку локали" -#: lib/menu/selection_menu.py:159 lib/menu/selection_menu.py:157 -#: lib/menu/selection_menu.py:161 lib/menu/selection_menu.py:425 -#: lib/menu/selection_menu.py:433 lib/user_interaction/global_menu.py:61 -#: lib/menu/selection_menu.py:481 lib/menu/global_menu.py:61 -#: lib/menu/global_menu.py:60 msgid "Select harddrives" msgstr "Выберите жесткие диски" -#: lib/menu/selection_menu.py:163 lib/menu/selection_menu.py:161 -#: lib/menu/selection_menu.py:165 lib/menu/selection_menu.py:429 -#: lib/menu/selection_menu.py:437 lib/user_interaction/global_menu.py:65 -#: lib/menu/selection_menu.py:485 lib/menu/global_menu.py:65 -#: lib/menu/global_menu.py:64 msgid "Select disk layout" msgstr "Выберите разметку диска" -#: lib/menu/selection_menu.py:171 lib/menu/selection_menu.py:169 -#: lib/menu/selection_menu.py:173 lib/menu/selection_menu.py:437 -#: lib/menu/selection_menu.py:445 lib/user_interaction/global_menu.py:73 -#: lib/menu/selection_menu.py:493 lib/menu/global_menu.py:73 -#: lib/menu/global_menu.py:72 msgid "Set encryption password" msgstr "Установите пароль шифрования" -#: lib/menu/selection_menu.py:177 lib/menu/selection_menu.py:175 -#: lib/menu/selection_menu.py:179 lib/menu/selection_menu.py:443 -#: lib/menu/selection_menu.py:451 lib/user_interaction/global_menu.py:79 -#: lib/menu/selection_menu.py:499 lib/menu/global_menu.py:79 -#: lib/menu/global_menu.py:78 msgid "Use swap" msgstr "Использовать подкачку" -#: lib/menu/selection_menu.py:182 lib/menu/selection_menu.py:180 -#: lib/menu/selection_menu.py:184 lib/menu/selection_menu.py:448 -#: lib/menu/selection_menu.py:456 lib/user_interaction/global_menu.py:84 -#: lib/menu/selection_menu.py:504 lib/menu/global_menu.py:84 -#: lib/menu/global_menu.py:83 msgid "Select bootloader" msgstr "Выберите загрузчик" -#: lib/menu/selection_menu.py:188 lib/menu/selection_menu.py:186 -#: lib/menu/selection_menu.py:190 lib/menu/selection_menu.py:454 -#: lib/menu/selection_menu.py:462 lib/user_interaction/global_menu.py:95 -#: lib/menu/selection_menu.py:515 lib/menu/global_menu.py:95 -#: lib/menu/global_menu.py:94 msgid "Set root password" msgstr "Установите пароль root" -#: lib/menu/selection_menu.py:193 lib/menu/selection_menu.py:191 -#: lib/menu/selection_menu.py:195 lib/menu/selection_menu.py:459 -#: lib/menu/selection_menu.py:467 lib/user_interaction/global_menu.py:100 -#: lib/menu/selection_menu.py:520 lib/menu/global_menu.py:100 -#: lib/menu/global_menu.py:99 msgid "Specify superuser account" msgstr "Укажите учетную запись суперпользователя" -#: lib/menu/selection_menu.py:199 lib/menu/selection_menu.py:197 -#: lib/menu/selection_menu.py:201 lib/menu/selection_menu.py:465 -#: lib/menu/selection_menu.py:473 lib/user_interaction/global_menu.py:107 -#: lib/menu/selection_menu.py:528 lib/menu/global_menu.py:107 msgid "Specify user account" msgstr "Укажите учетную запись пользователя" -#: lib/menu/selection_menu.py:205 lib/menu/selection_menu.py:203 -#: lib/menu/selection_menu.py:207 lib/menu/selection_menu.py:471 -#: lib/menu/selection_menu.py:479 lib/user_interaction/global_menu.py:114 -#: lib/menu/selection_menu.py:535 lib/menu/global_menu.py:114 msgid "Specify profile" msgstr "Укажите профиль" -#: lib/menu/selection_menu.py:210 lib/menu/selection_menu.py:208 -#: lib/menu/selection_menu.py:212 lib/menu/selection_menu.py:476 -#: lib/menu/selection_menu.py:484 lib/user_interaction/global_menu.py:119 -#: lib/menu/selection_menu.py:540 lib/menu/global_menu.py:119 msgid "Select audio" msgstr "Выберите аудиоустройство" -#: lib/menu/selection_menu.py:214 lib/menu/selection_menu.py:212 -#: lib/menu/selection_menu.py:216 lib/menu/selection_menu.py:480 -#: lib/menu/selection_menu.py:488 lib/user_interaction/global_menu.py:123 -#: lib/menu/selection_menu.py:544 lib/menu/global_menu.py:123 -#: lib/menu/global_menu.py:126 msgid "Select kernels" msgstr "Выберите ядра" -#: lib/menu/selection_menu.py:219 lib/menu/selection_menu.py:217 -#: lib/menu/selection_menu.py:221 lib/menu/selection_menu.py:485 -#: lib/menu/selection_menu.py:493 lib/user_interaction/global_menu.py:128 -#: lib/menu/selection_menu.py:549 lib/menu/global_menu.py:128 -#: lib/menu/global_menu.py:131 msgid "Additional packages to install" msgstr "Дополнительные пакеты для установки" -#: lib/menu/selection_menu.py:224 lib/menu/selection_menu.py:222 -#: lib/menu/selection_menu.py:226 lib/menu/selection_menu.py:490 -#: lib/menu/selection_menu.py:498 lib/user_interaction/global_menu.py:139 -#: lib/menu/selection_menu.py:560 lib/menu/global_menu.py:139 -#: lib/menu/global_menu.py:142 msgid "Configure network" msgstr "Настройте сеть" -#: lib/menu/selection_menu.py:232 lib/menu/selection_menu.py:230 -#: lib/menu/selection_menu.py:234 lib/menu/selection_menu.py:498 -#: lib/menu/selection_menu.py:506 lib/user_interaction/global_menu.py:150 -#: lib/menu/selection_menu.py:571 lib/menu/global_menu.py:150 -#: lib/menu/global_menu.py:153 msgid "Set automatic time sync (NTP)" msgstr "Установить автоматическую синхронизацию времени (NTP)" -#: lib/menu/selection_menu.py:310 lib/menu/selection_menu.py:308 -#: lib/menu/selection_menu.py:315 lib/menu/selection_menu.py:527 -#: lib/menu/selection_menu.py:535 lib/user_interaction/global_menu.py:187 -#: lib/menu/selection_menu.py:608 lib/menu/global_menu.py:187 -#: lib/menu/global_menu.py:190 msgid "Install ({} config(s) missing)" msgstr "Установить ({} конфигурация(и) отсутствует)" -#: lib/menu/selection_menu.py:373 lib/menu/selection_menu.py:371 -#: lib/menu/selection_menu.py:378 lib/menu/selection_menu.py:591 -#: lib/menu/selection_menu.py:599 lib/user_interaction/global_menu.py:249 -#: lib/menu/selection_menu.py:669 lib/menu/global_menu.py:249 -#: lib/menu/global_menu.py:260 msgid "" "You decided to skip harddrive selection\n" "and will use whatever drive-setup is mounted at {} (experimental)\n" @@ -700,123 +305,55 @@ msgid "" "Do you wish to continue?" msgstr "" "Вы решили пропустить выбор жесткого диска\n" -"и будете использовать любой диск, смонтированный по адресу {} " -"(экспериментально)\n" +"и будете использовать любой диск, смонтированный по адресу {} (экспериментально)\n" "ПРЕДУПРЕЖДЕНИЕ: Archinstall не будет проверять пригодность этой установки.\n" "Вы хотите продолжить?" -#: lib/disk/filesystem.py:97 lib/disk/filesystem.py:98 -#: lib/disk/filesystem.py:96 msgid "Re-using partition instance: {}" msgstr "Повторное использование экземпляра раздела: {}" -#: lib/user_interaction.py:590 lib/user_interaction.py:593 -#: lib/user_interaction.py:596 lib/user_interaction.py:595 -#: lib/user_interaction/partitioning_conf.py:119 -#: lib/user_interaction/partitioning_conf.py:120 -#: lib/user_interaction/partitioning_conf.py:128 msgid "Create a new partition" msgstr "Создать новый раздел" -#: lib/user_interaction.py:592 lib/user_interaction.py:595 -#: lib/user_interaction.py:598 lib/user_interaction.py:597 -#: lib/user_interaction/partitioning_conf.py:121 -#: lib/user_interaction/partitioning_conf.py:122 -#: lib/user_interaction/partitioning_conf.py:130 msgid "Delete a partition" msgstr "Удалить раздел" -#: lib/user_interaction.py:593 lib/user_interaction.py:596 -#: lib/user_interaction.py:599 lib/user_interaction.py:598 -#: lib/user_interaction/partitioning_conf.py:122 -#: lib/user_interaction/partitioning_conf.py:123 -#: lib/user_interaction/partitioning_conf.py:131 msgid "Clear/Delete all partitions" msgstr "Очистить/удалить все разделы" -#: lib/user_interaction.py:594 lib/user_interaction.py:597 -#: lib/user_interaction.py:600 lib/user_interaction.py:599 -#: lib/user_interaction/partitioning_conf.py:123 -#: lib/user_interaction/partitioning_conf.py:124 -#: lib/user_interaction/partitioning_conf.py:132 msgid "Assign mount-point for a partition" msgstr "Назначить точку монтирования для раздела" -#: lib/user_interaction.py:595 lib/user_interaction.py:598 -#: lib/user_interaction.py:601 lib/user_interaction.py:600 -#: lib/user_interaction/partitioning_conf.py:124 -#: lib/user_interaction/partitioning_conf.py:125 -#: lib/user_interaction/partitioning_conf.py:133 msgid "Mark/Unmark a partition to be formatted (wipes data)" -msgstr "" -"Пометить/снять отметку с раздела, который будет отформатирован (стирание " -"данных)" - -#: lib/user_interaction.py:596 lib/user_interaction.py:599 -#: lib/user_interaction.py:602 lib/user_interaction.py:601 -#: lib/user_interaction/partitioning_conf.py:125 -#: lib/user_interaction/partitioning_conf.py:126 -#: lib/user_interaction/partitioning_conf.py:134 +msgstr "Пометить/снять отметку с раздела, который будет отформатирован (стирание данных)" + msgid "Mark/Unmark a partition as encrypted" msgstr "Пометить/снять отметку с раздела как зашифрованный" -#: lib/user_interaction.py:597 lib/user_interaction.py:600 -#: lib/user_interaction.py:603 lib/user_interaction.py:602 -#: lib/user_interaction/partitioning_conf.py:126 -#: lib/user_interaction/partitioning_conf.py:127 -#: lib/user_interaction/partitioning_conf.py:136 msgid "Mark/Unmark a partition as bootable (automatic for /boot)" -msgstr "" -"Пометить/снять отметку с раздела как загрузочный (автоматически для /boot)" +msgstr "Пометить/снять отметку с раздела как загрузочный (автоматически для /boot)" -#: lib/user_interaction.py:598 lib/user_interaction.py:601 -#: lib/user_interaction.py:604 lib/user_interaction.py:603 -#: lib/user_interaction/partitioning_conf.py:127 -#: lib/user_interaction/partitioning_conf.py:128 -#: lib/user_interaction/partitioning_conf.py:137 msgid "Set desired filesystem for a partition" msgstr "Установите желаемую файловую систему для раздела" -#: lib/menu/selection_menu.py:239 lib/menu/selection_menu.py:237 -#: lib/menu/selection_menu.py:241 lib/menu/selection_menu.py:270 -#: lib/menu/selection_menu.py:507 lib/menu/selection_menu.py:515 -#: lib/user_interaction/global_menu.py:167 lib/menu/selection_menu.py:588 -#: lib/menu/global_menu.py:167 lib/menu/global_menu.py:170 msgid "Abort" msgstr "Прервать" -#: lib/menu/selection_menu.py:183 lib/menu/selection_menu.py:187 -#: lib/menu/selection_menu.py:451 lib/menu/selection_menu.py:459 -#: lib/user_interaction/global_menu.py:89 lib/menu/selection_menu.py:509 -#: lib/menu/global_menu.py:89 lib/menu/global_menu.py:88 msgid "Specify hostname" msgstr "Укажите имя хоста" -#: lib/menu/selection_menu.py:228 lib/menu/selection_menu.py:492 -#: lib/menu/selection_menu.py:500 lib/user_interaction/global_menu.py:141 -#: lib/menu/selection_menu.py:562 lib/menu/global_menu.py:141 -#: lib/menu/global_menu.py:195 msgid "Not configured, unavailable unless setup manually" msgstr "Не настроен, недоступен, если не настроен вручную" -#: lib/menu/selection_menu.py:231 lib/menu/selection_menu.py:495 -#: lib/menu/selection_menu.py:503 lib/user_interaction/global_menu.py:145 -#: lib/menu/selection_menu.py:566 lib/menu/global_menu.py:145 -#: lib/menu/global_menu.py:148 msgid "Select timezone" msgstr "Выберите часовой пояс" -#: lib/menu/selection_menu.py:266 lib/menu/selection_menu.py:276 -#: lib/menu/selection_menu.py:312 lib/menu/selection_menu.py:301 msgid "Set/Modify the below options" msgstr "Установить/изменить следующие параметры" -#: lib/menu/selection_menu.py:272 msgid "Install" msgstr "Установить" -#: lib/menu/menu.py:68 lib/menu/menu.py:75 lib/menu/menu.py:119 -#: lib/menu/menu.py:133 msgid "" "Use ESC to skip\n" "\n" @@ -824,184 +361,80 @@ msgstr "" "Используйте ESC, чтобы пропустить\n" "\n" -#: lib/user_interaction.py:591 lib/user_interaction.py:594 -#: lib/user_interaction.py:597 lib/user_interaction.py:596 -#: lib/user_interaction/partitioning_conf.py:120 -#: lib/user_interaction/partitioning_conf.py:121 -#: lib/user_interaction/partitioning_conf.py:129 msgid "Suggest partition layout" msgstr "Предложить разметку разделов" -#: lib/user_interaction.py:101 lib/user_interaction/utils.py:43 -#: lib/user_interaction/utils.py:40 msgid "Enter a password: " msgstr "Введите пароль: " -#: lib/disk/filesystem.py:117 lib/disk/filesystem.py:118 -#: lib/disk/filesystem.py:116 msgid "Enter a encryption password for {}" msgstr "Введите пароль шифрования для {}" -#: lib/menu/selection_menu.py:174 lib/menu/selection_menu.py:567 -#: lib/menu/selection_menu.py:575 lib/user_interaction/global_menu.py:225 -#: lib/menu/selection_menu.py:646 lib/menu/global_menu.py:225 -#: lib/menu/global_menu.py:236 msgid "Enter disk encryption password (leave blank for no encryption): " -msgstr "" -"Введите пароль шифрования диска (оставьте пустым для отсутствия шифрования): " +msgstr "Введите пароль шифрования диска (оставьте пустым для отсутствия шифрования): " -#: lib/menu/selection_menu.py:407 lib/menu/selection_menu.py:617 -#: lib/menu/selection_menu.py:625 msgid "Create a required super-user with sudo privileges: " msgstr "Создайте необходимого суперпользователя с привилегиями sudo: " -#: lib/menu/selection_menu.py:347 lib/menu/selection_menu.py:554 -#: lib/menu/selection_menu.py:562 lib/user_interaction/global_menu.py:220 -#: lib/menu/selection_menu.py:641 lib/menu/global_menu.py:220 -#: lib/menu/global_menu.py:231 msgid "Enter root password (leave blank to disable root): " msgstr "Введите пароль root (оставьте пустым, чтобы отключить root): " -#: lib/user_interaction.py:307 lib/user_interaction.py:324 -#: lib/user_interaction/manage_users_conf.py:86 -#: lib/user_interaction/manage_users_conf.py:121 -#: lib/user_interaction/manage_users_conf.py:83 -#: lib/user_interaction/manage_users_conf.py:118 msgid "Password for user \"{}\": " msgstr "Пароль для пользователя \"{}\": " -#: lib/user_interaction.py:405 lib/user_interaction.py:408 -#: lib/user_interaction.py:407 lib/user_interaction/general_conf.py:152 -msgid "" -"Verifying that additional packages exist (this might take a few seconds)" -msgstr "" -"Проверка наличия дополнительных пакетов (это может занять несколько секунд)" +msgid "Verifying that additional packages exist (this might take a few seconds)" +msgstr "Проверка наличия дополнительных пакетов (это может занять несколько секунд)" -#: lib/user_interaction.py:281 lib/user_interaction/general_conf.py:22 -msgid "" -"Would you like to use automatic time synchronization (NTP) with the default " -"time servers?\n" -msgstr "" -"Вы хотите использовать автоматическую синхронизацию времени (NTP) с " -"серверами времени по умолчанию?\n" +msgid "Would you like to use automatic time synchronization (NTP) with the default time servers?\n" +msgstr "Вы хотите использовать автоматическую синхронизацию времени (NTP) с серверами времени по умолчанию?\n" -#: lib/user_interaction.py:282 lib/user_interaction/general_conf.py:23 msgid "" -"Hardware time and other post-configuration steps might be required in order " -"for NTP to work.\n" +"Hardware time and other post-configuration steps might be required in order for NTP to work.\n" "For more information, please check the Arch wiki" msgstr "" -"Для работы NTP может потребоваться аппаратное время и другие шаги после " -"конфигурации.\n" +"Для работы NTP может потребоваться аппаратное время и другие шаги после конфигурации.\n" "Для получения дополнительной информации, пожалуйста, ознакомьтесь с ArchWiki" -#: lib/menu/selection_menu.py:411 lib/menu/selection_menu.py:621 -#: lib/menu/selection_menu.py:629 msgid "Enter a username to create an additional user (leave blank to skip): " -msgstr "" -"Введите имя пользователя для создания дополнительного пользователя (оставьте " -"пустым, чтобы пропустить): " +msgstr "Введите имя пользователя для создания дополнительного пользователя (оставьте пустым, чтобы пропустить): " -#: lib/menu/menu.py:116 lib/menu/menu.py:130 msgid "Use ESC to skip\n" msgstr "Используйте ESC, чтобы пропустить\n" -#: lib/menu/list_manager.py:117 lib/menu/list_manager.py:128 msgid "" "\n" -" Choose an object from the list, and select one of the available actions for " -"it to execute" +" Choose an object from the list, and select one of the available actions for it to execute" msgstr "" "\n" -" Выберите объект из списка и выберите одно из доступных действий для его " -"выполнения" +" Выберите объект из списка и выберите одно из доступных действий для его выполнения" -#: lib/menu/list_manager.py:130 lib/user_interaction/subvolume_config.py:90 -#: lib/menu/list_manager.py:141 lib/user_interaction/subvolume_config.py:93 msgid "Cancel" msgstr "Отменить" -#: lib/menu/list_manager.py:131 lib/menu/list_manager.py:142 msgid "Confirm and exit" msgstr "Подтвердить и выйти" -#: lib/menu/list_manager.py:135 lib/menu/list_manager.py:228 -#: lib/menu/list_manager.py:251 lib/menu/list_manager.py:276 -#: lib/user_interaction/subvolume_config.py:12 -#: lib/user_interaction/subvolume_config.py:44 -#: lib/user_interaction/subvolume_config.py:78 -#: lib/user_interaction/subvolume_config.py:82 -#: lib/user_interaction/subvolume_config.py:85 lib/menu/list_manager.py:146 -#: lib/menu/list_manager.py:249 lib/menu/list_manager.py:272 -#: lib/user_interaction/subvolume_config.py:15 -#: lib/user_interaction/subvolume_config.py:47 -#: lib/user_interaction/subvolume_config.py:81 -#: lib/user_interaction/subvolume_config.py:88 msgid "Add" msgstr "Добавить" -#: lib/menu/list_manager.py:135 lib/menu/list_manager.py:231 -#: lib/menu/list_manager.py:255 lib/user_interaction/subvolume_config.py:78 -#: lib/menu/list_manager.py:146 lib/menu/list_manager.py:252 -#: lib/menu/list_manager.py:276 lib/user_interaction/subvolume_config.py:81 msgid "Copy" msgstr "Копировать" -#: lib/menu/list_manager.py:135 lib/menu/list_manager.py:237 -#: lib/menu/list_manager.py:261 lib/user_interaction/subvolume_config.py:82 -#: lib/user_interaction/subvolume_config.py:85 lib/menu/list_manager.py:146 -#: lib/menu/list_manager.py:258 lib/menu/list_manager.py:282 -#: lib/user_interaction/subvolume_config.py:88 msgid "Edit" msgstr "Редактировать" -#: lib/menu/list_manager.py:135 lib/menu/list_manager.py:242 -#: lib/menu/list_manager.py:264 lib/user_interaction/subvolume_config.py:40 -#: lib/menu/list_manager.py:146 lib/menu/list_manager.py:263 -#: lib/menu/list_manager.py:285 lib/user_interaction/subvolume_config.py:44 msgid "Delete" msgstr "Удалить" -#: lib/menu/list_manager.py:185 lib/menu/list_manager.py:206 msgid "Select an action for < {} >" msgstr "Выберите действие для < {} >" -#: lib/menu/list_manager.py:229 lib/menu/list_manager.py:250 -msgid "Add :" -msgstr "Добавить:" - -#: lib/menu/list_manager.py:233 lib/menu/list_manager.py:254 -msgid "Copy to :" -msgstr "Копировать в:" - -#: lib/menu/list_manager.py:240 lib/menu/list_manager.py:261 -msgid "Edite :" -msgstr "Редактировать:" - -#: lib/menu/list_manager.py:252 lib/menu/list_manager.py:273 -msgid "Key :" -msgstr "Ключ:" - -#: lib/menu/list_manager.py:253 lib/menu/list_manager.py:274 -msgid "Value :" -msgstr "Значение:" - -#: lib/menu/list_manager.py:257 lib/menu/list_manager.py:278 msgid "Copy to new key:" msgstr "Копировать в новый ключ:" -#: lib/menu/list_manager.py:262 lib/menu/list_manager.py:283 -#, python-brace-format -msgid "Edit {origkey} :" -msgstr "Редактировать {origkey}:" - -#: lib/models/network_configuration.py:53 -#: lib/models/network_configuration.py:74 -#: lib/models/network_configuration.py:167 msgid "Unknown nic type: {}. Possible values are {}" msgstr "Неизвестный тип сетевого адаптера: {}. Возможные значения: {}" -#: lib/configuration.py:75 msgid "" "\n" "This is your chosen configuration:" @@ -1009,42 +442,27 @@ msgstr "" "\n" "Это выбранная вами конфигурация:" -#: lib/pacman.py:18 -msgid "" -"Pacman is already running, waiting maximum 10 minutes for it to terminate." -msgstr "" -"Pacman уже запущен, ожидание его завершения составляет максимум 10 минут." +msgid "Pacman is already running, waiting maximum 10 minutes for it to terminate." +msgstr "Pacman уже запущен, ожидание его завершения составляет максимум 10 минут." -#: lib/pacman.py:25 -msgid "" -"Pre-existing pacman lock never exited. Please clean up any existing pacman " -"sessions before using archinstall." -msgstr "" -"Существовавшая ранее блокировка pacman не завершилась. Пожалуйста, очистите " -"все существующие сессии pacman перед использованием archinstall." +msgid "Pre-existing pacman lock never exited. Please clean up any existing pacman sessions before using archinstall." +msgstr "Существовавшая ранее блокировка pacman не завершилась. Пожалуйста, очистите все существующие сессии pacman перед использованием archinstall." -#: lib/user_interaction/general_conf.py:174 msgid "Choose which optional additional repositories to enable" msgstr "Выберите, какие дополнительные репозитории следует включить" -#: lib/user_interaction/manage_users_conf.py:32 msgid "Add a user" msgstr "Добавить пользователя" -#: lib/user_interaction/manage_users_conf.py:33 msgid "Change password" msgstr "Изменить пароль" -#: lib/user_interaction/manage_users_conf.py:34 msgid "Promote/Demote user" msgstr "Повысить/понизить пользователя" -#: lib/user_interaction/manage_users_conf.py:35 msgid "Delete User" msgstr "Удалить пользователя" -#: lib/user_interaction/manage_users_conf.py:99 -#: lib/user_interaction/manage_users_conf.py:96 msgid "" "\n" "Define a new user\n" @@ -1052,34 +470,21 @@ msgstr "" "\n" "Укажите нового пользователя\n" -#: lib/user_interaction/manage_users_conf.py:100 -#: lib/user_interaction/manage_users_conf.py:97 msgid "User Name : " msgstr "Имя пользователя: " -#: lib/user_interaction/manage_users_conf.py:115 -#: lib/user_interaction/manage_users_conf.py:112 msgid "Should {} be a superuser (sudoer)?" msgstr "Должен ли {} быть суперпользователем (sudoer)?" -#: lib/user_interaction/manage_users_conf.py:161 msgid "Define users with sudo privilege: " msgstr "Определите пользователей с привилегиями sudo: " -#: lib/user_interaction/network_conf.py:24 -#: lib/user_interaction/network_conf.py:124 msgid "No network configuration" msgstr "Нет сетевой конфигурации" -#: lib/user_interaction/partitioning_conf.py:128 -#: lib/user_interaction/partitioning_conf.py:129 -#: lib/user_interaction/partitioning_conf.py:138 msgid "Set desired subvolumes on a btrfs partition" msgstr "Установите желаемые подтома на раздел btrfs" -#: lib/user_interaction/partitioning_conf.py:296 -#: lib/user_interaction/partitioning_conf.py:303 -#: lib/user_interaction/partitioning_conf.py:336 msgid "" "{}\n" "\n" @@ -1089,101 +494,66 @@ msgstr "" "\n" "Выберите раздел, на котором будут установлены подтома" -#: lib/user_interaction/partitioning_conf.py:305 -#: lib/user_interaction/partitioning_conf.py:312 -#: lib/user_interaction/partitioning_conf.py:346 msgid "Manage btrfs subvolumes for current partition" msgstr "Управление подтомами btrfs для текущего раздела" -#: lib/user_interaction/save_conf.py:24 lib/user_interaction/save_conf.py:29 msgid "No configuration" msgstr "Отсутствует конфигурация" -#: lib/user_interaction/save_conf.py:42 msgid "Save user configuration" msgstr "Сохранить конфигурацию пользователя" -#: lib/user_interaction/save_conf.py:43 msgid "Save user credentials" msgstr "Сохранить учетные данные пользователя" -#: lib/user_interaction/save_conf.py:44 msgid "Save disk layout" msgstr "Сохранить разметку диска" -#: lib/user_interaction/save_conf.py:45 msgid "Save all" msgstr "Сохранить все" -#: lib/user_interaction/save_conf.py:48 msgid "Choose which configuration to save" msgstr "Выберите, какую конфигурацию сохранить" -#: lib/user_interaction/save_conf.py:59 msgid "Enter a directory for the configuration(s) to be saved: " msgstr "Введите каталог для сохранения конфигурации (-ций): " -#: lib/user_interaction/save_conf.py:63 msgid "Not a valid directory: {}" msgstr "Недействительный каталог: {}" -#: lib/user_interaction/utils.py:32 msgid "The password you are using seems to be weak," msgstr "Пароль, который вы используете, кажется слабым," -#: lib/user_interaction/utils.py:33 msgid "are you sure you want to use it?" msgstr "вы уверены, что хотите его использовать?" -#: lib/user_interaction/global_menu.py:134 lib/menu/selection_menu.py:555 -#: lib/menu/global_menu.py:134 lib/menu/global_menu.py:137 msgid "Additional repositories to enable" msgstr "Включить дополнительные репозитории" -#: lib/user_interaction/global_menu.py:155 lib/menu/selection_menu.py:576 -#: lib/menu/global_menu.py:155 lib/menu/global_menu.py:160 msgid "Save configuration" msgstr "Сохранить конфигурацию" -#: lib/user_interaction/global_menu.py:192 lib/menu/selection_menu.py:613 -#: lib/menu/global_menu.py:192 lib/menu/global_menu.py:205 msgid "Missing configurations:\n" msgstr "Отсутствующие конфигурации:\n" -#: lib/user_interaction/global_menu.py:210 lib/menu/selection_menu.py:631 -#: lib/menu/global_menu.py:210 lib/menu/global_menu.py:221 msgid "Either root-password or at least 1 superuser must be specified" -msgstr "" -"Должен быть указан либо пароль root, либо как минимум 1 суперпользователь" +msgstr "Должен быть указан либо пароль root, либо как минимум 1 суперпользователь" -#: lib/user_interaction/global_menu.py:275 lib/menu/selection_menu.py:695 -#: lib/menu/global_menu.py:275 lib/menu/global_menu.py:287 msgid "Manage superuser accounts: " msgstr "Управление учетными записями суперпользователей: " -#: lib/user_interaction/global_menu.py:279 lib/menu/selection_menu.py:699 -#: lib/menu/global_menu.py:279 lib/menu/global_menu.py:291 msgid "Manage ordinary user accounts: " msgstr "Управление учетными записями обычных пользователей: " -#: lib/user_interaction/subvolume_config.py:17 -#: lib/user_interaction/subvolume_config.py:20 msgid " Subvolume :{:16}" msgstr " Подтом :{:16}" -#: lib/user_interaction/subvolume_config.py:19 -#: lib/user_interaction/subvolume_config.py:22 -#: lib/user_interaction/subvolume_config.py:25 msgid " mounted at {:16}" msgstr " смонтировано в {:16}" -#: lib/user_interaction/subvolume_config.py:26 -#: lib/user_interaction/subvolume_config.py:29 msgid " with option {}" msgstr " с параметром {}" -#: lib/user_interaction/subvolume_config.py:46 -#: lib/user_interaction/subvolume_config.py:49 msgid "" "\n" " Fill the desired values for a new subvolume \n" @@ -1191,196 +561,193 @@ msgstr "" "\n" " Заполните нужные значения для нового подтома\n" -#: lib/user_interaction/subvolume_config.py:77 -#: lib/user_interaction/subvolume_config.py:80 msgid "Subvolume name " msgstr "Имя подтома " -#: lib/user_interaction/subvolume_config.py:81 -#: lib/user_interaction/subvolume_config.py:84 msgid "Subvolume mountpoint" msgstr "Точка монтирования подтома" -#: lib/user_interaction/subvolume_config.py:84 -#: lib/user_interaction/subvolume_config.py:87 msgid "Subvolume options" msgstr "Параметры подтома" -#: lib/user_interaction/subvolume_config.py:87 -#: lib/user_interaction/subvolume_config.py:90 msgid "Save" msgstr "Сохранить" -#: lib/user_interaction/subvolume_config.py:121 -#: lib/user_interaction/subvolume_config.py:124 msgid "Subvolume name :" msgstr "Имя подтома :" -#: lib/user_interaction/subvolume_config.py:124 -#: lib/user_interaction/subvolume_config.py:127 msgid "Select a mount point :" msgstr "Выберите точку монтирования:" -#: lib/user_interaction/subvolume_config.py:128 -#: lib/user_interaction/subvolume_config.py:131 msgid "Select the desired subvolume options " msgstr "Выберите нужные параметры подтома " -#: lib/user_interaction/manage_users_conf.py:161 -#: lib/user_interaction/manage_users_conf.py:158 msgid "Define users with sudo privilege, by username: " msgstr "Определите пользователей с привилегией sudo по имени пользователя: " -#: lib/installer.py:152 lib/installer.py:154 msgid "[!] A log file has been created here: {}" msgstr "[!] Здесь был создан файл журнала: {}" -#: lib/disk/user_guides.py:30 msgid "Would you like to use BTRFS subvolumes with a default structure?" msgstr "Вы хотите использовать подтома BTRFS со структурой по умолчанию?" -#: lib/disk/user_guides.py:34 lib/disk/user_guides.py:174 msgid "Would you like to use BTRFS compression?" msgstr "Хотите ли вы использовать сжатие BTRFS?" -#: lib/disk/user_guides.py:91 msgid "Would you like to create a separate partition for /home?" msgstr "Хотите ли вы создать отдельный раздел для /home?" -#: lib/disk/user_guides.py:161 -msgid "" -"The selected drives do not have the minimum capacity required for an " -"automatic suggestion\n" -msgstr "" -"Выбранные диски не имеют минимальной емкости, необходимой для " -"автоматического предложения\n" +msgid "The selected drives do not have the minimum capacity required for an automatic suggestion\n" +msgstr "Выбранные диски не имеют минимальной емкости, необходимой для автоматического предложения\n" -#: lib/disk/user_guides.py:162 msgid "Minimum capacity for /home partition: {}GB\n" msgstr "Минимальный размер раздела /home: {}GB\n" -#: lib/disk/user_guides.py:163 msgid "Minimum capacity for Arch Linux partition: {}GB" msgstr "Минимальный размер раздела Arch Linux: {}GB" -#: lib/disk/user_guides.py:164 msgid "Continue" msgstr "Продолжить" -#: lib/menu/menu.py:20 msgid "yes" msgstr "да" -#: lib/menu/menu.py:24 msgid "no" msgstr "нет" -#: lib/menu/selection_menu.py:137 msgid "set: {}" msgstr "выбор: {}" -#: lib/models/network_configuration.py:118 msgid "Manual configuration setting must be a list" msgstr "Ручная настройка конфигурации должна представлять собой список" -#: lib/models/network_configuration.py:127 msgid "No iface specified for manual configuration" msgstr "Не указан iface для ручной настройки" -#: lib/models/network_configuration.py:137 msgid "Manual nic configuration with no auto DHCP requires an IP address" -msgstr "" -"Ручная конфигурация сетевого адаптера без автоматического DHCP требует IP-" -"адреса" +msgstr "Ручная конфигурация сетевого адаптера без автоматического DHCP требует IP-адреса" -#: lib/user_interaction/network_conf.py:37 msgid "Add interface" msgstr "Добавить интерфейс" -#: lib/user_interaction/network_conf.py:38 msgid "Edit interface" msgstr "Редактировать интерфейс" -#: lib/user_interaction/network_conf.py:39 msgid "Delete interface" msgstr "Удалить интерфейс" -#: lib/user_interaction/network_conf.py:69 msgid "Select interface to add" msgstr "Выберите интерфейс для добавления" -#: lib/user_interaction/network_conf.py:127 msgid "Manual configuration" msgstr "Ручная конфигурация" -#: lib/user_interaction/partitioning_conf.py:135 msgid "Mark/Unmark a partition as compressed (btrfs only)" msgstr "Пометить/снять отметку с раздела как сжатый (только для btrfs)" -#: lib/user_interaction/utils.py:31 -msgid "" -"The password you are using seems to be weak, are you sure you want to use it?" -msgstr "" -"Пароль, который вы используете, кажется слабым, вы уверены, что хотите его " -"использовать?" +msgid "The password you are using seems to be weak, are you sure you want to use it?" +msgstr "Пароль, который вы используете, кажется слабым, вы уверены, что хотите его использовать?" -#: profiles/desktop.py:7 -msgid "" -"Provides a selection of desktop environments and tiling window managers, e." -"g. gnome, kde, sway" -msgstr "" -"Предоставляет выбор окружений рабочего стола и тайловых оконных менеджеров, " -"например, gnome, kde, sway" +msgid "Provides a selection of desktop environments and tiling window managers, e.g. gnome, kde, sway" +msgstr "Предоставляет выбор окружений рабочего стола и тайловых оконных менеджеров, например, gnome, kde, sway" -#: profiles/desktop.py:49 msgid "Select your desired desktop environment" msgstr "Выберите желаемое окружение рабочего стола" -#: profiles/minimal.py:5 -msgid "" -"A very basic installation that allows you to customize Arch Linux as you see " -"fit." +msgid "A very basic installation that allows you to customize Arch Linux as you see fit." +msgstr "Очень базовая установка, позволяющая настроить Arch Linux по своему усмотрению." + +msgid "Provides a selection of various server packages to install and enable, e.g. httpd, nginx, mariadb" +msgstr "Предоставляет выбор различных пакетов сервера для установки и включения, например, httpd, nginx, mariadb" + +msgid "Choose which servers to install, if none then a minimal installation wil be done" +msgstr "Выберите серверы для установки, если их нет, то будет выполнена минимальная установка" + +msgid "Installs a minimal system as well as xorg and graphics drivers." +msgstr "Устанавливает минимальную систему, а также xorg и графические драйверы." + +msgid "Press Enter to continue." +msgstr "Нажмите Enter, чтобы продолжить." + +msgid "Would you like to chroot into the newly created installation and perform post-installation configuration?" +msgstr "Хотите ли вы использовать chroot в новой созданной установке и выполнить настройку после установки?" + +#, fuzzy +msgid "Are you sure you want to reset this setting?" +msgstr "вы уверены, что хотите его использовать?" + +#, fuzzy +msgid "Select one or more hard drives to use and configure\n" +msgstr "Выберите один или несколько жестких дисков для использования и настройте их" + +msgid "Any modifications to the existing setting will reset the disk layout!" msgstr "" -"Очень базовая установка, позволяющая настроить Arch Linux по своему " -"усмотрению." -#: profiles/server.py:9 -msgid "" -"Provides a selection of various server packages to install and enable, e.g. " -"httpd, nginx, mariadb" +msgid "If you reset the harddrive selection this will also reset the current disk layout. Are you sure?" msgstr "" -"Предоставляет выбор различных пакетов сервера для установки и включения, " -"например, httpd, nginx, mariadb" -#: profiles/server.py:30 +#, fuzzy +msgid "Save and exit" +msgstr "Подтвердить и выйти" + +#, fuzzy msgid "" -"Choose which servers to install, if none then a minimal installation wil be " -"done" -msgstr "" -"Выберите серверы для установки, если их нет, то будет выполнена минимальная " -"установка" +"{}\n" +"contains queued partitions, this will remove those, are you sure?" +msgstr "{} содержит разделы в очереди, это удалит их, вы уверены?" -#: profiles/xorg.py:9 -msgid "Installs a minimal system as well as xorg and graphics drivers." +#, fuzzy +msgid "No audio server" +msgstr "Выберите звуковой сервер" + +msgid "(default)" msgstr "" -"Устанавливает минимальную систему, а также xorg и графические драйверы." -#: examples/guided.py:303 -msgid "Press Enter to continue." -msgstr "Нажмите Enter, чтобы продолжить." +#, fuzzy +msgid "Use ESC to skip" +msgstr "Используйте ESC, чтобы пропустить\n" -#: examples/guided.py:260 msgid "" -"Would you like to chroot into the newly created installation and perform " -"post-installation configuration?" +"Use CTRL+C to reset current selection\n" +"\n" msgstr "" -"Хотите ли вы использовать chroot в новой созданной установке и выполнить " -"настройку после установки?" + +#, fuzzy +msgid "Copy to: " +msgstr "Копировать в:" + +#, fuzzy +msgid "Edit: " +msgstr "Редактировать" + +msgid "Key: " +msgstr "" + +#, fuzzy +msgid "Edit {}: " +msgstr "Редактировать:" + +msgid "Add :" +msgstr "Добавить:" + +msgid "Value :" +msgstr "Значение:" + +#, python-brace-format +#~ msgid "Edit {origkey} :" +#~ msgstr "Редактировать {origkey}:" + +#~ msgid "Copy to :" +#~ msgstr "Копировать в:" + +#~ msgid "Edite :" +#~ msgstr "Редактировать:" + +#~ msgid "Key :" +#~ msgstr "Ключ:" #~ msgid "Archinstall requires root privileges to run. See --help for more." -#~ msgstr "" -#~ "Для запуска Archinstall требуются привилегии root. Для получения " -#~ "дополнительной информации смотрите --help." +#~ msgstr "Для запуска Archinstall требуются привилегии root. Для получения дополнительной информации смотрите --help." #~ msgid " ! Formatting {archinstall.arguments['harddrives']} in " #~ msgstr " ! Форматирование {archinstall.arguments['harddrives']} в " diff --git a/archinstall/locales/sv/LC_MESSAGES/base.po b/archinstall/locales/sv/LC_MESSAGES/base.po index eb5eb52d..691e0a6f 100644 --- a/archinstall/locales/sv/LC_MESSAGES/base.po +++ b/archinstall/locales/sv/LC_MESSAGES/base.po @@ -12,107 +12,81 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 3.0.1\n" -#: lib/installer.py:144 lib/installer.py:152 msgid "[!] A log file has been created here: {} {}" msgstr "[!] En logg-fil har skapats här: {} {}" -#: lib/installer.py:145 lib/installer.py:153 msgid " Please submit this issue (and file) to https://github.com/archlinux/archinstall/issues" msgstr "Vänligen rapportera detta fel (och logg-filen) till https://github.com/archlinux/archinstall/issues" -#: lib/user_interaction.py:83 lib/user_interaction/utils.py:86 msgid "Do you really want to abort?" msgstr "Vill du verkligen avbryta?" -#: lib/user_interaction.py:101 lib/user_interaction.py:104 lib/user_interaction/utils.py:53 msgid "And one more time for verification: " msgstr "Och en gång till för verifikation: " -#: lib/user_interaction.py:272 lib/user_interaction.py:275 lib/user_interaction/system_conf.py:142 msgid "Would you like to use swap on zram?" msgstr "Vill du använda swap under zram?" -#: lib/user_interaction.py:285 lib/user_interaction.py:288 lib/user_interaction/general_conf.py:33 msgid "Desired hostname for the installation: " msgstr "Önskat 'hostname' för din installation: " -#: lib/user_interaction.py:290 lib/user_interaction.py:293 msgid "Username for required superuser with sudo privileges: " msgstr "Användarnamn för obligatoriska superanvändaren med sudo rättigheter: " -#: lib/user_interaction.py:310 lib/user_interaction.py:313 lib/user_interaction/manage_users_conf.py:167 msgid "Any additional users to install (leave blank for no users): " msgstr "Några ytterligare användare att installera (lämna tom när du är klar): " -#: lib/user_interaction.py:324 lib/user_interaction.py:327 msgid "Should this user be a superuser (sudoer)?" msgstr "Är detta en superanvändare (sudo-rättigheter)?" -#: lib/user_interaction.py:340 lib/user_interaction.py:343 lib/user_interaction.py:346 lib/user_interaction/general_conf.py:41 msgid "Select a timezone" msgstr "Välj en tidszon" -#: lib/user_interaction.py:354 lib/user_interaction.py:357 lib/user_interaction.py:360 lib/user_interaction.py:359 lib/user_interaction/system_conf.py:115 msgid "Would you like to use GRUB as a bootloader instead of systemd-boot?" msgstr "Vill du använda GRUB istället för systemd-boot som boot-loader?" -#: lib/user_interaction.py:364 lib/user_interaction.py:367 lib/user_interaction.py:370 lib/user_interaction.py:369 lib/user_interaction/system_conf.py:125 msgid "Choose a bootloader" msgstr "Välj en boot-loader" -#: lib/user_interaction.py:380 lib/user_interaction.py:383 lib/user_interaction.py:386 lib/user_interaction.py:385 lib/user_interaction/general_conf.py:53 msgid "Choose an audio server" msgstr "Välj en ljud-server" -#: lib/user_interaction.py:391 lib/user_interaction.py:394 lib/user_interaction.py:397 lib/user_interaction.py:396 lib/user_interaction/general_conf.py:138 msgid "Only packages such as base, base-devel, linux, linux-firmware, efibootmgr and optional profile packages are installed." msgstr "Enbart paket som base, base-devel, linux, linux-firmware, efibootmgr och självvalda paket är installerade." -#: lib/user_interaction.py:392 lib/user_interaction.py:395 lib/user_interaction.py:398 lib/user_interaction.py:397 lib/user_interaction/general_conf.py:139 msgid "If you desire a web browser, such as firefox or chromium, you may specify it in the following prompt." msgstr "Om du önskar en webbläsare, exempelvis firefox eller chromium, bör du skriva in dom i följande fält." -#: lib/user_interaction.py:396 lib/user_interaction.py:399 lib/user_interaction.py:402 lib/user_interaction.py:401 lib/user_interaction/general_conf.py:143 msgid "Write additional packages to install (space separated, leave blank to skip): " msgstr "Skriv ytterligare paket som skall installeras (separerade med mellanslag, lämna tom för att skippa): " -#: lib/user_interaction.py:419 lib/user_interaction.py:422 lib/user_interaction.py:425 lib/user_interaction.py:424 lib/user_interaction/network_conf.py:25 msgid "Copy ISO network configuration to installation" msgstr "Kopiera nätverkskonfigurationen från ISO till installationen" -#: lib/user_interaction.py:420 lib/user_interaction.py:423 lib/user_interaction.py:426 lib/user_interaction.py:425 lib/user_interaction/network_conf.py:26 msgid "Use NetworkManager (necessary to configure internet graphically in GNOME and KDE)" msgstr "Använd NetworkManager (nödvändig för konfigurera internet i grafiska miljöerna GNOME och KDE)" -#: lib/user_interaction.py:428 lib/user_interaction.py:431 lib/user_interaction.py:434 lib/user_interaction.py:433 lib/user_interaction/network_conf.py:43 msgid "Select one network interface to configure" msgstr "Välj ett nätverkskort för konfigurering" -#: lib/user_interaction.py:441 lib/user_interaction.py:444 lib/user_interaction.py:447 lib/user_interaction.py:446 lib/user_interaction/network_conf.py:70 msgid "Select which mode to configure for \"{}\" or skip to use default mode \"{}\"" msgstr "Välj vilket läge att konfigurera för \"{}\" eller använd standardläge \"{}\"" -#: lib/user_interaction.py:446 lib/user_interaction.py:449 lib/user_interaction.py:452 lib/user_interaction.py:451 lib/user_interaction/network_conf.py:75 msgid "Enter the IP and subnet for {} (example: 192.168.0.5/24): " msgstr "Mata in IP och subnät för {} (exempelvis: 192.168.0.5/24): " -#: lib/user_interaction.py:461 lib/user_interaction.py:464 lib/user_interaction.py:467 lib/user_interaction.py:466 lib/user_interaction/network_conf.py:86 msgid "Enter your gateway (router) IP address or leave blank for none: " msgstr "Mata in IP-adress till gateway (router) eller lämna tom för ingen: " -#: lib/user_interaction.py:476 lib/user_interaction.py:479 lib/user_interaction.py:482 lib/user_interaction.py:481 lib/user_interaction/network_conf.py:102 msgid "Enter your DNS servers (space separated, blank for none): " msgstr "Mata in DNS-servrar (separerade med mellanslag, lämna tom för ingen): " -#: lib/user_interaction.py:510 lib/user_interaction.py:513 lib/user_interaction.py:516 lib/user_interaction.py:515 lib/user_interaction/disk_conf.py:23 msgid "Select which filesystem your main partition should use" msgstr "Välj vilket filsystem din huvudpartition skall använda" -#: lib/user_interaction.py:556 lib/user_interaction.py:559 lib/user_interaction.py:562 lib/user_interaction.py:561 lib/user_interaction/partitioning_conf.py:64 lib/user_interaction/partitioning_conf.py:63 msgid "Current partition layout" msgstr "Nuvarande partioneringslayout" -#: lib/user_interaction.py:607 lib/user_interaction.py:614 lib/user_interaction.py:617 lib/user_interaction.py:620 lib/user_interaction.py:619 lib/user_interaction/partitioning_conf.py:145 lib/user_interaction/partitioning_conf.py:146 msgid "" "Select what to do with\n" "{}" @@ -120,23 +94,18 @@ msgstr "" "Välj vad du vill göra med\n" "{}" -#: lib/user_interaction.py:624 lib/user_interaction.py:709 lib/user_interaction.py:631 lib/user_interaction.py:716 lib/user_interaction.py:634 lib/user_interaction.py:719 lib/user_interaction.py:637 lib/user_interaction.py:722 lib/user_interaction.py:636 lib/user_interaction.py:721 lib/user_interaction/partitioning_conf.py:162 lib/user_interaction/partitioning_conf.py:255 lib/user_interaction/partitioning_conf.py:165 lib/user_interaction/partitioning_conf.py:260 msgid "Enter a desired filesystem type for the partition" msgstr "Mata in önskad filsystemtyp för partition" -#: lib/user_interaction.py:626 lib/user_interaction.py:633 lib/user_interaction.py:636 lib/user_interaction.py:639 lib/user_interaction.py:638 lib/user_interaction/partitioning_conf.py:164 lib/user_interaction/partitioning_conf.py:167 msgid "Enter the start sector (percentage or block number, default: {}): " msgstr "Mata in startsektor (procent eller block-nummer, standard: {}): " -#: lib/user_interaction.py:635 lib/user_interaction.py:642 lib/user_interaction.py:645 lib/user_interaction.py:648 lib/user_interaction.py:647 lib/user_interaction/partitioning_conf.py:174 lib/user_interaction/partitioning_conf.py:177 msgid "Enter the end sector of the partition (percentage or block number, ex: {}): " msgstr "Mata in slutsektor för partitionen (procent eller block-nummer, ex: {}): " -#: lib/user_interaction.py:661 lib/user_interaction.py:668 lib/user_interaction.py:671 lib/user_interaction.py:674 lib/user_interaction.py:673 lib/user_interaction/partitioning_conf.py:203 lib/user_interaction/partitioning_conf.py:208 msgid "{} contains queued partitions, this will remove those, are you sure?" msgstr "{} innehåller uppköade partitionen och detta kommer ta bort dessa. Är du säker?" -#: lib/user_interaction.py:674 lib/user_interaction.py:681 lib/user_interaction.py:684 lib/user_interaction.py:687 lib/user_interaction.py:686 lib/user_interaction/partitioning_conf.py:216 lib/user_interaction/partitioning_conf.py:221 msgid "" "{}\n" "\n" @@ -146,7 +115,6 @@ msgstr "" "\n" "Välj vilket partitionsindex du vill ta bort" -#: lib/user_interaction.py:682 lib/user_interaction.py:689 lib/user_interaction.py:692 lib/user_interaction.py:695 lib/user_interaction.py:694 lib/user_interaction/partitioning_conf.py:226 lib/user_interaction/partitioning_conf.py:231 msgid "" "{}\n" "\n" @@ -156,15 +124,12 @@ msgstr "" "\n" "Välj vilket partitionsindex du vill montera vart" -#: lib/user_interaction.py:686 lib/user_interaction.py:693 lib/user_interaction.py:696 lib/user_interaction.py:699 lib/user_interaction.py:698 lib/user_interaction/partitioning_conf.py:231 lib/user_interaction/partitioning_conf.py:236 msgid " * Partition mount-points are relative to inside the installation, the boot would be /boot as an example." msgstr "* Partitionens monteringsplats är relativa till insidan av installationen, boot är exempelvis /boot." -#: lib/user_interaction.py:687 lib/user_interaction.py:694 lib/user_interaction.py:697 lib/user_interaction.py:700 lib/user_interaction.py:699 lib/user_interaction/partitioning_conf.py:233 lib/user_interaction/partitioning_conf.py:238 msgid "Select where to mount partition (leave blank to remove mountpoint): " msgstr "Välj vart du vill montera partitionen (lämna tom för att ta bort montering): " -#: lib/user_interaction.py:698 lib/user_interaction.py:705 lib/user_interaction.py:708 lib/user_interaction.py:711 lib/user_interaction.py:710 lib/user_interaction/partitioning_conf.py:244 lib/user_interaction/partitioning_conf.py:249 msgid "" "{}\n" "\n" @@ -174,7 +139,6 @@ msgstr "" "\n" "Välj vilken partition som skall markeras för formatering" -#: lib/user_interaction.py:717 lib/user_interaction.py:724 lib/user_interaction.py:727 lib/user_interaction.py:730 lib/user_interaction.py:729 lib/user_interaction/partitioning_conf.py:265 lib/user_interaction/partitioning_conf.py:270 msgid "" "{}\n" "\n" @@ -184,7 +148,6 @@ msgstr "" "\n" "Välj vilken partition som skall markeras för kryptering" -#: lib/user_interaction.py:725 lib/user_interaction.py:732 lib/user_interaction.py:735 lib/user_interaction.py:738 lib/user_interaction.py:737 lib/user_interaction/partitioning_conf.py:274 lib/user_interaction/partitioning_conf.py:279 msgid "" "{}\n" "\n" @@ -194,7 +157,6 @@ msgstr "" "\n" "Välj vilken partition som skall markeras som bootbar" -#: lib/user_interaction.py:732 lib/user_interaction.py:739 lib/user_interaction.py:742 lib/user_interaction.py:745 lib/user_interaction.py:744 lib/user_interaction/partitioning_conf.py:282 lib/user_interaction/partitioning_conf.py:287 msgid "" "{}\n" "\n" @@ -204,55 +166,42 @@ msgstr "" "\n" "Välj vilken partition som du vill välja filsystem till" -#: lib/user_interaction.py:739 lib/user_interaction.py:746 lib/user_interaction.py:749 lib/user_interaction.py:752 lib/user_interaction.py:751 lib/user_interaction/partitioning_conf.py:289 lib/user_interaction/partitioning_conf.py:294 msgid "Enter a desired filesystem type for the partition: " msgstr "Mata in ett önskat filsystem för partitionen: " -#: lib/user_interaction.py:760 lib/menu/selection_menu.py:141 lib/user_interaction.py:767 lib/menu/selection_menu.py:139 lib/menu/selection_menu.py:143 lib/user_interaction.py:770 lib/user_interaction.py:773 lib/user_interaction.py:772 lib/menu/selection_menu.py:407 lib/menu/selection_menu.py:415 lib/menu/selection_menu.py:17 lib/user_interaction/general_conf.py:105 lib/user_interaction/global_menu.py:43 lib/menu/selection_menu.py:53 lib/menu/selection_menu.py:463 lib/menu/global_menu.py:43 msgid "Select Archinstall language" msgstr "Välj språk för detta gränssnitt" -#: lib/user_interaction.py:765 lib/user_interaction.py:772 lib/user_interaction.py:775 lib/user_interaction.py:778 lib/user_interaction.py:777 lib/user_interaction/disk_conf.py:40 msgid "Wipe all selected drives and use a best-effort default partition layout" msgstr "Töm alla partitioner och använd en generiskt rekommenderad partitionslayout." -#: lib/user_interaction.py:766 lib/user_interaction.py:773 lib/user_interaction.py:776 lib/user_interaction.py:779 lib/user_interaction.py:778 lib/user_interaction/disk_conf.py:41 msgid "Select what to do with each individual drive (followed by partition usage)" msgstr "Välj vad som skall hända med varje individuell hårddisk (följt av partitionsanvändning)" -#: lib/user_interaction.py:769 lib/user_interaction.py:770 lib/user_interaction.py:777 lib/user_interaction.py:780 lib/user_interaction.py:783 lib/user_interaction.py:782 lib/user_interaction/disk_conf.py:45 msgid "Select what you wish to do with the selected block devices" msgstr "Välj vad du önskar göra med valda hårddiskarna" -#: lib/user_interaction.py:822 lib/user_interaction.py:823 lib/user_interaction.py:830 lib/user_interaction.py:833 lib/user_interaction.py:836 lib/user_interaction.py:835 lib/user_interaction/general_conf.py:126 msgid "This is a list of pre-programmed profiles, they might make it easier to install things like desktop environments" msgstr "Detta är en lista med förprogrammerade profiler, dom kan göra installation av exempelvis skrivbordsmiljöer lite enklare." -#: lib/user_interaction.py:846 lib/user_interaction.py:847 lib/user_interaction.py:854 lib/user_interaction.py:857 lib/user_interaction.py:860 lib/user_interaction.py:859 lib/user_interaction/general_conf.py:71 msgid "Select Keyboard layout" msgstr "Välj tangentbordslayout" -#: lib/user_interaction.py:861 lib/user_interaction.py:862 lib/user_interaction.py:869 lib/user_interaction.py:872 lib/user_interaction.py:875 lib/user_interaction.py:874 lib/user_interaction/general_conf.py:92 msgid "Select one of the regions to download packages from" msgstr "Välj en av regionerna för att ladda ner paket ifrån" -#: lib/user_interaction.py:883 lib/user_interaction.py:884 lib/user_interaction.py:891 lib/user_interaction.py:894 lib/user_interaction.py:897 lib/user_interaction.py:896 lib/user_interaction/system_conf.py:52 msgid "Select one or more hard drives to use and configure" msgstr "Välj en eller flera hårddiskar som skall användas och konfigureras" -#: lib/user_interaction.py:910 lib/user_interaction.py:911 lib/user_interaction.py:918 lib/user_interaction.py:921 lib/user_interaction.py:924 lib/user_interaction.py:923 lib/user_interaction/system_conf.py:80 msgid "For the best compatibility with your AMD hardware, you may want to use either the all open-source or AMD / ATI options." msgstr "För bästa kompabilitet med din AMD-hårdvara, vill du förmodligen använda antingen \"open-source\" eller \"AMD/ATI\" valet." -#: lib/user_interaction.py:912 lib/user_interaction.py:913 lib/user_interaction.py:920 lib/user_interaction.py:923 lib/user_interaction.py:926 lib/user_interaction.py:925 lib/user_interaction/system_conf.py:84 msgid "For the best compatibility with your Intel hardware, you may want to use either the all open-source or Intel options.\n" msgstr "För bästa kompabilitet med din Intel-hårdvara, vill du förmodligen använda antingen \"open-source\" eller \"Intel\" valet.\n" -#: lib/user_interaction.py:914 lib/user_interaction.py:915 lib/user_interaction.py:922 lib/user_interaction.py:925 lib/user_interaction.py:928 lib/user_interaction.py:927 lib/user_interaction/system_conf.py:88 msgid "For the best compatibility with your Nvidia hardware, you may want to use the Nvidia proprietary driver.\n" msgstr "För bästa kompabilitet med din nVidia-hårdvara, vill du förmodligen använda antingen \"nVidia priprieetary driver\".\n" -#: lib/user_interaction.py:917 lib/user_interaction.py:918 lib/user_interaction.py:925 lib/user_interaction.py:928 lib/user_interaction.py:931 lib/user_interaction.py:930 lib/user_interaction/system_conf.py:92 msgid "" "\n" "\n" @@ -262,123 +211,93 @@ msgstr "" "\n" "Välj en grafikdrivrutin eller lämna blank för att installera alla med publika drivrutiner" -#: lib/user_interaction.py:921 lib/user_interaction.py:922 lib/user_interaction.py:929 lib/user_interaction.py:932 lib/user_interaction.py:935 lib/user_interaction.py:934 lib/user_interaction/system_conf.py:96 msgid "All open-source (default)" msgstr "Alla med öppen mjukvara (standardvalet)" -#: lib/user_interaction.py:940 lib/user_interaction.py:941 lib/user_interaction.py:948 lib/user_interaction.py:951 lib/user_interaction.py:954 lib/user_interaction.py:953 lib/user_interaction/system_conf.py:28 msgid "Choose which kernels to use or leave blank for default \"{}\"" msgstr "Välj vilken Linux-kernel du vill använda, lämna tomt för att använda \"{}\"" -#: lib/user_interaction.py:954 lib/user_interaction.py:955 lib/user_interaction.py:962 lib/user_interaction.py:965 lib/user_interaction.py:968 lib/user_interaction.py:967 lib/user_interaction/locale_conf.py:16 msgid "Choose which locale language to use" msgstr "Välj vilket språk du vill använda" -#: lib/user_interaction.py:968 lib/user_interaction.py:969 lib/user_interaction.py:976 lib/user_interaction.py:979 lib/user_interaction.py:982 lib/user_interaction.py:981 lib/user_interaction/locale_conf.py:29 msgid "Choose which locale encoding to use" msgstr "Välj vilken teckenuppsättning du vill använda" -#: lib/user_interaction.py:1009 lib/user_interaction.py:1010 lib/user_interaction.py:1017 lib/user_interaction.py:1020 lib/user_interaction.py:1023 lib/user_interaction.py:1022 lib/user_interaction/backwards_compatible_conf.py:49 msgid "Select one of the values shown below: " msgstr "Välj en av alternativen nedan: " -#: lib/user_interaction.py:1050 lib/user_interaction.py:1051 lib/user_interaction.py:1058 lib/user_interaction.py:1061 lib/user_interaction.py:1064 lib/user_interaction.py:1063 lib/user_interaction/backwards_compatible_conf.py:88 msgid "Select one or more of the options below: " msgstr "Välj ett eller flera av följande val: " -#: lib/disk/filesystem.py:86 lib/disk/filesystem.py:87 msgid "Adding partition...." msgstr "Skapar en partition...." -#: lib/disk/filesystem.py:139 lib/disk/filesystem.py:141 lib/disk/filesystem.py:142 msgid "You need to enter a valid fs-type in order to continue. See `man parted` for valid fs-type's." msgstr "Du måste mata in en supporterad filsystem-typ för att fortsätta. Kör `man parted` för supporterade filsystem." -#: lib/profiles.py:89 lib/profiles.py:90 msgid "Error: Listing profiles on URL \"{}\" resulted in:" msgstr "Fel: Listning av profiler på \"{}\" resulterade i: " -#: lib/profiles.py:92 lib/profiles.py:93 msgid "Error: Could not decode \"{}\" result as JSON:" msgstr "Fel: Kunde inte tyda \"{}\" resultatet som JSON:" -#: lib/menu/selection_menu.py:146 lib/menu/selection_menu.py:144 lib/menu/selection_menu.py:148 lib/menu/selection_menu.py:412 lib/menu/selection_menu.py:420 lib/user_interaction/global_menu.py:48 lib/menu/selection_menu.py:468 lib/menu/global_menu.py:48 msgid "Select keyboard layout" msgstr "Välj en tangentbordslayout" -#: lib/menu/selection_menu.py:149 lib/menu/selection_menu.py:147 lib/menu/selection_menu.py:151 lib/menu/selection_menu.py:415 lib/menu/selection_menu.py:423 lib/user_interaction/global_menu.py:51 lib/menu/selection_menu.py:471 lib/menu/global_menu.py:51 msgid "Select mirror region" msgstr "Välj en region för paketsynk" -#: lib/menu/selection_menu.py:154 lib/menu/selection_menu.py:152 lib/menu/selection_menu.py:156 lib/menu/selection_menu.py:420 lib/menu/selection_menu.py:428 lib/user_interaction/global_menu.py:56 lib/menu/selection_menu.py:476 lib/menu/global_menu.py:56 msgid "Select locale language" msgstr "Välj vilket språk du vill använda" -#: lib/menu/selection_menu.py:156 lib/menu/selection_menu.py:154 lib/menu/selection_menu.py:158 lib/menu/selection_menu.py:422 lib/menu/selection_menu.py:430 lib/user_interaction/global_menu.py:58 lib/menu/selection_menu.py:478 lib/menu/global_menu.py:58 msgid "Select locale encoding" msgstr "Välj vilken teckenuppsättning du vill använda" -#: lib/menu/selection_menu.py:159 lib/menu/selection_menu.py:157 lib/menu/selection_menu.py:161 lib/menu/selection_menu.py:425 lib/menu/selection_menu.py:433 lib/user_interaction/global_menu.py:61 lib/menu/selection_menu.py:481 lib/menu/global_menu.py:61 msgid "Select harddrives" msgstr "Välj hårddiskar" -#: lib/menu/selection_menu.py:163 lib/menu/selection_menu.py:161 lib/menu/selection_menu.py:165 lib/menu/selection_menu.py:429 lib/menu/selection_menu.py:437 lib/user_interaction/global_menu.py:65 lib/menu/selection_menu.py:485 lib/menu/global_menu.py:65 msgid "Select disk layout" msgstr "Välj hårddisk-layout" -#: lib/menu/selection_menu.py:171 lib/menu/selection_menu.py:169 lib/menu/selection_menu.py:173 lib/menu/selection_menu.py:437 lib/menu/selection_menu.py:445 lib/user_interaction/global_menu.py:73 lib/menu/selection_menu.py:493 lib/menu/global_menu.py:73 msgid "Set encryption password" msgstr "Välj ett krypterings-lösenord" -#: lib/menu/selection_menu.py:177 lib/menu/selection_menu.py:175 lib/menu/selection_menu.py:179 lib/menu/selection_menu.py:443 lib/menu/selection_menu.py:451 lib/user_interaction/global_menu.py:79 lib/menu/selection_menu.py:499 lib/menu/global_menu.py:79 msgid "Use swap" msgstr "Använda 'swap'?" -#: lib/menu/selection_menu.py:182 lib/menu/selection_menu.py:180 lib/menu/selection_menu.py:184 lib/menu/selection_menu.py:448 lib/menu/selection_menu.py:456 lib/user_interaction/global_menu.py:84 lib/menu/selection_menu.py:504 lib/menu/global_menu.py:84 msgid "Select bootloader" msgstr "Välj en boot-loader" -#: lib/menu/selection_menu.py:188 lib/menu/selection_menu.py:186 lib/menu/selection_menu.py:190 lib/menu/selection_menu.py:454 lib/menu/selection_menu.py:462 lib/user_interaction/global_menu.py:95 lib/menu/selection_menu.py:515 lib/menu/global_menu.py:95 msgid "Set root password" msgstr "Välj ett root-lösenord" -#: lib/menu/selection_menu.py:193 lib/menu/selection_menu.py:191 lib/menu/selection_menu.py:195 lib/menu/selection_menu.py:459 lib/menu/selection_menu.py:467 lib/user_interaction/global_menu.py:100 lib/menu/selection_menu.py:520 lib/menu/global_menu.py:100 msgid "Specify superuser account" msgstr "Skapa superanvändar-konto" -#: lib/menu/selection_menu.py:199 lib/menu/selection_menu.py:197 lib/menu/selection_menu.py:201 lib/menu/selection_menu.py:465 lib/menu/selection_menu.py:473 lib/user_interaction/global_menu.py:107 lib/menu/selection_menu.py:528 lib/menu/global_menu.py:107 msgid "Specify user account" msgstr "Skapa användarkonto" -#: lib/menu/selection_menu.py:205 lib/menu/selection_menu.py:203 lib/menu/selection_menu.py:207 lib/menu/selection_menu.py:471 lib/menu/selection_menu.py:479 lib/user_interaction/global_menu.py:114 lib/menu/selection_menu.py:535 lib/menu/global_menu.py:114 msgid "Specify profile" msgstr "Välj en profil" -#: lib/menu/selection_menu.py:210 lib/menu/selection_menu.py:208 lib/menu/selection_menu.py:212 lib/menu/selection_menu.py:476 lib/menu/selection_menu.py:484 lib/user_interaction/global_menu.py:119 lib/menu/selection_menu.py:540 lib/menu/global_menu.py:119 msgid "Select audio" msgstr "Välj ljud mjukvara" -#: lib/menu/selection_menu.py:214 lib/menu/selection_menu.py:212 lib/menu/selection_menu.py:216 lib/menu/selection_menu.py:480 lib/menu/selection_menu.py:488 lib/user_interaction/global_menu.py:123 lib/menu/selection_menu.py:544 lib/menu/global_menu.py:123 msgid "Select kernels" msgstr "Välj Linux-kernel" -#: lib/menu/selection_menu.py:219 lib/menu/selection_menu.py:217 lib/menu/selection_menu.py:221 lib/menu/selection_menu.py:485 lib/menu/selection_menu.py:493 lib/user_interaction/global_menu.py:128 lib/menu/selection_menu.py:549 lib/menu/global_menu.py:128 msgid "Additional packages to install" msgstr "Välj extra paket att installera" -#: lib/menu/selection_menu.py:224 lib/menu/selection_menu.py:222 lib/menu/selection_menu.py:226 lib/menu/selection_menu.py:490 lib/menu/selection_menu.py:498 lib/user_interaction/global_menu.py:139 lib/menu/selection_menu.py:560 lib/menu/global_menu.py:139 msgid "Configure network" msgstr "Konfigurera nätverk" -#: lib/menu/selection_menu.py:232 lib/menu/selection_menu.py:230 lib/menu/selection_menu.py:234 lib/menu/selection_menu.py:498 lib/menu/selection_menu.py:506 lib/user_interaction/global_menu.py:150 lib/menu/selection_menu.py:571 lib/menu/global_menu.py:150 msgid "Set automatic time sync (NTP)" msgstr "Aktivera automatisk tidssynk (NTP)" -#: lib/menu/selection_menu.py:310 lib/menu/selection_menu.py:308 lib/menu/selection_menu.py:315 lib/menu/selection_menu.py:527 lib/menu/selection_menu.py:535 lib/user_interaction/global_menu.py:187 lib/menu/selection_menu.py:608 lib/menu/global_menu.py:187 msgid "Install ({} config(s) missing)" msgstr "Installera ({} inställningar saknas)" -#: lib/menu/selection_menu.py:373 lib/menu/selection_menu.py:371 lib/menu/selection_menu.py:378 lib/menu/selection_menu.py:591 lib/menu/selection_menu.py:599 lib/user_interaction/global_menu.py:249 lib/menu/selection_menu.py:669 lib/menu/global_menu.py:249 msgid "" "You decided to skip harddrive selection\n" "and will use whatever drive-setup is mounted at {} (experimental)\n" @@ -390,67 +309,51 @@ msgstr "" "Varning: Archinstall kommer inte kontrollera lämpligheten i diskvalet.\n" "Vill du fortsätta?" -#: lib/disk/filesystem.py:97 lib/disk/filesystem.py:98 msgid "Re-using partition instance: {}" msgstr "Återanvänder disk-instans: {}" -#: lib/user_interaction.py:590 lib/user_interaction.py:593 lib/user_interaction.py:596 lib/user_interaction.py:595 lib/user_interaction/partitioning_conf.py:119 lib/user_interaction/partitioning_conf.py:120 msgid "Create a new partition" msgstr "Skapa en ny partition" -#: lib/user_interaction.py:592 lib/user_interaction.py:595 lib/user_interaction.py:598 lib/user_interaction.py:597 lib/user_interaction/partitioning_conf.py:121 lib/user_interaction/partitioning_conf.py:122 msgid "Delete a partition" msgstr "Ta bort en partition" -#: lib/user_interaction.py:593 lib/user_interaction.py:596 lib/user_interaction.py:599 lib/user_interaction.py:598 lib/user_interaction/partitioning_conf.py:122 lib/user_interaction/partitioning_conf.py:123 msgid "Clear/Delete all partitions" msgstr "Ränsa alla partitioner" -#: lib/user_interaction.py:594 lib/user_interaction.py:597 lib/user_interaction.py:600 lib/user_interaction.py:599 lib/user_interaction/partitioning_conf.py:123 lib/user_interaction/partitioning_conf.py:124 msgid "Assign mount-point for a partition" msgstr "Välj monteringspunkt för en partition" -#: lib/user_interaction.py:595 lib/user_interaction.py:598 lib/user_interaction.py:601 lib/user_interaction.py:600 lib/user_interaction/partitioning_conf.py:124 lib/user_interaction/partitioning_conf.py:125 msgid "Mark/Unmark a partition to be formatted (wipes data)" msgstr "Markera/Avmarkera en partition för formatering (tar bort alla data)" -#: lib/user_interaction.py:596 lib/user_interaction.py:599 lib/user_interaction.py:602 lib/user_interaction.py:601 lib/user_interaction/partitioning_conf.py:125 lib/user_interaction/partitioning_conf.py:126 msgid "Mark/Unmark a partition as encrypted" msgstr "Markera/Avmarkera en partition för att bli krypterad" -#: lib/user_interaction.py:597 lib/user_interaction.py:600 lib/user_interaction.py:603 lib/user_interaction.py:602 lib/user_interaction/partitioning_conf.py:126 lib/user_interaction/partitioning_conf.py:127 msgid "Mark/Unmark a partition as bootable (automatic for /boot)" msgstr "Markera/Avmarkera en partition som bootbar (automatiskt gjort för /boot)" -#: lib/user_interaction.py:598 lib/user_interaction.py:601 lib/user_interaction.py:604 lib/user_interaction.py:603 lib/user_interaction/partitioning_conf.py:127 lib/user_interaction/partitioning_conf.py:128 msgid "Set desired filesystem for a partition" msgstr "Sätt önskat filsystem för partitionen" -#: lib/menu/selection_menu.py:239 lib/menu/selection_menu.py:237 lib/menu/selection_menu.py:241 lib/menu/selection_menu.py:270 lib/menu/selection_menu.py:507 lib/menu/selection_menu.py:515 lib/user_interaction/global_menu.py:167 lib/menu/selection_menu.py:588 lib/menu/global_menu.py:167 msgid "Abort" msgstr "Avbryt" -#: lib/menu/selection_menu.py:183 lib/menu/selection_menu.py:187 lib/menu/selection_menu.py:451 lib/menu/selection_menu.py:459 lib/user_interaction/global_menu.py:89 lib/menu/selection_menu.py:509 lib/menu/global_menu.py:89 msgid "Specify hostname" msgstr "Sätt ett önskat 'hostname'" -#: lib/menu/selection_menu.py:228 lib/menu/selection_menu.py:492 lib/menu/selection_menu.py:500 lib/user_interaction/global_menu.py:141 lib/menu/selection_menu.py:562 lib/menu/global_menu.py:141 msgid "Not configured, unavailable unless setup manually" msgstr "Inte konfigurerad, otillgängligt utan manuell konfigurering" -#: lib/menu/selection_menu.py:231 lib/menu/selection_menu.py:495 lib/menu/selection_menu.py:503 lib/user_interaction/global_menu.py:145 lib/menu/selection_menu.py:566 lib/menu/global_menu.py:145 msgid "Select timezone" msgstr "Välj en tidszon" -#: lib/menu/selection_menu.py:266 lib/menu/selection_menu.py:276 lib/menu/selection_menu.py:312 msgid "Set/Modify the below options" msgstr "Sätt eller modifiera nedan alternativ" -#: lib/menu/selection_menu.py:272 msgid "Install" msgstr "Installera" -#: lib/menu/menu.py:68 lib/menu/menu.py:75 lib/menu/menu.py:119 msgid "" "Use ESC to skip\n" "\n" @@ -458,43 +361,33 @@ msgstr "" "Använd ESC för att hoppa över\n" "\n" -#: lib/user_interaction.py:591 lib/user_interaction.py:594 lib/user_interaction.py:597 lib/user_interaction.py:596 lib/user_interaction/partitioning_conf.py:120 lib/user_interaction/partitioning_conf.py:121 msgid "Suggest partition layout" msgstr "Rekommendera en disk-layout" -#: lib/user_interaction.py:101 lib/user_interaction/utils.py:43 msgid "Enter a password: " msgstr "Mata in ett lösenord: " -#: lib/disk/filesystem.py:117 lib/disk/filesystem.py:118 msgid "Enter a encryption password for {}" msgstr "Mata in ett krypterings-lösenord för {}" -#: lib/menu/selection_menu.py:174 lib/menu/selection_menu.py:567 lib/menu/selection_menu.py:575 lib/user_interaction/global_menu.py:225 lib/menu/selection_menu.py:646 lib/menu/global_menu.py:225 msgid "Enter disk encryption password (leave blank for no encryption): " msgstr "Mata in ett disk-krypteringslösenord (lämna blankt för att hoppa över kryptering): " -#: lib/menu/selection_menu.py:407 lib/menu/selection_menu.py:617 lib/menu/selection_menu.py:625 msgid "Create a required super-user with sudo privileges: " msgstr "Skapa ett super-användarkonto med sudo-rättigheter (detta är ett krav): " -#: lib/menu/selection_menu.py:347 lib/menu/selection_menu.py:554 lib/menu/selection_menu.py:562 lib/user_interaction/global_menu.py:220 lib/menu/selection_menu.py:641 lib/menu/global_menu.py:220 msgid "Enter root password (leave blank to disable root): " msgstr "Mata in ett root-lösenord (lämna blankt för att deaktivera kontot)" -#: lib/user_interaction.py:307 lib/user_interaction.py:324 lib/user_interaction/manage_users_conf.py:86 lib/user_interaction/manage_users_conf.py:121 msgid "Password for user \"{}\": " msgstr "Lösenord för användare \"{}\": " -#: lib/user_interaction.py:405 lib/user_interaction.py:408 lib/user_interaction.py:407 lib/user_interaction/general_conf.py:152 msgid "Verifying that additional packages exist (this might take a few seconds)" msgstr "Verifierar att valda paket existerar (detta kan ta några sekunder)" -#: lib/user_interaction.py:281 lib/user_interaction/general_conf.py:22 msgid "Would you like to use automatic time synchronization (NTP) with the default time servers?\n" msgstr "Skulle du vilja använda automatisk tidssynkronisering (NTP) med standard-tidsservrar?\n" -#: lib/user_interaction.py:282 lib/user_interaction/general_conf.py:23 msgid "" "Hardware time and other post-configuration steps might be required in order for NTP to work.\n" "For more information, please check the Arch wiki" @@ -502,154 +395,102 @@ msgstr "" "Hårdvaru-tid och annan efterkonfigurering kan behövas för att NTP skall fungera korrekt.\n" "För mer information, se Arch Wiki-sidan." -#: lib/menu/selection_menu.py:411 lib/menu/selection_menu.py:621 lib/menu/selection_menu.py:629 msgid "Enter a username to create an additional user (leave blank to skip): " msgstr "Mata in ett användarnamn för att skapa ytterligare användare (lämna tom för att hoppa över): " -#: lib/menu/menu.py:116 #, fuzzy msgid "Use ESC to skip\n" msgstr "" "Använd ESC för att hoppa över\n" "\n" -#: lib/menu/list_manager.py:117 msgid "" "\n" " Choose an object from the list, and select one of the available actions for it to execute" msgstr "" -#: lib/menu/list_manager.py:130 lib/user_interaction/subvolume_config.py:90 msgid "Cancel" msgstr "" -#: lib/menu/list_manager.py:131 #, fuzzy msgid "Confirm and exit" msgstr "Konfigurera nätverk" -#: lib/menu/list_manager.py:135 lib/menu/list_manager.py:228 lib/menu/list_manager.py:251 lib/menu/list_manager.py:276 lib/user_interaction/subvolume_config.py:12 lib/user_interaction/subvolume_config.py:44 lib/user_interaction/subvolume_config.py:78 lib/user_interaction/subvolume_config.py:82 lib/user_interaction/subvolume_config.py:85 msgid "Add" msgstr "" -#: lib/menu/list_manager.py:135 lib/menu/list_manager.py:231 lib/menu/list_manager.py:255 lib/user_interaction/subvolume_config.py:78 msgid "Copy" msgstr "" -#: lib/menu/list_manager.py:135 lib/menu/list_manager.py:237 lib/menu/list_manager.py:261 lib/user_interaction/subvolume_config.py:82 lib/user_interaction/subvolume_config.py:85 msgid "Edit" msgstr "" -#: lib/menu/list_manager.py:135 lib/menu/list_manager.py:242 lib/menu/list_manager.py:264 lib/user_interaction/subvolume_config.py:40 msgid "Delete" msgstr "" -#: lib/menu/list_manager.py:185 #, fuzzy msgid "Select an action for < {} >" msgstr "" "Välj vad du vill göra med\n" "{}" -#: lib/menu/list_manager.py:229 -msgid "Add :" -msgstr "" - -#: lib/menu/list_manager.py:233 -msgid "Copy to :" -msgstr "" - -#: lib/menu/list_manager.py:240 -msgid "Edite :" -msgstr "" - -#: lib/menu/list_manager.py:252 -msgid "Key :" -msgstr "" - -#: lib/menu/list_manager.py:253 -msgid "Value :" -msgstr "" - -#: lib/menu/list_manager.py:257 msgid "Copy to new key:" msgstr "" -#: lib/menu/list_manager.py:262 -#, python-brace-format -msgid "Edit {origkey} :" -msgstr "" - -#: lib/models/network_configuration.py:53 lib/models/network_configuration.py:74 msgid "Unknown nic type: {}. Possible values are {}" msgstr "" -#: lib/configuration.py:75 msgid "" "\n" "This is your chosen configuration:" msgstr "" -#: lib/pacman.py:18 msgid "Pacman is already running, waiting maximum 10 minutes for it to terminate." msgstr "" -#: lib/pacman.py:25 msgid "Pre-existing pacman lock never exited. Please clean up any existing pacman sessions before using archinstall." msgstr "" -#: lib/user_interaction/general_conf.py:174 msgid "Choose which optional additional repositories to enable" msgstr "" -#: lib/user_interaction/manage_users_conf.py:32 -msgid "Add an user" +msgid "Add a user" msgstr "" -#: lib/user_interaction/manage_users_conf.py:33 #, fuzzy msgid "Change password" msgstr "Mata in ett lösenord: " -#: lib/user_interaction/manage_users_conf.py:34 msgid "Promote/Demote user" msgstr "" -#: lib/user_interaction/manage_users_conf.py:35 msgid "Delete User" msgstr "" -#: lib/user_interaction/manage_users_conf.py:99 msgid "" "\n" "Define a new user\n" msgstr "" -#: lib/user_interaction/manage_users_conf.py:100 msgid "User Name : " msgstr "" -#: lib/user_interaction/manage_users_conf.py:115 #, fuzzy msgid "Should {} be a superuser (sudoer)?" msgstr "Är detta en superanvändare (sudo-rättigheter)?" -#: lib/user_interaction/manage_users_conf.py:161 #, fuzzy msgid "Define users with sudo privilege: " msgstr "Skapa ett super-användarkonto med sudo-rättigheter (detta är ett krav): " -#: lib/user_interaction/network_conf.py:24 #, fuzzy msgid "No network configuration" msgstr "Kopiera nätverkskonfigurationen från ISO till installationen" -#: lib/user_interaction/partitioning_conf.py:128 lib/user_interaction/partitioning_conf.py:129 #, fuzzy msgid "Set desired subvolumes on a btrfs partition" msgstr "Sätt önskat filsystem för partitionen" -#: lib/user_interaction/partitioning_conf.py:296 lib/user_interaction/partitioning_conf.py:303 #, fuzzy msgid "" "{}\n" @@ -660,133 +501,253 @@ msgstr "" "\n" "Välj vilken partition som du vill välja filsystem till" -#: lib/user_interaction/partitioning_conf.py:305 lib/user_interaction/partitioning_conf.py:312 msgid "Manage btrfs subvolumes for current partition" msgstr "" -#: lib/user_interaction/save_conf.py:24 lib/user_interaction/save_conf.py:29 msgid "No configuration" msgstr "" -#: lib/user_interaction/save_conf.py:42 msgid "Save user configuration" msgstr "" -#: lib/user_interaction/save_conf.py:43 msgid "Save user credentials" msgstr "" -#: lib/user_interaction/save_conf.py:44 #, fuzzy msgid "Save disk layout" msgstr "Välj hårddisk-layout" -#: lib/user_interaction/save_conf.py:45 msgid "Save all" msgstr "" -#: lib/user_interaction/save_conf.py:48 #, fuzzy msgid "Choose which configuration to save" msgstr "Välj vilket språk du vill använda" -#: lib/user_interaction/save_conf.py:59 msgid "Enter a directory for the configuration(s) to be saved: " msgstr "" -#: lib/user_interaction/save_conf.py:63 msgid "Not a valid directory: {}" msgstr "" -#: lib/user_interaction/utils.py:32 msgid "The password you are using seems to be weak," msgstr "" -#: lib/user_interaction/utils.py:33 #, fuzzy msgid "are you sure you want to use it?" msgstr "Vill du verkligen avbryta?" -#: lib/user_interaction/global_menu.py:134 lib/menu/selection_menu.py:555 lib/menu/global_menu.py:134 #, fuzzy msgid "Additional repositories to enable" msgstr "Välj extra paket att installera" -#: lib/user_interaction/global_menu.py:155 lib/menu/selection_menu.py:576 lib/menu/global_menu.py:155 msgid "Save configuration" msgstr "" -#: lib/user_interaction/global_menu.py:192 lib/menu/selection_menu.py:613 lib/menu/global_menu.py:192 msgid "Missing configurations:\n" msgstr "" -#: lib/user_interaction/global_menu.py:210 lib/menu/selection_menu.py:631 lib/menu/global_menu.py:210 msgid "Either root-password or at least 1 superuser must be specified" msgstr "" -#: lib/user_interaction/global_menu.py:275 lib/menu/selection_menu.py:695 lib/menu/global_menu.py:275 #, fuzzy msgid "Manage superuser accounts: " msgstr "Skapa superanvändar-konto" -#: lib/user_interaction/global_menu.py:279 lib/menu/selection_menu.py:699 lib/menu/global_menu.py:279 #, fuzzy msgid "Manage ordinary user accounts: " msgstr "Skapa användarkonto" -#: lib/user_interaction/subvolume_config.py:17 msgid " Subvolume :{:16}" msgstr "" -#: lib/user_interaction/subvolume_config.py:19 lib/user_interaction/subvolume_config.py:22 msgid " mounted at {:16}" msgstr "" -#: lib/user_interaction/subvolume_config.py:26 msgid " with option {}" msgstr "" -#: lib/user_interaction/subvolume_config.py:46 msgid "" "\n" " Fill the desired values for a new subvolume \n" msgstr "" -#: lib/user_interaction/subvolume_config.py:77 msgid "Subvolume name " msgstr "" -#: lib/user_interaction/subvolume_config.py:81 msgid "Subvolume mountpoint" msgstr "" -#: lib/user_interaction/subvolume_config.py:84 msgid "Subvolume options" msgstr "" -#: lib/user_interaction/subvolume_config.py:87 msgid "Save" msgstr "" -#: lib/user_interaction/subvolume_config.py:121 msgid "Subvolume name :" msgstr "" -#: lib/user_interaction/subvolume_config.py:124 #, fuzzy msgid "Select a mount point :" msgstr "Välj en tidszon" -#: lib/user_interaction/subvolume_config.py:128 msgid "Select the desired subvolume options " msgstr "" -#: lib/user_interaction/manage_users_conf.py:161 #, fuzzy msgid "Define users with sudo privilege, by username: " msgstr "Skapa ett super-användarkonto med sudo-rättigheter (detta är ett krav): " -#: lib/installer.py:152 #, fuzzy msgid "[!] A log file has been created here: {}" msgstr "[!] En logg-fil har skapats här: {} {}" + +#, fuzzy +msgid "Would you like to use BTRFS subvolumes with a default structure?" +msgstr "Vill du använda GRUB istället för systemd-boot som boot-loader?" + +#, fuzzy +msgid "Would you like to use BTRFS compression?" +msgstr "Vill du använda swap under zram?" + +#, fuzzy +msgid "Would you like to create a separate partition for /home?" +msgstr "Vill du använda swap under zram?" + +msgid "The selected drives do not have the minimum capacity required for an automatic suggestion\n" +msgstr "" + +msgid "Minimum capacity for /home partition: {}GB\n" +msgstr "" + +msgid "Minimum capacity for Arch Linux partition: {}GB" +msgstr "" + +msgid "Continue" +msgstr "" + +msgid "yes" +msgstr "" + +msgid "no" +msgstr "" + +msgid "set: {}" +msgstr "" + +msgid "Manual configuration setting must be a list" +msgstr "" + +msgid "No iface specified for manual configuration" +msgstr "" + +msgid "Manual nic configuration with no auto DHCP requires an IP address" +msgstr "" + +msgid "Add interface" +msgstr "" + +msgid "Edit interface" +msgstr "" + +msgid "Delete interface" +msgstr "" + +#, fuzzy +msgid "Select interface to add" +msgstr "Välj ett nätverkskort för konfigurering" + +#, fuzzy +msgid "Manual configuration" +msgstr "Kopiera nätverkskonfigurationen från ISO till installationen" + +#, fuzzy +msgid "Mark/Unmark a partition as compressed (btrfs only)" +msgstr "Markera/Avmarkera en partition för att bli krypterad" + +msgid "The password you are using seems to be weak, are you sure you want to use it?" +msgstr "" + +msgid "Provides a selection of desktop environments and tiling window managers, e.g. gnome, kde, sway" +msgstr "" + +msgid "Select your desired desktop environment" +msgstr "" + +msgid "A very basic installation that allows you to customize Arch Linux as you see fit." +msgstr "" + +msgid "Provides a selection of various server packages to install and enable, e.g. httpd, nginx, mariadb" +msgstr "" + +msgid "Choose which servers to install, if none then a minimal installation wil be done" +msgstr "" + +msgid "Installs a minimal system as well as xorg and graphics drivers." +msgstr "" + +msgid "Press Enter to continue." +msgstr "" + +msgid "Would you like to chroot into the newly created installation and perform post-installation configuration?" +msgstr "" + +#, fuzzy +msgid "Are you sure you want to reset this setting?" +msgstr "Vill du verkligen avbryta?" + +#, fuzzy +msgid "Select one or more hard drives to use and configure\n" +msgstr "Välj en eller flera hårddiskar som skall användas och konfigureras" + +msgid "Any modifications to the existing setting will reset the disk layout!" +msgstr "" + +msgid "If you reset the harddrive selection this will also reset the current disk layout. Are you sure?" +msgstr "" + +#, fuzzy +msgid "Save and exit" +msgstr "Konfigurera nätverk" + +#, fuzzy +msgid "" +"{}\n" +"contains queued partitions, this will remove those, are you sure?" +msgstr "{} innehåller uppköade partitionen och detta kommer ta bort dessa. Är du säker?" + +#, fuzzy +msgid "No audio server" +msgstr "Välj en ljud-server" + +msgid "(default)" +msgstr "" + +#, fuzzy +msgid "Use ESC to skip" +msgstr "" +"Använd ESC för att hoppa över\n" +"\n" + +msgid "" +"Use CTRL+C to reset current selection\n" +"\n" +msgstr "" + +msgid "Copy to: " +msgstr "" + +msgid "Edit: " +msgstr "" + +msgid "Key: " +msgstr "" + +msgid "Edit {}: " +msgstr "" + +msgid "Add :" +msgstr "" + +msgid "Value :" +msgstr "" diff --git a/archinstall/locales/ur/LC_MESSAGES/base.mo b/archinstall/locales/ur/LC_MESSAGES/base.mo new file mode 100644 index 00000000..ca9e1a14 Binary files /dev/null and b/archinstall/locales/ur/LC_MESSAGES/base.mo differ diff --git a/archinstall/locales/ur/LC_MESSAGES/base.po b/archinstall/locales/ur/LC_MESSAGES/base.po new file mode 100644 index 00000000..4878c6f7 --- /dev/null +++ b/archinstall/locales/ur/LC_MESSAGES/base.po @@ -0,0 +1,762 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: ur\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 3.0.1\n" + +msgid "[!] A log file has been created here: {} {}" +msgstr "[!] یہاں ایک لاگ فائل بنائی گئی ہے: {} {}" + +msgid " Please submit this issue (and file) to https://github.com/archlinux/archinstall/issues" +msgstr " براہ کرم یہ مسئلہ (اور فائل) https://github.com/archlinux/archinstall/issues پراپلوڈکریں" + +msgid "Do you really want to abort?" +msgstr "کیا آپ واقعی بند کرنا چاہتے ہیں؟" + +msgid "And one more time for verification: " +msgstr "تصدیق کے لیے ایک بار اور:" + +msgid "Would you like to use swap on zram?" +msgstr "کیا آپ زی ریم پر سواپ استعمال کرنا چاہیں گے؟" + +msgid "Desired hostname for the installation: " +msgstr "انسٹالیشن کے لیے منتخب ہوسٹ کا نام:" + +msgid "Username for required superuser with sudo privileges: " +msgstr "sudo کے ساتھ مطلوبہ سپر یوزر کے لیے صارف نام:" + +msgid "Any additional users to install (leave blank for no users): " +msgstr "انسٹال کے لیے کوئی اضافی صارف (نہ ہونے کی صورت میں خالی چھوڑ دیں):" + +msgid "Should this user be a superuser (sudoer)?" +msgstr "کیا اس صارف کو سپر یوزر (sudoer) ہونا چاہیے؟" + +msgid "Select a timezone" +msgstr "ٹائم زون کا انتخاب کریں" + +msgid "Would you like to use GRUB as a bootloader instead of systemd-boot?" +msgstr "کیا آپ GRUB کو systemd-boot کے بجائے بوٹ لوڈر کے طور پر استعمال کرنا چاہیں گے؟" + +msgid "Choose a bootloader" +msgstr "بوٹ لوڈرکا انتخاب کریں" + +msgid "Choose an audio server" +msgstr "آڈیو سرور کا انتخاب کریں" + +msgid "Only packages such as base, base-devel, linux, linux-firmware, efibootmgr and optional profile packages are installed." +msgstr "صرف پیکیج جیسے کہ بیس، بیس ڈیول، لینکس، لینکس فرم ویئر، efibootmgr اور اختیاری پروفائل پیکجز انسٹال ہیں۔" + +msgid "If you desire a web browser, such as firefox or chromium, you may specify it in the following prompt." +msgstr "اگر آپ ویب براؤزر جیسےکہ فائر فاکس یا کرومیم چاہتے ہیں، تو آپ اسے اگلے پرامپٹ میں بتا سکتے ہیں۔" + +msgid "Write additional packages to install (space separated, leave blank to skip): " +msgstr "انسٹال کرنےکے لیے اضافی پیکجز لکھیں (الگ الگ لیکھیں، نہیں کی صورت میں خالی چھوڑیں):" + +msgid "Copy ISO network configuration to installation" +msgstr "آئی ایس او نیٹ ورک کنفیگریشن کو انسٹالیشن میں کاپی کریں" + +msgid "Use NetworkManager (necessary to configure internet graphically in GNOME and KDE)" +msgstr "نیٹ ورک مینجر کا استعمال کریں (GNOME اور KDE میں انٹرنیٹ کو گرافیکلی ترتیب دینے کے لیے ضروری ہے)" + +msgid "Select one network interface to configure" +msgstr "کنفیگر کرنے کے لیے ایک نیٹ ورک انٹرفیس منتخب کریں" + +msgid "Select which mode to configure for \"{}\" or skip to use default mode \"{}\"" +msgstr "منتخب کریں کہ کون سا موڈ \"{}\" کے لیے کنفیگر کرنا ہے یا ڈیفالٹ موڈ \"{}\" استعمال کرنے کے لیےخالی چھوڑ دیں۔" + +msgid "Enter the IP and subnet for {} (example: 192.168.0.5/24): " +msgstr "{} کے لیے IP اور ذیلی نیٹ درج کریں (مثلاً: 192.168.0.5/24):" + +msgid "Enter your gateway (router) IP address or leave blank for none: " +msgstr "اپنےگیٹ وے (راؤٹر) آئی پی ایڈریس درج کریں یا نہیں کی صورت میں خالی چھوڑیں:" + +msgid "Enter your DNS servers (space separated, blank for none): " +msgstr "اپنےڈی این ایس سرورز درج کریں (الگ الگ لیکھیں،نہیں کی صورت میں خالی چھوڑیں):" + +msgid "Select which filesystem your main partition should use" +msgstr "اپنے مین پارٹیشن کیلیے فائل سسٹم کا انتخاب کریں" + +msgid "Current partition layout" +msgstr "موجودہ پارٹیشن کی ترتیب" + +msgid "" +"Select what to do with\n" +"{}" +msgstr "" +"منتخب کریں کہ اس کا کیا کرنا ہے۔\n" +"{}" + +msgid "Enter a desired filesystem type for the partition" +msgstr "اس پارٹیشن کے لیے مطلوبہ فائل سسٹم درج کریں" + +msgid "Enter the start sector (percentage or block number, default: {}): " +msgstr "اسٹارٹ سیکٹر درج کریں (فیصد یا بلاک نمبر، ڈیفالٹ: {}):" + +msgid "Enter the end sector of the partition (percentage or block number, ex: {}): " +msgstr "پارٹیشن کا آخری سیکٹر درج کریں (فیصد یا بلاک نمبر، مثال کے طور پر: {}):" + +msgid "{} contains queued partitions, this will remove those, are you sure?" +msgstr "{} پارٹیشنزکے گروپ پر مشتمل ہے، یہ ان کو مٹا دے گا، کیا آپ پر اعتماد ہیں؟" + +msgid "" +"{}\n" +"\n" +"Select by index which partitions to delete" +msgstr "" +"{}\n" +"\n" +"انڈیکس کے ذریعہ منتخب کریں کہ کون سے پارٹیشنز کو حذف کرنا ہے" + +msgid "" +"{}\n" +"\n" +"Select by index which partition to mount where" +msgstr "" +"{}\n" +"\n" +"انڈیکس کے ذریعہ منتخب کریں کہ کون سا پارٹیشن کہاں ماؤنٹ کرنا ہے" + +msgid " * Partition mount-points are relative to inside the installation, the boot would be /boot as an example." +msgstr "* پارٹیشن ماؤنٹ پوائنٹس انسٹالیشن کی نسبت سے ہیں، بوٹ مثال کے طور /boot پرہوگا۔" + +msgid "Select where to mount partition (leave blank to remove mountpoint): " +msgstr "منتخب کریں کہ پارٹیشن کہاں ماؤنٹ کرنا ہے (ماؤنٹ پوائنٹ کو ہٹانے کے لیے جگہ خالی چھوڑیں):" + +msgid "" +"{}\n" +"\n" +"Select which partition to mask for formatting" +msgstr "" +"{}\n" +"\n" +"فارمیٹنگ کے لیے کس پارٹیشن کو ماسک کرنا ہے" + +msgid "" +"{}\n" +"\n" +"Select which partition to mark as encrypted" +msgstr "" +"{}\n" +"\n" +"منتخب کریں کہ کس پارٹیشن کو انکرپٹڈ یا خفیہ رکھنا ہے" + +msgid "" +"{}\n" +"\n" +"Select which partition to mark as bootable" +msgstr "" +"{}\n" +"\n" +"منتخب کریں کہ کس پارٹیشن کو بوٹ ایبل رکھنا ہے" + +msgid "" +"{}\n" +"\n" +"Select which partition to set a filesystem on" +msgstr "" +"{}\n" +"\n" +"فائل سسٹم کو کس پارٹیشن پر سیٹ کرنا ہے" + +msgid "Enter a desired filesystem type for the partition: " +msgstr "اس پارٹیشن کے لیے مطلوبہ فائل سسٹم درج کریں" + +msgid "Select Archinstall language" +msgstr "آرچ انسٹال کے لیے زبان کا انتخاب کریں" + +msgid "Wipe all selected drives and use a best-effort default partition layout" +msgstr "تمام منتخب ڈرائیوز کو صاف کریں اور ایک بہترین ڈیفالٹ پارٹیشن لے آؤٹ استعمال کریں" + +msgid "Select what to do with each individual drive (followed by partition usage)" +msgstr "منتخب کریں کہ ہر انفرادی ڈرائیو کے ساتھ کیا کرنا ہے (اس کے بعد پارٹیشن کا استعمال)" + +msgid "Select what you wish to do with the selected block devices" +msgstr "انتخاب کریں کہ آپ منتخب بلاک ڈیوائسز کے ساتھ کیا کرنا چاہتے ہیں" + +msgid "This is a list of pre-programmed profiles, they might make it easier to install things like desktop environments" +msgstr "یہ پہلے سے پروگرام شدہ پروفائلز کی فہرست ہے، وہ ڈیسک ٹاپ انسٹالیشن جیسی چیزوں کو آسان بناتے ہیں" + +msgid "Select Keyboard layout" +msgstr "کی بورڈ لے آؤٹ کو منتخب کریں" + +msgid "Select one of the regions to download packages from" +msgstr "پیکیجز ڈاؤن لوڈ کرنے کے لیے علاقوں میں سے ایک کو منتخب کریں" + +msgid "Select one or more hard drives to use and configure" +msgstr "استعمال کرنے اور کنفیگر کے لیے ایک یا زیادہ ہارڈ ڈرائیوز منتخب کریں" + +msgid "For the best compatibility with your AMD hardware, you may want to use either the all open-source or AMD / ATI options." +msgstr "اپنے AMD ہارڈویئر کے ساتھ بہترین مطابقت کے لیے، آپ یا تو تمام اوپن سورس یا AMD/ATI آپشنز استعمال کرنا چاہیں گے" + +msgid "For the best compatibility with your Intel hardware, you may want to use either the all open-source or Intel options.\n" +msgstr "اپنے intel ہارڈویئر کے ساتھ بہترین مطابقت کے لیے، آپ یا تو تمام اوپن سورس یا intel آپشنز استعمال کرنا چاہیں گے۔\n" + +msgid "For the best compatibility with your Nvidia hardware, you may want to use the Nvidia proprietary driver.\n" +msgstr "اپنے Nvidia ہارڈویئر کے ساتھ بہترین مطابقت کے لیے، آپ Nvidia کے ملکیتی ڈرائیور کو استعمال کرنا چاہیں گے۔\n" + +msgid "" +"\n" +"\n" +"Select a graphics driver or leave blank to install all open-source drivers" +msgstr "" +"\n" +"\n" +"\n" +"ایک گرافکس ڈرائیور منتخب کریں یا تمام اوپن سورس ڈرائیورز کو انسٹال کرنے کے لیے خالی چھوڑ دیں" + +msgid "All open-source (default)" +msgstr "سبھی اوپن سورس (ڈیفالٹ)" + +msgid "Choose which kernels to use or leave blank for default \"{}\"" +msgstr "منتخب کریں کہ کن کنلز کو استعمال کرنا ہے یا ڈیفالٹ \"{}\" کے لیے خالی چھوڑ دیں" + +msgid "Choose which locale language to use" +msgstr "منتخب کریں کہ کون سی مقامی زبان استعمال کرنی ہے" + +msgid "Choose which locale encoding to use" +msgstr "منتخب کریں کہ کون سا مقامی انکوڈنگ استعمال کرنا ہے" + +msgid "Select one of the values shown below: " +msgstr "ذیل میں دکھائی گئی قدروں میں سے ایک کو منتخب کریں:" + +msgid "Select one or more of the options below: " +msgstr "ذیل میں سے ایک یا زیادہ اختیارات کو منتخب کریں:" + +msgid "Adding partition...." +msgstr "پارٹیشن شامل ہو رہی ہے..." + +msgid "You need to enter a valid fs-type in order to continue. See `man parted` for valid fs-type's." +msgstr "جاری رکھنے کے لیے آپ کو ایک درست fs-typeدرج کرنے کی ضرورت ہے۔ درست fs-types کے لیے 'man parted' دیکھیں۔" + +msgid "Error: Listing profiles on URL \"{}\" resulted in:" +msgstr "خرابی: URL \"{}\" پر پروفائلز کی فہرست بنانے کا نتیجہ یہ ہوا:" + +msgid "Error: Could not decode \"{}\" result as JSON:" +msgstr "خرابی: \"{}\" نتیجہ کو JSON کے بطور ڈی کوڈ نہیں کیا جا سکا:" + +msgid "Select keyboard layout" +msgstr "کی بورڈ لے آؤٹ کو منتخب کریں" + +msgid "Select mirror region" +msgstr "متبادل علاقہ منتخب کریں" + +msgid "Select locale language" +msgstr "منتخب کریں کہ کون سی مقامی زبان استعمال کرنی ہے" + +msgid "Select locale encoding" +msgstr "منتخب کریں کہ کون سا مقامی انکوڈنگ استعمال کرنا ہے" + +msgid "Select harddrives" +msgstr "ہارڈ ڈرائیوز کو منتخب کریں" + +msgid "Select disk layout" +msgstr "ڈسک لے آؤٹ کو منتخب کریں" + +msgid "Set encryption password" +msgstr "انکرپشن پاس ورڈ سیٹ کریں" + +msgid "Use swap" +msgstr "سواپ کا استعمال کریں" + +msgid "Select bootloader" +msgstr "بوٹ لوڈرکا انتخاب کریں" + +msgid "Set root password" +msgstr "روٹ پاس ورڈ سیٹ کریں" + +msgid "Specify superuser account" +msgstr "سپر یوزر اکاؤنٹ کی وضاحت کریں" + +msgid "Specify user account" +msgstr "یوزر اکاؤنٹ کی وضاحت کریں" + +msgid "Specify profile" +msgstr "پروفائل کی وضاحت کریں" + +msgid "Select audio" +msgstr "آڈیو کا انتخاب کریں" + +msgid "Select kernels" +msgstr "کرنلز منتخب کریں" + +msgid "Additional packages to install" +msgstr "انسٹال کرنے کے لیے اضافی پیکجز" + +msgid "Configure network" +msgstr "نیٹ ورک ترتیب دیں" + +msgid "Set automatic time sync (NTP)" +msgstr "خودکار وقت کی مطابقت سیٹ کریں (NTP)" + +msgid "Install ({} config(s) missing)" +msgstr "انسٹال کریں ({} کنفیگریشنز غائب ہیں)" + +msgid "" +"You decided to skip harddrive selection\n" +"and will use whatever drive-setup is mounted at {} (experimental)\n" +"WARNING: Archinstall won't check the suitability of this setup\n" +"Do you wish to continue?" +msgstr "" +"آپ نے ہارڈ ڈرائیو کا انتخاب چھوڑنے کا فیصلہ کیا۔\n" +"اور جو بھی ڈرائیو سیٹ اپ {} (تجرباتی) پر ماؤنٹ کیا گیا ہے اسے استعمال کرے گا۔\n" +"انتباہ: آرچ انسٹال اس سیٹ اپ کی مناسبیت کی جانچ نہیں کرے گا۔\n" +"کیا آپ جاری رکھنا چاہتے ہیں؟" + +msgid "Re-using partition instance: {}" +msgstr "پارٹیشن کو دوبارہ استعمال کرنا: {}" + +msgid "Create a new partition" +msgstr "ایک نیا پارٹیشن بنائیں" + +msgid "Delete a partition" +msgstr "ایک پارٹیشن کو حذف کریں" + +msgid "Clear/Delete all partitions" +msgstr "تمام پارٹیشنز کو صاف/حذف کریں" + +msgid "Assign mount-point for a partition" +msgstr "پارٹیشن کے لیے ماؤنٹ پوائنٹ تفویض کریں" + +msgid "Mark/Unmark a partition to be formatted (wipes data)" +msgstr "فارمیٹ کرنے کے لیے پارٹیشن کو مارک​​ /انمارک کریں (ڈیٹا صاف کرتا ہے)" + +msgid "Mark/Unmark a partition as encrypted" +msgstr "انکرپٹڈ کرنے کے لیے پارٹیشن کو مارک​​ /انمارک کریں" + +msgid "Mark/Unmark a partition as bootable (automatic for /boot)" +msgstr "بوٹ ایبل کرنے کے لیے پارٹیشن کو مارک​​/ انمارک کریں(/boot)" + +msgid "Set desired filesystem for a partition" +msgstr "اس پارٹیشن کے لیے مطلوبہ فائل سسٹم درج کریں" + +msgid "Abort" +msgstr "ختم کریں" + +msgid "Specify hostname" +msgstr "میزبان نام کی وضاحت کریں" + +msgid "Not configured, unavailable unless setup manually" +msgstr "کنفیگر نہیں، دستیاب نہیں جب تک کہ دستی طور پر سیٹ اپ نہ کیا جائے" + +msgid "Select timezone" +msgstr "ٹائم زون کا انتخاب کریں" + +msgid "Set/Modify the below options" +msgstr "ذیل کے اختیارات کو سیٹ/ترمیم کریں" + +msgid "Install" +msgstr "انسٹال" + +msgid "" +"Use ESC to skip\n" +"\n" +msgstr "" +"چھوڑنے کے لیے ESC استعمال کریں\n" +"\n" + +msgid "Suggest partition layout" +msgstr "پارٹیشن لے آؤٹ تجویز کریں" + +msgid "Enter a password: " +msgstr "پاس ورڈ درج کریں:" + +msgid "Enter a encryption password for {}" +msgstr "{} کے لیے ایک انکرپشن پاس ورڈ درج کریں" + +msgid "Enter disk encryption password (leave blank for no encryption): " +msgstr "ڈسک انکرپشن پاس ورڈ درج کریں (انکرپشن کو غیر فعال کرنے کے لیے خالی چھوڑ دیں):" + +msgid "Create a required super-user with sudo privileges: " +msgstr "sudo مراعات کے ساتھ ایک مطلوبہ سپر صارف بنائیں:" + +msgid "Enter root password (leave blank to disable root): " +msgstr "روٹ پاس ورڈ درج کریں (روٹ کو غیر فعال کرنے کے لیے خالی چھوڑ دیں):" + +msgid "Password for user \"{}\": " +msgstr "صارف \"{}\" کے لیے پاس ورڈ:" + +msgid "Verifying that additional packages exist (this might take a few seconds)" +msgstr "اس بات کی تصدیق ہو رہی ہےکہ اضافی پیکجز موجود ہیں (اس میں چند سیکنڈ لگ سکتے ہیں)" + +msgid "Would you like to use automatic time synchronization (NTP) with the default time servers?\n" +msgstr "کیا آپ ڈیفالٹ ٹائم سرورز کے ساتھ آٹومیٹک ٹائم سنکرونائزیشن (NTP) استعمال کرنا چاہیں گے؟\n" + +msgid "" +"Hardware time and other post-configuration steps might be required in order for NTP to work.\n" +"For more information, please check the Arch wiki" +msgstr "" +"NTP کے کام کرنے کے لیے ہارڈ ویئر کا وقت اور کنفیگریشن کے بعد کے دیگر اقدامات درکار ہو سکتے ہیں۔\n" +"مزید معلومات کے لیے، براہ کرم آرک ویکی کو دیکھیں" + +msgid "Enter a username to create an additional user (leave blank to skip): " +msgstr "ایک اضافی صارف بنانے کے لیے صارف نام درج کریں (چھوڑنے کے لیے خالی چھوڑیں):" + +msgid "Use ESC to skip\n" +msgstr "چھوڑنے کے لیے ESC استعمال کریں\n" + +msgid "" +"\n" +" Choose an object from the list, and select one of the available actions for it to execute" +msgstr "" + +msgid "Cancel" +msgstr "منسوخ کریں" + +msgid "Confirm and exit" +msgstr "تصدیق کریں اور باہر نکلیں" + +msgid "Add" +msgstr "شامل" + +msgid "Copy" +msgstr "کاپی" + +msgid "Edit" +msgstr "ترمیم" + +msgid "Delete" +msgstr "حذف" + +msgid "Select an action for < {} >" +msgstr "< {} > کے لیے ایک عمل منتخب کریں" + +msgid "Copy to new key:" +msgstr "نئی کلید میں کاپی کریں:" + +msgid "Unknown nic type: {}. Possible values are {}" +msgstr "نامعلوم nic قسم: {}۔ ممکنہ قدریں ہیں {}" + +msgid "" +"\n" +"This is your chosen configuration:" +msgstr "" +"\n" +"یہ آپ کی منتخب کردہ ترتیب ہے:" + +msgid "Pacman is already running, waiting maximum 10 minutes for it to terminate." +msgstr "Pacman پہلے ہی چل رہا ہے، اس کے ختم ہونے کے لیے زیادہ سے زیادہ 10 منٹ انتظار " + +msgid "Pre-existing pacman lock never exited. Please clean up any existing pacman sessions before using archinstall." +msgstr "پہلے سے موجود پیک مین لاک کبھی نہیں نکلا۔ براہ کرم archinstall استعمال کرنے سے پہلے کسی بھی موجودہ pacman سیشن کو صاف کریں۔" + +msgid "Choose which optional additional repositories to enable" +msgstr "منتخب کریں کہ کون سے اختیاری اضافی ریپوزیٹریز کو فعال کرنا ہے" + +#, fuzzy +msgid "Add a user" +msgstr "ایک صارف شامل کریں" + +msgid "Change password" +msgstr "پاس ورڈ تبدیل کریں" + +msgid "Promote/Demote user" +msgstr "صارف کو پروموٹ/ڈیموٹ کریں" + +msgid "Delete User" +msgstr "صارف کو حذف کریں" + +msgid "" +"\n" +"Define a new user\n" +msgstr "" +"\n" +"ایک نئے صارف کی وضاحت کریں۔\n" + +msgid "User Name : " +msgstr "صارف کا نام:" + +msgid "Should {} be a superuser (sudoer)?" +msgstr "کیا {} کو سپر یوزر (sudoer) ہونا چاہیے؟" + +msgid "Define users with sudo privilege: " +msgstr "sudo استحقاق کے ساتھ صارفین کی وضاحت کریں:" + +msgid "No network configuration" +msgstr "کوئی نیٹ ورک کنفیگریشن نہیں ہے" + +#, fuzzy +msgid "Set desired subvolumes on a btrfs partition" +msgstr "اس پارٹیشن کے لیے مطلوبہ فائل سسٹم درج کریں" + +#, fuzzy +msgid "" +"{}\n" +"\n" +"Select which partition to set subvolumes on" +msgstr "" +"{}\n" +"\n" +"فائل سسٹم کو کس پارٹیشن پر سیٹ کرنا ہے" + +msgid "Manage btrfs subvolumes for current partition" +msgstr "" + +msgid "No configuration" +msgstr "کوئی کنفیگریشن نہیں" + +msgid "Save user configuration" +msgstr "صارف کنفیگریشن کو محفوظ کریں" + +msgid "Save user credentials" +msgstr "صارف کی اسناد کو محفوظ کریں" + +msgid "Save disk layout" +msgstr "ڈسک لے آؤٹ کو محفوظ کریں" + +msgid "Save all" +msgstr "سب کو محفوظ کریں" + +msgid "Choose which configuration to save" +msgstr "منتخب کریں کہ کون سی کنفیگریشن محفوظ کرنی ہے" + +msgid "Enter a directory for the configuration(s) to be saved: " +msgstr "محفوظ کیے جانے والے کنفیگریشن کے لیے ایک ڈائرکٹری درج کریں:" + +msgid "Not a valid directory: {}" +msgstr "درست ڈائریکٹری نہیں ہے: {}" + +msgid "The password you are using seems to be weak," +msgstr "آپ جو پاس ورڈ استعمال کر رہے ہیں وہ کمزور لگ رہا ہے،" + +msgid "are you sure you want to use it?" +msgstr "کیا آپ واقعی اسے استعمال کرنا چاہتے ہیں؟" + +msgid "Additional repositories to enable" +msgstr "اضافی ریپوزٹریزکو فعال" + +msgid "Save configuration" +msgstr "ترتیب کو محفوظ کریں" + +msgid "Missing configurations:\n" +msgstr "لاپتہ کنفیگریشنز:\n" + +msgid "Either root-password or at least 1 superuser must be specified" +msgstr "روٹ پاس ورڈ یا کم از کم ۱ سپر یوزر کی وضاحت ہونی چاہیے" + +msgid "Manage superuser accounts: " +msgstr "سپر یوزر اکاؤنٹس کا نظم کریں:" + +msgid "Manage ordinary user accounts: " +msgstr "عام صارف اکاؤنٹس کا نظم کریں:" + +msgid " Subvolume :{:16}" +msgstr "" + +msgid " mounted at {:16}" +msgstr "" + +msgid " with option {}" +msgstr "" + +msgid "" +"\n" +" Fill the desired values for a new subvolume \n" +msgstr "" + +msgid "Subvolume name " +msgstr "" + +msgid "Subvolume mountpoint" +msgstr "" + +msgid "Subvolume options" +msgstr "" + +#, fuzzy +msgid "Save" +msgstr "سب کو محفوظ کریں" + +msgid "Subvolume name :" +msgstr "" + +#, fuzzy +msgid "Select a mount point :" +msgstr "ٹائم زون کا انتخاب کریں" + +msgid "Select the desired subvolume options " +msgstr "" + +#, fuzzy +msgid "Define users with sudo privilege, by username: " +msgstr "sudo استحقاق کے ساتھ صارفین کی وضاحت کریں:" + +#, fuzzy +msgid "[!] A log file has been created here: {}" +msgstr "[!] یہاں ایک لاگ فائل بنائی گئی ہے: {} {}" + +#, fuzzy +msgid "Would you like to use BTRFS subvolumes with a default structure?" +msgstr "کیا آپ GRUB کو systemd-boot کے بجائے بوٹ لوڈر کے طور پر استعمال کرنا چاہیں گے؟" + +#, fuzzy +msgid "Would you like to use BTRFS compression?" +msgstr "کیا آپ زی ریم پر سواپ استعمال کرنا چاہیں گے؟" + +#, fuzzy +msgid "Would you like to create a separate partition for /home?" +msgstr "کیا آپ زی ریم پر سواپ استعمال کرنا چاہیں گے؟" + +msgid "The selected drives do not have the minimum capacity required for an automatic suggestion\n" +msgstr "" + +msgid "Minimum capacity for /home partition: {}GB\n" +msgstr "" + +msgid "Minimum capacity for Arch Linux partition: {}GB" +msgstr "" + +msgid "Continue" +msgstr "" + +msgid "yes" +msgstr "" + +msgid "no" +msgstr "" + +msgid "set: {}" +msgstr "" + +msgid "Manual configuration setting must be a list" +msgstr "" + +#, fuzzy +msgid "No iface specified for manual configuration" +msgstr "صارف کنفیگریشن کو محفوظ کریں" + +msgid "Manual nic configuration with no auto DHCP requires an IP address" +msgstr "" + +msgid "Add interface" +msgstr "" + +msgid "Edit interface" +msgstr "" + +#, fuzzy +msgid "Delete interface" +msgstr "صارف کو حذف کریں" + +#, fuzzy +msgid "Select interface to add" +msgstr "کنفیگر کرنے کے لیے ایک نیٹ ورک انٹرفیس منتخب کریں" + +#, fuzzy +msgid "Manual configuration" +msgstr "ترتیب کو محفوظ کریں" + +#, fuzzy +msgid "Mark/Unmark a partition as compressed (btrfs only)" +msgstr "انکرپٹڈ کرنے کے لیے پارٹیشن کو مارک​​ /انمارک کریں" + +#, fuzzy +msgid "The password you are using seems to be weak, are you sure you want to use it?" +msgstr "آپ جو پاس ورڈ استعمال کر رہے ہیں وہ کمزور لگ رہا ہے،" + +msgid "Provides a selection of desktop environments and tiling window managers, e.g. gnome, kde, sway" +msgstr "" + +msgid "Select your desired desktop environment" +msgstr "" + +msgid "A very basic installation that allows you to customize Arch Linux as you see fit." +msgstr "" + +msgid "Provides a selection of various server packages to install and enable, e.g. httpd, nginx, mariadb" +msgstr "" + +msgid "Choose which servers to install, if none then a minimal installation wil be done" +msgstr "" + +msgid "Installs a minimal system as well as xorg and graphics drivers." +msgstr "" + +msgid "Press Enter to continue." +msgstr "" + +msgid "Would you like to chroot into the newly created installation and perform post-installation configuration?" +msgstr "" + +#, fuzzy +msgid "Are you sure you want to reset this setting?" +msgstr "کیا آپ واقعی اسے استعمال کرنا چاہتے ہیں؟" + +#, fuzzy +msgid "Select one or more hard drives to use and configure\n" +msgstr "استعمال کرنے اور کنفیگر کے لیے ایک یا زیادہ ہارڈ ڈرائیوز منتخب کریں" + +msgid "Any modifications to the existing setting will reset the disk layout!" +msgstr "" + +msgid "If you reset the harddrive selection this will also reset the current disk layout. Are you sure?" +msgstr "" + +#, fuzzy +msgid "Save and exit" +msgstr "تصدیق کریں اور باہر نکلیں" + +#, fuzzy +msgid "" +"{}\n" +"contains queued partitions, this will remove those, are you sure?" +msgstr "{} پارٹیشنزکے گروپ پر مشتمل ہے، یہ ان کو مٹا دے گا، کیا آپ پر اعتماد ہیں؟" + +#, fuzzy +msgid "No audio server" +msgstr "آڈیو سرور کا انتخاب کریں" + +msgid "(default)" +msgstr "" + +#, fuzzy +msgid "Use ESC to skip" +msgstr "چھوڑنے کے لیے ESC استعمال کریں\n" + +msgid "" +"Use CTRL+C to reset current selection\n" +"\n" +msgstr "" + +#, fuzzy +msgid "Copy to: " +msgstr "اس میں کاپی :" + +#, fuzzy +msgid "Edit: " +msgstr "ترمیم" + +msgid "Key: " +msgstr "" + +#, fuzzy +msgid "Edit {}: " +msgstr "ترمیم:" + +msgid "Add :" +msgstr "شامل:" + +msgid "Value :" +msgstr "قدر:" + +#, python-brace-format +#~ msgid "Edit {origkey} :" +#~ msgstr "ترمیم {origkey} :" + +#~ msgid "Copy to :" +#~ msgstr "اس میں کاپی :" + +#~ msgid "Edite :" +#~ msgstr "ترمیم:" + +#~ msgid "Key :" +#~ msgstr "کلید:" + +#~ msgid "Choose an object from the list" +#~ msgstr "فہرست سے ایک آبجیکٹ منتخب کریں۔" diff --git a/archinstall/locales/ur_issue_1048/LC_MESSAGES/base.mo b/archinstall/locales/ur_issue_1048/LC_MESSAGES/base.mo deleted file mode 100644 index d5559619..00000000 Binary files a/archinstall/locales/ur_issue_1048/LC_MESSAGES/base.mo and /dev/null differ diff --git a/archinstall/locales/ur_issue_1048/LC_MESSAGES/base.po b/archinstall/locales/ur_issue_1048/LC_MESSAGES/base.po deleted file mode 100644 index 43cde5c3..00000000 --- a/archinstall/locales/ur_issue_1048/LC_MESSAGES/base.po +++ /dev/null @@ -1,783 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: \n" -"POT-Creation-Date: \n" -"PO-Revision-Date: \n" -"Last-Translator: \n" -"Language-Team: \n" -"Language: ur\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 3.0.1\n" - -#: lib/installer.py:144 lib/installer.py:152 -msgid "[!] A log file has been created here: {} {}" -msgstr "[!] یہاں ایک لاگ فائل بنائی گئی ہے: {} {}" - -#: lib/installer.py:145 lib/installer.py:153 -msgid " Please submit this issue (and file) to https://github.com/archlinux/archinstall/issues" -msgstr " براہ کرم یہ مسئلہ (اور فائل) https://github.com/archlinux/archinstall/issues پراپلوڈکریں" - -#: lib/user_interaction.py:83 lib/user_interaction/utils.py:86 -msgid "Do you really want to abort?" -msgstr "کیا آپ واقعی بند کرنا چاہتے ہیں؟" - -#: lib/user_interaction.py:101 lib/user_interaction.py:104 lib/user_interaction/utils.py:53 -msgid "And one more time for verification: " -msgstr "تصدیق کے لیے ایک بار اور:" - -#: lib/user_interaction.py:272 lib/user_interaction.py:275 lib/user_interaction/system_conf.py:142 -msgid "Would you like to use swap on zram?" -msgstr "کیا آپ زی ریم پر سواپ استعمال کرنا چاہیں گے؟" - -#: lib/user_interaction.py:285 lib/user_interaction.py:288 lib/user_interaction/general_conf.py:33 -msgid "Desired hostname for the installation: " -msgstr "انسٹالیشن کے لیے منتخب ہوسٹ کا نام:" - -#: lib/user_interaction.py:290 lib/user_interaction.py:293 -msgid "Username for required superuser with sudo privileges: " -msgstr "sudo کے ساتھ مطلوبہ سپر یوزر کے لیے صارف نام:" - -#: lib/user_interaction.py:310 lib/user_interaction.py:313 lib/user_interaction/manage_users_conf.py:167 -msgid "Any additional users to install (leave blank for no users): " -msgstr "انسٹال کے لیے کوئی اضافی صارف (نہ ہونے کی صورت میں خالی چھوڑ دیں):" - -#: lib/user_interaction.py:324 lib/user_interaction.py:327 -msgid "Should this user be a superuser (sudoer)?" -msgstr "کیا اس صارف کو سپر یوزر (sudoer) ہونا چاہیے؟" - -#: lib/user_interaction.py:340 lib/user_interaction.py:343 lib/user_interaction.py:346 lib/user_interaction/general_conf.py:41 -msgid "Select a timezone" -msgstr "ٹائم زون کا انتخاب کریں" - -#: lib/user_interaction.py:354 lib/user_interaction.py:357 lib/user_interaction.py:360 lib/user_interaction.py:359 lib/user_interaction/system_conf.py:115 -msgid "Would you like to use GRUB as a bootloader instead of systemd-boot?" -msgstr "کیا آپ GRUB کو systemd-boot کے بجائے بوٹ لوڈر کے طور پر استعمال کرنا چاہیں گے؟" - -#: lib/user_interaction.py:364 lib/user_interaction.py:367 lib/user_interaction.py:370 lib/user_interaction.py:369 lib/user_interaction/system_conf.py:125 -msgid "Choose a bootloader" -msgstr "بوٹ لوڈرکا انتخاب کریں" - -#: lib/user_interaction.py:380 lib/user_interaction.py:383 lib/user_interaction.py:386 lib/user_interaction.py:385 lib/user_interaction/general_conf.py:53 -msgid "Choose an audio server" -msgstr "آڈیو سرور کا انتخاب کریں" - -#: lib/user_interaction.py:391 lib/user_interaction.py:394 lib/user_interaction.py:397 lib/user_interaction.py:396 lib/user_interaction/general_conf.py:138 -msgid "Only packages such as base, base-devel, linux, linux-firmware, efibootmgr and optional profile packages are installed." -msgstr "صرف پیکیج جیسے کہ بیس، بیس ڈیول، لینکس، لینکس فرم ویئر، efibootmgr اور اختیاری پروفائل پیکجز انسٹال ہیں۔" - -#: lib/user_interaction.py:392 lib/user_interaction.py:395 lib/user_interaction.py:398 lib/user_interaction.py:397 lib/user_interaction/general_conf.py:139 -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:396 lib/user_interaction.py:399 lib/user_interaction.py:402 lib/user_interaction.py:401 lib/user_interaction/general_conf.py:143 -msgid "Write additional packages to install (space separated, leave blank to skip): " -msgstr "انسٹال کرنےکے لیے اضافی پیکجز لکھیں (الگ الگ لیکھیں، نہیں کی صورت میں خالی چھوڑیں):" - -#: lib/user_interaction.py:419 lib/user_interaction.py:422 lib/user_interaction.py:425 lib/user_interaction.py:424 lib/user_interaction/network_conf.py:25 -msgid "Copy ISO network configuration to installation" -msgstr "آئی ایس او نیٹ ورک کنفیگریشن کو انسٹالیشن میں کاپی کریں" - -#: lib/user_interaction.py:420 lib/user_interaction.py:423 lib/user_interaction.py:426 lib/user_interaction.py:425 lib/user_interaction/network_conf.py:26 -msgid "Use NetworkManager (necessary to configure internet graphically in GNOME and KDE)" -msgstr "نیٹ ورک مینجر کا استعمال کریں (GNOME اور KDE میں انٹرنیٹ کو گرافیکلی ترتیب دینے کے لیے ضروری ہے)" - -#: lib/user_interaction.py:428 lib/user_interaction.py:431 lib/user_interaction.py:434 lib/user_interaction.py:433 lib/user_interaction/network_conf.py:43 -msgid "Select one network interface to configure" -msgstr "کنفیگر کرنے کے لیے ایک نیٹ ورک انٹرفیس منتخب کریں" - -#: lib/user_interaction.py:441 lib/user_interaction.py:444 lib/user_interaction.py:447 lib/user_interaction.py:446 lib/user_interaction/network_conf.py:70 -msgid "Select which mode to configure for \"{}\" or skip to use default mode \"{}\"" -msgstr "منتخب کریں کہ کون سا موڈ \"{}\" کے لیے کنفیگر کرنا ہے یا ڈیفالٹ موڈ \"{}\" استعمال کرنے کے لیےخالی چھوڑ دیں۔" - -#: lib/user_interaction.py:446 lib/user_interaction.py:449 lib/user_interaction.py:452 lib/user_interaction.py:451 lib/user_interaction/network_conf.py:75 -msgid "Enter the IP and subnet for {} (example: 192.168.0.5/24): " -msgstr "{} کے لیے IP اور ذیلی نیٹ درج کریں (مثلاً: 192.168.0.5/24):" - -#: lib/user_interaction.py:461 lib/user_interaction.py:464 lib/user_interaction.py:467 lib/user_interaction.py:466 lib/user_interaction/network_conf.py:86 -msgid "Enter your gateway (router) IP address or leave blank for none: " -msgstr "اپنےگیٹ وے (راؤٹر) آئی پی ایڈریس درج کریں یا نہیں کی صورت میں خالی چھوڑیں:" - -#: lib/user_interaction.py:476 lib/user_interaction.py:479 lib/user_interaction.py:482 lib/user_interaction.py:481 lib/user_interaction/network_conf.py:102 -msgid "Enter your DNS servers (space separated, blank for none): " -msgstr "اپنےڈی این ایس سرورز درج کریں (الگ الگ لیکھیں،نہیں کی صورت میں خالی چھوڑیں):" - -#: lib/user_interaction.py:510 lib/user_interaction.py:513 lib/user_interaction.py:516 lib/user_interaction.py:515 lib/user_interaction/disk_conf.py:23 -msgid "Select which filesystem your main partition should use" -msgstr "اپنے مین پارٹیشن کیلیے فائل سسٹم کا انتخاب کریں" - -#: lib/user_interaction.py:556 lib/user_interaction.py:559 lib/user_interaction.py:562 lib/user_interaction.py:561 lib/user_interaction/partitioning_conf.py:64 lib/user_interaction/partitioning_conf.py:63 -msgid "Current partition layout" -msgstr "موجودہ پارٹیشن کی ترتیب" - -#: lib/user_interaction.py:607 lib/user_interaction.py:614 lib/user_interaction.py:617 lib/user_interaction.py:620 lib/user_interaction.py:619 lib/user_interaction/partitioning_conf.py:145 lib/user_interaction/partitioning_conf.py:146 -msgid "" -"Select what to do with\n" -"{}" -msgstr "" -"منتخب کریں کہ اس کا کیا کرنا ہے۔\n" -"{}" - -#: lib/user_interaction.py:624 lib/user_interaction.py:709 lib/user_interaction.py:631 lib/user_interaction.py:716 lib/user_interaction.py:634 lib/user_interaction.py:719 lib/user_interaction.py:637 lib/user_interaction.py:722 lib/user_interaction.py:636 lib/user_interaction.py:721 lib/user_interaction/partitioning_conf.py:162 lib/user_interaction/partitioning_conf.py:255 lib/user_interaction/partitioning_conf.py:165 lib/user_interaction/partitioning_conf.py:260 -msgid "Enter a desired filesystem type for the partition" -msgstr "اس پارٹیشن کے لیے مطلوبہ فائل سسٹم درج کریں" - -#: lib/user_interaction.py:626 lib/user_interaction.py:633 lib/user_interaction.py:636 lib/user_interaction.py:639 lib/user_interaction.py:638 lib/user_interaction/partitioning_conf.py:164 lib/user_interaction/partitioning_conf.py:167 -msgid "Enter the start sector (percentage or block number, default: {}): " -msgstr "اسٹارٹ سیکٹر درج کریں (فیصد یا بلاک نمبر، ڈیفالٹ: {}):" - -#: lib/user_interaction.py:635 lib/user_interaction.py:642 lib/user_interaction.py:645 lib/user_interaction.py:648 lib/user_interaction.py:647 lib/user_interaction/partitioning_conf.py:174 lib/user_interaction/partitioning_conf.py:177 -msgid "Enter the end sector of the partition (percentage or block number, ex: {}): " -msgstr "پارٹیشن کا آخری سیکٹر درج کریں (فیصد یا بلاک نمبر، مثال کے طور پر: {}):" - -#: lib/user_interaction.py:661 lib/user_interaction.py:668 lib/user_interaction.py:671 lib/user_interaction.py:674 lib/user_interaction.py:673 lib/user_interaction/partitioning_conf.py:203 lib/user_interaction/partitioning_conf.py:208 -msgid "{} contains queued partitions, this will remove those, are you sure?" -msgstr "{} پارٹیشنزکے گروپ پر مشتمل ہے، یہ ان کو مٹا دے گا، کیا آپ پر اعتماد ہیں؟" - -#: lib/user_interaction.py:674 lib/user_interaction.py:681 lib/user_interaction.py:684 lib/user_interaction.py:687 lib/user_interaction.py:686 lib/user_interaction/partitioning_conf.py:216 lib/user_interaction/partitioning_conf.py:221 -msgid "" -"{}\n" -"\n" -"Select by index which partitions to delete" -msgstr "" -"{}\n" -"\n" -"انڈیکس کے ذریعہ منتخب کریں کہ کون سے پارٹیشنز کو حذف کرنا ہے" - -#: lib/user_interaction.py:682 lib/user_interaction.py:689 lib/user_interaction.py:692 lib/user_interaction.py:695 lib/user_interaction.py:694 lib/user_interaction/partitioning_conf.py:226 lib/user_interaction/partitioning_conf.py:231 -msgid "" -"{}\n" -"\n" -"Select by index which partition to mount where" -msgstr "" -"{}\n" -"\n" -"انڈیکس کے ذریعہ منتخب کریں کہ کون سا پارٹیشن کہاں ماؤنٹ کرنا ہے" - -#: lib/user_interaction.py:686 lib/user_interaction.py:693 lib/user_interaction.py:696 lib/user_interaction.py:699 lib/user_interaction.py:698 lib/user_interaction/partitioning_conf.py:231 lib/user_interaction/partitioning_conf.py:236 -msgid " * Partition mount-points are relative to inside the installation, the boot would be /boot as an example." -msgstr "* پارٹیشن ماؤنٹ پوائنٹس انسٹالیشن کی نسبت سے ہیں، بوٹ مثال کے طور /boot پرہوگا۔" - -#: lib/user_interaction.py:687 lib/user_interaction.py:694 lib/user_interaction.py:697 lib/user_interaction.py:700 lib/user_interaction.py:699 lib/user_interaction/partitioning_conf.py:233 lib/user_interaction/partitioning_conf.py:238 -msgid "Select where to mount partition (leave blank to remove mountpoint): " -msgstr "منتخب کریں کہ پارٹیشن کہاں ماؤنٹ کرنا ہے (ماؤنٹ پوائنٹ کو ہٹانے کے لیے جگہ خالی چھوڑیں):" - -#: lib/user_interaction.py:698 lib/user_interaction.py:705 lib/user_interaction.py:708 lib/user_interaction.py:711 lib/user_interaction.py:710 lib/user_interaction/partitioning_conf.py:244 lib/user_interaction/partitioning_conf.py:249 -msgid "" -"{}\n" -"\n" -"Select which partition to mask for formatting" -msgstr "" -"{}\n" -"\n" -"فارمیٹنگ کے لیے کس پارٹیشن کو ماسک کرنا ہے" - -#: lib/user_interaction.py:717 lib/user_interaction.py:724 lib/user_interaction.py:727 lib/user_interaction.py:730 lib/user_interaction.py:729 lib/user_interaction/partitioning_conf.py:265 lib/user_interaction/partitioning_conf.py:270 -msgid "" -"{}\n" -"\n" -"Select which partition to mark as encrypted" -msgstr "" -"{}\n" -"\n" -"منتخب کریں کہ کس پارٹیشن کو انکرپٹڈ یا خفیہ رکھنا ہے" - -#: lib/user_interaction.py:725 lib/user_interaction.py:732 lib/user_interaction.py:735 lib/user_interaction.py:738 lib/user_interaction.py:737 lib/user_interaction/partitioning_conf.py:274 lib/user_interaction/partitioning_conf.py:279 -msgid "" -"{}\n" -"\n" -"Select which partition to mark as bootable" -msgstr "" -"{}\n" -"\n" -"منتخب کریں کہ کس پارٹیشن کو بوٹ ایبل رکھنا ہے" - -#: lib/user_interaction.py:732 lib/user_interaction.py:739 lib/user_interaction.py:742 lib/user_interaction.py:745 lib/user_interaction.py:744 lib/user_interaction/partitioning_conf.py:282 lib/user_interaction/partitioning_conf.py:287 -msgid "" -"{}\n" -"\n" -"Select which partition to set a filesystem on" -msgstr "" -"{}\n" -"\n" -"فائل سسٹم کو کس پارٹیشن پر سیٹ کرنا ہے" - -#: lib/user_interaction.py:739 lib/user_interaction.py:746 lib/user_interaction.py:749 lib/user_interaction.py:752 lib/user_interaction.py:751 lib/user_interaction/partitioning_conf.py:289 lib/user_interaction/partitioning_conf.py:294 -msgid "Enter a desired filesystem type for the partition: " -msgstr "اس پارٹیشن کے لیے مطلوبہ فائل سسٹم درج کریں" - -#: lib/user_interaction.py:760 lib/menu/selection_menu.py:141 lib/user_interaction.py:767 lib/menu/selection_menu.py:139 lib/menu/selection_menu.py:143 lib/user_interaction.py:770 lib/user_interaction.py:773 lib/user_interaction.py:772 lib/menu/selection_menu.py:407 lib/menu/selection_menu.py:415 lib/menu/selection_menu.py:17 lib/user_interaction/general_conf.py:105 lib/user_interaction/global_menu.py:43 lib/menu/selection_menu.py:53 lib/menu/selection_menu.py:463 lib/menu/global_menu.py:43 -msgid "Select Archinstall language" -msgstr "آرچ انسٹال کے لیے زبان کا انتخاب کریں" - -#: lib/user_interaction.py:765 lib/user_interaction.py:772 lib/user_interaction.py:775 lib/user_interaction.py:778 lib/user_interaction.py:777 lib/user_interaction/disk_conf.py:40 -msgid "Wipe all selected drives and use a best-effort default partition layout" -msgstr "تمام منتخب ڈرائیوز کو صاف کریں اور ایک بہترین ڈیفالٹ پارٹیشن لے آؤٹ استعمال کریں" - -#: lib/user_interaction.py:766 lib/user_interaction.py:773 lib/user_interaction.py:776 lib/user_interaction.py:779 lib/user_interaction.py:778 lib/user_interaction/disk_conf.py:41 -msgid "Select what to do with each individual drive (followed by partition usage)" -msgstr "منتخب کریں کہ ہر انفرادی ڈرائیو کے ساتھ کیا کرنا ہے (اس کے بعد پارٹیشن کا استعمال)" - -#: lib/user_interaction.py:769 lib/user_interaction.py:770 lib/user_interaction.py:777 lib/user_interaction.py:780 lib/user_interaction.py:783 lib/user_interaction.py:782 lib/user_interaction/disk_conf.py:45 -msgid "Select what you wish to do with the selected block devices" -msgstr "انتخاب کریں کہ آپ منتخب بلاک ڈیوائسز کے ساتھ کیا کرنا چاہتے ہیں" - -#: lib/user_interaction.py:822 lib/user_interaction.py:823 lib/user_interaction.py:830 lib/user_interaction.py:833 lib/user_interaction.py:836 lib/user_interaction.py:835 lib/user_interaction/general_conf.py:126 -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:847 lib/user_interaction.py:854 lib/user_interaction.py:857 lib/user_interaction.py:860 lib/user_interaction.py:859 lib/user_interaction/general_conf.py:71 -msgid "Select Keyboard layout" -msgstr "کی بورڈ لے آؤٹ کو منتخب کریں" - -#: lib/user_interaction.py:861 lib/user_interaction.py:862 lib/user_interaction.py:869 lib/user_interaction.py:872 lib/user_interaction.py:875 lib/user_interaction.py:874 lib/user_interaction/general_conf.py:92 -msgid "Select one of the regions to download packages from" -msgstr "پیکیجز ڈاؤن لوڈ کرنے کے لیے علاقوں میں سے ایک کو منتخب کریں" - -#: lib/user_interaction.py:883 lib/user_interaction.py:884 lib/user_interaction.py:891 lib/user_interaction.py:894 lib/user_interaction.py:897 lib/user_interaction.py:896 lib/user_interaction/system_conf.py:52 -msgid "Select one or more hard drives to use and configure" -msgstr "استعمال کرنے اور کنفیگر کے لیے ایک یا زیادہ ہارڈ ڈرائیوز منتخب کریں" - -#: lib/user_interaction.py:910 lib/user_interaction.py:911 lib/user_interaction.py:918 lib/user_interaction.py:921 lib/user_interaction.py:924 lib/user_interaction.py:923 lib/user_interaction/system_conf.py:80 -msgid "For the best compatibility with your AMD hardware, you may want to use either the all open-source or AMD / ATI options." -msgstr "اپنے AMD ہارڈویئر کے ساتھ بہترین مطابقت کے لیے، آپ یا تو تمام اوپن سورس یا AMD/ATI آپشنز استعمال کرنا چاہیں گے" - -#: lib/user_interaction.py:912 lib/user_interaction.py:913 lib/user_interaction.py:920 lib/user_interaction.py:923 lib/user_interaction.py:926 lib/user_interaction.py:925 lib/user_interaction/system_conf.py:84 -msgid "For the best compatibility with your Intel hardware, you may want to use either the all open-source or Intel options.\n" -msgstr "اپنے intel ہارڈویئر کے ساتھ بہترین مطابقت کے لیے، آپ یا تو تمام اوپن سورس یا intel آپشنز استعمال کرنا چاہیں گے۔\n" - -#: lib/user_interaction.py:914 lib/user_interaction.py:915 lib/user_interaction.py:922 lib/user_interaction.py:925 lib/user_interaction.py:928 lib/user_interaction.py:927 lib/user_interaction/system_conf.py:88 -msgid "For the best compatibility with your Nvidia hardware, you may want to use the Nvidia proprietary driver.\n" -msgstr "اپنے Nvidia ہارڈویئر کے ساتھ بہترین مطابقت کے لیے، آپ Nvidia کے ملکیتی ڈرائیور کو استعمال کرنا چاہیں گے۔\n" - -#: lib/user_interaction.py:917 lib/user_interaction.py:918 lib/user_interaction.py:925 lib/user_interaction.py:928 lib/user_interaction.py:931 lib/user_interaction.py:930 lib/user_interaction/system_conf.py:92 -msgid "" -"\n" -"\n" -"Select a graphics driver or leave blank to install all open-source drivers" -msgstr "" -"\n" -"\n" -"\n" -"ایک گرافکس ڈرائیور منتخب کریں یا تمام اوپن سورس ڈرائیورز کو انسٹال کرنے کے لیے خالی چھوڑ دیں" - -#: lib/user_interaction.py:921 lib/user_interaction.py:922 lib/user_interaction.py:929 lib/user_interaction.py:932 lib/user_interaction.py:935 lib/user_interaction.py:934 lib/user_interaction/system_conf.py:96 -msgid "All open-source (default)" -msgstr "سبھی اوپن سورس (ڈیفالٹ)" - -#: lib/user_interaction.py:940 lib/user_interaction.py:941 lib/user_interaction.py:948 lib/user_interaction.py:951 lib/user_interaction.py:954 lib/user_interaction.py:953 lib/user_interaction/system_conf.py:28 -msgid "Choose which kernels to use or leave blank for default \"{}\"" -msgstr "منتخب کریں کہ کن کنلز کو استعمال کرنا ہے یا ڈیفالٹ \"{}\" کے لیے خالی چھوڑ دیں" - -#: lib/user_interaction.py:954 lib/user_interaction.py:955 lib/user_interaction.py:962 lib/user_interaction.py:965 lib/user_interaction.py:968 lib/user_interaction.py:967 lib/user_interaction/locale_conf.py:16 -msgid "Choose which locale language to use" -msgstr "منتخب کریں کہ کون سی مقامی زبان استعمال کرنی ہے" - -#: lib/user_interaction.py:968 lib/user_interaction.py:969 lib/user_interaction.py:976 lib/user_interaction.py:979 lib/user_interaction.py:982 lib/user_interaction.py:981 lib/user_interaction/locale_conf.py:29 -msgid "Choose which locale encoding to use" -msgstr "منتخب کریں کہ کون سا مقامی انکوڈنگ استعمال کرنا ہے" - -#: lib/user_interaction.py:1009 lib/user_interaction.py:1010 lib/user_interaction.py:1017 lib/user_interaction.py:1020 lib/user_interaction.py:1023 lib/user_interaction.py:1022 lib/user_interaction/backwards_compatible_conf.py:49 -msgid "Select one of the values shown below: " -msgstr "ذیل میں دکھائی گئی قدروں میں سے ایک کو منتخب کریں:" - -#: lib/user_interaction.py:1050 lib/user_interaction.py:1051 lib/user_interaction.py:1058 lib/user_interaction.py:1061 lib/user_interaction.py:1064 lib/user_interaction.py:1063 lib/user_interaction/backwards_compatible_conf.py:88 -msgid "Select one or more of the options below: " -msgstr "ذیل میں سے ایک یا زیادہ اختیارات کو منتخب کریں:" - -#: lib/disk/filesystem.py:86 lib/disk/filesystem.py:87 -msgid "Adding partition...." -msgstr "پارٹیشن شامل ہو رہی ہے..." - -#: lib/disk/filesystem.py:139 lib/disk/filesystem.py:141 lib/disk/filesystem.py:142 -msgid "You need to enter a valid fs-type in order to continue. See `man parted` for valid fs-type's." -msgstr "جاری رکھنے کے لیے آپ کو ایک درست fs-typeدرج کرنے کی ضرورت ہے۔ درست fs-types کے لیے 'man parted' دیکھیں۔" - -#: lib/profiles.py:89 lib/profiles.py:90 -msgid "Error: Listing profiles on URL \"{}\" resulted in:" -msgstr "خرابی: URL \"{}\" پر پروفائلز کی فہرست بنانے کا نتیجہ یہ ہوا:" - -#: lib/profiles.py:92 lib/profiles.py:93 -msgid "Error: Could not decode \"{}\" result as JSON:" -msgstr "خرابی: \"{}\" نتیجہ کو JSON کے بطور ڈی کوڈ نہیں کیا جا سکا:" - -#: lib/menu/selection_menu.py:146 lib/menu/selection_menu.py:144 lib/menu/selection_menu.py:148 lib/menu/selection_menu.py:412 lib/menu/selection_menu.py:420 lib/user_interaction/global_menu.py:48 lib/menu/selection_menu.py:468 lib/menu/global_menu.py:48 -msgid "Select keyboard layout" -msgstr "کی بورڈ لے آؤٹ کو منتخب کریں" - -#: lib/menu/selection_menu.py:149 lib/menu/selection_menu.py:147 lib/menu/selection_menu.py:151 lib/menu/selection_menu.py:415 lib/menu/selection_menu.py:423 lib/user_interaction/global_menu.py:51 lib/menu/selection_menu.py:471 lib/menu/global_menu.py:51 -msgid "Select mirror region" -msgstr "متبادل علاقہ منتخب کریں" - -#: lib/menu/selection_menu.py:154 lib/menu/selection_menu.py:152 lib/menu/selection_menu.py:156 lib/menu/selection_menu.py:420 lib/menu/selection_menu.py:428 lib/user_interaction/global_menu.py:56 lib/menu/selection_menu.py:476 lib/menu/global_menu.py:56 -msgid "Select locale language" -msgstr "منتخب کریں کہ کون سی مقامی زبان استعمال کرنی ہے" - -#: lib/menu/selection_menu.py:156 lib/menu/selection_menu.py:154 lib/menu/selection_menu.py:158 lib/menu/selection_menu.py:422 lib/menu/selection_menu.py:430 lib/user_interaction/global_menu.py:58 lib/menu/selection_menu.py:478 lib/menu/global_menu.py:58 -msgid "Select locale encoding" -msgstr "منتخب کریں کہ کون سا مقامی انکوڈنگ استعمال کرنا ہے" - -#: lib/menu/selection_menu.py:159 lib/menu/selection_menu.py:157 lib/menu/selection_menu.py:161 lib/menu/selection_menu.py:425 lib/menu/selection_menu.py:433 lib/user_interaction/global_menu.py:61 lib/menu/selection_menu.py:481 lib/menu/global_menu.py:61 -msgid "Select harddrives" -msgstr "ہارڈ ڈرائیوز کو منتخب کریں" - -#: lib/menu/selection_menu.py:163 lib/menu/selection_menu.py:161 lib/menu/selection_menu.py:165 lib/menu/selection_menu.py:429 lib/menu/selection_menu.py:437 lib/user_interaction/global_menu.py:65 lib/menu/selection_menu.py:485 lib/menu/global_menu.py:65 -msgid "Select disk layout" -msgstr "ڈسک لے آؤٹ کو منتخب کریں" - -#: lib/menu/selection_menu.py:171 lib/menu/selection_menu.py:169 lib/menu/selection_menu.py:173 lib/menu/selection_menu.py:437 lib/menu/selection_menu.py:445 lib/user_interaction/global_menu.py:73 lib/menu/selection_menu.py:493 lib/menu/global_menu.py:73 -msgid "Set encryption password" -msgstr "انکرپشن پاس ورڈ سیٹ کریں" - -#: lib/menu/selection_menu.py:177 lib/menu/selection_menu.py:175 lib/menu/selection_menu.py:179 lib/menu/selection_menu.py:443 lib/menu/selection_menu.py:451 lib/user_interaction/global_menu.py:79 lib/menu/selection_menu.py:499 lib/menu/global_menu.py:79 -msgid "Use swap" -msgstr "سواپ کا استعمال کریں" - -#: lib/menu/selection_menu.py:182 lib/menu/selection_menu.py:180 lib/menu/selection_menu.py:184 lib/menu/selection_menu.py:448 lib/menu/selection_menu.py:456 lib/user_interaction/global_menu.py:84 lib/menu/selection_menu.py:504 lib/menu/global_menu.py:84 -msgid "Select bootloader" -msgstr "بوٹ لوڈرکا انتخاب کریں" - -#: lib/menu/selection_menu.py:188 lib/menu/selection_menu.py:186 lib/menu/selection_menu.py:190 lib/menu/selection_menu.py:454 lib/menu/selection_menu.py:462 lib/user_interaction/global_menu.py:95 lib/menu/selection_menu.py:515 lib/menu/global_menu.py:95 -msgid "Set root password" -msgstr "روٹ پاس ورڈ سیٹ کریں" - -#: lib/menu/selection_menu.py:193 lib/menu/selection_menu.py:191 lib/menu/selection_menu.py:195 lib/menu/selection_menu.py:459 lib/menu/selection_menu.py:467 lib/user_interaction/global_menu.py:100 lib/menu/selection_menu.py:520 lib/menu/global_menu.py:100 -msgid "Specify superuser account" -msgstr "سپر یوزر اکاؤنٹ کی وضاحت کریں" - -#: lib/menu/selection_menu.py:199 lib/menu/selection_menu.py:197 lib/menu/selection_menu.py:201 lib/menu/selection_menu.py:465 lib/menu/selection_menu.py:473 lib/user_interaction/global_menu.py:107 lib/menu/selection_menu.py:528 lib/menu/global_menu.py:107 -msgid "Specify user account" -msgstr "یوزر اکاؤنٹ کی وضاحت کریں" - -#: lib/menu/selection_menu.py:205 lib/menu/selection_menu.py:203 lib/menu/selection_menu.py:207 lib/menu/selection_menu.py:471 lib/menu/selection_menu.py:479 lib/user_interaction/global_menu.py:114 lib/menu/selection_menu.py:535 lib/menu/global_menu.py:114 -msgid "Specify profile" -msgstr "پروفائل کی وضاحت کریں" - -#: lib/menu/selection_menu.py:210 lib/menu/selection_menu.py:208 lib/menu/selection_menu.py:212 lib/menu/selection_menu.py:476 lib/menu/selection_menu.py:484 lib/user_interaction/global_menu.py:119 lib/menu/selection_menu.py:540 lib/menu/global_menu.py:119 -msgid "Select audio" -msgstr "آڈیو کا انتخاب کریں" - -#: lib/menu/selection_menu.py:214 lib/menu/selection_menu.py:212 lib/menu/selection_menu.py:216 lib/menu/selection_menu.py:480 lib/menu/selection_menu.py:488 lib/user_interaction/global_menu.py:123 lib/menu/selection_menu.py:544 lib/menu/global_menu.py:123 -msgid "Select kernels" -msgstr "کرنلز منتخب کریں" - -#: lib/menu/selection_menu.py:219 lib/menu/selection_menu.py:217 lib/menu/selection_menu.py:221 lib/menu/selection_menu.py:485 lib/menu/selection_menu.py:493 lib/user_interaction/global_menu.py:128 lib/menu/selection_menu.py:549 lib/menu/global_menu.py:128 -msgid "Additional packages to install" -msgstr "انسٹال کرنے کے لیے اضافی پیکجز" - -#: lib/menu/selection_menu.py:224 lib/menu/selection_menu.py:222 lib/menu/selection_menu.py:226 lib/menu/selection_menu.py:490 lib/menu/selection_menu.py:498 lib/user_interaction/global_menu.py:139 lib/menu/selection_menu.py:560 lib/menu/global_menu.py:139 -msgid "Configure network" -msgstr "نیٹ ورک ترتیب دیں" - -#: lib/menu/selection_menu.py:232 lib/menu/selection_menu.py:230 lib/menu/selection_menu.py:234 lib/menu/selection_menu.py:498 lib/menu/selection_menu.py:506 lib/user_interaction/global_menu.py:150 lib/menu/selection_menu.py:571 lib/menu/global_menu.py:150 -msgid "Set automatic time sync (NTP)" -msgstr "خودکار وقت کی مطابقت سیٹ کریں (NTP)" - -#: lib/menu/selection_menu.py:310 lib/menu/selection_menu.py:308 lib/menu/selection_menu.py:315 lib/menu/selection_menu.py:527 lib/menu/selection_menu.py:535 lib/user_interaction/global_menu.py:187 lib/menu/selection_menu.py:608 lib/menu/global_menu.py:187 -msgid "Install ({} config(s) missing)" -msgstr "انسٹال کریں ({} کنفیگریشنز غائب ہیں)" - -#: lib/menu/selection_menu.py:373 lib/menu/selection_menu.py:371 lib/menu/selection_menu.py:378 lib/menu/selection_menu.py:591 lib/menu/selection_menu.py:599 lib/user_interaction/global_menu.py:249 lib/menu/selection_menu.py:669 lib/menu/global_menu.py:249 -msgid "" -"You decided to skip harddrive selection\n" -"and will use whatever drive-setup is mounted at {} (experimental)\n" -"WARNING: Archinstall won't check the suitability of this setup\n" -"Do you wish to continue?" -msgstr "" -"آپ نے ہارڈ ڈرائیو کا انتخاب چھوڑنے کا فیصلہ کیا۔\n" -"اور جو بھی ڈرائیو سیٹ اپ {} (تجرباتی) پر ماؤنٹ کیا گیا ہے اسے استعمال کرے گا۔\n" -"انتباہ: آرچ انسٹال اس سیٹ اپ کی مناسبیت کی جانچ نہیں کرے گا۔\n" -"کیا آپ جاری رکھنا چاہتے ہیں؟" - -#: lib/disk/filesystem.py:97 lib/disk/filesystem.py:98 -msgid "Re-using partition instance: {}" -msgstr "پارٹیشن کو دوبارہ استعمال کرنا: {}" - -#: lib/user_interaction.py:590 lib/user_interaction.py:593 lib/user_interaction.py:596 lib/user_interaction.py:595 lib/user_interaction/partitioning_conf.py:119 lib/user_interaction/partitioning_conf.py:120 -msgid "Create a new partition" -msgstr "ایک نیا پارٹیشن بنائیں" - -#: lib/user_interaction.py:592 lib/user_interaction.py:595 lib/user_interaction.py:598 lib/user_interaction.py:597 lib/user_interaction/partitioning_conf.py:121 lib/user_interaction/partitioning_conf.py:122 -msgid "Delete a partition" -msgstr "ایک پارٹیشن کو حذف کریں" - -#: lib/user_interaction.py:593 lib/user_interaction.py:596 lib/user_interaction.py:599 lib/user_interaction.py:598 lib/user_interaction/partitioning_conf.py:122 lib/user_interaction/partitioning_conf.py:123 -msgid "Clear/Delete all partitions" -msgstr "تمام پارٹیشنز کو صاف/حذف کریں" - -#: lib/user_interaction.py:594 lib/user_interaction.py:597 lib/user_interaction.py:600 lib/user_interaction.py:599 lib/user_interaction/partitioning_conf.py:123 lib/user_interaction/partitioning_conf.py:124 -msgid "Assign mount-point for a partition" -msgstr "پارٹیشن کے لیے ماؤنٹ پوائنٹ تفویض کریں" - -#: lib/user_interaction.py:595 lib/user_interaction.py:598 lib/user_interaction.py:601 lib/user_interaction.py:600 lib/user_interaction/partitioning_conf.py:124 lib/user_interaction/partitioning_conf.py:125 -msgid "Mark/Unmark a partition to be formatted (wipes data)" -msgstr "فارمیٹ کرنے کے لیے پارٹیشن کو مارک​​ /انمارک کریں (ڈیٹا صاف کرتا ہے)" - -#: lib/user_interaction.py:596 lib/user_interaction.py:599 lib/user_interaction.py:602 lib/user_interaction.py:601 lib/user_interaction/partitioning_conf.py:125 lib/user_interaction/partitioning_conf.py:126 -msgid "Mark/Unmark a partition as encrypted" -msgstr "انکرپٹڈ کرنے کے لیے پارٹیشن کو مارک​​ /انمارک کریں" - -#: lib/user_interaction.py:597 lib/user_interaction.py:600 lib/user_interaction.py:603 lib/user_interaction.py:602 lib/user_interaction/partitioning_conf.py:126 lib/user_interaction/partitioning_conf.py:127 -msgid "Mark/Unmark a partition as bootable (automatic for /boot)" -msgstr "بوٹ ایبل کرنے کے لیے پارٹیشن کو مارک​​/ انمارک کریں(/boot)" - -#: lib/user_interaction.py:598 lib/user_interaction.py:601 lib/user_interaction.py:604 lib/user_interaction.py:603 lib/user_interaction/partitioning_conf.py:127 lib/user_interaction/partitioning_conf.py:128 -msgid "Set desired filesystem for a partition" -msgstr "اس پارٹیشن کے لیے مطلوبہ فائل سسٹم درج کریں" - -#: lib/menu/selection_menu.py:239 lib/menu/selection_menu.py:237 lib/menu/selection_menu.py:241 lib/menu/selection_menu.py:270 lib/menu/selection_menu.py:507 lib/menu/selection_menu.py:515 lib/user_interaction/global_menu.py:167 lib/menu/selection_menu.py:588 lib/menu/global_menu.py:167 -msgid "Abort" -msgstr "ختم کریں" - -#: lib/menu/selection_menu.py:183 lib/menu/selection_menu.py:187 lib/menu/selection_menu.py:451 lib/menu/selection_menu.py:459 lib/user_interaction/global_menu.py:89 lib/menu/selection_menu.py:509 lib/menu/global_menu.py:89 -msgid "Specify hostname" -msgstr "میزبان نام کی وضاحت کریں" - -#: lib/menu/selection_menu.py:228 lib/menu/selection_menu.py:492 lib/menu/selection_menu.py:500 lib/user_interaction/global_menu.py:141 lib/menu/selection_menu.py:562 lib/menu/global_menu.py:141 -msgid "Not configured, unavailable unless setup manually" -msgstr "کنفیگر نہیں، دستیاب نہیں جب تک کہ دستی طور پر سیٹ اپ نہ کیا جائے" - -#: lib/menu/selection_menu.py:231 lib/menu/selection_menu.py:495 lib/menu/selection_menu.py:503 lib/user_interaction/global_menu.py:145 lib/menu/selection_menu.py:566 lib/menu/global_menu.py:145 -msgid "Select timezone" -msgstr "ٹائم زون کا انتخاب کریں" - -#: lib/menu/selection_menu.py:266 lib/menu/selection_menu.py:276 lib/menu/selection_menu.py:312 -msgid "Set/Modify the below options" -msgstr "ذیل کے اختیارات کو سیٹ/ترمیم کریں" - -#: lib/menu/selection_menu.py:272 -msgid "Install" -msgstr "انسٹال" - -#: lib/menu/menu.py:68 lib/menu/menu.py:75 lib/menu/menu.py:119 -msgid "" -"Use ESC to skip\n" -"\n" -msgstr "" -"چھوڑنے کے لیے ESC استعمال کریں\n" -"\n" - -#: lib/user_interaction.py:591 lib/user_interaction.py:594 lib/user_interaction.py:597 lib/user_interaction.py:596 lib/user_interaction/partitioning_conf.py:120 lib/user_interaction/partitioning_conf.py:121 -msgid "Suggest partition layout" -msgstr "پارٹیشن لے آؤٹ تجویز کریں" - -#: lib/user_interaction.py:101 lib/user_interaction/utils.py:43 -msgid "Enter a password: " -msgstr "پاس ورڈ درج کریں:" - -#: lib/disk/filesystem.py:117 lib/disk/filesystem.py:118 -msgid "Enter a encryption password for {}" -msgstr "{} کے لیے ایک انکرپشن پاس ورڈ درج کریں" - -#: lib/menu/selection_menu.py:174 lib/menu/selection_menu.py:567 lib/menu/selection_menu.py:575 lib/user_interaction/global_menu.py:225 lib/menu/selection_menu.py:646 lib/menu/global_menu.py:225 -msgid "Enter disk encryption password (leave blank for no encryption): " -msgstr "ڈسک انکرپشن پاس ورڈ درج کریں (انکرپشن کو غیر فعال کرنے کے لیے خالی چھوڑ دیں):" - -#: lib/menu/selection_menu.py:407 lib/menu/selection_menu.py:617 lib/menu/selection_menu.py:625 -msgid "Create a required super-user with sudo privileges: " -msgstr "sudo مراعات کے ساتھ ایک مطلوبہ سپر صارف بنائیں:" - -#: lib/menu/selection_menu.py:347 lib/menu/selection_menu.py:554 lib/menu/selection_menu.py:562 lib/user_interaction/global_menu.py:220 lib/menu/selection_menu.py:641 lib/menu/global_menu.py:220 -msgid "Enter root password (leave blank to disable root): " -msgstr "روٹ پاس ورڈ درج کریں (روٹ کو غیر فعال کرنے کے لیے خالی چھوڑ دیں):" - -#: lib/user_interaction.py:307 lib/user_interaction.py:324 lib/user_interaction/manage_users_conf.py:86 lib/user_interaction/manage_users_conf.py:121 -msgid "Password for user \"{}\": " -msgstr "صارف \"{}\" کے لیے پاس ورڈ:" - -#: lib/user_interaction.py:405 lib/user_interaction.py:408 lib/user_interaction.py:407 lib/user_interaction/general_conf.py:152 -msgid "Verifying that additional packages exist (this might take a few seconds)" -msgstr "اس بات کی تصدیق ہو رہی ہےکہ اضافی پیکجز موجود ہیں (اس میں چند سیکنڈ لگ سکتے ہیں)" - -#: lib/user_interaction.py:281 lib/user_interaction/general_conf.py:22 -msgid "Would you like to use automatic time synchronization (NTP) with the default time servers?\n" -msgstr "کیا آپ ڈیفالٹ ٹائم سرورز کے ساتھ آٹومیٹک ٹائم سنکرونائزیشن (NTP) استعمال کرنا چاہیں گے؟\n" - -#: lib/user_interaction.py:282 lib/user_interaction/general_conf.py:23 -msgid "" -"Hardware time and other post-configuration steps might be required in order for NTP to work.\n" -"For more information, please check the Arch wiki" -msgstr "" -"NTP کے کام کرنے کے لیے ہارڈ ویئر کا وقت اور کنفیگریشن کے بعد کے دیگر اقدامات درکار ہو سکتے ہیں۔\n" -"مزید معلومات کے لیے، براہ کرم آرک ویکی کو دیکھیں" - -#: lib/menu/selection_menu.py:411 lib/menu/selection_menu.py:621 lib/menu/selection_menu.py:629 -msgid "Enter a username to create an additional user (leave blank to skip): " -msgstr "ایک اضافی صارف بنانے کے لیے صارف نام درج کریں (چھوڑنے کے لیے خالی چھوڑیں):" - -#: lib/menu/menu.py:116 -msgid "Use ESC to skip\n" -msgstr "چھوڑنے کے لیے ESC استعمال کریں\n" - -#: lib/menu/list_manager.py:117 -msgid "" -"\n" -" Choose an object from the list, and select one of the available actions for it to execute" -msgstr "" - -#: lib/menu/list_manager.py:130 lib/user_interaction/subvolume_config.py:90 -msgid "Cancel" -msgstr "منسوخ کریں" - -#: lib/menu/list_manager.py:131 -msgid "Confirm and exit" -msgstr "تصدیق کریں اور باہر نکلیں" - -#: lib/menu/list_manager.py:135 lib/menu/list_manager.py:228 lib/menu/list_manager.py:251 lib/menu/list_manager.py:276 lib/user_interaction/subvolume_config.py:12 lib/user_interaction/subvolume_config.py:44 lib/user_interaction/subvolume_config.py:78 lib/user_interaction/subvolume_config.py:82 lib/user_interaction/subvolume_config.py:85 -msgid "Add" -msgstr "شامل" - -#: lib/menu/list_manager.py:135 lib/menu/list_manager.py:231 lib/menu/list_manager.py:255 lib/user_interaction/subvolume_config.py:78 -msgid "Copy" -msgstr "کاپی" - -#: lib/menu/list_manager.py:135 lib/menu/list_manager.py:237 lib/menu/list_manager.py:261 lib/user_interaction/subvolume_config.py:82 lib/user_interaction/subvolume_config.py:85 -msgid "Edit" -msgstr "ترمیم" - -#: lib/menu/list_manager.py:135 lib/menu/list_manager.py:242 lib/menu/list_manager.py:264 lib/user_interaction/subvolume_config.py:40 -msgid "Delete" -msgstr "حذف" - -#: lib/menu/list_manager.py:185 -msgid "Select an action for < {} >" -msgstr "< {} > کے لیے ایک عمل منتخب کریں" - -#: lib/menu/list_manager.py:229 -msgid "Add :" -msgstr "شامل:" - -#: lib/menu/list_manager.py:233 -msgid "Copy to :" -msgstr "اس میں کاپی :" - -#: lib/menu/list_manager.py:240 -msgid "Edite :" -msgstr "ترمیم:" - -#: lib/menu/list_manager.py:252 -msgid "Key :" -msgstr "کلید:" - -#: lib/menu/list_manager.py:253 -msgid "Value :" -msgstr "قدر:" - -#: lib/menu/list_manager.py:257 -msgid "Copy to new key:" -msgstr "نئی کلید میں کاپی کریں:" - -#: lib/menu/list_manager.py:262 -#, python-brace-format -msgid "Edit {origkey} :" -msgstr "ترمیم {origkey} :" - -#: lib/models/network_configuration.py:53 lib/models/network_configuration.py:74 -msgid "Unknown nic type: {}. Possible values are {}" -msgstr "نامعلوم nic قسم: {}۔ ممکنہ قدریں ہیں {}" - -#: lib/configuration.py:75 -msgid "" -"\n" -"This is your chosen configuration:" -msgstr "" -"\n" -"یہ آپ کی منتخب کردہ ترتیب ہے:" - -#: lib/pacman.py:18 -msgid "Pacman is already running, waiting maximum 10 minutes for it to terminate." -msgstr "Pacman پہلے ہی چل رہا ہے، اس کے ختم ہونے کے لیے زیادہ سے زیادہ 10 منٹ انتظار " - -#: lib/pacman.py:25 -msgid "Pre-existing pacman lock never exited. Please clean up any existing pacman sessions before using archinstall." -msgstr "پہلے سے موجود پیک مین لاک کبھی نہیں نکلا۔ براہ کرم archinstall استعمال کرنے سے پہلے کسی بھی موجودہ pacman سیشن کو صاف کریں۔" - -#: lib/user_interaction/general_conf.py:174 -msgid "Choose which optional additional repositories to enable" -msgstr "منتخب کریں کہ کون سے اختیاری اضافی ریپوزیٹریز کو فعال کرنا ہے" - -#: lib/user_interaction/manage_users_conf.py:32 -msgid "Add an user" -msgstr "ایک صارف شامل کریں" - -#: lib/user_interaction/manage_users_conf.py:33 -msgid "Change password" -msgstr "پاس ورڈ تبدیل کریں" - -#: lib/user_interaction/manage_users_conf.py:34 -msgid "Promote/Demote user" -msgstr "صارف کو پروموٹ/ڈیموٹ کریں" - -#: lib/user_interaction/manage_users_conf.py:35 -msgid "Delete User" -msgstr "صارف کو حذف کریں" - -#: lib/user_interaction/manage_users_conf.py:99 -msgid "" -"\n" -"Define a new user\n" -msgstr "" -"\n" -"ایک نئے صارف کی وضاحت کریں۔\n" - -#: lib/user_interaction/manage_users_conf.py:100 -msgid "User Name : " -msgstr "صارف کا نام:" - -#: lib/user_interaction/manage_users_conf.py:115 -msgid "Should {} be a superuser (sudoer)?" -msgstr "کیا {} کو سپر یوزر (sudoer) ہونا چاہیے؟" - -#: lib/user_interaction/manage_users_conf.py:161 -msgid "Define users with sudo privilege: " -msgstr "sudo استحقاق کے ساتھ صارفین کی وضاحت کریں:" - -#: lib/user_interaction/network_conf.py:24 -msgid "No network configuration" -msgstr "کوئی نیٹ ورک کنفیگریشن نہیں ہے" - -#: lib/user_interaction/partitioning_conf.py:128 lib/user_interaction/partitioning_conf.py:129 -#, fuzzy -msgid "Set desired subvolumes on a btrfs partition" -msgstr "اس پارٹیشن کے لیے مطلوبہ فائل سسٹم درج کریں" - -#: lib/user_interaction/partitioning_conf.py:296 lib/user_interaction/partitioning_conf.py:303 -#, fuzzy -msgid "" -"{}\n" -"\n" -"Select which partition to set subvolumes on" -msgstr "" -"{}\n" -"\n" -"فائل سسٹم کو کس پارٹیشن پر سیٹ کرنا ہے" - -#: lib/user_interaction/partitioning_conf.py:305 lib/user_interaction/partitioning_conf.py:312 -msgid "Manage btrfs subvolumes for current partition" -msgstr "" - -#: lib/user_interaction/save_conf.py:24 lib/user_interaction/save_conf.py:29 -msgid "No configuration" -msgstr "کوئی کنفیگریشن نہیں" - -#: lib/user_interaction/save_conf.py:42 -msgid "Save user configuration" -msgstr "صارف کنفیگریشن کو محفوظ کریں" - -#: lib/user_interaction/save_conf.py:43 -msgid "Save user credentials" -msgstr "صارف کی اسناد کو محفوظ کریں" - -#: lib/user_interaction/save_conf.py:44 -msgid "Save disk layout" -msgstr "ڈسک لے آؤٹ کو محفوظ کریں" - -#: lib/user_interaction/save_conf.py:45 -msgid "Save all" -msgstr "سب کو محفوظ کریں" - -#: lib/user_interaction/save_conf.py:48 -msgid "Choose which configuration to save" -msgstr "منتخب کریں کہ کون سی کنفیگریشن محفوظ کرنی ہے" - -#: lib/user_interaction/save_conf.py:59 -msgid "Enter a directory for the configuration(s) to be saved: " -msgstr "محفوظ کیے جانے والے کنفیگریشن کے لیے ایک ڈائرکٹری درج کریں:" - -#: lib/user_interaction/save_conf.py:63 -msgid "Not a valid directory: {}" -msgstr "درست ڈائریکٹری نہیں ہے: {}" - -#: lib/user_interaction/utils.py:32 -msgid "The password you are using seems to be weak," -msgstr "آپ جو پاس ورڈ استعمال کر رہے ہیں وہ کمزور لگ رہا ہے،" - -#: lib/user_interaction/utils.py:33 -msgid "are you sure you want to use it?" -msgstr "کیا آپ واقعی اسے استعمال کرنا چاہتے ہیں؟" - -#: lib/user_interaction/global_menu.py:134 lib/menu/selection_menu.py:555 lib/menu/global_menu.py:134 -msgid "Additional repositories to enable" -msgstr "اضافی ریپوزٹریزکو فعال" - -#: lib/user_interaction/global_menu.py:155 lib/menu/selection_menu.py:576 lib/menu/global_menu.py:155 -msgid "Save configuration" -msgstr "ترتیب کو محفوظ کریں" - -#: lib/user_interaction/global_menu.py:192 lib/menu/selection_menu.py:613 lib/menu/global_menu.py:192 -msgid "Missing configurations:\n" -msgstr "لاپتہ کنفیگریشنز:\n" - -#: lib/user_interaction/global_menu.py:210 lib/menu/selection_menu.py:631 lib/menu/global_menu.py:210 -msgid "Either root-password or at least 1 superuser must be specified" -msgstr "روٹ پاس ورڈ یا کم از کم ۱ سپر یوزر کی وضاحت ہونی چاہیے" - -#: lib/user_interaction/global_menu.py:275 lib/menu/selection_menu.py:695 lib/menu/global_menu.py:275 -msgid "Manage superuser accounts: " -msgstr "سپر یوزر اکاؤنٹس کا نظم کریں:" - -#: lib/user_interaction/global_menu.py:279 lib/menu/selection_menu.py:699 lib/menu/global_menu.py:279 -msgid "Manage ordinary user accounts: " -msgstr "عام صارف اکاؤنٹس کا نظم کریں:" - -#: lib/user_interaction/subvolume_config.py:17 -msgid " Subvolume :{:16}" -msgstr "" - -#: lib/user_interaction/subvolume_config.py:19 lib/user_interaction/subvolume_config.py:22 -msgid " mounted at {:16}" -msgstr "" - -#: lib/user_interaction/subvolume_config.py:26 -msgid " with option {}" -msgstr "" - -#: lib/user_interaction/subvolume_config.py:46 -msgid "" -"\n" -" Fill the desired values for a new subvolume \n" -msgstr "" - -#: lib/user_interaction/subvolume_config.py:77 -msgid "Subvolume name " -msgstr "" - -#: lib/user_interaction/subvolume_config.py:81 -msgid "Subvolume mountpoint" -msgstr "" - -#: lib/user_interaction/subvolume_config.py:84 -msgid "Subvolume options" -msgstr "" - -#: lib/user_interaction/subvolume_config.py:87 -#, fuzzy -msgid "Save" -msgstr "سب کو محفوظ کریں" - -#: lib/user_interaction/subvolume_config.py:121 -msgid "Subvolume name :" -msgstr "" - -#: lib/user_interaction/subvolume_config.py:124 -#, fuzzy -msgid "Select a mount point :" -msgstr "ٹائم زون کا انتخاب کریں" - -#: lib/user_interaction/subvolume_config.py:128 -msgid "Select the desired subvolume options " -msgstr "" - -#: lib/user_interaction/manage_users_conf.py:161 -#, fuzzy -msgid "Define users with sudo privilege, by username: " -msgstr "sudo استحقاق کے ساتھ صارفین کی وضاحت کریں:" - -#: lib/installer.py:152 -#, fuzzy -msgid "[!] A log file has been created here: {}" -msgstr "[!] یہاں ایک لاگ فائل بنائی گئی ہے: {} {}" - -#~ msgid "Choose an object from the list" -#~ msgstr "فہرست سے ایک آبجیکٹ منتخب کریں۔" -- cgit v1.2.3-70-g09d2 From 1b9c8f302bdac570ce77951a41499bf11cbe9ef3 Mon Sep 17 00:00:00 2001 From: Alexmelman88 <99257010+Alexmelman88@users.noreply.github.com> Date: Tue, 10 May 2022 22:22:02 +0300 Subject: Updated ru locale and minor fixes (#1157) * Add files via upload * Add files via upload * Update global_menu.py --- archinstall/lib/menu/global_menu.py | 2 +- archinstall/locales/base.pot | 4 +- archinstall/locales/ru/LC_MESSAGES/base.mo | Bin 29871 -> 31612 bytes archinstall/locales/ru/LC_MESSAGES/base.po | 327 +++++++++++++++++++---------- 4 files changed, 223 insertions(+), 110 deletions(-) (limited to 'archinstall/lib') diff --git a/archinstall/lib/menu/global_menu.py b/archinstall/lib/menu/global_menu.py index 23a8ec11..889d4f85 100644 --- a/archinstall/lib/menu/global_menu.py +++ b/archinstall/lib/menu/global_menu.py @@ -200,7 +200,7 @@ class GlobalMenu(GeneralMenu): missing = len(self._missing_configs()) if missing > 0: return _('Install ({} config(s) missing)').format(missing) - return 'Install' + return _('Install') def _prev_network_configuration(self, cur_value: Union[NetworkConfiguration, List[NetworkConfiguration]]) -> str: if not cur_value: diff --git a/archinstall/locales/base.pot b/archinstall/locales/base.pot index d82b7ccd..276b7bad 100644 --- a/archinstall/locales/base.pot +++ b/archinstall/locales/base.pot @@ -715,8 +715,8 @@ msgstr "" msgid "Edit {}: " msgstr "" -msgid "Add :" +msgid "Add: " msgstr "" -msgid "Value :" +msgid "Value: " msgstr "" diff --git a/archinstall/locales/ru/LC_MESSAGES/base.mo b/archinstall/locales/ru/LC_MESSAGES/base.mo index 912bf476..df260e2a 100644 Binary files a/archinstall/locales/ru/LC_MESSAGES/base.mo and b/archinstall/locales/ru/LC_MESSAGES/base.mo differ diff --git a/archinstall/locales/ru/LC_MESSAGES/base.po b/archinstall/locales/ru/LC_MESSAGES/base.po index 9f06d1b8..7280a7f1 100644 --- a/archinstall/locales/ru/LC_MESSAGES/base.po +++ b/archinstall/locales/ru/LC_MESSAGES/base.po @@ -9,14 +9,19 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" "X-Generator: Poedit 3.0.1\n" msgid "[!] A log file has been created here: {} {}" msgstr "[!] Здесь был создан файл журнала: {} {}" -msgid " Please submit this issue (and file) to https://github.com/archlinux/archinstall/issues" -msgstr " Пожалуйста, отправьте эту проблему (и файл) по адресу https://github.com/archlinux/archinstall/issues" +msgid "" +" Please submit this issue (and file) to https://github.com/archlinux/" +"archinstall/issues" +msgstr "" +" Пожалуйста, отправьте эту проблему (и файл) по адресу https://github.com/" +"archlinux/archinstall/issues" msgid "Do you really want to abort?" msgstr "Вы действительно хотите прекратить?" @@ -31,10 +36,13 @@ msgid "Desired hostname for the installation: " msgstr "Желаемое имя хоста для установки: " msgid "Username for required superuser with sudo privileges: " -msgstr "Имя пользователя для требуемого суперпользователя с привилегиями sudo: " +msgstr "" +"Имя пользователя для требуемого суперпользователя с привилегиями sudo: " msgid "Any additional users to install (leave blank for no users): " -msgstr "Любые дополнительные пользователи для установки (оставьте пустым, если пользователей нет): " +msgstr "" +"Любые дополнительные пользователи для установки (оставьте пустым, если " +"пользователей нет): " msgid "Should this user be a superuser (sudoer)?" msgstr "Должен ли этот пользователь быть суперпользователем (sudoer)?" @@ -51,38 +59,59 @@ msgstr "Выберите загрузчик" msgid "Choose an audio server" msgstr "Выберите звуковой сервер" -msgid "Only packages such as base, base-devel, linux, linux-firmware, efibootmgr and optional profile packages are installed." -msgstr "Устанавливаются только такие пакеты, как base, base-devel, linux, linux-firmware, efibootmgr и дополнительные пакеты профиля." +msgid "" +"Only packages such as base, base-devel, linux, linux-firmware, efibootmgr " +"and optional profile packages are installed." +msgstr "" +"Устанавливаются только такие пакеты, как base, base-devel, linux, linux-" +"firmware, efibootmgr и дополнительные пакеты профиля." -msgid "If you desire a web browser, such as firefox or chromium, you may specify it in the following prompt." -msgstr "Если вы хотите использовать веб-браузер, например, firefox или chromium, вы можете указать его в следующем запросе." +msgid "" +"If you desire a web browser, such as firefox or chromium, you may specify it " +"in the following prompt." +msgstr "" +"Если вы хотите использовать веб-браузер, например, firefox или chromium, вы " +"можете указать его в следующем запросе." -msgid "Write additional packages to install (space separated, leave blank to skip): " -msgstr "Напишите дополнительные пакеты для установки (разделите пробелами, оставьте пустым, чтобы пропустить): " +msgid "" +"Write additional packages to install (space separated, leave blank to skip): " +msgstr "" +"Напишите дополнительные пакеты для установки (разделите пробелами, оставьте " +"пустым, чтобы пропустить): " msgid "Copy ISO network configuration to installation" msgstr "Копировать сетевую конфигурацию ISO в установку" -msgid "Use NetworkManager (necessary to configure internet graphically in GNOME and KDE)" -msgstr "Использовать NetworkManager (необходим для графической настройки интернета в GNOME и KDE)" +msgid "" +"Use NetworkManager (necessary to configure internet graphically in GNOME and " +"KDE)" +msgstr "" +"Использовать NetworkManager (необходим для графической настройки интернета в " +"GNOME и KDE)" msgid "Select one network interface to configure" msgstr "Выберите один сетевой интерфейс для настройки" -msgid "Select which mode to configure for \"{}\" or skip to use default mode \"{}\"" -msgstr "Выберите режим для конфигурации \"{}\" или пропустите, чтобы использовать режим по умолчанию \"{}\"." +msgid "" +"Select which mode to configure for \"{}\" or skip to use default mode \"{}\"" +msgstr "" +"Выберите режим для конфигурации \"{}\" или пропустите, чтобы использовать " +"режим по умолчанию \"{}\"." msgid "Enter the IP and subnet for {} (example: 192.168.0.5/24): " msgstr "Введите IP-адрес и подсеть для {} (пример: 192.168.0.5/24): " msgid "Enter your gateway (router) IP address or leave blank for none: " -msgstr "Введите IP-адрес вашего шлюза (маршрутизатора) или оставьте пустым, если его нет: " +msgstr "" +"Введите IP-адрес вашего шлюза (маршрутизатора) или оставьте пустым, если его " +"нет: " msgid "Enter your DNS servers (space separated, blank for none): " msgstr "Введите ваши DNS-серверы (через пробел, пустой - нет): " msgid "Select which filesystem your main partition should use" -msgstr "Выберите, какую файловую систему должен использовать ваш основной раздел" +msgstr "" +"Выберите, какую файловую систему должен использовать ваш основной раздел" msgid "Current partition layout" msgstr "Текущая разметка разделов" @@ -100,8 +129,10 @@ msgstr "Введите желаемый тип файловой системы msgid "Enter the start sector (percentage or block number, default: {}): " msgstr "Введите начальный сектор (процент или номер блока, по умолчанию: {}): " -msgid "Enter the end sector of the partition (percentage or block number, ex: {}): " -msgstr "Введите конечный сектор раздела (процент или номер блока, например: {}): " +msgid "" +"Enter the end sector of the partition (percentage or block number, ex: {}): " +msgstr "" +"Введите конечный сектор раздела (процент или номер блока, например: {}): " msgid "{} contains queued partitions, this will remove those, are you sure?" msgstr "{} содержит разделы в очереди, это удалит их, вы уверены?" @@ -124,11 +155,17 @@ msgstr "" "\n" "Выберите по индексу, какой раздел куда монтировать" -msgid " * Partition mount-points are relative to inside the installation, the boot would be /boot as an example." -msgstr " * Точки монтирования разделов являются относительными внутри установки, например, загрузочный будет /boot." +msgid "" +" * Partition mount-points are relative to inside the installation, the boot " +"would be /boot as an example." +msgstr "" +" * Точки монтирования разделов являются относительными внутри установки, " +"например, загрузочный будет /boot." msgid "Select where to mount partition (leave blank to remove mountpoint): " -msgstr "Выберите куда монтировать раздел (оставьте пустым, чтобы удалить точку монтирования): " +msgstr "" +"Выберите куда монтировать раздел (оставьте пустым, чтобы удалить точку " +"монтирования): " msgid "" "{}\n" @@ -173,16 +210,25 @@ msgid "Select Archinstall language" msgstr "Выберите язык Archinstall" msgid "Wipe all selected drives and use a best-effort default partition layout" -msgstr "Стереть все выбранные диски и использовать оптимальную схему разделов по умолчанию" +msgstr "" +"Стереть все выбранные диски и использовать оптимальную схему разделов по " +"умолчанию" -msgid "Select what to do with each individual drive (followed by partition usage)" -msgstr "Выберите, что делать с каждым отдельным диском (с последующим использованием разделов)" +msgid "" +"Select what to do with each individual drive (followed by partition usage)" +msgstr "" +"Выберите, что делать с каждым отдельным диском (с последующим использованием " +"разделов)" msgid "Select what you wish to do with the selected block devices" msgstr "Выберите, что вы хотите сделать с выбранными блочными устройствами" -msgid "This is a list of pre-programmed profiles, they might make it easier to install things like desktop environments" -msgstr "Это список предварительно запрограммированных профилей, они могут облегчить установку таких вещей, как окружения рабочего стола" +msgid "" +"This is a list of pre-programmed profiles, they might make it easier to " +"install things like desktop environments" +msgstr "" +"Это список предварительно запрограммированных профилей, они могут облегчить " +"установку таких вещей, как окружения рабочего стола" msgid "Select Keyboard layout" msgstr "Выберите раскладку клавиатуры" @@ -191,16 +237,29 @@ msgid "Select one of the regions to download packages from" msgstr "Выберите один из регионов для загрузки пакетов" msgid "Select one or more hard drives to use and configure" -msgstr "Выберите один или несколько жестких дисков для использования и настройте их" +msgstr "" +"Выберите один или несколько жестких дисков для использования и настройте их" -msgid "For the best compatibility with your AMD hardware, you may want to use either the all open-source or AMD / ATI options." -msgstr "Для наилучшей совместимости с оборудованием AMD вы можете использовать либо все варианты с открытым исходным кодом, либо AMD / ATI." +msgid "" +"For the best compatibility with your AMD hardware, you may want to use " +"either the all open-source or AMD / ATI options." +msgstr "" +"Для наилучшей совместимости с оборудованием AMD вы можете использовать либо " +"все варианты с открытым исходным кодом, либо AMD / ATI." -msgid "For the best compatibility with your Intel hardware, you may want to use either the all open-source or Intel options.\n" -msgstr "Для лучшей совместимости с оборудованием Intel вы можете использовать либо все варианты с открытым исходным кодом, либо Intel.\n" +msgid "" +"For the best compatibility with your Intel hardware, you may want to use " +"either the all open-source or Intel options.\n" +msgstr "" +"Для лучшей совместимости с оборудованием Intel вы можете использовать либо " +"все варианты с открытым исходным кодом, либо Intel.\n" -msgid "For the best compatibility with your Nvidia hardware, you may want to use the Nvidia proprietary driver.\n" -msgstr "Для наилучшей совместимости с оборудованием Nvidia вы можете использовать проприетарный драйвер Nvidia.\n" +msgid "" +"For the best compatibility with your Nvidia hardware, you may want to use " +"the Nvidia proprietary driver.\n" +msgstr "" +"Для наилучшей совместимости с оборудованием Nvidia вы можете использовать " +"проприетарный драйвер Nvidia.\n" msgid "" "\n" @@ -209,13 +268,15 @@ msgid "" msgstr "" "\n" "\n" -"Выберите графический драйвер или оставьте пустым, чтобы установить все драйверы с открытым исходным кодом" +"Выберите графический драйвер или оставьте пустым, чтобы установить все " +"драйверы с открытым исходным кодом" msgid "All open-source (default)" msgstr "Все с открытым исходным кодом (по умолчанию)" msgid "Choose which kernels to use or leave blank for default \"{}\"" -msgstr "Выберите, какие ядра использовать, или оставьте пустым по умолчанию \"{}\"." +msgstr "" +"Выберите, какие ядра использовать, или оставьте пустым по умолчанию \"{}\"." msgid "Choose which locale language to use" msgstr "Выберите, какой язык локали использовать" @@ -232,8 +293,12 @@ msgstr "Выберите один или несколько из приведе msgid "Adding partition...." msgstr "Добавление раздела...." -msgid "You need to enter a valid fs-type in order to continue. See `man parted` for valid fs-type's." -msgstr "Чтобы продолжить, вам нужно ввести действительный fs-тип. Смотрите `man parted` для правильных fs-типов." +msgid "" +"You need to enter a valid fs-type in order to continue. See `man parted` for " +"valid fs-type's." +msgstr "" +"Чтобы продолжить, вам нужно ввести действительный fs-тип. Смотрите `man " +"parted` для правильных fs-типов." msgid "Error: Listing profiles on URL \"{}\" resulted in:" msgstr "Ошибка: Перечисление профилей по URL \"{}\" привело к:" @@ -305,7 +370,8 @@ msgid "" "Do you wish to continue?" msgstr "" "Вы решили пропустить выбор жесткого диска\n" -"и будете использовать любой диск, смонтированный по адресу {} (экспериментально)\n" +"и будете использовать любой диск, смонтированный по адресу {} " +"(экспериментально)\n" "ПРЕДУПРЕЖДЕНИЕ: Archinstall не будет проверять пригодность этой установки.\n" "Вы хотите продолжить?" @@ -325,13 +391,16 @@ msgid "Assign mount-point for a partition" msgstr "Назначить точку монтирования для раздела" msgid "Mark/Unmark a partition to be formatted (wipes data)" -msgstr "Пометить/снять отметку с раздела, который будет отформатирован (стирание данных)" +msgstr "" +"Пометить/снять отметку с раздела, который будет отформатирован (стирание " +"данных)" msgid "Mark/Unmark a partition as encrypted" msgstr "Пометить/снять отметку с раздела как зашифрованный" msgid "Mark/Unmark a partition as bootable (automatic for /boot)" -msgstr "Пометить/снять отметку с раздела как загрузочный (автоматически для /boot)" +msgstr "" +"Пометить/снять отметку с раздела как загрузочный (автоматически для /boot)" msgid "Set desired filesystem for a partition" msgstr "Установите желаемую файловую систему для раздела" @@ -371,7 +440,8 @@ msgid "Enter a encryption password for {}" msgstr "Введите пароль шифрования для {}" msgid "Enter disk encryption password (leave blank for no encryption): " -msgstr "Введите пароль шифрования диска (оставьте пустым для отсутствия шифрования): " +msgstr "" +"Введите пароль шифрования диска (оставьте пустым для отсутствия шифрования): " msgid "Create a required super-user with sudo privileges: " msgstr "Создайте необходимого суперпользователя с привилегиями sudo: " @@ -382,31 +452,43 @@ msgstr "Введите пароль root (оставьте пустым, что msgid "Password for user \"{}\": " msgstr "Пароль для пользователя \"{}\": " -msgid "Verifying that additional packages exist (this might take a few seconds)" -msgstr "Проверка наличия дополнительных пакетов (это может занять несколько секунд)" +msgid "" +"Verifying that additional packages exist (this might take a few seconds)" +msgstr "" +"Проверка наличия дополнительных пакетов (это может занять несколько секунд)" -msgid "Would you like to use automatic time synchronization (NTP) with the default time servers?\n" -msgstr "Вы хотите использовать автоматическую синхронизацию времени (NTP) с серверами времени по умолчанию?\n" +msgid "" +"Would you like to use automatic time synchronization (NTP) with the default " +"time servers?\n" +msgstr "" +"Вы хотите использовать автоматическую синхронизацию времени (NTP) с " +"серверами времени по умолчанию?\n" msgid "" -"Hardware time and other post-configuration steps might be required in order for NTP to work.\n" +"Hardware time and other post-configuration steps might be required in order " +"for NTP to work.\n" "For more information, please check the Arch wiki" msgstr "" -"Для работы NTP может потребоваться аппаратное время и другие шаги после конфигурации.\n" +"Для работы NTP может потребоваться аппаратное время и другие шаги после " +"конфигурации.\n" "Для получения дополнительной информации, пожалуйста, ознакомьтесь с ArchWiki" msgid "Enter a username to create an additional user (leave blank to skip): " -msgstr "Введите имя пользователя для создания дополнительного пользователя (оставьте пустым, чтобы пропустить): " +msgstr "" +"Введите имя пользователя для создания дополнительного пользователя (оставьте " +"пустым, чтобы пропустить): " msgid "Use ESC to skip\n" msgstr "Используйте ESC, чтобы пропустить\n" msgid "" "\n" -" Choose an object from the list, and select one of the available actions for it to execute" +" Choose an object from the list, and select one of the available actions for " +"it to execute" msgstr "" "\n" -" Выберите объект из списка и выберите одно из доступных действий для его выполнения" +" Выберите объект из списка и выберите одно из доступных действий для его " +"выполнения" msgid "Cancel" msgstr "Отменить" @@ -442,11 +524,17 @@ msgstr "" "\n" "Это выбранная вами конфигурация:" -msgid "Pacman is already running, waiting maximum 10 minutes for it to terminate." -msgstr "Pacman уже запущен, ожидание его завершения составляет максимум 10 минут." +msgid "" +"Pacman is already running, waiting maximum 10 minutes for it to terminate." +msgstr "" +"Pacman уже запущен, ожидание его завершения составляет максимум 10 минут." -msgid "Pre-existing pacman lock never exited. Please clean up any existing pacman sessions before using archinstall." -msgstr "Существовавшая ранее блокировка pacman не завершилась. Пожалуйста, очистите все существующие сессии pacman перед использованием archinstall." +msgid "" +"Pre-existing pacman lock never exited. Please clean up any existing pacman " +"sessions before using archinstall." +msgstr "" +"Существовавшая ранее блокировка pacman не завершилась. Пожалуйста, очистите " +"все существующие сессии pacman перед использованием archinstall." msgid "Choose which optional additional repositories to enable" msgstr "Выберите, какие дополнительные репозитории следует включить" @@ -537,7 +625,8 @@ msgid "Missing configurations:\n" msgstr "Отсутствующие конфигурации:\n" msgid "Either root-password or at least 1 superuser must be specified" -msgstr "Должен быть указан либо пароль root, либо как минимум 1 суперпользователь" +msgstr "" +"Должен быть указан либо пароль root, либо как минимум 1 суперпользователь" msgid "Manage superuser accounts: " msgstr "Управление учетными записями суперпользователей: " @@ -597,8 +686,12 @@ msgstr "Хотите ли вы использовать сжатие BTRFS?" msgid "Would you like to create a separate partition for /home?" msgstr "Хотите ли вы создать отдельный раздел для /home?" -msgid "The selected drives do not have the minimum capacity required for an automatic suggestion\n" -msgstr "Выбранные диски не имеют минимальной емкости, необходимой для автоматического предложения\n" +msgid "" +"The selected drives do not have the minimum capacity required for an " +"automatic suggestion\n" +msgstr "" +"Выбранные диски не имеют минимальной емкости, необходимой для " +"автоматического предложения\n" msgid "Minimum capacity for /home partition: {}GB\n" msgstr "Минимальный размер раздела /home: {}GB\n" @@ -625,7 +718,9 @@ msgid "No iface specified for manual configuration" msgstr "Не указан iface для ручной настройки" msgid "Manual nic configuration with no auto DHCP requires an IP address" -msgstr "Ручная конфигурация сетевого адаптера без автоматического DHCP требует IP-адреса" +msgstr "" +"Ручная конфигурация сетевого адаптера без автоматического DHCP требует IP-" +"адреса" msgid "Add interface" msgstr "Добавить интерфейс" @@ -645,109 +740,127 @@ msgstr "Ручная конфигурация" msgid "Mark/Unmark a partition as compressed (btrfs only)" msgstr "Пометить/снять отметку с раздела как сжатый (только для btrfs)" -msgid "The password you are using seems to be weak, are you sure you want to use it?" -msgstr "Пароль, который вы используете, кажется слабым, вы уверены, что хотите его использовать?" +msgid "" +"The password you are using seems to be weak, are you sure you want to use it?" +msgstr "" +"Пароль, который вы используете, кажется слабым, вы уверены, что хотите его " +"использовать?" -msgid "Provides a selection of desktop environments and tiling window managers, e.g. gnome, kde, sway" -msgstr "Предоставляет выбор окружений рабочего стола и тайловых оконных менеджеров, например, gnome, kde, sway" +msgid "" +"Provides a selection of desktop environments and tiling window managers, e." +"g. gnome, kde, sway" +msgstr "" +"Предоставляет выбор окружений рабочего стола и тайловых оконных менеджеров, " +"например, gnome, kde, sway" msgid "Select your desired desktop environment" msgstr "Выберите желаемое окружение рабочего стола" -msgid "A very basic installation that allows you to customize Arch Linux as you see fit." -msgstr "Очень базовая установка, позволяющая настроить Arch Linux по своему усмотрению." +msgid "" +"A very basic installation that allows you to customize Arch Linux as you see " +"fit." +msgstr "" +"Очень базовая установка, позволяющая настроить Arch Linux по своему " +"усмотрению." -msgid "Provides a selection of various server packages to install and enable, e.g. httpd, nginx, mariadb" -msgstr "Предоставляет выбор различных пакетов сервера для установки и включения, например, httpd, nginx, mariadb" +msgid "" +"Provides a selection of various server packages to install and enable, e.g. " +"httpd, nginx, mariadb" +msgstr "" +"Предоставляет выбор различных пакетов сервера для установки и включения, " +"например, httpd, nginx, mariadb" -msgid "Choose which servers to install, if none then a minimal installation wil be done" -msgstr "Выберите серверы для установки, если их нет, то будет выполнена минимальная установка" +msgid "" +"Choose which servers to install, if none then a minimal installation wil be " +"done" +msgstr "" +"Выберите серверы для установки, если их нет, то будет выполнена минимальная " +"установка" msgid "Installs a minimal system as well as xorg and graphics drivers." -msgstr "Устанавливает минимальную систему, а также xorg и графические драйверы." +msgstr "" +"Устанавливает минимальную систему, а также xorg и графические драйверы." msgid "Press Enter to continue." msgstr "Нажмите Enter, чтобы продолжить." -msgid "Would you like to chroot into the newly created installation and perform post-installation configuration?" -msgstr "Хотите ли вы использовать chroot в новой созданной установке и выполнить настройку после установки?" +msgid "" +"Would you like to chroot into the newly created installation and perform " +"post-installation configuration?" +msgstr "" +"Хотите ли вы использовать chroot в новой созданной установке и выполнить " +"настройку после установки?" -#, fuzzy msgid "Are you sure you want to reset this setting?" -msgstr "вы уверены, что хотите его использовать?" +msgstr "Вы уверены, что хотите сбросить эту настройку?" -#, fuzzy msgid "Select one or more hard drives to use and configure\n" -msgstr "Выберите один или несколько жестких дисков для использования и настройте их" +msgstr "" +"Выберите один или несколько жестких дисков для использования и настройки\n" msgid "Any modifications to the existing setting will reset the disk layout!" msgstr "" +"Любые изменения существующей настройки приведут к сбросу разметки диска!" -msgid "If you reset the harddrive selection this will also reset the current disk layout. Are you sure?" +msgid "" +"If you reset the harddrive selection this will also reset the current disk " +"layout. Are you sure?" msgstr "" +"Если вы сбросите выбор жесткого диска, это также сбросит текущую разметку " +"диска. Вы уверены?" -#, fuzzy msgid "Save and exit" -msgstr "Подтвердить и выйти" +msgstr "Сохранить и выйти" -#, fuzzy msgid "" "{}\n" "contains queued partitions, this will remove those, are you sure?" -msgstr "{} содержит разделы в очереди, это удалит их, вы уверены?" +msgstr "" +"{}\n" +"содержит разделы в очереди, это удалит их, вы уверены?" -#, fuzzy msgid "No audio server" -msgstr "Выберите звуковой сервер" +msgstr "Отсутствует звуковой сервер" msgid "(default)" -msgstr "" +msgstr "(по умолчанию)" -#, fuzzy msgid "Use ESC to skip" -msgstr "Используйте ESC, чтобы пропустить\n" +msgstr "Используйте ESC, чтобы пропустить" msgid "" "Use CTRL+C to reset current selection\n" "\n" msgstr "" +"Используйте CTRL+C для сброса текущего выбора\n" +"\n" -#, fuzzy msgid "Copy to: " -msgstr "Копировать в:" +msgstr "Копировать в: " -#, fuzzy msgid "Edit: " -msgstr "Редактировать" +msgstr "Редактировать: " msgid "Key: " -msgstr "" +msgstr "Ключ: " -#, fuzzy msgid "Edit {}: " -msgstr "Редактировать:" +msgstr "Редактировать {}: " -msgid "Add :" -msgstr "Добавить:" +msgid "Add: " +msgstr "Добавить: " -msgid "Value :" -msgstr "Значение:" +msgid "Value: " +msgstr "Значение: " #, python-brace-format #~ msgid "Edit {origkey} :" #~ msgstr "Редактировать {origkey}:" -#~ msgid "Copy to :" -#~ msgstr "Копировать в:" - -#~ msgid "Edite :" -#~ msgstr "Редактировать:" - -#~ msgid "Key :" -#~ msgstr "Ключ:" - #~ msgid "Archinstall requires root privileges to run. See --help for more." -#~ msgstr "Для запуска Archinstall требуются привилегии root. Для получения дополнительной информации смотрите --help." +#~ msgstr "" +#~ "Для запуска Archinstall требуются привилегии root. Для получения " +#~ "дополнительной информации смотрите --help." #~ msgid " ! Formatting {archinstall.arguments['harddrives']} in " #~ msgstr " ! Форматирование {archinstall.arguments['harddrives']} в " -- cgit v1.2.3-70-g09d2 From 81b7524b53fe21664ec6da3b69e507638b1ed253 Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Thu, 12 May 2022 10:46:33 +0200 Subject: Made sure remote sourcing works for --creds, --config and --disk-layout. (#1170) * Made sure remote sourcing works for --creds, --config and --disk-layout. * Spelling error when moving around source code. --- archinstall/__init__.py | 21 ++++++-------------- archinstall/lib/general.py | 49 ++++++++++++++++++++++++++++------------------ 2 files changed, 36 insertions(+), 34 deletions(-) (limited to 'archinstall/lib') diff --git a/archinstall/__init__.py b/archinstall/__init__.py index 536db370..aa644d48 100644 --- a/archinstall/__init__.py +++ b/archinstall/__init__.py @@ -149,22 +149,13 @@ def get_arguments() -> Dict[str, Any]: # preprocess the json files. # TODO Expand the url access to the other JSON file arguments ? if args.config is not None: - try: - # First, let's check if this is a URL scheme instead of a filename - parsed_url = urllib.parse.urlparse(args.config) - - if not parsed_url.scheme: # The Profile was not a direct match on a remote URL, it must be a local file. - if not json_stream_to_structure('--config',args.config,config): - exit(1) - else: # Attempt to load the configuration from the URL. - with urllib.request.urlopen(urllib.request.Request(args.config, headers={'User-Agent': 'ArchInstall'})) as response: - config.update(json.loads(response.read())) - except Exception as e: - raise ValueError(f"Could not load --config because: {e}") + if not json_stream_to_structure('--config', args.config, config): + exit(1) - if args.creds is not None: - if not json_stream_to_structure('--creds',args.creds,config): - exit(1) + if args.creds is not None: + if not json_stream_to_structure('--creds', args.creds, config): + exit(1) + # load the parameters. first the known, then the unknowns config.update(vars(args)) config.update(parse_unspecified_argument_list(unknowns)) diff --git a/archinstall/lib/general.py b/archinstall/lib/general.py index cf925de3..a4e2a365 100644 --- a/archinstall/lib/general.py +++ b/archinstall/lib/general.py @@ -10,6 +10,9 @@ import string import sys import time import re +import urllib.parse +import urllib.request +import pathlib from datetime import datetime, date from typing import Callable, Optional, Dict, Any, List, Union, Iterator, TYPE_CHECKING # https://stackoverflow.com/a/39757388/929999 @@ -532,32 +535,40 @@ def run_custom_user_commands(commands :List[str], installation :Installer) -> No log(execution_output) os.unlink(f"{installation.target}/var/tmp/user-command.{index}.sh") -def json_stream_to_structure(id : str, stream :str, target :dict) -> bool : - """ Function to load a stream (file (as name) or valid JSON string into an existing dictionary +def json_stream_to_structure(configuration_identifier : str, stream :str, target :dict) -> bool : + """ + Function to load a stream (file (as name) or valid JSON string into an existing dictionary Returns true if it could be done Return false if operation could not be executed - +id is just a parameter to get meaningful, but not so long messages + +configuration_identifier is just a parameter to get meaningful, but not so long messages """ - from pathlib import Path - if Path(stream).exists(): - try: - with open(Path(stream)) as fh: - target.update(json.load(fh)) - except Exception as e: - log(f"{id} = {stream} does not contain a valid JSON format: {e}",level=logging.ERROR) - return False + + parsed_url = urllib.parse.urlparse(stream) + + if parsed_url.scheme: # The stream is in fact a URL that should be grabed + with urllib.request.urlopen(urllib.request.Request(stream, headers={'User-Agent': 'ArchInstall'})) as response: + target.update(json.loads(response.read())) else: - log(f"{id} = {stream} does not exists in the filesystem. Trying as JSON stream",level=logging.DEBUG) - # NOTE: failure of this check doesn't make stream 'real' invalid JSON, just it first level entry is not an object (i.e. dict), so it is not a format we handle. - if stream.strip().startswith('{') and stream.strip().endswith('}'): + if pathlib.Path(stream).exists(): try: - target.update(json.loads(stream)) - except Exception as e: - log(f" {id} Contains an invalid JSON format : {e}",level=logging.ERROR) + with pathlib.Path(stream).open() as fh: + target.update(json.load(fh)) + except Exception as error: + log(f"{configuration_identifier} = {stream} does not contain a valid JSON format: {error}", level=logging.ERROR, fg="red") return False else: - log(f" {id} is neither a file nor is a JSON string:",level=logging.ERROR) - return False + # NOTE: This is a rudimentary check if what we're trying parse is a dict structure. + # Which is the only structure we tolerate anyway. + if stream.strip().startswith('{') and stream.strip().endswith('}'): + try: + target.update(json.loads(stream)) + except Exception as e: + log(f" {configuration_identifier} Contains an invalid JSON format : {e}",level=logging.ERROR, fg="red") + return False + else: + log(f" {configuration_identifier} is neither a file nor is a JSON string:",level=logging.ERROR, fg="red") + return False + return True def secret(x :str): -- cgit v1.2.3-70-g09d2 From 53b57a3cec79f1b46ea824868e57d09b0e6c1ddb Mon Sep 17 00:00:00 2001 From: Daniel Girtler Date: Thu, 12 May 2022 21:04:05 +1000 Subject: Fix menu selection (#1173) Co-authored-by: Daniel Girtler --- archinstall/lib/user_interaction/subvolume_config.py | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'archinstall/lib') diff --git a/archinstall/lib/user_interaction/subvolume_config.py b/archinstall/lib/user_interaction/subvolume_config.py index bb159a8b..7383b13d 100644 --- a/archinstall/lib/user_interaction/subvolume_config.py +++ b/archinstall/lib/user_interaction/subvolume_config.py @@ -1,6 +1,7 @@ -from typing import Dict +from typing import Dict, List from ..menu.list_manager import ListManager +from ..menu.menu import MenuSelectionType from ..menu.selection_menu import Selector, GeneralMenu from ..menu.text_input import TextInput from ..menu import Menu @@ -25,6 +26,7 @@ class SubvolumeList(ListManager): text += _(" mounted at {:16}").format(value['mountpoint']) else: text += (' ' * 28) + if value.get('options',[]): text += _(" with option {}").format(', '.join(value['options'])) return text @@ -126,7 +128,17 @@ class SubvolumeMenu(GeneralMenu): def _select_subvolume_mount_point(self,value): return TextInput(str(_("Select a mount point :")),value).run() - def _select_subvolume_options(self,value): + def _select_subvolume_options(self,value) -> List[str]: # def __init__(self, title, p_options, skip=True, multi=False, default_option=None, sort=True): - return Menu(str(_("Select the desired subvolume options ")),['nodatacow','compress'], - skip=True,preset_values=value,multi=True).run() + choice = Menu( + str(_("Select the desired subvolume options ")), + ['nodatacow','compress'], + skip=True, + preset_values=value, + multi=True + ).run() + + if choice.type_ == MenuSelectionType.Selection: + return choice.value + + return [] -- cgit v1.2.3-70-g09d2 From a748f3fba04e771a3c18e66efcd2cf48b42c778e Mon Sep 17 00:00:00 2001 From: "Dylan M. Taylor" Date: Sat, 14 May 2022 01:34:41 -0400 Subject: Adds nvidia-open package as an option. (#1176) * Adds nvidia-open package as an option. Apologies for making the installation even more confusing for Nvidia users. This adds an option for the new open-source kernel module for Turing or later cards, https://github.com/NVIDIA/open-gpu-kernel-modules. nvidia-open is currently in the testing repository. * Change description * Clarify that the other open option is noveau * Added a check to see if the package we include exists in testing or not, and if it does, we allow that repo and warn about it. * Forgot to put level= on log output * Adding __future__ to the top again * Expose package functions from archinstall.lib.packages to avoid explicit imports. * Trying to get menu to show additional changes * Trying a flexible option of setting the menu listings * Trying a flexible option of setting the menu listings * Revert "Trying a flexible option of setting the menu listings" This reverts commit 330080697d0b1ca9ba74f468fdcd36be7736904f. * Revert "Trying a flexible option of setting the menu listings" This reverts commit 701b105b1dd66933dacf11f0be49c521fec758fe. * Revert "Trying to get menu to show additional changes" This reverts commit b038987561ab7764f5d786c3e49789fb217419d7. * Revert "Expose package functions from archinstall.lib.packages to avoid explicit imports." This reverts commit 9244c0b1906b71074f2688210f3c46dc09cbc8c2. * Revert "Adding __future__ to the top again" This reverts commit 1679f00f2e901d093655de261bab4cee5f0a9d57. * Revert "Forgot to put level= on log output" This reverts commit 65618943880bdbddcdd3c7e3427da574d9bf7fed. * Revert "Added a check to see if the package we include exists in testing or not, and if it does, we allow that repo and warn about it." This reverts commit 652308ee40230ee8c70cf0c4f7225d1278788d4a. Co-authored-by: Anton Hvornum --- archinstall/lib/hardware.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'archinstall/lib') diff --git a/archinstall/lib/hardware.py b/archinstall/lib/hardware.py index ea570707..9660ea95 100644 --- a/archinstall/lib/hardware.py +++ b/archinstall/lib/hardware.py @@ -51,7 +51,8 @@ AVAILABLE_GFX_DRIVERS = { "intel-media-driver", "vulkan-intel", ], - "Nvidia (open-source)": [ + "Nvidia (open kernel module for newer GPUs, Turing+)": ["nvidia-open"], + "Nvidia (open-source nouveau driver)": [ "mesa", "xf86-video-nouveau", "libva-mesa-driver" -- cgit v1.2.3-70-g09d2 From 5eac5df9a8930fbe7410c90a707f0d88e478f1f9 Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Mon, 16 May 2022 09:09:51 +0200 Subject: Adding safe methods for __repr__ to call so that it doesn't break (#1190) --- archinstall/lib/disk/blockdevice.py | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) (limited to 'archinstall/lib') diff --git a/archinstall/lib/disk/blockdevice.py b/archinstall/lib/disk/blockdevice.py index 206c3b7e..188927b1 100644 --- a/archinstall/lib/disk/blockdevice.py +++ b/archinstall/lib/disk/blockdevice.py @@ -32,7 +32,7 @@ class BlockDevice: # I'm placing the encryption password on a BlockDevice level. def __repr__(self, *args :str, **kwargs :str) -> str: - return f"BlockDevice({self.device_or_backfile}, size={self.size}GB, free_space={'+'.join(part[2] for part in self.free_space)}, bus_type={self.bus_type})" + return f"BlockDevice({self.device_or_backfile}, size={self._safe_size}GB, free_space={self._safe_free_space}, bus_type={self.bus_type})" def __iter__(self) -> Iterator[Partition]: for partition in self.partitions: @@ -167,6 +167,18 @@ class BlockDevice: """ return SysCommand(f'blkid -s PTUUID -o value {self.path}').decode('UTF-8') + @property + def _safe_size(self) -> float: + from .helpers import convert_size_to_gb + + try: + output = json.loads(SysCommand(f"lsblk --json -b -o+SIZE {self.path}").decode('UTF-8')) + except SysCallError: + return -1.0 + + for device in output['blockdevices']: + return convert_size_to_gb(device['size']) + @property def size(self) -> float: from .helpers import convert_size_to_gb @@ -191,7 +203,14 @@ class BlockDevice: return device['rota'] is True @property - def free_space(self) -> Tuple[str, str, str]: + def _safe_free_space(self) -> Tuple[str, ...]: + try: + return '+'.join(part[2] for part in self.free_space) + except SysCallError: + return '?' + + @property + def free_space(self) -> Tuple[str, ...]: # NOTE: parted -s will default to `cancel` on prompt, skipping any partition # that is "outside" the disk. in /dev/sr0 this is usually the case with Archiso, # so the free will ignore the ESP partition and just give the "free" space. -- cgit v1.2.3-70-g09d2 From 0cc98708383d1efe838cb7b64af6d3cae7e0bb10 Mon Sep 17 00:00:00 2001 From: Daniel Girtler Date: Mon, 16 May 2022 17:45:48 +1000 Subject: Remove print (#1172) Co-authored-by: Daniel Girtler --- archinstall/lib/translation.py | 1 - 1 file changed, 1 deletion(-) (limited to 'archinstall/lib') diff --git a/archinstall/lib/translation.py b/archinstall/lib/translation.py index c9dd065a..1a0e94e4 100644 --- a/archinstall/lib/translation.py +++ b/archinstall/lib/translation.py @@ -72,7 +72,6 @@ class Translation: for names in self._get_translation_lang(): try: - print(names) self._languages[names[0]] = gettext.translation('base', localedir=locales_dir, languages=names) except FileNotFoundError as error: raise TranslationError(f"Could not locate language file for '{names}': {error}") -- cgit v1.2.3-70-g09d2 From 8d4a62e504e98f89ad7b80850ac3b280af9a9b49 Mon Sep 17 00:00:00 2001 From: kpcyrd Date: Mon, 16 May 2022 08:23:15 +0000 Subject: Add network-manager-applet to NetworkManager profile (#1120) * Add network-manager-applet to NetworkManager profile * Converted _configuration.is_desktop_profile() into profile.is_desktop_profile Co-authored-by: Anton Hvornum --- archinstall/lib/models/network_configuration.py | 5 ++++- archinstall/lib/profiles.py | 4 ++++ 2 files changed, 8 insertions(+), 1 deletion(-) (limited to 'archinstall/lib') diff --git a/archinstall/lib/models/network_configuration.py b/archinstall/lib/models/network_configuration.py index 16136177..4f135da5 100644 --- a/archinstall/lib/models/network_configuration.py +++ b/archinstall/lib/models/network_configuration.py @@ -5,6 +5,7 @@ from enum import Enum from typing import List, Optional, Dict, Union, Any, TYPE_CHECKING from ..output import log +from ..storage import storage if TYPE_CHECKING: _: Any @@ -77,7 +78,9 @@ class NetworkConfigurationHandler: installation.copy_iso_network_config( enable_services=True) # Sources the ISO network configuration to the install medium. elif self._configuration.is_network_manager(): - installation.add_additional_packages("networkmanager") + installation.add_additional_packages(["networkmanager"]) + if (profile := storage['arguments'].get('profile')) and profile.is_desktop_profile: + installation.add_additional_packages(["network-manager-applet"]) installation.enable_service('NetworkManager.service') def _backwards_compability_config(self, config: Union[str,Dict[str, str]]) -> Union[List[NetworkConfiguration], NetworkConfiguration, None]: diff --git a/archinstall/lib/profiles.py b/archinstall/lib/profiles.py index 33214ee8..a4fbe490 100644 --- a/archinstall/lib/profiles.py +++ b/archinstall/lib/profiles.py @@ -211,6 +211,10 @@ class Profile(Script): def name(self) -> str: return os.path.basename(self.profile) + @property + def is_desktop_profile(self) -> bool: + return is_desktop_profile(repr(self)) + def install(self) -> ModuleType: # Before installing, revert any temporary changes to the namespace. # This ensures that the namespace during installation is the original initiation namespace. -- cgit v1.2.3-70-g09d2 From fb867f7d5dcf9158badc09b5c34c6ecb12c9a927 Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Mon, 16 May 2022 10:40:48 +0200 Subject: Enabling retry for package downloads (#1188) * Adding in a re-try on pacstrap calls * Made pacman -Syy also retry:able --- archinstall/lib/installer.py | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) (limited to 'archinstall/lib') diff --git a/archinstall/lib/installer.py b/archinstall/lib/installer.py index b0f7ac32..e94a00c4 100644 --- a/archinstall/lib/installer.py +++ b/archinstall/lib/installer.py @@ -365,15 +365,28 @@ class Installer: self.log(f'Installing packages: {packages}', level=logging.INFO) - if (sync_mirrors := run_pacman('-Syy', default_cmd='/usr/bin/pacman')).exit_code == 0: - if (pacstrap := SysCommand(f'/usr/bin/pacstrap -C /etc/pacman.conf {self.target} {" ".join(packages)} --noconfirm', peak_output=True)).exit_code == 0: - return True - else: - self.log(f'Could not strap in packages: {pacstrap}', level=logging.ERROR, fg="red") - self.log(f'Could not strap in packages: {pacstrap.exit_code}', level=logging.ERROR, fg="red") - raise RequirementError("Pacstrap failed. See /var/log/archinstall/install.log or above message for error details.") - else: - self.log(f'Could not sync mirrors: {sync_mirrors.exit_code}', level=logging.INFO) + # TODO: We technically only need to run the -Syy once. + try: + run_pacman('-Syy', default_cmd='/usr/bin/pacman') + except SysCallError as error: + self.log(f'Could not sync a new package databse: {error}', level=logging.ERROR, fg="red") + + if storage['arguments'].get('silent', False) is False: + if input('Would you like to re-try this download? (Y/n): ').lower().strip() in ('', 'y'): + return self.pacstrap(*packages, **kwargs) + + raise RequirementError(f'Could not sync mirrors: {error}', level=logging.ERROR, fg="red") + + try: + return SysCommand(f'/usr/bin/pacstrap -C /etc/pacman.conf {self.target} {" ".join(packages)} --noconfirm', peak_output=True).exit_code == 0 + except SysCallError as error: + self.log(f'Could not strap in packages: {error}', level=logging.ERROR, fg="red") + + if storage['arguments'].get('silent', False) is False: + if input('Would you like to re-try this download? (Y/n): ').lower().strip() in ('', 'y'): + return self.pacstrap(*packages, **kwargs) + + raise RequirementError("Pacstrap failed. See /var/log/archinstall/install.log or above message for error details.") def set_mirrors(self, mirrors :Mapping[str, Iterator[str]]) -> None: for plugin in plugins.values(): -- cgit v1.2.3-70-g09d2 From 86eff2a90381208de451477b36825b792e2abce2 Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Mon, 16 May 2022 13:03:08 +0200 Subject: Don't assume children exists (#1193) --- archinstall/lib/disk/filesystem.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'archinstall/lib') diff --git a/archinstall/lib/disk/filesystem.py b/archinstall/lib/disk/filesystem.py index 8a531de0..db97924f 100644 --- a/archinstall/lib/disk/filesystem.py +++ b/archinstall/lib/disk/filesystem.py @@ -55,7 +55,7 @@ class Filesystem: output = json.loads(SysCommand(f"lsblk --json {self.blockdevice.device}").decode('UTF-8')) for device in output['blockdevices']: - for index, partition in enumerate(device['children']): + for index, partition in enumerate(device.get('children', [])): # But we'll use blkid to reliably grab the PARTUUID for that child device (partition) partition_uuid = SysCommand(f"blkid -s PARTUUID -o value /dev/{partition.get('name')}").decode().strip() if partition_uuid.lower() == uuid.lower(): -- cgit v1.2.3-70-g09d2 From bdf11913d4bbfa84a6008b3a0b707edb78a1c210 Mon Sep 17 00:00:00 2001 From: Reza <3228126+i2@users.noreply.github.com> Date: Mon, 16 May 2022 18:11:09 -0300 Subject: Fix lengthy translations in Main Menu (Important) (#1195) * Fix lengthy translations in Main Menu * rename 'Additional repositories' to 'Optional repositories' * rename 'Drives' to 'Drive(s)' * rename 'Choose keyboard layout' to 'Select keyboard layout' --- archinstall/lib/menu/global_menu.py | 40 ++++++------ archinstall/lib/menu/selection_menu.py | 2 +- archinstall/lib/user_interaction/general_conf.py | 4 +- archinstall/locales/base.pot | 42 ++++++------- archinstall/locales/de/LC_MESSAGES/base.po | 76 +++++++++++----------- archinstall/locales/en/LC_MESSAGES/base.po | 42 ++++++------- archinstall/locales/es/LC_MESSAGES/base.po | 80 ++++++++++++------------ archinstall/locales/fr/LC_MESSAGES/base.po | 80 ++++++++++++------------ archinstall/locales/nl/LC_MESSAGES/base.po | 80 ++++++++++++------------ archinstall/locales/pl/LC_MESSAGES/base.po | 80 ++++++++++++------------ archinstall/locales/pt/LC_MESSAGES/base.po | 80 ++++++++++++------------ archinstall/locales/ru/LC_MESSAGES/base.po | 80 ++++++++++++------------ archinstall/locales/sv/LC_MESSAGES/base.po | 80 ++++++++++++------------ archinstall/locales/ur/LC_MESSAGES/base.po | 80 ++++++++++++------------ examples/swiss.py | 2 +- 15 files changed, 424 insertions(+), 424 deletions(-) (limited to 'archinstall/lib') diff --git a/archinstall/lib/menu/global_menu.py b/archinstall/lib/menu/global_menu.py index 889d4f85..f0f327ee 100644 --- a/archinstall/lib/menu/global_menu.py +++ b/archinstall/lib/menu/global_menu.py @@ -42,33 +42,33 @@ class GlobalMenu(GeneralMenu): # archinstall.Language will not use preset values self._menu_options['archinstall-language'] = \ Selector( - _('Select Archinstall language'), + _('Archinstall language'), lambda x: self._select_archinstall_language(x), default='English') self._menu_options['keyboard-layout'] = \ Selector( - _('Select keyboard layout'), + _('Keyboard layout'), lambda preset: select_language(preset), default='us') self._menu_options['mirror-region'] = \ Selector( - _('Select mirror region'), + _('Mirror region'), lambda preset: select_mirror_regions(preset), display_func=lambda x: list(x.keys()) if x else '[]', default={}) self._menu_options['sys-language'] = \ Selector( - _('Select locale language'), + _('Locale language'), lambda preset: select_locale_lang(preset), default='en_US') self._menu_options['sys-encoding'] = \ Selector( - _('Select locale encoding'), + _('Locale encoding'), lambda preset: select_locale_enc(preset), default='UTF-8') self._menu_options['harddrives'] = \ Selector( - _('Select harddrives'), + _('Drive(s)'), lambda preset: self._select_harddrives(preset)) self._menu_options['disk_layouts'] = \ Selector( @@ -87,28 +87,28 @@ class GlobalMenu(GeneralMenu): dependencies=['harddrives']) self._menu_options['swap'] = \ Selector( - _('Use swap'), + _('Swap'), lambda preset: ask_for_swap(preset), default=True) self._menu_options['bootloader'] = \ Selector( - _('Select bootloader'), + _('Bootloader'), lambda preset: ask_for_bootloader(storage['arguments'].get('advanced', False),preset), default="systemd-bootctl" if has_uefi() else "grub-install") self._menu_options['hostname'] = \ Selector( - _('Specify hostname'), + _('Hostname'), ask_hostname, default='archlinux') # root password won't have preset value self._menu_options['!root-password'] = \ Selector( - _('Set root password'), + _('root password'), lambda preset:self._set_root_password(), display_func=lambda x: secret(x) if x else 'None') self._menu_options['!superusers'] = \ Selector( - _('Specify superuser account'), + _('Superuser account'), lambda preset: self._create_superuser_account(), default={}, exec_func=lambda n,v:self._users_resynch(), @@ -116,53 +116,53 @@ class GlobalMenu(GeneralMenu): display_func=lambda x: self._display_superusers()) self._menu_options['!users'] = \ Selector( - _('Specify user account'), + _('User account'), lambda x: self._create_user_account(), default={}, exec_func=lambda n,v:self._users_resynch(), display_func=lambda x: list(x.keys()) if x else '[]') self._menu_options['profile'] = \ Selector( - _('Specify profile'), + _('Profile'), lambda preset: self._select_profile(preset), display_func=lambda x: x if x else 'None') self._menu_options['audio'] = \ Selector( - _('Select audio'), + _('Audio'), lambda preset: ask_for_audio_selection(is_desktop_profile(storage['arguments'].get('profile', None)),preset), display_func=lambda x: x if x else 'None', default=None ) self._menu_options['kernels'] = \ Selector( - _('Select kernels'), + _('Kernels'), lambda preset: select_kernel(preset), default=['linux']) self._menu_options['packages'] = \ Selector( - _('Additional packages to install'), + _('Additional packages'), # lambda x: ask_additional_packages_to_install(storage['arguments'].get('packages', None)), ask_additional_packages_to_install, default=[]) self._menu_options['additional-repositories'] = \ Selector( - _('Additional repositories to enable'), + _('Optional repositories'), select_additional_repositories, default=[]) self._menu_options['nic'] = \ Selector( - _('Configure network'), + _('Network configuration'), ask_to_configure_network, display_func=lambda x: self._prev_network_configuration(x), default={}) self._menu_options['timezone'] = \ Selector( - _('Select timezone'), + _('Timezone'), lambda preset: ask_for_a_timezone(preset), default='UTC') self._menu_options['ntp'] = \ Selector( - _('Set automatic time sync (NTP)'), + _('Automatic time sync (NTP)'), lambda preset: self._select_ntp(preset), default=True) self._menu_options['__separator__'] = \ diff --git a/archinstall/lib/menu/selection_menu.py b/archinstall/lib/menu/selection_menu.py index 123ddf7e..73ba1148 100644 --- a/archinstall/lib/menu/selection_menu.py +++ b/archinstall/lib/menu/selection_menu.py @@ -18,7 +18,7 @@ def select_archinstall_language(preset_value: str) -> Optional[str]: copied from user_interaction/general_conf.py as a temporary measure """ languages = Translation.get_available_lang() - language = Menu(_('Select Archinstall language'), languages, preset_values=preset_value).run() + language = Menu(_('Archinstall language'), languages, preset_values=preset_value).run() return language.value diff --git a/archinstall/lib/user_interaction/general_conf.py b/archinstall/lib/user_interaction/general_conf.py index 43afef8d..c3a2a7a7 100644 --- a/archinstall/lib/user_interaction/general_conf.py +++ b/archinstall/lib/user_interaction/general_conf.py @@ -79,7 +79,7 @@ def select_language(preset_value: str = None) -> str: sorted_kb_lang = sorted(sorted(list(kb_lang)), key=len) selected_lang = Menu( - _('Select Keyboard layout'), + _('Select keyboard layout'), sorted_kb_lang, preset_values=preset_value, sort=False @@ -120,7 +120,7 @@ def select_mirror_regions(preset_values: Dict[str, Any] = {}) -> Dict[str, Any]: def select_archinstall_language(default='English'): languages = Translation.get_available_lang() - language = Menu(_('Select Archinstall language'), languages, default_option=default).run() + language = Menu(_('Archinstall language'), languages, default_option=default).run() return language diff --git a/archinstall/locales/base.pot b/archinstall/locales/base.pot index 46d3a9e1..61cbac4d 100644 --- a/archinstall/locales/base.pot +++ b/archinstall/locales/base.pot @@ -154,7 +154,7 @@ msgstr "" msgid "Enter a desired filesystem type for the partition: " msgstr "" -msgid "Select Archinstall language" +msgid "Archinstall language" msgstr "" msgid "Wipe all selected drives and use a best-effort default partition layout" @@ -172,7 +172,7 @@ msgid "" "install things like desktop environments" msgstr "" -msgid "Select Keyboard layout" +msgid "Select keyboard layout" msgstr "" msgid "Select one of the regions to download packages from" @@ -234,19 +234,19 @@ msgstr "" msgid "Error: Could not decode \"{}\" result as JSON:" msgstr "" -msgid "Select keyboard layout" +msgid "Keyboard layout" msgstr "" -msgid "Select mirror region" +msgid "Mirror region" msgstr "" -msgid "Select locale language" +msgid "Locale language" msgstr "" -msgid "Select locale encoding" +msgid "Locale encoding" msgstr "" -msgid "Select harddrives" +msgid "Drive(s)" msgstr "" msgid "Select disk layout" @@ -255,37 +255,37 @@ msgstr "" msgid "Set encryption password" msgstr "" -msgid "Use swap" +msgid "Swap" msgstr "" -msgid "Select bootloader" +msgid "Bootloader" msgstr "" -msgid "Set root password" +msgid "root password" msgstr "" -msgid "Specify superuser account" +msgid "Superuser account" msgstr "" -msgid "Specify user account" +msgid "User account" msgstr "" -msgid "Specify profile" +msgid "Profile" msgstr "" -msgid "Select audio" +msgid "Audio" msgstr "" -msgid "Select kernels" +msgid "Kernels" msgstr "" -msgid "Additional packages to install" +msgid "Additional packages" msgstr "" -msgid "Configure network" +msgid "Network configuration" msgstr "" -msgid "Set automatic time sync (NTP)" +msgid "Automatic time sync (NTP)" msgstr "" msgid "Install ({} config(s) missing)" @@ -328,13 +328,13 @@ msgstr "" msgid "Abort" msgstr "" -msgid "Specify hostname" +msgid "Hostname" msgstr "" msgid "Not configured, unavailable unless setup manually" msgstr "" -msgid "Select timezone" +msgid "Timezone" msgstr "" msgid "Set/Modify the below options" @@ -511,7 +511,7 @@ msgstr "" msgid "are you sure you want to use it?" msgstr "" -msgid "Additional repositories to enable" +msgid "Optional repositories" msgstr "" msgid "Save configuration" diff --git a/archinstall/locales/de/LC_MESSAGES/base.po b/archinstall/locales/de/LC_MESSAGES/base.po index db3a7e40..44920752 100644 --- a/archinstall/locales/de/LC_MESSAGES/base.po +++ b/archinstall/locales/de/LC_MESSAGES/base.po @@ -168,7 +168,7 @@ msgstr "" msgid "Enter a desired filesystem type for the partition: " msgstr "Bitte geben sie einen gewünschten Dateisystemtyp für die Partition ein: " -msgid "Select Archinstall language" +msgid "Archinstall language" msgstr "Sprache für Archinstall" msgid "Wipe all selected drives and use a best-effort default partition layout" @@ -183,7 +183,7 @@ msgstr "Bitte wählen sie was mit dem ausgewählten Gerät geschehen soll" msgid "This is a list of pre-programmed profiles, they might make it easier to install things like desktop environments" msgstr "Dies ist eine Liste von bereits programmierten Profilen, diese ermöglichen es einfacher Desktop Umgebungen einzustellen" -msgid "Select Keyboard layout" +msgid "Select keyboard layout" msgstr "Bitte wählen sie ein Tastaturlayout aus" msgid "Select one of the regions to download packages from" @@ -240,20 +240,20 @@ msgstr "Fehler: Auflistung von Profilen mit URL \"{}\":" msgid "Error: Could not decode \"{}\" result as JSON:" msgstr "Fehler: \"{}\" konnte nicht in ein JSON format dekodiert werden:" -msgid "Select keyboard layout" -msgstr "Tastaturlayout auswählen" +msgid "Keyboard layout" +msgstr "Tastaturlayout" -msgid "Select mirror region" -msgstr "Mirror-region auswählen" +msgid "Mirror region" +msgstr "Mirror-region" -msgid "Select locale language" -msgstr "Lokale Sprache auswählen" +msgid "Locale language" +msgstr "Lokale Sprache" -msgid "Select locale encoding" -msgstr "Lokale Kodierung auswählen" +msgid "Locale encoding" +msgstr "Lokale Kodierung" -msgid "Select harddrives" -msgstr "Laufwerke auswählen" +msgid "Drive(s)" +msgstr "Laufwerke" msgid "Select disk layout" msgstr "Laufwerke-layout auswählen" @@ -261,37 +261,37 @@ msgstr "Laufwerke-layout auswählen" msgid "Set encryption password" msgstr "Verschlüsselungspasswort angeben" -msgid "Use swap" -msgstr "Swap benützen" +msgid "Swap" +msgstr "Swap" -msgid "Select bootloader" -msgstr "Bootloader auswählen" +msgid "Bootloader" +msgstr "Bootloader" -msgid "Set root password" -msgstr "Root Passwort wählen" +msgid "root password" +msgstr "Root Passwort" -msgid "Specify superuser account" -msgstr "Superuser Konto wählen" +msgid "Superuser account" +msgstr "Superuser Konto" -msgid "Specify user account" -msgstr "Benutzerkonto wählen" +msgid "User account" +msgstr "Benutzerkonto" -msgid "Specify profile" -msgstr "Profile auswählen" +msgid "Profile" +msgstr "Profile" -msgid "Select audio" -msgstr "Audio auswählen" +msgid "Audio" +msgstr "Audio" -msgid "Select kernels" -msgstr "Kernel auswählen" +msgid "Kernels" +msgstr "Kernels" -msgid "Additional packages to install" -msgstr "Zus. Packete für die Installation" +msgid "Additional packages" +msgstr "Zus. Packete" -msgid "Configure network" +msgid "Network configuration" msgstr "Netzwerkonfiguration" -msgid "Set automatic time sync (NTP)" +msgid "Automatic time sync (NTP)" msgstr "Autom. Zeitsynchronisierung (NTP)" msgid "Install ({} config(s) missing)" @@ -338,14 +338,14 @@ msgstr "Bitte wählen Sie einen Dateisystemtyp für die Partition aus" msgid "Abort" msgstr "Abbrechen" -msgid "Specify hostname" -msgstr "Hostnamen wählen" +msgid "Hostname" +msgstr "Hostnamen" msgid "Not configured, unavailable unless setup manually" msgstr "Nicht konfiguriert, unverfügbar wenn nicht selber eingestellt" -msgid "Select timezone" -msgstr "Zeitzone wählen" +msgid "Timezone" +msgstr "Zeitzone" msgid "Set/Modify the below options" msgstr "Setzen sie die unten stehenden Einstellungen" @@ -526,8 +526,8 @@ msgstr "Das gewählte Passwort ist sehr schwach," msgid "are you sure you want to use it?" msgstr "wollen sie dieses wirklich verwenden?" -msgid "Additional repositories to enable" -msgstr "Zus. Repositories einzuschalten" +msgid "Optional repositories" +msgstr "Zus. Repositories" msgid "Save configuration" msgstr "Konfiguration speichern" diff --git a/archinstall/locales/en/LC_MESSAGES/base.po b/archinstall/locales/en/LC_MESSAGES/base.po index b7a9364f..8348faec 100644 --- a/archinstall/locales/en/LC_MESSAGES/base.po +++ b/archinstall/locales/en/LC_MESSAGES/base.po @@ -141,7 +141,7 @@ msgstr "" msgid "Enter a desired filesystem type for the partition: " msgstr "" -msgid "Select Archinstall language" +msgid "Archinstall language" msgstr "" msgid "Wipe all selected drives and use a best-effort default partition layout" @@ -156,7 +156,7 @@ msgstr "" msgid "This is a list of pre-programmed profiles, they might make it easier to install things like desktop environments" msgstr "" -msgid "Select Keyboard layout" +msgid "Select keyboard layout" msgstr "" msgid "Select one of the regions to download packages from" @@ -210,19 +210,19 @@ msgstr "" msgid "Error: Could not decode \"{}\" result as JSON:" msgstr "" -msgid "Select keyboard layout" +msgid "Keyboard layout" msgstr "" -msgid "Select mirror region" +msgid "Mirror region" msgstr "" -msgid "Select locale language" +msgid "Locale language" msgstr "" -msgid "Select locale encoding" +msgid "Locale encoding" msgstr "" -msgid "Select harddrives" +msgid "Drive(s)" msgstr "" msgid "Select disk layout" @@ -231,37 +231,37 @@ msgstr "" msgid "Set encryption password" msgstr "" -msgid "Use swap" +msgid "Swap" msgstr "" -msgid "Select bootloader" +msgid "Bootloader" msgstr "" -msgid "Set root password" +msgid "root password" msgstr "" -msgid "Specify superuser account" +msgid "Superuser account" msgstr "" -msgid "Specify user account" +msgid "User account" msgstr "" -msgid "Specify profile" +msgid "Profile" msgstr "" -msgid "Select audio" +msgid "Audio" msgstr "" -msgid "Select kernels" +msgid "Kernels" msgstr "" -msgid "Additional packages to install" +msgid "Additional packages" msgstr "" -msgid "Configure network" +msgid "Network configuration" msgstr "" -msgid "Set automatic time sync (NTP)" +msgid "Automatic time sync (NTP)" msgstr "" msgid "Install ({} config(s) missing)" @@ -304,13 +304,13 @@ msgstr "" msgid "Abort" msgstr "" -msgid "Specify hostname" +msgid "Hostname" msgstr "" msgid "Not configured, unavailable unless setup manually" msgstr "" -msgid "Select timezone" +msgid "Timezone" msgstr "" msgid "Set/Modify the below options" @@ -479,7 +479,7 @@ msgstr "" msgid "are you sure you want to use it?" msgstr "" -msgid "Additional repositories to enable" +msgid "Optional repositories" msgstr "" msgid "Save configuration" diff --git a/archinstall/locales/es/LC_MESSAGES/base.po b/archinstall/locales/es/LC_MESSAGES/base.po index 175cff9e..68e16367 100644 --- a/archinstall/locales/es/LC_MESSAGES/base.po +++ b/archinstall/locales/es/LC_MESSAGES/base.po @@ -39,7 +39,7 @@ msgid "Should this user be a superuser (sudoer)?" msgstr "Debería este usuario ser un superusuario (sudoer)?" msgid "Select a timezone" -msgstr "Selecciona una zona horaria" +msgstr "Zona horaria" msgid "Would you like to use GRUB as a bootloader instead of systemd-boot?" msgstr "Te gustaría usar GRUB como gestor de arranque en lugar de systemd-boot?" @@ -168,8 +168,8 @@ msgstr "" msgid "Enter a desired filesystem type for the partition: " msgstr "Escriba el tipo de sistema de archivos que desea para la partición: " -msgid "Select Archinstall language" -msgstr "Selecciona el idioma de Archinstall" +msgid "Archinstall language" +msgstr "Idioma de Archinstall" msgid "Wipe all selected drives and use a best-effort default partition layout" msgstr "Limpiar todos los discos seleccionados y usar una distribución de particiones por defecto" @@ -183,7 +183,7 @@ msgstr "Selecciona qué quieres hacer con los dispositivos de bloque seleccionad msgid "This is a list of pre-programmed profiles, they might make it easier to install things like desktop environments" msgstr "Esta es una lista de perfiles pre-programados, pueden facilitar la instalación de aplicaciones como entornos de escritorio" -msgid "Select Keyboard layout" +msgid "Select keyboard layout" msgstr "Selecciona la distribución del teclado" msgid "Select one of the regions to download packages from" @@ -240,20 +240,20 @@ msgstr "Error: Enlistar perfiles en la URL \"{}\" resultó en:" msgid "Error: Could not decode \"{}\" result as JSON:" msgstr "Error: No se pudo decodificar el resultado \"{}\" como JSON:" -msgid "Select keyboard layout" -msgstr "Selecciona la distribución del teclado" +msgid "Keyboard layout" +msgstr "Distribución del teclado" -msgid "Select mirror region" -msgstr "Selecciona la región del mirror" +msgid "Mirror region" +msgstr "Región del mirror" -msgid "Select locale language" -msgstr "Selecciona el idioma local" +msgid "Locale language" +msgstr "Idioma local" -msgid "Select locale encoding" -msgstr "Selecciona la codificación local" +msgid "Locale encoding" +msgstr "Codificación local" -msgid "Select harddrives" -msgstr "Selecciona los discos duros" +msgid "Drive(s)" +msgstr "Discos duros" msgid "Select disk layout" msgstr "Selecciona la distribución de los discos" @@ -261,38 +261,38 @@ msgstr "Selecciona la distribución de los discos" msgid "Set encryption password" msgstr "Establecer la contraseña de cifrado" -msgid "Use swap" -msgstr "Usar swap" +msgid "Swap" +msgstr "Swap" -msgid "Select bootloader" -msgstr "Selecciona el cargador de arranque" +msgid "Bootloader" +msgstr "Cargador de arranque" -msgid "Set root password" -msgstr "Establecer la contraseña de root" +msgid "root password" +msgstr "Contraseña de root" -msgid "Specify superuser account" -msgstr "Especificar la cuenta de superusuario" +msgid "Superuser account" +msgstr "Cuenta de superusuario" -msgid "Specify user account" -msgstr "Especificar la cuenta de usuario" +msgid "User account" +msgstr "Cuenta de usuario" -msgid "Specify profile" -msgstr "Especificar el perfil" +msgid "Profile" +msgstr "Perfil" -msgid "Select audio" -msgstr "Selecciona el audio" +msgid "Audio" +msgstr "Audio" -msgid "Select kernels" -msgstr "Selecciona los kernels" +msgid "Kernels" +msgstr "Kernels" -msgid "Additional packages to install" -msgstr "Paquetes adicionales a instalar" +msgid "Additional packages" +msgstr "Paquetes adicionales" -msgid "Configure network" +msgid "Network configuration" msgstr "Configurar la red" -msgid "Set automatic time sync (NTP)" -msgstr "Establecer la sincronización automática de hora (NTP)" +msgid "Automatic time sync (NTP)" +msgstr "Sincronización automática de hora (NTP)" msgid "Install ({} config(s) missing)" msgstr "Instalar ({} ajuste(s) faltantes)" @@ -338,13 +338,13 @@ msgstr "Establecer el sistema de archivos deseado para una partición" msgid "Abort" msgstr "Cancelar" -msgid "Specify hostname" -msgstr "Especificar el nombre del host" +msgid "Hostname" +msgstr "Nombre del host" msgid "Not configured, unavailable unless setup manually" msgstr "No configurado, no disponible a menos que se configure manualmente" -msgid "Select timezone" +msgid "Timezone" msgstr "Selecciona la zona horaria" msgid "Set/Modify the below options" @@ -524,8 +524,8 @@ msgstr "La contraseña que está utilizando parece ser débil," msgid "are you sure you want to use it?" msgstr "¿Estás seguro de que quieres usarlo?" -msgid "Additional repositories to enable" -msgstr "Repositorios adicionales para habilitar" +msgid "Optional repositories" +msgstr "Repositorios adicionales" msgid "Save configuration" msgstr "Guardar configuración" diff --git a/archinstall/locales/fr/LC_MESSAGES/base.po b/archinstall/locales/fr/LC_MESSAGES/base.po index 1d2e39db..09890694 100644 --- a/archinstall/locales/fr/LC_MESSAGES/base.po +++ b/archinstall/locales/fr/LC_MESSAGES/base.po @@ -212,8 +212,8 @@ msgstr "" msgid "Enter a desired filesystem type for the partition: " msgstr "Entrer un type de système de fichiers souhaité pour la partition : " -msgid "Select Archinstall language" -msgstr "Sélectionner la langue d'Archinstall" +msgid "Archinstall language" +msgstr "Langue d'Archinstall" msgid "Wipe all selected drives and use a best-effort default partition layout" msgstr "" @@ -238,7 +238,7 @@ msgstr "" "Ceci est une liste de profils préprogrammés, ils pourraient faciliter " "l'installation d'outils comme les environnements de bureau" -msgid "Select Keyboard layout" +msgid "Select keyboard layout" msgstr "Sélectionner la disposition du clavier" msgid "Select one of the regions to download packages from" @@ -313,20 +313,20 @@ msgstr "Erreur : la liste des profils sur l'URL \"{}\" a entraîné :" msgid "Error: Could not decode \"{}\" result as JSON:" msgstr "Erreur : Impossible de décoder le résultat \"{}\" en tant que JSON :" -msgid "Select keyboard layout" -msgstr "Sélectionner la disposition du clavier" +msgid "Keyboard layout" +msgstr "Disposition du clavier" -msgid "Select mirror region" -msgstr "Sélectionner la région miroir" +msgid "Mirror region" +msgstr "Région miroir" -msgid "Select locale language" -msgstr "Sélectionner la langue locale" +msgid "Locale language" +msgstr "Langue locale" -msgid "Select locale encoding" -msgstr "Sélectionner l'encodage des paramètres régionaux" +msgid "Locale encoding" +msgstr "Encodage des paramètres régionaux" -msgid "Select harddrives" -msgstr "Sélectionner les disques durs" +msgid "Drive(s)" +msgstr "Disques durs" msgid "Select disk layout" msgstr "Sélectionner la disposition du disque" @@ -334,38 +334,38 @@ msgstr "Sélectionner la disposition du disque" msgid "Set encryption password" msgstr "Définir le mot de passe de chiffrement" -msgid "Use swap" -msgstr "Utiliser swap (partition d'échange)" +msgid "Swap" +msgstr "Swap" -msgid "Select bootloader" -msgstr "Sélectionner le chargeur de démarrage" +msgid "Bootloader" +msgstr "Chargeur de démarrage" -msgid "Set root password" -msgstr "Définir le mot de passe root" +msgid "root password" +msgstr "Mot de passe root" -msgid "Specify superuser account" -msgstr "Spécifier le compte superutilisateur" +msgid "Superuser account" +msgstr "Compte superutilisateur" -msgid "Specify user account" -msgstr "Spécifier le compte utilisateur" +msgid "User account" +msgstr "Compte utilisateur" -msgid "Specify profile" -msgstr "Spécifier le profil" +msgid "Profile" +msgstr "Profil" -msgid "Select audio" -msgstr "Sélectionner l'audio" +msgid "Audio" +msgstr "Audio" -msgid "Select kernels" -msgstr "Sélectionner les noyaux" +msgid "Kernels" +msgstr "Noyaux" -msgid "Additional packages to install" -msgstr "Packages supplémentaires à installer" +msgid "Additional packages" +msgstr "Packages supplémentaires" -msgid "Configure network" +msgid "Network configuration" msgstr "Configurer le réseau" -msgid "Set automatic time sync (NTP)" -msgstr "Définir la synchronisation automatique de l'heure (NTP)" +msgid "Automatic time sync (NTP)" +msgstr "Synchronisation automatique de l'heure (NTP)" msgid "Install ({} config(s) missing)" msgstr "Installer ({} configuration(s) manquante(s))" @@ -413,14 +413,14 @@ msgstr "Définir le système de fichiers souhaité pour une partition" msgid "Abort" msgstr "Abandonner" -msgid "Specify hostname" -msgstr "Spécifier le nom d'hôte" +msgid "Hostname" +msgstr "Nom d'hôte" msgid "Not configured, unavailable unless setup manually" msgstr "Non configuré, indisponible sauf configuration manuelle" -msgid "Select timezone" -msgstr "Sélectionner le fuseau horaire" +msgid "Timezone" +msgstr "Fuseau horaire" msgid "Set/Modify the below options" msgstr "Définir/Modifier les options ci-dessous" @@ -623,8 +623,8 @@ msgstr "Le mot de passe que vous utilisez semble faible," msgid "are you sure you want to use it?" msgstr "êtes-vous sûr de vouloir l'utiliser ?" -msgid "Additional repositories to enable" -msgstr "Référentiels supplémentaires à activer" +msgid "Optional repositories" +msgstr "Référentiels supplémentaires" msgid "Save configuration" msgstr "Enregistrer la configuration" diff --git a/archinstall/locales/nl/LC_MESSAGES/base.po b/archinstall/locales/nl/LC_MESSAGES/base.po index 03774c2b..77aaa44f 100644 --- a/archinstall/locales/nl/LC_MESSAGES/base.po +++ b/archinstall/locales/nl/LC_MESSAGES/base.po @@ -169,8 +169,8 @@ msgstr "" msgid "Enter a desired filesystem type for the partition: " msgstr "Voer de naam in van het gewenste bestandssysteem: " -msgid "Select Archinstall language" -msgstr "Kies een Archinstall-taal" +msgid "Archinstall language" +msgstr "Archinstall-taal" msgid "Wipe all selected drives and use a best-effort default partition layout" msgstr "Alle geselecteerde schijven formatteren en best mogelijke partitie-indeling gebruiken" @@ -184,7 +184,7 @@ msgstr "Geef aan wat er moet worden gedaan met de gekozen blokapparaten" msgid "This is a list of pre-programmed profiles, they might make it easier to install things like desktop environments" msgstr "Dit is een vooraf opgestelde lijst met profielen, welke het installeren van zaken als werkomgevingen vereenvoudigt" -msgid "Select Keyboard layout" +msgid "Select keyboard layout" msgstr "Kies een toetsenbordindeling" msgid "Select one of the regions to download packages from" @@ -241,20 +241,20 @@ msgstr "Foutmelding: het opsommen van de profielen op {} leidde tot" msgid "Error: Could not decode \"{}\" result as JSON:" msgstr "Foutmelding: ‘{}’ kan niet gedecodeerd worden als json:" -msgid "Select keyboard layout" -msgstr "Kies een toetsenbordindeling" +msgid "Keyboard layout" +msgstr "Toetsenbordindeling" -msgid "Select mirror region" -msgstr "Kies een spiegelserverregio" +msgid "Mirror region" +msgstr "Spiegelserverregio" -msgid "Select locale language" -msgstr "Kies een taal" +msgid "Locale language" +msgstr "Taal" -msgid "Select locale encoding" -msgstr "Kies een taalvariant" +msgid "Locale encoding" +msgstr "Taalvariant" -msgid "Select harddrives" -msgstr "Selecteer de harde schijven" +msgid "Drive(s)" +msgstr "Harde schijven" msgid "Select disk layout" msgstr "Kies een schijfindeling" @@ -262,38 +262,38 @@ msgstr "Kies een schijfindeling" msgid "Set encryption password" msgstr "Versleutelwachtwoord instellen" -msgid "Use swap" -msgstr "Wisselgeheugen gebruiken" +msgid "Swap" +msgstr "Wisselgeheugen" -msgid "Select bootloader" -msgstr "Kies een opstartlader" +msgid "Bootloader" +msgstr "Opstartlader" -msgid "Set root password" -msgstr "Rootwachtwoord instellen" +msgid "root password" +msgstr "Rootwachtwoord" -msgid "Specify superuser account" -msgstr "Geef aan welk account superuserrechten dient te hebben" +msgid "Superuser account" +msgstr "Superuserrechten" -msgid "Specify user account" -msgstr "Kies een gebruikersaccount" +msgid "User account" +msgstr "Gebruikersaccount" -msgid "Specify profile" -msgstr "Kies een profiel" +msgid "Profile" +msgstr "Profiel" -msgid "Select audio" -msgstr "Kies audio" +msgid "Audio" +msgstr "Audio" -msgid "Select kernels" -msgstr "Selecteer kernels" +msgid "Kernels" +msgstr "Kernels" -msgid "Additional packages to install" -msgstr "Aanvullende te installeren pakketten" +msgid "Additional packages" +msgstr "Aanvullende pakketten" -msgid "Configure network" +msgid "Network configuration" msgstr "Netwerk instellen" -msgid "Set automatic time sync (NTP)" -msgstr "Automatische tijdsynchronisatie (NTP) gebruiken" +msgid "Automatic time sync (NTP)" +msgstr "Automatische tijdsynchronisatie (NTP)" msgid "Install ({} config(s) missing)" msgstr "Installeren ({} confirguratie(s) ontbreekt/ontbreken)" @@ -339,14 +339,14 @@ msgstr "Gewenste bestandssysteem van partitie instellen" msgid "Abort" msgstr "Afbreken" -msgid "Specify hostname" -msgstr "Hostnaam opgeven" +msgid "Hostname" +msgstr "Hostnaam" msgid "Not configured, unavailable unless setup manually" msgstr "Niet ingesteld en dus niet beschikbaar, tenzij handmatig ingesteld" -msgid "Select timezone" -msgstr "Kies een tijdzone" +msgid "Timezone" +msgstr "Tijdzone" msgid "Set/Modify the below options" msgstr "Onderstaande opties instellen/aanpassen" @@ -528,8 +528,8 @@ msgstr "Het gekozen wachtwoord is zwak." msgid "are you sure you want to use it?" msgstr "Weet u zeker dat u het wilt gebruiken?" -msgid "Additional repositories to enable" -msgstr "Aanvullende te gebruiken pakketbronnen" +msgid "Optional repositories" +msgstr "Aanvullende pakketbronnen" msgid "Save configuration" msgstr "Configuratie vastleggen" diff --git a/archinstall/locales/pl/LC_MESSAGES/base.po b/archinstall/locales/pl/LC_MESSAGES/base.po index a21f0511..49c830e2 100644 --- a/archinstall/locales/pl/LC_MESSAGES/base.po +++ b/archinstall/locales/pl/LC_MESSAGES/base.po @@ -167,8 +167,8 @@ msgstr "" msgid "Enter a desired filesystem type for the partition: " msgstr "Wprowadź typ systemu plików dla partycji: " -msgid "Select Archinstall language" -msgstr "Wybierz język Archinstall" +msgid "Archinstall language" +msgstr "Język Archinstall" msgid "Wipe all selected drives and use a best-effort default partition layout" msgstr "Wymaż wszystkie wybrane dyski i użyj najlepszego domyślnego układu partycji" @@ -182,7 +182,7 @@ msgstr "Wybierz, co chcesz zrobić z wybranymi urządzeniami blokowymi" msgid "This is a list of pre-programmed profiles, they might make it easier to install things like desktop environments" msgstr "To jest lista wstępnie zaprogramowanych profili, które mogą ułatwić instalację takich rzeczy jak środowiska graficzne" -msgid "Select Keyboard layout" +msgid "Select keyboard layout" msgstr "Wybierz układ klawiatury" msgid "Select one of the regions to download packages from" @@ -239,20 +239,20 @@ msgstr "Błąd: Lista profili z URL \"{}\":" msgid "Error: Could not decode \"{}\" result as JSON:" msgstr "Błąd: Nie można dekodować \"{}\" jako JSON:" -msgid "Select keyboard layout" -msgstr "Wybierz układ klawiatury" +msgid "Keyboard layout" +msgstr "Układ klawiatury" -msgid "Select mirror region" -msgstr "Wybierz region lustra" +msgid "Mirror region" +msgstr "Region lustra" -msgid "Select locale language" -msgstr "Wybierz locale języka" +msgid "Locale language" +msgstr "Locale języka" -msgid "Select locale encoding" -msgstr "Wybierz locale kodowania" +msgid "Locale encoding" +msgstr "Locale kodowania" -msgid "Select harddrives" -msgstr "Wybierz dyski twarde" +msgid "Drive(s)" +msgstr "Dyski twarde" msgid "Select disk layout" msgstr "Wybierz układ dysku" @@ -260,38 +260,38 @@ msgstr "Wybierz układ dysku" msgid "Set encryption password" msgstr "Ustaw hasło szyfrowania" -msgid "Use swap" -msgstr "Użyj swap-u" +msgid "Swap" +msgstr "Swap" -msgid "Select bootloader" -msgstr "Wybierz program rozruchowy (bootloader)" +msgid "Bootloader" +msgstr "Program rozruchowy" -msgid "Set root password" -msgstr "Ustaw hasło administratora" +msgid "root password" +msgstr "Hasło root" -msgid "Specify superuser account" -msgstr "Określ konto superużytkownika" +msgid "Superuser account" +msgstr "Konto superużytkownika" -msgid "Specify user account" -msgstr "Określ konto użytkownika" +msgid "User account" +msgstr "Konto użytkownika" -msgid "Specify profile" -msgstr "Określ profil" +msgid "Profile" +msgstr "Profil" -msgid "Select audio" -msgstr "Wybierz audio" +msgid "Audio" +msgstr "Audio" -msgid "Select kernels" -msgstr "Wybierz jądra" +msgid "Kernels" +msgstr "Jądra" -msgid "Additional packages to install" -msgstr "Dodatkowe pakiety do instalacji" +msgid "Additional packages" +msgstr "Dodatkowe pakiety" -msgid "Configure network" +msgid "Network configuration" msgstr "Konfiguracja sieci" -msgid "Set automatic time sync (NTP)" -msgstr "Ustawianie automatycznej synchronizacji czasu (NTP)" +msgid "Automatic time sync (NTP)" +msgstr "Automatycznej synchronizacji czasu (NTP)" msgid "Install ({} config(s) missing)" msgstr "Zainstaluj ({} brakuje konfiguracji)" @@ -337,14 +337,14 @@ msgstr "Ustaw system plików dla partycji" msgid "Abort" msgstr "Anuluj" -msgid "Specify hostname" -msgstr "Podaj nazwę hosta" +msgid "Hostname" +msgstr "Nazwę hosta" msgid "Not configured, unavailable unless setup manually" msgstr "Nie skonfigurowana, niedostępna, chyba że zostanie skonfigurowana ręcznie" -msgid "Select timezone" -msgstr "Wybierz strefe czasową" +msgid "Timezone" +msgstr "Strefe czasową" msgid "Set/Modify the below options" msgstr "Ustaw/zmodyfikuj poniższe opcje" @@ -524,8 +524,8 @@ msgstr "Używane przez Ciebie hasło wydaje się być słabe," msgid "are you sure you want to use it?" msgstr "czy na pewno chcesz go używać?" -msgid "Additional repositories to enable" -msgstr "Dodatkowe repozytoria do włączenia" +msgid "Optional repositories" +msgstr "Dodatkowe repozytoria" msgid "Save configuration" msgstr "Zapisz konfiguracje" diff --git a/archinstall/locales/pt/LC_MESSAGES/base.po b/archinstall/locales/pt/LC_MESSAGES/base.po index dfddabde..1e98c159 100644 --- a/archinstall/locales/pt/LC_MESSAGES/base.po +++ b/archinstall/locales/pt/LC_MESSAGES/base.po @@ -167,8 +167,8 @@ msgstr "" msgid "Enter a desired filesystem type for the partition: " msgstr "Escreve o tipo de sistema de ficheiros desejado para a partição: " -msgid "Select Archinstall language" -msgstr "Seleciona o idioma do Archinstall" +msgid "Archinstall language" +msgstr "Idioma do Archinstall" msgid "Wipe all selected drives and use a best-effort default partition layout" msgstr "Limpar todos os discos selecionados e usar um esquema de partições padrão de melhor desempenho" @@ -182,7 +182,7 @@ msgstr "Seleciona o que desejas fazer com os dispositivos de bloco selecionados" msgid "This is a list of pre-programmed profiles, they might make it easier to install things like desktop environments" msgstr "Esta é uma lista de perfis pré-programados, podem facilitar a instalação de ambientes de trabalho" -msgid "Select Keyboard layout" +msgid "Select keyboard layout" msgstr "Seleciona o esquema de teclado" msgid "Select one of the regions to download packages from" @@ -239,20 +239,20 @@ msgstr "Erro: Listando os perfis em URL \"{}\" resulta em:" msgid "Error: Could not decode \"{}\" result as JSON:" msgstr "Erro: Não foi possível decodificar \"{}\" como JSON:" -msgid "Select keyboard layout" -msgstr "Seleciona o esquema do teclado" +msgid "Keyboard layout" +msgstr "Esquema do teclado" -msgid "Select mirror region" -msgstr "Seleciona a região do mirror" +msgid "Mirror region" +msgstr "Região do mirror" -msgid "Select locale language" -msgstr "Seleciona o idioma de localização" +msgid "Locale language" +msgstr "Idioma de localização" -msgid "Select locale encoding" -msgstr "Seleciona a codificação de localização" +msgid "Locale encoding" +msgstr "Codificação de localização" -msgid "Select harddrives" -msgstr "Seleciona os discos rígidos" +msgid "Drive(s)" +msgstr "Discos rígidos" msgid "Select disk layout" msgstr "Seleciona o esquema de disco" @@ -260,38 +260,38 @@ msgstr "Seleciona o esquema de disco" msgid "Set encryption password" msgstr "Define a palavra-passe de encriptação" -msgid "Use swap" -msgstr "Usar swap" +msgid "Swap" +msgstr "Swap" -msgid "Select bootloader" -msgstr "Seleciona o carregador de arranque (bootloader)" +msgid "Bootloader" +msgstr "Carregador de arranque" -msgid "Set root password" -msgstr "Define a palavra-passe de root" +msgid "root password" +msgstr "Palavra-passe de root" -msgid "Specify superuser account" -msgstr "Especifica a conta de superusuário" +msgid "Superuser account" +msgstr "Conta de superusuário" -msgid "Specify user account" -msgstr "Especifica a conta de usuário" +msgid "User account" +msgstr "Conta de usuário" -msgid "Specify profile" -msgstr "Especifica o perfil" +msgid "Profile" +msgstr "Perfil" -msgid "Select audio" -msgstr "Seleciona o áudio" +msgid "Audio" +msgstr "Áudio" -msgid "Select kernels" -msgstr "Seleciona os kernels" +msgid "Kernels" +msgstr "Kernels" -msgid "Additional packages to install" -msgstr "Pacotes adicionais para instalar" +msgid "Additional packages" +msgstr "Pacotes adicionais" -msgid "Configure network" +msgid "Network configuration" msgstr "Configuração de rede" -msgid "Set automatic time sync (NTP)" -msgstr "Define a sincronização automática de tempo (NTP)" +msgid "Automatic time sync (NTP)" +msgstr "Sincronização automática de tempo (NTP)" msgid "Install ({} config(s) missing)" msgstr "Instalar ({} configuração(s) em falta)" @@ -337,14 +337,14 @@ msgstr "Definir o sistema de ficheiros desejado para uma partição" msgid "Abort" msgstr "Cancelar" -msgid "Specify hostname" -msgstr "Especificar nome do computador (hostname)" +msgid "Hostname" +msgstr "Nome do computador" msgid "Not configured, unavailable unless setup manually" msgstr "Não configurado, indisponível a não ser que seja configurado manualmente" -msgid "Select timezone" -msgstr "Selecionar fuso horário" +msgid "Timezone" +msgstr "Fuso horário" msgid "Set/Modify the below options" msgstr "Definir/Modificar as opções abaixo" @@ -541,8 +541,8 @@ msgid "are you sure you want to use it?" msgstr "tens a certeza que quer usar?" #, fuzzy -msgid "Additional repositories to enable" -msgstr "Repositórios adicionais a ativar" +msgid "Optional repositories" +msgstr "Repositórios adicionais" msgid "Save configuration" msgstr "Guardar configuração" diff --git a/archinstall/locales/ru/LC_MESSAGES/base.po b/archinstall/locales/ru/LC_MESSAGES/base.po index f93d2d80..d39817a3 100644 --- a/archinstall/locales/ru/LC_MESSAGES/base.po +++ b/archinstall/locales/ru/LC_MESSAGES/base.po @@ -169,8 +169,8 @@ msgstr "" msgid "Enter a desired filesystem type for the partition: " msgstr "Введите желаемый тип файловой системы для раздела: " -msgid "Select Archinstall language" -msgstr "Выберите язык Archinstall" +msgid "Archinstall language" +msgstr "Язык Archinstall" msgid "Wipe all selected drives and use a best-effort default partition layout" msgstr "Стереть все выбранные диски и использовать оптимальную схему разделов по умолчанию" @@ -184,7 +184,7 @@ msgstr "Выберите, что вы хотите сделать с выбра msgid "This is a list of pre-programmed profiles, they might make it easier to install things like desktop environments" msgstr "Это список предварительно запрограммированных профилей, они могут облегчить установку таких вещей, как окружения рабочего стола" -msgid "Select Keyboard layout" +msgid "Select keyboard layout" msgstr "Выберите раскладку клавиатуры" msgid "Select one of the regions to download packages from" @@ -241,20 +241,20 @@ msgstr "Ошибка: Перечисление профилей по URL \"{}\" msgid "Error: Could not decode \"{}\" result as JSON:" msgstr "Ошибка: Не удалось декодировать результат \"{}\" как JSON:" -msgid "Select keyboard layout" -msgstr "Выберите раскладку клавиатуры" +msgid "Keyboard layout" +msgstr "Раскладку клавиатуры" -msgid "Select mirror region" -msgstr "Выберите регион зеркала" +msgid "Mirror region" +msgstr "Регион зеркала" -msgid "Select locale language" -msgstr "Выберите язык локали" +msgid "Locale language" +msgstr "Язык локали" -msgid "Select locale encoding" -msgstr "Выберите кодировку локали" +msgid "Locale encoding" +msgstr "Кодировку локали" -msgid "Select harddrives" -msgstr "Выберите жесткие диски" +msgid "Drive(s)" +msgstr "Жесткие диски" msgid "Select disk layout" msgstr "Выберите разметку диска" @@ -262,38 +262,38 @@ msgstr "Выберите разметку диска" msgid "Set encryption password" msgstr "Установите пароль шифрования" -msgid "Use swap" -msgstr "Использовать подкачку" +msgid "Swap" +msgstr "Подкачку" -msgid "Select bootloader" -msgstr "Выберите загрузчик" +msgid "Bootloader" +msgstr "Загрузчик" -msgid "Set root password" -msgstr "Установите пароль root" +msgid "root password" +msgstr "Пароль root" -msgid "Specify superuser account" -msgstr "Укажите учетную запись суперпользователя" +msgid "Superuser account" +msgstr "Учетную запись суперпользователя" -msgid "Specify user account" -msgstr "Укажите учетную запись пользователя" +msgid "User account" +msgstr "Учетную запись пользователя" -msgid "Specify profile" -msgstr "Укажите профиль" +msgid "Profile" +msgstr "Профиль" -msgid "Select audio" -msgstr "Выберите аудиоустройство" +msgid "Audio" +msgstr "Аудиоустройство" -msgid "Select kernels" -msgstr "Выберите ядра" +msgid "Kernels" +msgstr "Ядра" -msgid "Additional packages to install" -msgstr "Дополнительные пакеты для установки" +msgid "Additional packages" +msgstr "Дополнительные пакеты" -msgid "Configure network" +msgid "Network configuration" msgstr "Настройте сеть" -msgid "Set automatic time sync (NTP)" -msgstr "Установить автоматическую синхронизацию времени (NTP)" +msgid "Automatic time sync (NTP)" +msgstr "Автоматическая синхронизация времени (NTP)" msgid "Install ({} config(s) missing)" msgstr "Установить ({} конфигурация(и) отсутствует)" @@ -339,14 +339,14 @@ msgstr "Установите желаемую файловую систему д msgid "Abort" msgstr "Прервать" -msgid "Specify hostname" -msgstr "Укажите имя хоста" +msgid "Hostname" +msgstr "Имя хоста" msgid "Not configured, unavailable unless setup manually" msgstr "Не настроен, недоступен, если не настроен вручную" -msgid "Select timezone" -msgstr "Выберите часовой пояс" +msgid "Timezone" +msgstr "Часовой пояс" msgid "Set/Modify the below options" msgstr "Установить/изменить следующие параметры" @@ -527,8 +527,8 @@ msgstr "Пароль, который вы используете, кажется msgid "are you sure you want to use it?" msgstr "вы уверены, что хотите его использовать?" -msgid "Additional repositories to enable" -msgstr "Включить дополнительные репозитории" +msgid "Optional repositories" +msgstr "Дополнительные репозитории" msgid "Save configuration" msgstr "Сохранить конфигурацию" diff --git a/archinstall/locales/sv/LC_MESSAGES/base.po b/archinstall/locales/sv/LC_MESSAGES/base.po index 6fdae425..d6feaad1 100644 --- a/archinstall/locales/sv/LC_MESSAGES/base.po +++ b/archinstall/locales/sv/LC_MESSAGES/base.po @@ -169,8 +169,8 @@ msgstr "" msgid "Enter a desired filesystem type for the partition: " msgstr "Mata in ett önskat filsystem för partitionen: " -msgid "Select Archinstall language" -msgstr "Välj språk för detta gränssnitt" +msgid "Archinstall language" +msgstr "Språk för detta gränssnitt" msgid "Wipe all selected drives and use a best-effort default partition layout" msgstr "Töm alla partitioner och använd en generiskt rekommenderad partitionslayout." @@ -184,7 +184,7 @@ msgstr "Välj vad du önskar göra med valda hårddiskarna" msgid "This is a list of pre-programmed profiles, they might make it easier to install things like desktop environments" msgstr "Detta är en lista med förprogrammerade profiler, dom kan göra installation av exempelvis skrivbordsmiljöer lite enklare." -msgid "Select Keyboard layout" +msgid "Select keyboard layout" msgstr "Välj tangentbordslayout" msgid "Select one of the regions to download packages from" @@ -241,20 +241,20 @@ msgstr "Fel: Listning av profiler på \"{}\" resulterade i: " msgid "Error: Could not decode \"{}\" result as JSON:" msgstr "Fel: Kunde inte tyda \"{}\" resultatet som JSON:" -msgid "Select keyboard layout" -msgstr "Välj en tangentbordslayout" +msgid "Keyboard layout" +msgstr "Tangentbordslayout" -msgid "Select mirror region" -msgstr "Välj en region för paketsynk" +msgid "Mirror region" +msgstr "Region för paketsynk" -msgid "Select locale language" -msgstr "Välj vilket språk du vill använda" +msgid "Locale language" +msgstr "Språk du vill använda" -msgid "Select locale encoding" -msgstr "Välj vilken teckenuppsättning du vill använda" +msgid "Locale encoding" +msgstr "Teckenuppsättning du vill använda" -msgid "Select harddrives" -msgstr "Välj hårddiskar" +msgid "Drive(s)" +msgstr "Hårddiskar" msgid "Select disk layout" msgstr "Välj hårddisk-layout" @@ -262,38 +262,38 @@ msgstr "Välj hårddisk-layout" msgid "Set encryption password" msgstr "Välj ett krypterings-lösenord" -msgid "Use swap" -msgstr "Använda 'swap'?" +msgid "Swap" +msgstr "Swap" -msgid "Select bootloader" -msgstr "Välj en boot-loader" +msgid "Bootloader" +msgstr "Boot-loader" -msgid "Set root password" -msgstr "Välj ett root-lösenord" +msgid "root password" +msgstr "Root-lösenord" -msgid "Specify superuser account" -msgstr "Skapa superanvändar-konto" +msgid "Superuser account" +msgstr "Superanvändar-konto" -msgid "Specify user account" -msgstr "Skapa användarkonto" +msgid "User account" +msgstr "Användarkonto" -msgid "Specify profile" -msgstr "Välj en profil" +msgid "Profile" +msgstr "Profil" -msgid "Select audio" -msgstr "Välj ljud mjukvara" +msgid "Audio" +msgstr "Ljud mjukvara" -msgid "Select kernels" -msgstr "Välj Linux-kernel" +msgid "Kernels" +msgstr "Linux-kernels" -msgid "Additional packages to install" -msgstr "Välj extra paket att installera" +msgid "Additional packages" +msgstr "Extra paket" -msgid "Configure network" +msgid "Network configuration" msgstr "Konfigurera nätverk" -msgid "Set automatic time sync (NTP)" -msgstr "Aktivera automatisk tidssynk (NTP)" +msgid "Automatic time sync (NTP)" +msgstr "Automatisk tidssynk (NTP)" msgid "Install ({} config(s) missing)" msgstr "Installera ({} inställningar saknas)" @@ -339,14 +339,14 @@ msgstr "Sätt önskat filsystem för partitionen" msgid "Abort" msgstr "Avbryt" -msgid "Specify hostname" -msgstr "Sätt ett önskat 'hostname'" +msgid "Hostname" +msgstr "Hostname" msgid "Not configured, unavailable unless setup manually" msgstr "Inte konfigurerad, otillgängligt utan manuell konfigurering" -msgid "Select timezone" -msgstr "Välj en tidszon" +msgid "Timezone" +msgstr "Tidszon" msgid "Set/Modify the below options" msgstr "Sätt eller modifiera nedan alternativ" @@ -538,8 +538,8 @@ msgid "are you sure you want to use it?" msgstr "Vill du verkligen avbryta?" #, fuzzy -msgid "Additional repositories to enable" -msgstr "Välj extra paket att installera" +msgid "Optional repositories" +msgstr "Extra förråden" msgid "Save configuration" msgstr "" diff --git a/archinstall/locales/ur/LC_MESSAGES/base.po b/archinstall/locales/ur/LC_MESSAGES/base.po index 7fd7af49..9f32df88 100644 --- a/archinstall/locales/ur/LC_MESSAGES/base.po +++ b/archinstall/locales/ur/LC_MESSAGES/base.po @@ -168,8 +168,8 @@ msgstr "" msgid "Enter a desired filesystem type for the partition: " msgstr "اس پارٹیشن کے لیے مطلوبہ فائل سسٹم درج کریں" -msgid "Select Archinstall language" -msgstr "آرچ انسٹال کے لیے زبان کا انتخاب کریں" +msgid "Archinstall language" +msgstr "آرچ انسٹال کے لیے زبان" msgid "Wipe all selected drives and use a best-effort default partition layout" msgstr "تمام منتخب ڈرائیوز کو صاف کریں اور ایک بہترین ڈیفالٹ پارٹیشن لے آؤٹ استعمال کریں" @@ -183,8 +183,8 @@ msgstr "انتخاب کریں کہ آپ منتخب بلاک ڈیوائسز کے msgid "This is a list of pre-programmed profiles, they might make it easier to install things like desktop environments" msgstr "یہ پہلے سے پروگرام شدہ پروفائلز کی فہرست ہے، وہ ڈیسک ٹاپ انسٹالیشن جیسی چیزوں کو آسان بناتے ہیں" -msgid "Select Keyboard layout" -msgstr "کی بورڈ لے آؤٹ کو منتخب کریں" +msgid "Select keyboard layout" +msgstr "کی بورڈ لے آؤٹ" msgid "Select one of the regions to download packages from" msgstr "پیکیجز ڈاؤن لوڈ کرنے کے لیے علاقوں میں سے ایک کو منتخب کریں" @@ -241,20 +241,20 @@ msgstr "خرابی: URL \"{}\" پر پروفائلز کی فہرست بنانے msgid "Error: Could not decode \"{}\" result as JSON:" msgstr "خرابی: \"{}\" نتیجہ کو JSON کے بطور ڈی کوڈ نہیں کیا جا سکا:" -msgid "Select keyboard layout" +msgid "Keyboard layout" msgstr "کی بورڈ لے آؤٹ کو منتخب کریں" -msgid "Select mirror region" -msgstr "متبادل علاقہ منتخب کریں" +msgid "Mirror region" +msgstr "متبادل علاقہ" -msgid "Select locale language" -msgstr "منتخب کریں کہ کون سی مقامی زبان استعمال کرنی ہے" +msgid "Locale language" +msgstr "مقامی زبان" -msgid "Select locale encoding" -msgstr "منتخب کریں کہ کون سا مقامی انکوڈنگ استعمال کرنا ہے" +msgid "Locale encoding" +msgstr "مقامی انکوڈنگ" -msgid "Select harddrives" -msgstr "ہارڈ ڈرائیوز کو منتخب کریں" +msgid "Drive(s)" +msgstr "ہارڈ ڈرائیوز" msgid "Select disk layout" msgstr "ڈسک لے آؤٹ کو منتخب کریں" @@ -262,38 +262,38 @@ msgstr "ڈسک لے آؤٹ کو منتخب کریں" msgid "Set encryption password" msgstr "انکرپشن پاس ورڈ سیٹ کریں" -msgid "Use swap" -msgstr "سواپ کا استعمال کریں" +msgid "Swap" +msgstr "سواپ" -msgid "Select bootloader" -msgstr "بوٹ لوڈرکا انتخاب کریں" +msgid "Bootloader" +msgstr "بوٹ لوڈر" -msgid "Set root password" -msgstr "روٹ پاس ورڈ سیٹ کریں" +msgid "root password" +msgstr "روٹ پاس ورڈ" -msgid "Specify superuser account" -msgstr "سپر یوزر اکاؤنٹ کی وضاحت کریں" +msgid "Superuser account" +msgstr "سپر یوزر اکاؤنٹ" -msgid "Specify user account" -msgstr "یوزر اکاؤنٹ کی وضاحت کریں" +msgid "User account" +msgstr "یوزر اکاؤنٹ" -msgid "Specify profile" -msgstr "پروفائل کی وضاحت کریں" +msgid "Profile" +msgstr "پروفائل" -msgid "Select audio" -msgstr "آڈیو کا انتخاب کریں" +msgid "Audio" +msgstr "آڈیو" -msgid "Select kernels" -msgstr "کرنلز منتخب کریں" +msgid "Kernels" +msgstr "کرنلز" -msgid "Additional packages to install" -msgstr "انسٹال کرنے کے لیے اضافی پیکجز" +msgid "Additional packages" +msgstr "اضافی پیکجز" -msgid "Configure network" +msgid "Network configuration" msgstr "نیٹ ورک ترتیب دیں" -msgid "Set automatic time sync (NTP)" -msgstr "خودکار وقت کی مطابقت سیٹ کریں (NTP)" +msgid "Automatic time sync (NTP)" +msgstr "خودکار وقت کی مطابقت (NTP)" msgid "Install ({} config(s) missing)" msgstr "انسٹال کریں ({} کنفیگریشنز غائب ہیں)" @@ -339,14 +339,14 @@ msgstr "اس پارٹیشن کے لیے مطلوبہ فائل سسٹم درج ک msgid "Abort" msgstr "ختم کریں" -msgid "Specify hostname" -msgstr "میزبان نام کی وضاحت کریں" +msgid "Hostname" +msgstr "میزبان نام" msgid "Not configured, unavailable unless setup manually" msgstr "کنفیگر نہیں، دستیاب نہیں جب تک کہ دستی طور پر سیٹ اپ نہ کیا جائے" -msgid "Select timezone" -msgstr "ٹائم زون کا انتخاب کریں" +msgid "Timezone" +msgstr "ٹائم زون" msgid "Set/Modify the below options" msgstr "ذیل کے اختیارات کو سیٹ/ترمیم کریں" @@ -528,8 +528,8 @@ msgstr "آپ جو پاس ورڈ استعمال کر رہے ہیں وہ کمزو msgid "are you sure you want to use it?" msgstr "کیا آپ واقعی اسے استعمال کرنا چاہتے ہیں؟" -msgid "Additional repositories to enable" -msgstr "اضافی ریپوزٹریزکو فعال" +msgid "Optional repositories" +msgstr "اضافی ریپوزٹریز" msgid "Save configuration" msgstr "ترتیب کو محفوظ کریں" diff --git a/examples/swiss.py b/examples/swiss.py index 9c0d469a..2f7d90c4 100644 --- a/examples/swiss.py +++ b/examples/swiss.py @@ -160,7 +160,7 @@ class SetupMenu(archinstall.GeneralMenu): def _setup_selection_menu_options(self): self.set_option('archinstall-language', archinstall.Selector( - _('Select Archinstall language'), + _('Archinstall language'), lambda x: self._select_archinstall_language(x), default='English', enabled=True)) -- cgit v1.2.3-70-g09d2 From 6bf594984230abb4b9c9a8584cfd2cf0f1525e95 Mon Sep 17 00:00:00 2001 From: Alexmelman88 <99257010+Alexmelman88@users.noreply.github.com> Date: Tue, 17 May 2022 00:13:28 +0300 Subject: Fixed base.pot (#1191) * Update list_manager.py * Update base.pot * Update base.po * Update base.pot * Update base.pot * Update base.po * Add files via upload --- archinstall/lib/menu/list_manager.py | 4 ++-- archinstall/locales/base.pot | 4 ++-- archinstall/locales/ru/LC_MESSAGES/base.mo | Bin 31612 -> 32128 bytes archinstall/locales/ru/LC_MESSAGES/base.po | 9 ++++----- 4 files changed, 8 insertions(+), 9 deletions(-) (limited to 'archinstall/lib') diff --git a/archinstall/lib/menu/list_manager.py b/archinstall/lib/menu/list_manager.py index 4c7e9907..9faa1c77 100644 --- a/archinstall/lib/menu/list_manager.py +++ b/archinstall/lib/menu/list_manager.py @@ -256,7 +256,7 @@ class ListManager: # TODO guarantee unicity if isinstance(self._data,list): if self.action == str(_('Add')): - self.target = TextInput(_('Add :'),None).run() + self.target = TextInput(_('Add: '),None).run() self._data.append(self.target) if self.action == str(_('Copy')): while True: @@ -280,7 +280,7 @@ class ListManager: origval = None if self.action == str(_('Add')): key = TextInput(_('Key: '),None).run() - value = TextInput(_('Value :'),None).run() + value = TextInput(_('Value: '),None).run() self._data[key] = value if self.action == str(_('Copy')): while True: diff --git a/archinstall/locales/base.pot b/archinstall/locales/base.pot index 61cbac4d..4d701c49 100644 --- a/archinstall/locales/base.pot +++ b/archinstall/locales/base.pot @@ -721,8 +721,8 @@ msgstr "" msgid "Value: " msgstr "" -msgid "Add :" +msgid "You can skip selecting a drive and partitioning and use whatever drive-setup is mounted at /mnt (experimental)" msgstr "" -msgid "Value :" +msgid "Select one of the disks or skip and use /mnt as default" msgstr "" diff --git a/archinstall/locales/ru/LC_MESSAGES/base.mo b/archinstall/locales/ru/LC_MESSAGES/base.mo index df260e2a..e660edd9 100644 Binary files a/archinstall/locales/ru/LC_MESSAGES/base.mo and b/archinstall/locales/ru/LC_MESSAGES/base.mo differ diff --git a/archinstall/locales/ru/LC_MESSAGES/base.po b/archinstall/locales/ru/LC_MESSAGES/base.po index d39817a3..017aa7f7 100644 --- a/archinstall/locales/ru/LC_MESSAGES/base.po +++ b/archinstall/locales/ru/LC_MESSAGES/base.po @@ -728,12 +728,11 @@ msgstr "Добавить: " msgid "Value: " msgstr "Значение: " -msgid "Add :" -msgstr "" +msgid "You can skip selecting a drive and partitioning and use whatever drive-setup is mounted at /mnt (experimental)" +msgstr "Вы можете не выбирать диск и разметку и использовать любой диск, смонтированный в /mnt (экспериментально)" -#, fuzzy -msgid "Value :" -msgstr "Значение: " +msgid "Select one of the disks or skip and use /mnt as default" +msgstr "Выберите один из дисков или пропустите и используйте /mnt по умолчанию" #, python-brace-format #~ msgid "Edit {origkey} :" -- cgit v1.2.3-70-g09d2 From 4e39bfb5638598b81829752f22beb56cb0c095e6 Mon Sep 17 00:00:00 2001 From: Daniel Girtler Date: Tue, 17 May 2022 15:48:48 +1000 Subject: Fixes #1127 (#1194) * Fixes #1127 * flake8 Co-authored-by: Daniel Girtler --- archinstall/lib/user_interaction/disk_conf.py | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) (limited to 'archinstall/lib') diff --git a/archinstall/lib/user_interaction/disk_conf.py b/archinstall/lib/user_interaction/disk_conf.py index 41657e1b..371d052f 100644 --- a/archinstall/lib/user_interaction/disk_conf.py +++ b/archinstall/lib/user_interaction/disk_conf.py @@ -7,7 +7,6 @@ from ..disk import BlockDevice from ..exceptions import DiskError from ..menu import Menu from ..menu.menu import MenuSelectionType -from ..output import log if TYPE_CHECKING: _: Any @@ -60,7 +59,7 @@ def select_disk_layout(preset: Optional[Dict[str, Any]], block_devices: list, ad return select_individual_blockdevice_usage(block_devices) -def select_disk(dict_o_disks: Dict[str, BlockDevice]) -> BlockDevice: +def select_disk(dict_o_disks: Dict[str, BlockDevice]) -> Optional[BlockDevice]: """ Asks the user to select a harddrive from the `dict_o_disks` selection. Usually this is combined with :ref:`archinstall.list_drives`. @@ -73,19 +72,15 @@ def select_disk(dict_o_disks: Dict[str, BlockDevice]) -> BlockDevice: """ drives = sorted(list(dict_o_disks.keys())) if len(drives) >= 1: - for index, drive in enumerate(drives): - print( - f"{index}: {drive} ({dict_o_disks[drive]['size'], dict_o_disks[drive].device, dict_o_disks[drive]['label']})" - ) + title = str(_('You can skip selecting a drive and partitioning and use whatever drive-setup is mounted at /mnt (experimental)')) + '\n' + title += str(_('Select one of the disks or skip and use /mnt as default')) - log("You can skip selecting a drive and partitioning and use whatever drive-setup is mounted at /mnt (experimental)", - fg="yellow") + choice = Menu(title, drives).run() - drive = Menu('Select one of the disks or skip and use "/mnt" as default"', drives).run() - if not drive: - return drive + if choice.type_ == MenuSelectionType.Esc: + return None - drive = dict_o_disks[drive] + drive = dict_o_disks[choice.value] return drive raise DiskError('select_disk() requires a non-empty dictionary of disks to select from.') -- cgit v1.2.3-70-g09d2 From 3d102854a7ad31659f65961966665f8c975f8d71 Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Tue, 17 May 2022 10:06:37 +0200 Subject: Reworking select_encrypted_partitions() to use the new Menu system, (#1201) * Reworking select_encrypted_partitions() to use the new Menu system, and allow granularity. * Listing partitions and enabling a index selection. Also when selecting 'delete all partitions' wipe=True will get set on the blockdevice now. Otherwise the new partitions won't be able to be created without deleting them first. * flake8 fix * Removed old select_encrypted_partitions() --- archinstall/lib/menu/global_menu.py | 11 +++++-- .../lib/user_interaction/partitioning_conf.py | 37 ++++++++++++++-------- 2 files changed, 33 insertions(+), 15 deletions(-) (limited to 'archinstall/lib') diff --git a/archinstall/lib/menu/global_menu.py b/archinstall/lib/menu/global_menu.py index f0f327ee..963766a2 100644 --- a/archinstall/lib/menu/global_menu.py +++ b/archinstall/lib/menu/global_menu.py @@ -193,8 +193,15 @@ class GlobalMenu(GeneralMenu): # If no partitions was marked as encrypted, but a password was supplied and we have some disks to format.. # Then we need to identify which partitions to encrypt. This will default to / (root). if len(list(encrypted_partitions(storage['arguments'].get('disk_layouts', [])))) == 0: - storage['arguments']['disk_layouts'] = select_encrypted_partitions( - storage['arguments']['disk_layouts'], storage['arguments']['!encryption-password']) + for blockdevice in storage['arguments']['disk_layouts']: + for partition_index in select_encrypted_partitions( + title="Select which partitions to encrypt:", + partitions=storage['arguments']['disk_layouts'][blockdevice]['partitions'] + ): + + partition = storage['arguments']['disk_layouts'][blockdevice]['partitions'][partition_index] + partition['encrypted'] = True + partition['!password'] = storage['arguments']['!encryption-password'] def _install_text(self): missing = len(self._missing_configs()) diff --git a/archinstall/lib/user_interaction/partitioning_conf.py b/archinstall/lib/user_interaction/partitioning_conf.py index c3dc4146..741decc1 100644 --- a/archinstall/lib/user_interaction/partitioning_conf.py +++ b/archinstall/lib/user_interaction/partitioning_conf.py @@ -8,7 +8,6 @@ from ..menu.menu import MenuSelectionType from ..output import log from ..disk.validators import fs_types -from ..disk.helpers import has_mountpoint if TYPE_CHECKING: from ..disk import BlockDevice @@ -271,6 +270,7 @@ def manage_new_and_existing_partitions(block_device: 'BlockDevice') -> Dict[str, block_device_struct["partitions"][partition]["filesystem"]["mount_options"].append("compress=zstd") elif task == delete_all_partitions: block_device_struct["partitions"] = [] + block_device_struct["wipe"] = True elif task == assign_mount_point: title = _('{}\n\nSelect by index which partition to mount where').format(current_layout) partition = select_partition(title, block_device_struct["partitions"]) @@ -360,19 +360,30 @@ def manage_new_and_existing_partitions(block_device: 'BlockDevice') -> Dict[str, return block_device_struct +def select_encrypted_partitions( + title :str, + partitions :List[Partition], + multiple :bool = True, + filter_ :Callable = None +) -> Optional[int, List[int]]: + partition_indexes = _get_partitions(partitions, filter_) -def select_encrypted_partitions(block_devices: dict, password: str) -> dict: - for device in block_devices: - for partition in block_devices[device]['partitions']: - if partition.get('mountpoint', None) != '/boot': - partition['encrypted'] = True - partition['!password'] = password + if len(partition_indexes) == 0: + return None - if not has_mountpoint(partition,'/'): - # Tell the upcoming steps to generate a key-file for non root mounts. - partition['generate-encryption-key-file'] = True + title = _('Select which partitions to mark for formatting:') - return block_devices + # show current partition layout: + if len(partitions): + title += _current_partition_layout(partitions) + '\n' - # TODO: Next version perhaps we can support mixed multiple encrypted partitions - # Users might want to single out a partition for non-encryption to share between dualboot etc. + choice = Menu(title, partition_indexes, multi=multiple).run() + + if choice.type_ == MenuSelectionType.Esc: + return None + + if isinstance(choice.value, list): + for partition_index in choice.value: + yield int(partition_index) + else: + yield (partition_index) \ No newline at end of file -- cgit v1.2.3-70-g09d2 From 72a44e34ef7f4f73126e4d33adc102e6b66fac43 Mon Sep 17 00:00:00 2001 From: Daniel Girtler Date: Tue, 17 May 2022 19:11:45 +1000 Subject: Fix #1162 (#1204) Co-authored-by: Daniel Girtler --- archinstall/lib/disk/blockdevice.py | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'archinstall/lib') diff --git a/archinstall/lib/disk/blockdevice.py b/archinstall/lib/disk/blockdevice.py index 188927b1..4978f19c 100644 --- a/archinstall/lib/disk/blockdevice.py +++ b/archinstall/lib/disk/blockdevice.py @@ -3,6 +3,7 @@ import os import json import logging import time +from functools import cached_property from typing import Optional, Dict, Any, Iterator, Tuple, List, TYPE_CHECKING # https://stackoverflow.com/a/39757388/929999 if TYPE_CHECKING: @@ -32,6 +33,10 @@ class BlockDevice: # I'm placing the encryption password on a BlockDevice level. def __repr__(self, *args :str, **kwargs :str) -> str: + return self._str_repr + + @cached_property + def _str_repr(self) -> str: return f"BlockDevice({self.device_or_backfile}, size={self._safe_size}GB, free_space={self._safe_free_space}, bus_type={self.bus_type})" def __iter__(self) -> Iterator[Partition]: -- cgit v1.2.3-70-g09d2 From 32432b2fdc950e6b884e79cc4f753670c050d321 Mon Sep 17 00:00:00 2001 From: Daniel Girtler Date: Tue, 17 May 2022 20:56:41 +1000 Subject: Fix padding calculation (#1205) Co-authored-by: Daniel Girtler --- archinstall/lib/menu/selection_menu.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'archinstall/lib') diff --git a/archinstall/lib/menu/selection_menu.py b/archinstall/lib/menu/selection_menu.py index 73ba1148..35057e9c 100644 --- a/archinstall/lib/menu/selection_menu.py +++ b/archinstall/lib/menu/selection_menu.py @@ -272,7 +272,8 @@ class GeneralMenu: return max([len(str(selection.description)) for selection in entries]) def _find_selection(self, selection_name: str) -> Tuple[str, Selector]: - padding = self._get_menu_text_padding(list(self._menu_options.values())) + enabled_menus = self._menus_to_enable() + padding = self._get_menu_text_padding(list(enabled_menus.values())) option = [(k, v) for k, v in self._menu_options.items() if v.menu_text(padding).strip() == selection_name.strip()] if len(option) != 1: -- cgit v1.2.3-70-g09d2 From ea2b7489e42c4e3ff4a5f4b00c0030191cf762ee Mon Sep 17 00:00:00 2001 From: "Dylan M. Taylor" Date: Tue, 17 May 2022 07:23:34 -0400 Subject: Fix since consistency issues with 1195 (#1206) --- archinstall/lib/menu/global_menu.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'archinstall/lib') diff --git a/archinstall/lib/menu/global_menu.py b/archinstall/lib/menu/global_menu.py index 963766a2..13d385ef 100644 --- a/archinstall/lib/menu/global_menu.py +++ b/archinstall/lib/menu/global_menu.py @@ -72,7 +72,7 @@ class GlobalMenu(GeneralMenu): lambda preset: self._select_harddrives(preset)) self._menu_options['disk_layouts'] = \ Selector( - _('Select disk layout'), + _('Disk layout'), lambda preset: select_disk_layout( preset, storage['arguments'].get('harddrives', []), @@ -81,7 +81,7 @@ class GlobalMenu(GeneralMenu): dependencies=['harddrives']) self._menu_options['!encryption-password'] = \ Selector( - _('Set encryption password'), + _('Encryption password'), lambda x: self._select_encrypted_password(), display_func=lambda x: secret(x) if x else 'None', dependencies=['harddrives']) @@ -103,7 +103,7 @@ class GlobalMenu(GeneralMenu): # root password won't have preset value self._menu_options['!root-password'] = \ Selector( - _('root password'), + _('Root password'), lambda preset:self._set_root_password(), display_func=lambda x: secret(x) if x else 'None') self._menu_options['!superusers'] = \ -- cgit v1.2.3-70-g09d2 From 493cccc18fa8c77c362b6abee2c3dc89d331c792 Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Wed, 18 May 2022 11:28:59 +0200 Subject: Added a HSM menu entry (#1196) * Added a HSM menu entry, but also a safety check to make sure a FIDO device is connected * flake8 complaints * Adding FIDO lookup using cryptenroll listing * Added systemd-cryptenroll --fido2-device=list * Removed old _select_hsm call * Fixed flake8 complaints * Added support for locking and unlocking with a HSM * Removed hardcoded paths in favor of PR merge * Removed hardcoded paths in favor of PR merge * Fixed mypy complaint * Flake8 issue * Added sd-encrypt for HSM and revert back to encrypt when HSM is not used (stability reason) * Added /etc/vconsole.conf and tweaked fido2_enroll() to use the proper paths * Spelling error * Using UUID instead of PARTUUID when using HSM. I can't figure out how to get sd-encrypt to use PARTUUID instead. Added a Partition().part_uuid function. Actually renamed .uuid to .part_uuid and created a .uuid instead. * Adding missing package libfido2 and removed tpm2-device=auto as it overrides everything and forces password prompt to be used over FIDO2, no matter the order of the options. * Added some notes to clarify some choices. * Had to move libfido2 package install to later in the chain, as there's not even a base during mounting :P --- .flake8 | 2 +- archinstall/__init__.py | 5 +++ archinstall/lib/configuration.py | 27 ++++++++---- archinstall/lib/disk/blockdevice.py | 2 +- archinstall/lib/disk/filesystem.py | 8 ++-- archinstall/lib/disk/partition.py | 44 ++++++++++++++++++- archinstall/lib/general.py | 2 + archinstall/lib/hsm/__init__.py | 4 ++ archinstall/lib/hsm/fido.py | 47 ++++++++++++++++++++ archinstall/lib/installer.py | 67 +++++++++++++++++++++++------ archinstall/lib/menu/global_menu.py | 6 +++ archinstall/lib/menu/selection_menu.py | 24 +++++++++++ archinstall/lib/udev/__init__.py | 1 + archinstall/lib/udev/udevadm.py | 17 ++++++++ archinstall/locales/en/LC_MESSAGES/base.mo | Bin 148 -> 261 bytes archinstall/locales/en/LC_MESSAGES/base.po | 7 +++ examples/guided.py | 6 +++ 17 files changed, 242 insertions(+), 27 deletions(-) create mode 100644 archinstall/lib/hsm/__init__.py create mode 100644 archinstall/lib/hsm/fido.py create mode 100644 archinstall/lib/udev/__init__.py create mode 100644 archinstall/lib/udev/udevadm.py (limited to 'archinstall/lib') diff --git a/.flake8 b/.flake8 index 39310a6c..d69ec92e 100644 --- a/.flake8 +++ b/.flake8 @@ -1,7 +1,7 @@ [flake8] count = True # Several of the following could be autofixed or improved by running the code through psf/black -ignore = E123,E126,E128,E203,E231,E261,E302,E402,E722,F541,W191,W292,W293 +ignore = E123,E126,E128,E203,E231,E261,E302,E402,E722,F541,W191,W292,W293,W503 max-complexity = 40 max-line-length = 236 show-source = True diff --git a/archinstall/__init__.py b/archinstall/__init__.py index aa644d48..da3deb35 100644 --- a/archinstall/__init__.py +++ b/archinstall/__init__.py @@ -45,6 +45,11 @@ from .lib.menu.selection_menu import ( from .lib.translation import Translation, DeferredTranslation from .lib.plugins import plugins, load_plugin # This initiates the plugin loading ceremony from .lib.configuration import * +from .lib.udev import udevadm_info +from .lib.hsm import ( + get_fido2_devices, + fido2_enroll +) parser = ArgumentParser() __version__ = "2.4.2" diff --git a/archinstall/lib/configuration.py b/archinstall/lib/configuration.py index c971768f..f3fe1e1c 100644 --- a/archinstall/lib/configuration.py +++ b/archinstall/lib/configuration.py @@ -1,12 +1,23 @@ import json import logging -from pathlib import Path +import pathlib from typing import Optional, Dict from .storage import storage from .general import JSON, UNSAFE_JSON from .output import log - +from .exceptions import RequirementError +from .hsm import get_fido2_devices + +def configuration_sanity_check(): + if storage['arguments'].get('HSM'): + if not get_fido2_devices(): + raise RequirementError( + f"In order to use HSM to pair with the disk encryption," + + f" one needs to be accessible through /dev/hidraw* and support" + + f" the FIDO2 protocol. You can check this by running" + + f" 'systemd-cryptenroll --fido2-device=list'." + ) class ConfigurationOutput: def __init__(self, config: Dict): @@ -21,7 +32,7 @@ class ConfigurationOutput: self._user_credentials = {} self._disk_layout = None self._user_config = {} - self._default_save_path = Path(storage.get('LOG_PATH', '.')) + self._default_save_path = pathlib.Path(storage.get('LOG_PATH', '.')) self._user_config_file = 'user_configuration.json' self._user_creds_file = "user_credentials.json" self._disk_layout_file = "user_disk_layout.json" @@ -84,7 +95,7 @@ class ConfigurationOutput: print() - def _is_valid_path(self, dest_path :Path) -> bool: + def _is_valid_path(self, dest_path :pathlib.Path) -> bool: if (not dest_path.exists()) or not (dest_path.is_dir()): log( 'Destination directory {} does not exist or is not a directory,\n Configuration files can not be saved'.format(dest_path.resolve()), @@ -93,26 +104,26 @@ class ConfigurationOutput: return False return True - def save_user_config(self, dest_path :Path = None): + def save_user_config(self, dest_path :pathlib.Path = None): if self._is_valid_path(dest_path): with open(dest_path / self._user_config_file, 'w') as config_file: config_file.write(self.user_config_to_json()) - def save_user_creds(self, dest_path :Path = None): + def save_user_creds(self, dest_path :pathlib.Path = None): if self._is_valid_path(dest_path): if user_creds := self.user_credentials_to_json(): target = dest_path / self._user_creds_file with open(target, 'w') as config_file: config_file.write(user_creds) - def save_disk_layout(self, dest_path :Path = None): + def save_disk_layout(self, dest_path :pathlib.Path = None): if self._is_valid_path(dest_path): if disk_layout := self.disk_layout_to_json(): target = dest_path / self._disk_layout_file with target.open('w') as config_file: config_file.write(disk_layout) - def save(self, dest_path :Path = None): + def save(self, dest_path :pathlib.Path = None): if not dest_path: dest_path = self._default_save_path diff --git a/archinstall/lib/disk/blockdevice.py b/archinstall/lib/disk/blockdevice.py index 4978f19c..995ca355 100644 --- a/archinstall/lib/disk/blockdevice.py +++ b/archinstall/lib/disk/blockdevice.py @@ -275,7 +275,7 @@ class BlockDevice: count = 0 while count < 5: for partition_uuid, partition in self.partitions.items(): - if partition.uuid.lower() == uuid.lower(): + if partition.part_uuid.lower() == uuid.lower(): return partition else: log(f"uuid {uuid} not found. Waiting for {count +1} time",level=logging.DEBUG) diff --git a/archinstall/lib/disk/filesystem.py b/archinstall/lib/disk/filesystem.py index db97924f..31929b63 100644 --- a/archinstall/lib/disk/filesystem.py +++ b/archinstall/lib/disk/filesystem.py @@ -150,7 +150,7 @@ class Filesystem: if partition.get('boot', False): log(f"Marking partition {partition['device_instance']} as bootable.") - self.set(self.partuuid_to_index(partition['device_instance'].uuid), 'boot on') + self.set(self.partuuid_to_index(partition['device_instance'].part_uuid), 'boot on') prev_partition = partition @@ -193,7 +193,7 @@ class Filesystem: def add_partition(self, partition_type :str, start :str, end :str, partition_format :Optional[str] = None) -> Partition: log(f'Adding partition to {self.blockdevice}, {start}->{end}', level=logging.INFO) - previous_partition_uuids = {partition.uuid for partition in self.blockdevice.partitions.values()} + previous_partition_uuids = {partition.part_uuid for partition in self.blockdevice.partitions.values()} if self.mode == MBR: if len(self.blockdevice.partitions) > 3: @@ -210,7 +210,7 @@ class Filesystem: count = 0 while count < 10: new_uuid = None - new_uuid_set = (previous_partition_uuids ^ {partition.uuid for partition in self.blockdevice.partitions.values()}) + new_uuid_set = (previous_partition_uuids ^ {partition.part_uuid for partition in self.blockdevice.partitions.values()}) if len(new_uuid_set) > 0: new_uuid = new_uuid_set.pop() @@ -236,7 +236,7 @@ class Filesystem: # TODO: This should never be able to happen log(f"Could not find the new PARTUUID after adding the partition.", level=logging.ERROR, fg="red") log(f"Previous partitions: {previous_partition_uuids}", level=logging.ERROR, fg="red") - log(f"New partitions: {(previous_partition_uuids ^ {partition.uuid for partition in self.blockdevice.partitions.values()})}", level=logging.ERROR, fg="red") + log(f"New partitions: {(previous_partition_uuids ^ {partition.part_uuid for partition in self.blockdevice.partitions.values()})}", level=logging.ERROR, fg="red") raise DiskError(f"Could not add partition using: {parted_string}") def set_name(self, partition: int, name: str) -> bool: diff --git a/archinstall/lib/disk/partition.py b/archinstall/lib/disk/partition.py index e7568258..c52ca434 100644 --- a/archinstall/lib/disk/partition.py +++ b/archinstall/lib/disk/partition.py @@ -184,7 +184,7 @@ class Partition: return device['pttype'] @property - def uuid(self) -> Optional[str]: + def part_uuid(self) -> Optional[str]: """ Returns the PARTUUID as returned by lsblk. This is more reliable than relying on /dev/disk/by-partuuid as @@ -197,6 +197,26 @@ class Partition: time.sleep(max(0.1, storage['DISK_TIMEOUTS'] * i)) + partuuid = self._safe_part_uuid + if partuuid: + return partuuid + + raise DiskError(f"Could not get PARTUUID for {self.path} using 'blkid -s PARTUUID -o value {self.path}'") + + @property + def uuid(self) -> Optional[str]: + """ + Returns the UUID as returned by lsblk for the **partition**. + This is more reliable than relying on /dev/disk/by-uuid as + it doesn't seam to be able to detect md raid partitions. + For bind mounts all the subvolumes share the same uuid + """ + for i in range(storage['DISK_RETRY_ATTEMPTS']): + if not self.partprobe(): + raise DiskError(f"Could not perform partprobe on {self.device_path}") + + time.sleep(max(0.1, storage['DISK_TIMEOUTS'] * i)) + partuuid = self._safe_uuid if partuuid: return partuuid @@ -216,6 +236,28 @@ class Partition: log(f"Could not reliably refresh PARTUUID of partition {self.device_path} due to partprobe error.", level=logging.DEBUG) + try: + return SysCommand(f'blkid -s UUID -o value {self.device_path}').decode('UTF-8').strip() + except SysCallError as error: + if self.block_device.info.get('TYPE') == 'iso9660': + # Parent device is a Optical Disk (.iso dd'ed onto a device for instance) + return None + + log(f"Could not get PARTUUID of partition using 'blkid -s UUID -o value {self.device_path}': {error}") + + @property + def _safe_part_uuid(self) -> Optional[str]: + """ + A near copy of self.uuid but without any delays. + This function should only be used where uuid is not crucial. + For instance when you want to get a __repr__ of the class. + """ + if not self.partprobe(): + if self.block_device.info.get('TYPE') == 'iso9660': + return None + + log(f"Could not reliably refresh PARTUUID of partition {self.device_path} due to partprobe error.", level=logging.DEBUG) + try: return SysCommand(f'blkid -s PARTUUID -o value {self.device_path}').decode('UTF-8').strip() except SysCallError as error: diff --git a/archinstall/lib/general.py b/archinstall/lib/general.py index a4e2a365..44b78777 100644 --- a/archinstall/lib/general.py +++ b/archinstall/lib/general.py @@ -135,6 +135,8 @@ class JsonEncoder: return obj.isoformat() elif isinstance(obj, (list, set, tuple)): return [json.loads(json.dumps(item, cls=JSON)) for item in obj] + elif isinstance(obj, (pathlib.Path)): + return str(obj) else: return obj diff --git a/archinstall/lib/hsm/__init__.py b/archinstall/lib/hsm/__init__.py new file mode 100644 index 00000000..c0888b04 --- /dev/null +++ b/archinstall/lib/hsm/__init__.py @@ -0,0 +1,4 @@ +from .fido import ( + get_fido2_devices, + fido2_enroll +) \ No newline at end of file diff --git a/archinstall/lib/hsm/fido.py b/archinstall/lib/hsm/fido.py new file mode 100644 index 00000000..69f42890 --- /dev/null +++ b/archinstall/lib/hsm/fido.py @@ -0,0 +1,47 @@ +import typing +import pathlib +from ..general import SysCommand, SysCommandWorker, clear_vt100_escape_codes +from ..disk.partition import Partition + +def get_fido2_devices() -> typing.Dict[str, typing.Dict[str, str]]: + """ + Uses systemd-cryptenroll to list the FIDO2 devices + connected that supports FIDO2. + Some devices might show up in udevadm as FIDO2 compliant + when they are in fact not. + + The drawback of systemd-cryptenroll is that it uses human readable format. + That means we get this weird table like structure that is of no use. + + So we'll look for `MANUFACTURER` and `PRODUCT`, we take their index + and we split each line based on those positions. + """ + worker = clear_vt100_escape_codes(SysCommand(f"systemd-cryptenroll --fido2-device=list").decode('UTF-8')) + + MANUFACTURER_POS = 0 + PRODUCT_POS = 0 + devices = {} + for line in worker.split('\r\n'): + if '/dev' not in line: + MANUFACTURER_POS = line.find('MANUFACTURER') + PRODUCT_POS = line.find('PRODUCT') + continue + + path = line[:MANUFACTURER_POS].rstrip() + manufacturer = line[MANUFACTURER_POS:PRODUCT_POS].rstrip() + product = line[PRODUCT_POS:] + + devices[path] = { + 'manufacturer' : manufacturer, + 'product' : product + } + + return devices + +def fido2_enroll(hsm_device_path :pathlib.Path, partition :Partition, password :str) -> bool: + worker = SysCommandWorker(f"systemd-cryptenroll --fido2-device={hsm_device_path} {partition.real_device}", peak_output=True) + pw_inputted = False + while worker.is_alive(): + if pw_inputted is False and bytes(f"please enter current passphrase for disk {partition.real_device}", 'UTF-8') in worker._trace_log.lower(): + worker.write(bytes(password, 'UTF-8')) + pw_inputted = True diff --git a/archinstall/lib/installer.py b/archinstall/lib/installer.py index e94a00c4..292b2c8e 100644 --- a/archinstall/lib/installer.py +++ b/archinstall/lib/installer.py @@ -23,6 +23,7 @@ from .profiles import Profile from .disk.btrfs import manage_btrfs_subvolumes from .disk.partition import get_mount_fs_type from .exceptions import DiskError, ServiceException, RequirementError, HardwareIncompatibilityError, SysCallError +from .hsm import fido2_enroll if TYPE_CHECKING: _: Any @@ -126,7 +127,9 @@ class Installer: self.MODULES = [] self.BINARIES = [] self.FILES = [] - self.HOOKS = ["base", "udev", "autodetect", "keyboard", "keymap", "modconf", "block", "filesystems", "fsck"] + # systemd, sd-vconsole and sd-encrypt will be replaced by udev, keymap and encrypt + # if HSM is not used to encrypt the root volume. Check mkinitcpio() function for that override. + self.HOOKS = ["base", "systemd", "autodetect", "keyboard", "sd-vconsole", "modconf", "block", "filesystems", "fsck"] self.KERNEL_PARAMS = [] self._zram_enabled = False @@ -241,10 +244,10 @@ class Installer: # open the luks device and all associate stuff if not (password := partition.get('!password', None)): raise RequirementError(f"Missing partition {partition['device_instance'].path} encryption password in layout: {partition}") - # i change a bit the naming conventions for the loop device loopdev = f"{storage.get('ENC_IDENTIFIER', 'ai')}{pathlib.Path(partition['mountpoint']).name}loop" else: loopdev = f"{storage.get('ENC_IDENTIFIER', 'ai')}{pathlib.Path(partition['device_instance'].path).name}" + # note that we DON'T auto_unmount (i.e. close the encrypted device so it can be used with (luks_handle := luks2(partition['device_instance'], loopdev, password, auto_unmount=False)) as unlocked_device: if partition.get('generate-encryption-key-file',False) and not self._has_root(partition): @@ -252,6 +255,10 @@ class Installer: # this way all the requesrs will be to the dm_crypt device and not to the physical partition partition['device_instance'] = unlocked_device + if self._has_root(partition) and partition.get('generate-encryption-key-file', False) is False: + hsm_device_path = storage['arguments']['HSM'] + fido2_enroll(hsm_device_path, partition['device_instance'], password) + # we manage the btrfs partitions for partition in [entry for entry in list_part if entry.get('btrfs', {}).get('subvolumes', {})]: if partition.get('filesystem',{}).get('mount_options',[]): @@ -609,6 +616,15 @@ class Installer: mkinit.write(f"MODULES=({' '.join(self.MODULES)})\n") mkinit.write(f"BINARIES=({' '.join(self.BINARIES)})\n") mkinit.write(f"FILES=({' '.join(self.FILES)})\n") + + if not storage['arguments']['HSM']: + # For now, if we don't use HSM we revert to the old + # way of setting up encryption hooks for mkinitcpio. + # This is purely for stability reasons, we're going away from this. + # * systemd -> udev + # * sd-vconsole -> keymap + self.HOOKS = [hook.replace('systemd', 'udev').replace('sd-vconsole', 'keymap') for hook in self.HOOKS] + mkinit.write(f"HOOKS=({' '.join(self.HOOKS)})\n") return SysCommand(f'/usr/bin/arch-chroot {self.target} mkinitcpio {" ".join(flags)}').exit_code == 0 @@ -643,8 +659,15 @@ class Installer: self.HOOKS.remove('fsck') if self.detect_encryption(partition): - if 'encrypt' not in self.HOOKS: - self.HOOKS.insert(self.HOOKS.index('filesystems'), 'encrypt') + if storage['arguments']['HSM']: + # Required bby mkinitcpio to add support for fido2-device options + self.pacstrap('libfido2') + + if 'sd-encrypt' not in self.HOOKS: + self.HOOKS.insert(self.HOOKS.index('filesystems'), 'sd-encrypt') + else: + if 'encrypt' not in self.HOOKS: + self.HOOKS.insert(self.HOOKS.index('filesystems'), 'encrypt') if not has_uefi(): self.base_packages.append('grub') @@ -700,6 +723,14 @@ class Installer: # TODO: Use python functions for this SysCommand(f'/usr/bin/arch-chroot {self.target} chmod 700 /root') + if storage['arguments']['HSM']: + # TODO: + # A bit of a hack, but we need to get vconsole.conf in there + # before running `mkinitcpio` because it expects it in HSM mode. + if (vconsole := pathlib.Path(f"{self.target}/etc/vconsole.conf")).exists() is False: + with vconsole.open('w') as fh: + fh.write(f"KEYMAP={storage['arguments']['keyboard-layout']}\n") + self.mkinitcpio('-P') self.helper_flags['base'] = True @@ -814,11 +845,23 @@ class Installer: if real_device := self.detect_encryption(root_partition): # TODO: We need to detect if the encrypted device is a whole disk encryption, # or simply a partition encryption. Right now we assume it's a partition (and we always have) - log(f"Identifying root partition by PART-UUID on {real_device}: '{real_device.uuid}'.", level=logging.DEBUG) - entry.write(f'options cryptdevice=PARTUUID={real_device.uuid}:luksdev root=/dev/mapper/luksdev {options_entry}') + log(f"Identifying root partition by PART-UUID on {real_device}: '{real_device.uuid}/{real_device.part_uuid}'.", level=logging.DEBUG) + + kernel_options = f"options" + + if storage['arguments']['HSM']: + # Note: lsblk UUID must be used, not PARTUUID for sd-encrypt to work + kernel_options += f" rd.luks.name={real_device.uuid}=luksdev" + # Note: tpm2-device and fido2-device don't play along very well: + # https://github.com/archlinux/archinstall/pull/1196#issuecomment-1129715645 + kernel_options += f" rd.luks.options=fido2-device=auto,password-echo=no" + else: + kernel_options += f" cryptdevice=PARTUUID={real_device.part_uuid}:luksdev" + + entry.write(f'{kernel_options} root=/dev/mapper/luksdev {options_entry}') else: - log(f"Identifying root partition by PART-UUID on {root_partition}, looking for '{root_partition.uuid}'.", level=logging.DEBUG) - entry.write(f'options root=PARTUUID={root_partition.uuid} {options_entry}') + log(f"Identifying root partition by PARTUUID on {root_partition}, looking for '{root_partition.part_uuid}'.", level=logging.DEBUG) + entry.write(f'options root=PARTUUID={root_partition.part_uuid} {options_entry}') self.helper_flags['bootloader'] = "systemd" @@ -903,11 +946,11 @@ class Installer: if real_device := self.detect_encryption(root_partition): # TODO: We need to detect if the encrypted device is a whole disk encryption, # or simply a partition encryption. Right now we assume it's a partition (and we always have) - log(f"Identifying root partition by PART-UUID on {real_device}: '{real_device.uuid}'.", level=logging.DEBUG) - kernel_parameters.append(f'cryptdevice=PARTUUID={real_device.uuid}:luksdev root=/dev/mapper/luksdev rw intel_pstate=no_hwp rootfstype={root_fs_type} {" ".join(self.KERNEL_PARAMS)}') + log(f"Identifying root partition by PART-UUID on {real_device}: '{real_device.part_uuid}'.", level=logging.DEBUG) + kernel_parameters.append(f'cryptdevice=PARTUUID={real_device.part_uuid}:luksdev root=/dev/mapper/luksdev rw intel_pstate=no_hwp rootfstype={root_fs_type} {" ".join(self.KERNEL_PARAMS)}') else: - log(f"Identifying root partition by PART-UUID on {root_partition}, looking for '{root_partition.uuid}'.", level=logging.DEBUG) - kernel_parameters.append(f'root=PARTUUID={root_partition.uuid} rw intel_pstate=no_hwp rootfstype={root_fs_type} {" ".join(self.KERNEL_PARAMS)}') + log(f"Identifying root partition by PART-UUID on {root_partition}, looking for '{root_partition.part_uuid}'.", level=logging.DEBUG) + kernel_parameters.append(f'root=PARTUUID={root_partition.part_uuid} rw intel_pstate=no_hwp rootfstype={root_fs_type} {" ".join(self.KERNEL_PARAMS)}') SysCommand(f'efibootmgr --disk {boot_partition.path[:-1]} --part {boot_partition.path[-1]} --create --label "{label}" --loader {loader} --unicode \'{" ".join(kernel_parameters)}\' --verbose') diff --git a/archinstall/lib/menu/global_menu.py b/archinstall/lib/menu/global_menu.py index 13d385ef..d807433c 100644 --- a/archinstall/lib/menu/global_menu.py +++ b/archinstall/lib/menu/global_menu.py @@ -85,6 +85,12 @@ class GlobalMenu(GeneralMenu): lambda x: self._select_encrypted_password(), display_func=lambda x: secret(x) if x else 'None', dependencies=['harddrives']) + self._menu_options['HSM'] = Selector( + description=_('Use HSM to unlock encrypted drive'), + func=lambda preset: self._select_hsm(preset), + dependencies=['!encryption-password'], + default=None + ) self._menu_options['swap'] = \ Selector( _('Swap'), diff --git a/archinstall/lib/menu/selection_menu.py b/archinstall/lib/menu/selection_menu.py index 35057e9c..26be4cc7 100644 --- a/archinstall/lib/menu/selection_menu.py +++ b/archinstall/lib/menu/selection_menu.py @@ -2,12 +2,14 @@ from __future__ import annotations import logging import sys +import pathlib from typing import Callable, Any, List, Iterator, Tuple, Optional, Dict, TYPE_CHECKING from .menu import Menu, MenuSelectionType from ..locale_helpers import set_keyboard_language from ..output import log from ..translation import Translation +from ..hsm.fido import get_fido2_devices if TYPE_CHECKING: _: Any @@ -466,3 +468,25 @@ class GeneralMenu: return language return preset_value + + def _select_hsm(self, preset :Optional[pathlib.Path] = None) -> Optional[pathlib.Path]: + title = _('Select which partitions to mark for formatting:') + title += '\n' + + fido_devices = get_fido2_devices() + + indexes = [] + for index, path in enumerate(fido_devices.keys()): + title += f"{index}: {path} ({fido_devices[path]['manufacturer']} - {fido_devices[path]['product']})" + indexes.append(f"{index}|{fido_devices[path]['product']}") + + title += '\n' + + choice = Menu(title, indexes, multi=False).run() + + match choice.type_: + case MenuSelectionType.Esc: return preset + case MenuSelectionType.Selection: + return pathlib.Path(list(fido_devices.keys())[int(choice.value.split('|',1)[0])]) + + return None \ No newline at end of file diff --git a/archinstall/lib/udev/__init__.py b/archinstall/lib/udev/__init__.py new file mode 100644 index 00000000..86c8cc29 --- /dev/null +++ b/archinstall/lib/udev/__init__.py @@ -0,0 +1 @@ +from .udevadm import udevadm_info \ No newline at end of file diff --git a/archinstall/lib/udev/udevadm.py b/archinstall/lib/udev/udevadm.py new file mode 100644 index 00000000..84ec9cfd --- /dev/null +++ b/archinstall/lib/udev/udevadm.py @@ -0,0 +1,17 @@ +import typing +import pathlib +from ..general import SysCommand + +def udevadm_info(path :pathlib.Path) -> typing.Dict[str, str]: + if path.resolve().exists() is False: + return {} + + result = SysCommand(f"udevadm info {path.resolve()}") + data = {} + for line in result: + if b': ' in line and b'=' in line: + _, obj = line.split(b': ', 1) + key, value = obj.split(b'=', 1) + data[key.decode('UTF-8').lower()] = value.decode('UTF-8').strip() + + return data \ No newline at end of file diff --git a/archinstall/locales/en/LC_MESSAGES/base.mo b/archinstall/locales/en/LC_MESSAGES/base.mo index c89651e7..e6ac80c2 100644 Binary files a/archinstall/locales/en/LC_MESSAGES/base.mo and b/archinstall/locales/en/LC_MESSAGES/base.mo differ diff --git a/archinstall/locales/en/LC_MESSAGES/base.po b/archinstall/locales/en/LC_MESSAGES/base.po index d883553c..531e20a9 100644 --- a/archinstall/locales/en/LC_MESSAGES/base.po +++ b/archinstall/locales/en/LC_MESSAGES/base.po @@ -1,8 +1,15 @@ msgid "" msgstr "" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: en\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 3.0.1\n" msgid "[!] A log file has been created here: {} {}" msgstr "" diff --git a/examples/guided.py b/examples/guided.py index f104b7e3..3b762a8b 100644 --- a/examples/guided.py +++ b/examples/guided.py @@ -57,6 +57,10 @@ def ask_user_questions(): # Get disk encryption password (or skip if blank) global_menu.enable('!encryption-password') + if archinstall.arguments.get('advanced', False) or archinstall.arguments.get('HSM', None): + # Enables the use of HSM + global_menu.enable('HSM') + # Ask which boot-loader to use (will only ask if we're in UEFI mode, otherwise will default to GRUB) global_menu.enable('bootloader') @@ -130,6 +134,7 @@ def perform_installation(mountpoint): Only requirement is that the block devices are formatted and setup prior to entering this function. """ + with archinstall.Installer(mountpoint, kernels=archinstall.arguments.get('kernels', ['linux'])) as installation: # Mount all the drives to the desired mountpoint # This *can* be done outside of the installation, but the installer can deal with it. @@ -301,5 +306,6 @@ if archinstall.arguments.get('dry_run'): if not archinstall.arguments.get('silent'): input(str(_('Press Enter to continue.'))) +archinstall.configuration_sanity_check() perform_filesystem_operations() perform_installation(archinstall.storage.get('MOUNT_POINT', '/mnt')) -- cgit v1.2.3-70-g09d2 From 089c46db4a3c89dd8ba670419369c405bec3a270 Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Wed, 18 May 2022 13:57:44 +0200 Subject: Added PIN support for FIDO2 devices (#1209) * Adding support for PIN for FIDO2 unlock * Added a more clear output since systemd-cryptenroll isn't clear on it's output --- archinstall/lib/hsm/fido.py | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'archinstall/lib') diff --git a/archinstall/lib/hsm/fido.py b/archinstall/lib/hsm/fido.py index 69f42890..8707ac52 100644 --- a/archinstall/lib/hsm/fido.py +++ b/archinstall/lib/hsm/fido.py @@ -1,7 +1,10 @@ import typing import pathlib +import getpass +import logging from ..general import SysCommand, SysCommandWorker, clear_vt100_escape_codes from ..disk.partition import Partition +from ..general import log def get_fido2_devices() -> typing.Dict[str, typing.Dict[str, str]]: """ @@ -41,7 +44,14 @@ def get_fido2_devices() -> typing.Dict[str, typing.Dict[str, str]]: def fido2_enroll(hsm_device_path :pathlib.Path, partition :Partition, password :str) -> bool: worker = SysCommandWorker(f"systemd-cryptenroll --fido2-device={hsm_device_path} {partition.real_device}", peak_output=True) pw_inputted = False + pin_inputted = False while worker.is_alive(): if pw_inputted is False and bytes(f"please enter current passphrase for disk {partition.real_device}", 'UTF-8') in worker._trace_log.lower(): worker.write(bytes(password, 'UTF-8')) pw_inputted = True + + elif pin_inputted is False and bytes(f"please enter security token pin", 'UTF-8') in worker._trace_log.lower(): + worker.write(bytes(getpass.getpass(" "), 'UTF-8')) + pin_inputted = True + + log(f"You might need to touch the FIDO2 device to unlock it if no prompt comes up after 3 seconds.", level=logging.INFO, fg="yellow") \ No newline at end of file -- cgit v1.2.3-70-g09d2 From 65a5a335aa21ea44fd99fb200e238df54b3c2e47 Mon Sep 17 00:00:00 2001 From: Daniel Girtler Date: Wed, 18 May 2022 21:59:49 +1000 Subject: Enhance view (#1210) * Add preview for menu entries * Fix mypy * Update * Update * Fix mypy Co-authored-by: Daniel Girtler --- .github/workflows/mypy.yaml | 2 +- archinstall/lib/disk/blockdevice.py | 42 ++++++++++---- archinstall/lib/hsm/fido.py | 2 +- archinstall/lib/menu/global_menu.py | 66 +++++++++++++++++----- archinstall/lib/menu/list_manager.py | 4 +- archinstall/lib/menu/selection_menu.py | 8 ++- archinstall/lib/user_interaction/general_conf.py | 1 - archinstall/lib/user_interaction/network_conf.py | 12 ++-- .../lib/user_interaction/partitioning_conf.py | 19 ++++--- archinstall/lib/user_interaction/utils.py | 1 + 10 files changed, 110 insertions(+), 47 deletions(-) (limited to 'archinstall/lib') diff --git a/.github/workflows/mypy.yaml b/.github/workflows/mypy.yaml index 6fd0876f..18c33e67 100644 --- a/.github/workflows/mypy.yaml +++ b/.github/workflows/mypy.yaml @@ -15,4 +15,4 @@ jobs: # one day this will be enabled # run: mypy --strict --module archinstall || exit 0 - name: run mypy - run: mypy --follow-imports=skip archinstall/lib/menu/selection_menu.py archinstall/lib/models/network_configuration.py archinstall/lib/menu/list_manager.py archinstall/lib/user_interaction/network_conf.py + run: mypy --follow-imports=silent archinstall/lib/menu/selection_menu.py archinstall/lib/menu/global_menu.py archinstall/lib/models/network_configuration.py archinstall/lib/menu/list_manager.py archinstall/lib/user_interaction/network_conf.py diff --git a/archinstall/lib/disk/blockdevice.py b/archinstall/lib/disk/blockdevice.py index 995ca355..15f03789 100644 --- a/archinstall/lib/disk/blockdevice.py +++ b/archinstall/lib/disk/blockdevice.py @@ -34,11 +34,29 @@ class BlockDevice: def __repr__(self, *args :str, **kwargs :str) -> str: return self._str_repr - + @cached_property def _str_repr(self) -> str: return f"BlockDevice({self.device_or_backfile}, size={self._safe_size}GB, free_space={self._safe_free_space}, bus_type={self.bus_type})" + @cached_property + def display_info(self) -> str: + columns = { + str(_('Device')): self.device_or_backfile, + str(_('Size')): f'{self._safe_size}GB', + str(_('Free space')): f'{self._safe_free_space}', + str(_('Bus-type')): f'{self.bus_type}' + } + + padding = max([len(k) for k in columns.keys()]) + + pretty = '' + for k, v in columns.items(): + k = k.ljust(padding, ' ') + pretty += f'{k} = {v}\n' + + return pretty.rstrip() + def __iter__(self) -> Iterator[Partition]: for partition in self.partitions: yield self.partitions[partition] @@ -79,7 +97,7 @@ class BlockDevice: for device in output['blockdevices']: return device['pttype'] - @property + @cached_property def device_or_backfile(self) -> str: """ Returns the actual device-endpoint of the BlockDevice. @@ -162,7 +180,7 @@ class BlockDevice: from .filesystem import GPT return GPT - @property + @cached_property def uuid(self) -> str: log('BlockDevice().uuid is untested!', level=logging.WARNING, fg='yellow') """ @@ -172,7 +190,7 @@ class BlockDevice: """ return SysCommand(f'blkid -s PTUUID -o value {self.path}').decode('UTF-8') - @property + @cached_property def _safe_size(self) -> float: from .helpers import convert_size_to_gb @@ -184,7 +202,7 @@ class BlockDevice: for device in output['blockdevices']: return convert_size_to_gb(device['size']) - @property + @cached_property def size(self) -> float: from .helpers import convert_size_to_gb @@ -193,28 +211,28 @@ class BlockDevice: for device in output['blockdevices']: return convert_size_to_gb(device['size']) - @property + @cached_property def bus_type(self) -> str: output = json.loads(SysCommand(f"lsblk --json -o+ROTA,TRAN {self.path}").decode('UTF-8')) for device in output['blockdevices']: return device['tran'] - @property + @cached_property def spinning(self) -> bool: output = json.loads(SysCommand(f"lsblk --json -o+ROTA,TRAN {self.path}").decode('UTF-8')) for device in output['blockdevices']: return device['rota'] is True - @property + @cached_property def _safe_free_space(self) -> Tuple[str, ...]: try: return '+'.join(part[2] for part in self.free_space) except SysCallError: return '?' - @property + @cached_property def free_space(self) -> Tuple[str, ...]: # NOTE: parted -s will default to `cancel` on prompt, skipping any partition # that is "outside" the disk. in /dev/sr0 this is usually the case with Archiso, @@ -228,7 +246,7 @@ class BlockDevice: except SysCallError as error: log(f"Could not get free space on {self.path}: {error}", level=logging.DEBUG) - @property + @cached_property def largest_free_space(self) -> List[str]: info = [] for space_info in self.free_space: @@ -240,7 +258,7 @@ class BlockDevice: info = space_info return info - @property + @cached_property def first_free_sector(self) -> str: if info := self.largest_free_space: start = info[0] @@ -248,7 +266,7 @@ class BlockDevice: start = '512MB' return start - @property + @cached_property def first_end_sector(self) -> str: if info := self.largest_free_space: end = info[1] diff --git a/archinstall/lib/hsm/fido.py b/archinstall/lib/hsm/fido.py index 8707ac52..49f36957 100644 --- a/archinstall/lib/hsm/fido.py +++ b/archinstall/lib/hsm/fido.py @@ -40,7 +40,7 @@ def get_fido2_devices() -> typing.Dict[str, typing.Dict[str, str]]: } return devices - + def fido2_enroll(hsm_device_path :pathlib.Path, partition :Partition, password :str) -> bool: worker = SysCommandWorker(f"systemd-cryptenroll --fido2-device={hsm_device_path} {partition.real_device}", peak_output=True) pw_inputted = False diff --git a/archinstall/lib/menu/global_menu.py b/archinstall/lib/menu/global_menu.py index d807433c..53e0941d 100644 --- a/archinstall/lib/menu/global_menu.py +++ b/archinstall/lib/menu/global_menu.py @@ -1,6 +1,6 @@ from __future__ import annotations -from typing import Any, List, Optional, Union +from typing import Any, List, Optional, Union, Dict, TYPE_CHECKING import archinstall @@ -33,10 +33,15 @@ from ..user_interaction import select_encrypted_partitions from ..user_interaction import select_harddrives from ..user_interaction import select_profile from ..user_interaction import select_additional_repositories +from ..user_interaction.partitioning_conf import current_partition_layout + +if TYPE_CHECKING: + _: Any + class GlobalMenu(GeneralMenu): def __init__(self,data_store): - super().__init__(data_store=data_store, auto_cursor=True) + super().__init__(data_store=data_store, auto_cursor=True, preview_size=0.3) def _setup_selection_menu_options(self): # archinstall.Language will not use preset values @@ -69,7 +74,10 @@ class GlobalMenu(GeneralMenu): self._menu_options['harddrives'] = \ Selector( _('Drive(s)'), - lambda preset: self._select_harddrives(preset)) + lambda preset: self._select_harddrives(preset), + display_func=lambda x: f'{len(x)} ' + str(_('Drive(s)')) if x is not None and len(x) > 0 else '', + preview_func=self._prev_harddrives, + ) self._menu_options['disk_layouts'] = \ Selector( _('Disk layout'), @@ -78,6 +86,8 @@ class GlobalMenu(GeneralMenu): storage['arguments'].get('harddrives', []), storage['arguments'].get('advanced', False) ), + preview_func=self._prev_disk_layouts, + display_func=lambda x: self._display_disk_layout(x), dependencies=['harddrives']) self._menu_options['!encryption-password'] = \ Selector( @@ -131,7 +141,8 @@ class GlobalMenu(GeneralMenu): Selector( _('Profile'), lambda preset: self._select_profile(preset), - display_func=lambda x: x if x else 'None') + display_func=lambda x: x if x else 'None' + ) self._menu_options['audio'] = \ Selector( _('Audio'), @@ -189,7 +200,7 @@ class GlobalMenu(GeneralMenu): def _update_install_text(self, name :str = None, result :Any = None): text = self._install_text() - self._menu_options.get('install').update_description(text) + self._menu_options['install'].update_description(text) def post_callback(self,name :str = None ,result :Any = None): self._update_install_text(name, result) @@ -225,6 +236,35 @@ class GlobalMenu(GeneralMenu): else: return str(cur_value) + def _prev_harddrives(self) -> Optional[str]: + selector = self._menu_options['harddrives'] + if selector.has_selection(): + drives = selector.current_selection + return '\n\n'.join([d.display_info for d in drives]) + return None + + def _prev_disk_layouts(self) -> Optional[str]: + selector = self._menu_options['disk_layouts'] + if selector.has_selection(): + layouts: Dict[str, Dict[str, Any]] = selector.current_selection + + output = '' + for device, layout in layouts.items(): + output += f'{_("Device")}: {device}\n\n' + output += current_partition_layout(layout['partitions'], with_title=False) + output += '\n\n' + + return output.rstrip() + + return None + + def _display_disk_layout(self, current_value: Optional[Dict[str, Any]]) -> str: + if current_value: + total_partitions = [entry['partitions'] for entry in current_value.values()] + total_nr = sum([len(p) for p in total_partitions]) + return f'{total_nr} {_("Partitions")}' + return '' + def _prev_install_missing_config(self) -> Optional[str]: if missing := self._missing_configs(): text = str(_('Missing configurations:\n')) @@ -247,17 +287,17 @@ class GlobalMenu(GeneralMenu): if not check('harddrives'): missing += ['Hard drives'] if check('harddrives'): - if not self._menu_options.get('harddrives').is_empty() and not check('disk_layouts'): + if not self._menu_options['harddrives'].is_empty() and not check('disk_layouts'): missing += ['Disk layout'] return missing - def _set_root_password(self): + def _set_root_password(self) -> Optional[str]: prompt = str(_('Enter root password (leave blank to disable root): ')) password = get_password(prompt=prompt) return password - def _select_encrypted_password(self): + def _select_encrypted_password(self) -> Optional[str]: if passwd := get_password(prompt=str(_('Enter disk encryption password (leave blank for no encryption): '))): return passwd else: @@ -271,7 +311,7 @@ class GlobalMenu(GeneralMenu): return ntp - def _select_harddrives(self, old_harddrives : list) -> list: + def _select_harddrives(self, old_harddrives : list) -> List: harddrives = select_harddrives(old_harddrives) if len(harddrives) == 0: @@ -288,7 +328,7 @@ class GlobalMenu(GeneralMenu): # in case the harddrives got changed we have to reset the disk layout as well if old_harddrives != harddrives: - self._menu_options.get('disk_layouts').set_current_selection(None) + self._menu_options['disk_layouts'].set_current_selection(None) storage['arguments']['disk_layouts'] = {} return harddrives @@ -340,11 +380,11 @@ class GlobalMenu(GeneralMenu): return ret - def _create_superuser_account(self): + def _create_superuser_account(self) -> Optional[Dict[str, Dict[str, str]]]: superusers = ask_for_superuser_account(str(_('Manage superuser accounts: '))) return superusers if superusers else None - def _create_user_account(self): + def _create_user_account(self) -> Dict[str, Dict[str, str | None]]: users = ask_for_additional_users(str(_('Manage ordinary user accounts: '))) return users @@ -356,7 +396,7 @@ class GlobalMenu(GeneralMenu): else: return list(superusers.keys()) if superusers else '' - def _users_resynch(self): + def _users_resynch(self) -> bool: self.synch('!superusers') self.synch('!users') return False diff --git a/archinstall/lib/menu/list_manager.py b/archinstall/lib/menu/list_manager.py index 9faa1c77..7db3b3a9 100644 --- a/archinstall/lib/menu/list_manager.py +++ b/archinstall/lib/menu/list_manager.py @@ -89,7 +89,7 @@ from .text_input import TextInput from .menu import Menu, MenuSelectionType from os import system from copy import copy -from typing import Union, Any, TYPE_CHECKING, Dict +from typing import Union, Any, TYPE_CHECKING, Dict, Optional if TYPE_CHECKING: _: Any @@ -147,7 +147,7 @@ class ListManager: self.base_data = base_list self._data = copy(base_list) # as refs, changes are immediate # default values for the null case - self.target = None + self.target: Optional[Any] = None self.action = self._null_action if len(self._data) == 0 and self._null_action: diff --git a/archinstall/lib/menu/selection_menu.py b/archinstall/lib/menu/selection_menu.py index 26be4cc7..57e290f1 100644 --- a/archinstall/lib/menu/selection_menu.py +++ b/archinstall/lib/menu/selection_menu.py @@ -15,7 +15,7 @@ if TYPE_CHECKING: _: Any -def select_archinstall_language(preset_value: str) -> Optional[str]: +def select_archinstall_language(preset_value: str) -> Optional[Any]: """ copied from user_interaction/general_conf.py as a temporary measure """ @@ -487,6 +487,8 @@ class GeneralMenu: match choice.type_: case MenuSelectionType.Esc: return preset case MenuSelectionType.Selection: - return pathlib.Path(list(fido_devices.keys())[int(choice.value.split('|',1)[0])]) + selection: Any = choice.value + index = int(selection.split('|',1)[0]) + return pathlib.Path(list(fido_devices.keys())[index]) - return None \ No newline at end of file + return None diff --git a/archinstall/lib/user_interaction/general_conf.py b/archinstall/lib/user_interaction/general_conf.py index c3a2a7a7..d4dc60db 100644 --- a/archinstall/lib/user_interaction/general_conf.py +++ b/archinstall/lib/user_interaction/general_conf.py @@ -142,7 +142,6 @@ def select_profile(preset) -> Optional[Profile]: options[option] = profile title = _('This is a list of pre-programmed profiles, they might make it easier to install things like desktop environments') - warning = str(_('Are you sure you want to reset this setting?')) selection = Menu( diff --git a/archinstall/lib/user_interaction/network_conf.py b/archinstall/lib/user_interaction/network_conf.py index e4e681ce..25e9d4c6 100644 --- a/archinstall/lib/user_interaction/network_conf.py +++ b/archinstall/lib/user_interaction/network_conf.py @@ -64,7 +64,7 @@ class ManualNetworkConfig(ListManager): elif self.action == self._action_delete: del data[iface_name] - def _select_iface(self, existing_ifaces: List[str]) -> Optional[str]: + def _select_iface(self, existing_ifaces: List[str]) -> Optional[Any]: all_ifaces = list_interfaces().values() available = set(all_ifaces) - set(existing_ifaces) choice = Menu(str(_('Select interface to add')), list(available), skip=True).run() @@ -94,14 +94,14 @@ class ManualNetworkConfig(ListManager): log("You need to enter a valid IP in IP-config mode.", level=logging.WARNING, fg='red') # Implemented new check for correct gateway IP address + gateway = None + while 1: - gateway = TextInput(_('Enter your gateway (router) IP address or leave blank for none: '), + gateway_input = TextInput(_('Enter your gateway (router) IP address or leave blank for none: '), edit_iface.gateway).run().strip() try: - if len(gateway) == 0: - gateway = None - else: - ipaddress.ip_address(gateway) + if len(gateway_input) > 0: + ipaddress.ip_address(gateway_input) break except ValueError: log("You need to enter a valid gateway (router) IP address.", level=logging.WARNING, fg='red') diff --git a/archinstall/lib/user_interaction/partitioning_conf.py b/archinstall/lib/user_interaction/partitioning_conf.py index 741decc1..bfff5705 100644 --- a/archinstall/lib/user_interaction/partitioning_conf.py +++ b/archinstall/lib/user_interaction/partitioning_conf.py @@ -20,9 +20,9 @@ def partition_overlap(partitions: list, start: str, end: str) -> bool: return False -def _current_partition_layout(partitions: List[Partition], with_idx: bool = False) -> str: +def current_partition_layout(partitions: List[Dict[str, Any]], with_idx: bool = False, with_title: bool = True) -> str: - def do_padding(name, max_len): + def do_padding(name: str, max_len: int): spaces = abs(len(str(name)) - max_len) + 2 pad_left = int(spaces / 2) pad_right = spaces - pad_left @@ -62,8 +62,11 @@ def _current_partition_layout(partitions: List[Partition], with_idx: bool = Fals current_layout += f'{row[:-1]}\n' - title = str(_('Current partition layout')) - return f'\n\n{title}:\n\n{current_layout}' + if with_title: + title = str(_('Current partition layout')) + return f'\n\n{title}:\n\n{current_layout}' + + return current_layout def _get_partitions(partitions :List[Partition], filter_ :Callable = None) -> List[str]: @@ -173,7 +176,7 @@ def manage_new_and_existing_partitions(block_device: 'BlockDevice') -> Dict[str, # show current partition layout: if len(block_device_struct["partitions"]): - title += _current_partition_layout(block_device_struct['partitions']) + '\n' + title += current_partition_layout(block_device_struct['partitions']) + '\n' modes += [save_and_exit, cancel] @@ -246,7 +249,7 @@ def manage_new_and_existing_partitions(block_device: 'BlockDevice') -> Dict[str, block_device_struct.update(suggest_single_disk_layout(block_device)[block_device.path]) else: - current_layout = _current_partition_layout(block_device_struct['partitions'], with_idx=True) + current_layout = current_partition_layout(block_device_struct['partitions'], with_idx=True) if task == delete_partition: title = _('{}\n\nSelect by index which partitions to delete').format(current_layout) @@ -375,7 +378,7 @@ def select_encrypted_partitions( # show current partition layout: if len(partitions): - title += _current_partition_layout(partitions) + '\n' + title += current_partition_layout(partitions) + '\n' choice = Menu(title, partition_indexes, multi=multiple).run() @@ -386,4 +389,4 @@ def select_encrypted_partitions( for partition_index in choice.value: yield int(partition_index) else: - yield (partition_index) \ No newline at end of file + yield (partition_index) diff --git a/archinstall/lib/user_interaction/utils.py b/archinstall/lib/user_interaction/utils.py index ce48607d..fa079bc2 100644 --- a/archinstall/lib/user_interaction/utils.py +++ b/archinstall/lib/user_interaction/utils.py @@ -52,6 +52,7 @@ def get_password(prompt: str = '') -> Optional[str]: continue return passwd + return None -- cgit v1.2.3-70-g09d2 From 21ac931b9ba036734ab9915590d2f935b726b8b9 Mon Sep 17 00:00:00 2001 From: Didr Date: Thu, 19 May 2022 21:46:55 +0200 Subject: Clarify info message about profile installation (#1219) --- archinstall/lib/installer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'archinstall/lib') diff --git a/archinstall/lib/installer.py b/archinstall/lib/installer.py index 292b2c8e..85805ec2 100644 --- a/archinstall/lib/installer.py +++ b/archinstall/lib/installer.py @@ -1019,7 +1019,7 @@ class Installer: if type(profile) == str: profile = Profile(self, profile) - self.log(f'Installing network profile {profile}', level=logging.INFO) + self.log(f'Installing archinstall profile {profile}', level=logging.INFO) return profile.install() def enable_sudo(self, entity: str, group :bool = False) -> bool: -- cgit v1.2.3-70-g09d2 From 33ce7dbd8baf5402a20e850f503390b9c229e698 Mon Sep 17 00:00:00 2001 From: Luna <30698906+Lunarequest@users.noreply.github.com> Date: Sat, 21 May 2022 21:21:11 +0530 Subject: Don't check for exit code since SysCallError will be raised (#1228) --- archinstall/lib/installer.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'archinstall/lib') diff --git a/archinstall/lib/installer.py b/archinstall/lib/installer.py index 85805ec2..e3bd16d3 100644 --- a/archinstall/lib/installer.py +++ b/archinstall/lib/installer.py @@ -775,7 +775,9 @@ class Installer: # And in which case we should do some clean up. # Install the boot loader - if SysCommand(f'/usr/bin/arch-chroot {self.target} bootctl --path=/boot install').exit_code != 0: + try: + SysCommand(f'/usr/bin/arch-chroot {self.target} bootctl --path=/boot install') + except SysCallError: # Fallback, try creating the boot loader without touching the EFI variables SysCommand(f'/usr/bin/arch-chroot {self.target} bootctl --no-variables --path=/boot install') -- cgit v1.2.3-70-g09d2 From c93482a8b943a593608d8bae7156e357ed0002d5 Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Thu, 26 May 2022 18:46:10 +0200 Subject: Rework btrfs handling (#1234) * Restructuring btrfs.py into lib/btrfs/*.py * Reworking how BTRFS subvolumes get represented, and worked with. Subvolumes are now their own entity which can be used to access it's information, parents or mount location. * Added BtrfsSubvolume.partition and other stuff. * Reworking the way luks2().unlock and .format() returns device instances. They should now return BTRFSSubvolume where appropriate. * Fixed a missing import * Fixed an issue where mkfs.btrfs wouldn't trigger due to busy disk. * Fixing subvol mounting without creating a fake instance. * Added creation of mountpint for btrfs subvolume * Fixed root detection * Re-worked mounting into a queue system using frozen mounting calls using lambda * Removed old mount_subvolume() function * Removed get_subvolumes_from_findmnt() * Fixed Partition().subvolumes iteration * Adding .root to BtrfsSubvolume * Fixed issue in SysCommandWorker where log output would break and crash execution due to cmd being a string vs list * Changed return-value from MapperDev.mountpoint to pathlib.Path --- archinstall/lib/disk/__init__.py | 2 +- archinstall/lib/disk/btrfs.py | 232 --------------------------- archinstall/lib/disk/btrfs/__init__.py | 182 +++++++++++++++++++++ archinstall/lib/disk/btrfs/btrfs_helpers.py | 132 +++++++++++++++ archinstall/lib/disk/btrfs/btrfspartition.py | 116 ++++++++++++++ archinstall/lib/disk/btrfs/btrfssubvolume.py | 191 ++++++++++++++++++++++ archinstall/lib/disk/filesystem.py | 13 ++ archinstall/lib/disk/helpers.py | 31 +++- archinstall/lib/disk/mapperdev.py | 10 +- archinstall/lib/disk/partition.py | 120 ++++++++------ archinstall/lib/exceptions.py | 4 + archinstall/lib/general.py | 2 +- archinstall/lib/installer.py | 77 ++++++--- archinstall/lib/luks.py | 16 +- archinstall/lib/output.py | 6 +- archinstall/lib/systemd.py | 13 +- 16 files changed, 829 insertions(+), 318 deletions(-) delete mode 100644 archinstall/lib/disk/btrfs.py create mode 100644 archinstall/lib/disk/btrfs/__init__.py create mode 100644 archinstall/lib/disk/btrfs/btrfs_helpers.py create mode 100644 archinstall/lib/disk/btrfs/btrfspartition.py create mode 100644 archinstall/lib/disk/btrfs/btrfssubvolume.py (limited to 'archinstall/lib') diff --git a/archinstall/lib/disk/__init__.py b/archinstall/lib/disk/__init__.py index bb6eb815..352d04b9 100644 --- a/archinstall/lib/disk/__init__.py +++ b/archinstall/lib/disk/__init__.py @@ -4,4 +4,4 @@ from .blockdevice import BlockDevice from .filesystem import Filesystem, MBR, GPT from .partition import * from .user_guides import * -from .validators import * +from .validators import * \ No newline at end of file diff --git a/archinstall/lib/disk/btrfs.py b/archinstall/lib/disk/btrfs.py deleted file mode 100644 index 33f59721..00000000 --- a/archinstall/lib/disk/btrfs.py +++ /dev/null @@ -1,232 +0,0 @@ -from __future__ import annotations -import pathlib -import glob -import logging -import re -from typing import Union, Dict, TYPE_CHECKING, Any, Iterator -from dataclasses import dataclass - -# https://stackoverflow.com/a/39757388/929999 -if TYPE_CHECKING: - from ..installer import Installer -from .helpers import get_mount_info -from ..exceptions import DiskError -from ..general import SysCommand -from ..output import log -from ..exceptions import SysCallError - -@dataclass -class BtrfsSubvolume: - target :str - source :str - fstype :str - name :str - options :str - root :bool = False - -def get_subvolumes_from_findmnt(struct :Dict[str, Any], index=0) -> Iterator[BtrfsSubvolume]: - if '[' in struct['source']: - subvolume = re.findall(r'\[.*?\]', struct['source'])[0][1:-1] - struct['source'] = struct['source'].replace(f"[{subvolume}]", "") - yield BtrfsSubvolume( - target=struct['target'], - source=struct['source'], - fstype=struct['fstype'], - name=subvolume, - options=struct['options'], - root=index == 0 - ) - index += 1 - - for child in struct.get('children', []): - for item in get_subvolumes_from_findmnt(child, index=index): - yield item - index += 1 - -def get_subvolume_info(path :pathlib.Path) -> Dict[str, Any]: - try: - output = SysCommand(f"btrfs subvol show {path}").decode() - except SysCallError as error: - print('Error:', error) - - result = {} - for line in output.replace('\r\n', '\n').split('\n'): - if ':' in line: - key, val = line.replace('\t', '').split(':', 1) - result[key.strip().lower().replace(' ', '_')] = val.strip() - - return result - -def mount_subvolume(installation :Installer, subvolume_location :Union[pathlib.Path, str], force=False) -> bool: - """ - This function uses mount to mount a subvolume on a given device, at a given location with a given subvolume name. - - @installation: archinstall.Installer instance - @subvolume_location: a localized string or path inside the installation / or /boot for instance without specifying /mnt/boot - @force: overrides the check for weither or not the subvolume mountpoint is empty or not - - This function is DEPRECATED. you can get the same result creating a partition dict like any other partition, and using the standard mount procedure. - Only change partition['device_instance'].path with the apropriate bind name: real_partition_path[/subvolume_name] - """ - log("[Deprecated] function btrfs.mount_subvolume is deprecated. See code for alternatives",fg="yellow",level=logging.WARNING) - installation_mountpoint = installation.target - if type(installation_mountpoint) == str: - installation_mountpoint = pathlib.Path(installation_mountpoint) - # Set up the required physical structure - if type(subvolume_location) == str: - subvolume_location = pathlib.Path(subvolume_location) - - target = installation_mountpoint / subvolume_location.relative_to(subvolume_location.anchor) - - if not target.exists(): - target.mkdir(parents=True) - - if glob.glob(str(target / '*')) and force is False: - raise DiskError(f"Cannot mount subvolume to {target} because it contains data (non-empty folder target)") - - log(f"Mounting {target} as a subvolume", level=logging.INFO) - # Mount the logical volume to the physical structure - mount_information, mountpoint_device_real_path = get_mount_info(target, traverse=True, return_real_path=True) - if mountpoint_device_real_path == str(target): - log(f"Unmounting non-subvolume {mount_information['source']} previously mounted at {target}") - SysCommand(f"umount {mount_information['source']}") - - return SysCommand(f"mount {mount_information['source']} {target} -o subvol=@{subvolume_location}").exit_code == 0 - -def create_subvolume(installation :Installer, subvolume_location :Union[pathlib.Path, str]) -> bool: - """ - This function uses btrfs to create a subvolume. - - @installation: archinstall.Installer instance - @subvolume_location: a localized string or path inside the installation / or /boot for instance without specifying /mnt/boot - """ - - installation_mountpoint = installation.target - if type(installation_mountpoint) == str: - installation_mountpoint = pathlib.Path(installation_mountpoint) - # Set up the required physical structure - if type(subvolume_location) == str: - subvolume_location = pathlib.Path(subvolume_location) - - target = installation_mountpoint / subvolume_location.relative_to(subvolume_location.anchor) - - # Difference from mount_subvolume: - # We only check if the parent exists, since we'll run in to "target path already exists" otherwise - if not target.parent.exists(): - target.parent.mkdir(parents=True) - - if glob.glob(str(target / '*')): - raise DiskError(f"Cannot create subvolume at {target} because it contains data (non-empty folder target)") - - # Remove the target if it exists - if target.exists(): - target.rmdir() - - log(f"Creating a subvolume on {target}", level=logging.INFO) - if (cmd := SysCommand(f"btrfs subvolume create {target}")).exit_code != 0: - raise DiskError(f"Could not create a subvolume at {target}: {cmd}") - -def _has_option(option :str,options :list) -> bool: - """ auxiliary routine to check if an option is present in a list. - we check if the string appears in one of the options, 'cause it can appear in severl forms (option, option=val,...) - """ - if not options: - return False - for item in options: - if option in item: - return True - return False - -def manage_btrfs_subvolumes(installation :Installer, - partition :Dict[str, str],) -> list: - from copy import deepcopy - """ we do the magic with subvolumes in a centralized place - parameters: - * the installation object - * the partition dictionary entry which represents the physical partition - returns - * mountpoinst, the list which contains all the "new" partititon to be mounted - - We expect the partition has been mounted as / , and it to be unmounted after the processing - Then we create all the subvolumes inside btrfs as demand - We clone then, both the partition dictionary and the object inside it and adapt it to the subvolume needs - Then we return a list of "new" partitions to be processed as "normal" partitions - # TODO For encrypted devices we need some special processing prior to it - """ - # We process each of the pairs - # th mount info dict has an entry for the path of the mountpoint (named 'mountpoint') and 'options' which is a list - # of mount options (or similar used by brtfs) - mountpoints = [] - subvolumes = partition['btrfs']['subvolumes'] - for name, right_hand in subvolumes.items(): - try: - # we normalize the subvolume name (getting rid of slash at the start if exists. In our implemenation has no semantic load - every subvolume is created from the top of the hierarchy- and simplifies its further use - if name.startswith('/'): - name = name[1:] - # renormalize the right hand. - location = None - subvol_options = [] - # no contents, so it is not to be mounted - if not right_hand: - location = None - # just a string. per backward compatibility the mount point - elif isinstance(right_hand,str): - location = right_hand - # a dict. two elements 'mountpoint' (obvious) and and a mount options list ¿? - elif isinstance(right_hand,dict): - location = right_hand.get('mountpoint',None) - subvol_options = right_hand.get('options',[]) - # we create the subvolume - create_subvolume(installation,name) - # Make the nodatacow processing now - # It will be the main cause of creation of subvolumes which are not to be mounted - # it is not an options which can be established by subvolume (but for whole file systems), and can be - # set up via a simple attribute change in a directory (if empty). And here the directories are brand new - if 'nodatacow' in subvol_options: - if (cmd := SysCommand(f"chattr +C {installation.target}/{name}")).exit_code != 0: - raise DiskError(f"Could not set nodatacow attribute at {installation.target}/{name}: {cmd}") - # entry is deleted so nodatacow doesn't propagate to the mount options - del subvol_options[subvol_options.index('nodatacow')] - # Make the compress processing now - # it is not an options which can be established by subvolume (but for whole file systems), and can be - # set up via a simple attribute change in a directory (if empty). And here the directories are brand new - # in this way only zstd compression is activaded - # TODO WARNING it is not clear if it should be a standard feature, so it might need to be deactivated - if 'compress' in subvol_options: - if not _has_option('compress',partition.get('filesystem',{}).get('mount_options',[])): - if (cmd := SysCommand(f"chattr +c {installation.target}/{name}")).exit_code != 0: - raise DiskError(f"Could not set compress attribute at {installation.target}/{name}: {cmd}") - # entry is deleted so compress doesn't propagate to the mount options - del subvol_options[subvol_options.index('compress')] - # END compress processing. - # we do not mount if THE basic partition will be mounted or if we exclude explicitly this subvolume - if not partition['mountpoint'] and location is not None: - # we begin to create a fake partition entry. First we copy the original -the one that corresponds to - # the primary partition. We make a deepcopy to avoid altering the original content in any case - fake_partition = deepcopy(partition) - # we start to modify entries in the "fake partition" to match the needs of the subvolumes - # to avoid any chance of entering in a loop (not expected) we delete the list of subvolumes in the copy - del fake_partition['btrfs'] - fake_partition['encrypted'] = False - fake_partition['generate-encryption-key-file'] = False - # Mount destination. As of now the right hand part - fake_partition['mountpoint'] = location - # we load the name in an attribute called subvolume, but i think it is not needed anymore, 'cause the mount logic uses a different path. - fake_partition['subvolume'] = name - # here we add the special mount options for the subvolume, if any. - # if the original partition['options'] is not a list might give trouble - if fake_partition.get('filesystem',{}).get('mount_options',[]): - fake_partition['filesystem']['mount_options'].extend(subvol_options) - else: - fake_partition['filesystem']['mount_options'] = subvol_options - # Here comes the most exotic part. The dictionary attribute 'device_instance' contains an instance of Partition. This instance will be queried along the mount process at the installer. - # As the rest will query there the path of the "partition" to be mounted, we feed it with the bind name needed to mount subvolumes - # As we made a deepcopy we have a fresh instance of this object we can manipulate problemless - fake_partition['device_instance'].path = f"{partition['device_instance'].path}[/{name}]" - - # Well, now that this "fake partition" is ready, we add it to the list of the ones which are to be mounted, - # as "normal" ones - mountpoints.append(fake_partition) - except Exception as e: - raise e - return mountpoints diff --git a/archinstall/lib/disk/btrfs/__init__.py b/archinstall/lib/disk/btrfs/__init__.py new file mode 100644 index 00000000..84b9c0f6 --- /dev/null +++ b/archinstall/lib/disk/btrfs/__init__.py @@ -0,0 +1,182 @@ +from __future__ import annotations +import pathlib +import glob +import logging +import re +from typing import Union, Dict, TYPE_CHECKING, Any, Iterator + +# https://stackoverflow.com/a/39757388/929999 +if TYPE_CHECKING: + from ...installer import Installer + +from .btrfs_helpers import ( + subvolume_info_from_path as subvolume_info_from_path, + find_parent_subvolume as find_parent_subvolume, + setup_subvolumes as setup_subvolumes, + mount_subvolume as mount_subvolume +) +from .btrfssubvolume import BtrfsSubvolume as BtrfsSubvolume +from .btrfspartition import BTRFSPartition as BTRFSPartition + +from ..helpers import get_mount_info +from ...exceptions import DiskError, Deprecated +from ...general import SysCommand +from ...output import log +from ...exceptions import SysCallError + +def get_subvolume_info(path :pathlib.Path) -> Dict[str, Any]: + try: + output = SysCommand(f"btrfs subvol show {path}").decode() + except SysCallError as error: + print('Error:', error) + + result = {} + for line in output.replace('\r\n', '\n').split('\n'): + if ':' in line: + key, val = line.replace('\t', '').split(':', 1) + result[key.strip().lower().replace(' ', '_')] = val.strip() + + return result + +def create_subvolume(installation :Installer, subvolume_location :Union[pathlib.Path, str]) -> bool: + """ + This function uses btrfs to create a subvolume. + + @installation: archinstall.Installer instance + @subvolume_location: a localized string or path inside the installation / or /boot for instance without specifying /mnt/boot + """ + + installation_mountpoint = installation.target + if type(installation_mountpoint) == str: + installation_mountpoint = pathlib.Path(installation_mountpoint) + # Set up the required physical structure + if type(subvolume_location) == str: + subvolume_location = pathlib.Path(subvolume_location) + + target = installation_mountpoint / subvolume_location.relative_to(subvolume_location.anchor) + + # Difference from mount_subvolume: + # We only check if the parent exists, since we'll run in to "target path already exists" otherwise + if not target.parent.exists(): + target.parent.mkdir(parents=True) + + if glob.glob(str(target / '*')): + raise DiskError(f"Cannot create subvolume at {target} because it contains data (non-empty folder target)") + + # Remove the target if it exists + if target.exists(): + target.rmdir() + + log(f"Creating a subvolume on {target}", level=logging.INFO) + if (cmd := SysCommand(f"btrfs subvolume create {target}")).exit_code != 0: + raise DiskError(f"Could not create a subvolume at {target}: {cmd}") + +def _has_option(option :str,options :list) -> bool: + """ auxiliary routine to check if an option is present in a list. + we check if the string appears in one of the options, 'cause it can appear in severl forms (option, option=val,...) + """ + if not options: + return False + + for item in options: + if option in item: + return True + + return False + +def manage_btrfs_subvolumes(installation :Installer, + partition :Dict[str, str],) -> list: + + raise Deprecated("Use setup_subvolumes() instead.") + + from copy import deepcopy + """ we do the magic with subvolumes in a centralized place + parameters: + * the installation object + * the partition dictionary entry which represents the physical partition + returns + * mountpoinst, the list which contains all the "new" partititon to be mounted + + We expect the partition has been mounted as / , and it to be unmounted after the processing + Then we create all the subvolumes inside btrfs as demand + We clone then, both the partition dictionary and the object inside it and adapt it to the subvolume needs + Then we return a list of "new" partitions to be processed as "normal" partitions + # TODO For encrypted devices we need some special processing prior to it + """ + # We process each of the pairs + # th mount info dict has an entry for the path of the mountpoint (named 'mountpoint') and 'options' which is a list + # of mount options (or similar used by brtfs) + mountpoints = [] + subvolumes = partition['btrfs']['subvolumes'] + for name, right_hand in subvolumes.items(): + try: + # we normalize the subvolume name (getting rid of slash at the start if exists. In our implemenation has no semantic load - every subvolume is created from the top of the hierarchy- and simplifies its further use + if name.startswith('/'): + name = name[1:] + # renormalize the right hand. + location = None + subvol_options = [] + # no contents, so it is not to be mounted + if not right_hand: + location = None + # just a string. per backward compatibility the mount point + elif isinstance(right_hand,str): + location = right_hand + # a dict. two elements 'mountpoint' (obvious) and and a mount options list ¿? + elif isinstance(right_hand,dict): + location = right_hand.get('mountpoint',None) + subvol_options = right_hand.get('options',[]) + # we create the subvolume + create_subvolume(installation,name) + # Make the nodatacow processing now + # It will be the main cause of creation of subvolumes which are not to be mounted + # it is not an options which can be established by subvolume (but for whole file systems), and can be + # set up via a simple attribute change in a directory (if empty). And here the directories are brand new + if 'nodatacow' in subvol_options: + if (cmd := SysCommand(f"chattr +C {installation.target}/{name}")).exit_code != 0: + raise DiskError(f"Could not set nodatacow attribute at {installation.target}/{name}: {cmd}") + # entry is deleted so nodatacow doesn't propagate to the mount options + del subvol_options[subvol_options.index('nodatacow')] + # Make the compress processing now + # it is not an options which can be established by subvolume (but for whole file systems), and can be + # set up via a simple attribute change in a directory (if empty). And here the directories are brand new + # in this way only zstd compression is activaded + # TODO WARNING it is not clear if it should be a standard feature, so it might need to be deactivated + if 'compress' in subvol_options: + if not _has_option('compress',partition.get('filesystem',{}).get('mount_options',[])): + if (cmd := SysCommand(f"chattr +c {installation.target}/{name}")).exit_code != 0: + raise DiskError(f"Could not set compress attribute at {installation.target}/{name}: {cmd}") + # entry is deleted so compress doesn't propagate to the mount options + del subvol_options[subvol_options.index('compress')] + # END compress processing. + # we do not mount if THE basic partition will be mounted or if we exclude explicitly this subvolume + if not partition['mountpoint'] and location is not None: + # we begin to create a fake partition entry. First we copy the original -the one that corresponds to + # the primary partition. We make a deepcopy to avoid altering the original content in any case + fake_partition = deepcopy(partition) + # we start to modify entries in the "fake partition" to match the needs of the subvolumes + # to avoid any chance of entering in a loop (not expected) we delete the list of subvolumes in the copy + del fake_partition['btrfs'] + fake_partition['encrypted'] = False + fake_partition['generate-encryption-key-file'] = False + # Mount destination. As of now the right hand part + fake_partition['mountpoint'] = location + # we load the name in an attribute called subvolume, but i think it is not needed anymore, 'cause the mount logic uses a different path. + fake_partition['subvolume'] = name + # here we add the special mount options for the subvolume, if any. + # if the original partition['options'] is not a list might give trouble + if fake_partition.get('filesystem',{}).get('mount_options',[]): + fake_partition['filesystem']['mount_options'].extend(subvol_options) + else: + fake_partition['filesystem']['mount_options'] = subvol_options + # Here comes the most exotic part. The dictionary attribute 'device_instance' contains an instance of Partition. This instance will be queried along the mount process at the installer. + # As the rest will query there the path of the "partition" to be mounted, we feed it with the bind name needed to mount subvolumes + # As we made a deepcopy we have a fresh instance of this object we can manipulate problemless + fake_partition['device_instance'].path = f"{partition['device_instance'].path}[/{name}]" + + # Well, now that this "fake partition" is ready, we add it to the list of the ones which are to be mounted, + # as "normal" ones + mountpoints.append(fake_partition) + except Exception as e: + raise e + return mountpoints diff --git a/archinstall/lib/disk/btrfs/btrfs_helpers.py b/archinstall/lib/disk/btrfs/btrfs_helpers.py new file mode 100644 index 00000000..d529478f --- /dev/null +++ b/archinstall/lib/disk/btrfs/btrfs_helpers.py @@ -0,0 +1,132 @@ +import pathlib +import logging +from typing import Optional + +from ...exceptions import SysCallError, DiskError +from ...general import SysCommand +from ...output import log +from ..helpers import get_mount_info +from .btrfssubvolume import BtrfsSubvolume + + +def mount_subvolume(installation, device, name, subvolume_information): + # we normalize the subvolume name (getting rid of slash at the start if exists. In our implemenation has no semantic load. + # Every subvolume is created from the top of the hierarchy- and simplifies its further use + name = name.lstrip('/') + + # renormalize the right hand. + mountpoint = subvolume_information.get('mountpoint', None) + if not mountpoint: + return None + + if type(mountpoint) == str: + mountpoint = pathlib.Path(mountpoint) + + installation_target = installation.target + if type(installation_target) == str: + installation_target = pathlib.Path(installation_target) + + mountpoint = installation_target / mountpoint.relative_to(mountpoint.anchor) + mountpoint.mkdir(parents=True, exist_ok=True) + + mount_options = subvolume_information.get('options', []) + if not any('subvol=' in x for x in mount_options): + mount_options += [f'subvol={name}'] + + log(f"Mounting subvolume {name} on {device} to {mountpoint}", level=logging.INFO, fg="gray") + SysCommand(f"mount {device.path} {mountpoint} -o {','.join(mount_options)}") + + +def setup_subvolumes(installation, partition_dict): + """ + Taken from: ..user_guides.py + + partition['btrfs'] = { + "subvolumes" : { + "@": "/", + "@home": "/home", + "@log": "/var/log", + "@pkg": "/var/cache/pacman/pkg", + "@.snapshots": "/.snapshots" + } + } + """ + log(f"Setting up subvolumes: {partition_dict['btrfs']['subvolumes']}", level=logging.INFO, fg="gray") + for name, right_hand in partition_dict['btrfs']['subvolumes'].items(): + # we normalize the subvolume name (getting rid of slash at the start if exists. In our implemenation has no semantic load. + # Every subvolume is created from the top of the hierarchy- and simplifies its further use + name = name.lstrip('/') + + # renormalize the right hand. + # mountpoint = None + subvol_options = [] + + match right_hand: + # case str(): # backwards-compatability + # mountpoint = right_hand + case dict(): + # mountpoint = right_hand.get('mountpoint', None) + subvol_options = right_hand.get('options', []) + + # We create the subvolume using the BTRFSPartition instance. + # That way we ensure not only easy access, but also accurate mount locations etc. + partition_dict['device_instance'].create_subvolume(name, installation=installation) + + # Make the nodatacow processing now + # It will be the main cause of creation of subvolumes which are not to be mounted + # it is not an options which can be established by subvolume (but for whole file systems), and can be + # set up via a simple attribute change in a directory (if empty). And here the directories are brand new + if 'nodatacow' in subvol_options: + if (cmd := SysCommand(f"chattr +C {installation.target}/{name}")).exit_code != 0: + raise DiskError(f"Could not set nodatacow attribute at {installation.target}/{name}: {cmd}") + # entry is deleted so nodatacow doesn't propagate to the mount options + del subvol_options[subvol_options.index('nodatacow')] + # Make the compress processing now + # it is not an options which can be established by subvolume (but for whole file systems), and can be + # set up via a simple attribute change in a directory (if empty). And here the directories are brand new + # in this way only zstd compression is activaded + # TODO WARNING it is not clear if it should be a standard feature, so it might need to be deactivated + + if 'compress' in subvol_options: + if not any(['compress' in filesystem_option for filesystem_option in partition_dict.get('filesystem', {}).get('mount_options', [])]): + if (cmd := SysCommand(f"chattr +c {installation.target}/{name}")).exit_code != 0: + raise DiskError(f"Could not set compress attribute at {installation.target}/{name}: {cmd}") + # entry is deleted so compress doesn't propagate to the mount options + del subvol_options[subvol_options.index('compress')] + +def subvolume_info_from_path(path :pathlib.Path) -> Optional[BtrfsSubvolume]: + try: + subvolume_name = None + result = {} + for index, line in enumerate(SysCommand(f"btrfs subvolume show {path}")): + if index == 0: + subvolume_name = line.strip().decode('UTF-8') + continue + + if b':' in line: + key, value = line.strip().decode('UTF-8').split(':', 1) + + # A bit of a hack, until I figure out how @dataclass + # allows for hooking in a pre-processor to do this we have to do it here: + result[key.lower().replace(' ', '_').replace('(s)', 's')] = value.strip() + + return BtrfsSubvolume(**{'full_path' : path, 'name' : subvolume_name, **result}) + + except SysCallError: + pass + + return None + +def find_parent_subvolume(path :pathlib.Path, filters=[]): + # A root path cannot have a parent + if str(path) == '/': + return None + + if found_mount := get_mount_info(str(path.parent), traverse=True, ignore=filters): + if not (subvolume := subvolume_info_from_path(found_mount['target'])): + if found_mount['target'] == '/': + return None + + return find_parent_subvolume(path.parent, traverse=True, filters=[*filters, found_mount['target']]) + + return subvolume \ No newline at end of file diff --git a/archinstall/lib/disk/btrfs/btrfspartition.py b/archinstall/lib/disk/btrfs/btrfspartition.py new file mode 100644 index 00000000..5020133d --- /dev/null +++ b/archinstall/lib/disk/btrfs/btrfspartition.py @@ -0,0 +1,116 @@ +import glob +import pathlib +import logging +from typing import Optional, TYPE_CHECKING + +from ...exceptions import DiskError +from ...storage import storage +from ...output import log +from ...general import SysCommand +from ..partition import Partition +from ..helpers import findmnt +from .btrfs_helpers import ( + subvolume_info_from_path +) + +if TYPE_CHECKING: + from ...installer import Installer + from .btrfssubvolume import BtrfsSubvolume + +class BTRFSPartition(Partition): + def __init__(self, *args, **kwargs): + Partition.__init__(self, *args, **kwargs) + + def __repr__(self, *args :str, **kwargs :str) -> str: + mount_repr = '' + if self.mountpoint: + mount_repr = f", mounted={self.mountpoint}" + elif self.target_mountpoint: + mount_repr = f", rel_mountpoint={self.target_mountpoint}" + + if self._encrypted: + return f'BTRFSPartition(path={self.path}, size={self.size}, PARTUUID={self._safe_uuid}, parent={self.real_device}, fs={self.filesystem}{mount_repr})' + else: + return f'BTRFSPartition(path={self.path}, size={self.size}, PARTUUID={self._safe_uuid}, fs={self.filesystem}{mount_repr})' + + @property + def subvolumes(self): + for filesystem in findmnt(pathlib.Path(self.path), recurse=True).get('filesystems', []): + if '[' in filesystem.get('source', ''): + yield subvolume_info_from_path(filesystem['target']) + + def iterate_children(struct): + for child in struct.get('children', []): + if '[' in child.get('source', ''): + yield subvolume_info_from_path(child['target']) + + for sub_child in iterate_children(child): + yield sub_child + + for child in iterate_children(filesystem): + yield child + + def create_subvolume(self, subvolume :pathlib.Path, installation :Optional['Installer'] = None) -> 'BtrfsSubvolume': + """ + Subvolumes have to be created within a mountpoint. + This means we need to get the current installation target. + After we get it, we need to verify it is a btrfs subvolume filesystem. + Finally, the destination must be empty. + """ + + # Allow users to override the installation session + if not installation: + installation = storage.get('installation_session') + + # Determain if the path given, is an absolute path or a releative path. + # We do this by checking if the path contains a known mountpoint. + if str(subvolume)[0] == '/': + if filesystems := findmnt(subvolume, traverse=True).get('filesystems'): + if (target := filesystems[0].get('target')) and target != '/' and str(subvolume).startswith(target): + # Path starts with a known mountpoint which isn't / + # Which means it's an absolut path to a mounted location. + pass + else: + # Since it's not an absolute position with a known start. + # We omit the anchor ('/' basically) and make sure it's appendable + # to the installation.target later + subvolume = subvolume.relative_to(subvolume.anchor) + # else: We don't need to do anything about relative paths, they should be appendable to installation.target as-is. + + # If the subvolume is not absolute, then we do two checks: + # 1. Check if the partition itself is mounted somewhere, and use that as a root + # 2. Use an active Installer().target as the root, assuming it's filesystem is btrfs + # If both above fail, we need to warn the user that such setup is not supported. + if str(subvolume)[0] != '/': + if self.mountpoint is None and installation is None: + raise DiskError("When creating a subvolume on BTRFSPartition()'s, you need to either initiate a archinstall.Installer() or give absolute paths when creating the subvoulme.") + elif self.mountpoint: + subvolume = self.mountpoint / subvolume + elif installation: + ongoing_installation_destination = installation.target + if type(ongoing_installation_destination) == str: + ongoing_installation_destination = pathlib.Path(ongoing_installation_destination) + + subvolume = ongoing_installation_destination / subvolume + + subvolume.parent.mkdir(parents=True, exist_ok=True) + + # + + log(f'Attempting to create subvolume at {subvolume}', level=logging.DEBUG, fg="grey") + + if glob.glob(str(subvolume / '*')): + raise DiskError(f"Cannot create subvolume at {subvolume} because it contains data (non-empty folder target is not supported by BTRFS)") + elif subvolinfo := subvolume_info_from_path(subvolume): + raise DiskError(f"Destination {subvolume} is already a subvolume: {subvolinfo}") + + SysCommand(f"btrfs subvolume create {subvolume}") + + return subvolume_info_from_path(subvolume) \ No newline at end of file diff --git a/archinstall/lib/disk/btrfs/btrfssubvolume.py b/archinstall/lib/disk/btrfs/btrfssubvolume.py new file mode 100644 index 00000000..a96e2a94 --- /dev/null +++ b/archinstall/lib/disk/btrfs/btrfssubvolume.py @@ -0,0 +1,191 @@ +import pathlib +import datetime +import logging +import string +import random +import shutil +from dataclasses import dataclass +from typing import Optional, List# , TYPE_CHECKING +from functools import cached_property + +# if TYPE_CHECKING: +# from ..blockdevice import BlockDevice + +from ...exceptions import DiskError +from ...general import SysCommand +from ...output import log +from ...storage import storage + +@dataclass +class BtrfsSubvolume: + full_path :pathlib.Path + name :str + uuid :str + parent_uuid :str + creation_time :datetime.datetime + subvolume_id :int + generation :int + gen_at_creation :int + parent_id :int + top_level_id :int + send_transid :int + send_time :datetime.datetime + receive_transid :int + received_uuid :Optional[str] = None + flags :Optional[str] = None + receive_time :Optional[datetime.datetime] = None + snapshots :Optional[List] = None + + def __post_init__(self): + self.full_path = pathlib.Path(self.full_path) + + # Convert "-" entries to `None` + if self.parent_uuid == "-": + self.parent_uuid = None + if self.received_uuid == "-": + self.received_uuid = None + if self.flags == "-": + self.flags = None + if self.receive_time == "-": + self.receive_time = None + if self.snapshots == "": + self.snapshots = [] + + # Convert timestamps into datetime workable objects (and preserve timezone by using ISO formats) + self.creation_time = datetime.datetime.fromisoformat(self.convert_to_ISO_format(self.creation_time)) + self.send_time = datetime.datetime.fromisoformat(self.convert_to_ISO_format(self.send_time)) + if self.receive_time: + self.receive_time = datetime.datetime.fromisoformat(self.convert_to_ISO_format(self.receive_time)) + + @property + def parent_subvolume(self): + from .btrfs_helpers import find_parent_subvolume + + return find_parent_subvolume(self.full_path) + + @property + def root(self) -> bool: + from .btrfs_helpers import subvolume_info_from_path + + # TODO: Make this function traverse storage['MOUNT_POINT'] and find the first + # occurance of a mountpoint that is a btrfs volume instead of lazy assume / is a subvolume. + # It would also be nice if it could use findmnt(self.full_path) and traverse backwards + # finding the last occurance of a subvolume which 'self' belongs to. + if volume := subvolume_info_from_path(storage['MOUNT_POINT']): + return self.full_path == volume.full_path + + return False + + @cached_property + def partition(self): + from ..helpers import findmnt, get_parent_of_partition, all_blockdevices + from ..partition import Partition + from ..blockdevice import BlockDevice + from ..mapperdev import MapperDev + from .btrfspartition import BTRFSPartition + from .btrfs_helpers import subvolume_info_from_path + + try: + # If the subvolume is mounted, it's pretty trivial to lookup the partition (parent) device. + if filesystem := findmnt(self.full_path).get('filesystems', []): + if source := filesystem[0].get('source', None): + # Strip away subvolume definitions from findmnt + if '[' in source: + source = source[:source.find('[')] + + if filesystem[0].get('fstype', '') == 'btrfs': + return BTRFSPartition(source, BlockDevice(get_parent_of_partition(pathlib.Path(source)))) + elif filesystem[0].get('source', '').startswith('/dev/mapper'): + return MapperDev(source) + else: + return Partition(source, BlockDevice(get_parent_of_partition(pathlib.Path(source)))) + except DiskError: + # Subvolume has never been mounted, we have no reliable way of finding where it is. + # But we have the UUID of the partition, and can begin looking for it by mounting + # all blockdevices that we can reliably support.. This is taxing tho and won't cover all devices. + + log(f"Looking up {self}, this might take time.", fg="orange", level=logging.WARNING) + for blockdevice, instance in all_blockdevices(mappers=True, partitions=True, error=True).items(): + if type(instance) in (Partition, MapperDev): + we_mounted_it = False + detection_mountpoint = instance.mountpoint + if not detection_mountpoint: + if type(instance) == Partition and instance.encrypted: + # TODO: Perhaps support unlocking encrypted volumes? + # This will cause a lot of potential user interactions tho. + log(f"Ignoring {blockdevice} because it's encrypted.", fg="gray", level=logging.DEBUG) + continue + + detection_mountpoint = pathlib.Path(f"/tmp/{''.join([random.choice(string.ascii_letters) for x in range(20)])}") + detection_mountpoint.mkdir(parents=True, exist_ok=True) + + instance.mount(str(detection_mountpoint)) + we_mounted_it = True + + if (filesystem := findmnt(detection_mountpoint)) and (filesystem := filesystem.get('filesystems', [])): + if subvolume := subvolume_info_from_path(filesystem[0]['target']): + if subvolume.uuid == self.uuid: + # The top level subvolume matched of ourselves, + # which means the instance we're iterating has the subvol we're looking for. + log(f"Found the subvolume on device {instance}", level=logging.DEBUG, fg="gray") + return instance + + def iterate_children(struct): + for child in struct.get('children', []): + if '[' in child.get('source', ''): + yield subvolume_info_from_path(child['target']) + + for sub_child in iterate_children(child): + yield sub_child + + for child in iterate_children(filesystem[0]): + if child.uuid == self.uuid: + # We found a child within the instance that has the subvol we're looking for. + log(f"Found the subvolume on device {instance}", level=logging.DEBUG, fg="gray") + return instance + + if we_mounted_it: + instance.unmount() + shutil.rmtree(detection_mountpoint) + + @cached_property + def mount_options(self) -> Optional[List[str]]: + from ..helpers import findmnt + + if filesystem := findmnt(self.full_path).get('filesystems', []): + return filesystem[0].get('options').split(',') + + def convert_to_ISO_format(self, time_string): + time_string_almost_done = time_string.replace(' ', 'T', 1).replace(' ', '') + iso_string = f"{time_string_almost_done[:-2]}:{time_string_almost_done[-2:]}" + return iso_string + + def mount(self, mountpoint :pathlib.Path, options=None, include_previously_known_options=True): + from ..helpers import findmnt + + try: + if mnt_info := findmnt(pathlib.Path(mountpoint), traverse=False): + log(f"Unmounting {mountpoint} as it was already mounted using {mnt_info}") + SysCommand(f"umount {mountpoint}") + except DiskError: + # No previously mounted device at the mountpoint + pass + + if not options: + options = [] + + try: + if include_previously_known_options and (cached_options := self.mount_options): + options += cached_options + except DiskError: + pass + + if not any('subvol=' in x for x in options): + options += f'subvol={self.name}' + + SysCommand(f"mount {self.partition.path} {mountpoint} -o {','.join(options)}") + log(f"{self} has successfully been mounted to {mountpoint}", level=logging.INFO, fg="gray") + + def unmount(self, recurse :bool = True): + SysCommand(f"umount {'-R' if recurse else ''} {self.full_path}") + log(f"Successfully unmounted {self}", level=logging.INFO, fg="gray") \ No newline at end of file diff --git a/archinstall/lib/disk/filesystem.py b/archinstall/lib/disk/filesystem.py index 31929b63..8d8f596e 100644 --- a/archinstall/lib/disk/filesystem.py +++ b/archinstall/lib/disk/filesystem.py @@ -65,6 +65,7 @@ class Filesystem: def load_layout(self, layout :Dict[str, Any]) -> None: from ..luks import luks2 + from .btrfs import BTRFSPartition # If the layout tells us to wipe the drive, we do so if layout.get('wipe', False): @@ -142,12 +143,24 @@ class Filesystem: break unlocked_device.format(partition['filesystem']['format'], options=format_options) + elif partition.get('wipe', False): if not partition['device_instance']: raise DiskError(f"Internal error caused us to loose the partition. Please report this issue upstream!") partition['device_instance'].format(partition['filesystem']['format'], options=format_options) + if partition['filesystem']['format'] == 'btrfs': + # We upgrade the device instance to a BTRFSPartition if we format it as such. + # This is so that we can gain access to more features than otherwise available in Partition() + partition['device_instance'] = BTRFSPartition( + partition['device_instance'].path, + block_device=partition['device_instance'].block_device, + encrypted=False, + filesystem='btrfs', + autodetect_filesystem=False + ) + if partition.get('boot', False): log(f"Marking partition {partition['device_instance']} as bootable.") self.set(self.partuuid_to_index(partition['device_instance'].part_uuid), 'boot on') diff --git a/archinstall/lib/disk/helpers.py b/archinstall/lib/disk/helpers.py index 0799cd49..99856aad 100644 --- a/archinstall/lib/disk/helpers.py +++ b/archinstall/lib/disk/helpers.py @@ -291,11 +291,37 @@ def find_mountpoint(device_path :str) -> Dict[str, Any]: except SysCallError: return {} -def get_mount_info(path :Union[pathlib.Path, str], traverse :bool = False, return_real_path :bool = False) -> Dict[str, Any]: +def findmnt(path :pathlib.Path, traverse :bool = False, ignore :List = [], recurse :bool = True) -> Dict[str, Any]: + for traversal in list(map(str, [str(path)] + list(path.parents))): + if traversal in ignore: + continue + + try: + log(f"Getting mount information for device path {traversal}", level=logging.DEBUG) + if (output := SysCommand(f"/usr/bin/findmnt --json {'--submounts' if recurse else ''} {traversal}").decode('UTF-8')): + return json.loads(output) + + except SysCallError as error: + log(f"Could not get mount information on {path} but continuing and ignoring: {error}", level=logging.INFO, fg="gray") + pass + + if not traverse: + break + + raise DiskError(f"Could not get mount information for path {path}") + + +def get_mount_info(path :Union[pathlib.Path, str], traverse :bool = False, return_real_path :bool = False, ignore :List = []) -> Dict[str, Any]: + import traceback + + log(f"Deprecated: archinstall.get_mount_info(). Use archinstall.findmnt() instead, which does not do any automatic parsing. Please change at:\n{''.join(traceback.format_stack())}") device_path, bind_path = split_bind_name(path) output = {} for traversal in list(map(str, [str(device_path)] + list(pathlib.Path(str(device_path)).parents))): + if traversal in ignore: + continue + try: log(f"Getting mount information for device path {traversal}", level=logging.DEBUG) if (output := SysCommand(f'/usr/bin/findmnt --json {traversal}').decode('UTF-8')): @@ -385,9 +411,8 @@ def get_partitions_in_use(mountpoint :str) -> List[Partition]: def get_filesystem_type(path :str) -> Optional[str]: - device_name, bind_name = split_bind_name(path) try: - return SysCommand(f"blkid -o value -s TYPE {device_name}").decode('UTF-8').strip() + return SysCommand(f"blkid -o value -s TYPE {path}").decode('UTF-8').strip() except SysCallError: return None diff --git a/archinstall/lib/disk/mapperdev.py b/archinstall/lib/disk/mapperdev.py index 32e3ac9b..67230012 100644 --- a/archinstall/lib/disk/mapperdev.py +++ b/archinstall/lib/disk/mapperdev.py @@ -51,11 +51,11 @@ class MapperDev: raise ValueError(f"Could not convert {self.mappername} to a real dm-crypt device") @property - def mountpoint(self) -> Optional[str]: + def mountpoint(self) -> Optional[pathlib.Path]: try: data = json.loads(SysCommand(f"findmnt --json -R {self.path}").decode()) for filesystem in data['filesystems']: - return filesystem.get('target') + return pathlib.Path(filesystem.get('target')) except SysCallError as error: # Not mounted anywhere most likely @@ -76,8 +76,8 @@ class MapperDev: @property def subvolumes(self) -> Iterator['BtrfsSubvolume']: - from .btrfs import get_subvolumes_from_findmnt + from .btrfs import subvolume_info_from_path for mountpoint in self.mount_information: - for result in get_subvolumes_from_findmnt(mountpoint): - yield result \ No newline at end of file + if subvolume := subvolume_info_from_path(mountpoint): + yield subvolume \ No newline at end of file diff --git a/archinstall/lib/disk/partition.py b/archinstall/lib/disk/partition.py index c52ca434..e33c600c 100644 --- a/archinstall/lib/disk/partition.py +++ b/archinstall/lib/disk/partition.py @@ -13,7 +13,8 @@ from ..storage import storage from ..exceptions import DiskError, SysCallError, UnknownFilesystemFormat from ..output import log from ..general import SysCommand -from .btrfs import get_subvolumes_from_findmnt, BtrfsSubvolume +from .btrfs.btrfs_helpers import subvolume_info_from_path +from .btrfs.btrfssubvolume import BtrfsSubvolume class Partition: def __init__(self, @@ -96,7 +97,7 @@ class Partition: try: data = json.loads(SysCommand(f"findmnt --json -R {self.path}").decode()) for filesystem in data['filesystems']: - return filesystem.get('target') + return pathlib.Path(filesystem.get('target')) except SysCallError as error: # Not mounted anywhere most likely @@ -304,9 +305,26 @@ class Partition: @property def subvolumes(self) -> Iterator[BtrfsSubvolume]: + from .helpers import findmnt + + def iterate_children_recursively(information): + for child in information.get('children', []): + if target := child.get('target'): + if subvolume := subvolume_info_from_path(pathlib.Path(target)): + yield subvolume + + if child.get('children'): + for subchild in iterate_children_recursively(child): + yield subchild + for mountpoint in self.mount_information: - for result in get_subvolumes_from_findmnt(mountpoint): - yield result + if result := findmnt(pathlib.Path(mountpoint['target'])): + for filesystem in result.get('filesystems', []): + if subvolume := subvolume_info_from_path(pathlib.Path(mountpoint['target'])): + yield subvolume + + for child in iterate_children_recursively(filesystem): + yield child def partprobe(self) -> bool: try: @@ -357,7 +375,7 @@ class Partition: handle = luks2(self, None, None) return handle.encrypt(self, *args, **kwargs) - def format(self, filesystem :Optional[str] = None, path :Optional[str] = None, log_formatting :bool = True, options :List[str] = []) -> bool: + def format(self, filesystem :Optional[str] = None, path :Optional[str] = None, log_formatting :bool = True, options :List[str] = [], retry :bool = True) -> bool: """ Format can be given an overriding path, for instance /dev/null to test the formatting functionality and in essence the support for the given filesystem. @@ -379,63 +397,71 @@ class Partition: if log_formatting: log(f'Formatting {path} -> {filesystem}', level=logging.INFO) - if filesystem == 'btrfs': - options = ['-f'] + options + try: + if filesystem == 'btrfs': + options = ['-f'] + options - if 'UUID:' not in (mkfs := SysCommand(f"/usr/bin/mkfs.btrfs {' '.join(options)} {path}").decode('UTF-8')): - raise DiskError(f'Could not format {path} with {filesystem} because: {mkfs}') - self.filesystem = filesystem + if 'UUID:' not in (mkfs := SysCommand(f"/usr/bin/mkfs.btrfs {' '.join(options)} {path}").decode('UTF-8')): + raise DiskError(f'Could not format {path} with {filesystem} because: {mkfs}') + self.filesystem = filesystem - elif filesystem == 'vfat': - options = ['-F32'] + options + elif filesystem == 'vfat': + options = ['-F32'] + options - if (handle := SysCommand(f"/usr/bin/mkfs.vfat {' '.join(options)} {path}")).exit_code != 0: - raise DiskError(f"Could not format {path} with {filesystem} because: {handle.decode('UTF-8')}") - self.filesystem = filesystem + if (handle := SysCommand(f"/usr/bin/mkfs.vfat {' '.join(options)} {path}")).exit_code != 0: + raise DiskError(f"Could not format {path} with {filesystem} because: {handle.decode('UTF-8')}") + self.filesystem = filesystem - elif filesystem == 'ext4': - options = ['-F'] + options + elif filesystem == 'ext4': + options = ['-F'] + options - if (handle := SysCommand(f"/usr/bin/mkfs.ext4 {' '.join(options)} {path}")).exit_code != 0: - raise DiskError(f"Could not format {path} with {filesystem} because: {handle.decode('UTF-8')}") - self.filesystem = filesystem + if (handle := SysCommand(f"/usr/bin/mkfs.ext4 {' '.join(options)} {path}")).exit_code != 0: + raise DiskError(f"Could not format {path} with {filesystem} because: {handle.decode('UTF-8')}") + self.filesystem = filesystem - elif filesystem == 'ext2': - options = ['-F'] + options + elif filesystem == 'ext2': + options = ['-F'] + options - if (handle := SysCommand(f"/usr/bin/mkfs.ext2 {' '.join(options)} {path}")).exit_code != 0: - raise DiskError(f'Could not format {path} with {filesystem} because: {b"".join(handle)}') - self.filesystem = 'ext2' + if (handle := SysCommand(f"/usr/bin/mkfs.ext2 {' '.join(options)} {path}")).exit_code != 0: + raise DiskError(f'Could not format {path} with {filesystem} because: {b"".join(handle)}') + self.filesystem = 'ext2' - elif filesystem == 'xfs': - options = ['-f'] + options + elif filesystem == 'xfs': + options = ['-f'] + options - if (handle := SysCommand(f"/usr/bin/mkfs.xfs {' '.join(options)} {path}")).exit_code != 0: - raise DiskError(f"Could not format {path} with {filesystem} because: {handle.decode('UTF-8')}") - self.filesystem = filesystem + if (handle := SysCommand(f"/usr/bin/mkfs.xfs {' '.join(options)} {path}")).exit_code != 0: + raise DiskError(f"Could not format {path} with {filesystem} because: {handle.decode('UTF-8')}") + self.filesystem = filesystem - elif filesystem == 'f2fs': - options = ['-f'] + options + elif filesystem == 'f2fs': + options = ['-f'] + options - if (handle := SysCommand(f"/usr/bin/mkfs.f2fs {' '.join(options)} {path}")).exit_code != 0: - raise DiskError(f"Could not format {path} with {filesystem} because: {handle.decode('UTF-8')}") - self.filesystem = filesystem + if (handle := SysCommand(f"/usr/bin/mkfs.f2fs {' '.join(options)} {path}")).exit_code != 0: + raise DiskError(f"Could not format {path} with {filesystem} because: {handle.decode('UTF-8')}") + self.filesystem = filesystem - elif filesystem == 'ntfs3': - options = ['-f'] + options + elif filesystem == 'ntfs3': + options = ['-f'] + options - if (handle := SysCommand(f"/usr/bin/mkfs.ntfs -Q {' '.join(options)} {path}")).exit_code != 0: - raise DiskError(f"Could not format {path} with {filesystem} because: {handle.decode('UTF-8')}") - self.filesystem = filesystem + if (handle := SysCommand(f"/usr/bin/mkfs.ntfs -Q {' '.join(options)} {path}")).exit_code != 0: + raise DiskError(f"Could not format {path} with {filesystem} because: {handle.decode('UTF-8')}") + self.filesystem = filesystem - elif filesystem == 'crypto_LUKS': - # from ..luks import luks2 - # encrypted_partition = luks2(self, None, None) - # encrypted_partition.format(path) - self.filesystem = filesystem + elif filesystem == 'crypto_LUKS': + # from ..luks import luks2 + # encrypted_partition = luks2(self, None, None) + # encrypted_partition.format(path) + self.filesystem = filesystem - else: - raise UnknownFilesystemFormat(f"Fileformat '{filesystem}' is not yet implemented.") + else: + raise UnknownFilesystemFormat(f"Fileformat '{filesystem}' is not yet implemented.") + except SysCallError as error: + log(f"Formatting ran in to an error: {error}", level=logging.WARNING, fg="orange") + if retry is True: + log(f"Retrying in {storage.get('DISK_TIMEOUTS', 1)} seconds.", level=logging.WARNING, fg="orange") + time.sleep(storage.get('DISK_TIMEOUTS', 1)) + + return self.format(filesystem, path, log_formatting, options, retry=False) if get_filesystem_type(path) == 'crypto_LUKS' or get_filesystem_type(self.real_device) == 'crypto_LUKS': self.encrypted = True diff --git a/archinstall/lib/exceptions.py b/archinstall/lib/exceptions.py index f6f58151..a16faa3f 100644 --- a/archinstall/lib/exceptions.py +++ b/archinstall/lib/exceptions.py @@ -48,4 +48,8 @@ class PackageError(BaseException): class TranslationError(BaseException): + pass + + +class Deprecated(BaseException): pass \ No newline at end of file diff --git a/archinstall/lib/general.py b/archinstall/lib/general.py index 44b78777..b99e4a45 100644 --- a/archinstall/lib/general.py +++ b/archinstall/lib/general.py @@ -363,7 +363,7 @@ class SysCommandWorker: try: try: with open(f"{storage['LOG_PATH']}/cmd_history.txt", "a") as cmd_log: - cmd_log.write(f"{' '.join(self.cmd)}\n") + cmd_log.write(f"{self.cmd}\n") except PermissionError: pass diff --git a/archinstall/lib/installer.py b/archinstall/lib/installer.py index e3bd16d3..3e04de59 100644 --- a/archinstall/lib/installer.py +++ b/archinstall/lib/installer.py @@ -20,7 +20,6 @@ from .storage import storage # from .user_interaction import * from .output import log from .profiles import Profile -from .disk.btrfs import manage_btrfs_subvolumes from .disk.partition import get_mount_fs_type from .exceptions import DiskError, ServiceException, RequirementError, HardwareIncompatibilityError, SysCallError from .hsm import fido2_enroll @@ -233,12 +232,17 @@ class Installer: def mount_ordered_layout(self, layouts: Dict[str, Any]) -> None: from .luks import luks2 + from .disk.btrfs import setup_subvolumes, mount_subvolume + # set the partitions as a list not part of a tree (which we don't need anymore (i think) list_part = [] list_luks_handles = [] for blockdevice in layouts: list_part.extend(layouts[blockdevice]['partitions']) + # TODO: Implement a proper mount-queue system that does not depend on return values. + mount_queue = {} + # we manage the encrypted partititons for partition in [entry for entry in list_part if entry.get('encrypted', False)]: # open the luks device and all associate stuff @@ -260,32 +264,61 @@ class Installer: fido2_enroll(hsm_device_path, partition['device_instance'], password) # we manage the btrfs partitions - for partition in [entry for entry in list_part if entry.get('btrfs', {}).get('subvolumes', {})]: - if partition.get('filesystem',{}).get('mount_options',[]): - mount_options = ','.join(partition['filesystem']['mount_options']) - self.mount(partition['device_instance'], "/", options=mount_options) - else: - self.mount(partition['device_instance'], "/") - try: - new_mountpoints = manage_btrfs_subvolumes(self,partition) - except Exception as e: - # every exception unmounts the physical volume. Otherwise we let the system in an unstable state + if any(btrfs_subvolumes := [entry for entry in list_part if entry.get('btrfs', {}).get('subvolumes', {})]): + for partition in btrfs_subvolumes: + if mount_options := ','.join(partition.get('filesystem',{}).get('mount_options',[])): + self.mount(partition['device_instance'], "/", options=mount_options) + else: + self.mount(partition['device_instance'], "/") + + setup_subvolumes( + installation=self, + partition_dict=partition + ) + partition['device_instance'].unmount() - raise e - partition['device_instance'].unmount() - if new_mountpoints: - list_part.extend(new_mountpoints) - # we mount. We need to sort by mountpoint to get a good working order - for partition in sorted([entry for entry in list_part if entry.get('mountpoint',False)],key=lambda part: part['mountpoint']): + # We then handle any special cases, such as btrfs + if any(btrfs_subvolumes := [entry for entry in list_part if entry.get('btrfs', {}).get('subvolumes', {})]): + for partition_information in btrfs_subvolumes: + for name, mountpoint in sorted(partition_information['btrfs']['subvolumes'].items(), key=lambda item: item[1]): + btrfs_subvolume_information = {} + + match mountpoint: + case str(): # backwards-compatability + btrfs_subvolume_information['mountpoint'] = mountpoint + btrfs_subvolume_information['options'] = [] + case dict(): + btrfs_subvolume_information['mountpoint'] = mountpoint.get('mountpoint', None) + btrfs_subvolume_information['options'] = mountpoint.get('options', []) + case _: + continue + + if mountpoint_parsed := btrfs_subvolume_information.get('mountpoint'): + # We cache the mount call for later + mount_queue[mountpoint_parsed] = lambda device=partition_information['device_instance'], \ + name=name, \ + subvolume_information=btrfs_subvolume_information: mount_subvolume( + installation=self, + device=device, + name=name, + subvolume_information=subvolume_information + ) + + # We mount ordinary partitions, and we sort them by the mountpoint + for partition in sorted([entry for entry in list_part if entry.get('mountpoint', False)], key=lambda part: part['mountpoint']): mountpoint = partition['mountpoint'] log(f"Mounting {mountpoint} to {self.target}{mountpoint} using {partition['device_instance']}", level=logging.INFO) if partition.get('filesystem',{}).get('mount_options',[]): mount_options = ','.join(partition['filesystem']['mount_options']) - partition['device_instance'].mount(f"{self.target}{mountpoint}", options=mount_options) + mount_queue[mountpoint] = lambda target=f"{self.target}{mountpoint}", options=mount_options: partition['device_instance'].mount(target, options) else: - partition['device_instance'].mount(f"{self.target}{mountpoint}") + mount_queue[mountpoint] = lambda target=f"{self.target}{mountpoint}": partition['device_instance'].mount(target) + + # We mount everything by sorting on the mountpoint itself. + for mountpoint, frozen_func in sorted(mount_queue.items(), key=lambda item: item[0]): + frozen_func() time.sleep(1) @@ -979,10 +1012,14 @@ class Installer: if plugin.on_add_bootloader(self): return True + if type(self.target) == str: + self.target = pathlib.Path(self.target) + boot_partition = None root_partition = None for partition in self.partitions: - if partition.mountpoint == os.path.join(self.target, 'boot'): + print(partition, [partition.mountpoint], [self.target]) + if partition.mountpoint == self.target / 'boot': boot_partition = partition elif partition.mountpoint == self.target: root_partition = partition diff --git a/archinstall/lib/luks.py b/archinstall/lib/luks.py index 710af01e..ac480b11 100644 --- a/archinstall/lib/luks.py +++ b/archinstall/lib/luks.py @@ -15,7 +15,10 @@ from .general import SysCommand, SysCommandWorker from .output import log from .exceptions import SysCallError, DiskError from .storage import storage +from .disk.helpers import get_filesystem_type from .disk.mapperdev import MapperDev +from .disk.btrfs import BTRFSPartition + class luks2: def __init__(self, @@ -149,7 +152,6 @@ class luks2: :param mountpoint: The name without absolute path, for instance "luksdev" will point to /dev/mapper/luksdev :type mountpoint: str """ - from .disk import get_filesystem_type if '/' in mountpoint: os.path.basename(mountpoint) # TODO: Raise exception instead? @@ -162,14 +164,22 @@ class luks2: if os.path.islink(f'/dev/mapper/{mountpoint}'): self.mapdev = f'/dev/mapper/{mountpoint}' - unlocked_partition = Partition( + if (filesystem_type := get_filesystem_type(pathlib.Path(self.mapdev))) == 'btrfs': + return BTRFSPartition( + self.mapdev, + block_device=MapperDev(mountpoint).partition.block_device, + encrypted=True, + filesystem=filesystem_type, + autodetect_filesystem=False + ) + + return Partition( self.mapdev, block_device=MapperDev(mountpoint).partition.block_device, encrypted=True, filesystem=get_filesystem_type(self.mapdev), autodetect_filesystem=False ) - return unlocked_partition def close(self, mountpoint :Optional[str] = None) -> bool: if not mountpoint: diff --git a/archinstall/lib/output.py b/archinstall/lib/output.py index da41d16d..07747091 100644 --- a/archinstall/lib/output.py +++ b/archinstall/lib/output.py @@ -61,9 +61,11 @@ def stylize_output(text: str, *opts :str, **kwargs) -> str: 'magenta' : '5', 'cyan' : '6', 'white' : '7', - 'orange' : '8;5;208', # Extended 256-bit colors (not always supported) - 'darkorange' : '8;5;202',# https://www.lihaoyi.com/post/BuildyourownCommandLinewithANSIescapecodes.html#256-colors + 'teal' : '8;5;109', # Extended 256-bit colors (not always supported) + 'orange' : '8;5;208', # https://www.lihaoyi.com/post/BuildyourownCommandLinewithANSIescapecodes.html#256-colors + 'darkorange' : '8;5;202', 'gray' : '8;5;246', + 'grey' : '8;5;246', 'darkgray' : '8;5;240', 'lightgray' : '8;5;256' } diff --git a/archinstall/lib/systemd.py b/archinstall/lib/systemd.py index 417870da..3d2f0385 100644 --- a/archinstall/lib/systemd.py +++ b/archinstall/lib/systemd.py @@ -91,20 +91,25 @@ class Boot: log(f"The error above occured in a temporary boot-up of the installation {self.instance}", level=logging.ERROR, fg="red") shutdown = None + shutdown_exit_code = -1 try: shutdown = SysCommand(f'systemd-run --machine={self.container_name} --pty shutdown now') except SysCallError as error: - if error.exit_code == 256: - pass + shutdown_exit_code = error.exit_code + # if error.exit_code == 256: + # pass while self.session.is_alive(): time.sleep(0.25) - if self.session.exit_code == 0 or (shutdown and shutdown.exit_code == 0): + if shutdown: + shutdown_exit_code = shutdown.exit_code + + if self.session.exit_code == 0 or shutdown_exit_code == 0: storage['active_boot'] = None else: - raise SysCallError(f"Could not shut down temporary boot of {self.instance}: {shutdown}", exit_code=shutdown.exit_code) + raise SysCallError(f"Could not shut down temporary boot of {self.instance}: {self.session.exit_code}/{shutdown_exit_code}", exit_code=next(filter(bool, [self.session.exit_code, shutdown_exit_code]))) def __iter__(self) -> Iterator[str]: if self.session: -- cgit v1.2.3-70-g09d2 From e19ef4463052201ae4635e9dc807fe1fc4d165a3 Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Thu, 26 May 2022 18:56:15 +0200 Subject: Forgot to check for HSM while mounting ordered layout --- archinstall/lib/installer.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'archinstall/lib') diff --git a/archinstall/lib/installer.py b/archinstall/lib/installer.py index 3e04de59..5cedc9d6 100644 --- a/archinstall/lib/installer.py +++ b/archinstall/lib/installer.py @@ -260,8 +260,9 @@ class Installer: partition['device_instance'] = unlocked_device if self._has_root(partition) and partition.get('generate-encryption-key-file', False) is False: - hsm_device_path = storage['arguments']['HSM'] - fido2_enroll(hsm_device_path, partition['device_instance'], password) + if storage['arguments'].get('HSM'): + hsm_device_path = storage['arguments']['HSM'] + fido2_enroll(hsm_device_path, partition['device_instance'], password) # we manage the btrfs partitions if any(btrfs_subvolumes := [entry for entry in list_part if entry.get('btrfs', {}).get('subvolumes', {})]): -- cgit v1.2.3-70-g09d2 From 353c05318ce80b8eec32031c9e14b8471b458548 Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Thu, 26 May 2022 19:53:24 +0200 Subject: Fix MapperDev.subvolumes (#1249) * Fixed a silent try/except, and MapperDev.subvolumes should now work. * MapperDev.subvolumes now properly sends a pathlib.Path. --- archinstall/lib/disk/btrfs/btrfs_helpers.py | 4 ++-- archinstall/lib/disk/mapperdev.py | 7 ++++--- 2 files changed, 6 insertions(+), 5 deletions(-) (limited to 'archinstall/lib') diff --git a/archinstall/lib/disk/btrfs/btrfs_helpers.py b/archinstall/lib/disk/btrfs/btrfs_helpers.py index d529478f..d577d82b 100644 --- a/archinstall/lib/disk/btrfs/btrfs_helpers.py +++ b/archinstall/lib/disk/btrfs/btrfs_helpers.py @@ -112,8 +112,8 @@ def subvolume_info_from_path(path :pathlib.Path) -> Optional[BtrfsSubvolume]: return BtrfsSubvolume(**{'full_path' : path, 'name' : subvolume_name, **result}) - except SysCallError: - pass + except SysCallError as error: + log(f"Could not retrieve subvolume information from {path}: {error}", level=logging.WARNING, fg="orange") return None diff --git a/archinstall/lib/disk/mapperdev.py b/archinstall/lib/disk/mapperdev.py index 67230012..913dbc13 100644 --- a/archinstall/lib/disk/mapperdev.py +++ b/archinstall/lib/disk/mapperdev.py @@ -77,7 +77,8 @@ class MapperDev: @property def subvolumes(self) -> Iterator['BtrfsSubvolume']: from .btrfs import subvolume_info_from_path - + for mountpoint in self.mount_information: - if subvolume := subvolume_info_from_path(mountpoint): - yield subvolume \ No newline at end of file + if target := mountpoint.get('target'): + if subvolume := subvolume_info_from_path(pathlib.Path(target)): + yield subvolume \ No newline at end of file -- cgit v1.2.3-70-g09d2 From 870da403e79ab50350803b45f200e0b272334989 Mon Sep 17 00:00:00 2001 From: Daniel Girtler Date: Fri, 27 May 2022 05:48:29 +1000 Subject: Rework user management (#1220) * Rework users * Update user installation * Fix config serialization * Update * Update schemas and documentation * Update * Fix flake8 * Make users mypy compatible * Fix minor copy Co-authored-by: Daniel Girtler Co-authored-by: Anton Hvornum --- .github/workflows/mypy.yaml | 2 +- README.md | 3 +- archinstall/__init__.py | 11 +- archinstall/lib/configuration.py | 2 +- archinstall/lib/installer.py | 16 +- archinstall/lib/menu/global_menu.py | 53 +++--- archinstall/lib/menu/list_manager.py | 37 ++--- archinstall/lib/models/users.py | 77 +++++++++ archinstall/lib/output.py | 38 ++++- archinstall/lib/user_interaction/__init__.py | 2 +- .../lib/user_interaction/manage_users_conf.py | 177 +++++++-------------- archinstall/lib/user_interaction/network_conf.py | 2 + .../lib/user_interaction/subvolume_config.py | 2 + docs/installing/guided.rst | 25 ++- examples/creds-sample.json | 20 ++- examples/guided.py | 10 +- examples/minimal.py | 6 +- examples/swiss.py | 19 ++- profiles/52-54-00-12-34-56.py | 3 +- schema.json | 10 +- 20 files changed, 290 insertions(+), 225 deletions(-) create mode 100644 archinstall/lib/models/users.py (limited to 'archinstall/lib') diff --git a/.github/workflows/mypy.yaml b/.github/workflows/mypy.yaml index 18c33e67..d14d8553 100644 --- a/.github/workflows/mypy.yaml +++ b/.github/workflows/mypy.yaml @@ -15,4 +15,4 @@ jobs: # one day this will be enabled # run: mypy --strict --module archinstall || exit 0 - name: run mypy - run: mypy --follow-imports=silent archinstall/lib/menu/selection_menu.py archinstall/lib/menu/global_menu.py archinstall/lib/models/network_configuration.py archinstall/lib/menu/list_manager.py archinstall/lib/user_interaction/network_conf.py + run: mypy --follow-imports=silent archinstall/lib/menu/selection_menu.py archinstall/lib/menu/global_menu.py archinstall/lib/models/network_configuration.py archinstall/lib/menu/list_manager.py archinstall/lib/user_interaction/network_conf.py archinstall/lib/models/users.py diff --git a/README.md b/README.md index 05a3c411..79fae095 100644 --- a/README.md +++ b/README.md @@ -105,7 +105,8 @@ with archinstall.Installer('/mnt') as installation: # In this case, we install a minimal profile that is empty installation.install_profile('minimal') - installation.user_create('devel', 'devel') + user = User('devel', 'devel', False) + installation.create_users(user) installation.user_set_pw('root', 'airoot') ``` diff --git a/archinstall/__init__.py b/archinstall/__init__.py index fcb741e6..1e72a60e 100644 --- a/archinstall/__init__.py +++ b/archinstall/__init__.py @@ -1,7 +1,4 @@ """Arch Linux installer - guided, templates etc.""" -import urllib.error -import urllib.parse -import urllib.request from argparse import ArgumentParser from .lib.disk import * @@ -13,6 +10,7 @@ from .lib.locale_helpers import * from .lib.luks import * from .lib.mirrors import * from .lib.models.network_configuration import NetworkConfigurationHandler +from .lib.models.users import User from .lib.networking import * from .lib.output import * from .lib.models.dataclasses import ( @@ -160,7 +158,7 @@ def get_arguments() -> Dict[str, Any]: if args.creds is not None: if not json_stream_to_structure('--creds', args.creds, config): exit(1) - + # load the parameters. first the known, then the unknowns config.update(vars(args)) config.update(parse_unspecified_argument_list(unknowns)) @@ -211,6 +209,11 @@ def load_config(): handler = NetworkConfigurationHandler() handler.parse_arguments(arguments.get('nic')) arguments['nic'] = handler.configuration + if arguments.get('!users', None) is not None or arguments.get('!superusers', None) is not None: + users = arguments.get('!users', None) + superusers = arguments.get('!superusers', None) + arguments['!users'] = User.parse_arguments(users, superusers) + def post_process_arguments(arguments): storage['arguments'] = arguments diff --git a/archinstall/lib/configuration.py b/archinstall/lib/configuration.py index f3fe1e1c..510f7103 100644 --- a/archinstall/lib/configuration.py +++ b/archinstall/lib/configuration.py @@ -37,7 +37,7 @@ class ConfigurationOutput: self._user_creds_file = "user_credentials.json" self._disk_layout_file = "user_disk_layout.json" - self._sensitive = ['!users', '!superusers', '!encryption-password'] + self._sensitive = ['!users', '!encryption-password'] self._ignore = ['abort', 'install', 'config', 'creds', 'dry_run'] self._process_config() diff --git a/archinstall/lib/installer.py b/archinstall/lib/installer.py index 5cedc9d6..903d33af 100644 --- a/archinstall/lib/installer.py +++ b/archinstall/lib/installer.py @@ -23,6 +23,7 @@ from .profiles import Profile from .disk.partition import get_mount_fs_type from .exceptions import DiskError, ServiceException, RequirementError, HardwareIncompatibilityError, SysCallError from .hsm import fido2_enroll +from .models.users import User if TYPE_CHECKING: _: Any @@ -251,7 +252,7 @@ class Installer: loopdev = f"{storage.get('ENC_IDENTIFIER', 'ai')}{pathlib.Path(partition['mountpoint']).name}loop" else: loopdev = f"{storage.get('ENC_IDENTIFIER', 'ai')}{pathlib.Path(partition['device_instance'].path).name}" - + # note that we DON'T auto_unmount (i.e. close the encrypted device so it can be used with (luks_handle := luks2(partition['device_instance'], loopdev, password, auto_unmount=False)) as unlocked_device: if partition.get('generate-encryption-key-file',False) and not self._has_root(partition): @@ -426,7 +427,7 @@ class Installer: if storage['arguments'].get('silent', False) is False: if input('Would you like to re-try this download? (Y/n): ').lower().strip() in ('', 'y'): return self.pacstrap(*packages, **kwargs) - + raise RequirementError("Pacstrap failed. See /var/log/archinstall/install.log or above message for error details.") def set_mirrors(self, mirrors :Mapping[str, Iterator[str]]) -> None: @@ -1062,7 +1063,7 @@ class Installer: self.log(f'Installing archinstall profile {profile}', level=logging.INFO) return profile.install() - def enable_sudo(self, entity: str, group :bool = False) -> bool: + def enable_sudo(self, entity: str, group :bool = False): self.log(f'Enabling sudo permissions for {entity}.', level=logging.INFO) sudoers_dir = f"{self.target}/etc/sudoers.d" @@ -1092,9 +1093,14 @@ class Installer: # Guarantees sudoer conf file recommended perms os.chmod(pathlib.Path(rule_file_name), 0o440) - return True + def create_users(self, users: Union[User, List[User]]): + if not isinstance(users, list): + users = [users] + + for user in users: + self.user_create(user.username, user.password, user.groups, user.sudo) - def user_create(self, user :str, password :Optional[str] = None, groups :Optional[str] = None, sudo :bool = False) -> None: + def user_create(self, user :str, password :Optional[str] = None, groups :Optional[List[str]] = None, sudo :bool = False) -> None: if groups is None: groups = [] diff --git a/archinstall/lib/menu/global_menu.py b/archinstall/lib/menu/global_menu.py index 53e0941d..5cb27cab 100644 --- a/archinstall/lib/menu/global_menu.py +++ b/archinstall/lib/menu/global_menu.py @@ -21,7 +21,6 @@ from ..user_interaction import ask_hostname from ..user_interaction import ask_for_audio_selection from ..user_interaction import ask_additional_packages_to_install from ..user_interaction import ask_to_configure_network -from ..user_interaction import ask_for_superuser_account from ..user_interaction import ask_for_additional_users from ..user_interaction import select_language from ..user_interaction import select_mirror_regions @@ -33,7 +32,9 @@ from ..user_interaction import select_encrypted_partitions from ..user_interaction import select_harddrives from ..user_interaction import select_profile from ..user_interaction import select_additional_repositories +from ..models.users import User from ..user_interaction.partitioning_conf import current_partition_layout +from ..output import FormattedOutput if TYPE_CHECKING: _: Any @@ -122,21 +123,13 @@ class GlobalMenu(GeneralMenu): _('Root password'), lambda preset:self._set_root_password(), display_func=lambda x: secret(x) if x else 'None') - self._menu_options['!superusers'] = \ - Selector( - _('Superuser account'), - lambda preset: self._create_superuser_account(), - default={}, - exec_func=lambda n,v:self._users_resynch(), - dependencies_not=['!root-password'], - display_func=lambda x: self._display_superusers()) self._menu_options['!users'] = \ Selector( _('User account'), - lambda x: self._create_user_account(), + lambda x: self._create_user_account(x), default={}, - exec_func=lambda n,v:self._users_resynch(), - display_func=lambda x: list(x.keys()) if x else '[]') + display_func=lambda x: f'{len(x)} {_("User(s)")}' if len(x) > 0 else None, + preview_func=self._prev_users) self._menu_options['profile'] = \ Selector( _('Profile'), @@ -273,17 +266,28 @@ class GlobalMenu(GeneralMenu): return text[:-1] # remove last new line return None + def _prev_users(self) -> Optional[str]: + selector = self._menu_options['!users'] + if selector.has_selection(): + users: List[User] = selector.current_selection + return FormattedOutput.as_table(users) + return None + def _missing_configs(self) -> List[str]: def check(s): return self._menu_options.get(s).has_selection() + def has_superuser() -> bool: + users = self._menu_options['!users'].current_selection + return any([u.sudo for u in users]) + missing = [] if not check('bootloader'): missing += ['Bootloader'] if not check('hostname'): missing += ['Hostname'] - if not check('!root-password') and not check('!superusers'): - missing += [str(_('Either root-password or at least 1 superuser must be specified'))] + if not check('!root-password') and not has_superuser(): + missing += [str(_('Either root-password or at least 1 user with sudo privileges must be specified'))] if not check('harddrives'): missing += ['Hard drives'] if check('harddrives'): @@ -380,23 +384,6 @@ class GlobalMenu(GeneralMenu): return ret - def _create_superuser_account(self) -> Optional[Dict[str, Dict[str, str]]]: - superusers = ask_for_superuser_account(str(_('Manage superuser accounts: '))) - return superusers if superusers else None - - def _create_user_account(self) -> Dict[str, Dict[str, str | None]]: - users = ask_for_additional_users(str(_('Manage ordinary user accounts: '))) + def _create_user_account(self, defined_users: List[User]) -> List[User]: + users = ask_for_additional_users(defined_users=defined_users) return users - - def _display_superusers(self): - superusers = self._data_store.get('!superusers', {}) - - if self._menu_options.get('!root-password').has_selection(): - return list(superusers.keys()) if superusers else '[]' - else: - return list(superusers.keys()) if superusers else '' - - def _users_resynch(self) -> bool: - self.synch('!superusers') - self.synch('!users') - return False diff --git a/archinstall/lib/menu/list_manager.py b/archinstall/lib/menu/list_manager.py index 7db3b3a9..cb567093 100644 --- a/archinstall/lib/menu/list_manager.py +++ b/archinstall/lib/menu/list_manager.py @@ -84,13 +84,13 @@ The contents in the base class of this methods serve for a very basic usage, and ``` """ - -from .text_input import TextInput -from .menu import Menu, MenuSelectionType +import copy from os import system -from copy import copy from typing import Union, Any, TYPE_CHECKING, Dict, Optional +from .text_input import TextInput +from .menu import Menu + if TYPE_CHECKING: _: Any @@ -144,14 +144,14 @@ class ListManager: self.bottom_list = [self.confirm_action,self.cancel_action] self.bottom_item = [self.cancel_action] self.base_actions = base_actions if base_actions else [str(_('Add')),str(_('Copy')),str(_('Edit')),str(_('Delete'))] - self.base_data = base_list - self._data = copy(base_list) # as refs, changes are immediate + self._original_data = copy.deepcopy(base_list) + self._data = copy.deepcopy(base_list) # as refs, changes are immediate # default values for the null case self.target: Optional[Any] = None self.action = self._null_action if len(self._data) == 0 and self._null_action: - self.exec_action(self._data) + self._data = self.exec_action(self._data) def run(self): while True: @@ -175,12 +175,10 @@ class ListManager: clear_screen=False, clear_menu_on_exit=False, header=self.header, - skip_empty_entries=True + skip_empty_entries=True, + skip=False ).run() - if target.type_ == MenuSelectionType.Esc: - return self.run() - if not target.value or target.value in self.bottom_list: self.action = target break @@ -188,21 +186,23 @@ class ListManager: if target.value and target.value in self._default_action: self.action = target.value self.target = None - self.exec_action(self._data) + self._data = self.exec_action(self._data) continue if isinstance(self._data,dict): data_key = data_formatted[target.value] key = self._data[data_key] self.target = {data_key: key} + elif isinstance(self._data, list): + self.target = [d for d in self._data if d == data_formatted[target.value]][0] else: self.target = self._data[data_formatted[target.value]] # Possible enhacement. If run_actions returns false a message line indicating the failure self.run_actions(target.value) - if not target or target == self.cancel_action: # TODO dubious - return self.base_data # return the original list + if target.value == self.cancel_action: # TODO dubious + return self._original_data # return the original list else: return self._data @@ -221,10 +221,9 @@ class ListManager: self.action = choice.value - if not self.action or self.action == self.cancel_action: - return False - else: - return self.exec_action(self._data) + if self.action and self.action != self.cancel_action: + self._data = self.exec_action(self._data) + """ The following methods are expected to be overwritten by the user if the needs of the list are beyond the simple case """ @@ -293,3 +292,5 @@ class ListManager: self._data[origkey] = value elif self.action == str(_('Delete')): del self._data[origkey] + + return self._data diff --git a/archinstall/lib/models/users.py b/archinstall/lib/models/users.py new file mode 100644 index 00000000..6052b73a --- /dev/null +++ b/archinstall/lib/models/users.py @@ -0,0 +1,77 @@ +from dataclasses import dataclass +from typing import Dict, List, Union, Any, TYPE_CHECKING + +if TYPE_CHECKING: + _: Any + + +@dataclass +class User: + username: str + password: str + sudo: bool + + @property + def groups(self) -> List[str]: + # this property should be transferred into a class attr instead + # if it's every going to be used + return [] + + def json(self) -> Dict[str, Any]: + return { + 'username': self.username, + '!password': self.password, + 'sudo': self.sudo + } + + def display(self) -> str: + password = '*' * len(self.password) + return f'{_("Username")}: {self.username:16} {_("Password")}: {password:16} sudo: {str(self.sudo)}' + + @classmethod + def _parse(cls, config_users: List[Dict[str, Any]]) -> List['User']: + users = [] + + for entry in config_users: + username = entry.get('username', None) + password = entry.get('!password', '') + sudo = entry.get('sudo', False) + + if username is None: + continue + + user = User(username, password, sudo) + users.append(user) + + return users + + @classmethod + def _parse_backwards_compatible(cls, config_users: Dict, sudo: bool) -> List['User']: + if len(config_users.keys()) > 0: + username = list(config_users.keys())[0] + password = config_users[username]['!password'] + + if password: + return [User(username, password, sudo)] + + return [] + + @classmethod + def parse_arguments( + cls, + config_users: Union[List[Dict[str, str]], Dict[str, str]], + config_superusers: Union[List[Dict[str, str]], Dict[str, str]] + ) -> List['User']: + users = [] + + # backwards compability + if isinstance(config_users, dict): + users += cls._parse_backwards_compatible(config_users, False) + else: + users += cls._parse(config_users) + + # backwards compability + if isinstance(config_superusers, dict): + users += cls._parse_backwards_compatible(config_superusers, True) + + return users diff --git a/archinstall/lib/output.py b/archinstall/lib/output.py index 07747091..29b73bc4 100644 --- a/archinstall/lib/output.py +++ b/archinstall/lib/output.py @@ -2,11 +2,47 @@ import logging import os import sys from pathlib import Path -from typing import Dict, Union +from typing import Dict, Union, List, Any from .storage import storage +class FormattedOutput: + + @classmethod + def values(cls, o: Any) -> Dict[str, Any]: + if hasattr(o, 'json'): + return o.json() + else: + return o.__dict__ + + @classmethod + def as_table(cls, obj: List[Any]) -> str: + column_width: Dict[str, int] = {} + for o in obj: + for k, v in cls.values(o).items(): + column_width.setdefault(k, 0) + column_width[k] = max([column_width[k], len(str(v)), len(k)]) + + output = '' + for key, width in column_width.items(): + key = key.replace('!', '') + output += key.ljust(width) + ' | ' + + output = output[:-3] + '\n' + output += '-' * len(output) + '\n' + + for o in obj: + for k, v in cls.values(o).items(): + if '!' in k: + v = '*' * len(str(v)) + output += str(v).ljust(column_width[k]) + ' | ' + output = output[:-3] + output += '\n' + + return output + + class Journald: @staticmethod def log(message :str, level :int = logging.DEBUG) -> None: diff --git a/archinstall/lib/user_interaction/__init__.py b/archinstall/lib/user_interaction/__init__.py index b0174d94..8aba4b4d 100644 --- a/archinstall/lib/user_interaction/__init__.py +++ b/archinstall/lib/user_interaction/__init__.py @@ -1,5 +1,5 @@ from .save_conf import save_config -from .manage_users_conf import ask_for_superuser_account, ask_for_additional_users +from .manage_users_conf import ask_for_additional_users from .backwards_compatible_conf import generic_select, generic_multi_select from .locale_conf import select_locale_lang, select_locale_enc from .system_conf import select_kernel, select_harddrives, select_driver, ask_for_bootloader, ask_for_swap diff --git a/archinstall/lib/user_interaction/manage_users_conf.py b/archinstall/lib/user_interaction/manage_users_conf.py index ea909f35..567a2964 100644 --- a/archinstall/lib/user_interaction/manage_users_conf.py +++ b/archinstall/lib/user_interaction/manage_users_conf.py @@ -1,14 +1,12 @@ from __future__ import annotations -import logging import re -from typing import Any, Dict, TYPE_CHECKING, List +from typing import Any, Dict, TYPE_CHECKING, List, Optional +from .utils import get_password from ..menu import Menu from ..menu.list_manager import ListManager -from ..output import log -from ..storage import storage -from .utils import get_password +from ..models.users import User if TYPE_CHECKING: _: Any @@ -19,7 +17,7 @@ class UserList(ListManager): subclass of ListManager for the managing of user accounts """ - def __init__(self, prompt: str, lusers: dict, sudo: bool = None): + def __init__(self, prompt: str, lusers: List[User]): """ param: prompt type: str @@ -27,140 +25,83 @@ class UserList(ListManager): type: Dict param: sudo. boolean to determine if we handle superusers or users. If None handles both types """ - self.sudo = sudo - self.actions = [ + self._actions = [ str(_('Add a user')), str(_('Change password')), str(_('Promote/Demote user')), str(_('Delete User')) ] - super().__init__(prompt, lusers, self.actions, self.actions[0]) - - def reformat(self, data: List) -> Dict: - def format_element(elem :str): - # secret gives away the length of the password - if data[elem].get('!password'): - pwd = '*' * 16 - else: - pwd = '' - if data[elem].get('sudoer'): - super_user = 'Superuser' - else: - super_user = ' ' - return f"{elem:16}: password {pwd:16} {super_user}" + super().__init__(prompt, lusers, self._actions, self._actions[0]) - return {format_element(e): e for e in data} + def reformat(self, data: List[User]) -> Dict[str, User]: + return {e.display(): e for e in data} def action_list(self): - if self.target: - active_user = list(self.target.keys())[0] - else: - active_user = None - sudoer = self.target[active_user].get('sudoer', False) - if self.sudo is None: - return self.actions - if self.sudo and sudoer: - return self.actions - elif self.sudo and not sudoer: - return [self.actions[2]] - elif not self.sudo and sudoer: - return [self.actions[2]] + active_user = self.target if self.target else None + + if active_user is None: + return [self._actions[0]] else: - return self.actions + return self._actions[1:] - def exec_action(self, data: Any): + def exec_action(self, data: List[User]) -> List[User]: if self.target: - active_user = list(self.target.keys())[0] + active_user = self.target else: active_user = None - if self.action == self.actions[0]: # add - new_user = self.add_user() - # no unicity check, if exists will be replaced - data.update(new_user) - elif self.action == self.actions[1]: # change password - data[active_user]['!password'] = get_password( - prompt=str(_('Password for user "{}": ').format(active_user))) - elif self.action == self.actions[2]: # promote/demote - data[active_user]['sudoer'] = not data[active_user]['sudoer'] - elif self.action == self.actions[3]: # delete - del data[active_user] + if self.action == self._actions[0]: # add + new_user = self._add_user() + if new_user is not None: + # in case a user with the same username as an existing user + # was created we'll replace the existing one + data = [d for d in data if d.username != new_user.username] + data += [new_user] + elif self.action == self._actions[1]: # change password + prompt = str(_('Password for user "{}": ').format(active_user.username)) + new_password = get_password(prompt=prompt) + if new_password: + user = next(filter(lambda x: x == active_user, data), 1) + user.password = new_password + elif self.action == self._actions[2]: # promote/demote + user = next(filter(lambda x: x == active_user, data), 1) + user.sudo = False if user.sudo else True + elif self.action == self._actions[3]: # delete + data = [d for d in data if d != active_user] + + return data def _check_for_correct_username(self, username: str) -> bool: if re.match(r'^[a-z_][a-z0-9_-]*\$?$', username) and len(username) <= 32: return True - log("The username you entered is invalid. Try again", level=logging.WARNING, fg='red') return False - def add_user(self): + def _add_user(self) -> Optional[User]: print(_('\nDefine a new user\n')) - prompt = str(_("User Name : ")) + prompt = str(_('Enter username (leave blank to skip): ')) + while True: - userid = input(prompt).strip(' ') - if not userid: - return {} # end - if not self._check_for_correct_username(userid): - pass + username = input(prompt).strip(' ') + if not username: + return None + if not self._check_for_correct_username(username): + prompt = str(_("The username you entered is invalid. Try again")) + '\n' + prompt else: break - if self.sudo: - sudoer = True - elif self.sudo is not None and not self.sudo: - sudoer = False - else: - sudoer = False - sudo_choice = Menu(str(_('Should {} be a superuser (sudoer)?')).format(userid), Menu.yes_no(), - skip=False, - preset_values=Menu.yes() if sudoer else Menu.no(), - default_option=Menu.no()).run() - sudoer = True if sudo_choice == Menu.yes() else False - - password = get_password(prompt=str(_('Password for user "{}": ').format(userid))) - - return {userid: {"!password": password, "sudoer": sudoer}} - - -def manage_users(prompt: str, sudo: bool) -> tuple[dict, dict]: - # TODO Filtering and some kind of simpler code - lusers = {} - if storage['arguments'].get('!superusers', {}): - lusers.update({ - uid: { - '!password': storage['arguments']['!superusers'][uid].get('!password'), - 'sudoer': True - } - for uid in storage['arguments'].get('!superusers', {}) - }) - if storage['arguments'].get('!users', {}): - lusers.update({ - uid: { - '!password': storage['arguments']['!users'][uid].get('!password'), - 'sudoer': False - } - for uid in storage['arguments'].get('!users', {}) - }) - # processing - lusers = UserList(prompt, lusers, sudo).run() - # return data - superusers = { - uid: { - '!password': lusers[uid].get('!password') - } - for uid in lusers if lusers[uid].get('sudoer', False) - } - users = {uid: {'!password': lusers[uid].get('!password')} for uid in lusers if not lusers[uid].get('sudoer', False)} - storage['arguments']['!superusers'] = superusers - storage['arguments']['!users'] = users - return superusers, users - - -def ask_for_superuser_account(prompt: str) -> Dict[str, Dict[str, str]]: - prompt = prompt if prompt else str(_('Define users with sudo privilege, by username: ')) - superusers, dummy = manage_users(prompt, sudo=True) - return superusers - - -def ask_for_additional_users(prompt: str = '') -> Dict[str, Dict[str, str | None]]: - prompt = prompt if prompt else _('Any additional users to install (leave blank for no users): ') - dummy, users = manage_users(prompt, sudo=False) + + password = get_password(prompt=str(_('Password for user "{}": ').format(username))) + + choice = Menu( + str(_('Should "{}" be a superuser (sudo)?')).format(username), Menu.yes_no(), + skip=False, + default_option=Menu.no() + ).run() + + sudo = True if choice.value == Menu.yes() else False + return User(username, password, sudo) + + +def ask_for_additional_users(prompt: str = '', defined_users: List[User] = []) -> List[User]: + prompt = prompt if prompt else _('Enter username (leave blank to skip): ') + users = UserList(prompt, defined_users).run() return users diff --git a/archinstall/lib/user_interaction/network_conf.py b/archinstall/lib/user_interaction/network_conf.py index 25e9d4c6..5154d8b1 100644 --- a/archinstall/lib/user_interaction/network_conf.py +++ b/archinstall/lib/user_interaction/network_conf.py @@ -64,6 +64,8 @@ class ManualNetworkConfig(ListManager): elif self.action == self._action_delete: del data[iface_name] + return data + def _select_iface(self, existing_ifaces: List[str]) -> Optional[Any]: all_ifaces = list_interfaces().values() available = set(all_ifaces) - set(existing_ifaces) diff --git a/archinstall/lib/user_interaction/subvolume_config.py b/archinstall/lib/user_interaction/subvolume_config.py index 7383b13d..af783639 100644 --- a/archinstall/lib/user_interaction/subvolume_config.py +++ b/archinstall/lib/user_interaction/subvolume_config.py @@ -57,6 +57,8 @@ class SubvolumeList(ListManager): data.update(self.target) + return data + class SubvolumeMenu(GeneralMenu): def __init__(self,parameters,action=None): diff --git a/docs/installing/guided.rst b/docs/installing/guided.rst index ac6254f2..569b2d05 100644 --- a/docs/installing/guided.rst +++ b/docs/installing/guided.rst @@ -163,21 +163,20 @@ Options for ``--creds`` "!root-password" : "SecretSanta2022" } -+----------------------+-----------------------------------------------------+--------------------------------------------------------------------------------------+-----------------------------------------------+ -| Key | Values | Description | Required | -| | | | | -+======================+=====================================================+======================================================================================+===============================================+ -| !encryption-password | any | Password to encrypt disk, not encrypted if password not provided | No | -+----------------------+-----------------------------------------------------+--------------------------------------------------------------------------------------+-----------------------------------------------+ -| !root-password | any | The root account password | No | -+----------------------+-----------------------------------------------------+--------------------------------------------------------------------------------------+-----------------------------------------------+ -| !superusers | { "": { "!password": ""}, ..} | List of superuser credentials, see configuration for reference | Yes[1] | -+----------------------+-----------------------------------------------------+--------------------------------------------------------------------------------------+-----------------------------------------------+ -| !users | { "": { "!password": ""}, ..} | List of regular user credentials, see configuration for reference | No | -+----------------------+-----------------------------------------------------+--------------------------------------------------------------------------------------+-----------------------------------------------+ ++----------------------+--------------------------------------------------------+--------------------------------------------------------------------------------------+-----------------------------------------------+ +| Key | Values | Description | Required | ++======================+========================================================+======================================================================================+===============================================+ +| !encryption-password | any | Password to encrypt disk, not encrypted if password not provided | No | ++----------------------+--------------------------------------------------------+--------------------------------------------------------------------------------------+-----------------------------------------------+ +| !root-password | any | The root account password | No | ++----------------------+--------------------------------------------------------+--------------------------------------------------------------------------------------+-----------------------------------------------+ +| !users | { "username": "" | List of regular user credentials, see configuration for reference | No | +| | "!password": "", | | | +| | "sudo": false|true} | | | ++----------------------+--------------------------------------------------------+--------------------------------------------------------------------------------------+-----------------------------------------------+ .. note:: - [1] ``!superusers`` is optional only if ``!root-password`` was set. ``!superusers`` will be enforced otherwise and the minimum amount of superusers required will be set to 1. + [1] ``!users`` is optional only if ``!root-password`` was set. ``!users`` will be enforced otherwise and the minimum amount of users with sudo privileges required will be set to 1. Options for ``--disk_layouts`` ------------------------------ diff --git a/examples/creds-sample.json b/examples/creds-sample.json index 16aeb8cc..0681e16f 100644 --- a/examples/creds-sample.json +++ b/examples/creds-sample.json @@ -1,9 +1,15 @@ { "!root-password": "", - "!users": { - "username": {"!password": ""} - }, - "!superusers": { - "admin": {"!password": ""} - } -} \ No newline at end of file + "!users": [ + { + "username": "", + "!password": "", + "sudo": false + }, + { + "username": "", + "!password": "", + "sudo": true + } + ] +} diff --git a/examples/guided.py b/examples/guided.py index 3b762a8b..19b0d638 100644 --- a/examples/guided.py +++ b/examples/guided.py @@ -72,7 +72,6 @@ def ask_user_questions(): # Ask for a root password (optional, but triggers requirement for super-user if skipped) global_menu.enable('!root-password') - global_menu.enable('!superusers') global_menu.enable('!users') # Ask for archinstall-specific profiles (such as desktop environments etc) @@ -220,13 +219,8 @@ def perform_installation(mountpoint): if archinstall.arguments.get('profile', None): installation.install_profile(archinstall.arguments.get('profile', None)) - if archinstall.arguments.get('!users',{}): - for user, user_info in archinstall.arguments.get('!users', {}).items(): - installation.user_create(user, user_info["!password"], sudo=False) - - if archinstall.arguments.get('!superusers',{}): - for superuser, user_info in archinstall.arguments.get('!superusers', {}).items(): - installation.user_create(superuser, user_info["!password"], sudo=True) + if users := archinstall.arguments.get('!users', None): + installation.create_users(users) if timezone := archinstall.arguments.get('timezone', None): installation.set_timezone(timezone) diff --git a/examples/minimal.py b/examples/minimal.py index d80c4045..8b4c847f 100644 --- a/examples/minimal.py +++ b/examples/minimal.py @@ -1,6 +1,8 @@ import archinstall # Select a harddrive and a disk password +from archinstall import User + archinstall.log("Minimal only supports:") archinstall.log(" * Being installed to a single disk") @@ -28,8 +30,8 @@ def install_on(mountpoint): installation.add_additional_packages(['nano', 'wget', 'git']) installation.install_profile('minimal') - installation.user_create('devel', 'devel') - installation.user_set_pw('root', 'airoot') + user = User('devel', 'devel', False) + installation.create_users(user) # Once this is done, we output some useful information to the user # And the installation is complete. diff --git a/examples/swiss.py b/examples/swiss.py index 2f7d90c4..d0f02dc1 100644 --- a/examples/swiss.py +++ b/examples/swiss.py @@ -219,7 +219,7 @@ class MyMenu(archinstall.GlobalMenu): if self._execution_mode in ('full','lineal'): options_list = ['keyboard-layout', 'mirror-region', 'harddrives', 'disk_layouts', '!encryption-password','swap', 'bootloader', 'hostname', '!root-password', - '!superusers', '!users', 'profile', 'audio', 'kernels', 'packages','additional-repositories','nic', + '!users', 'profile', 'audio', 'kernels', 'packages','additional-repositories','nic', 'timezone', 'ntp'] if archinstall.arguments.get('advanced',False): options_list.extend(['sys-language','sys-encoding']) @@ -229,7 +229,7 @@ class MyMenu(archinstall.GlobalMenu): mandatory_list = ['harddrives'] elif self._execution_mode == 'only_os': options_list = ['keyboard-layout', 'mirror-region','bootloader', 'hostname', - '!root-password', '!superusers', '!users', 'profile', 'audio', 'kernels', + '!root-password', '!users', 'profile', 'audio', 'kernels', 'packages', 'additional-repositories', 'nic', 'timezone', 'ntp'] mandatory_list = ['hostname'] if archinstall.arguments.get('advanced',False): @@ -262,8 +262,12 @@ class MyMenu(archinstall.GlobalMenu): def check(s): return self.option(s).has_selection() + def has_superuser() -> bool: + users = self._menu_options['!users'].current_selection + return any([u.sudo for u in users]) + _, missing = self.mandatory_overview() - if mode in ('full','only_os') and (not check('!root-password') and not check('!superusers')): + if mode in ('full','only_os') and (not check('!root-password') and not has_superuser()): missing += 1 if mode in ('full', 'only_hd') and check('harddrives'): if not self.option('harddrives').is_empty() and not check('disk_layouts'): @@ -420,13 +424,8 @@ def os_setup(installation): if archinstall.arguments.get('profile', None): installation.install_profile(archinstall.arguments.get('profile', None)) - if archinstall.arguments.get('!users',{}): - for user, user_info in archinstall.arguments.get('!users', {}).items(): - installation.user_create(user, user_info["!password"], sudo=False) - - if archinstall.arguments.get('!superusers',{}): - for superuser, user_info in archinstall.arguments.get('!superusers', {}).items(): - installation.user_create(superuser, user_info["!password"], sudo=True) + if users := archinstall.arguments.get('!users', None): + installation.create_users(users) if timezone := archinstall.arguments.get('timezone', None): installation.set_timezone(timezone) diff --git a/profiles/52-54-00-12-34-56.py b/profiles/52-54-00-12-34-56.py index 0a1626d9..3b074629 100644 --- a/profiles/52-54-00-12-34-56.py +++ b/profiles/52-54-00-12-34-56.py @@ -40,7 +40,8 @@ with archinstall.Filesystem(harddrive) as fs: installation.add_additional_packages(__packages__) installation.install_profile('awesome') - installation.user_create('devel', 'devel') + user = User('devel', 'devel', False) + installation.create_users(user) installation.user_set_pw('root', 'toor') print(f'Submitting {archinstall.__version__}: success') diff --git a/schema.json b/schema.json index e6f73c6c..9269e8e8 100644 --- a/schema.json +++ b/schema.json @@ -167,7 +167,15 @@ }, { "required": [ - "!superusers" + "!users": { + "description": "User account", + "type": "object", + "properties": { + "username": "string", + "!password": "string", + "sudo": "boolean" + } + } ] } ] -- cgit v1.2.3-70-g09d2 From 9b3db344aba22644ccf1fd09ad163395fd5e40be Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Fri, 27 May 2022 12:24:01 +0200 Subject: Fix dual-booting (#1250) # Fixes * Optimized partition lookups * Fixed re-use of partition UUID's * `BlockDevice().get_partition()` now supports looking up both `PARTUUID` and `UUID` for a partition under itself * Partitions listed in `--disk-layout` that doesn't have a PARTUUID/UUID should no longer cause an exception, but instead logs a warning and they will simply be ignored * `Filesystem().add_partition()` now handles `DiskError` raised by `partition.part_uuid` * Fixed issue on normal partitions where the device was not properly frozen in `lambda` calls, meaning two or more mount-points shared the same `device_instance`. * Lowered global `DISK_RETRY_ATTEMPTS` to 5, as the timeouts are linear *(`range(DISK_RETRY_ATTEMPTS) * DISK_TIMEOUTS`)* --- archinstall/lib/disk/blockdevice.py | 40 +++++++++++++++++++------------- archinstall/lib/disk/filesystem.py | 46 +++++++++++++++++++++++-------------- archinstall/lib/disk/partition.py | 4 ++-- archinstall/lib/installer.py | 6 +++-- archinstall/lib/storage.py | 2 +- 5 files changed, 60 insertions(+), 38 deletions(-) (limited to 'archinstall/lib') diff --git a/archinstall/lib/disk/blockdevice.py b/archinstall/lib/disk/blockdevice.py index 15f03789..c4707abd 100644 --- a/archinstall/lib/disk/blockdevice.py +++ b/archinstall/lib/disk/blockdevice.py @@ -289,19 +289,27 @@ class BlockDevice: def flush_cache(self) -> None: self.part_cache = {} - def get_partition(self, uuid :str) -> Partition: - count = 0 - while count < 5: - for partition_uuid, partition in self.partitions.items(): - if partition.part_uuid.lower() == uuid.lower(): - return partition - else: - log(f"uuid {uuid} not found. Waiting for {count +1} time",level=logging.DEBUG) - time.sleep(float(storage['arguments'].get('disk-sleep', 0.2))) - count += 1 - else: - log(f"Could not find {uuid} in disk after 5 retries",level=logging.INFO) - print(f"Cache: {self.part_cache}") - print(f"Partitions: {self.partitions.items()}") - print(f"UUID: {[uuid]}") - raise DiskError(f"New partition {uuid} never showed up after adding new partition on {self}") + def get_partition(self, uuid :Optional[str] = None, partuuid :Optional[str] = None) -> Partition: + if not uuid and not partuuid: + raise ValueError(f"BlockDevice.get_partition() requires either a UUID or a PARTUUID for lookups.") + + for count in range(storage.get('DISK_RETRY_ATTEMPTS', 5)): + for partition_index, partition in self.partitions.items(): + try: + if uuid and partition.uuid.lower() == uuid.lower(): + return partition + elif partuuid and partition.part_uuid.lower() == partuuid.lower(): + return partition + except DiskError as error: + # Most likely a blockdevice that doesn't support or use UUID's + # (like Microsoft recovery partition) + log(f"Could not get UUID/PARTUUID of {partition}: {error}", level=logging.DEBUG, fg="gray") + pass + + log(f"uuid {uuid} or {partuuid} not found. Waiting {storage.get('DISK_TIMEOUTS', 1) * count}s for next attempt",level=logging.DEBUG) + time.sleep(storage.get('DISK_TIMEOUTS', 1) * count) + + log(f"Could not find {uuid}/{partuuid} in disk after 5 retries", level=logging.INFO) + log(f"Cache: {self.part_cache}") + log(f"Partitions: {self.partitions.items()}") + raise DiskError(f"New partition {uuid}/{partuuid} never showed up after adding new partition on {self}") diff --git a/archinstall/lib/disk/filesystem.py b/archinstall/lib/disk/filesystem.py index 8d8f596e..66112ccc 100644 --- a/archinstall/lib/disk/filesystem.py +++ b/archinstall/lib/disk/filesystem.py @@ -97,7 +97,9 @@ class Filesystem: print(_("Re-using partition instance: {}").format(partition_instance)) partition['device_instance'] = partition_instance else: - raise ValueError(f"{self}.load_layout() doesn't know how to continue without a new partition definition or a UUID ({partition.get('PARTUUID')}) on the device ({self.blockdevice.get_partition(uuid=partition.get('PARTUUID'))}).") + log(f"{self}.load_layout() doesn't know how to work without 'wipe' being set or UUID ({partition.get('PARTUUID')}) was given and found.", fg="yellow", level=logging.WARNING) + continue + # raise ValueError(f"{self}.load_layout() doesn't know how to continue without a new partition definition or a UUID ({partition.get('PARTUUID')}) on the device ({self.blockdevice.get_partition(uuid=partition.get('PARTUUID'))}).") if partition.get('filesystem', {}).get('format', False): @@ -206,7 +208,12 @@ class Filesystem: def add_partition(self, partition_type :str, start :str, end :str, partition_format :Optional[str] = None) -> Partition: log(f'Adding partition to {self.blockdevice}, {start}->{end}', level=logging.INFO) - previous_partition_uuids = {partition.part_uuid for partition in self.blockdevice.partitions.values()} + previous_partuuids = [] + for partition in self.blockdevice.partitions.values(): + try: + previous_partuuids.append(partition.part_uuid) + except DiskError: + pass if self.mode == MBR: if len(self.blockdevice.partitions) > 3: @@ -220,36 +227,41 @@ class Filesystem: log(f"Adding partition using the following parted command: {parted_string}", level=logging.DEBUG) if self.parted(parted_string): - count = 0 - while count < 10: - new_uuid = None - new_uuid_set = (previous_partition_uuids ^ {partition.part_uuid for partition in self.blockdevice.partitions.values()}) + for count in range(storage.get('DISK_RETRY_ATTEMPTS', 3)): + self.partprobe() - if len(new_uuid_set) > 0: - new_uuid = new_uuid_set.pop() + new_partition_uuids = [] + for partition in self.blockdevice.partitions.values(): + try: + new_partition_uuids.append(partition.part_uuid) + except DiskError: + pass + + new_partuuid_set = (set(previous_partuuids) ^ set(new_partition_uuids)) + + print(previous_partuuids, new_partition_uuids, new_partuuid_set) - if new_uuid: + if len(new_partuuid_set) and (new_partuuid := new_partuuid_set.pop()): try: - return self.blockdevice.get_partition(new_uuid) + return self.blockdevice.get_partition(partuuid=new_partuuid) except Exception as err: log(f'Blockdevice: {self.blockdevice}', level=logging.ERROR, fg="red") log(f'Partitions: {self.blockdevice.partitions}', level=logging.ERROR, fg="red") - log(f'Partition set: {new_uuid_set}', level=logging.ERROR, fg="red") - log(f'New UUID: {[new_uuid]}', level=logging.ERROR, fg="red") + log(f'Partition set: {new_partuuid_set}', level=logging.ERROR, fg="red") + log(f'New UUID: {[new_partuuid]}', level=logging.ERROR, fg="red") log(f'get_partition(): {self.blockdevice.get_partition}', level=logging.ERROR, fg="red") raise err else: - count += 1 - log(f"Could not get UUID for partition. Waiting before retry attempt {count} of 10 ...",level=logging.DEBUG) - time.sleep(float(storage['arguments'].get('disk-sleep', 0.2))) + log(f"Could not get UUID for partition. Waiting {storage.get('DISK_TIMEOUTS', 1) * count}s before retrying.",level=logging.DEBUG) + time.sleep(storage.get('DISK_TIMEOUTS', 1) * count) else: log("Add partition is exiting due to excessive wait time", level=logging.ERROR, fg="red") raise DiskError(f"New partition never showed up after adding new partition on {self}.") # TODO: This should never be able to happen log(f"Could not find the new PARTUUID after adding the partition.", level=logging.ERROR, fg="red") - log(f"Previous partitions: {previous_partition_uuids}", level=logging.ERROR, fg="red") - log(f"New partitions: {(previous_partition_uuids ^ {partition.part_uuid for partition in self.blockdevice.partitions.values()})}", level=logging.ERROR, fg="red") + log(f"Previous partitions: {previous_partuuids}", level=logging.ERROR, fg="red") + log(f"New partitions: {(previous_partuuids ^ {partition.part_uuid for partition in self.blockdevice.partitions.values()})}", level=logging.ERROR, fg="red") raise DiskError(f"Could not add partition using: {parted_string}") def set_name(self, partition: int, name: str) -> bool: diff --git a/archinstall/lib/disk/partition.py b/archinstall/lib/disk/partition.py index e33c600c..bb1ffeb6 100644 --- a/archinstall/lib/disk/partition.py +++ b/archinstall/lib/disk/partition.py @@ -101,7 +101,7 @@ class Partition: except SysCallError as error: # Not mounted anywhere most likely - log(f"Could not locate mount information for {self.path}: {error}", level=logging.DEBUG) + log(f"Could not locate mount information for {self.path}: {error}", level=logging.DEBUG, fg="grey") pass return None @@ -216,7 +216,7 @@ class Partition: if not self.partprobe(): raise DiskError(f"Could not perform partprobe on {self.device_path}") - time.sleep(max(0.1, storage['DISK_TIMEOUTS'] * i)) + time.sleep(storage.get('DISK_TIMEOUTS', 1) * i) partuuid = self._safe_uuid if partuuid: diff --git a/archinstall/lib/installer.py b/archinstall/lib/installer.py index 903d33af..3b53ec50 100644 --- a/archinstall/lib/installer.py +++ b/archinstall/lib/installer.py @@ -314,9 +314,11 @@ class Installer: if partition.get('filesystem',{}).get('mount_options',[]): mount_options = ','.join(partition['filesystem']['mount_options']) - mount_queue[mountpoint] = lambda target=f"{self.target}{mountpoint}", options=mount_options: partition['device_instance'].mount(target, options) + mount_queue[mountpoint] = lambda instance=partition['device_instance'], target=f"{self.target}{mountpoint}", options=mount_options: instance.mount(target, options) else: - mount_queue[mountpoint] = lambda target=f"{self.target}{mountpoint}": partition['device_instance'].mount(target) + mount_queue[mountpoint] = lambda instance=partition['device_instance'], target=f"{self.target}{mountpoint}": instance.mount(target) + + log(f"Using mount order: {list(sorted(mount_queue.items(), key=lambda item: item[0]))}", level=logging.INFO, fg="white") # We mount everything by sorting on the mountpoint itself. for mountpoint, frozen_func in sorted(mount_queue.items(), key=lambda item: item[0]): diff --git a/archinstall/lib/storage.py b/archinstall/lib/storage.py index 650b9c0e..dd7ddc88 100644 --- a/archinstall/lib/storage.py +++ b/archinstall/lib/storage.py @@ -23,7 +23,7 @@ storage: Dict[str, Any] = { 'MOUNT_POINT': '/mnt/archinstall', 'ENC_IDENTIFIER': 'ainst', 'DISK_TIMEOUTS' : 1, # seconds - 'DISK_RETRY_ATTEMPTS' : 20, # RETRY_ATTEMPTS * DISK_TIMEOUTS is used in disk operations + 'DISK_RETRY_ATTEMPTS' : 5, # RETRY_ATTEMPTS * DISK_TIMEOUTS is used in disk operations 'CMD_LOCALE':{'LC_ALL':'C'}, # default locale for execution commands. Can be overriden with set_cmd_locale() 'CMD_LOCALE_DEFAULT':{'LC_ALL':'C'}, # should be the same as the former. Not be used except in reset_cmd_locale() } -- cgit v1.2.3-70-g09d2 From 339469d6eea42bd8af7b4fd51d00f262f68d1026 Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Fri, 27 May 2022 20:37:04 +0200 Subject: Creates partition label on drives with zero partitions before adding partitions (#1256) * If BlockDevice.partitions is zero, we set a new partition label to ensure new drives are setup correctly * Added a sleep after mklabel. * Removed redundant log message. * Tweaked log message from print() to log(). * Trying PARTUUID in reusage of partitions. * Debugging. --- archinstall/lib/disk/blockdevice.py | 2 +- archinstall/lib/disk/filesystem.py | 29 +++++++++++++++++++++++------ 2 files changed, 24 insertions(+), 7 deletions(-) (limited to 'archinstall/lib') diff --git a/archinstall/lib/disk/blockdevice.py b/archinstall/lib/disk/blockdevice.py index c4707abd..c7b69205 100644 --- a/archinstall/lib/disk/blockdevice.py +++ b/archinstall/lib/disk/blockdevice.py @@ -312,4 +312,4 @@ class BlockDevice: log(f"Could not find {uuid}/{partuuid} in disk after 5 retries", level=logging.INFO) log(f"Cache: {self.part_cache}") log(f"Partitions: {self.partitions.items()}") - raise DiskError(f"New partition {uuid}/{partuuid} never showed up after adding new partition on {self}") + raise DiskError(f"Partition {uuid}/{partuuid} was never found on {self} despite several attempts.") diff --git a/archinstall/lib/disk/filesystem.py b/archinstall/lib/disk/filesystem.py index 66112ccc..96ac97a1 100644 --- a/archinstall/lib/disk/filesystem.py +++ b/archinstall/lib/disk/filesystem.py @@ -77,6 +77,7 @@ class Filesystem: raise KeyError(f"Could not create a MSDOS label on {self}") self.blockdevice.flush_cache() + time.sleep(3) prev_partition = None # We then iterate the partitions in order @@ -93,9 +94,16 @@ class Filesystem: # TODO: device_instance some times become None # print('Device instance:', partition['device_instance']) - elif (partition_uuid := partition.get('PARTUUID')) and (partition_instance := self.blockdevice.get_partition(uuid=partition_uuid)): - print(_("Re-using partition instance: {}").format(partition_instance)) - partition['device_instance'] = partition_instance + elif (partition_uuid := partition.get('PARTUUID')): + # We try to deal with both UUID and PARTUUID of a partition when it's being re-used. + # We should re-name or separate this logi based on partition.get('PARTUUID') and partition.get('UUID') + # but for now, lets just attempt to deal with both. + try: + partition['device_instance'] = self.blockdevice.get_partition(uuid=partition_uuid) + except DiskError: + partition['device_instance'] = self.blockdevice.get_partition(partuuid=partition_uuid) + + log(_("Re-using partition instance: {}").format(partition['device_instance']), level=logging.DEBUG, fg="gray") else: log(f"{self}.load_layout() doesn't know how to work without 'wipe' being set or UUID ({partition.get('PARTUUID')}) was given and found.", fg="yellow", level=logging.WARNING) continue @@ -208,6 +216,18 @@ class Filesystem: def add_partition(self, partition_type :str, start :str, end :str, partition_format :Optional[str] = None) -> Partition: log(f'Adding partition to {self.blockdevice}, {start}->{end}', level=logging.INFO) + if len(self.blockdevice.partitions) == 0: + # If it's a completely empty drive, and we're about to add partitions to it + # we need to make sure there's a filesystem label. + if self.mode == GPT: + if not self.parted_mklabel(self.blockdevice.device, "gpt"): + raise KeyError(f"Could not create a GPT label on {self}") + elif self.mode == MBR: + if not self.parted_mklabel(self.blockdevice.device, "msdos"): + raise KeyError(f"Could not create a MSDOS label on {self}") + + self.blockdevice.flush_cache() + previous_partuuids = [] for partition in self.blockdevice.partitions.values(): try: @@ -254,9 +274,6 @@ class Filesystem: else: log(f"Could not get UUID for partition. Waiting {storage.get('DISK_TIMEOUTS', 1) * count}s before retrying.",level=logging.DEBUG) time.sleep(storage.get('DISK_TIMEOUTS', 1) * count) - else: - log("Add partition is exiting due to excessive wait time", level=logging.ERROR, fg="red") - raise DiskError(f"New partition never showed up after adding new partition on {self}.") # TODO: This should never be able to happen log(f"Could not find the new PARTUUID after adding the partition.", level=logging.ERROR, fg="red") -- cgit v1.2.3-70-g09d2 From da8043ede934eaa4052417ff1cc655daa9490fed Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Fri, 27 May 2022 20:40:43 +0200 Subject: Removed debug information --- archinstall/lib/disk/filesystem.py | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) (limited to 'archinstall/lib') diff --git a/archinstall/lib/disk/filesystem.py b/archinstall/lib/disk/filesystem.py index 96ac97a1..99e4b339 100644 --- a/archinstall/lib/disk/filesystem.py +++ b/archinstall/lib/disk/filesystem.py @@ -84,15 +84,12 @@ class Filesystem: for partition in layout.get('partitions', []): # We don't want to re-add an existing partition (those containing a UUID already) if partition.get('wipe', False) and not partition.get('PARTUUID', None): - print(_("Adding partition....")) start = partition.get('start') or ( prev_partition and f'{prev_partition["device_instance"].end_sectors}s' or DEFAULT_PARTITION_START) partition['device_instance'] = self.add_partition(partition.get('type', 'primary'), start=start, end=partition.get('size', '100%'), partition_format=partition.get('filesystem', {}).get('format', 'btrfs')) - # TODO: device_instance some times become None - # print('Device instance:', partition['device_instance']) elif (partition_uuid := partition.get('PARTUUID')): # We try to deal with both UUID and PARTUUID of a partition when it's being re-used. @@ -107,7 +104,6 @@ class Filesystem: else: log(f"{self}.load_layout() doesn't know how to work without 'wipe' being set or UUID ({partition.get('PARTUUID')}) was given and found.", fg="yellow", level=logging.WARNING) continue - # raise ValueError(f"{self}.load_layout() doesn't know how to continue without a new partition definition or a UUID ({partition.get('PARTUUID')}) on the device ({self.blockdevice.get_partition(uuid=partition.get('PARTUUID'))}).") if partition.get('filesystem', {}).get('format', False): @@ -148,7 +144,7 @@ class Filesystem: while True: partition['filesystem']['format'] = input(f"Enter a valid fs-type for newly encrypted partition {partition['filesystem']['format']}: ").strip() if not partition['filesystem']['format'] or valid_fs_type(partition['filesystem']['format']) is False: - print(_("You need to enter a valid fs-type in order to continue. See `man parted` for valid fs-type's.")) + log(_("You need to enter a valid fs-type in order to continue. See `man parted` for valid fs-type's.")) continue break @@ -259,8 +255,6 @@ class Filesystem: new_partuuid_set = (set(previous_partuuids) ^ set(new_partition_uuids)) - print(previous_partuuids, new_partition_uuids, new_partuuid_set) - if len(new_partuuid_set) and (new_partuuid := new_partuuid_set.pop()): try: return self.blockdevice.get_partition(partuuid=new_partuuid) -- cgit v1.2.3-70-g09d2 From 3c04a6b19612cf79367a17a6d389479a3f3d6711 Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Fri, 27 May 2022 21:37:38 +0200 Subject: Fix mixup of mount options and fstype during mount (#1258) Fixed issue where `options` wasn't passed as `options=options` and got mixed up as fs-type. --- archinstall/lib/disk/filesystem.py | 7 ++++--- archinstall/lib/disk/partition.py | 1 + archinstall/lib/installer.py | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) (limited to 'archinstall/lib') diff --git a/archinstall/lib/disk/filesystem.py b/archinstall/lib/disk/filesystem.py index 99e4b339..f94b4b47 100644 --- a/archinstall/lib/disk/filesystem.py +++ b/archinstall/lib/disk/filesystem.py @@ -89,7 +89,8 @@ class Filesystem: partition['device_instance'] = self.add_partition(partition.get('type', 'primary'), start=start, end=partition.get('size', '100%'), - partition_format=partition.get('filesystem', {}).get('format', 'btrfs')) + partition_format=partition.get('filesystem', {}).get('format', 'btrfs'), + skip_mklabel=layout.get('wipe', False) is not False) elif (partition_uuid := partition.get('PARTUUID')): # We try to deal with both UUID and PARTUUID of a partition when it's being re-used. @@ -209,10 +210,10 @@ class Filesystem: # TODO: Implement this with declarative profiles instead. raise ValueError("Installation().use_entire_disk() has to be re-worked.") - def add_partition(self, partition_type :str, start :str, end :str, partition_format :Optional[str] = None) -> Partition: + def add_partition(self, partition_type :str, start :str, end :str, partition_format :Optional[str] = None, skip_mklabel :bool = False) -> Partition: log(f'Adding partition to {self.blockdevice}, {start}->{end}', level=logging.INFO) - if len(self.blockdevice.partitions) == 0: + if len(self.blockdevice.partitions) == 0 and skip_mklabel is False: # If it's a completely empty drive, and we're about to add partitions to it # we need to make sure there's a filesystem label. if self.mode == GPT: diff --git a/archinstall/lib/disk/partition.py b/archinstall/lib/disk/partition.py index bb1ffeb6..73c88597 100644 --- a/archinstall/lib/disk/partition.py +++ b/archinstall/lib/disk/partition.py @@ -481,6 +481,7 @@ class Partition: def mount(self, target :str, fs :Optional[str] = None, options :str = '') -> bool: if not self.mountpoint: log(f'Mounting {self} to {target}', level=logging.INFO) + if not fs: if not self.filesystem: raise DiskError(f'Need to format (or define) the filesystem on {self} before mounting.') diff --git a/archinstall/lib/installer.py b/archinstall/lib/installer.py index 3b53ec50..456f02d2 100644 --- a/archinstall/lib/installer.py +++ b/archinstall/lib/installer.py @@ -314,7 +314,7 @@ class Installer: if partition.get('filesystem',{}).get('mount_options',[]): mount_options = ','.join(partition['filesystem']['mount_options']) - mount_queue[mountpoint] = lambda instance=partition['device_instance'], target=f"{self.target}{mountpoint}", options=mount_options: instance.mount(target, options) + mount_queue[mountpoint] = lambda instance=partition['device_instance'], target=f"{self.target}{mountpoint}", options=mount_options: instance.mount(target, options=options) else: mount_queue[mountpoint] = lambda instance=partition['device_instance'], target=f"{self.target}{mountpoint}": instance.mount(target) -- cgit v1.2.3-70-g09d2 From 4d57630c90ca6bf400df55f03eb8a4c6b9ed9ca7 Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Fri, 27 May 2022 21:44:47 +0200 Subject: Removed usage of deprecated function --- archinstall/lib/installer.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'archinstall/lib') diff --git a/archinstall/lib/installer.py b/archinstall/lib/installer.py index 456f02d2..2a7f7457 100644 --- a/archinstall/lib/installer.py +++ b/archinstall/lib/installer.py @@ -13,7 +13,7 @@ from .disk import get_partitions_in_use, Partition from .general import SysCommand, generate_password from .hardware import has_uefi, is_vm, cpu_vendor from .locale_helpers import verify_keyboard_layout, verify_x11_keyboard_layout -from .disk.helpers import get_mount_info +from .disk.helpers import findmnt from .mirrors import use_mirrors from .plugins import plugins from .storage import storage @@ -327,7 +327,7 @@ class Installer: time.sleep(1) try: - get_mount_info(f"{self.target}{mountpoint}", traverse=False) + findmnt(f"{self.target}{mountpoint}", traverse=False) except DiskError: raise DiskError(f"Target {self.target}{mountpoint} never got mounted properly (unable to get mount information using findmnt).") -- cgit v1.2.3-70-g09d2 From 79fc663e3f83e070555474a7e6642bfa9b31e674 Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Fri, 27 May 2022 21:58:51 +0200 Subject: Version bump in prep for release + fixed a variable issue --- archinstall/__init__.py | 2 +- archinstall/lib/installer.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'archinstall/lib') diff --git a/archinstall/__init__.py b/archinstall/__init__.py index 1e72a60e..7edeaa80 100644 --- a/archinstall/__init__.py +++ b/archinstall/__init__.py @@ -50,7 +50,7 @@ from .lib.hsm import ( ) parser = ArgumentParser() -__version__ = "2.4.3rc1" +__version__ = "2.5.0" storage['__version__'] = __version__ # add the custome _ as a builtin, it can now be used anywhere in the diff --git a/archinstall/lib/installer.py b/archinstall/lib/installer.py index 2a7f7457..b2cd6306 100644 --- a/archinstall/lib/installer.py +++ b/archinstall/lib/installer.py @@ -327,7 +327,7 @@ class Installer: time.sleep(1) try: - findmnt(f"{self.target}{mountpoint}", traverse=False) + findmnt(pathlib.Path(f"{self.target}{mountpoint}"), traverse=False) except DiskError: raise DiskError(f"Target {self.target}{mountpoint} never got mounted properly (unable to get mount information using findmnt).") -- cgit v1.2.3-70-g09d2