diff --git a/.github/workflows/iso-build.yaml b/.github/workflows/iso-build.yaml index 73ab243f..dfaed9b8 100644 --- a/.github/workflows/iso-build.yaml +++ b/.github/workflows/iso-build.yaml @@ -33,7 +33,7 @@ jobs: - run: pacman-key --init - run: pacman --noconfirm -Sy archlinux-keyring - run: ./build_iso.sh - - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7 + - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: Arch Live ISO path: /tmp/archlive/out/*.iso diff --git a/.github/workflows/python-build.yml b/.github/workflows/python-build.yml index c7778604..e8fd87fa 100644 --- a/.github/workflows/python-build.yml +++ b/.github/workflows/python-build.yml @@ -33,7 +33,7 @@ jobs: archinstall --script guided -v archinstall --script only_hd -v archinstall --script minimal -v - - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7 + - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: archinstall path: dist/* diff --git a/.github/workflows/ruff-format.yaml b/.github/workflows/ruff-format.yaml index 7e8abbde..1a70721e 100644 --- a/.github/workflows/ruff-format.yaml +++ b/.github/workflows/ruff-format.yaml @@ -5,5 +5,5 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - - uses: astral-sh/ruff-action@4919ec5cf1f49eff0871dbcea0da843445b837e6 # v3.6.1 + - uses: astral-sh/ruff-action@0ce1b0bf8b818ef400413f810f8a11cdbda0034b # v4.0.0 - run: ruff format --diff diff --git a/.github/workflows/ruff-lint.yaml b/.github/workflows/ruff-lint.yaml index fa620172..09ca4166 100644 --- a/.github/workflows/ruff-lint.yaml +++ b/.github/workflows/ruff-lint.yaml @@ -5,4 +5,4 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - - uses: astral-sh/ruff-action@4919ec5cf1f49eff0871dbcea0da843445b837e6 # v3.6.1 + - uses: astral-sh/ruff-action@0ce1b0bf8b818ef400413f810f8a11cdbda0034b # v4.0.0 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index df30a04e..22adc703 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,7 +1,7 @@ default_stages: ['pre-commit'] repos: - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.15.10 + rev: v0.15.11 hooks: # fix unused imports and sort them - id: ruff @@ -31,7 +31,7 @@ repos: args: [--config=.flake8] fail_fast: true - repo: https://github.com/pre-commit/mirrors-mypy - rev: v1.20.0 + rev: v1.20.1 hooks: - id: mypy args: [ diff --git a/PKGBUILD b/PKGBUILD index 3103386e..e9ee1173 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -5,7 +5,7 @@ # Contributor: demostanis worlds pkgname=archinstall -pkgver=4.1 +pkgver=4.3 pkgrel=1 pkgdesc="Just another guided/automated Arch Linux installer with a twist" arch=(any) diff --git a/archinstall/applications/fonts.py b/archinstall/applications/fonts.py new file mode 100644 index 00000000..3fa54c67 --- /dev/null +++ b/archinstall/applications/fonts.py @@ -0,0 +1,14 @@ +from typing import TYPE_CHECKING + +from archinstall.lib.models.application import FontsConfiguration +from archinstall.lib.output import debug + +if TYPE_CHECKING: + from archinstall.lib.installer import Installer + + +class FontsApp: + def install(self, install_session: Installer, fonts_config: FontsConfiguration) -> None: + packages = [f.value for f in fonts_config.fonts] + debug(f'Installing fonts: {packages}') + install_session.add_additional_packages(packages) diff --git a/archinstall/applications/power_management.py b/archinstall/applications/power_management.py index 92ca4c7c..b9f32b05 100644 --- a/archinstall/applications/power_management.py +++ b/archinstall/applications/power_management.py @@ -21,6 +21,18 @@ class PowerManagementApp: 'tuned-ppd', ] + @property + def ppd_services(self) -> list[str]: + return [ + 'power-profiles-daemon.service', + ] + + @property + def tuned_services(self) -> list[str]: + return [ + 'tuned.service', + ] + def install( self, install_session: Installer, @@ -31,5 +43,7 @@ class PowerManagementApp: match power_management_config.power_management: case PowerManagement.POWER_PROFILES_DAEMON: install_session.add_additional_packages(self.ppd_packages) + install_session.enable_service(self.ppd_services) case PowerManagement.TUNED: install_session.add_additional_packages(self.tuned_packages) + install_session.enable_service(self.tuned_services) diff --git a/archinstall/default_profiles/profile.py b/archinstall/default_profiles/profile.py index b54ce389..cc56186f 100644 --- a/archinstall/default_profiles/profile.py +++ b/archinstall/default_profiles/profile.py @@ -212,6 +212,6 @@ class Profile: text = tr('Installed packages') + ':\n' for pkg in sorted(packages): - text += f'\t- {pkg}\n' + text += f' - {pkg}\n' return text diff --git a/archinstall/lib/applications/application_handler.py b/archinstall/lib/applications/application_handler.py index fb0ceced..7fcf5dba 100644 --- a/archinstall/lib/applications/application_handler.py +++ b/archinstall/lib/applications/application_handler.py @@ -3,6 +3,7 @@ from typing import TYPE_CHECKING from archinstall.applications.audio import AudioApp from archinstall.applications.bluetooth import BluetoothApp from archinstall.applications.firewall import FirewallApp +from archinstall.applications.fonts import FontsApp from archinstall.applications.power_management import PowerManagementApp from archinstall.applications.print_service import PrintServiceApp from archinstall.lib.models import Audio @@ -42,3 +43,9 @@ class ApplicationHandler: install_session, app_config.firewall_config, ) + + if app_config.fonts_config: + FontsApp().install( + install_session, + app_config.fonts_config, + ) diff --git a/archinstall/lib/applications/application_menu.py b/archinstall/lib/applications/application_menu.py index 5ef50441..990dcda7 100644 --- a/archinstall/lib/applications/application_menu.py +++ b/archinstall/lib/applications/application_menu.py @@ -10,6 +10,8 @@ from archinstall.lib.models.application import ( BluetoothConfiguration, Firewall, FirewallConfiguration, + FontPackage, + FontsConfiguration, PowerManagement, PowerManagementConfiguration, PrintServiceConfiguration, @@ -77,6 +79,13 @@ class ApplicationMenu(AbstractSubMenu[ApplicationConfiguration]): preview_action=self._prev_firewall, key='firewall_config', ), + MenuItem( + text=tr('Additional fonts'), + action=select_fonts, + value=self._app_config.fonts_config, + preview_action=self._prev_fonts, + key='fonts_config', + ), ] def _prev_power_management(self, item: MenuItem) -> str | None: @@ -115,6 +124,13 @@ class ApplicationMenu(AbstractSubMenu[ApplicationConfiguration]): return f'{tr("Firewall")}: {config.firewall.value}' return None + def _prev_fonts(self, item: MenuItem) -> str | None: + if item.value is not None: + config: FontsConfiguration = item.value + packages = ', '.join(f.value for f in config.fonts) + return f'{tr("Additional fonts")}: {packages}' + return None + async def select_power_management(preset: PowerManagementConfiguration | None = None) -> PowerManagementConfiguration | None: group = MenuItemGroup.from_enum(PowerManagement) @@ -217,3 +233,31 @@ async def select_firewall(preset: FirewallConfiguration | None = None) -> Firewa return FirewallConfiguration(firewall=result.get_value()) case ResultType.Reset: return None + + +async def select_fonts(preset: FontsConfiguration | None = None) -> FontsConfiguration | None: + items = [MenuItem(f'{f.value} ({f.description()})', value=f) for f in FontPackage] + group = MenuItemGroup(items) + + if preset: + for f in preset.fonts: + group.set_selected_by_value(f) + + result = await Selection[FontPackage]( + group, + header=tr('Select font packages to install'), + allow_skip=True, + allow_reset=True, + multi=True, + ).show() + + match result.type_: + case ResultType.Skip: + return preset + case ResultType.Selection: + selected = result.get_values() + if selected: + return FontsConfiguration(fonts=selected) + return None + case ResultType.Reset: + return None diff --git a/archinstall/lib/args.py b/archinstall/lib/args.py index c61bc5a1..79441a06 100644 --- a/archinstall/lib/args.py +++ b/archinstall/lib/args.py @@ -22,6 +22,7 @@ from archinstall.lib.models.locale import LocaleConfiguration from archinstall.lib.models.mirrors import MirrorConfiguration from archinstall.lib.models.network import NetworkConfiguration from archinstall.lib.models.packages import Repository +from archinstall.lib.models.pacman import PacmanConfiguration from archinstall.lib.models.profile import ProfileConfiguration from archinstall.lib.models.users import Password, User, UserSerialization from archinstall.lib.output import debug, error, logger, warn @@ -73,7 +74,7 @@ class ArchConfig: kernels: list[str] = field(default_factory=lambda: ['linux']) ntp: bool = True packages: list[str] = field(default_factory=list) - parallel_downloads: int = 0 + pacman_config: PacmanConfiguration = field(default_factory=PacmanConfiguration.default) timezone: str = 'UTC' services: list[str] = field(default_factory=list) custom_commands: list[str] = field(default_factory=list) @@ -104,7 +105,7 @@ class ArchConfig: 'kernels': self.kernels, 'ntp': self.ntp, 'packages': self.packages, - 'parallel_downloads': self.parallel_downloads, + 'pacman_config': self.pacman_config.json(), 'swap': self.swap, 'timezone': self.timezone, 'services': self.services, @@ -142,6 +143,7 @@ class ArchConfig: if archinstall_lang := args_config.get('archinstall-language', None): arch_config.archinstall_language = translation_handler.get_language_by_name(archinstall_lang) + translation_handler.activate(arch_config.archinstall_language, set_font=False) if disk_config := args_config.get('disk_config', {}): enc_password = args_config.get('encryption_password', '') @@ -209,8 +211,10 @@ class ArchConfig: if packages := args_config.get('packages', []): arch_config.packages = packages - if parallel_downloads := args_config.get('parallel_downloads', 0): - arch_config.parallel_downloads = parallel_downloads + if pacman_config := args_config.get('pacman_config', None): + arch_config.pacman_config = PacmanConfiguration.parse_arg(pacman_config) + elif parallel_downloads := args_config.get('parallel_downloads', 0): + arch_config.pacman_config = PacmanConfiguration(parallel_downloads=int(parallel_downloads)) swap_arg = args_config.get('swap') if swap_arg is not None: diff --git a/archinstall/lib/boot.py b/archinstall/lib/boot.py index f9cc1198..b1e8c888 100644 --- a/archinstall/lib/boot.py +++ b/archinstall/lib/boot.py @@ -4,7 +4,7 @@ from pathlib import Path from types import TracebackType from typing import ClassVar, Self -from archinstall.lib.command import SysCommand, SysCommandWorker, locate_binary +from archinstall.lib.command import SysCommand, SysCommandWorker from archinstall.lib.exceptions import SysCallError from archinstall.lib.output import error @@ -105,17 +105,7 @@ class Boot: return self.session.is_alive() def SysCommand(self, cmd: list[str], *args, **kwargs) -> SysCommand: # type: ignore[no-untyped-def] - if cmd[0][0] != '/' and cmd[0][:2] != './': - # This check is also done in SysCommand & SysCommandWorker. - # However, that check is done for `machinectl` and not for our chroot command. - # So this wrapper for SysCommand will do this additionally. - - cmd[0] = locate_binary(cmd[0]) - return SysCommand(['systemd-run', f'--machine={self.container_name}', '--pty', *cmd], *args, **kwargs) def SysCommandWorker(self, cmd: list[str], *args, **kwargs) -> SysCommandWorker: # type: ignore[no-untyped-def] - if cmd[0][0] != '/' and cmd[0][:2] != './': - cmd[0] = locate_binary(cmd[0]) - return SysCommandWorker(['systemd-run', f'--machine={self.container_name}', '--pty', *cmd], *args, **kwargs) diff --git a/archinstall/lib/disk/device_handler.py b/archinstall/lib/disk/device_handler.py index b54d45ad..7ac05a31 100644 --- a/archinstall/lib/disk/device_handler.py +++ b/archinstall/lib/disk/device_handler.py @@ -99,7 +99,7 @@ class DeviceHandler: fs_type = self._determine_fs_type(partition, lsblk_info) subvol_infos = [] - if fs_type == FilesystemType.Btrfs: + if fs_type == FilesystemType.BTRFS: subvol_infos = self.get_btrfs_info(partition.path, lsblk_info) partition_infos.append( @@ -147,8 +147,8 @@ class DeviceHandler: ) -> FilesystemType | None: try: if partition.fileSystem: - if partition.fileSystem.type == FilesystemType.LinuxSwap.parted_value: - return FilesystemType.LinuxSwap + if partition.fileSystem.type == FilesystemType.LINUX_SWAP.parted_value: + return FilesystemType.LINUX_SWAP return FilesystemType(partition.fileSystem.type) elif lsblk_info is not None: return FilesystemType(lsblk_info.fstype) if lsblk_info.fstype else None @@ -241,20 +241,20 @@ class DeviceHandler: options = [] match fs_type: - case FilesystemType.Btrfs | FilesystemType.Xfs: + case FilesystemType.BTRFS | FilesystemType.XFS: # Force overwrite options.append('-f') - case FilesystemType.F2fs: + case FilesystemType.F2FS: options.append('-f') options.extend(('-O', 'extra_attr')) - case FilesystemType.Ext2 | FilesystemType.Ext3 | FilesystemType.Ext4: + case FilesystemType.EXT2 | FilesystemType.EXT3 | FilesystemType.EXT4: # Force create options.append('-F') - case FilesystemType.Fat12 | FilesystemType.Fat16 | FilesystemType.Fat32: + case FilesystemType.FAT12 | FilesystemType.FAT16 | FilesystemType.FAT32: mkfs_type = 'fat' # Set FAT size options.extend(('-F', fs_type.value.removeprefix(mkfs_type))) - case FilesystemType.LinuxSwap: + case FilesystemType.LINUX_SWAP: command = 'mkswap' case _: raise UnknownFilesystemFormat(f'Filetype "{fs_type.value}" is not supported') @@ -342,7 +342,7 @@ class DeviceHandler: ) -> None: # when we require a delete and the partition to be (re)created # already exists then we have to delete it first - if requires_delete and part_mod.status in [ModificationStatus.Modify, ModificationStatus.Delete]: + if requires_delete and part_mod.status in [ModificationStatus.MODIFY, ModificationStatus.DELETE]: info(f'Delete existing partition: {part_mod.safe_dev_path}') part_info = self.find_partition(part_mod.safe_dev_path) @@ -351,7 +351,7 @@ class DeviceHandler: disk.deletePartition(part_info.partition) - if part_mod.status == ModificationStatus.Delete: + if part_mod.status == ModificationStatus.DELETE: return start_sector = part_mod.start.convert( @@ -505,7 +505,7 @@ class DeviceHandler: debug(f'Unmounting: {partition.path}') # un-mount for existing encrypted partitions - if partition.fs_type == FilesystemType.Crypto_luks: + if partition.fs_type == FilesystemType.CRYPTO_LUKS: Luks2(partition.path).lock() else: umount(partition.path, recursive=True) diff --git a/archinstall/lib/disk/disk_menu.py b/archinstall/lib/disk/disk_menu.py index 35f11331..9743ee78 100644 --- a/archinstall/lib/disk/disk_menu.py +++ b/archinstall/lib/disk/disk_menu.py @@ -23,7 +23,6 @@ from archinstall.lib.models.device import ( LvmLayoutType, LvmVolume, LvmVolumeGroup, - LvmVolumeStatus, ModificationStatus, PartitionFlag, PartitionModification, @@ -281,7 +280,7 @@ class DiskLayoutConfigurationMenu(AbstractSubMenu[DiskMenuConfig]): if enc_config.encryption_password: output += tr('Password') + f': {enc_config.encryption_password.hidden()}\n' - if enc_type != EncryptionType.NoEncryption: + if enc_type != EncryptionType.NO_ENCRYPTION: output += tr('Iteration time') + f': {enc_config.iter_time or DEFAULT_ITER_TIME}ms\n' if enc_config.partitions: @@ -503,22 +502,22 @@ def _boot_partition(sector_size: SectorSize, using_gpt: bool) -> PartitionModifi # boot partition return PartitionModification( - status=ModificationStatus.Create, - type=PartitionType.Primary, + status=ModificationStatus.CREATE, + type=PartitionType.PRIMARY, start=start, length=size, mountpoint=Path('/boot'), - fs_type=FilesystemType.Fat32, + fs_type=FilesystemType.FAT32, flags=flags, ) async def select_main_filesystem_format() -> FilesystemType: items = [ - MenuItem('btrfs', value=FilesystemType.Btrfs), - MenuItem('ext4', value=FilesystemType.Ext4), - MenuItem('xfs', value=FilesystemType.Xfs), - MenuItem('f2fs', value=FilesystemType.F2fs), + MenuItem(FilesystemType.BTRFS.value, value=FilesystemType.BTRFS), + MenuItem(FilesystemType.EXT4.value, value=FilesystemType.EXT4), + MenuItem(FilesystemType.XFS.value, value=FilesystemType.XFS), + MenuItem(FilesystemType.F2FS.value, value=FilesystemType.F2FS), ] group = MenuItemGroup(items, sort_items=False) @@ -601,7 +600,7 @@ async def suggest_single_disk_layout( available_space = total_size min_size_to_allow_home_part = Size(64, Unit.GiB, sector_size) - if filesystem_type == FilesystemType.Btrfs: + if filesystem_type == FilesystemType.BTRFS: prompt = tr('Would you like to use BTRFS subvolumes with a default structure?') + '\n' result = await Confirmation( @@ -655,8 +654,8 @@ async def suggest_single_disk_layout( root_length = available_space - root_start root_partition = PartitionModification( - status=ModificationStatus.Create, - type=PartitionType.Primary, + status=ModificationStatus.CREATE, + type=PartitionType.PRIMARY, start=root_start, length=root_length, mountpoint=Path('/') if not using_subvolumes else None, @@ -680,8 +679,8 @@ async def suggest_single_disk_layout( flags.append(PartitionFlag.LINUX_HOME) home_partition = PartitionModification( - status=ModificationStatus.Create, - type=PartitionType.Primary, + status=ModificationStatus.CREATE, + type=PartitionType.PRIMARY, start=home_start, length=home_length, mountpoint=Path('/home'), @@ -734,7 +733,7 @@ async def suggest_multi_disk_layout( _ = await Notify(text).show() return [] - if filesystem_type == FilesystemType.Btrfs: + if filesystem_type == FilesystemType.BTRFS: mount_options = await select_mount_options() device_paths = ', '.join(str(d.device_info.path) for d in devices) @@ -765,8 +764,8 @@ async def suggest_multi_disk_layout( # add root partition to the root device root_partition = PartitionModification( - status=ModificationStatus.Create, - type=PartitionType.Primary, + status=ModificationStatus.CREATE, + type=PartitionType.PRIMARY, start=root_start, length=root_length, mountpoint=Path('/'), @@ -787,8 +786,8 @@ async def suggest_multi_disk_layout( # add home partition to home device home_partition = PartitionModification( - status=ModificationStatus.Create, - type=PartitionType.Primary, + status=ModificationStatus.CREATE, + type=PartitionType.PRIMARY, start=home_start, length=home_length, mountpoint=Path('/home'), @@ -817,7 +816,7 @@ async def suggest_lvm_layout( if not filesystem_type: filesystem_type = await select_main_filesystem_format() - if filesystem_type == FilesystemType.Btrfs: + if filesystem_type == FilesystemType.BTRFS: prompt = tr('Would you like to use BTRFS subvolumes with a default structure?') + '\n' result = await Confirmation(header=prompt, allow_skip=False, preset=True).show() @@ -851,7 +850,7 @@ async def suggest_lvm_layout( lvm_vol_group = LvmVolumeGroup(vg_grp_name, pvs=other_part) root_vol = LvmVolume( - status=LvmVolumeStatus.Create, + status=ModificationStatus.CREATE, name='root', fs_type=filesystem_type, length=root_vol_size, @@ -864,7 +863,7 @@ async def suggest_lvm_layout( if home_volume: home_vol = LvmVolume( - status=LvmVolumeStatus.Create, + status=ModificationStatus.CREATE, name='home', fs_type=filesystem_type, length=home_vol_size, diff --git a/archinstall/lib/disk/encryption_menu.py b/archinstall/lib/disk/encryption_menu.py index b3950f05..39c631cd 100644 --- a/archinstall/lib/disk/encryption_menu.py +++ b/archinstall/lib/disk/encryption_menu.py @@ -105,19 +105,19 @@ class DiskEncryptionMenu(AbstractSubMenu[DiskEncryption]): def _check_dep_enc_type(self) -> bool: enc_type: EncryptionType | None = self._item_group.find_by_key('encryption_type').value - if enc_type and enc_type != EncryptionType.NoEncryption: + if enc_type and enc_type != EncryptionType.NO_ENCRYPTION: return True return False def _check_dep_partitions(self) -> bool: enc_type: EncryptionType | None = self._item_group.find_by_key('encryption_type').value - if enc_type and enc_type in [EncryptionType.Luks, EncryptionType.LvmOnLuks]: + if enc_type and enc_type in [EncryptionType.LUKS, EncryptionType.LVM_ON_LUKS]: return True return False def _check_dep_lvm_vols(self) -> bool: enc_type: EncryptionType | None = self._item_group.find_by_key('encryption_type').value - if enc_type and enc_type == EncryptionType.LuksOnLvm: + if enc_type and enc_type == EncryptionType.LUKS_ON_LVM: return True return False @@ -137,13 +137,13 @@ class DiskEncryptionMenu(AbstractSubMenu[DiskEncryption]): assert enc_partitions is not None assert enc_lvm_vols is not None - if enc_type in [EncryptionType.Luks, EncryptionType.LvmOnLuks] and enc_partitions: + if enc_type in [EncryptionType.LUKS, EncryptionType.LVM_ON_LUKS] and enc_partitions: enc_lvm_vols = [] - if enc_type == EncryptionType.LuksOnLvm: + if enc_type == EncryptionType.LUKS_ON_LVM: enc_partitions = [] - if enc_type != EncryptionType.NoEncryption and enc_password and (enc_partitions or enc_lvm_vols): + if enc_type != EncryptionType.NO_ENCRYPTION and enc_password and (enc_partitions or enc_lvm_vols): return DiskEncryption( encryption_password=enc_password, encryption_type=enc_type, @@ -227,7 +227,7 @@ class DiskEncryptionMenu(AbstractSubMenu[DiskEncryption]): iter_time = item.value enc_type = self._item_group.find_by_key('encryption_type').value - if iter_time and enc_type != EncryptionType.NoEncryption: + if iter_time and enc_type != EncryptionType.NO_ENCRYPTION: return f'{tr("Iteration time")}: {iter_time}ms' return None @@ -240,9 +240,9 @@ async def select_encryption_type( options: list[EncryptionType] = [] if lvm_config: - options = [EncryptionType.LvmOnLuks, EncryptionType.LuksOnLvm] + options = [EncryptionType.LVM_ON_LUKS, EncryptionType.LUKS_ON_LVM] else: - options = [EncryptionType.Luks] + options = [EncryptionType.LUKS] if not preset: preset = options[0] @@ -321,7 +321,7 @@ async def select_partitions_to_encrypt( avail_partitions = [p for p in partitions if not p.exists()] if avail_partitions: - group = MenuItemGroup.from_objects(partitions) + group = MenuItemGroup.from_objects(avail_partitions) group.set_selected_by_value(preset) result = await Table[PartitionModification]( diff --git a/archinstall/lib/disk/filesystem.py b/archinstall/lib/disk/filesystem.py index 28786530..1afa8c6e 100644 --- a/archinstall/lib/disk/filesystem.py +++ b/archinstall/lib/disk/filesystem.py @@ -70,7 +70,7 @@ class FilesystemHandler: self._format_partitions(mod.partitions) for part_mod in mod.partitions: - if part_mod.fs_type == FilesystemType.Btrfs and part_mod.is_create_or_modify(): + if part_mod.fs_type == FilesystemType.BTRFS and part_mod.is_create_or_modify(): device_handler.create_btrfs_volumes(part_mod, enc_conf=self._enc_config) def _format_partitions( @@ -113,7 +113,7 @@ class FilesystemHandler: # verify that all partitions have a path set (which implies that they have been created) lambda x: x.dev_path is None: ValueError('When formatting, all partitions must have a path set'), # crypto luks is not a valid file system type - lambda x: x.fs_type is FilesystemType.Crypto_luks: ValueError('Crypto luks cannot be set as a filesystem type'), + lambda x: x.fs_type is FilesystemType.CRYPTO_LUKS: ValueError('Crypto luks cannot be set as a filesystem type'), # file system type must be set lambda x: x.fs_type is None: ValueError('File system type must be set for modification'), } @@ -139,7 +139,7 @@ class FilesystemHandler: self._format_lvm_vols(self._disk_config.lvm_config) def _setup_lvm_encrypted(self, lvm_config: LvmConfiguration, enc_config: DiskEncryption) -> None: - if enc_config.encryption_type == EncryptionType.LvmOnLuks: + if enc_config.encryption_type == EncryptionType.LVM_ON_LUKS: enc_mods = self._encrypt_partitions(enc_config, lock_after_create=False) self._setup_lvm(lvm_config, enc_mods) @@ -148,7 +148,7 @@ class FilesystemHandler: # Don't close LVM or LUKS during setup - keep everything active # The installation phase will handle unlocking and mounting # Closing causes "parent leaked" and lvchange errors - elif enc_config.encryption_type == EncryptionType.LuksOnLvm: + elif enc_config.encryption_type == EncryptionType.LUKS_ON_LVM: self._setup_lvm(lvm_config) enc_vols = self._encrypt_lvm_vols(lvm_config, enc_config, False) self._format_lvm_vols(lvm_config, enc_vols) @@ -230,7 +230,7 @@ class FilesystemHandler: # find the mapper device yet device_handler.format(vol.fs_type, path) - if vol.fs_type == FilesystemType.Btrfs: + if vol.fs_type == FilesystemType.BTRFS: device_handler.create_lvm_btrfs_subvolumes(path, vol.btrfs_subvols, vol.mount_options) def _lvm_create_pvs( @@ -318,7 +318,7 @@ class FilesystemHandler: # from arch wiki: # If a logical volume will be formatted with ext4, leave at least 256 MiB # free space in the volume group to allow using e2scrub - if any([vol.fs_type == FilesystemType.Ext4 for vol in vol_gp.volumes]): + if any([vol.fs_type == FilesystemType.EXT4 for vol in vol_gp.volumes]): largest_vol = max(vol_gp.volumes, key=lambda x: x.length) lvm_vol_reduce( diff --git a/archinstall/lib/disk/partitioning_menu.py b/archinstall/lib/disk/partitioning_menu.py index feb97c6c..7e07d776 100644 --- a/archinstall/lib/disk/partitioning_menu.py +++ b/archinstall/lib/disk/partitioning_menu.py @@ -57,8 +57,8 @@ class DiskSegment: return self.segment.table_data() part_mod = PartitionModification( - status=ModificationStatus.Create, - type=PartitionType._Unknown, + status=ModificationStatus.CREATE, + type=PartitionType._UNKNOWN, start=self.segment.start, length=self.segment.length, ) @@ -209,7 +209,7 @@ class PartitioningList(ListManager[DiskSegment]): @override def selected_action_display(self, selection: DiskSegment) -> str: if isinstance(selection.segment, PartitionModification): - if selection.segment.status == ModificationStatus.Create: + if selection.segment.status == ModificationStatus.CREATE: return tr('Partition - New') elif selection.segment.is_delete() and selection.segment.dev_path: title = tr('Partition') + '\n\n' @@ -255,7 +255,7 @@ class PartitioningList(ListManager[DiskSegment]): ] # non btrfs partitions shouldn't get btrfs options - if selection.segment.fs_type != FilesystemType.Btrfs: + if selection.segment.fs_type != FilesystemType.BTRFS: not_filter += [ self._actions['btrfs_mark_compressed'], self._actions['btrfs_mark_nodatacow'], @@ -332,7 +332,7 @@ class PartitioningList(ListManager[DiskSegment]): partition.flags = [] partition.set_flag(PartitionFlag.SWAP) # btrfs subvolumes will define mountpoints - if fs_type == FilesystemType.Btrfs: + if fs_type == FilesystemType.BTRFS: partition.mountpoint = None case 'btrfs_mark_compressed': self._toggle_mount_option(partition, BtrfsMountOption.compress) @@ -357,7 +357,7 @@ class PartitioningList(ListManager[DiskSegment]): data: list[DiskSegment], ) -> list[DiskSegment]: if entry.is_exists_or_modify(): - entry.status = ModificationStatus.Delete + entry.status = ModificationStatus.DELETE part_mods = self.get_part_mods(data) else: part_mods = [d.segment for d in data if isinstance(d.segment, PartitionModification) and d.segment != entry] @@ -391,20 +391,20 @@ class PartitioningList(ListManager[DiskSegment]): async def _prompt_formatting(self, partition: PartitionModification) -> None: # an existing partition can toggle between Exist or Modify if partition.is_modify(): - partition.status = ModificationStatus.Exist + partition.status = ModificationStatus.EXIST return elif partition.exists(): - partition.status = ModificationStatus.Modify + partition.status = ModificationStatus.MODIFY # If we mark a partition for formatting, but the format is CRYPTO LUKS, there's no point in formatting it really # without asking the user which inner-filesystem they want to use. Since the flag 'encrypted' = True is already set, # it's safe to change the filesystem for this partition. - if partition.fs_type == FilesystemType.Crypto_luks: + if partition.fs_type == FilesystemType.CRYPTO_LUKS: prompt = tr('This partition is currently encrypted, to format it a filesystem has to be specified') + '\n' fs_type = await self._prompt_partition_fs_type(prompt) partition.fs_type = fs_type - if fs_type == FilesystemType.Btrfs: + if fs_type == FilesystemType.BTRFS: partition.mountpoint = None async def _prompt_mountpoint(self) -> Path: @@ -417,7 +417,7 @@ class PartitioningList(ListManager[DiskSegment]): return mountpoint async def _prompt_partition_fs_type(self, prompt: str | None = None) -> FilesystemType: - fs_types = filter(lambda fs: fs != FilesystemType.Crypto_luks, FilesystemType) + fs_types = filter(lambda fs: fs != FilesystemType.CRYPTO_LUKS, FilesystemType) items = [MenuItem(fs.value, value=fs) for fs in fs_types] group = MenuItemGroup(items, sort_items=False) @@ -522,12 +522,12 @@ class PartitioningList(ListManager[DiskSegment]): fs_type = await self._prompt_partition_fs_type() mountpoint = None - if fs_type not in (FilesystemType.Btrfs, FilesystemType.LinuxSwap): + if fs_type not in (FilesystemType.BTRFS, FilesystemType.LINUX_SWAP): mountpoint = await self._prompt_mountpoint() partition = PartitionModification( - status=ModificationStatus.Create, - type=PartitionType.Primary, + status=ModificationStatus.CREATE, + type=PartitionType.PRIMARY, start=free_space.start, length=length, fs_type=fs_type, diff --git a/archinstall/lib/general/__init__.py b/archinstall/lib/general/__init__.py index 21add834..7c082d84 100644 --- a/archinstall/lib/general/__init__.py +++ b/archinstall/lib/general/__init__.py @@ -1,5 +1,4 @@ from archinstall.lib.general.general_menu import ( - add_number_of_parallel_downloads, select_archinstall_language, select_hostname, select_ntp, @@ -8,7 +7,6 @@ from archinstall.lib.general.general_menu import ( from archinstall.lib.general.system_menu import select_driver, select_kernel, select_swap __all__ = [ - 'add_number_of_parallel_downloads', 'select_archinstall_language', 'select_driver', 'select_hostname', diff --git a/archinstall/lib/general/general_menu.py b/archinstall/lib/general/general_menu.py index b6cf9a75..257b61e5 100644 --- a/archinstall/lib/general/general_menu.py +++ b/archinstall/lib/general/general_menu.py @@ -3,7 +3,6 @@ from enum import Enum from archinstall.lib.locale.utils import list_timezones from archinstall.lib.menu.helpers import Confirmation, Input, Selection from archinstall.lib.output import warn -from archinstall.lib.pathnames import PACMAN_CONF from archinstall.lib.translationhandler import Language, tr from archinstall.tui.ui.menu_item import MenuItem, MenuItemGroup from archinstall.tui.ui.result import ResultType @@ -106,9 +105,9 @@ async def select_archinstall_language(languages: list[Language], preset: Languag group = MenuItemGroup(items, sort_items=True) group.set_focus_by_value(preset) - title = 'NOTE: If a language can not displayed properly, a proper font must be set manually in the console.\n' - title += 'All available fonts can be found in "/usr/share/kbd/consolefonts"\n' - title += 'e.g. setfont LatGrkCyr-8x16 (to display latin/greek/cyrillic characters)\n' + title = 'NOTE: Console font will be set automatically for supported languages.\n' + title += 'For other languages, fonts can be found in "/usr/share/kbd/consolefonts"\n' + title += 'and set manually with: setfont \n' result = await Selection[Language]( header=title, @@ -126,55 +125,6 @@ async def select_archinstall_language(languages: list[Language], preset: Languag raise ValueError('Language selection not handled') -async def add_number_of_parallel_downloads(preset: int = 1) -> int | None: - max_recommended = 5 - - header = tr('This option enables the number of parallel downloads that can occur during package downloads') + '\n' - header += tr(' - Maximum recommended value : {} ( Allows {} parallel downloads at a time )').format(max_recommended, max_recommended) + '\n\n' - header += tr('Enter the number of parallel downloads to be enabled') - - def validator(s: str) -> str | None: - try: - value = int(s) - - if 1 <= value <= max_recommended: - return None - - return tr('Value must be between 1 and {}').format(max_recommended) - except Exception: - return tr('Please enter a valid number') - - result = await Input( - header=header, - allow_skip=True, - allow_reset=True, - validator_callback=validator, - default_value=str(preset), - ).show() - - downloads = 1 - - match result.type_: - case ResultType.Skip: - return preset - case ResultType.Reset: - return downloads - case ResultType.Selection: - downloads = int(result.get_value()) - - with PACMAN_CONF.open() as f: - pacman_conf = f.read().split('\n') - - with PACMAN_CONF.open('w') as fwrite: - for line in pacman_conf: - if 'ParallelDownloads' in line: - fwrite.write(f'ParallelDownloads = {downloads}\n') - else: - fwrite.write(f'{line}\n') - - return downloads - - async def select_post_installation(elapsed_time: float | None = None) -> PostInstallationAction: header = 'Installation completed' if elapsed_time is not None: diff --git a/archinstall/lib/global_menu.py b/archinstall/lib/global_menu.py index b81194b9..fa711b39 100644 --- a/archinstall/lib/global_menu.py +++ b/archinstall/lib/global_menu.py @@ -7,7 +7,7 @@ from archinstall.lib.authentication.authentication_menu import AuthenticationMen from archinstall.lib.bootloader.bootloader_menu import BootloaderMenu from archinstall.lib.configuration import save_config from archinstall.lib.disk.disk_menu import DiskLayoutConfigurationMenu -from archinstall.lib.general.general_menu import add_number_of_parallel_downloads, select_hostname, select_ntp, select_timezone +from archinstall.lib.general.general_menu import select_hostname, select_ntp, select_timezone from archinstall.lib.general.system_menu import select_kernel, select_swap from archinstall.lib.hardware import SysInfo from archinstall.lib.locale.locale_menu import LocaleMenu @@ -22,12 +22,15 @@ from archinstall.lib.models.locale import LocaleConfiguration from archinstall.lib.models.mirrors import MirrorConfiguration from archinstall.lib.models.network import NetworkConfiguration, NicType from archinstall.lib.models.packages import Repository +from archinstall.lib.models.pacman import PacmanConfiguration from archinstall.lib.models.profile import ProfileConfiguration from archinstall.lib.network.network_menu import select_network from archinstall.lib.output import FormattedOutput from archinstall.lib.packages.packages import list_available_packages, select_additional_packages from archinstall.lib.pacman.config import PacmanConfig +from archinstall.lib.pacman.pacman_menu import PacmanMenu from archinstall.lib.translationhandler import Language, tr, translation_handler +from archinstall.tui.ui.components import tui from archinstall.tui.ui.menu_item import MenuItem, MenuItemGroup @@ -37,11 +40,13 @@ class GlobalMenu(AbstractMenu[None]): arch_config: ArchConfig, mirror_list_handler: MirrorListHandler | None = None, skip_boot: bool = False, + advanced: bool = False, title: str | None = None, ) -> None: self._arch_config = arch_config self._mirror_list_handler = mirror_list_handler self._skip_boot = skip_boot + self._advanced = advanced self._uefi = SysInfo.has_uefi() menu_options = self._get_menu_options() @@ -138,11 +143,11 @@ class GlobalMenu(AbstractMenu[None]): key='network_config', ), MenuItem( - text=tr('Parallel Downloads'), - action=add_number_of_parallel_downloads, - value=1, - preview_action=self._prev_parallel_dw, - key='parallel_downloads', + text=tr('Pacman'), + action=self._pacman_configuration, + value=PacmanConfiguration.default(), + preview_action=self._prev_pacman_config, + key='pacman_config', ), MenuItem( text=tr('Additional packages'), @@ -276,6 +281,8 @@ class GlobalMenu(AbstractMenu[None]): if o.key is not None: self._item_group.find_by_key(o.key).text = o.text + tui.translate_bindings() + async def _locale_selection(self, preset: LocaleConfiguration) -> LocaleConfiguration | None: locale_config = await LocaleMenu(preset).show() return locale_config @@ -411,10 +418,18 @@ class GlobalMenu(AbstractMenu[None]): return f'{tr("Hostname")}: {item.value}' return None - def _prev_parallel_dw(self, item: MenuItem) -> str | None: - if item.value is not None: - return f'{tr("Parallel Downloads")}: {item.value}' - return None + async def _pacman_configuration(self, preset: PacmanConfiguration) -> PacmanConfiguration | None: + return await PacmanMenu(preset, advanced=self._advanced).show() + + def _prev_pacman_config(self, item: MenuItem) -> str | None: + if not item.value: + return None + config: PacmanConfiguration = item.value + output = '' + if self._advanced: + output += '{}: {}\n'.format(tr('Parallel Downloads'), config.parallel_downloads) + output += '{}: {}'.format(tr('Color'), config.color) + return output def _prev_kernel(self, item: MenuItem) -> str | None: if item.value: @@ -472,11 +487,11 @@ class GlobalMenu(AbstractMenu[None]): if efi_partition is None: return 'EFI system partition (ESP) not found' - if efi_partition.fs_type not in [FilesystemType.Fat12, FilesystemType.Fat16, FilesystemType.Fat32]: + if efi_partition.fs_type not in [FilesystemType.FAT12, FilesystemType.FAT16, FilesystemType.FAT32]: return 'ESP must be formatted as a FAT filesystem' if bootloader == Bootloader.Limine: - if boot_partition.fs_type not in [FilesystemType.Fat12, FilesystemType.Fat16, FilesystemType.Fat32]: + if boot_partition.fs_type not in [FilesystemType.FAT12, FilesystemType.FAT16, FilesystemType.FAT32]: return 'Limine does not support booting with a non-FAT boot partition' elif bootloader == Bootloader.Refind: diff --git a/archinstall/lib/hardware.py b/archinstall/lib/hardware.py index ae790feb..09b3eb5f 100644 --- a/archinstall/lib/hardware.py +++ b/archinstall/lib/hardware.py @@ -73,7 +73,7 @@ class GfxDriver(Enum): text = tr('Installed packages') + ':\n' for p in sorted(pkg_names): - text += f'\t- {p}\n' + text += f' - {p}\n' return text diff --git a/archinstall/lib/installer.py b/archinstall/lib/installer.py index 463901fe..973e80ac 100644 --- a/archinstall/lib/installer.py +++ b/archinstall/lib/installer.py @@ -48,12 +48,13 @@ from archinstall.lib.models.locale import LocaleConfiguration from archinstall.lib.models.mirrors import MirrorConfiguration from archinstall.lib.models.network import Nic from archinstall.lib.models.packages import Repository +from archinstall.lib.models.pacman import PacmanConfiguration from archinstall.lib.models.users import User from archinstall.lib.output import debug, error, info, log, logger, warn from archinstall.lib.packages.packages import installed_package from archinstall.lib.pacman.config import PacmanConfig from archinstall.lib.pacman.pacman import Pacman -from archinstall.lib.pathnames import PACMAN_CONF +from archinstall.lib.pathnames import MIRRORLIST, PACMAN_CONF from archinstall.lib.plugins import plugins from archinstall.lib.translationhandler import tr @@ -81,7 +82,7 @@ class Installer: self.kernels = kernels or ['linux'] self._disk_config = disk_config - self._disk_encryption = disk_config.disk_encryption or DiskEncryption(EncryptionType.NoEncryption) + self._disk_encryption = disk_config.disk_encryption or DiskEncryption(EncryptionType.NO_ENCRYPTION) self.target: Path = target self.init_time = time.strftime('%Y-%m-%d_%H-%M-%S') @@ -253,16 +254,16 @@ class Installer: luks_handlers: dict[Any, Luks2] = {} match self._disk_encryption.encryption_type: - case EncryptionType.NoEncryption: + case EncryptionType.NO_ENCRYPTION: self._import_lvm() self._mount_lvm_layout() - case EncryptionType.Luks: + case EncryptionType.LUKS: luks_handlers = self._prepare_luks_partitions(self._disk_encryption.partitions) - case EncryptionType.LvmOnLuks: + case EncryptionType.LVM_ON_LUKS: luks_handlers = self._prepare_luks_partitions(self._disk_encryption.partitions) self._import_lvm() self._mount_lvm_layout(luks_handlers) - case EncryptionType.LuksOnLvm: + case EncryptionType.LUKS_ON_LVM: self._import_lvm() luks_handlers = self._prepare_luks_lvm(self._disk_encryption.lvm_volumes) self._mount_lvm_layout(luks_handlers) @@ -368,7 +369,7 @@ class Installer: if part_mod.mountpoint: target = self.target / part_mod.relative_mountpoint mount(part_mod.dev_path, target, options=part_mod.mount_options) - elif part_mod.fs_type == FilesystemType.Btrfs: + elif part_mod.fs_type == FilesystemType.BTRFS: # Only mount BTRFS subvolumes that have mountpoints specified subvols_with_mountpoints = [sv for sv in part_mod.btrfs_subvols if sv.mountpoint is not None] if subvols_with_mountpoints: @@ -381,12 +382,12 @@ class Installer: swapon(part_mod.dev_path) def _mount_lvm_vol(self, volume: LvmVolume) -> None: - if volume.fs_type != FilesystemType.Btrfs: + if volume.fs_type != FilesystemType.BTRFS: if volume.mountpoint and volume.dev_path: target = self.target / volume.relative_mountpoint mount(volume.dev_path, target, options=volume.mount_options) - if volume.fs_type == FilesystemType.Btrfs and volume.dev_path: + if volume.fs_type == FilesystemType.BTRFS and volume.dev_path: # Only mount BTRFS subvolumes that have mountpoints specified subvols_with_mountpoints = [sv for sv in volume.btrfs_subvols if sv.mountpoint is not None] if subvols_with_mountpoints: @@ -396,7 +397,7 @@ class Installer: if not luks_handler.mapper_dev: return None - if part_mod.fs_type == FilesystemType.Btrfs and part_mod.btrfs_subvols: + if part_mod.fs_type == FilesystemType.BTRFS and part_mod.btrfs_subvols: # Only mount BTRFS subvolumes that have mountpoints specified subvols_with_mountpoints = [sv for sv in part_mod.btrfs_subvols if sv.mountpoint is not None] if subvols_with_mountpoints: @@ -406,12 +407,12 @@ class Installer: mount(luks_handler.mapper_dev, target, options=part_mod.mount_options) def _mount_luks_volume(self, volume: LvmVolume, luks_handler: Luks2) -> None: - if volume.fs_type != FilesystemType.Btrfs: + if volume.fs_type != FilesystemType.BTRFS: if volume.mountpoint and luks_handler.mapper_dev: target = self.target / volume.relative_mountpoint mount(luks_handler.mapper_dev, target, options=volume.mount_options) - if volume.fs_type == FilesystemType.Btrfs and luks_handler.mapper_dev: + if volume.fs_type == FilesystemType.BTRFS and luks_handler.mapper_dev: # Only mount BTRFS subvolumes that have mountpoints specified subvols_with_mountpoints = [sv for sv in volume.btrfs_subvols if sv.mountpoint is not None] if subvols_with_mountpoints: @@ -432,11 +433,11 @@ class Installer: def generate_key_files(self) -> None: match self._disk_encryption.encryption_type: - case EncryptionType.Luks: + case EncryptionType.LUKS: self._generate_key_files_partitions() - case EncryptionType.LuksOnLvm: + case EncryptionType.LUKS_ON_LVM: self._generate_key_file_lvm_volumes() - case EncryptionType.LvmOnLuks: + case EncryptionType.LVM_ON_LUKS: # currently LvmOnLuks only supports a single # partitioning layout (boot + partition) # so we won't need any keyfile generation atm @@ -504,10 +505,9 @@ class Installer: # Copy over the install log (if there is one) to the install medium if # at least the base has been strapped in, otherwise we won't have a filesystem/structure to copy to. if self._helper_flags.get('base-strapped', False) is True: - absolute_logfile = logger.path - logfile_target = self.target / absolute_logfile - logfile_target.parent.mkdir(parents=True, exist_ok=True) - absolute_logfile.copy(logfile_target, preserve_metadata=True) + logfile_target = self.target / LPath(logger.directory).relative_to_root() + logfile_target.mkdir(parents=True, exist_ok=True) + logger.path.copy_into(logfile_target, preserve_metadata=True) return True @@ -565,9 +565,12 @@ class Installer: if result := plugin.on_mirrors(mirror_config): mirror_config = result - root = self.target if on_target else Path('/') - mirrorlist_config = root / 'etc/pacman.d/mirrorlist' - pacman_config = root / PACMAN_CONF.relative_to_root() + if on_target: + mirrorlist_config = self.target / MIRRORLIST.relative_to_root() + pacman_config = self.target / PACMAN_CONF.relative_to_root() + else: + mirrorlist_config = MIRRORLIST + pacman_config = PACMAN_CONF repositories_config = mirror_config.repositories_config() if repositories_config: @@ -863,7 +866,7 @@ class Installer: self._base_packages.append(pkg) # https://github.com/archlinux/archinstall/issues/1837 - if fs_type == FilesystemType.Btrfs: + if fs_type == FilesystemType.BTRFS: self._disable_fstrim = True def _prepare_encrypt(self, before: str = 'filesystems') -> None: @@ -883,6 +886,7 @@ class Installer: mkinitcpio: bool = True, hostname: str | None = None, locale_config: LocaleConfiguration | None = LocaleConfiguration.default(), + pacman_config: PacmanConfiguration | None = None, ) -> None: if self._disk_config.lvm_config: lvm = 'lvm2' @@ -894,7 +898,7 @@ class Installer: if vol.fs_type is not None: self._prepare_fs_type(vol.fs_type, vol.mountpoint) - types = (EncryptionType.LvmOnLuks, EncryptionType.LuksOnLvm) + types = (EncryptionType.LVM_ON_LUKS, EncryptionType.LUKS_ON_LVM) if self._disk_encryption.encryption_type in types: self._prepare_encrypt(lvm) else: @@ -929,6 +933,9 @@ class Installer: pacman_conf.persist() + if pacman_config: + pacman_conf.configure(pacman_config) + # Periodic TRIM may improve the performance and longevity of SSDs whilst # having no adverse effect on other devices. Most distributions enable # periodic TRIM by default. @@ -1129,7 +1136,7 @@ class Installer: kernel_parameters = [] match self._disk_encryption.encryption_type: - case EncryptionType.LvmOnLuks: + case EncryptionType.LVM_ON_LUKS: if not lvm.vg_name: raise ValueError(f'Unable to determine VG name for {lvm.name}') @@ -1146,7 +1153,7 @@ class Installer: else: debug(f'LvmOnLuks, encrypted root partition, identifying by UUID: {uuid}') kernel_parameters.append(f'cryptdevice=UUID={uuid}:cryptlvm root={lvm.safe_dev_path}') - case EncryptionType.LuksOnLvm: + case EncryptionType.LUKS_ON_LVM: uuid = self._get_luks_uuid_from_mapper_dev(lvm.mapper_path) if self._disk_encryption.hsm_device: @@ -1155,7 +1162,7 @@ class Installer: else: debug(f'LuksOnLvm, encrypted root partition, identifying by UUID: {uuid}') kernel_parameters.append(f'cryptdevice=UUID={uuid}:root root=/dev/mapper/root') - case EncryptionType.NoEncryption: + case EncryptionType.NO_ENCRYPTION: debug(f'Identifying root lvm by mapper device: {lvm.dev_path}') kernel_parameters.append(f'root={lvm.safe_dev_path}') @@ -1482,7 +1489,7 @@ class Installer: efi_dir_path.mkdir(parents=True, exist_ok=True) for file in ('BOOTIA32.EFI', 'BOOTX64.EFI'): - (limine_path / file).copy(efi_dir_path) + (limine_path / file).copy_into(efi_dir_path) except Exception as err: raise DiskError(f'Failed to install Limine in {self.target}{efi_partition.mountpoint}: {err}') @@ -1531,7 +1538,7 @@ class Installer: try: # The `limine-bios.sys` file contains stage 3 code. - (limine_path / 'limine-bios.sys').copy(boot_limine_path) + (limine_path / 'limine-bios.sys').copy_into(boot_limine_path) # `limine bios-install` deploys the stage 1 and 2 to the self.arch_chroot(f'limine bios-install {parent_dev_path}', peek_output=True) @@ -1957,18 +1964,22 @@ class Installer: def user_set_shell(self, user: str, shell: str) -> bool: info(f'Setting shell for {user} to {shell}') + cmd = ['arch-chroot', '-S', str(self.target), 'chsh', '-s', shell, user] try: - self.arch_chroot(f'sh -c "chsh -s {shell} {user}"') + run(cmd) return True - except SysCallError: + except CalledProcessError as err: + debug(f'Error setting user shell: {err}') return False - def chown(self, owner: str, path: str, options: list[str] = []) -> bool: - cleaned_path = path.replace("'", "\\'") + def chown(self, owner: str, path: str, options: list[str] | None = None) -> bool: + options = options or [] + cmd = ['arch-chroot', '-S', str(self.target), 'chown', *options, owner, path] try: - self.arch_chroot(f"sh -c 'chown {' '.join(options)} {owner} {cleaned_path}'") + run(cmd) return True - except SysCallError: + except CalledProcessError as err: + debug(f'Error changing ownership of {path}: {err}') return False def set_vconsole(self, locale_config: LocaleConfiguration) -> None: diff --git a/archinstall/lib/mirror/mirror_handler.py b/archinstall/lib/mirror/mirror_handler.py index 66e9d8c8..ef0ba1a9 100644 --- a/archinstall/lib/mirror/mirror_handler.py +++ b/archinstall/lib/mirror/mirror_handler.py @@ -1,17 +1,18 @@ import time -import urllib +import urllib.parse from pathlib import Path from archinstall.lib.models import MirrorRegion from archinstall.lib.models.mirrors import MirrorStatusEntryV3, MirrorStatusListV3 from archinstall.lib.networking import fetch_data_from_url from archinstall.lib.output import debug, info +from archinstall.lib.pathnames import MIRRORLIST class MirrorListHandler: def __init__( self, - local_mirrorlist: Path = Path('/etc/pacman.d/mirrorlist'), + local_mirrorlist: Path = MIRRORLIST, offline: bool = False, verbose: bool = False, ) -> None: diff --git a/archinstall/lib/models/__init__.py b/archinstall/lib/models/__init__.py index 7428dd3e..5f808c96 100644 --- a/archinstall/lib/models/__init__.py +++ b/archinstall/lib/models/__init__.py @@ -15,7 +15,6 @@ from archinstall.lib.models.device import ( LvmLayoutType, LvmVolume, LvmVolumeGroup, - LvmVolumeStatus, ModificationStatus, PartitionFlag, PartitionModification, @@ -57,7 +56,6 @@ __all__ = [ 'LvmLayoutType', 'LvmVolume', 'LvmVolumeGroup', - 'LvmVolumeStatus', 'MirrorConfiguration', 'MirrorRegion', 'ModificationStatus', diff --git a/archinstall/lib/models/application.py b/archinstall/lib/models/application.py index d32042ff..04d1a342 100644 --- a/archinstall/lib/models/application.py +++ b/archinstall/lib/models/application.py @@ -2,10 +2,12 @@ from dataclasses import dataclass from enum import StrEnum, auto from typing import Any, NotRequired, Self, TypedDict +from archinstall.lib.translationhandler import tr + class PowerManagement(StrEnum): POWER_PROFILES_DAEMON = 'power-profiles-daemon' - TUNED = 'tuned' + TUNED = auto() class PowerManagementConfigSerialization(TypedDict): @@ -31,7 +33,7 @@ class PrintServiceConfigSerialization(TypedDict): class Firewall(StrEnum): - UFW = 'ufw' + UFW = auto() FWD = 'firewalld' @@ -39,12 +41,37 @@ class FirewallConfigSerialization(TypedDict): firewall: str +class FontPackage(StrEnum): + NOTO = 'noto-fonts' + EMOJI = 'noto-fonts-emoji' + CJK = 'noto-fonts-cjk' + LIBERATION = 'ttf-liberation' + DEJAVU = 'ttf-dejavu' + + def description(self) -> str: + match self: + case FontPackage.NOTO: + return tr('Unicode font coverage for most languages') + case FontPackage.EMOJI: + return tr('color emoji for browsers and apps') + case FontPackage.CJK: + return tr('Chinese, Japanese, Korean characters') + case FontPackage.LIBERATION: + return tr('Arial/Times/Courier replacement, Cyrillic support for Steam/games') + case FontPackage.DEJAVU: + return tr('wide Unicode coverage, good fallback font') + + +class FontsConfigSerialization(TypedDict): + fonts: list[str] + + class ZramAlgorithm(StrEnum): - ZSTD = 'zstd' + ZSTD = auto() LZO_RLE = 'lzo-rle' - LZO = 'lzo' - LZ4 = 'lz4' - LZ4HC = 'lz4hc' + LZO = auto() + LZ4 = auto() + LZ4HC = auto() class ApplicationSerialization(TypedDict): @@ -53,6 +80,7 @@ class ApplicationSerialization(TypedDict): power_management_config: NotRequired[PowerManagementConfigSerialization] print_service_config: NotRequired[PrintServiceConfigSerialization] firewall_config: NotRequired[FirewallConfigSerialization] + fonts_config: NotRequired[FontsConfigSerialization] @dataclass @@ -127,6 +155,18 @@ class FirewallConfiguration: ) +@dataclass +class FontsConfiguration: + fonts: list[FontPackage] + + def json(self) -> FontsConfigSerialization: + return {'fonts': [f.value for f in self.fonts]} + + @classmethod + def parse_arg(cls, arg: FontsConfigSerialization) -> Self: + return cls(fonts=[FontPackage(f) for f in arg['fonts']]) + + @dataclass(frozen=True) class ZramConfiguration: enabled: bool @@ -149,6 +189,7 @@ class ApplicationConfiguration: power_management_config: PowerManagementConfiguration | None = None print_service_config: PrintServiceConfiguration | None = None firewall_config: FirewallConfiguration | None = None + fonts_config: FontsConfiguration | None = None @classmethod def parse_arg( @@ -177,6 +218,9 @@ class ApplicationConfiguration: if args and (firewall_config := args.get('firewall_config')) is not None: app_config.firewall_config = FirewallConfiguration.parse_arg(firewall_config) + if args and (fonts_config := args.get('fonts_config')) is not None: + app_config.fonts_config = FontsConfiguration.parse_arg(fonts_config) + return app_config def json(self) -> ApplicationSerialization: @@ -197,4 +241,7 @@ class ApplicationConfiguration: if self.firewall_config: config['firewall_config'] = self.firewall_config.json() + if self.fonts_config: + config['fonts_config'] = self.fonts_config.json() + return config diff --git a/archinstall/lib/models/device.py b/archinstall/lib/models/device.py index be82e687..3015833d 100644 --- a/archinstall/lib/models/device.py +++ b/archinstall/lib/models/device.py @@ -2,9 +2,9 @@ import builtins import math import uuid from dataclasses import dataclass, field -from enum import Enum +from enum import Enum, StrEnum, auto from pathlib import Path -from typing import NotRequired, Self, TypedDict, override +from typing import Any, NotRequired, Self, TypedDict, override from uuid import UUID import parted @@ -131,9 +131,14 @@ class DiskLayoutConfiguration: for partition in entry.get('partitions', []): flags = [flag for f in partition.get('flags', []) if (flag := PartitionFlag.from_string(f))] + if fs_type := partition.get('fs_type'): + fs_type = FilesystemType(fs_type) + else: + fs_type = None + device_partition = PartitionModification( status=ModificationStatus(partition['status']), - fs_type=FilesystemType(partition['fs_type']) if partition.get('fs_type') else None, + fs_type=fs_type, start=Size.parse_args(partition['start']), length=Size.parse_args(partition['size']), mount_options=partition['mount_options'], @@ -159,15 +164,15 @@ class DiskLayoutConfiguration: continue first = non_delete_partitions[0] - if first.status == ModificationStatus.Create and not first.start.is_valid_start(): + if first.status == ModificationStatus.CREATE and not first.start.is_valid_start(): raise ValueError('First partition must start at no less than 1 MiB') for i, current_partition in enumerate(non_delete_partitions[1:], start=1): previous_partition = non_delete_partitions[i - 1] - if current_partition.status == ModificationStatus.Create and current_partition.start < previous_partition.end: + if current_partition.status == ModificationStatus.CREATE and current_partition.start < previous_partition.end: raise ValueError('Partitions overlap') - create_partitions = [part_mod for part_mod in non_delete_partitions if part_mod.status == ModificationStatus.Create] + create_partitions = [part_mod for part_mod in non_delete_partitions if part_mod.status == ModificationStatus.CREATE] if not create_partitions: continue @@ -200,7 +205,7 @@ class DiskLayoutConfiguration: def has_default_btrfs_vols(self) -> bool: for mod in self.device_modifications: for part in mod.partitions: - if not (part.is_create_or_modify() and part.fs_type == FilesystemType.Btrfs): + if not (part.is_create_or_modify() and part.fs_type == FilesystemType.BTRFS): continue if any(subvol.is_default_root() for subvol in part.btrfs_subvols): @@ -715,23 +720,23 @@ class BDevice: return hash(self.disk.device.path) -class PartitionType(Enum): - Boot = 'boot' - Primary = 'primary' - _Unknown = 'unknown' +class PartitionType(StrEnum): + BOOT = auto() + PRIMARY = auto() + _UNKNOWN = 'unknown' @classmethod def get_type_from_code(cls, code: int) -> Self: if code == parted.PARTITION_NORMAL: - return cls.Primary + return cls.PRIMARY else: debug(f'Partition code not supported: {code}') - return cls._Unknown + return cls._UNKNOWN def get_partition_code(self) -> int | None: - if self == PartitionType.Primary: + if self == PartitionType.PRIMARY: return parted.PARTITION_NORMAL - elif self == PartitionType.Boot: + elif self == PartitionType.BOOT: return parted.PARTITION_BOOT return None @@ -777,48 +782,48 @@ class PartitionGUID(Enum): return uuid.UUID(self.value).bytes -class FilesystemType(Enum): - Btrfs = 'btrfs' - Ext2 = 'ext2' - Ext3 = 'ext3' - Ext4 = 'ext4' - F2fs = 'f2fs' - Fat12 = 'fat12' - Fat16 = 'fat16' - Fat32 = 'fat32' - Ntfs = 'ntfs' - Xfs = 'xfs' - LinuxSwap = 'linux-swap' +class FilesystemType(StrEnum): + BTRFS = auto() + EXT2 = auto() + EXT3 = auto() + EXT4 = auto() + F2FS = auto() + FAT12 = auto() + FAT16 = auto() + FAT32 = auto() + NTFS = auto() + XFS = auto() + LINUX_SWAP = 'linux-swap' # this is not a FS known to parted, so be careful # with the usage from this enum - Crypto_luks = 'crypto_LUKS' + CRYPTO_LUKS = 'crypto_LUKS' def is_crypto(self) -> bool: - return self == FilesystemType.Crypto_luks + return self == FilesystemType.CRYPTO_LUKS @property def parted_value(self) -> str: - return self.value + '(v1)' if self == FilesystemType.LinuxSwap else self.value + return self.value + '(v1)' if self == FilesystemType.LINUX_SWAP else self.value @property def installation_pkg(self) -> str | None: match self: - case FilesystemType.Btrfs: + case FilesystemType.BTRFS: return 'btrfs-progs' - case FilesystemType.Xfs: + case FilesystemType.XFS: return 'xfsprogs' - case FilesystemType.F2fs: + case FilesystemType.F2FS: return 'f2fs-tools' case _: return None -class ModificationStatus(Enum): - Exist = 'existing' - Modify = 'modify' - Delete = 'delete' - Create = 'create' +class ModificationStatus(StrEnum): + EXIST = 'existing' + MODIFY = auto() + DELETE = auto() + CREATE = auto() class _PartitionModificationSerialization(TypedDict): @@ -863,7 +868,7 @@ class PartitionModification: if self.is_exists_or_modify() and not self.dev_path: raise ValueError('If partition marked as existing a path must be set') - if self.fs_type is None and self.status == ModificationStatus.Modify: + if self.fs_type is None and self.status == ModificationStatus.MODIFY: raise ValueError('FS type must not be empty on modifications with status type modify') @override @@ -906,7 +911,7 @@ class PartitionModification: subvol_mods = [] return cls( - status=ModificationStatus.Exist, + status=ModificationStatus.EXIST, type=partition_info.type, start=partition_info.start, length=partition_info.length, @@ -953,26 +958,26 @@ class PartitionModification: return False def is_swap(self) -> bool: - return self.fs_type == FilesystemType.LinuxSwap + return self.fs_type == FilesystemType.LINUX_SWAP def is_modify(self) -> bool: - return self.status == ModificationStatus.Modify + return self.status == ModificationStatus.MODIFY def is_delete(self) -> bool: - return self.status == ModificationStatus.Delete + return self.status == ModificationStatus.DELETE def exists(self) -> bool: - return self.status == ModificationStatus.Exist + return self.status == ModificationStatus.EXIST def is_exists_or_modify(self) -> bool: return self.status in [ - ModificationStatus.Exist, - ModificationStatus.Delete, - ModificationStatus.Modify, + ModificationStatus.EXIST, + ModificationStatus.DELETE, + ModificationStatus.MODIFY, ] def is_create_or_modify(self) -> bool: - return self.status in [ModificationStatus.Create, ModificationStatus.Modify] + return self.status in [ModificationStatus.CREATE, ModificationStatus.MODIFY] @property def mapper_name(self) -> str | None: @@ -1083,13 +1088,6 @@ class LvmVolumeGroup: return lv in self.volumes -class LvmVolumeStatus(Enum): - Exist = 'existing' - Modify = 'modify' - Delete = 'delete' - Create = 'create' - - class _LvmVolumeSerialization(TypedDict): obj_id: str status: str @@ -1103,7 +1101,7 @@ class _LvmVolumeSerialization(TypedDict): @dataclass class LvmVolume: - status: LvmVolumeStatus + status: ModificationStatus name: str fs_type: FilesystemType length: Size @@ -1172,7 +1170,7 @@ class LvmVolume: @classmethod def parse_arg(cls, arg: _LvmVolumeSerialization) -> Self: volume = cls( - status=LvmVolumeStatus(arg['status']), + status=ModificationStatus(arg['status']), name=arg['name'], fs_type=FilesystemType(arg['fs_type']), length=Size.parse_args(arg['length']), @@ -1210,13 +1208,13 @@ class LvmVolume: return part_mod def is_modify(self) -> bool: - return self.status == LvmVolumeStatus.Modify + return self.status == ModificationStatus.MODIFY def exists(self) -> bool: - return self.status == LvmVolumeStatus.Exist + return self.status == ModificationStatus.EXIST def is_exists_or_modify(self) -> bool: - return self.status in [LvmVolumeStatus.Exist, LvmVolumeStatus.Modify] + return self.status in [ModificationStatus.EXIST, ModificationStatus.MODIFY] def is_root(self) -> bool: if self.mountpoint is not None: @@ -1402,19 +1400,19 @@ class DeviceModification: } -class EncryptionType(Enum): - NoEncryption = 'no_encryption' - Luks = 'luks' - LvmOnLuks = 'lvm_on_luks' - LuksOnLvm = 'luks_on_lvm' +class EncryptionType(StrEnum): + NO_ENCRYPTION = auto() + LUKS = auto() + LVM_ON_LUKS = auto() + LUKS_ON_LVM = auto() @classmethod def _encryption_type_mapper(cls) -> dict[str, Self]: return { - tr('No Encryption'): cls.NoEncryption, - tr('LUKS'): cls.Luks, - tr('LVM on LUKS'): cls.LvmOnLuks, - tr('LUKS on LVM'): cls.LuksOnLvm, + tr('No Encryption'): cls.NO_ENCRYPTION, + tr('LUKS'): cls.LUKS, + tr('LVM on LUKS'): cls.LVM_ON_LUKS, + tr('LUKS on LVM'): cls.LUKS_ON_LVM, } @classmethod @@ -1438,7 +1436,7 @@ class _DiskEncryptionSerialization(TypedDict): @dataclass class DiskEncryption: - encryption_type: EncryptionType = EncryptionType.NoEncryption + encryption_type: EncryptionType = EncryptionType.NO_ENCRYPTION encryption_password: Password | None = None partitions: list[PartitionModification] = field(default_factory=list) lvm_volumes: list[LvmVolume] = field(default_factory=list) @@ -1446,10 +1444,10 @@ class DiskEncryption: iter_time: int = DEFAULT_ITER_TIME def __post_init__(self) -> None: - if self.encryption_type in [EncryptionType.Luks, EncryptionType.LvmOnLuks] and not self.partitions: + if self.encryption_type in [EncryptionType.LUKS, EncryptionType.LVM_ON_LUKS] and not self.partitions: raise ValueError('Luks or LvmOnLuks encryption require partitions to be defined') - if self.encryption_type == EncryptionType.LuksOnLvm and not self.lvm_volumes: + if self.encryption_type == EncryptionType.LUKS_ON_LVM and not self.lvm_volumes: raise ValueError('LuksOnLvm encryption require LMV volumes to be defined') def should_generate_encryption_file(self, dev: PartitionModification | LvmVolume) -> bool: @@ -1592,14 +1590,18 @@ class LsblkInfo(BaseModel): @field_validator('size', mode='before') @classmethod - def convert_size(cls, v: int, info: ValidationInfo) -> Size: - sector_size = SectorSize(info.data['log_sec'], Unit.B) - return Size(v, Unit.B, sector_size) + def convert_size(cls, value: Any, info: ValidationInfo) -> Any: + if isinstance(value, int): + sector_size = SectorSize(info.data['log_sec'], Unit.B) + return Size(value, Unit.B, sector_size) + return value @field_validator('mountpoints', 'fsroots', mode='before') @classmethod - def remove_none(cls, v: list[Path | None]) -> list[Path]: - return [item for item in v if item is not None] + def remove_none(cls, value: Any) -> Any: + if isinstance(value, list): + return [item for item in value if item is not None] + return value @field_serializer('size', when_used='json') def serialize_size(self, size: Size) -> str: diff --git a/archinstall/lib/models/pacman.py b/archinstall/lib/models/pacman.py new file mode 100644 index 00000000..5d271ea9 --- /dev/null +++ b/archinstall/lib/models/pacman.py @@ -0,0 +1,42 @@ +from dataclasses import dataclass +from typing import Self, TypedDict + +from archinstall.lib.translationhandler import tr + + +class PacmanConfigSerialization(TypedDict): + parallel_downloads: int + color: bool + + +@dataclass +class PacmanConfiguration: + parallel_downloads: int = 5 + color: bool = True + + @classmethod + def default(cls) -> Self: + return cls() + + def json(self) -> PacmanConfigSerialization: + return { + 'parallel_downloads': self.parallel_downloads, + 'color': self.color, + } + + def preview(self) -> str: + color_str = str(self.color) + output = '{}: {}\n'.format(tr('Parallel Downloads'), self.parallel_downloads) + output += '{}: {}'.format(tr('Color'), color_str) + return output + + @classmethod + def parse_arg(cls, args: PacmanConfigSerialization) -> Self: + config = cls.default() + + if 'parallel_downloads' in args: + config.parallel_downloads = int(args['parallel_downloads']) + if 'color' in args: + config.color = bool(args['color']) + + return config diff --git a/archinstall/lib/pacman/config.py b/archinstall/lib/pacman/config.py index 1d361542..5785b319 100644 --- a/archinstall/lib/pacman/config.py +++ b/archinstall/lib/pacman/config.py @@ -2,6 +2,7 @@ import re from pathlib import Path from archinstall.lib.models.packages import Repository +from archinstall.lib.models.pacman import PacmanConfiguration from archinstall.lib.pathnames import PACMAN_CONF @@ -50,5 +51,23 @@ class PacmanConfig: f.writelines(content) def persist(self) -> None: - if self._repositories and self._config_remote_path: + if self._config_remote_path: PACMAN_CONF.copy(self._config_remote_path, preserve_metadata=True) + + def configure(self, pacman_config: PacmanConfiguration) -> None: + """Apply PacmanConfiguration (Color, ParallelDownloads) to the target system's pacman.conf.""" + if not self._config_remote_path or not self._config_remote_path.exists(): + return + + content = self._config_remote_path.read_text().splitlines() + result = [] + + for line in content: + if re.match(r'^#?\s*ParallelDownloads', line): + result.append(f'ParallelDownloads = {pacman_config.parallel_downloads}') + elif re.match(r'^#?\s*Color\s*$', line): + result.append('Color' if pacman_config.color else '#Color') + else: + result.append(line) + + self._config_remote_path.write_text('\n'.join(result) + '\n') diff --git a/archinstall/lib/pacman/pacman_menu.py b/archinstall/lib/pacman/pacman_menu.py new file mode 100644 index 00000000..010c3f6d --- /dev/null +++ b/archinstall/lib/pacman/pacman_menu.py @@ -0,0 +1,117 @@ +from typing import override + +from archinstall.lib.menu.abstract_menu import AbstractSubMenu +from archinstall.lib.menu.helpers import Confirmation, Input +from archinstall.lib.models.pacman import PacmanConfiguration +from archinstall.lib.pathnames import PACMAN_CONF +from archinstall.lib.translationhandler import tr +from archinstall.tui.ui.menu_item import MenuItem, MenuItemGroup +from archinstall.tui.ui.result import ResultType + + +class PacmanMenu(AbstractSubMenu[PacmanConfiguration]): + def __init__( + self, + pacman_conf: PacmanConfiguration, + advanced: bool = False, + ): + self._pacman_conf = pacman_conf + self._advanced = advanced + menu_options = self._define_menu_options() + + self._item_group = MenuItemGroup(menu_options, sort_items=False, checkmarks=True) + super().__init__( + self._item_group, + config=self._pacman_conf, + allow_reset=True, + ) + + def _define_menu_options(self) -> list[MenuItem]: + return [ + MenuItem( + text=tr('Parallel Downloads'), + action=select_parallel_downloads, + value=self._pacman_conf.parallel_downloads, + preview_action=lambda item: str(item.get_value()), + key='parallel_downloads', + enabled=self._advanced, + ), + MenuItem( + text=tr('Color'), + action=select_color, + value=self._pacman_conf.color, + preview_action=lambda item: str(item.get_value()), + key='color', + ), + ] + + @override + async def show(self) -> PacmanConfiguration | None: + config = await super().show() + + if config is None: + return PacmanConfiguration.default() + + _apply_to_live(config.parallel_downloads) + + return config + + +def _apply_to_live(parallel_downloads: int) -> None: + """Apply ParallelDownloads to live system pacman.conf for faster installation.""" + with PACMAN_CONF.open() as f: + pacman_conf = f.read().split('\n') + + with PACMAN_CONF.open('w') as fwrite: + for line in pacman_conf: + if 'ParallelDownloads' in line: + fwrite.write(f'ParallelDownloads = {parallel_downloads}\n') + else: + fwrite.write(f'{line}\n') + + +async def select_parallel_downloads(preset: int = 5) -> int | None: + max_recommended = 10 + + header = tr('Enter the number of parallel downloads (1-{})').format(max_recommended) + + def validator(s: str) -> str | None: + try: + value = int(s) + if 1 <= value <= max_recommended: + return None + return tr('Value must be between 1 and {}').format(max_recommended) + except Exception: + return tr('Please enter a valid number') + + result = await Input( + header=header, + allow_skip=True, + allow_reset=True, + validator_callback=validator, + default_value=str(preset), + ).show() + + match result.type_: + case ResultType.Skip: + return preset + case ResultType.Reset: + return 5 + case ResultType.Selection: + return int(result.get_value()) + + +async def select_color(preset: bool = True) -> bool | None: + result = await Confirmation( + header=tr('Enable colored output for pacman'), + preset=preset, + allow_skip=True, + ).show() + + match result.type_: + case ResultType.Skip: + return preset + case ResultType.Reset: + return True + case ResultType.Selection: + return result.get_value() diff --git a/archinstall/lib/pathnames.py b/archinstall/lib/pathnames.py index 7af5be6f..542719e1 100644 --- a/archinstall/lib/pathnames.py +++ b/archinstall/lib/pathnames.py @@ -4,4 +4,5 @@ from typing import Final from archinstall.lib.linux_path import LPath ARCHISO_MOUNTPOINT: Final = Path('/run/archiso/airootfs') +MIRRORLIST: Final = LPath('/etc/pacman.d/mirrorlist') PACMAN_CONF: Final = LPath('/etc/pacman.conf') diff --git a/archinstall/lib/translationhandler.py b/archinstall/lib/translationhandler.py index c7ce959b..093ca6de 100644 --- a/archinstall/lib/translationhandler.py +++ b/archinstall/lib/translationhandler.py @@ -2,10 +2,16 @@ import builtins import gettext import json import os +import tempfile from dataclasses import dataclass from pathlib import Path from typing import override +from archinstall.lib.command import SysCommand +from archinstall.lib.exceptions import SysCallError +from archinstall.lib.output import debug +from archinstall.lib.utils.util import running_from_iso + @dataclass class Language: @@ -14,6 +20,7 @@ class Language: translation: gettext.NullTranslations translation_percent: int translated_lang: str | None + console_font: str | None = None @property def display_name(self) -> str: @@ -31,10 +38,18 @@ class Language: return self.name_en +_DEFAULT_FONT = 'default8x16' +_ENV_FONT = os.environ.get('FONT') + + class TranslationHandler: def __init__(self) -> None: self._base_pot = 'base.pot' self._languages = 'languages.json' + self._active_language: Language | None = None + self._font_backup: Path | None = None + self._cmap_backup: Path | None = None + self._using_env_font: bool = False self._total_messages = self._get_total_active_messages() self._translated_languages = self._get_translations() @@ -43,6 +58,65 @@ class TranslationHandler: def translated_languages(self) -> list[Language]: return self._translated_languages + @property + def active_font(self) -> str | None: + if self._active_language is not None: + return self._active_language.console_font + return None + + def _set_font(self, font_name: str | None) -> bool: + """Set the console font via setfont. Only runs on ISO. Returns True on success.""" + if not running_from_iso(): + return False + + target = font_name or _DEFAULT_FONT + try: + SysCommand(['setfont', target]) + return True + except SysCallError as err: + debug(f'Failed to set console font {target}: {err}') + return False + + def save_console_font(self) -> None: + """Save the current console font (with unicode map) and console map to temp files.""" + if not running_from_iso(): + return + + try: + font_fd, font_path = tempfile.mkstemp(prefix='archinstall_font_') + cmap_fd, cmap_path = tempfile.mkstemp(prefix='archinstall_cmap_') + os.close(font_fd) + os.close(cmap_fd) + self._font_backup = Path(font_path) + self._cmap_backup = Path(cmap_path) + SysCommand(['setfont', '-O', str(self._font_backup), '-om', str(self._cmap_backup)]) + except SysCallError as err: + debug(f'Failed to save console font: {err}') + self._font_backup = None + self._cmap_backup = None + + def restore_console_font(self) -> None: + """Restore console font (with unicode map) and console map from backup.""" + if not running_from_iso(): + return + + if self._font_backup is None or not self._font_backup.exists(): + return + + cmd = ['setfont', str(self._font_backup)] + if self._cmap_backup is not None and self._cmap_backup.exists(): + cmd += ['-m', str(self._cmap_backup)] + try: + SysCommand(cmd) + except SysCallError as err: + debug(f'Failed to restore console font: {err}') + + self._font_backup.unlink(missing_ok=True) + self._font_backup = None + if self._cmap_backup is not None: + self._cmap_backup.unlink(missing_ok=True) + self._cmap_backup = None + def _get_translations(self) -> list[Language]: """ Load all translated languages and return a list of such @@ -57,6 +131,7 @@ class TranslationHandler: abbr = mapping_entry['abbr'] lang = mapping_entry['lang'] translated_lang = mapping_entry.get('translated_lang', None) + console_font = mapping_entry.get('console_font', None) try: # get a translation for a specific language @@ -71,7 +146,7 @@ class TranslationHandler: # prevent cases where the .pot file is out of date and the percentage is above 100 percent = min(100, percent) - language = Language(abbr, lang, translation, percent, translated_lang) + language = Language(abbr, lang, translation, percent, translated_lang, console_font) languages.append(language) except FileNotFoundError as err: raise FileNotFoundError(f"Could not locate language file for '{lang}': {err}") @@ -127,12 +202,39 @@ class TranslationHandler: except Exception: raise ValueError(f'No language with abbreviation "{abbr}" found') - def activate(self, language: Language) -> None: + def activate(self, language: Language, set_font: bool = True) -> None: """ Set the provided language as the current translation """ # The install() call has the side effect of assigning GNUTranslations.gettext to builtins._ language.translation.install() + self._active_language = language + + if set_font and not self._using_env_font: + self._set_font(language.console_font) + + def apply_console_font(self) -> None: + """Apply console font from FONT env var or active language mapping. + + If FONT env var is set and valid, use it and skip language mapping. + If FONT is set but invalid, fall back to language font. + If FONT is not set, use active language font. + """ + if not running_from_iso(): + return + + if _ENV_FONT: + if self._set_font(_ENV_FONT): + self._using_env_font = True + debug(f'Console font set from FONT env var: {_ENV_FONT}') + else: + debug(f'FONT={_ENV_FONT} could not be set, falling back to language font mapping') + if self.active_font: + self._set_font(self.active_font) + debug(f'Console font set from language mapping: {self.active_font}') + elif self.active_font: + self._set_font(self.active_font) + debug(f'Console font set from language mapping: {self.active_font}') def _get_locales_dir(self) -> Path: """ diff --git a/archinstall/locales/ar/LC_MESSAGES/base.mo b/archinstall/locales/ar/LC_MESSAGES/base.mo index 0ccaa921..c6311ff3 100644 Binary files a/archinstall/locales/ar/LC_MESSAGES/base.mo and b/archinstall/locales/ar/LC_MESSAGES/base.mo differ diff --git a/archinstall/locales/ar/LC_MESSAGES/base.po b/archinstall/locales/ar/LC_MESSAGES/base.po index 24671221..54c39d82 100644 --- a/archinstall/locales/ar/LC_MESSAGES/base.po +++ b/archinstall/locales/ar/LC_MESSAGES/base.po @@ -26,19 +26,19 @@ msgid "Do you really want to abort?" msgstr "هل تُريدُ حقًا إجهاضَ العَملِيَّة؟" msgid "And one more time for verification: " -msgstr "ومرة أخرى للتحقق: " +msgstr "ومرة أخرى للتّحقّق: " msgid "Would you like to use swap on zram?" msgstr "هل تريد استخدام swap أو zram؟" msgid "Desired hostname for the installation: " -msgstr "اسم المضيف المُراد للتثبيت: " +msgstr "اسم الحاسوب المُراد للتّثبيت:" msgid "Username for required superuser with sudo privileges: " 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)؟" @@ -59,29 +59,29 @@ msgid "Only packages such as base, base-devel, linux, linux-firmware, efibootmgr msgstr "فقط الحزم مثل base وbase-devel وlinux وlinux-firmware وefibootmgr و حِزم مِلف اختيارية سوف تُثَبَّت." msgid "Note: base-devel is no longer installed by default. Add it here if you need build tools." -msgstr "" +msgstr "ملاحظة: لم يعد base-devel مثبتًا بشكل أصلي. أضفه هنا إذا كنت بحاجة إلى أدوات البناء." msgid "If you desire a web browser, such as firefox or chromium, you may specify it in the following prompt." -msgstr "إذا كنت ترغب في متصفح الويب ، مثل Firefox أو chromium، فيمكنك تحديده في موضِع الكتابة التالي." +msgstr "إذا كنت ترغب في متصفح Web، مثل Firefox أو Chromium، فيمكنك تحديده في موضِع الكتابة التالي." msgid "Write additional packages to install (space separated, leave blank to skip): " msgstr "اكتب حزمًا إضافية لتثبيتها (تُفصَل بالمسافات، اتركها فارغة للتخطي): " msgid "Copy ISO network configuration to installation" -msgstr "انسخ إعداد شبكة الـISO للتثبيت" +msgstr "انسخ إعداد شبكة ISO للتّثبيت" msgid "Use NetworkManager (necessary for configuring internet graphically in GNOME and KDE)" -msgstr "استخدم مُدير الشبكة (ضروري لإعداد الإنترنت باستخدام واجهة رسومية في جنوم و كيدي)" +msgstr "استخدم NetworkManager (ضروري لإعداد الإنترنت باستخدام واجهة رسومية في جنوم و كيدي)" msgid "Select one network interface to configure" -msgstr "حدِّد واجهة شبكة واحدة للإعداد" +msgstr "حدِّد ربط شبكة واحد للإعداد" msgid "Select which mode to configure for \"{}\" or skip to use default mode \"{}\"" -msgstr "حدد الوضع المراد تهيئته لـ\"{}\" أو تخطى لاستخدام الوضع الافتراضي \"{}\"" +msgstr "حدّد الوضع المراد تهيئته لـ\"{}\" أو تخطى لاستخدام الوضع الأصلي \"{}\"" #, python-brace-format msgid "Enter the IP and subnet for {} (example: 192.168.0.5/24): " -msgstr "أدخِل الIP مع تجزئة الشبكة لـ{} (على سبيل المثال: 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 الخاص بالبوابة (جهاز التوجيه) أو اتركه فارغاً لعدم وجود عنوان IP: " @@ -90,20 +90,20 @@ 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 "تخطيط القسم الحالي" +msgstr "تخطيط التّقسيم الحالي" msgid "" "Select what to do with\n" "{}" msgstr "" -"حدد ما يجب القيام به باستخدام\n" +"حدّد ما يجب القيام به باستخدام\n" "{}" msgid "Enter a desired filesystem type for the partition" -msgstr "إدخال نوع نظام الملفات المطلوب للقسم" +msgstr "إدخال نوع نظام الملفّات المطلوب للتّقسيم" msgid "Enter the start location (in parted units: s, GB, %, etc. ; default: {}): " msgstr "أدخل نقطة البداية (بوحدات مجزأة: s، GB، %، إلخ؛ default: {}): " @@ -121,7 +121,7 @@ msgid "" msgstr "" "{}\n" "\n" -"حدد حسب الفهرس الأقسام المراد حذفها" +"حدّد حسب الفهرس الأقسام المراد حذفها" msgid "" "{}\n" @@ -130,13 +130,13 @@ msgid "" msgstr "" "{}\n" "\n" -"اختر حسب الفهرس القسم الذي تريد تحميله حيث" +"اختر حسب الفهرس التّقسيم الذي تريد تثبيته حيث" msgid " * Partition mount-points are relative to inside the installation, the boot would be /boot as an example." -msgstr " * نقاط تحميل القسم هي نسبية داخل التثبيت، سيكون الإقلاع /boot كمثال. " +msgstr " * نقاط تثبيت التّقسيم هي نسبية داخل التثبيت، سيكون الإقلاع /boot كمثال. " msgid "Select where to mount partition (leave blank to remove mountpoint): " -msgstr "حدد مكان تحميل القسم (اتركه فارغاً لإزالة نقطة التحميل): " +msgstr "حدّد مكان تثبيت التّقسيم (اتركه فارغاً لإزالة نقطة التثبيت): " msgid "" "{}\n" @@ -145,7 +145,7 @@ msgid "" msgstr "" "{}\n" "\n" -"حدد القسم المراد إخفاءه للتهيئة" +"حدّد التّقسيم المراد إخفاءه للتهيئة" msgid "" "{}\n" @@ -154,7 +154,7 @@ msgid "" msgstr "" "{}\n" "\n" -"حدد القسم المراد وضع علامة على أنه مشفر" +"حدّد التّقسيم المراد وضع علامة على أنه مشفّر" msgid "" "{}\n" @@ -163,7 +163,7 @@ msgid "" msgstr "" "{}\n" "\n" -"حدد القسم المراد وضع علامة على أنه قابل للإقلاع" +"حدّد التّقسيم المراد وضع علامة على أنه قابل للإقلاع" msgid "" "{}\n" @@ -172,25 +172,25 @@ msgid "" msgstr "" "{}\n" "\n" -"حدد القسم المراد وضع علامة على أنه قابل للتمهيد" +"حدّد التّقسيم المراد وضع علامة على أنه قابل للتّمهيد" msgid "Enter a desired filesystem type for the partition: " -msgstr "أدخل نوع نظام الملفات المطلوب للقسم: " +msgstr "أدخل نوع نظام الملفّات المطلوب للتّقسيم: " msgid "Archinstall language" -msgstr "لغات Archinstall" +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 "حدد ما يجب فعله بكل محرك أقراص على حدة (متبوعًا باستخدام القسم)" +msgstr "حدّد ما يجب فعله بكلّ محرّك أقراص على حدة (متبوعًا باستخدام التّقسيم)" msgid "Select what you wish to do with the selected block devices" -msgstr "حدد ما ترغب في القيام به مع أجهزة الكتلة المحددة" +msgstr "حدّد ما ترغب في القيام به مع أجهزة الكتلة المحدّدة" msgid "This is a list of pre-programmed profiles, they might make it easier to install things like desktop environments" -msgstr "هذه قائمة بالملفات الشخصية المبرمجة مسبقاً، قد تسهل تثبيت أشياء مثل بيئات سطح المكتب" +msgstr "هذه قائمة بالملفّات الشخصية المبرمجة مسبقاً، قد تسهل تثبيت أشياء مثل بيئات سطح المكتب" msgid "Select keyboard layout" msgstr "تحديد تخطيط لوحة المفاتيح" @@ -199,7 +199,7 @@ 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." @@ -217,34 +217,34 @@ msgid "" msgstr "" "\n" "\n" -"حدد برنامج تشغيل رسومات أو اتركه فارغاً لتثبيت جميع برامج التشغيل مفتوحة المصدر" +"حدّد برنامج تشغيل رسومات أو اتركه فارغاً لتثبيت جميع برامج التشغيل مفتوحة المصدر" msgid "All open-source (default)" -msgstr "جميعها مفتوحة المصدر (افتراضي)" +msgstr "جميعها مفتوحة المصدر (أصلي)" msgid "Choose which kernels to use or leave blank for default \"{}\"" -msgstr "اختر النواة التي تريد استخدامها أو اتركها فارغة للإعداد الافتراضي \"{}\"" +msgstr "اختر النواة التي تريد استخدامها أو اتركها فارغة للإعداد الأصلي \"{}\"" msgid "Choose which locale language to use" -msgstr "اختر اللغة المحلية التي تريد استخدامها" +msgstr "اختر اللّغة المحلية التي تريد استخدامها" msgid "Choose which locale encoding to use" -msgstr "اختر ترميز الإعدادات المحلية المراد استخدامها" +msgstr "اختر ترميز اللّغة الذي تريد استخدامه" msgid "Select one of the values shown below: " msgstr "اختر إحدى القيم الموضحة أدناه: " msgid "Select one or more of the options below: " -msgstr "حدد واحداً أو أكثر من الخيارات أدناه: " +msgstr "حدّد واحداً أو أكثر من الخيارات أدناه: " msgid "Adding partition...." -msgstr "إضافة قسم...." +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 "Error: Listing profiles on URL \"{}\" resulted in:" -msgstr "خطأ: نتج عن إدراج ملفات التعريف على عنوان URL \"{}\":" +msgstr "خطأ: نتج عن إدراج ملفّات التعريف على عنوان URL \"{}\":" msgid "Error: Could not decode \"{}\" result as JSON:" msgstr "خطأ: تعذر فك تشفير نتيجة \"{}\" كنتيجة JSON:" @@ -262,13 +262,13 @@ msgid "Locale encoding" msgstr "ترميز الإعدادات المحلية" msgid "Drive(s)" -msgstr "محرك (أو محركات)" +msgstr "محرّك (أو محرّكات)" msgid "Disk layout" msgstr "تخطيط القرص" msgid "Encryption password" -msgstr "كلمة سر التشفير" +msgstr "كلمة سر التّشفير" msgid "Swap" msgstr "ذاكرة التبديل(Swap)" @@ -298,7 +298,7 @@ msgid "Additional packages" msgstr "الباقات الإضافية" msgid "Network configuration" -msgstr "ضبط الشبكة" +msgstr "ضبط الشّبكة" msgid "Automatic time sync (NTP)" msgstr "المزامنة التلقائية للوقت (NTP)" @@ -313,12 +313,12 @@ msgid "" "Do you wish to continue?" msgstr "" "قررت تخطي اختيار القرص الصلب\n" -"وستستخدم أي إعداد لمحرك الأقراص مثبت على {} (تجريبي)\n" +"وستستخدم أيّ إعداد لمحرّك الأقراص مثبت على {} (تجريبي)\n" "تحذير: لن يتحقق برنامج Archinstall من ملاءمة هذا الإعداد\n" "هل ترغب في المتابعة؟" msgid "Re-using partition instance: {}" -msgstr "إعادة استخدام مثيل القسم: {}" +msgstr "إعادة استخدام مثيل التّقسيم: {}" msgid "Create a new partition" msgstr "أنشئ قسماً جديداً" @@ -333,16 +333,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 "وضع علامة/إلغاء وضع علامة على قسم على أنه مشفر" +msgstr "وضع علامة/إلغاء وضع علامة على تقسيم على أنه مشفّر" msgid "Mark/Unmark a partition as bootable (automatic for /boot)" -msgstr "تحديد/إلغاء تحديد قسم على أنه قابل للإقلاع (تلقائي ل /boot)" +msgstr "تحديد/إلغاء تحديد تقسيم على أنه قابل للإقلاع (تلقائي ل /boot)" msgid "Set desired filesystem for a partition" -msgstr "تعيين نظام الملفات المطلوب للقسم" +msgstr "تعيين نظام الملفّات المطلوب للتّقسيم" msgid "Abort" msgstr "إلغاء" @@ -360,7 +360,7 @@ msgid "Set/Modify the below options" msgstr "تعيين/تعديل الخيارات التالية" msgid "Install" -msgstr "التثبيت" +msgstr "التّثبيت" msgid "" "Use ESC to skip\n" @@ -368,7 +368,7 @@ msgid "" msgstr "استخدم ESC لتخطي\n" msgid "Suggest partition layout" -msgstr "اقتراح تخطيط التقسيم" +msgstr "اقتراح تخطيط التّقسيم" msgid "Enter a password: " msgstr "أدخل كلمة مرور: " @@ -380,7 +380,7 @@ msgid "Enter disk encryption password (leave blank for no encryption): " msgstr "أدخل كلمة مرور تشفير القرص (اتركها فارغة لعدم وجود تشفير): " msgid "Create a required super-user with sudo privileges: " -msgstr "أدخل كلمة مرور تشفير القرص (اتركها فارغة لعدم استخدام التشفير): " +msgstr "أدخل كلمة مرور تشفير القرص (اتركها فارغة لعدم استخدام التّشفير): " msgid "Enter root password (leave blank to disable root): " msgstr "أدخل كلمة مرور الجذر (اتركها فارغة لتعطيل الجذر): " @@ -392,7 +392,7 @@ 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" +msgstr "هل ترغب في استخدام المزامنة التلقائية للوقت (NTP) مع خوادم الوقت الأصلية؟\n" msgid "" "Hardware time and other post-configuration steps might be required in order for NTP to work.\n" @@ -412,7 +412,7 @@ msgid "" " Choose an object from the list, and select one of the available actions for it to execute" msgstr "" "\n" -" اختر غرضًا من القائمة، وحدد أحد الإجراءات المتاحة لتنفيذه" +" اختر غرضًا من القائمة، وحدّد أحد الإجراءات المتاحة لتنفيذه" msgid "Cancel" msgstr "إلغاء" @@ -489,7 +489,7 @@ msgid "No network configuration" msgstr "لا يوجد إعداد للشبكة" msgid "Set desired subvolumes on a btrfs partition" -msgstr "تعيين وحدات التخزين الفرعية المطلوبة على قسم btrfs" +msgstr "تعيين وحدات التخزين الفرعيّة المطلوبة على تقسيم btrfs" msgid "" "{}\n" @@ -498,10 +498,10 @@ msgid "" msgstr "" "{}\n" "\n" -"حدد القسم الذي تريد تعيين وحدات التخزين الفرعية عليه" +"حدّد التّقسيم الذي تريد تعيين وحدات التخزين الفرعيّة عليه" msgid "Manage btrfs subvolumes for current partition" -msgstr "إدارة وحدات تخزين btrfs الفرعية للقسم الحالي" +msgstr "إدارة وحدات تخزين btrfs الفرعيّة للتّقسيم الحالي" msgid "No configuration" msgstr "لا يوجد إعدادات" @@ -565,53 +565,53 @@ msgid "" " Fill the desired values for a new subvolume \n" msgstr "" "\n" -" املأ القيم المطلوبة لوحدة التخزين الفرعية الجديدة \n" +" املأ القيم المطلوبة لوحدة التّخزين الفرعيّة الجديدة \n" msgid "Subvolume name " -msgstr "اسم وحدة التخزين الفرعية " +msgstr "اسم وحدة التّخزين الفرعيّة " msgid "Subvolume mountpoint" -msgstr "نقطة تحميل وحدة التخزين الفرعية" +msgstr "نقطة تثبيت وحدة التّخزين الفرعيّة" msgid "Subvolume options" -msgstr "خيارات وحدة التخزين الفرعية" +msgstr "خيارات وحدة التّخزين الفرعيّة" msgid "Save" msgstr "حفظ" msgid "Subvolume name :" -msgstr "اسم وحدة التخزين الفرعية :" +msgstr "اسم وحدة التّخزين الفرعيّة :" msgid "Select a mount point :" -msgstr "حدد نقطة التثبيت :" +msgstr "حدّد نقطة التّثبيت :" msgid "Select the desired subvolume options " -msgstr "حدد خيارات وحدة التخزين الفرعية المطلوبة " +msgstr "حدّد خيارات وحدة التّخزين الفرعيّة المطلوبة " msgid "Define users with sudo privilege, by username: " msgstr "تحديد المستخدمين الذين لديهم امتياز sudo، حسب اسم المستخدم: " #, python-brace-format msgid "[!] A log file has been created here: {}" -msgstr "[!] تم إنشاء ملف سجل هنا: {}" +msgstr "[!] تم إنشاء ملفّ سجل هنا: {}" msgid "Would you like to use BTRFS subvolumes with a default structure?" -msgstr "هل ترغب في استخدام وحدات التخزين الفرعية BTRFS ذات البنية الافتراضية؟" +msgstr "هل ترغب في استخدام وحدات التخزين الفرعيّة BTRFS ذات البنية الأصلية؟" msgid "Would you like to use BTRFS compression?" msgstr "هل ترغب في استخدام ضغط BTRFS؟" msgid "Would you like to create a separate partition for /home?" -msgstr "هل ترغب في إنشاء قسم منفصل لـ /home؟" +msgstr "هل ترغب في إنشاء تقسيم منفصل لـ /home؟" msgid "The selected drives do not have the minimum capacity required for an automatic suggestion\n" -msgstr "لا تحتوي محركات الأقراص المحددة على الحد الأدنى من السعة المطلوبة للاقتراح التلقائي\n" +msgstr "لا تحتوي محرّكات الأقراص المحدّدة على الحد الأدنى من السعة المطلوبة للاقتراح التلقائي\n" msgid "Minimum capacity for /home partition: {}GB\n" -msgstr "الحد الأدنى لسعة القسم /home: {} جيجابايت\n" +msgstr "الحد الأدنى لسعة التّقسيم /home: {} جيجابايت\n" msgid "Minimum capacity for Arch Linux partition: {}GB" -msgstr "الحد الأدنى لسعة قسم Arch Linux: {} جيجابايت" +msgstr "الحد الأدنى لسعة تقسيم Arch Linux: {} جيجابايت" msgid "Continue" msgstr "متابعة" @@ -623,34 +623,34 @@ msgid "no" msgstr "لا" msgid "set: {}" -msgstr "حدد: {}" +msgstr "حدّد: {}" msgid "Manual configuration setting must be a list" msgstr "يجب أن يكون إعداد التكوين اليدوي قائمة" msgid "No iface specified for manual configuration" -msgstr "لا يوجد وجه (iface) محدد للتكوين اليدوي" +msgstr "لا يوجد وجه (iface) محدّد للتكوين اليدوي" msgid "Manual nic configuration with no auto DHCP requires an IP address" msgstr "يتطلب تكوين nic اليدوي مع عدم وجود DHCP التلقائي عنوان IP" msgid "Add interface" -msgstr "إضافة واجهة" +msgstr "إضافة ربط" msgid "Edit interface" -msgstr "تعديل الواجهة" +msgstr "تعديل الرّبط" msgid "Delete interface" -msgstr "حذف الواجهة" +msgstr "حذف الرّبط" msgid "Select interface to add" -msgstr "حدد واجهة لإضافتها" +msgstr "حدّد ربطًا لإضافته" msgid "Manual configuration" msgstr "ضبط يدوي" msgid "Mark/Unmark a partition as compressed (btrfs only)" -msgstr "وضع علامة/إلغاء وضع علامة على قسم كقسم مضغوط (btrfs فقط)" +msgstr "وضع علامة/إلغاء وضع علامة على تقسيم كقسم مضغوط (btrfs فقط)" msgid "The password you are using seems to be weak, are you sure you want to use it?" msgstr "يبدو أن كلمة المرور التي تستخدمها ضعيفة، هل أنت متأكد من أنك تريد استخدامها؟" @@ -659,7 +659,7 @@ msgid "Provides a selection of desktop environments and tiling window managers, msgstr "يوفر مجموعة مختارة من بيئات سطح المكتب ومديري نوافذ التجانب، مثل gnome و kde و sway" msgid "Select your desired desktop environment" -msgstr "حدد بيئة سطح المكتب التي تريدها" +msgstr "حدّد بيئة سطح المكتب التي تريدها" msgid "A very basic installation that allows you to customize Arch Linux as you see fit." msgstr "تثبيت أساسي جداً يسمح لك بتخصيص آرتش لينكس (Arch Linux) كما تراه مناسباً." @@ -668,7 +668,7 @@ msgid "Provides a selection of various server packages to install and enable, e. msgstr "يوفر مجموعة مختارة من حزم الخوادم المختلفة لتثبيتها وتمكينها، مثل httpd و nginx و mariadb" msgid "Choose which servers to install, if none then a minimal installation will be done" -msgstr "اختر الخوادم التي سيتم تثبيتها، إذا لم يكن هناك أي خوادم، فسيتم إجراء الحد الأدنى من التثبيت" +msgstr "اختر الخوادم التي سيتم تثبيتها، إذا لم يكن هناك أيّ خوادم، فسيتم إجراء الحد الأدنى من التّثبيت" msgid "Installs a minimal system as well as xorg and graphics drivers." msgstr "تثبيت الحد الأدنى من النظام بالإضافة إلى إكسورج (xorg) وبرامج تشغيل الرسومات." @@ -677,16 +677,16 @@ 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) إلى التثبيت الذي تم إنشاؤه حديثاً وإجراء تهيئة ما بعد التثبيت؟" +msgstr "هل ترغب في الانتقال (chroot) إلى التّثبيت الذي تم إنشاؤه حديثاً وإجراء تهيئة ما بعد التثبيت؟" msgid "Are you sure you want to reset this setting?" msgstr "هل أنت متأكد من رغبتك في إعادة ضبط هذا الإعداد؟" msgid "Select one or more hard drives to use and configure\n" -msgstr "حدد محرك أقراص صلب واحد أو أكثر لاستخدامه وضبطه\n" +msgstr "حدّد محرّك أقراص صلب واحد أو أكثر لاستخدامه وضبطه\n" msgid "Any modifications to the existing setting will reset the disk layout!" -msgstr "أي تعديلات على الإعداد الحالي سيعيد ضبط تخطيط القرص!" +msgstr "أيّ تعديلات على الإعداد الحالي سيعيد ضبط تخطيط القرص!" msgid "If you reset the harddrive selection this will also reset the current disk layout. Are you sure?" msgstr "إذا قمت بإعادة تعيين اختيار القرص الصلب، فسيؤدي ذلك أيضًا إلى إعادة تعيين تخطيط القرص الحالي. هل أنت متأكد؟" @@ -705,7 +705,7 @@ msgid "No audio server" msgstr "لا يوجد خادم صوت" msgid "(default)" -msgstr "(افتراضي)" +msgstr "(أصلي)" msgid "Use ESC to skip" msgstr "استخدم زر الهروب ESC للتخطي" @@ -737,16 +737,16 @@ msgid "Value: " msgstr "القيمة: " msgid "You can skip selecting a drive and partitioning and use whatever drive-setup is mounted at /mnt (experimental)" -msgstr "يمكنك تخطي تحديد محرك أقراص وتقسيمه واستخدام أي إعدادات محرك أقراص مثبتة على /mnt (تجريبي)" +msgstr "يمكنك تخطي تحديد محرّك أقراص وتقسيمه واستخدام أيّ إعدادات محرّك أقراص مثبتة على /mnt (تجريبي)" msgid "Select one of the disks or skip and use /mnt as default" -msgstr "حدد أحد الأقراص أو تخطى واستخدم /mnt كافتراضي" +msgstr "حدّد أحد الأقراص أو تخطى واستخدم /mnt كأصلي" msgid "Select which partitions to mark for formatting:" -msgstr "حدد الأقسام التي تريد وضع علامة عليها للتهيئة:" +msgstr "حدّد الأقسام التي تريد وضع علامة عليها للتهيئة:" msgid "Use HSM to unlock encrypted drive" -msgstr "استخدام HSM لإلغاء قفل محرك الأقراص المشفر" +msgstr "استخدام HSM لإلغاء قفل محرّك الأقراص المشفر" msgid "Device" msgstr "جهاز" @@ -773,7 +773,7 @@ msgid "Should \"{}\" be a superuser (sudo)?" msgstr "هل يجب أن يكون \"{}\" مستخدمًا خارقًا (sudo)؟" msgid "Select which partitions to encrypt" -msgstr "حدد الأقسام المراد تشفيرها" +msgstr "حدّد الأقسام المراد تشفيرها" msgid "very weak" msgstr "ضعيف جداً" @@ -797,10 +797,10 @@ msgid "Delete subvolume" msgstr "حذف الحجم الفرعي" msgid "Configured {} interfaces" -msgstr "تهيئة {} الواجهات" +msgstr "هُيِّئَت {} روابط" msgid "This option enables the number of parallel downloads that can occur during installation" -msgstr "يتيح هذا الخيار عدد التنزيلات المتوازية التي يمكن أن تحدث أثناء التثبيت" +msgstr "يتيح هذا الخيار عدد التنزيلات المتوازية التي يمكن أن تحدث أثناء التّثبيت" msgid "" "Enter the number of parallel downloads to be enabled.\n" @@ -818,7 +818,7 @@ msgid " - Minimum value : 1 ( Allows 1 parallel download, allows 2 downloads a msgstr " - الحد الأدنى للقيمة: 1 (يسمح بتنزيل متوازي واحد، ويسمح بتنزيلين في المرة الواحدة)" msgid " - Disable/Default : 0 ( Disables parallel downloading, allows only 1 download at a time )" -msgstr " - تعطيل/افتراضي: 0 (تعطيل التنزيل المتوازي، يسمح بتنزيل واحد فقط في كل مرة)" +msgstr " - تعطيل/أصلي: 0 (تعطيل التنزيل المتوازي، يسمح بتنزيل واحد فقط في كل مرة)" #, python-brace-format msgid "Invalid input! Try again with a valid input [1 to {max_downloads}, or 0 to disable]" @@ -827,6 +827,22 @@ msgstr "إدخال غير صالح! حاول مرة أخرى بإدخال صال msgid "Parallel Downloads" msgstr "التنزيلات الموازية" +msgid "Pacman" +msgstr "" + +msgid "Color" +msgstr "" + +#, fuzzy, python-brace-format +msgid "Enter the number of parallel downloads (1-{})" +msgstr "" +"أدخل عدد التنزيلات المتوازية المراد تمكينها.\n" +"\n" +"ملاحظة:\n" + +msgid "Enable colored output for pacman" +msgstr "" + msgid "ESC to skip" msgstr "زر الهروب ESC للتخطي" @@ -837,11 +853,11 @@ msgid "TAB to select" msgstr "TAB لتحديد" msgid "[Default value: 0] > " -msgstr "[القيمة الافتراضية: 0] > " +msgstr "[القيمة الأصلية: 0] > " msgid "To be able to use this translation, please install a font manually that supports the language." msgstr "" -"لتتمكن من استخدام هذه الترجمة، يرجى تثبيت الخط يدوياً الذي يدعم اللغة.\n" +"لتتمكن من استخدام هذه الترجمة، يرجى تثبيت الخط يدوياً الذي يدعم اللّغة.\n" "To be able to use this translation, please install a font manually that supports the language." msgid "The font should be stored as {}" @@ -855,14 +871,14 @@ msgstr "تحديد وضع التنفيذ" #, python-brace-format msgid "Unable to fetch profile from specified url: {}" -msgstr "تعذر جلب ملف التعريف من عنوان url المحدد: {}" +msgstr "تعذر جلب ملفّ التعريف من عنوان url المحدّد: {}" #, python-brace-format msgid "Profiles must have unique name, but profile definitions with duplicate name found: {}" -msgstr "يجب أن يكون لملفات التعريف (profile) اسم فريد، ولكن تم العثور على تعريفات ملفات التعريف (profile) ذات أسماء مكررة: {}" +msgstr "يجب أن يكون لملفّات التعريف (profile) اسم فريد، ولكن تم العثور على تعريفات ملفّات التعريف (profile) ذات أسماء مكررة: {}" msgid "Select one or more devices to use and configure" -msgstr "حدد جهازاً واحداً أو أكثر لاستخدامه وإعداده" +msgstr "حدّد جهازاً واحداً أو أكثر لاستخدامه وإعداده" msgid "If you reset the device selection this will also reset the current disk layout. Are you sure?" msgstr "إذا قمت بإعادة تعيين تحديد الجهاز فسيؤدي ذلك أيضاً إلى إعادة تعيين تخطيط القرص الحالي. هل أنت متأكد؟" @@ -871,21 +887,21 @@ msgid "Existing Partitions" msgstr "الأقسام الموجودة" msgid "Select a partitioning option" -msgstr "حدد خيار التقسيم" +msgstr "حدّد خيار التّقسيم" msgid "Enter the root directory of the mounted devices: " msgstr "أدخل دليل الجذر للأجهزة المثبتة: " #, python-brace-format msgid "Minimum capacity for /home partition: {}GiB\n" -msgstr "الحد الأدنى لسعة القسم /home: {} جيجا بايت GiB \n" +msgstr "الحد الأدنى لسعة التّقسيم /home: {} جيجا بايت GiB \n" #, python-brace-format msgid "Minimum capacity for Arch Linux partition: {}GiB" -msgstr "الحد الأدنى لسعة قسم آرش لينكس (Arch Linux): {} جيجا بايت (GiB)" +msgstr "الحد الأدنى لسعة تقسيم آرش لينكس (Arch Linux): {} جيجا بايت (GiB)" msgid "This is a list of pre-programmed profiles_bck, they might make it easier to install things like desktop environments" -msgstr "هذه قائمة بالملفات الشخصية المبرمجة مسبقاً_bck، قد تسهل تثبيت أشياء مثل بيئات سطح المكتب" +msgstr "هذه قائمة بالملفّات الشخصية المبرمجة مسبقاً_bck، قد تسهل تثبيت أشياء مثل بيئات سطح المكتب" msgid "Current profile selection" msgstr "اختيار الملف الشخصي الحالي" @@ -894,7 +910,7 @@ msgid "Remove all newly added partitions" msgstr "إزالة جميع الأقسام المضافة حديثاً" msgid "Assign mountpoint" -msgstr "تعيين نقطة التحميل" +msgstr "تعيين نقطة التثبيت" msgid "Mark/Unmark to be formatted (wipes data)" msgstr "وضع او إلغاء علامة تحديد التهيئة (مسح البيانات)" @@ -903,31 +919,31 @@ msgid "Mark/Unmark as bootable" msgstr "وضع او إلغاء علامة قابل للإقلاع" msgid "Change filesystem" -msgstr "تغيير نظام الملفات" +msgstr "تغيير نظام الملفّات" msgid "Mark/Unmark as compressed" msgstr "وضع او إلغاء علامة كمضغوط" msgid "Set subvolumes" -msgstr "تعيين المجلدات الفرعية" +msgstr "تعيين المجلدات الفرعيّة" msgid "Delete partition" -msgstr "حذف القسم" +msgstr "حذف التّقسيم" msgid "Partition" msgstr "تقسيم" msgid "This partition is currently encrypted, to format it a filesystem has to be specified" -msgstr "هذا القسم مشفر حالياً، ولتهيئة نظام الملفات يجب تحديد نظام الملفات" +msgstr "هذا التّقسيم مشفّر حالياً، ولتهيئة نظام الملفّات يجب تحديد نظام الملفّات" msgid "Partition mount-points are relative to inside the installation, the boot would be /boot as an example." -msgstr "نقاط تحميل القسم تكون نسبية داخل التثبيت، سيكون الإقلاع /boot كمثال." +msgstr "نقاط تثبيت التّقسيم تكون نسبية داخل التثبيت، سيكون الإقلاع /boot كمثال." msgid "If mountpoint /boot is set, then the partition will also be marked as bootable." -msgstr "إذا تم تعيين نقطة التثبيت /boot، فسيتم وضع علامة على القسم أيضًا على أنه قابل للإقلاع." +msgstr "إذا تم تعيين نقطة التّثبيت /boot، فسيتم وضع علامة على التّقسيم أيضًا على أنه قابل للإقلاع." msgid "Mountpoint: " -msgstr " نقطة التثبيت: " +msgstr "نقطة التّثبيت: " msgid "Current free sectors on device {}:" msgstr "القطاعات الخالية الحالية على الجهاز {}:" @@ -936,51 +952,51 @@ msgid "Total sectors: {}" msgstr "إجمالي القطاعات: {}" msgid "Enter the start sector (default: {}): " -msgstr "أدخل قطاع البداية (افتراضي: {}): " +msgstr "أدخل قطاع البداية (أصلي: {}): " msgid "Enter the end sector of the partition (percentage or block number, default: {}): " -msgstr "أدخل قطاع نهاية القسم (النسبة المئوية أو رقم الكتلة، الافتراضي: {}): " +msgstr "أدخل قطاع نهاية التّقسيم (النسبة المئوية أو رقم الكتلة، الأصلي: {}): " msgid "This will remove all newly added partitions, continue?" msgstr "سيؤدي ذلك إلى إزالة جميع الأقسام المضافة حديثاً، متابعة؟" #, python-brace-format msgid "Partition management: {}" -msgstr "إدارة التقسيم: {}" +msgstr "إدارة التّقسيم: {}" #, python-brace-format msgid "Total length: {}" msgstr "الطول الإجمالي: {}" msgid "Encryption type" -msgstr "نوع التشفير" +msgstr "نوع التّشفير" msgid "Iteration time" -msgstr "" +msgstr "مُدّة التّكرار" msgid "Enter iteration time for LUKS encryption (in milliseconds)" -msgstr "" +msgstr "أدخل مدّة التّكرار لتشفير LUKS (بالملّي ثانية)" msgid "Higher values increase security but slow down boot time" -msgstr "" +msgstr "تزيد القِيَمُ الأعلى من مستوى الأمان ولكنّها تبطئ وقت بدء التّشغيل" msgid "Default: 10000ms, Recommended range: 1000-60000" -msgstr "" +msgstr "الأصلي: 10000 ملّي ثانية، النّطاق المُستَحسَن: من 1000 إلى 60000" msgid "Iteration time cannot be empty" -msgstr "" +msgstr "مُدّة التّكرار لا تكون فارغة" msgid "Iteration time must be at least 100ms" -msgstr "" +msgstr "مُدّة التّكرار ينبغي ألّا تقلّ عن 100 ملّي ثانية" msgid "Iteration time must be at most 120000ms" -msgstr "" +msgstr "مُدّة التّكرار ينبغي ألّا تتجاوز 120000 ملّي ثانية" msgid "Please enter a valid number" -msgstr "" +msgstr "الرّجاء إدخال رقم صحيح" msgid "Partitions" -msgstr "التقسيمات" +msgstr "التّقسيمات" msgid "No HSM devices available" msgstr "لا توجد أجهزة HSM متوفرة" @@ -989,25 +1005,25 @@ msgid "Partitions to be encrypted" msgstr "الأقسام المراد تشفيرها" msgid "Select disk encryption option" -msgstr "حدد خيار تشفير القرص" +msgstr "حدّد خيار تشفير القرص" msgid "Select a FIDO2 device to use for HSM" msgstr "اختر جهاز FIDO2 لاستخدامه في HSM" msgid "Use a best-effort default partition layout" -msgstr "استخدم أفضل تخطيط افتراضي للتقسيم الافتراضي" +msgstr "استخدم أفضل جهد ممكن لتخطيط التّقسيم الإصلي" msgid "Manual Partitioning" -msgstr "التقسيم اليدوي" +msgstr "التّقسيم اليدوي" msgid "Pre-mounted configuration" msgstr "تهيئة مثبتة مسبقاً" msgid "Unknown" -msgstr "غير معروف" +msgstr "مجهول" msgid "Partition encryption" -msgstr "تشفير التقسيم" +msgstr "تشفير التّقسيم" #, python-brace-format msgid " ! Formatting {} in " @@ -1026,13 +1042,13 @@ msgid "Password" msgstr "كلمة المرور" msgid "All settings will be reset, are you sure?" -msgstr "ستتم إعادة ضبط جميع الإعدادات، هل أنت متأكد؟" +msgstr "ستتم إعادة ضبط جميع الإعدادات، هل أنت متأكّد؟" msgid "Back" msgstr "رجوع" msgid "Please chose which greeter to install for the chosen profiles: {}" -msgstr "يرجى اختيار المُرحِّب الذي سيتم تثبيته للملفات الشخصية المختارة: {}" +msgstr "يرجى اختيار المُرحِّب الذي سيتم تثبيته للملفّات الشّخصية المختارة: {}" #, python-brace-format msgid "Environment type: {}" @@ -1045,7 +1061,7 @@ msgid "Installed packages" msgstr "الحزم المثبّتة" msgid "Add profile" -msgstr "إضافة ملف شخصي" +msgstr "إضافة ملفّ شخصي" msgid "Edit profile" msgstr "تعديل الملف الشخصي" @@ -1063,10 +1079,10 @@ msgid "Packages to be install with this profile (space separated, leave blank to msgstr "اكتب حزمًا إضافية لتثبيتها (تُفصَل بالمسافات، اتركها فارغة للتخطي): " msgid "Services to be enabled with this profile (space separated, leave blank to skip): " -msgstr "الخدمات التي سيتم تمكينها مع ملف التعريف هذا (مفصولة بمسافة، اتركها فارغة للتخطي): " +msgstr "الخدمات التي سيتم تمكينها مع ملفّ التعريف هذا (مفصولة بمسافة، اتركها فارغة للتخطي): " msgid "Should this profile be enabled for installation?" -msgstr "هل يجب تمكين ملف التعريف هذا للتثبيت؟" +msgstr "هل يجب تمكين ملفّ التعريف هذا للتثبيت؟" msgid "Create your own" msgstr "اصنع بنفسك" @@ -1076,7 +1092,7 @@ msgid "" "Select a graphics driver or leave blank to install all open-source drivers" msgstr "" "\n" -"حدد برنامج تشغيل رسومات أو اتركه فارغاً لتثبيت جميع برامج التشغيل مفتوحة المصدر" +"حدّد برنامج تشغيل رسومات أو اتركه فارغاً لتثبيت جميع برامج التشغيل مفتوحة المصدر" msgid "Sway needs access to your seat (collection of hardware devices i.e. keyboard, mouse, etc)" msgstr "يحتاج Sway إلى الوصول إلى مقعدك (مجموعة من الأجهزة مثل لوحة المفاتيح والماوس وغيرها)" @@ -1088,7 +1104,7 @@ msgid "" msgstr "" "\n" "\n" -"حدد خياراً لمنح Sway إمكانية الوصول إلى أجهزتك" +"حدّد خياراً لمنح Sway إمكانية الوصول إلى أجهزتك" msgid "Graphics driver" msgstr "مشغل الرسومات" @@ -1100,28 +1116,28 @@ msgid "Please chose which greeter to install" msgstr "يرجى اختيار المُرحِّب الذي سيتم تثبيته" msgid "This is a list of pre-programmed default_profiles" -msgstr "هذه قائمة بالملفات الافتراضية المبرمجة مسبقًا" +msgstr "هذه قائمة بالملفّات الأصلية المبرمجة مسبقًا" msgid "Disk configuration" msgstr "ضبط القرص" msgid "Profiles" -msgstr "الملفات الشخصية" +msgstr "الملفّات الشخصية" msgid "Finding possible directories to save configuration files ..." -msgstr "البحث عن الدلائل المحتملة لحفظ ملفات الإعدادات ..." +msgstr "البحث عن الدلائل المحتملة لحفظ ملفّات الإعدادات ..." msgid "Select directory (or directories) for saving configuration files" -msgstr "تحديد مجلد (أو مجلدات) لحفظ ملفات التكوين" +msgstr "تحديد مجلد (أو مجلدات) لحفظ ملفّات التكوين" msgid "Add a custom mirror" -msgstr "إضافة مرآة مخصصة" +msgstr "إضافة مرآة مخصّصة" msgid "Change custom mirror" -msgstr "تغيير المرآة المخصصة" +msgstr "تغيير المرآة المخصّصة" msgid "Delete custom mirror" -msgstr "حذف المرآة المخصصة" +msgstr "حذف المرآة المخصّصة" msgid "Enter name (leave blank to skip): " msgstr "أدخل الاسم (اترك الاسم فارغاً للتخطي): " @@ -1130,16 +1146,16 @@ msgid "Enter url (leave blank to skip): " msgstr "أدخل عنوان url (اتركه فارغاً للتخطي): " msgid "Select signature check option" -msgstr "حدد خيار التحقق من التوقيع" +msgstr "حدّد خيار التحقق من التوقيع" msgid "Select signature option" -msgstr "حدد خيار التوقيع" +msgstr "حدّد خيار التوقيع" msgid "Custom mirrors" -msgstr "مرايا مخصصة" +msgstr "مرايا مخصّصة" msgid "Defined" -msgstr "محدد" +msgstr "محدّد" msgid "Save user configuration (including disk layout)" msgstr "حفظ إعدادات المستخدم (بما في ذلك تخطيط القرص)" @@ -1156,12 +1172,12 @@ msgid "" "\n" "{}" msgstr "" -"هل تريد حفظ ملف (ملفات) الضبط {} في الموقع التالي؟\n" +"هل تريد حفظ ملفّ (ملفّات) الضبط {} في الموقع التالي؟\n" "\n" "{}" msgid "Saving {} configuration files to {}" -msgstr "حفظ {} ملفات الإعدادات إلى {}" +msgstr "حفظ {} ملفّات الإعدادات إلى {}" msgid "Mirrors" msgstr "المرايا" @@ -1179,7 +1195,7 @@ msgid "Locales" msgstr "المحلية (Locales)" msgid "Use NetworkManager (necessary to configure internet graphically in GNOME and KDE)" -msgstr "استخدم مُدير الشبكة NetworkManager (ضروري لإعداد الإنترنت باستخدام واجهة رسومية في جنوم و كيدي)" +msgstr "استخدم NetworkManager (ضروري لإعداد الإنترنت باستخدام واجهة رسومية في جنوم و كيدي)" msgid "Total: {} / {}" msgstr "الإجمالي: {} / {}" @@ -1191,10 +1207,10 @@ msgid "If no unit is provided, the value is interpreted as sectors" msgstr "إذا لم يتم توفير أي وحدة، يتم تفسير القيمة على أنها قطاعات" msgid "Enter start (default: sector {}): " -msgstr "أدخل البداية (افتراضي: القطاع {}): " +msgstr "أدخل البداية (أصلي: القطاع {}): " msgid "Enter end (default: {}): " -msgstr "أدخل النهاية (افتراضي: {}): " +msgstr "أدخل النهاية (أصلي: {}): " msgid "Unable to determine fido2 devices. Is libfido2 installed?" msgstr "غير قادر على تحديد أجهزة fido2. هل تم تثبيت libfido2؟" @@ -1232,7 +1248,7 @@ msgid " - Maximum recommended value : {} ( Allows {} parallel downloads at a tim msgstr " - الحد الأقصى للقيمة الموصى بها: {} (يسمح بـ {} تنزيلات متوازية في المرة الواحدة)" msgid " - Disable/Default : 0 ( Disables parallel downloading, allows only 1 download at a time )\n" -msgstr " - تعطيل/افتراضي: 0 (تعطيل التنزيل المتوازي، يسمح بتنزيل واحد فقط في كل مرة)\n" +msgstr " - تعطيل/أصلي: 0 (تعطيل التنزيل المتوازي، يسمح بتنزيل واحد فقط في كل مرة)\n" msgid "Invalid input! Try again with a valid input [or 0 to disable]" msgstr "إدخال غير صالح! حاول مرة أخرى باستخدام إدخال صحيح [أو 0 لتعطيل]" @@ -1247,7 +1263,7 @@ msgid "" msgstr "" "\n" "\n" -"حدد خيارًا لمنح Hyprland إمكانية الوصول إلى أجهزتك" +"حدّد خيارًا لمنح Hyprland إمكانية الوصول إلى أجهزتك" msgid "All entered values can be suffixed with a unit: %, B, KB, KiB, MB, MiB..." msgstr "يمكن إرفاق جميع القيم المدخلة بوحدة: ٪، ب، كيلوبايت، كيلوبايت، كيلوبايت، ميغابايت، ميغابايت، ميغابايت..." @@ -1265,13 +1281,13 @@ msgid "Time syncronization not completing, while you wait - check the docs for w msgstr "عدم اكتمال مزامنة الوقت، أثناء الانتظار - راجع المستندات لمعرفة الحلول البديلة: https://archinstall.readthedocs.io/" msgid "Skipping waiting for automatic time sync (this can cause issues if time is out of sync during installation)" -msgstr "تخطي انتظار المزامنة التلقائية للوقت (قد يتسبب ذلك في حدوث مشكلات إذا كان الوقت غير متزامن أثناء التثبيت)" +msgstr "تخطي انتظار المزامنة التلقائية للوقت (قد يتسبب ذلك في حدوث مشكلات إذا كان الوقت غير متزامن أثناء التّثبيت)" msgid "Waiting for Arch Linux keyring sync (archlinux-keyring-wkd-sync) to complete." msgstr "في انتظار اكتمال مزامنة حلقة مفاتيح أرش لينكس (archlinux-keyring-wkd-sync)." msgid "Selected profiles: " -msgstr "ملفات تعريف مختارة: " +msgstr "ملفّات تعريف مختارة: " msgid "Time synchronization not completing, while you wait - check the docs for workarounds: https://archinstall.readthedocs.io/" msgstr "عدم اكتمال مزامنة الوقت، أثناء انتظارك - راجع المستندات لمعرفة الحلول: https://archinstall.readthedocs.io/" @@ -1299,13 +1315,13 @@ msgid "LVM configuration type" msgstr "نوع إعداد LVM" msgid "LVM disk encryption with more than 2 partitions is currently not supported" -msgstr "تشفير قرص LVM بأكثر من قسمين غير مدعوم حاليًا" +msgstr "تشفير قرص LVM بأكثر من تقسيمين غير مدعوم حاليًا" msgid "Use NetworkManager (necessary to configure internet graphically in GNOME and KDE Plasma)" -msgstr "استخدم مُدير الشبكة NetworkManager (ضروري لإعداد الإنترنت باستخدام واجهة رسومية في جنوم و كيدي)" +msgstr "استخدم NetworkManager (ضروري لإعداد الإنترنت فالواجهات الرّسوميّة GNOME و KDE Plasma)" msgid "Select a LVM option" -msgstr "حدد خيار LVM" +msgstr "حدّد خيار LVM" msgid "Partitioning" msgstr "تقسيم" @@ -1314,7 +1330,7 @@ msgid "Logical Volume Management (LVM)" msgstr "إدارة الحجم المنطقي (LVM)" msgid "Physical volumes" -msgstr "أحجام فيزيائية" +msgstr "أحجام فيزيائيّة" msgid "Volumes" msgstr "أحجام" @@ -1326,10 +1342,10 @@ msgid "LVM volumes to be encrypted" msgstr "أقسام LVM المراد تشفيرها" msgid "Select which LVM volumes to encrypt" -msgstr "حدد أقسام LVM المراد تشفيرها" +msgstr "حدّد أقسام LVM المراد تشفيرها" msgid "Default layout" -msgstr "التخطيط الافتراضي" +msgstr "التّخطيط الأصلي" msgid "No Encryption" msgstr "لا تشفير" @@ -1353,19 +1369,19 @@ msgid "Archinstall help" msgstr "مساعدة Archinstall" msgid " (default)" -msgstr " (افتراضي)" +msgstr " (أصلي)" msgid "Press Ctrl+h for help" msgstr "اضغط على Ctrl+h للحصول على المساعدة" msgid "Choose an option to give Sway access to your hardware" -msgstr "حدد خياراً لمنح Sway إمكانية الوصول إلى أجهزتك" +msgstr "حدّد خياراً لمنح Sway إمكانية الوصول إلى أجهزتك" msgid "Seat access" msgstr "الوصول إلى المقعد" msgid "Mountpoint" -msgstr "نقطة الضمّ:" +msgstr "نقطة التّثبيت" msgid "HSM" msgstr "HSM" @@ -1374,25 +1390,25 @@ msgid "Enter disk encryption password (leave blank for no encryption)" msgstr "أدخل كلمة مرور تشفير القرص (اتركها فارغة لعدم وجود تشفير):" msgid "Disk encryption password" -msgstr "كلمة سر التشفير" +msgstr "كلمة سر التّشفير" msgid "Partition - New" msgstr "تقسيم - جديد" msgid "Filesystem" -msgstr "نظام الملفات" +msgstr "نظام الملفّات" msgid "Invalid size" msgstr "الحجم غير صالح" msgid "Start (default: sector {}): " -msgstr "البداية (افتراضي: القطاع {}): " +msgstr "البداية (أصلي: القطاع {}): " msgid "End (default: {}): " -msgstr "النهاية (افتراضي: {}): " +msgstr "النهاية (أصلي: {}): " msgid "Subvolume name" -msgstr "اسم وحدة التخزين الفرعية" +msgstr "اسم وحدة التّخزين الفرعيّة" msgid "Disk configuration type" msgstr "نوع ضبط القرص" @@ -1401,7 +1417,7 @@ msgid "Root mount directory" msgstr "دليل جذر الضم" msgid "Select language" -msgstr "حدد لغة" +msgstr "حدّد لغة" msgid "Write additional packages to install (space separated, leave blank to skip)" msgstr "اكتب حزمًا إضافية لتثبيتها (تُفصَل بالمسافات، اتركها فارغة للتخطي):" @@ -1447,7 +1463,7 @@ msgid "DNS servers" msgstr "خوادم DNS" msgid "Configure interfaces" -msgstr "تهيئة الواجهات" +msgstr "تهيئة الروابط" msgid "Kernel" msgstr "النواة" @@ -1487,7 +1503,7 @@ msgstr "أدخل دليلا للتكوين (التكوينات) المراد ح #, python-brace-format msgid "Do you want to save the configuration file(s) to {}?" -msgstr "هل تريد حفظ ملف (ملفات) الضبط إلى {} ؟" +msgstr "هل تريد حفظ ملفّ (ملفّات) الضبط إلى {} ؟" msgid "Enabled" msgstr "مفعّل" @@ -1505,10 +1521,10 @@ msgid "Url" msgstr "عنوان URL" msgid "Select signature check" -msgstr "حدد خيار التحقق من التوقيع" +msgstr "حدّد خيار التحقق من التوقيع" msgid "Select execution mode" -msgstr "حدد وضع التنفيذ" +msgstr "حدّد وضع التنفيذ" msgid "Press ? for help" msgstr "اضغط ؟ للمساعدة" @@ -1518,24 +1534,22 @@ msgid "Choose an option to give Hyprland access to your hardware" msgstr "" "\n" "\n" -"حدد خيارًا لمنح Hyprland إمكانية الوصول إلى أجهزتك" +"حدّد خيارًا لمنح Hyprland إمكانية الوصول إلى أجهزتك" -#, fuzzy msgid "Additional repositories" -msgstr "المستودعات الاختيارية" +msgstr "المستودعات الإضافيّة" msgid "NTP" -msgstr "" +msgstr "NTP (بروتوكول وقت الشّبكة)" msgid "Swap on zram" -msgstr "" +msgstr "مُبادَلة على zram" msgid "Name" -msgstr "" +msgstr "الإسم" -#, fuzzy msgid "Signature check" -msgstr "حدد خيار التحقق من التوقيع" +msgstr "التّحقّق من التّوقيع" #, fuzzy, python-brace-format msgid "Selected free space segment on device {}:" @@ -1547,474 +1561,559 @@ msgstr "الإجمالي: {} / {}" #, fuzzy, python-brace-format msgid "Size (default: {}): " -msgstr "النهاية (افتراضي: {}): " +msgstr "النهاية (أصلي: {}): " -#, fuzzy msgid "HSM device" -msgstr "جهاز" +msgstr "جهاز HSM" msgid "Some packages could not be found in the repository" -msgstr "" +msgstr "لم يتمّ العثور على بعض الحزم في المستودع" -#, fuzzy msgid "User" -msgstr "اسم المستخدم" +msgstr "مستخدم" msgid "The specified configuration will be applied" -msgstr "" +msgstr "سيتم تطبيق التّكوين المُحدّد" msgid "Wipe" -msgstr "" +msgstr "طمس" -#, fuzzy msgid "Mark/Unmark as XBOOTLDR" -msgstr "وضع او إلغاء علامة قابل للإقلاع" +msgstr "وضع او إلغاء علامة قابل للإقلاع (XBOOTLDR)" -#, fuzzy msgid "Loading packages..." -msgstr "الباقات الإضافية" +msgstr "تحميل الحزم جارٍ" msgid "Select any packages from the below list that should be installed additionally" -msgstr "" +msgstr "اختر أيّ حزم إضافيّة، من القائمة أدناه، ترغب بتثبيتها" -#, fuzzy msgid "Add a custom repository" -msgstr "إضافة مرآة مخصصة" +msgstr "إضافة مستودع مخصّص" -#, fuzzy msgid "Change custom repository" -msgstr "تغيير المرآة المخصصة" +msgstr "تغيير المستودع المخصّص" -#, fuzzy msgid "Delete custom repository" -msgstr "حذف المرآة المخصصة" +msgstr "حذف المستودع المخصّص" -#, fuzzy msgid "Repository name" -msgstr "اسم المرآة" +msgstr "اسم المستودع" -#, fuzzy msgid "Add a custom server" -msgstr "إضافة مرآة مخصصة" +msgstr "إضافة خادم مخصّص" -#, fuzzy msgid "Change custom server" -msgstr "تغيير المرآة المخصصة" +msgstr "تغيير الخادم المخصّص" -#, fuzzy msgid "Delete custom server" -msgstr "حذف المرآة المخصصة" +msgstr "حذف الخادم المخصّص" msgid "Server url" -msgstr "" +msgstr "عنوان الخادم (URL)" -#, fuzzy msgid "Select regions" -msgstr "حدد خيار التوقيع" +msgstr "اختر المناطق" -#, fuzzy msgid "Add custom servers" -msgstr "إضافة مرآة مخصصة" +msgstr "إضافة خوادم مخصّصة" -#, fuzzy msgid "Add custom repository" -msgstr "إضافة مرآة مخصصة" +msgstr "إضافة مستودع مخصّص" -#, fuzzy msgid "Loading mirror regions..." -msgstr "مناطق المرايا" +msgstr "تحميل مناطق المرايا…" -#, fuzzy msgid "Mirrors and repositories" -msgstr "المستودعات الاختيارية" +msgstr "المرايا والمستودعات" -#, fuzzy msgid "Selected mirror regions" -msgstr "مناطق المرايا" +msgstr "مناطق المرايا المختارة" -#, fuzzy msgid "Custom servers" -msgstr "مرايا مخصصة" +msgstr "خوادم مخصّصة" -#, fuzzy msgid "Custom repositories" -msgstr "المستودعات الاختيارية" +msgstr "مستودعات مخصّصة" msgid "Only ASCII characters are supported" -msgstr "" +msgstr "يتم دعم أحرف ASCII فقط" msgid "Show help" -msgstr "" +msgstr "إظهار المساعدة" msgid "Exit help" -msgstr "" +msgstr "خروج من المساعدة" msgid "Preview scroll up" -msgstr "" +msgstr "مرّر المُعايَنة للأعلى" msgid "Preview scroll down" -msgstr "" +msgstr "مرّر المُعايَنة للأسفل" msgid "Move up" -msgstr "" +msgstr "اصعد لفوق" msgid "Move down" -msgstr "" +msgstr "انزل لأسفل" msgid "Move right" -msgstr "" +msgstr "تحرّك يمينًا" msgid "Move left" -msgstr "" +msgstr "تحرّك يسارًا" msgid "Jump to entry" -msgstr "" +msgstr "انتقل إلى الصّفحة" msgid "Skip selection (if available)" -msgstr "" +msgstr "تخطّي الاختيار (إن وُجَد)" msgid "Reset selection (if available)" -msgstr "" +msgstr "إعادة ضبط الاختيار (إن وُجَد)" -#, fuzzy msgid "Select on single select" -msgstr "حدد خيار التحقق من التوقيع" +msgstr "حدّد باستخدام التّحديد الفردي" -#, fuzzy msgid "Select on multi select" -msgstr "حدِّد منطقة زمنية" +msgstr "حدّد باستخدام التّحديد المتعدّد" msgid "Reset" -msgstr "" +msgstr "إعادة ضبط" -#, fuzzy msgid "Skip selection menu" -msgstr "حدد وضع التنفيذ" +msgstr "تخطي قائمة الاختيار" msgid "Start search mode" -msgstr "" +msgstr "ابدأ وضع البحث" msgid "Exit search mode" +msgstr "أنهي وضع البحث" + +msgid "General" msgstr "" #, fuzzy +msgid "Navigation" +msgstr "حفظ الإعدادات" + +#, fuzzy +msgid "Selection" +msgstr "اختر المناطق" + +msgid "Search" +msgstr "" + +msgid "Down" +msgstr "" + +msgid "Up" +msgstr "" + +#, fuzzy +msgid "Confirm" +msgstr "تأكيد وخروج" + +#, fuzzy +msgid "Focus right" +msgstr "تحرّك يمينًا" + +#, fuzzy +msgid "Focus left" +msgstr "تحرّك يسارًا" + +msgid "Toggle" +msgstr "" + +#, fuzzy +msgid "Show/Hide help" +msgstr "إظهار المساعدة" + +msgid "Quit" +msgstr "" + +msgid "First" +msgstr "" + +msgid "Last" +msgstr "" + +#, fuzzy +msgid "Select" +msgstr "اختر المناطق" + +msgid "Page Up" +msgstr "" + +msgid "Page Down" +msgstr "" + +#, fuzzy +msgid "Page up" +msgstr "مجموعة الحزم:" + +#, fuzzy +msgid "Page down" +msgstr "انزل لأسفل" + +msgid "Page Left" +msgstr "" + +#, fuzzy +msgid "Page Right" +msgstr "تحرّك يمينًا" + +msgid "Cursor up" +msgstr "" + +#, fuzzy +msgid "Cursor down" +msgstr "انزل لأسفل" + +#, fuzzy +msgid "Cursor right" +msgstr "تحرّك يمينًا" + +#, fuzzy +msgid "Cursor left" +msgstr "تحرّك يسارًا" + +msgid "Top" +msgstr "" + +msgid "Bottom" +msgstr "" + +msgid "Home" +msgstr "" + +#, fuzzy +msgid "End" +msgstr "مفعّل" + +#, fuzzy +msgid "Toggle option" +msgstr "خيارات وحدة التّخزين الفرعيّة" + +msgid "Scroll Up" +msgstr "" + +#, fuzzy +msgid "Scroll Down" +msgstr "مرّر المُعايَنة للأسفل" + +msgid "Scroll Left" +msgstr "" + +msgid "Scroll Right" +msgstr "" + +msgid "Scroll Home" +msgstr "" + +msgid "Scroll End" +msgstr "" + +msgid "Focus Next" +msgstr "" + +msgid "Focus Previous" +msgstr "" + +msgid "Copy selected text" +msgstr "" + msgid "labwc needs access to your seat (collection of hardware devices i.e. keyboard, mouse, etc)" -msgstr "يحتاج Sway إلى الوصول إلى مقعدك (مجموعة من الأجهزة مثل لوحة المفاتيح والماوس وغيرها)" +msgstr "يحتاج labwc للوصول إلى مقعدك (مجموعة أجهزة مثل لوحة المفاتيح، والفأرة وغيرها)" -#, fuzzy msgid "Choose an option to give labwc access to your hardware" -msgstr "حدد خياراً لمنح Sway إمكانية الوصول إلى أجهزتك" +msgstr "حدّد خيارًا لمنح labwc إمكانية الوصول إلى أجهزتك" -#, fuzzy msgid "niri needs access to your seat (collection of hardware devices i.e. keyboard, mouse, etc)" -msgstr "يحتاج Sway إلى الوصول إلى مقعدك (مجموعة من الأجهزة مثل لوحة المفاتيح والماوس وغيرها)" +msgstr "يحتاج niri للوصول إلى مقعدك (مجموعة أجهزة مثل لوحة المفاتيح، والفأرة وغيرها)" -#, fuzzy msgid "Choose an option to give niri access to your hardware" -msgstr "حدد خياراً لمنح Sway إمكانية الوصول إلى أجهزتك" +msgstr "حدّد خيارًا لمنح niri إمكانية الوصول إلى أجهزتك" -#, fuzzy msgid "Mark/Unmark as ESP" -msgstr "وضع او إلغاء علامة قابل للإقلاع" +msgstr "وضع او إلغاء علامة ESP" msgid "Package group:" -msgstr "" +msgstr "مجموعة الحزم:" -#, fuzzy msgid "Exit archinstall" -msgstr "مساعدة Archinstall" +msgstr "الخروج من Archinstall" -#, fuzzy msgid "Reboot system" -msgstr "نظام الملفات" +msgstr "أعد تشغيل النظام" -#, fuzzy msgid "chroot into installation for post-installation configurations" -msgstr "هل ترغب في الانتقال (chroot) إلى التثبيت الذي تم إنشاؤه حديثاً وإجراء تهيئة ما بعد التثبيت؟" +msgstr "قم بتغيير بيئة التّثبيت (chroot) لإجراءات ما بعد التّثبيت" msgid "Installation completed" -msgstr "" +msgstr "انتهى التّثبيت" -#, fuzzy msgid "What would you like to do next?" -msgstr "هل ترغب في الاستمرار؟" +msgstr "ماذا تريد أن تفعل بعد ذلك؟" -#, fuzzy, python-brace-format +#, python-brace-format msgid "Select which mode to configure for \"{}\"" -msgstr "حدد الوضع المراد تهيئته لـ\"{}\" أو تخطى لاستخدام الوضع الافتراضي \"{}\"" +msgstr "حدّد الوضع الذي تريد ضبطه لـ \"{}\"" -#, fuzzy msgid "Incorrect credentials file decryption password" -msgstr "كلمة سر التشفير" +msgstr "كلمة مرور فك تشفير ملفّ بيانات الاعتماد غير صحيحة" -#, fuzzy msgid "Incorrect password" -msgstr "كلمة مرور الجذر" +msgstr "كلمة مرور خاطئة" -#, fuzzy msgid "Credentials file decryption password" -msgstr "كلمة سر التشفير" +msgstr "كلمة مرور فك تشفير ملفّ بيانات الاعتماد" -#, fuzzy msgid "Do you want to encrypt the user_credentials.json file?" -msgstr "هل تريد حفظ ملف (ملفات) الضبط إلى {} ؟" +msgstr "هل تريد تشفير الملف user_credentials.json؟" -#, fuzzy msgid "Credentials file encryption password" -msgstr "كلمة سر التشفير" +msgstr "كلمة مرور تشفير ملفّ بيانات الاعتماد" -#, fuzzy, python-brace-format +#, python-brace-format msgid "Repositories: {}" -msgstr "اسم المرآة" +msgstr "المستودعات: {}" -#, fuzzy msgid "New version available" -msgstr "لا توجد أجهزة HSM متوفرة" +msgstr "يتوفر إصدار جديد" -#, fuzzy msgid "Passwordless login" -msgstr "كلمة المرور" +msgstr "تسجيل دخول بدون كلمة مرور" msgid "Second factor login" -msgstr "" +msgstr "تسجيل الدّخول باستخدام عامل ثانٍ" msgid "Bluetooth" -msgstr "" +msgstr "Bluetooth" -#, fuzzy msgid "Would you like to configure Bluetooth?" -msgstr "هل ترغب في الاستمرار؟" +msgstr "هل ترغب في ضبط إعدادات Bluetooth؟" msgid "Print service" -msgstr "" +msgstr "خدمة الطّباعة" -#, fuzzy msgid "Would you like to configure the print service?" -msgstr "هل ترغب في الاستمرار؟" +msgstr "هل ترغب في ضبط إعدادات خدمة الطباعة؟" -#, fuzzy msgid "Power management" -msgstr "إدارة التقسيم: {}" +msgstr "إدارة الطّاقة" msgid "Authentication" -msgstr "" +msgstr "المُصادَقة" msgid "Applications" -msgstr "" +msgstr "التّطبيقات" msgid "U2F login method: " -msgstr "" +msgstr "طريقة تسجيل الدّخول U2F: " msgid "Passwordless sudo: " -msgstr "" +msgstr "sudo دون كلمة مرور: " #, python-brace-format msgid "Btrfs snapshot type: {}" -msgstr "" +msgstr "نوع لقطة Btrfs: {}" msgid "Syncing the system..." -msgstr "" +msgstr "مزامنة النّظام…" msgid "Value cannot be empty" -msgstr "" +msgstr "لا ينبغي أن تكون القيمة فارغة" msgid "Snapshot type" -msgstr "" +msgstr "نوع اللّقطة" -#, fuzzy, python-brace-format +#, python-brace-format msgid "Snapshot type: {}" -msgstr "نوع البيئة: {}" +msgstr "نوع اللّقطة: {}" msgid "U2F login setup" -msgstr "" +msgstr "إعداد تسجيل الدّخول إلى U2F" msgid "No U2F devices found" -msgstr "" +msgstr "لم يتمّ العثور على أجهزة U2F" msgid "U2F Login Method" -msgstr "" +msgstr "طريقة تسجيل الدّخول U2F" -#, fuzzy msgid "Enable passwordless sudo?" -msgstr "أدخل كلمة مرور: " +msgstr "تفعيل sudo دون كلمة مرور؟" -#, fuzzy, python-brace-format +#, python-brace-format msgid "Setting up U2F device for user: {}" -msgstr "اختر جهاز FIDO2 لاستخدامه في HSM" +msgstr "إعداد جهاز U2F للمستخدم: {}" msgid "You may need to enter the PIN and then touch your U2F device to register it" -msgstr "" +msgstr "قد تحتاج إلى إدخال رمز PIN ثم لمس جهازك U2F لتسجيله" msgid "Starting device modifications in " -msgstr "" +msgstr "بدء تعديلات الجهاز في " -#, fuzzy msgid "No network connection found" -msgstr "لا يوجد إعداد للشبكة" +msgstr "لم يتم العثور على اتصال بالشبكة" -#, fuzzy msgid "Would you like to connect to a Wifi?" -msgstr "هل ترغب في الاستمرار؟" +msgstr "هل ترغب في الاتصال بشبكة WiFi؟" -#, fuzzy msgid "No wifi interface found" -msgstr "تهيئة الواجهات" +msgstr "لم يتم العثور على ربط WiFi" -#, fuzzy msgid "Select wifi network to connect to" -msgstr "حدِّد واجهة شبكة واحدة للإعداد" +msgstr "اختر شبكة WiFi للإتصال بها" msgid "Scanning wifi networks..." -msgstr "" +msgstr "مسح شبكات الـ WiFi" -#, fuzzy msgid "No wifi networks found" -msgstr "لا يوجد إعداد للشبكة" +msgstr "لم يتم العثور على شبكات WiFi" msgid "Failed setting up wifi" -msgstr "" +msgstr "فشل إعداد شبكة الـ WiFi" -#, fuzzy msgid "Enter wifi password" -msgstr "أدخل كلمة مرور: " +msgstr "أدخل كلمة مرور الـ WiFi" msgid "Ok" -msgstr "" +msgstr "حسنًا" msgid "Removable" -msgstr "" +msgstr "قابِل للنّقل" msgid "Install to removable location" -msgstr "" +msgstr "ثبِّت في مكان قابل للنّقل" msgid "Will install to /EFI/BOOT/ (removable location)" -msgstr "" +msgstr "سوف يتمّ التّثبيت في /EFI/BOOT/ (مكان قابل للنّقل)" msgid "Will install to standard location with NVRAM entry" -msgstr "" +msgstr "سيتم التّثبيت في الموقع القياسي مع عنصر NVRAM" msgid "Would you like to install the bootloader to the default removable media search location?" -msgstr "" +msgstr "هل ترغب في تثبيت برنامج الإقلاع في الموقع الأصلي للبحث عن الوسائط القابلة للنّقل؟" msgid "This installs the bootloader to /EFI/BOOT/BOOTX64.EFI (or similar) which is useful for:" -msgstr "" +msgstr "يُثَبَّتُ برنامج الإقلاع في /EFI/BOOT/BOOTX64.EFI (أو ما شابه ذلك)، وهو أمر مفيد لـ:" msgid "USB drives or other portable external media." -msgstr "" +msgstr "محرّكات أقراص USB أو وسائط تخزين خارجيّة محمولة أخرى." msgid "Systems where you want the disk to be bootable on any computer." -msgstr "" +msgstr "الأنظمة أين يكون القرص قابلاً للتّشغيل على أيّ حاسوب." msgid "Firmware that does not properly support NVRAM boot entries." -msgstr "" +msgstr "البرامج الثابتة التي لا تدعم بشكل صحيح إدخالات تمهيد NVRAM" msgid "Will install to /EFI/BOOT/ (removable location, safe default)" -msgstr "" +msgstr "سيتمّ التّثبيت في /EFI/BOOT/ (موقع قابل للنّقل، إعداد أصلي آمن)" msgid "Will install to custom location with NVRAM entry" -msgstr "" +msgstr "سيتم التّثبيت في موقع مخصّص مع إدخال NVRAM" msgid "Firmware that does not properly support NVRAM boot entries like most MSI motherboards," -msgstr "" +msgstr "البرامج الثّابتة التي لا تدعم بشكل صحيح إدخالات تمهيد NVRAM مثل معظم لوحات الأمّ من MSI،" msgid "most Apple Macs, many laptops..." -msgstr "" +msgstr "معظم أجهزة Mac من Apple، والعديد من الحواسيب المحمولة…" -#, fuzzy msgid "Language" -msgstr "لغة الإعدادات المحلية" +msgstr "اللّغة" msgid "Compression algorithm" -msgstr "" +msgstr "خوارزميّة الضّغط" -#, fuzzy msgid "Only packages such as base, sudo, linux, linux-firmware, efibootmgr and optional profile packages are installed." -msgstr "فقط الحزم مثل base وbase-devel وlinux وlinux-firmware وefibootmgr و حِزم مِلف اختيارية سوف تُثَبَّت." +msgstr "يتم تثبيت حزم مثل base و sudo و linux و linux-firmware و efibootmgr وحزم الملفّات الشّخصية الاختياريّة فقط." -#, fuzzy msgid "Select zram compression algorithm:" -msgstr "حدد نقطة التثبيت :" +msgstr "حدّد خوارزميّة ضغط zram:" msgid "Use Network Manager (default backend)" -msgstr "" +msgstr "استخدم Network Manager (الخادم الخلفي الأصلي)" msgid "Use Network Manager (iwd backend)" -msgstr "" +msgstr "استخدم Network Manager (الخادم الخلفي iwd)" msgid "Firewall" +msgstr "جدار الحماية" + +#, fuzzy +msgid "Additional fonts" +msgstr "المستودعات الإضافيّة" + +#, fuzzy +msgid "Select font packages to install" +msgstr "اختر برنامج الإقلاع المُراد تثبيته" + +msgid "Unicode font coverage for most languages" +msgstr "" + +msgid "color emoji for browsers and apps" +msgstr "" + +msgid "Chinese, Japanese, Korean characters" msgstr "" -#, fuzzy msgid "Select audio configuration" -msgstr "حفظ إعدادات المستخدم" +msgstr "حدّد إعدادات الصوت" -#, fuzzy msgid "Enter credentials file decryption password" -msgstr "كلمة سر التشفير" +msgstr "أدخل كلمة مرور فك تشفير ملفّ بيانات الاعتماد" -#, fuzzy msgid "Enter root password" -msgstr "أدخل كلمة مرور: " +msgstr "أدخل كلمة مرور root" msgid "Select bootloader to install" -msgstr "" +msgstr "اختر برنامج الإقلاع المُراد تثبيته" -#, fuzzy msgid "Configuration preview" -msgstr "الإعداد " +msgstr "معاينة الإعدادات" -#, fuzzy msgid "Enter a directory for the configuration(s) to be saved" -msgstr "أدخل مجلداً للإعدادات التي سيتم حفظها: " +msgstr "أدخل مجلدًا لحفظ الإعدادات المراد حفظها" -#, fuzzy msgid "Select encryption type" -msgstr "نوع التشفير" +msgstr "حدّد نوع التّشفير" -#, fuzzy msgid "Select disks for the installation" -msgstr "اسم المضيف المُراد للتثبيت: " +msgstr "حدّد الأقراص للتّثبيت" -#, fuzzy msgid "Enter a mountpoint" -msgstr "حدد نقطة التثبيت :" +msgstr "حدّد نقطة تثبيت" -#, fuzzy, python-brace-format +#, python-brace-format msgid "Enter a size (default: {}): " -msgstr "أدخل النهاية (افتراضي: {}): " +msgstr "أدخل المساحة (أصلي: {}): " -#, fuzzy msgid "Enter subvolume name" -msgstr "اسم وحدة التخزين الفرعية" +msgstr "اسم وحدة التّخزين الفرعيّة" -#, fuzzy msgid "Enter subvolume mountpoint" -msgstr "نقطة تحميل وحدة التخزين الفرعية" +msgstr "نقطة تثبيت وحدة التّخزين الفرعيّة" -#, fuzzy msgid "Select a disk configuration" msgstr "ضبط القرص" -#, fuzzy msgid "Enter root mount directory" -msgstr "دليل جذر الضم" +msgstr "أدخل الدليل الجذر لنقاط التثبيت" msgid "You will use whatever drive-setup is mounted at the specified directory" -msgstr "" +msgstr "ستستخدم أيّ إعداد محرّك أقراص مثبَّت في الدّليل المحدّد" msgid "WARNING: Archinstall won't check the suitability of this setup" -msgstr "" +msgstr "تحذير: لن يتحقّق برنامج Archinstall من مدى ملاءمة هذا الإعداد" -#, fuzzy msgid "Select main filesystem" -msgstr "تغيير نظام الملفات" +msgstr "اختر نظام الملفّات الرّئيسي" msgid "Enter a hostname" -msgstr "" +msgstr "أدخل اسم الحاسوب" -#, fuzzy msgid "Select timezone" -msgstr "حدِّد منطقة زمنية" +msgstr "حدِّد المنطقة الزّمنية" #, fuzzy msgid "Enter the number of parallel downloads to be enabled" @@ -2025,74 +2124,110 @@ msgstr "" #, python-brace-format msgid "Value must be between 1 and {}" -msgstr "" +msgstr "يجب أن تكون القيمة بين 1 و {}" -#, fuzzy msgid "Select which kernel(s) to install" -msgstr "يرجى اختيار المُرحِّب الذي سيتم تثبيته" +msgstr "حدّد النّوى التي تريد تثبيتها" -#, fuzzy msgid "Enter a respository name" -msgstr "اسم المرآة" +msgstr "أدخل اسم المستودع" -#, fuzzy msgid "Enter the repository url" -msgstr "تغيير المرآة المخصصة" +msgstr "أدخل عنوان URL للمستودع" msgid "Enter server url" -msgstr "" +msgstr "أدخل عنوان الخادم (URL)" -#, fuzzy msgid "Select mirror regions to be enabled" -msgstr "مناطق المرايا" +msgstr "حدّد مناطق المرايا المراد تفعيلها" -#, fuzzy msgid "Select optional repositories to be enabled" -msgstr "اختر المستودعات الإضافية الاختيارية التي تريد تمكينها" +msgstr "اختر المستودعات الاختيارية التي تريد تمكينها" -#, fuzzy msgid "Select an interface" -msgstr "حذف الواجهة" +msgstr "حدّد الرّبط" -#, fuzzy msgid "Choose network configuration" -msgstr "لا يوجد إعداد للشبكة" +msgstr "اختر إعدادات الشّبكة" -#, fuzzy msgid "No packages found" -msgstr "تهيئة الواجهات" +msgstr "لم يتم العثور على أيّ حزم" -#, fuzzy msgid "Select which greeter to install" -msgstr "يرجى اختيار المُرحِّب الذي سيتم تثبيته" +msgstr "اختر المُرحِّب الذي سيتم تثبيته" -#, fuzzy msgid "Select a profile type" -msgstr "ملفات تعريف مختارة: " +msgstr "حدد نوع الملف الشخصي" -#, fuzzy msgid "Enter new password" -msgstr "أدخل كلمة مرور: " +msgstr "أدخل كلمة مرور جديدة" msgid "Enter a username" -msgstr "" +msgstr "أدخل اسم المستخدم" -#, fuzzy msgid "Enter a password" -msgstr "أدخل كلمة مرور: " +msgstr "أدخل كلمة مرور" -#, fuzzy msgid "The password did not match, please try again" -msgstr "كلمة المرور التأكيدية غير متطابقة، يرجى المحاولة مرة أخرى" +msgstr "كلمة المرور التأكيدية غير متطابقة، ترجى المحاولة مرة أخرى" msgid "Password strength: Weak" -msgstr "" +msgstr "قوة كلمة المرور: ضعيفة" msgid "Password strength: Moderate" -msgstr "" +msgstr "قوة كلمة المرور: متوسطة" msgid "Password strength: Strong" -msgstr "" +msgstr "قوة كلمة المرور: قوية" msgid "The selected desktop profile requires a regular user to log in via the greeter" +msgstr "يتطلب ملفّ تعريف سطح المكتب المحدّد من المستخدم العادي تسجيل الدخول عبر لوحة الترحيب" + +#, fuzzy, python-brace-format +msgid "Environment type: {} {}" +msgstr "نوع البيئة: {}" + +#, fuzzy +msgid "Input cannot be empty" +msgstr "لا ينبغي أن تكون القيمة فارغة" + +msgid "Recommended" +msgstr "" + +#, fuzzy +msgid "Package" +msgstr "مجموعة الحزم:" + +msgid "Curated selection of KDE Plasma packages" +msgstr "" + +msgid "Dependencies" +msgstr "" + +#, fuzzy +msgid "Package group" +msgstr "مجموعة الحزم:" + +msgid "Extensive KDE Plasma installation" +msgstr "" + +#, fuzzy +msgid "Packages in group" +msgstr "مجموعة الحزم:" + +msgid "Minimal KDE Plasma installation" +msgstr "" + +#, fuzzy +msgid "Description" +msgstr "تشفير القرص " + +#, fuzzy +msgid "Select a flavor of KDE Plasma to install" +msgstr "اختر برنامج الإقلاع المُراد تثبيته" + +msgid "Arial/Times/Courier replacement, Cyrillic support for Steam/games" +msgstr "" + +msgid "wide Unicode coverage, good fallback font" msgstr "" diff --git a/archinstall/locales/base.pot b/archinstall/locales/base.pot index ad24c179..d3b16766 100644 --- a/archinstall/locales/base.pot +++ b/archinstall/locales/base.pot @@ -833,6 +833,19 @@ msgstr "" msgid "Parallel Downloads" msgstr "" +msgid "Pacman" +msgstr "" + +msgid "Color" +msgstr "" + +#, python-brace-format +msgid "Enter the number of parallel downloads (1-{})" +msgstr "" + +msgid "Enable colored output for pacman" +msgstr "" + msgid "ESC to skip" msgstr "" @@ -1712,6 +1725,123 @@ msgstr "" msgid "Exit search mode" msgstr "" +msgid "General" +msgstr "" + +msgid "Navigation" +msgstr "" + +msgid "Selection" +msgstr "" + +msgid "Search" +msgstr "" + +msgid "Down" +msgstr "" + +msgid "Up" +msgstr "" + +msgid "Confirm" +msgstr "" + +msgid "Focus right" +msgstr "" + +msgid "Focus left" +msgstr "" + +msgid "Toggle" +msgstr "" + +msgid "Show/Hide help" +msgstr "" + +msgid "Quit" +msgstr "" + +msgid "First" +msgstr "" + +msgid "Last" +msgstr "" + +msgid "Select" +msgstr "" + +msgid "Page Up" +msgstr "" + +msgid "Page Down" +msgstr "" + +msgid "Page up" +msgstr "" + +msgid "Page down" +msgstr "" + +msgid "Page Left" +msgstr "" + +msgid "Page Right" +msgstr "" + +msgid "Cursor up" +msgstr "" + +msgid "Cursor down" +msgstr "" + +msgid "Cursor right" +msgstr "" + +msgid "Cursor left" +msgstr "" + +msgid "Top" +msgstr "" + +msgid "Bottom" +msgstr "" + +msgid "Home" +msgstr "" + +msgid "End" +msgstr "" + +msgid "Toggle option" +msgstr "" + +msgid "Scroll Up" +msgstr "" + +msgid "Scroll Down" +msgstr "" + +msgid "Scroll Left" +msgstr "" + +msgid "Scroll Right" +msgstr "" + +msgid "Scroll Home" +msgstr "" + +msgid "Scroll End" +msgstr "" + +msgid "Focus Next" +msgstr "" + +msgid "Focus Previous" +msgstr "" + +msgid "Copy selected text" +msgstr "" + msgid "" "labwc needs access to your seat (collection of hardware devices i.e. " "keyboard, mouse, etc)" @@ -1943,6 +2073,21 @@ msgstr "" msgid "Firewall" msgstr "" +msgid "Additional fonts" +msgstr "" + +msgid "Select font packages to install" +msgstr "" + +msgid "Unicode font coverage for most languages" +msgstr "" + +msgid "color emoji for browsers and apps" +msgstr "" + +msgid "Chinese, Japanese, Korean characters" +msgstr "" + msgid "Select audio configuration" msgstr "" @@ -2073,3 +2218,42 @@ msgstr "" #, python-brace-format msgid "Environment type: {} {}" msgstr "" + +msgid "Input cannot be empty" +msgstr "" + +msgid "Recommended" +msgstr "" + +msgid "Package" +msgstr "" + +msgid "Curated selection of KDE Plasma packages" +msgstr "" + +msgid "Dependencies" +msgstr "" + +msgid "Package group" +msgstr "" + +msgid "Extensive KDE Plasma installation" +msgstr "" + +msgid "Packages in group" +msgstr "" + +msgid "Minimal KDE Plasma installation" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Select a flavor of KDE Plasma to install" +msgstr "" + +msgid "Arial/Times/Courier replacement, Cyrillic support for Steam/games" +msgstr "" + +msgid "wide Unicode coverage, good fallback font" +msgstr "" diff --git a/archinstall/locales/ca/LC_MESSAGES/base.po b/archinstall/locales/ca/LC_MESSAGES/base.po index 5e1fad97..05897bb5 100644 --- a/archinstall/locales/ca/LC_MESSAGES/base.po +++ b/archinstall/locales/ca/LC_MESSAGES/base.po @@ -823,6 +823,19 @@ msgstr "Entrada no vàlida! Intenteu-ho novament amb una entrada vàlida [1 a {m msgid "Parallel Downloads" msgstr "Descàrregues paral·leles" +msgid "Pacman" +msgstr "" + +msgid "Color" +msgstr "" + +#, fuzzy, python-brace-format +msgid "Enter the number of parallel downloads (1-{})" +msgstr "Introduïu el número de descàrregues paral·leles permeses" + +msgid "Enable colored output for pacman" +msgstr "" + msgid "ESC to skip" msgstr "ESC per a ometre" @@ -1663,6 +1676,139 @@ msgstr "Iniciar el mode de cerca" msgid "Exit search mode" msgstr "Sortir del mode de cerca" +msgid "General" +msgstr "" + +#, fuzzy +msgid "Navigation" +msgstr "Guardar configuració" + +#, fuzzy +msgid "Selection" +msgstr "Seleccioneu regions" + +msgid "Search" +msgstr "" + +msgid "Down" +msgstr "" + +msgid "Up" +msgstr "" + +#, fuzzy +msgid "Confirm" +msgstr "Confirmar i sortir" + +#, fuzzy +msgid "Focus right" +msgstr "Mou a la dreta" + +#, fuzzy +msgid "Focus left" +msgstr "Mou a l'esquerra" + +msgid "Toggle" +msgstr "" + +#, fuzzy +msgid "Show/Hide help" +msgstr "Mostrar l'ajuda" + +msgid "Quit" +msgstr "" + +msgid "First" +msgstr "" + +msgid "Last" +msgstr "" + +#, fuzzy +msgid "Select" +msgstr "Seleccioneu regions" + +msgid "Page Up" +msgstr "" + +msgid "Page Down" +msgstr "" + +#, fuzzy +msgid "Page up" +msgstr "Group de paquets:" + +#, fuzzy +msgid "Page down" +msgstr "Mou avall" + +msgid "Page Left" +msgstr "" + +#, fuzzy +msgid "Page Right" +msgstr "Mou a la dreta" + +msgid "Cursor up" +msgstr "" + +#, fuzzy +msgid "Cursor down" +msgstr "Mou avall" + +#, fuzzy +msgid "Cursor right" +msgstr "Mou a la dreta" + +#, fuzzy +msgid "Cursor left" +msgstr "Mou a l'esquerra" + +msgid "Top" +msgstr "" + +msgid "Bottom" +msgstr "" + +msgid "Home" +msgstr "" + +#, fuzzy +msgid "End" +msgstr "Activat" + +#, fuzzy +msgid "Toggle option" +msgstr "Opcions del subvolum" + +msgid "Scroll Up" +msgstr "" + +#, fuzzy +msgid "Scroll Down" +msgstr "Previsualització avall" + +msgid "Scroll Left" +msgstr "" + +msgid "Scroll Right" +msgstr "" + +msgid "Scroll Home" +msgstr "" + +msgid "Scroll End" +msgstr "" + +msgid "Focus Next" +msgstr "" + +msgid "Focus Previous" +msgstr "" + +msgid "Copy selected text" +msgstr "" + msgid "labwc needs access to your seat (collection of hardware devices i.e. keyboard, mouse, etc)" msgstr "labwc necessita accés al vostre seient (gestor de dispositius de maquinari, com ara teclat, ratolí, etc)" @@ -1881,6 +2027,23 @@ msgstr "Utilitzar Network Manager (backend per a iwd)" msgid "Firewall" msgstr "Tallafocs" +#, fuzzy +msgid "Additional fonts" +msgstr "Repositoris addicionals" + +#, fuzzy +msgid "Select font packages to install" +msgstr "Selecció del bootloader a instal·lar" + +msgid "Unicode font coverage for most languages" +msgstr "" + +msgid "color emoji for browsers and apps" +msgstr "" + +msgid "Chinese, Japanese, Korean characters" +msgstr "" + msgid "Select audio configuration" msgstr "Seleccionar configuració d'àudio" @@ -2002,3 +2165,52 @@ msgstr "Seguretat de la contrasenya: alta" msgid "The selected desktop profile requires a regular user to log in via the greeter" msgstr "El perfil d'escriptori seleccionat necessita de l'inici de sessió d'un usuari mitjançant el gestor" + +#, fuzzy, python-brace-format +msgid "Environment type: {} {}" +msgstr "Tipus d'entorn: {}" + +#, fuzzy +msgid "Input cannot be empty" +msgstr "El valor no pot ser buit" + +msgid "Recommended" +msgstr "" + +#, fuzzy +msgid "Package" +msgstr "Group de paquets:" + +msgid "Curated selection of KDE Plasma packages" +msgstr "" + +msgid "Dependencies" +msgstr "" + +#, fuzzy +msgid "Package group" +msgstr "Group de paquets:" + +msgid "Extensive KDE Plasma installation" +msgstr "" + +#, fuzzy +msgid "Packages in group" +msgstr "Group de paquets:" + +msgid "Minimal KDE Plasma installation" +msgstr "" + +#, fuzzy +msgid "Description" +msgstr "Xifrat de disc" + +#, fuzzy +msgid "Select a flavor of KDE Plasma to install" +msgstr "Selecció del bootloader a instal·lar" + +msgid "Arial/Times/Courier replacement, Cyrillic support for Steam/games" +msgstr "" + +msgid "wide Unicode coverage, good fallback font" +msgstr "" diff --git a/archinstall/locales/cs/LC_MESSAGES/base.po b/archinstall/locales/cs/LC_MESSAGES/base.po index ce33aff2..35bf9c45 100644 --- a/archinstall/locales/cs/LC_MESSAGES/base.po +++ b/archinstall/locales/cs/LC_MESSAGES/base.po @@ -815,6 +815,19 @@ msgstr "Neplatný vstup! Zkuste to, prosím, znovu s platným vstupem [1 až {ma msgid "Parallel Downloads" msgstr "Paralelní stahování" +msgid "Pacman" +msgstr "" + +msgid "Color" +msgstr "" + +#, fuzzy, python-brace-format +msgid "Enter the number of parallel downloads (1-{})" +msgstr "Zadejte povolený počet paralelních stahování, která mají být povolena" + +msgid "Enable colored output for pacman" +msgstr "" + msgid "ESC to skip" msgstr "Pomocí ESC přeskočíte" @@ -1655,6 +1668,139 @@ msgstr "Spustit režim vyhledávání" msgid "Exit search mode" msgstr "Opustit režim vyhledávání" +msgid "General" +msgstr "" + +#, fuzzy +msgid "Navigation" +msgstr "Uložit konfiguraci" + +#, fuzzy +msgid "Selection" +msgstr "Zvolte regiony" + +msgid "Search" +msgstr "" + +msgid "Down" +msgstr "" + +msgid "Up" +msgstr "" + +#, fuzzy +msgid "Confirm" +msgstr "Potvrdit a ukončit" + +#, fuzzy +msgid "Focus right" +msgstr "Posunout doprava" + +#, fuzzy +msgid "Focus left" +msgstr "Posunout doleva" + +msgid "Toggle" +msgstr "" + +#, fuzzy +msgid "Show/Hide help" +msgstr "Zobrazit nápovědu" + +msgid "Quit" +msgstr "" + +msgid "First" +msgstr "" + +msgid "Last" +msgstr "" + +#, fuzzy +msgid "Select" +msgstr "Zvolte regiony" + +msgid "Page Up" +msgstr "" + +msgid "Page Down" +msgstr "" + +#, fuzzy +msgid "Page up" +msgstr "Skupina balíčků:" + +#, fuzzy +msgid "Page down" +msgstr "Posunout dolů" + +msgid "Page Left" +msgstr "" + +#, fuzzy +msgid "Page Right" +msgstr "Posunout doprava" + +msgid "Cursor up" +msgstr "" + +#, fuzzy +msgid "Cursor down" +msgstr "Posunout dolů" + +#, fuzzy +msgid "Cursor right" +msgstr "Posunout doprava" + +#, fuzzy +msgid "Cursor left" +msgstr "Posunout doleva" + +msgid "Top" +msgstr "" + +msgid "Bottom" +msgstr "" + +msgid "Home" +msgstr "" + +#, fuzzy +msgid "End" +msgstr "Povoleno" + +#, fuzzy +msgid "Toggle option" +msgstr "Přepínače podsvazku" + +msgid "Scroll Up" +msgstr "" + +#, fuzzy +msgid "Scroll Down" +msgstr "Posunout náhled dolů" + +msgid "Scroll Left" +msgstr "" + +msgid "Scroll Right" +msgstr "" + +msgid "Scroll Home" +msgstr "" + +msgid "Scroll End" +msgstr "" + +msgid "Focus Next" +msgstr "" + +msgid "Focus Previous" +msgstr "" + +msgid "Copy selected text" +msgstr "" + msgid "labwc needs access to your seat (collection of hardware devices i.e. keyboard, mouse, etc)" msgstr "labwc vyžaduje přístup k vašemu sezení (soubor zařízení jako např. klávesnice, myš, atd.)" @@ -1873,6 +2019,23 @@ msgstr "Použít Network Manager (iwd backend)" msgid "Firewall" msgstr "Firewall" +#, fuzzy +msgid "Additional fonts" +msgstr "Dodatečné repozitáře" + +#, fuzzy +msgid "Select font packages to install" +msgstr "Zvolte zavaděč k instalaci" + +msgid "Unicode font coverage for most languages" +msgstr "" + +msgid "color emoji for browsers and apps" +msgstr "" + +msgid "Chinese, Japanese, Korean characters" +msgstr "" + msgid "Select audio configuration" msgstr "Zvolte konfiguraci zvuku" @@ -1900,6 +2063,7 @@ msgstr "Zvolte disky pro instalaci" msgid "Enter a mountpoint" msgstr "Zadejte přípojný bod" +#, python-brace-format msgid "Enter a size (default: {}): " msgstr "Zadejte velikost (výchozí: {}): " @@ -1994,3 +2158,52 @@ msgstr "Síla hesla: Silné" msgid "The selected desktop profile requires a regular user to log in via the greeter" msgstr "Zvolený profil plochy vyžaduje, aby se normální uživatel přihlásil prostřednictvím přihlašovací obrazovky" + +#, fuzzy, python-brace-format +msgid "Environment type: {} {}" +msgstr "Typ prostředí: {}" + +#, fuzzy +msgid "Input cannot be empty" +msgstr "Hodnota nesmí být prázdná" + +msgid "Recommended" +msgstr "" + +#, fuzzy +msgid "Package" +msgstr "Skupina balíčků:" + +msgid "Curated selection of KDE Plasma packages" +msgstr "" + +msgid "Dependencies" +msgstr "" + +#, fuzzy +msgid "Package group" +msgstr "Skupina balíčků:" + +msgid "Extensive KDE Plasma installation" +msgstr "" + +#, fuzzy +msgid "Packages in group" +msgstr "Skupina balíčků:" + +msgid "Minimal KDE Plasma installation" +msgstr "" + +#, fuzzy +msgid "Description" +msgstr "Šifrování disku" + +#, fuzzy +msgid "Select a flavor of KDE Plasma to install" +msgstr "Zvolte zavaděč k instalaci" + +msgid "Arial/Times/Courier replacement, Cyrillic support for Steam/games" +msgstr "" + +msgid "wide Unicode coverage, good fallback font" +msgstr "" diff --git a/archinstall/locales/de/LC_MESSAGES/base.mo b/archinstall/locales/de/LC_MESSAGES/base.mo index 8aef1ad2..5e3d2fc3 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 1c815e0f..9e2386a4 100644 --- a/archinstall/locales/de/LC_MESSAGES/base.po +++ b/archinstall/locales/de/LC_MESSAGES/base.po @@ -299,7 +299,7 @@ msgid "Automatic time sync (NTP)" msgstr "Automatische Zeitsynchronisierung (NTP)" msgid "Install ({} config(s) missing)" -msgstr "Installieren ({} Konfiguration(en) ausständig)" +msgstr "Installieren ({} Konfiguration(en) ausstehend)" msgid "" "You decided to skip harddrive selection\n" @@ -824,6 +824,19 @@ msgstr "Ungültige Eingabe! Erneut mit gültiger Eingabe versuchen [1 bis {max_d msgid "Parallel Downloads" msgstr "Parallele Downloads" +msgid "Pacman" +msgstr "Pacman" + +msgid "Color" +msgstr "Farbe" + +#, python-brace-format +msgid "Enter the number of parallel downloads (1-{})" +msgstr "Anzahl paralleler Downloads eingeben (1-{})" + +msgid "Enable colored output for pacman" +msgstr "Farbige Ausgabe für Pacman aktivieren" + msgid "ESC to skip" msgstr "Drücken Sie ESC, um zu überspringen" @@ -854,7 +867,7 @@ msgstr "Konnte Profil nicht von der angegebenen URL holen: {}" #, python-brace-format msgid "Profiles must have unique name, but profile definitions with duplicate name found: {}" -msgstr "Profile müssen einen eindeutige Namen haben, aber Profildefinition mit gleichem Namen gefunden: {}" +msgstr "Profile müssen einen eindeutigen Namen haben, aber Profildefinition mit gleichem Namen gefunden: {}" msgid "Select one or more devices to use and configure" msgstr "Wählen Sie ein oder mehrere Gerät(e) aus, die konfiguriert und verwendet werden sollen" @@ -1037,7 +1050,7 @@ msgid "The proprietary Nvidia driver is not supported by Sway. It is likely that msgstr "Der proprietäre Nvidia-Treiber wird von Sway nicht unterstützt. Es ist wahrscheinlich, dass Fehler auftreten werden, trotzdem fortfahren?" msgid "Installed packages" -msgstr "Installiere Pakete" +msgstr "Installierte Pakete" msgid "Add profile" msgstr "Profil hinzufügen" @@ -1072,7 +1085,7 @@ msgid "" msgstr "" "\n" "\n" -"Wählen sie einen Grafiktreiber aus oder leer lassen um alle quelloffenen Treiber zu installieren" +"Wählen Sie einen Grafiktreiber aus oder leer lassen, um alle quelloffenen Treiber zu installieren" msgid "Sway needs access to your seat (collection of hardware devices i.e. keyboard, mouse, etc)" msgstr "Sway benötigt Zugriff auf ihren Seat (Sammlung von Hardwaregeräten wie Tastatur, Maus, usw.)" @@ -1467,7 +1480,7 @@ msgid "Confirm password" msgstr "Passwort bestätigen" msgid "The confirmation password did not match, please try again" -msgstr "Das Passwort stimmt nicht überein, bitte versuche es erneut" +msgstr "Das Passwort stimmt nicht überein, bitte versuchen Sie es erneut" msgid "Not a valid directory" msgstr "Ungültiges Verzeichnis" @@ -1546,7 +1559,7 @@ msgid "Some packages could not be found in the repository" msgstr "Einige Pakete konnten nicht in den Repositorien gefunden werden" msgid "User" -msgstr "Benutzername" +msgstr "Benutzer" msgid "The specified configuration will be applied" msgstr "Die festgelegte Konfiguration wird angewendet" @@ -1665,6 +1678,123 @@ msgstr "Suchmodus starten" msgid "Exit search mode" msgstr "Suchmodus beenden" +msgid "General" +msgstr "Allgemein" + +msgid "Navigation" +msgstr "Navigation" + +msgid "Selection" +msgstr "Auswahl" + +msgid "Search" +msgstr "Suchen" + +msgid "Down" +msgstr "Runter" + +msgid "Up" +msgstr "Hoch" + +msgid "Confirm" +msgstr "Bestätigen und Schließen" + +msgid "Focus right" +msgstr "Nach rechts bewegen" + +msgid "Focus left" +msgstr "Nach links bewegen" + +msgid "Toggle" +msgstr "Umschalten" + +msgid "Show/Hide help" +msgstr "Hilfe anzeigen/ausblenden" + +msgid "Quit" +msgstr "Beenden" + +msgid "First" +msgstr "Erste" + +msgid "Last" +msgstr "Letzte" + +msgid "Select" +msgstr "Auswählen" + +msgid "Page Up" +msgstr "Bild nach oben" + +msgid "Page Down" +msgstr "Bild nach unten" + +msgid "Page up" +msgstr "Bild nach oben" + +msgid "Page down" +msgstr "Bild nach unten" + +msgid "Page Left" +msgstr "Seite nach links" + +msgid "Page Right" +msgstr "Seite nach rechts" + +msgid "Cursor up" +msgstr "Cursor nach oben" + +msgid "Cursor down" +msgstr "Cursor nach unten" + +msgid "Cursor right" +msgstr "Cursor nach rechts" + +msgid "Cursor left" +msgstr "Cursor nach links" + +msgid "Top" +msgstr "Zum Anfang" + +msgid "Bottom" +msgstr "Zum Ende" + +msgid "Home" +msgstr "Pos1" + +msgid "End" +msgstr "Ende" + +msgid "Toggle option" +msgstr "Option umschalten" + +msgid "Scroll Up" +msgstr "Nach oben scrollen" + +msgid "Scroll Down" +msgstr "Nach unten scrollen" + +msgid "Scroll Left" +msgstr "Nach links scrollen" + +msgid "Scroll Right" +msgstr "Nach rechts scrollen" + +msgid "Scroll Home" +msgstr "Zum Anfang scrollen" + +msgid "Scroll End" +msgstr "Zum Ende scrollen" + +msgid "Focus Next" +msgstr "Nächstes fokussieren" + +msgid "Focus Previous" +msgstr "Vorheriges fokussieren" + +msgid "Copy selected text" +msgstr "Ausgewählten Text kopieren" + msgid "labwc needs access to your seat (collection of hardware devices i.e. keyboard, mouse, etc)" msgstr "labwc benötigt Zugriff auf ihren Seat (Sammlung von Hardwaregeräten wie Tastatur, Maus, usw.)" @@ -1740,10 +1870,10 @@ msgid "Print service" msgstr "Drucker-Service" msgid "Would you like to configure the print service?" -msgstr "Möchten Sie Bluetooth aktivieren?" +msgstr "Möchten Sie den Drucker-Service konfigurieren?" msgid "Power management" -msgstr "Partitionsverwaltung: {}" +msgstr "Energieverwaltung" msgid "Authentication" msgstr "Authentifizierung" @@ -1794,31 +1924,31 @@ msgid "You may need to enter the PIN and then touch your U2F device to register msgstr "Sie müssen möglicherweise Ihre PIN eingeben und danach Ihr U2F-Gerät berühren, um es zu registrieren" msgid "Starting device modifications in " -msgstr "" +msgstr "Starte Geräteänderungen in " msgid "No network connection found" -msgstr "Keine Netzwerkkonfiguration" +msgstr "Keine Netzwerkverbindung gefunden" msgid "Would you like to connect to a Wifi?" -msgstr "Möchten Sie fortfahren?" +msgstr "Möchten Sie sich mit einem WLAN verbinden?" msgid "No wifi interface found" -msgstr "Schnittstellen konfigurieren" +msgstr "Kein WLAN-Interface gefunden" msgid "Select wifi network to connect to" -msgstr "Wählen Sie einen Netzwerkadapter zur Konfiguration aus" +msgstr "WLAN-Netzwerk zum Verbinden auswählen" msgid "Scanning wifi networks..." msgstr "Suche nach WLAN-Netzwerken..." msgid "No wifi networks found" -msgstr "Keine Netzwerkkonfiguration" +msgstr "Keine WLAN-Netzwerke gefunden" msgid "Failed setting up wifi" msgstr "WLAN-Einrichtung fehlgeschlagen." msgid "Enter wifi password" -msgstr "Passwort eingeben: " +msgstr "WLAN-Passwort eingeben" msgid "Ok" msgstr "Ok" @@ -1869,10 +1999,10 @@ msgid "Compression algorithm" msgstr "Komprimierungsalgorithmus" msgid "Only packages such as base, sudo, linux, linux-firmware, efibootmgr and optional profile packages are installed." -msgstr "Nur Pakete wie base, base-devel, linux, linux-firmware, efibootmgr und optionale Profilpakete werden installiert." +msgstr "Nur Pakete wie base, sudo, linux, linux-firmware, efibootmgr und optionale Profilpakete werden installiert." msgid "Select zram compression algorithm:" -msgstr "Wählen Sie einen Einhängeort aus:" +msgstr "Zram-Komprimierungsalgorithmus auswählen:" msgid "Use Network Manager (default backend)" msgstr "NetworkManager verwenden (Standard-Backend)" @@ -1881,160 +2011,188 @@ msgid "Use Network Manager (iwd backend)" msgstr "NetworkManager verwenden (iwd-Backend)" msgid "Firewall" +msgstr "Firewall" + +#, fuzzy +msgid "Additional fonts" +msgstr "Zusätzliche Repositorien" + +#, fuzzy +msgid "Select font packages to install" +msgstr "Bootloader zur Installation auswählen" + +msgid "Unicode font coverage for most languages" msgstr "" -#, fuzzy -msgid "Select audio configuration" -msgstr "Benutzerkonfiguration speichern" +msgid "color emoji for browsers and apps" +msgstr "" + +msgid "Chinese, Japanese, Korean characters" +msgstr "" + +msgid "Select audio configuration" +msgstr "Audiokonfiguration auswählen" -#, fuzzy msgid "Enter credentials file decryption password" msgstr "Passwort für die Entschlüsselung der Anmeldedaten-Datei" -#, fuzzy msgid "Enter root password" -msgstr "Passwort eingeben: " +msgstr "Root-Passwort eingeben" msgid "Select bootloader to install" -msgstr "" +msgstr "Bootloader zur Installation auswählen" -#, fuzzy msgid "Configuration preview" -msgstr "Konfiguration" +msgstr "Konfigurationsvorschau" -#, fuzzy msgid "Enter a directory for the configuration(s) to be saved" -msgstr "Geben Sie einen Ordner an, in dem Konfigurationen gespeichert werden sollen: " +msgstr "Verzeichnis für die zu speichernden Konfiguration(en) eingeben" -#, fuzzy msgid "Select encryption type" msgstr "Verschlüsselungstyp" -#, fuzzy msgid "Select disks for the installation" -msgstr "Gewünschter Gerätename/Hostname für die Installation: " +msgstr "Festplatten für die Installation auswählen" -#, fuzzy msgid "Enter a mountpoint" msgstr "Wählen Sie einen Einhängeort aus:" -#, fuzzy, python-brace-format +#, python-brace-format msgid "Enter a size (default: {}): " -msgstr "Geben Sie das Ende ein (Standard: {}): " +msgstr "Größe eingeben (Standard: {}): " -#, fuzzy msgid "Enter subvolume name" msgstr "Name des Subvolumes" -#, fuzzy msgid "Enter subvolume mountpoint" msgstr "Subvolume-Einhängeort" -#, fuzzy msgid "Select a disk configuration" msgstr "Laufwerkskonfiguration" -#, fuzzy msgid "Enter root mount directory" msgstr "Einhängeverzeichnis der Root-Partition" msgid "You will use whatever drive-setup is mounted at the specified directory" -msgstr "" +msgstr "Es wird das Laufwerk-Setup verwendet, das im angegebenen Verzeichnis eingehängt ist" msgid "WARNING: Archinstall won't check the suitability of this setup" -msgstr "" +msgstr "WARNUNG: Archinstall überprüft die Eignung dieser Konfiguration nicht" -#, fuzzy msgid "Select main filesystem" -msgstr "Dateisystem ändern" +msgstr "Hauptdateisystem auswählen" msgid "Enter a hostname" -msgstr "" +msgstr "Hostnamen eingeben" -#, fuzzy msgid "Select timezone" msgstr "Wählen Sie eine Zeitzone aus" -#, fuzzy msgid "Enter the number of parallel downloads to be enabled" -msgstr "" -"Geben Sie die Nummer an parallelen Downloads an.\n" -"\n" -"Achtung:\n" +msgstr "Anzahl paralleler Downloads eingeben" #, python-brace-format msgid "Value must be between 1 and {}" -msgstr "" +msgstr "Der Wert muss zwischen 1 und {} liegen" -#, fuzzy msgid "Select which kernel(s) to install" -msgstr "Bitte den zu installierenden Greeter (Begrüßer/Anmeldebildschirm) auswählen" +msgstr "Zu installierenden Kernel auswählen" -#, fuzzy msgid "Enter a respository name" msgstr "Name des Repositoriums" -#, fuzzy msgid "Enter the repository url" -msgstr "Benutzerdefiniertes Repositorium bearbeiten" +msgstr "Repository-URL eingeben" -#, fuzzy msgid "Enter server url" msgstr "Server-URL" -#, fuzzy msgid "Select mirror regions to be enabled" -msgstr "Ausgewählte Spiegelserver-Regionen" +msgstr "Zu aktivierende Spiegelserver-Regionen auswählen" -#, fuzzy msgid "Select optional repositories to be enabled" -msgstr "Wählen Sie aus, welche zusätzlichen Repositories verwendet werden sollen" +msgstr "Optionale Repositorien auswählen" -#, fuzzy msgid "Select an interface" -msgstr "Verbindung löschen" +msgstr "Netzwerkschnittstelle auswählen" -#, fuzzy msgid "Choose network configuration" -msgstr "Keine Netzwerkkonfiguration" +msgstr "Netzwerkkonfiguration wählen" -#, fuzzy msgid "No packages found" -msgstr "Keine U2F-Geräte gefunden" +msgstr "Keine Pakete gefunden" -#, fuzzy msgid "Select which greeter to install" -msgstr "Bitte den zu installierenden Greeter (Begrüßer/Anmeldebildschirm) auswählen" +msgstr "Zu installierenden Greeter auswählen" -#, fuzzy msgid "Select a profile type" -msgstr "Ausgewählte Profile: " +msgstr "Profiltyp auswählen" -#, fuzzy msgid "Enter new password" -msgstr "Passwort eingeben: " +msgstr "Neues Passwort eingeben" msgid "Enter a username" -msgstr "" +msgstr "Benutzernamen eingeben" -#, fuzzy msgid "Enter a password" msgstr "Passwort eingeben: " -#, fuzzy msgid "The password did not match, please try again" -msgstr "Das Passwort stimmt nicht überein, bitte versuche es erneut" +msgstr "Das Passwort stimmt nicht überein, bitte versuchen Sie es erneut" msgid "Password strength: Weak" -msgstr "" +msgstr "Passwortstärke: Schwach" msgid "Password strength: Moderate" -msgstr "" +msgstr "Passwortstärke: Mittel" msgid "Password strength: Strong" -msgstr "" +msgstr "Passwortstärke: Stark" msgid "The selected desktop profile requires a regular user to log in via the greeter" +msgstr "Das ausgewählte Desktop-Profil erfordert einen regulären Benutzer zur Anmeldung über den Greeter" + +#, python-brace-format +msgid "Environment type: {} {}" +msgstr "Umgebungstyp: {} {}" + +msgid "Input cannot be empty" +msgstr "Der Wert darf nicht leer sein" + +msgid "Recommended" +msgstr "Empfohlen" + +msgid "Package" +msgstr "Paket" + +msgid "Curated selection of KDE Plasma packages" +msgstr "Kuratierte Auswahl an KDE-Plasma-Paketen" + +msgid "Dependencies" +msgstr "Abhängigkeiten" + +msgid "Package group" +msgstr "Paketgruppe" + +msgid "Extensive KDE Plasma installation" +msgstr "Umfangreiche KDE-Plasma-Installation" + +msgid "Packages in group" +msgstr "Pakete in der Gruppe" + +msgid "Minimal KDE Plasma installation" +msgstr "Minimale KDE-Plasma-Installation" + +msgid "Description" +msgstr "Beschreibung" + +msgid "Select a flavor of KDE Plasma to install" +msgstr "KDE-Plasma-Variante zur Installation auswählen" + +msgid "Arial/Times/Courier replacement, Cyrillic support for Steam/games" +msgstr "" + +msgid "wide Unicode coverage, good fallback font" msgstr "" #~ msgid "All open-source" diff --git a/archinstall/locales/el/LC_MESSAGES/base.po b/archinstall/locales/el/LC_MESSAGES/base.po index 98de4446..5a56491a 100644 --- a/archinstall/locales/el/LC_MESSAGES/base.po +++ b/archinstall/locales/el/LC_MESSAGES/base.po @@ -823,6 +823,22 @@ msgstr "Μη έγκυρη είσοδος! Προσπαθήστε ξανά με msgid "Parallel Downloads" msgstr "Παράλληλες Λήψεις" +msgid "Pacman" +msgstr "" + +msgid "Color" +msgstr "" + +#, fuzzy, python-brace-format +msgid "Enter the number of parallel downloads (1-{})" +msgstr "" +"Εισάγετε τον αριθμό των παράλληλων λήψεων προς ενεργοποίηση.\n" +" (Εισάγετε μία τιμή από 1 μέχρι {})\n" +"Σημείωση:" + +msgid "Enable colored output for pacman" +msgstr "" + #, fuzzy msgid "ESC to skip" msgstr "Χρησιμοποιήστε ESC για παράλειψη" @@ -1791,6 +1807,128 @@ msgstr "" msgid "Exit search mode" msgstr "" +msgid "General" +msgstr "" + +#, fuzzy +msgid "Navigation" +msgstr "Αποθήκευση διαμόρφωσης" + +#, fuzzy +msgid "Selection" +msgstr "Επιλέξτε διεπαφή προς προσθήκη" + +msgid "Search" +msgstr "" + +msgid "Down" +msgstr "" + +msgid "Up" +msgstr "" + +#, fuzzy +msgid "Confirm" +msgstr "Επιβεβαίωση και έξοδος" + +msgid "Focus right" +msgstr "" + +msgid "Focus left" +msgstr "" + +msgid "Toggle" +msgstr "" + +msgid "Show/Hide help" +msgstr "" + +msgid "Quit" +msgstr "" + +msgid "First" +msgstr "" + +msgid "Last" +msgstr "" + +#, fuzzy +msgid "Select" +msgstr "Επιλέξτε διεπαφή προς προσθήκη" + +msgid "Page Up" +msgstr "" + +msgid "Page Down" +msgstr "" + +msgid "Page up" +msgstr "" + +msgid "Page down" +msgstr "" + +msgid "Page Left" +msgstr "" + +msgid "Page Right" +msgstr "" + +msgid "Cursor up" +msgstr "" + +msgid "Cursor down" +msgstr "" + +msgid "Cursor right" +msgstr "" + +msgid "Cursor left" +msgstr "" + +msgid "Top" +msgstr "" + +msgid "Bottom" +msgstr "" + +msgid "Home" +msgstr "" + +msgid "End" +msgstr "" + +#, fuzzy +msgid "Toggle option" +msgstr "Επιλογές υποόγκου" + +msgid "Scroll Up" +msgstr "" + +msgid "Scroll Down" +msgstr "" + +msgid "Scroll Left" +msgstr "" + +msgid "Scroll Right" +msgstr "" + +msgid "Scroll Home" +msgstr "" + +msgid "Scroll End" +msgstr "" + +msgid "Focus Next" +msgstr "" + +msgid "Focus Previous" +msgstr "" + +msgid "Copy selected text" +msgstr "" + msgid "labwc needs access to your seat (collection of hardware devices i.e. keyboard, mouse, etc)" msgstr "" @@ -2042,6 +2180,23 @@ msgstr "" msgid "Firewall" msgstr "" +#, fuzzy +msgid "Additional fonts" +msgstr "Προαιρετικά αποθετήρια" + +#, fuzzy +msgid "Select font packages to install" +msgstr "Επιλέξτε ποιες διαμερίσεις να κρυπτογραφηθούν." + +msgid "Unicode font coverage for most languages" +msgstr "" + +msgid "color emoji for browsers and apps" +msgstr "" + +msgid "Chinese, Japanese, Korean characters" +msgstr "" + #, fuzzy msgid "Select audio configuration" msgstr "Αποθήκευση διαμόρφωσης χρήστη" @@ -2192,3 +2347,49 @@ msgstr "" msgid "The selected desktop profile requires a regular user to log in via the greeter" msgstr "" + +#, fuzzy, python-brace-format +msgid "Environment type: {} {}" +msgstr "Καμία διαμόρφωση" + +msgid "Input cannot be empty" +msgstr "" + +msgid "Recommended" +msgstr "" + +msgid "Package" +msgstr "" + +msgid "Curated selection of KDE Plasma packages" +msgstr "" + +msgid "Dependencies" +msgstr "" + +#, fuzzy +msgid "Package group" +msgstr "Διαμορφωμένες {} διεπαφές" + +msgid "Extensive KDE Plasma installation" +msgstr "" + +msgid "Packages in group" +msgstr "" + +msgid "Minimal KDE Plasma installation" +msgstr "" + +#, fuzzy +msgid "Description" +msgstr "Κρυπτογράφηση δίσκου" + +#, fuzzy +msgid "Select a flavor of KDE Plasma to install" +msgstr "Επιλέξτε ποιες διαμερίσεις να κρυπτογραφηθούν." + +msgid "Arial/Times/Courier replacement, Cyrillic support for Steam/games" +msgstr "" + +msgid "wide Unicode coverage, good fallback font" +msgstr "" diff --git a/archinstall/locales/en/LC_MESSAGES/base.po b/archinstall/locales/en/LC_MESSAGES/base.po index d430dbbd..ac54721e 100644 --- a/archinstall/locales/en/LC_MESSAGES/base.po +++ b/archinstall/locales/en/LC_MESSAGES/base.po @@ -774,6 +774,19 @@ msgstr "" msgid "Parallel Downloads" msgstr "" +msgid "Pacman" +msgstr "" + +msgid "Color" +msgstr "" + +#, python-brace-format +msgid "Enter the number of parallel downloads (1-{})" +msgstr "" + +msgid "Enable colored output for pacman" +msgstr "" + msgid "ESC to skip" msgstr "" @@ -1598,6 +1611,123 @@ msgstr "" msgid "Exit search mode" msgstr "" +msgid "General" +msgstr "" + +msgid "Navigation" +msgstr "" + +msgid "Selection" +msgstr "" + +msgid "Search" +msgstr "" + +msgid "Down" +msgstr "" + +msgid "Up" +msgstr "" + +msgid "Confirm" +msgstr "" + +msgid "Focus right" +msgstr "" + +msgid "Focus left" +msgstr "" + +msgid "Toggle" +msgstr "" + +msgid "Show/Hide help" +msgstr "" + +msgid "Quit" +msgstr "" + +msgid "First" +msgstr "" + +msgid "Last" +msgstr "" + +msgid "Select" +msgstr "" + +msgid "Page Up" +msgstr "" + +msgid "Page Down" +msgstr "" + +msgid "Page up" +msgstr "" + +msgid "Page down" +msgstr "" + +msgid "Page Left" +msgstr "" + +msgid "Page Right" +msgstr "" + +msgid "Cursor up" +msgstr "" + +msgid "Cursor down" +msgstr "" + +msgid "Cursor right" +msgstr "" + +msgid "Cursor left" +msgstr "" + +msgid "Top" +msgstr "" + +msgid "Bottom" +msgstr "" + +msgid "Home" +msgstr "" + +msgid "End" +msgstr "" + +msgid "Toggle option" +msgstr "" + +msgid "Scroll Up" +msgstr "" + +msgid "Scroll Down" +msgstr "" + +msgid "Scroll Left" +msgstr "" + +msgid "Scroll Right" +msgstr "" + +msgid "Scroll Home" +msgstr "" + +msgid "Scroll End" +msgstr "" + +msgid "Focus Next" +msgstr "" + +msgid "Focus Previous" +msgstr "" + +msgid "Copy selected text" +msgstr "" + msgid "labwc needs access to your seat (collection of hardware devices i.e. keyboard, mouse, etc)" msgstr "" @@ -1816,6 +1946,21 @@ msgstr "" msgid "Firewall" msgstr "" +msgid "Additional fonts" +msgstr "" + +msgid "Select font packages to install" +msgstr "" + +msgid "Unicode font coverage for most languages" +msgstr "" + +msgid "color emoji for browsers and apps" +msgstr "" + +msgid "Chinese, Japanese, Korean characters" +msgstr "" + msgid "Select audio configuration" msgstr "" @@ -1937,3 +2082,46 @@ msgstr "" msgid "The selected desktop profile requires a regular user to log in via the greeter" msgstr "" + +#, python-brace-format +msgid "Environment type: {} {}" +msgstr "" + +msgid "Input cannot be empty" +msgstr "" + +msgid "Recommended" +msgstr "" + +msgid "Package" +msgstr "" + +msgid "Curated selection of KDE Plasma packages" +msgstr "" + +msgid "Dependencies" +msgstr "" + +msgid "Package group" +msgstr "" + +msgid "Extensive KDE Plasma installation" +msgstr "" + +msgid "Packages in group" +msgstr "" + +msgid "Minimal KDE Plasma installation" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Select a flavor of KDE Plasma to install" +msgstr "" + +msgid "Arial/Times/Courier replacement, Cyrillic support for Steam/games" +msgstr "" + +msgid "wide Unicode coverage, good fallback font" +msgstr "" diff --git a/archinstall/locales/es/LC_MESSAGES/base.mo b/archinstall/locales/es/LC_MESSAGES/base.mo index 7b3df0b1..3c3993f7 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 9c57554f..d311804c 100644 --- a/archinstall/locales/es/LC_MESSAGES/base.po +++ b/archinstall/locales/es/LC_MESSAGES/base.po @@ -826,6 +826,19 @@ msgstr "¡Entrada no válida! Intente nuevamente con una entrada válida [1 a {m msgid "Parallel Downloads" msgstr "Descargas paralelas" +msgid "Pacman" +msgstr "" + +msgid "Color" +msgstr "" + +#, fuzzy, python-brace-format +msgid "Enter the number of parallel downloads (1-{})" +msgstr "Ingrese el número de descargas paralelas que desea habilitar" + +msgid "Enable colored output for pacman" +msgstr "" + msgid "ESC to skip" msgstr "ESC para omitir" @@ -1667,6 +1680,139 @@ msgstr "Iniciar modo de búsqueda" msgid "Exit search mode" msgstr "Salir del modo de búsqueda" +msgid "General" +msgstr "" + +#, fuzzy +msgid "Navigation" +msgstr "Guardar configuración" + +#, fuzzy +msgid "Selection" +msgstr "Seleccione regiones" + +msgid "Search" +msgstr "" + +msgid "Down" +msgstr "" + +msgid "Up" +msgstr "" + +#, fuzzy +msgid "Confirm" +msgstr "Confirmar y salir" + +#, fuzzy +msgid "Focus right" +msgstr "Mover a la derecha" + +#, fuzzy +msgid "Focus left" +msgstr "Mover a la izquierda" + +msgid "Toggle" +msgstr "" + +#, fuzzy +msgid "Show/Hide help" +msgstr "Mostrar ayuda" + +msgid "Quit" +msgstr "" + +msgid "First" +msgstr "" + +msgid "Last" +msgstr "" + +#, fuzzy +msgid "Select" +msgstr "Seleccione regiones" + +msgid "Page Up" +msgstr "" + +msgid "Page Down" +msgstr "" + +#, fuzzy +msgid "Page up" +msgstr "Grupo de paquetes:" + +#, fuzzy +msgid "Page down" +msgstr "Bajar" + +msgid "Page Left" +msgstr "" + +#, fuzzy +msgid "Page Right" +msgstr "Mover a la derecha" + +msgid "Cursor up" +msgstr "" + +#, fuzzy +msgid "Cursor down" +msgstr "Bajar" + +#, fuzzy +msgid "Cursor right" +msgstr "Mover a la derecha" + +#, fuzzy +msgid "Cursor left" +msgstr "Mover a la izquierda" + +msgid "Top" +msgstr "" + +msgid "Bottom" +msgstr "" + +msgid "Home" +msgstr "" + +#, fuzzy +msgid "End" +msgstr "Habilitado" + +#, fuzzy +msgid "Toggle option" +msgstr "Opciones del subvolumen" + +msgid "Scroll Up" +msgstr "" + +#, fuzzy +msgid "Scroll Down" +msgstr "Bajar en vista previa" + +msgid "Scroll Left" +msgstr "" + +msgid "Scroll Right" +msgstr "" + +msgid "Scroll Home" +msgstr "" + +msgid "Scroll End" +msgstr "" + +msgid "Focus Next" +msgstr "" + +msgid "Focus Previous" +msgstr "" + +msgid "Copy selected text" +msgstr "" + msgid "labwc needs access to your seat (collection of hardware devices i.e. keyboard, mouse, etc)" msgstr "labwc necesita acceso a su asiento (colección de dispositivos de hardware, es decir, teclado, ratón, etc.)" @@ -1885,6 +2031,23 @@ msgstr "Usar gestor de Red (backend iwd)" msgid "Firewall" msgstr "Cortafuegos" +#, fuzzy +msgid "Additional fonts" +msgstr "Repositorios adicionales" + +#, fuzzy +msgid "Select font packages to install" +msgstr "Seleccione el gestor de arranque que desea instalar" + +msgid "Unicode font coverage for most languages" +msgstr "" + +msgid "color emoji for browsers and apps" +msgstr "" + +msgid "Chinese, Japanese, Korean characters" +msgstr "" + msgid "Select audio configuration" msgstr "Seleccionar configuración de audio" @@ -2007,6 +2170,55 @@ msgstr "Seguridad de la contraseña: Fuerte" msgid "The selected desktop profile requires a regular user to log in via the greeter" msgstr "El perfil de escritorio seleccionado requiere que un usuario estándar inicie sesión a través de la pantalla de bienvenida" +#, fuzzy, python-brace-format +msgid "Environment type: {} {}" +msgstr "Tipo de entorno: {}" + +#, fuzzy +msgid "Input cannot be empty" +msgstr "El valor no puede estár vacío" + +msgid "Recommended" +msgstr "" + +#, fuzzy +msgid "Package" +msgstr "Grupo de paquetes:" + +msgid "Curated selection of KDE Plasma packages" +msgstr "" + +msgid "Dependencies" +msgstr "" + +#, fuzzy +msgid "Package group" +msgstr "Grupo de paquetes:" + +msgid "Extensive KDE Plasma installation" +msgstr "" + +#, fuzzy +msgid "Packages in group" +msgstr "Grupo de paquetes:" + +msgid "Minimal KDE Plasma installation" +msgstr "" + +#, fuzzy +msgid "Description" +msgstr "Cifrado de disco" + +#, fuzzy +msgid "Select a flavor of KDE Plasma to install" +msgstr "Seleccione el gestor de arranque que desea instalar" + +msgid "Arial/Times/Courier replacement, Cyrillic support for Steam/games" +msgstr "" + +msgid "wide Unicode coverage, good fallback font" +msgstr "" + #~ msgid "Add :" #~ msgstr "Añadir :" diff --git a/archinstall/locales/et/LC_MESSAGES/base.po b/archinstall/locales/et/LC_MESSAGES/base.po index 9732feea..d6837654 100644 --- a/archinstall/locales/et/LC_MESSAGES/base.po +++ b/archinstall/locales/et/LC_MESSAGES/base.po @@ -838,6 +838,22 @@ msgstr "Vale sisestus! Proovige uuesti kehtiva sisendiga [1 {max_downloads} või msgid "Parallel Downloads" msgstr "Paralleelsed allalaadimised" +msgid "Pacman" +msgstr "" + +msgid "Color" +msgstr "" + +#, fuzzy, python-brace-format +msgid "Enter the number of parallel downloads (1-{})" +msgstr "" +"Sisestage lubatavate paralleelsete allalaadimiste arv.\n" +" (Sisestage väärtus vahemikus 1 kuni {max_downloads})\n" +"note:" + +msgid "Enable colored output for pacman" +msgstr "" + msgid "ESC to skip" msgstr "ESC vahelejätmiseks" @@ -1774,6 +1790,128 @@ msgstr "" msgid "Exit search mode" msgstr "" +msgid "General" +msgstr "" + +#, fuzzy +msgid "Navigation" +msgstr "Salvesta konfiguratsioon" + +#, fuzzy +msgid "Selection" +msgstr "Valige allkirja valik" + +msgid "Search" +msgstr "" + +msgid "Down" +msgstr "" + +msgid "Up" +msgstr "" + +#, fuzzy +msgid "Confirm" +msgstr "Kinnita ja lahku" + +msgid "Focus right" +msgstr "" + +msgid "Focus left" +msgstr "" + +msgid "Toggle" +msgstr "" + +msgid "Show/Hide help" +msgstr "" + +msgid "Quit" +msgstr "" + +msgid "First" +msgstr "" + +msgid "Last" +msgstr "" + +#, fuzzy +msgid "Select" +msgstr "Valige allkirja valik" + +msgid "Page Up" +msgstr "" + +msgid "Page Down" +msgstr "" + +msgid "Page up" +msgstr "" + +msgid "Page down" +msgstr "" + +msgid "Page Left" +msgstr "" + +msgid "Page Right" +msgstr "" + +msgid "Cursor up" +msgstr "" + +msgid "Cursor down" +msgstr "" + +msgid "Cursor right" +msgstr "" + +msgid "Cursor left" +msgstr "" + +msgid "Top" +msgstr "" + +msgid "Bottom" +msgstr "" + +msgid "Home" +msgstr "" + +msgid "End" +msgstr "" + +#, fuzzy +msgid "Toggle option" +msgstr "Alamhulga valikud" + +msgid "Scroll Up" +msgstr "" + +msgid "Scroll Down" +msgstr "" + +msgid "Scroll Left" +msgstr "" + +msgid "Scroll Right" +msgstr "" + +msgid "Scroll Home" +msgstr "" + +msgid "Scroll End" +msgstr "" + +msgid "Focus Next" +msgstr "" + +msgid "Focus Previous" +msgstr "" + +msgid "Copy selected text" +msgstr "" + #, fuzzy msgid "labwc needs access to your seat (collection of hardware devices i.e. keyboard, mouse, etc)" msgstr "Sway vajab juurdepääsu teie seatile (riistvaraseadmete kogum, st klaviatuur, hiir jne." @@ -2030,6 +2168,23 @@ msgstr "" msgid "Firewall" msgstr "" +#, fuzzy +msgid "Additional fonts" +msgstr "Valikulised repositooriumid" + +#, fuzzy +msgid "Select font packages to install" +msgstr "Palun valige millist tervitajat installida" + +msgid "Unicode font coverage for most languages" +msgstr "" + +msgid "color emoji for browsers and apps" +msgstr "" + +msgid "Chinese, Japanese, Korean characters" +msgstr "" + #, fuzzy msgid "Select audio configuration" msgstr "Salvesta kasutaja konfiguratsioon" @@ -2180,3 +2335,49 @@ msgstr "" msgid "The selected desktop profile requires a regular user to log in via the greeter" msgstr "" + +#, fuzzy, python-brace-format +msgid "Environment type: {} {}" +msgstr "Keskkonna tüüp: {}" + +msgid "Input cannot be empty" +msgstr "" + +msgid "Recommended" +msgstr "" + +msgid "Package" +msgstr "" + +msgid "Curated selection of KDE Plasma packages" +msgstr "" + +msgid "Dependencies" +msgstr "" + +#, fuzzy +msgid "Package group" +msgstr "Konfigureeritud {} liidesed" + +msgid "Extensive KDE Plasma installation" +msgstr "" + +msgid "Packages in group" +msgstr "" + +msgid "Minimal KDE Plasma installation" +msgstr "" + +#, fuzzy +msgid "Description" +msgstr "Ketta krüpteerimine" + +#, fuzzy +msgid "Select a flavor of KDE Plasma to install" +msgstr "Palun valige millist tervitajat installida" + +msgid "Arial/Times/Courier replacement, Cyrillic support for Steam/games" +msgstr "" + +msgid "wide Unicode coverage, good fallback font" +msgstr "" diff --git a/archinstall/locales/fi/LC_MESSAGES/base.po b/archinstall/locales/fi/LC_MESSAGES/base.po index 8f97a983..7651bb13 100644 --- a/archinstall/locales/fi/LC_MESSAGES/base.po +++ b/archinstall/locales/fi/LC_MESSAGES/base.po @@ -824,6 +824,22 @@ msgstr "Virheellinen arvo! Yritä uudelleen kelvollisella arvolla [1 - {max_down msgid "Parallel Downloads" msgstr "Rinnakkaiset lataukset" +msgid "Pacman" +msgstr "" + +msgid "Color" +msgstr "" + +#, fuzzy, python-brace-format +msgid "Enter the number of parallel downloads (1-{})" +msgstr "" +"Anna rinnakkaisten latausten määrä.\n" +"\n" +"Huomaa:\n" + +msgid "Enable colored output for pacman" +msgstr "" + msgid "ESC to skip" msgstr "Ohita painamalla ESC" @@ -1744,6 +1760,137 @@ msgstr "" msgid "Exit search mode" msgstr "" +msgid "General" +msgstr "" + +#, fuzzy +msgid "Navigation" +msgstr "Tallenna määritykset" + +#, fuzzy +msgid "Selection" +msgstr "Valitse allekirjoituksen asetus" + +msgid "Search" +msgstr "" + +msgid "Down" +msgstr "" + +msgid "Up" +msgstr "" + +#, fuzzy +msgid "Confirm" +msgstr "Vahvista ja poistu" + +#, fuzzy +msgid "Focus right" +msgstr "Liiku oikealle" + +#, fuzzy +msgid "Focus left" +msgstr "Liiku vasemmalle" + +msgid "Toggle" +msgstr "" + +#, fuzzy +msgid "Show/Hide help" +msgstr "Näytä apua" + +msgid "Quit" +msgstr "" + +msgid "First" +msgstr "" + +msgid "Last" +msgstr "" + +#, fuzzy +msgid "Select" +msgstr "Valitse allekirjoituksen asetus" + +msgid "Page Up" +msgstr "" + +msgid "Page Down" +msgstr "" + +msgid "Page up" +msgstr "" + +#, fuzzy +msgid "Page down" +msgstr "Liikku alas" + +msgid "Page Left" +msgstr "" + +#, fuzzy +msgid "Page Right" +msgstr "Liiku oikealle" + +msgid "Cursor up" +msgstr "" + +#, fuzzy +msgid "Cursor down" +msgstr "Liikku alas" + +#, fuzzy +msgid "Cursor right" +msgstr "Liiku oikealle" + +#, fuzzy +msgid "Cursor left" +msgstr "Liiku vasemmalle" + +msgid "Top" +msgstr "" + +msgid "Bottom" +msgstr "" + +msgid "Home" +msgstr "" + +#, fuzzy +msgid "End" +msgstr "Käytössä" + +#, fuzzy +msgid "Toggle option" +msgstr "Alitaltion valinnat" + +msgid "Scroll Up" +msgstr "" + +msgid "Scroll Down" +msgstr "" + +msgid "Scroll Left" +msgstr "" + +msgid "Scroll Right" +msgstr "" + +msgid "Scroll Home" +msgstr "" + +msgid "Scroll End" +msgstr "" + +msgid "Focus Next" +msgstr "" + +msgid "Focus Previous" +msgstr "" + +msgid "Copy selected text" +msgstr "" + #, fuzzy msgid "labwc needs access to your seat (collection of hardware devices i.e. keyboard, mouse, etc)" msgstr "Sway tarvitsee pääsyn istuntoon (kokoelma laitteistoja, kuten näppäimistö, hiiri jne.)" @@ -2000,6 +2147,23 @@ msgstr "" msgid "Firewall" msgstr "" +#, fuzzy +msgid "Additional fonts" +msgstr "Valinnaiset arkistot" + +#, fuzzy +msgid "Select font packages to install" +msgstr "Valitse asennettava käyttöliittymä" + +msgid "Unicode font coverage for most languages" +msgstr "" + +msgid "color emoji for browsers and apps" +msgstr "" + +msgid "Chinese, Japanese, Korean characters" +msgstr "" + #, fuzzy msgid "Select audio configuration" msgstr "Tallenna käyttäjän määritykset" @@ -2150,3 +2314,49 @@ msgstr "" msgid "The selected desktop profile requires a regular user to log in via the greeter" msgstr "" + +#, fuzzy, python-brace-format +msgid "Environment type: {} {}" +msgstr "Ympäristötyyppi: {}" + +msgid "Input cannot be empty" +msgstr "" + +msgid "Recommended" +msgstr "" + +msgid "Package" +msgstr "" + +msgid "Curated selection of KDE Plasma packages" +msgstr "" + +msgid "Dependencies" +msgstr "" + +#, fuzzy +msgid "Package group" +msgstr "Määritetty {} liittymää" + +msgid "Extensive KDE Plasma installation" +msgstr "" + +msgid "Packages in group" +msgstr "" + +msgid "Minimal KDE Plasma installation" +msgstr "" + +#, fuzzy +msgid "Description" +msgstr "Levyn salaus" + +#, fuzzy +msgid "Select a flavor of KDE Plasma to install" +msgstr "Valitse asennettava käyttöliittymä" + +msgid "Arial/Times/Courier replacement, Cyrillic support for Steam/games" +msgstr "" + +msgid "wide Unicode coverage, good fallback font" +msgstr "" diff --git a/archinstall/locales/fr/LC_MESSAGES/base.po b/archinstall/locales/fr/LC_MESSAGES/base.po index 6a1a7eed..042f5d69 100644 --- a/archinstall/locales/fr/LC_MESSAGES/base.po +++ b/archinstall/locales/fr/LC_MESSAGES/base.po @@ -823,6 +823,22 @@ msgstr "Entrée invalide ! Réessayer avec une entrée valide [1 pour {max_downl msgid "Parallel Downloads" msgstr "Téléchargements parallèles" +msgid "Pacman" +msgstr "" + +msgid "Color" +msgstr "" + +#, fuzzy, python-brace-format +msgid "Enter the number of parallel downloads (1-{})" +msgstr "" +"Saisir le nombre de téléchargements parallèles à activer.\n" +"\n" +"Note :\n" + +msgid "Enable colored output for pacman" +msgstr "" + msgid "ESC to skip" msgstr "ESC pour ignorer" @@ -1663,6 +1679,139 @@ msgstr "Démarrer le mode de recherche" msgid "Exit search mode" msgstr "Quitter le mode de recherche" +msgid "General" +msgstr "" + +#, fuzzy +msgid "Navigation" +msgstr "Enregistrer la configuration" + +#, fuzzy +msgid "Selection" +msgstr "Sélectionner des régions" + +msgid "Search" +msgstr "" + +msgid "Down" +msgstr "" + +msgid "Up" +msgstr "" + +#, fuzzy +msgid "Confirm" +msgstr "Confirmer et quitter" + +#, fuzzy +msgid "Focus right" +msgstr "Déplacer vers la droite" + +#, fuzzy +msgid "Focus left" +msgstr "Déplacer vers la gauche" + +msgid "Toggle" +msgstr "" + +#, fuzzy +msgid "Show/Hide help" +msgstr "Afficher de l'aide" + +msgid "Quit" +msgstr "" + +msgid "First" +msgstr "" + +msgid "Last" +msgstr "" + +#, fuzzy +msgid "Select" +msgstr "Sélectionner des régions" + +msgid "Page Up" +msgstr "" + +msgid "Page Down" +msgstr "" + +#, fuzzy +msgid "Page up" +msgstr "Groupe de paquets :" + +#, fuzzy +msgid "Page down" +msgstr "Déplacer vers le bas" + +msgid "Page Left" +msgstr "" + +#, fuzzy +msgid "Page Right" +msgstr "Déplacer vers la droite" + +msgid "Cursor up" +msgstr "" + +#, fuzzy +msgid "Cursor down" +msgstr "Déplacer vers le bas" + +#, fuzzy +msgid "Cursor right" +msgstr "Déplacer vers la droite" + +#, fuzzy +msgid "Cursor left" +msgstr "Déplacer vers la gauche" + +msgid "Top" +msgstr "" + +msgid "Bottom" +msgstr "" + +msgid "Home" +msgstr "" + +#, fuzzy +msgid "End" +msgstr "Activé" + +#, fuzzy +msgid "Toggle option" +msgstr "Options de sous-volume" + +msgid "Scroll Up" +msgstr "" + +#, fuzzy +msgid "Scroll Down" +msgstr "Faire défiler l’aperçu vers le bas" + +msgid "Scroll Left" +msgstr "" + +msgid "Scroll Right" +msgstr "" + +msgid "Scroll Home" +msgstr "" + +msgid "Scroll End" +msgstr "" + +msgid "Focus Next" +msgstr "" + +msgid "Focus Previous" +msgstr "" + +msgid "Copy selected text" +msgstr "" + msgid "labwc needs access to your seat (collection of hardware devices i.e. keyboard, mouse, etc)" msgstr "labwc a besoin d’accéder à votre siège (ensemble d’appareils matériels, c’est-à-dire clavier, souris, etc.)" @@ -1906,6 +2055,23 @@ msgstr "" msgid "Firewall" msgstr "" +#, fuzzy +msgid "Additional fonts" +msgstr "Dépôts supplémentaires" + +#, fuzzy +msgid "Select font packages to install" +msgstr "Veuillez choisir le greeter (interface de connexion) à installer" + +msgid "Unicode font coverage for most languages" +msgstr "" + +msgid "color emoji for browsers and apps" +msgstr "" + +msgid "Chinese, Japanese, Korean characters" +msgstr "" + #, fuzzy msgid "Select audio configuration" msgstr "Enregistrer la configuration utilisateur" @@ -2060,6 +2226,55 @@ msgstr "" msgid "The selected desktop profile requires a regular user to log in via the greeter" msgstr "" +#, fuzzy, python-brace-format +msgid "Environment type: {} {}" +msgstr "Type d'environnement : {}" + +#, fuzzy +msgid "Input cannot be empty" +msgstr "La valeur ne peut pas être vide" + +msgid "Recommended" +msgstr "" + +#, fuzzy +msgid "Package" +msgstr "Groupe de paquets :" + +msgid "Curated selection of KDE Plasma packages" +msgstr "" + +msgid "Dependencies" +msgstr "" + +#, fuzzy +msgid "Package group" +msgstr "Groupe de paquets :" + +msgid "Extensive KDE Plasma installation" +msgstr "" + +#, fuzzy +msgid "Packages in group" +msgstr "Groupe de paquets :" + +msgid "Minimal KDE Plasma installation" +msgstr "" + +#, fuzzy +msgid "Description" +msgstr "Chiffrement du disque" + +#, fuzzy +msgid "Select a flavor of KDE Plasma to install" +msgstr "Veuillez choisir le greeter (interface de connexion) à installer" + +msgid "Arial/Times/Courier replacement, Cyrillic support for Steam/games" +msgstr "" + +msgid "wide Unicode coverage, good fallback font" +msgstr "" + #, python-brace-format #~ msgid "Edit {origkey} :" #~ msgstr "Modifier {origkey} :" diff --git a/archinstall/locales/ga/LC_MESSAGES/base.po b/archinstall/locales/ga/LC_MESSAGES/base.po index a1a77de1..ec8b2b50 100644 --- a/archinstall/locales/ga/LC_MESSAGES/base.po +++ b/archinstall/locales/ga/LC_MESSAGES/base.po @@ -823,6 +823,22 @@ msgstr "Ionchur neamhbhailí! Bain triail eile as le hionchur bailí [1 go {max_ msgid "Parallel Downloads" msgstr "Comhuaineach íosluchtuithe" +msgid "Pacman" +msgstr "" + +msgid "Color" +msgstr "" + +#, fuzzy, python-brace-format +msgid "Enter the number of parallel downloads (1-{})" +msgstr "" +"Cuir isteach líon na n-íoslódálacha comhthreomhara atá le cumasú.\n" +"\n" +"Nóta:\n" + +msgid "Enable colored output for pacman" +msgstr "" + msgid "ESC to skip" msgstr "ESC a scipeáil" @@ -1731,6 +1747,128 @@ msgstr "" msgid "Exit search mode" msgstr "" +msgid "General" +msgstr "" + +#, fuzzy +msgid "Navigation" +msgstr "Sábháil cumraíocht" + +#, fuzzy +msgid "Selection" +msgstr "Roghnaigh an rogha sínithe" + +msgid "Search" +msgstr "" + +msgid "Down" +msgstr "" + +msgid "Up" +msgstr "" + +#, fuzzy +msgid "Confirm" +msgstr "Deimhnigh agus scoir" + +msgid "Focus right" +msgstr "" + +msgid "Focus left" +msgstr "" + +msgid "Toggle" +msgstr "" + +msgid "Show/Hide help" +msgstr "" + +msgid "Quit" +msgstr "" + +msgid "First" +msgstr "" + +msgid "Last" +msgstr "" + +#, fuzzy +msgid "Select" +msgstr "Roghnaigh an rogha sínithe" + +msgid "Page Up" +msgstr "" + +msgid "Page Down" +msgstr "" + +msgid "Page up" +msgstr "" + +msgid "Page down" +msgstr "" + +msgid "Page Left" +msgstr "" + +msgid "Page Right" +msgstr "" + +msgid "Cursor up" +msgstr "" + +msgid "Cursor down" +msgstr "" + +msgid "Cursor right" +msgstr "" + +msgid "Cursor left" +msgstr "" + +msgid "Top" +msgstr "" + +msgid "Bottom" +msgstr "" + +msgid "Home" +msgstr "" + +msgid "End" +msgstr "" + +#, fuzzy +msgid "Toggle option" +msgstr "Roghanna subvolume" + +msgid "Scroll Up" +msgstr "" + +msgid "Scroll Down" +msgstr "" + +msgid "Scroll Left" +msgstr "" + +msgid "Scroll Right" +msgstr "" + +msgid "Scroll Home" +msgstr "" + +msgid "Scroll End" +msgstr "" + +msgid "Focus Next" +msgstr "" + +msgid "Focus Previous" +msgstr "" + +msgid "Copy selected text" +msgstr "" + #, fuzzy msgid "labwc needs access to your seat (collection of hardware devices i.e. keyboard, mouse, etc)" msgstr "Teastaíonn rochtain ó Sway ar do shuíochán (bailiúchán de ghléasanna crua-earraí i.e. méarchlár, luch, srl)" @@ -1987,6 +2125,23 @@ msgstr "" msgid "Firewall" msgstr "" +#, fuzzy +msgid "Additional fonts" +msgstr "Taisclanna roghnacha" + +#, fuzzy +msgid "Select font packages to install" +msgstr "Roghnaigh cé acu beannaitheoir atá le suiteáil" + +msgid "Unicode font coverage for most languages" +msgstr "" + +msgid "color emoji for browsers and apps" +msgstr "" + +msgid "Chinese, Japanese, Korean characters" +msgstr "" + #, fuzzy msgid "Select audio configuration" msgstr "Sábháil cumraíocht úsáideora" @@ -2137,3 +2292,49 @@ msgstr "" msgid "The selected desktop profile requires a regular user to log in via the greeter" msgstr "" + +#, fuzzy, python-brace-format +msgid "Environment type: {} {}" +msgstr "Cineál timpeallachta: {}" + +msgid "Input cannot be empty" +msgstr "" + +msgid "Recommended" +msgstr "" + +msgid "Package" +msgstr "" + +msgid "Curated selection of KDE Plasma packages" +msgstr "" + +msgid "Dependencies" +msgstr "" + +#, fuzzy +msgid "Package group" +msgstr "Comhéadain {} cumraithe" + +msgid "Extensive KDE Plasma installation" +msgstr "" + +msgid "Packages in group" +msgstr "" + +msgid "Minimal KDE Plasma installation" +msgstr "" + +#, fuzzy +msgid "Description" +msgstr "Criptiú diosca" + +#, fuzzy +msgid "Select a flavor of KDE Plasma to install" +msgstr "Roghnaigh cé acu beannaitheoir atá le suiteáil" + +msgid "Arial/Times/Courier replacement, Cyrillic support for Steam/games" +msgstr "" + +msgid "wide Unicode coverage, good fallback font" +msgstr "" diff --git a/archinstall/locales/gl/LC_MESSAGES/base.po b/archinstall/locales/gl/LC_MESSAGES/base.po index 20adf597..746e3fc6 100644 --- a/archinstall/locales/gl/LC_MESSAGES/base.po +++ b/archinstall/locales/gl/LC_MESSAGES/base.po @@ -826,6 +826,22 @@ msgstr "¡Entrada no válida! Intente nuevamente con unha entrada válida [1 a { msgid "Parallel Downloads" msgstr "Descargas paralelas" +msgid "Pacman" +msgstr "" + +msgid "Color" +msgstr "" + +#, fuzzy, python-brace-format +msgid "Enter the number of parallel downloads (1-{})" +msgstr "" +"Ingrese el número de descargas paralelas que se habilitarán.\n" +"\n" +"Nota:\n" + +msgid "Enable colored output for pacman" +msgstr "" + msgid "ESC to skip" msgstr "ESC para omitir" @@ -1667,6 +1683,139 @@ msgstr "Iniciar modo de búsqueda" msgid "Exit search mode" msgstr "Salir do modo de búsqueda" +msgid "General" +msgstr "" + +#, fuzzy +msgid "Navigation" +msgstr "Guardar configuración" + +#, fuzzy +msgid "Selection" +msgstr "Seleccione regiones" + +msgid "Search" +msgstr "" + +msgid "Down" +msgstr "" + +msgid "Up" +msgstr "" + +#, fuzzy +msgid "Confirm" +msgstr "Confirmar e salir" + +#, fuzzy +msgid "Focus right" +msgstr "Mover a la dereita" + +#, fuzzy +msgid "Focus left" +msgstr "Mover a la esquerda" + +msgid "Toggle" +msgstr "" + +#, fuzzy +msgid "Show/Hide help" +msgstr "Mostrar axuda" + +msgid "Quit" +msgstr "" + +msgid "First" +msgstr "" + +msgid "Last" +msgstr "" + +#, fuzzy +msgid "Select" +msgstr "Seleccione regiones" + +msgid "Page Up" +msgstr "" + +msgid "Page Down" +msgstr "" + +#, fuzzy +msgid "Page up" +msgstr "Grupo de paquetes:" + +#, fuzzy +msgid "Page down" +msgstr "Bajar" + +msgid "Page Left" +msgstr "" + +#, fuzzy +msgid "Page Right" +msgstr "Mover a la dereita" + +msgid "Cursor up" +msgstr "" + +#, fuzzy +msgid "Cursor down" +msgstr "Bajar" + +#, fuzzy +msgid "Cursor right" +msgstr "Mover a la dereita" + +#, fuzzy +msgid "Cursor left" +msgstr "Mover a la esquerda" + +msgid "Top" +msgstr "" + +msgid "Bottom" +msgstr "" + +msgid "Home" +msgstr "" + +#, fuzzy +msgid "End" +msgstr "Habilitado" + +#, fuzzy +msgid "Toggle option" +msgstr "Opciones do subvolumen" + +msgid "Scroll Up" +msgstr "" + +#, fuzzy +msgid "Scroll Down" +msgstr "Bajar en vista previa" + +msgid "Scroll Left" +msgstr "" + +msgid "Scroll Right" +msgstr "" + +msgid "Scroll Home" +msgstr "" + +msgid "Scroll End" +msgstr "" + +msgid "Focus Next" +msgstr "" + +msgid "Focus Previous" +msgstr "" + +msgid "Copy selected text" +msgstr "" + msgid "labwc needs access to your seat (collection of hardware devices i.e. keyboard, mouse, etc)" msgstr "labwc necesita acceso a o seu asiento (colección de dispositivos de hardware, es decir, teclado, ratón, etc.)" @@ -2027,6 +2176,61 @@ msgstr "Ingrese unha contraseña: " msgid "The password did not match, please try again" msgstr "A contraseña de confirmación no coincide, por favor intente nuevamente" +msgid "Password strength: Weak" +msgstr "" + +msgid "Password strength: Moderate" +msgstr "" + +msgid "Password strength: Strong" +msgstr "" + +msgid "The selected desktop profile requires a regular user to log in via the greeter" +msgstr "" + +#, fuzzy, python-brace-format +msgid "Environment type: {} {}" +msgstr "Tipo de entorno: {}" + +#, fuzzy +msgid "Input cannot be empty" +msgstr "O valor no pode estár vacío" + +msgid "Recommended" +msgstr "" + +#, fuzzy +msgid "Package" +msgstr "Grupo de paquetes:" + +msgid "Curated selection of KDE Plasma packages" +msgstr "" + +msgid "Dependencies" +msgstr "" + +#, fuzzy +msgid "Package group" +msgstr "Grupo de paquetes:" + +msgid "Extensive KDE Plasma installation" +msgstr "" + +#, fuzzy +msgid "Packages in group" +msgstr "Grupo de paquetes:" + +msgid "Minimal KDE Plasma installation" +msgstr "" + +#, fuzzy +msgid "Description" +msgstr "Cifrado de disco" + +#, fuzzy +msgid "Select a flavor of KDE Plasma to install" +msgstr "Por favor, elixa qué xestor de inicio de sesión instalar" + #~ msgid "Add :" #~ msgstr "Añadir :" diff --git a/archinstall/locales/he/LC_MESSAGES/base.po b/archinstall/locales/he/LC_MESSAGES/base.po index 99ac38f9..cdbffbcc 100644 --- a/archinstall/locales/he/LC_MESSAGES/base.po +++ b/archinstall/locales/he/LC_MESSAGES/base.po @@ -830,6 +830,22 @@ msgstr "קלט שגוי! נא לנסות שוב עם קלט תקין [1 עד {ma msgid "Parallel Downloads" msgstr "הורדות במקביל" +msgid "Pacman" +msgstr "" + +msgid "Color" +msgstr "" + +#, fuzzy, python-brace-format +msgid "Enter the number of parallel downloads (1-{})" +msgstr "" +"נא למלא את מספר ההורדות המקביליות להפעלה.‬\n" +"\n" +"‫הערה:‬\n" + +msgid "Enable colored output for pacman" +msgstr "" + msgid "ESC to skip" msgstr "‫ESC לדילוג" @@ -1691,6 +1707,129 @@ msgstr "" msgid "Exit search mode" msgstr "" +msgid "General" +msgstr "" + +#, fuzzy +msgid "Navigation" +msgstr "שמירת הגדרה" + +#, fuzzy +msgid "Selection" +msgstr "בחירת אפשרות חתימות" + +msgid "Search" +msgstr "" + +msgid "Down" +msgstr "" + +msgid "Up" +msgstr "" + +#, fuzzy +msgid "Confirm" +msgstr "אישור ויציאה" + +msgid "Focus right" +msgstr "" + +msgid "Focus left" +msgstr "" + +msgid "Toggle" +msgstr "" + +msgid "Show/Hide help" +msgstr "" + +msgid "Quit" +msgstr "" + +msgid "First" +msgstr "" + +msgid "Last" +msgstr "" + +#, fuzzy +msgid "Select" +msgstr "בחירת אפשרות חתימות" + +msgid "Page Up" +msgstr "" + +msgid "Page Down" +msgstr "" + +msgid "Page up" +msgstr "" + +msgid "Page down" +msgstr "" + +msgid "Page Left" +msgstr "" + +msgid "Page Right" +msgstr "" + +msgid "Cursor up" +msgstr "" + +msgid "Cursor down" +msgstr "" + +msgid "Cursor right" +msgstr "" + +msgid "Cursor left" +msgstr "" + +msgid "Top" +msgstr "" + +msgid "Bottom" +msgstr "" + +msgid "Home" +msgstr "" + +#, fuzzy +msgid "End" +msgstr "פעיל" + +#, fuzzy +msgid "Toggle option" +msgstr "אפשרויות תת־כרך" + +msgid "Scroll Up" +msgstr "" + +msgid "Scroll Down" +msgstr "" + +msgid "Scroll Left" +msgstr "" + +msgid "Scroll Right" +msgstr "" + +msgid "Scroll Home" +msgstr "" + +msgid "Scroll End" +msgstr "" + +msgid "Focus Next" +msgstr "" + +msgid "Focus Previous" +msgstr "" + +msgid "Copy selected text" +msgstr "" + #, fuzzy msgid "labwc needs access to your seat (collection of hardware devices i.e. keyboard, mouse, etc)" msgstr "‫Sway צריך גישה למושב (אוסף של התקני חומרה כמו למשל מקלדת, עכבר וכו׳) שלך" @@ -1938,6 +2077,23 @@ msgstr "" msgid "Firewall" msgstr "" +#, fuzzy +msgid "Additional fonts" +msgstr "מאגרים נוספים" + +#, fuzzy +msgid "Select font packages to install" +msgstr "נא לבחור איזו מערכת קבלת פנים להתקין" + +msgid "Unicode font coverage for most languages" +msgstr "" + +msgid "color emoji for browsers and apps" +msgstr "" + +msgid "Chinese, Japanese, Korean characters" +msgstr "" + #, fuzzy msgid "Select audio configuration" msgstr "שמירת הגדרת משתמש" @@ -2090,3 +2246,49 @@ msgstr "" msgid "The selected desktop profile requires a regular user to log in via the greeter" msgstr "" + +#, fuzzy, python-brace-format +msgid "Environment type: {} {}" +msgstr "סוג סביבה: {}" + +msgid "Input cannot be empty" +msgstr "" + +msgid "Recommended" +msgstr "" + +msgid "Package" +msgstr "" + +msgid "Curated selection of KDE Plasma packages" +msgstr "" + +msgid "Dependencies" +msgstr "" + +#, fuzzy +msgid "Package group" +msgstr "הגדרת מנשקים" + +msgid "Extensive KDE Plasma installation" +msgstr "" + +msgid "Packages in group" +msgstr "" + +msgid "Minimal KDE Plasma installation" +msgstr "" + +#, fuzzy +msgid "Description" +msgstr "הצפנת כונן" + +#, fuzzy +msgid "Select a flavor of KDE Plasma to install" +msgstr "נא לבחור איזו מערכת קבלת פנים להתקין" + +msgid "Arial/Times/Courier replacement, Cyrillic support for Steam/games" +msgstr "" + +msgid "wide Unicode coverage, good fallback font" +msgstr "" diff --git a/archinstall/locales/hi/LC_MESSAGES/base.mo b/archinstall/locales/hi/LC_MESSAGES/base.mo index 65ce321c..70f2738a 100644 Binary files a/archinstall/locales/hi/LC_MESSAGES/base.mo and b/archinstall/locales/hi/LC_MESSAGES/base.mo differ diff --git a/archinstall/locales/hi/LC_MESSAGES/base.po b/archinstall/locales/hi/LC_MESSAGES/base.po index ec276ebc..9d64d477 100644 --- a/archinstall/locales/hi/LC_MESSAGES/base.po +++ b/archinstall/locales/hi/LC_MESSAGES/base.po @@ -5,7 +5,7 @@ msgstr "" "PO-Revision-Date: \n" "Last-Translator: Atharv \n" "Language-Team: \n" -"Language: he\n" +"Language: hi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -807,10 +807,10 @@ msgstr "" " (1 से {} के बीच मान दर्ज करें)\n" "नोट:" -msgid " - Maximum value   : {} ( Allows {} parallel downloads, allows {} downloads at a time )" +msgid " - Maximum value : {} ( Allows {} parallel downloads, allows {} downloads at a time )" msgstr " - अधिकतम मान : {} ( {} समानांतर डाउनलोड की अनुमति देता है, एक समय में {} डाउनलोड की अनुमति देता है )" -msgid " - Minimum value   : 1 ( Allows 1 parallel download, allows 2 downloads at a time )" +msgid " - Minimum value : 1 ( Allows 1 parallel download, allows 2 downloads at a time )" msgstr " - न्यूनतम मान : 1 ( 1 समानांतर डाउनलोड की अनुमति देता है, एक समय में 2 डाउनलोड की अनुमति देता है )" msgid " - Disable/Default : 0 ( Disables parallel downloading, allows only 1 download at a time )" @@ -823,6 +823,19 @@ msgstr "अमान्य इनपुट! एक मान्य इनपु msgid "Parallel Downloads" msgstr "समानांतर डाउनलोड" +msgid "Pacman" +msgstr "Pacman" + +msgid "Color" +msgstr "रंग" + +#, python-brace-format +msgid "Enter the number of parallel downloads (1-{})" +msgstr "समानांतर डाउनलोड की संख्या दर्ज करें (1-{})" + +msgid "Enable colored output for pacman" +msgstr "Pacman के लिए रंगीन आउटपुट सक्षम करें" + msgid "ESC to skip" msgstr "छोड़ने के लिए ESC दबाएँ" @@ -1163,7 +1176,7 @@ msgstr "मिरर (Mirrors)" msgid "Mirror regions" msgstr "मिरर क्षेत्र" -msgid " - Maximum value   : {} ( Allows {} parallel downloads, allows {max_downloads+1} downloads at a time )" +msgid " - Maximum value : {} ( Allows {} parallel downloads, allows {max_downloads+1} downloads at a time )" msgstr " - अधिकतम मान : {} ( {} समानांतर डाउनलोड की अनुमति देता है, एक समय में {max_downloads+1} डाउनलोड की अनुमति देता है )" msgid "Invalid input! Try again with a valid input [1 to {}, or 0 to disable]" @@ -1412,6 +1425,7 @@ msgstr "आपके द्वारा दर्ज किया गया य msgid "Username" msgstr "उपयोगकर्ता नाम" +#, python-brace-format msgid "Should \"{}\" be a superuser (sudo)?\n" msgstr "क्या \"{}\" को superuser (sudo) होना चाहिए?\n" @@ -1489,7 +1503,7 @@ msgid "Disabled" msgstr "अक्षम" msgid "Please submit this issue (and file) to https://github.com/archlinux/archinstall/issues" -msgstr "कृपया इस समस्या (और फ़ाइल) को https://github.com/archlinux/archinstall/issues पर सबमिट करें" +msgstr "कृपया इस समस्या (और फ़ाइल) को https://github.com/archlinux/archinstall/issues पर सबमिट करें।" msgid "Mirror name" msgstr "मिरर का नाम" @@ -1662,6 +1676,123 @@ msgstr "खोज मोड शुरू करें" msgid "Exit search mode" msgstr "खोज मोड से बाहर निकलें" +msgid "General" +msgstr "सामान्य" + +msgid "Navigation" +msgstr "नेविगेशन" + +msgid "Selection" +msgstr "चयन" + +msgid "Search" +msgstr "खोज" + +msgid "Down" +msgstr "नीचे" + +msgid "Up" +msgstr "ऊपर" + +msgid "Confirm" +msgstr "पुष्टि करें" + +msgid "Focus right" +msgstr "दाएँ फोकस करें" + +msgid "Focus left" +msgstr "बाएँ फोकस करें" + +msgid "Toggle" +msgstr "बदलें" + +msgid "Show/Hide help" +msgstr "मदद दिखाएँ/छुपाएँ" + +msgid "Quit" +msgstr "बाहर निकलें" + +msgid "First" +msgstr "पहला" + +msgid "Last" +msgstr "अंतिम" + +msgid "Select" +msgstr "चुनें" + +msgid "Page Up" +msgstr "पेज ऊपर" + +msgid "Page Down" +msgstr "पेज नीचे" + +msgid "Page up" +msgstr "पेज ऊपर" + +msgid "Page down" +msgstr "पेज नीचे" + +msgid "Page Left" +msgstr "पेज बाएँ" + +msgid "Page Right" +msgstr "पेज दाएँ" + +msgid "Cursor up" +msgstr "कर्सर ऊपर" + +msgid "Cursor down" +msgstr "कर्सर नीचे" + +msgid "Cursor right" +msgstr "कर्सर दाएँ" + +msgid "Cursor left" +msgstr "कर्सर बाएँ" + +msgid "Top" +msgstr "ऊपर" + +msgid "Bottom" +msgstr "नीचे" + +msgid "Home" +msgstr "होम" + +msgid "End" +msgstr "एंड" + +msgid "Toggle option" +msgstr "विकल्प बदलें" + +msgid "Scroll Up" +msgstr "ऊपर स्क्रॉल करें" + +msgid "Scroll Down" +msgstr "नीचे स्क्रॉल करें" + +msgid "Scroll Left" +msgstr "बाएँ स्क्रॉल करें" + +msgid "Scroll Right" +msgstr "दाएँ स्क्रॉल करें" + +msgid "Scroll Home" +msgstr "स्क्रॉल होम" + +msgid "Scroll End" +msgstr "स्क्रॉल एंड" + +msgid "Focus Next" +msgstr "अगले पर फोकस" + +msgid "Focus Previous" +msgstr "पिछले पर फोकस" + +msgid "Copy selected text" +msgstr "चयनित टेक्स्ट कॉपी करें" + msgid "labwc needs access to your seat (collection of hardware devices i.e. keyboard, mouse, etc)" msgstr "labwc को आपकी सीट (हार्डवेयर डिवाइसेज का संग्रह यानी कीबोर्ड, माउस, आदि) तक पहुंच की आवश्यकता है" @@ -1876,3 +2007,186 @@ msgstr "नेटवर्क मैनेजर का उपयोग कर msgid "Use Network Manager (iwd backend)" msgstr "नेटवर्क मैनेजर का उपयोग करें (iwd बैकएंड)" + +msgid "Firewall" +msgstr "फ़ायरवॉल" + +msgid "Additional fonts" +msgstr "अतिरिक्त फ़ॉन्ट" + +msgid "Select font packages to install" +msgstr "इंस्टॉल करने के लिए फ़ॉन्ट पैकेज चुनें" + +msgid "Unicode font coverage for most languages" +msgstr "अधिकांश भाषाओं के लिए यूनिकोड फ़ॉन्ट समर्थन" + +msgid "color emoji for browsers and apps" +msgstr "ब्राउज़र और ऐप्स के लिए रंगीन इमोजी" + +msgid "Chinese, Japanese, Korean characters" +msgstr "चीनी, जापानी, कोरियाई वर्ण" + +msgid "Select audio configuration" +msgstr "ऑडियो कॉन्फ़िगरेशन चुनें" + +msgid "Enter credentials file decryption password" +msgstr "क्रेडेंशियल्स फ़ाइल डिक्रिप्शन पासवर्ड दर्ज करें" + +msgid "Enter root password" +msgstr "रूट पासवर्ड दर्ज करें" + +msgid "Select bootloader to install" +msgstr "इंस्टॉल करने के लिए बूटलोडर चुनें" + +msgid "Configuration preview" +msgstr "कॉन्फ़िगरेशन पूर्वावलोकन देखें" + +msgid "Enter a directory for the configuration(s) to be saved" +msgstr "कॉन्फ़िगरेशन सहेजने के लिए डायरेक्टरी दर्ज करें" + +msgid "Select encryption type" +msgstr "एन्क्रिप्शन प्रकार चुनें" + +msgid "Select disks for the installation" +msgstr "इंस्टॉलेशन के लिए डिस्क चुनें" + +msgid "Enter a mountpoint" +msgstr "माउंटपॉइंट दर्ज करें" + +#, python-brace-format +msgid "Enter a size (default: {}): " +msgstr "आकार दर्ज करें (डिफ़ॉल्ट: {}): " + +msgid "Enter subvolume name" +msgstr "सबवॉल्यूम का नाम दर्ज करें" + +msgid "Enter subvolume mountpoint" +msgstr "सबवॉल्यूम माउंटपॉइंट दर्ज करें" + +msgid "Select a disk configuration" +msgstr "एक डिस्क कॉन्फ़िगरेशन चुनें" + +msgid "Enter root mount directory" +msgstr "रूट माउंट डायरेक्टरी दर्ज करें" + +msgid "You will use whatever drive-setup is mounted at the specified directory" +msgstr "आप निर्दिष्ट डायरेक्टरी पर माउंट किए गए किसी भी ड्राइव-सेटअप का उपयोग करेंगे" + +msgid "WARNING: Archinstall won't check the suitability of this setup" +msgstr "चेतावनी: Archinstall इस सेटअप की उपयुक्तता की जाँच नहीं करेगा" + +msgid "Select main filesystem" +msgstr "मुख्य फ़ाइलसिस्टम चुनें" + +msgid "Enter a hostname" +msgstr "होस्टनेम दर्ज करें" + +msgid "Select timezone" +msgstr "समयक्षेत्र चुनें" + +msgid "Enter the number of parallel downloads to be enabled" +msgstr "सक्षम किए जाने वाले समानांतर डाउनलोड की संख्या दर्ज करें" + +#, python-brace-format +msgid "Value must be between 1 and {}" +msgstr "मान 1 और {} के बीच होना चाहिए" + +msgid "Select which kernel(s) to install" +msgstr "इंस्टॉल करने के लिए कौन से कर्नेल चुनें" + +msgid "Enter a respository name" +msgstr "रिपॉजिटरी का नाम दर्ज करें" + +msgid "Enter the repository url" +msgstr "रिपॉजिटरी URL दर्ज करें" + +msgid "Enter server url" +msgstr "सर्वर URL दर्ज करें" + +msgid "Select mirror regions to be enabled" +msgstr "सक्षम करने के लिए मिरर क्षेत्र चुनें" + +msgid "Select optional repositories to be enabled" +msgstr "सक्षम करने के लिए वैकल्पिक रिपॉजिटरी चुनें" + +msgid "Select an interface" +msgstr "एक इंटरफ़ेस चुनें" + +msgid "Choose network configuration" +msgstr "नेटवर्क कॉन्फ़िगरेशन चुनें" + +msgid "No packages found" +msgstr "कोई पैकेज नहीं मिला" + +msgid "Select which greeter to install" +msgstr "कौन सा ग्रीटर इंस्टॉल करना है चुनें" + +msgid "Select a profile type" +msgstr "प्रोफ़ाइल प्रकार चुनें" + +msgid "Enter new password" +msgstr "नया पासवर्ड दर्ज करें" + +msgid "Enter a username" +msgstr "यूज़रनेम दर्ज करें" + +msgid "Enter a password" +msgstr "पासवर्ड दर्ज करें" + +msgid "The password did not match, please try again" +msgstr "पासवर्ड मेल नहीं खाया, कृपया पुनः प्रयास करें" + +msgid "Password strength: Weak" +msgstr "पासवर्ड मजबूती: कमजोर" + +msgid "Password strength: Moderate" +msgstr "पासवर्ड मजबूती: मध्यम" + +msgid "Password strength: Strong" +msgstr "पासवर्ड मजबूती: मजबूत" + +msgid "The selected desktop profile requires a regular user to log in via the greeter" +msgstr "चयनित डेस्कटॉप प्रोफ़ाइल में ग्रीटर के जरिए लॉग इन करने के लिए एक सामान्य उपयोगकर्ता आवश्यक है" + +#, python-brace-format +msgid "Environment type: {} {}" +msgstr "एन्वायरनमेंट प्रकार: {} {}" + +msgid "Input cannot be empty" +msgstr "इनपुट खाली नहीं हो सकता" + +msgid "Recommended" +msgstr "अनुशंसित" + +msgid "Package" +msgstr "पैकेज" + +msgid "Curated selection of KDE Plasma packages" +msgstr "KDE Plasma पैकेजों का चुना हुआ संग्रह" + +msgid "Dependencies" +msgstr "निर्भरताएँ" + +msgid "Package group" +msgstr "पैकेज समूह:" + +msgid "Extensive KDE Plasma installation" +msgstr "विस्तृत KDE Plasma इंस्टॉलेशन" + +msgid "Packages in group" +msgstr "समूह में पैकेज" + +msgid "Minimal KDE Plasma installation" +msgstr "न्यूनतम KDE Plasma इंस्टॉलेशन" + +msgid "Description" +msgstr "विवरण" + +msgid "Select a flavor of KDE Plasma to install" +msgstr "इंस्टॉल करने के लिए KDE Plasma का एक प्रकार चुनें" + +msgid "Arial/Times/Courier replacement, Cyrillic support for Steam/games" +msgstr "Arial/Times/Courier का विकल्प, Steam/गेम्स के लिए Cyrillic समर्थन" + +msgid "wide Unicode coverage, good fallback font" +msgstr "विस्तृत यूनिकोड कवरेज, अच्छा फॉलबैक फ़ॉन्ट" diff --git a/archinstall/locales/it/LC_MESSAGES/base.mo b/archinstall/locales/it/LC_MESSAGES/base.mo index 4936e359..79d934d4 100644 Binary files a/archinstall/locales/it/LC_MESSAGES/base.mo and b/archinstall/locales/it/LC_MESSAGES/base.mo differ diff --git a/archinstall/locales/it/LC_MESSAGES/base.po b/archinstall/locales/it/LC_MESSAGES/base.po index f1e416a9..55585263 100644 --- a/archinstall/locales/it/LC_MESSAGES/base.po +++ b/archinstall/locales/it/LC_MESSAGES/base.po @@ -2,14 +2,14 @@ msgid "" msgstr "" "Project-Id-Version: \n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2026-01-20 19:23+0100\n" +"PO-Revision-Date: 2026-04-12 10:26+0200\n" "Last-Translator: Van Matten\n" "Language-Team: Alessio Cuccovillo , Van Matten\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 3.8\n" +"X-Generator: Poedit 3.9\n" "X-Poedit-Basepath: ../..\n" "X-Poedit-SearchPath-0: base.pot\n" @@ -1028,7 +1028,7 @@ msgid "Back" msgstr "Indietro" msgid "Please chose which greeter to install for the chosen profiles: {}" -msgstr "Scegli quale messaggio di benvenuto installare per i profili scelti: {}" +msgstr "Scegli quale greeter installare per i profili scelti: {}" #, python-brace-format msgid "Environment type: {}" @@ -1090,10 +1090,10 @@ msgid "Graphics driver" msgstr "Driver grafici" msgid "Greeter" -msgstr "Programma di benvenuto" +msgstr "Greeter" msgid "Please chose which greeter to install" -msgstr "Scegli quale programma di benvenuto installare" +msgstr "Scegli quale greeter installare" msgid "This is a list of pre-programmed default_profiles" msgstr "Questo è un elenco di default_profiles preprogrammati" @@ -1243,7 +1243,7 @@ msgid "" msgstr "" "\n" "\n" -"Scegli un’opzione per concedere a Hyprland l'accesso al tuo hardware a Hyprland" +"Scegli un’opzione per concedere a Hyprland l'accesso al tuo hardware" msgid "All entered values can be suffixed with a unit: %, B, KB, KiB, MB, MiB..." msgstr "Tutti i valori immessi possono avere come suffisso un’unità: %, B, KB, KiB, MB, MiB…" @@ -1561,7 +1561,7 @@ msgid "Loading packages..." msgstr "Caricamento pacchetti in corso..." msgid "Select any packages from the below list that should be installed additionally" -msgstr "Seleziona dalla lista sotto i pacchetti da installare" +msgstr "Seleziona dalla lista sotto i pacchetti aggiuntivi da installare" msgid "Add a custom repository" msgstr "Aggiungi una repository personalizzata" @@ -1621,10 +1621,10 @@ msgid "Exit help" msgstr "Chiudi aiuto" msgid "Preview scroll up" -msgstr "Anteprima scorrimento vero l'alto" +msgstr "Anteprima scorrimento su" msgid "Preview scroll down" -msgstr "Anteprima scorrimento vero il basso" +msgstr "Anteprima scorrimento giù" msgid "Move up" msgstr "Muovi su" @@ -1665,6 +1665,123 @@ msgstr "Avvia modalità ricerca" msgid "Exit search mode" msgstr "Chiudi modalità ricerca" +msgid "General" +msgstr "Generale" + +msgid "Navigation" +msgstr "Navigazione" + +msgid "Selection" +msgstr "Selezione" + +msgid "Search" +msgstr "Cerca" + +msgid "Down" +msgstr "In fondo" + +msgid "Up" +msgstr "Su" + +msgid "Confirm" +msgstr "Conferma" + +msgid "Focus right" +msgstr "Vai a destra" + +msgid "Focus left" +msgstr "Vai a sinistra" + +msgid "Toggle" +msgstr "Attiva/disattiva" + +msgid "Show/Hide help" +msgstr "Mostra/nascondi aiuto" + +msgid "Quit" +msgstr "Esci" + +msgid "First" +msgstr "Primo" + +msgid "Last" +msgstr "Ultimo" + +msgid "Select" +msgstr "Seleziona" + +msgid "Page Up" +msgstr "Pagina su" + +msgid "Page Down" +msgstr "Pagina su" + +msgid "Page up" +msgstr "Pagina su" + +msgid "Page down" +msgstr "Pagina giù" + +msgid "Page Left" +msgstr "Pagina a sinistra" + +msgid "Page Right" +msgstr "Pagina a destra" + +msgid "Cursor up" +msgstr "Cursore su" + +msgid "Cursor down" +msgstr "Cursore giù" + +msgid "Cursor right" +msgstr "Cursore a destra" + +msgid "Cursor left" +msgstr "Cursore a sinistra" + +msgid "Top" +msgstr "In cima" + +msgid "Bottom" +msgstr "In fondo" + +msgid "Home" +msgstr "Inizio" + +msgid "End" +msgstr "Fine" + +msgid "Toggle option" +msgstr "Opzioni di attivazione" + +msgid "Scroll Up" +msgstr "Scorri Su" + +msgid "Scroll Down" +msgstr "Scorri giù" + +msgid "Scroll Left" +msgstr "Scorri a sinistra" + +msgid "Scroll Right" +msgstr "Scorri a destra" + +msgid "Scroll Home" +msgstr "Scorri all'inizio" + +msgid "Scroll End" +msgstr "Scorri alla fine" + +msgid "Focus Next" +msgstr "Vai al successivo" + +msgid "Focus Previous" +msgstr "Vai al precedente" + +msgid "Copy selected text" +msgstr "Copia il testo selezionato" + msgid "labwc needs access to your seat (collection of hardware devices i.e. keyboard, mouse, etc)" msgstr "labwc ha bisogno dell’accesso al tuo posto (insieme di dispositivi hardware, ad esempio tastiera, mouse, ecc.)" @@ -1883,39 +2000,24 @@ msgstr "Usa NetworkManager (backend iwd)" msgid "Firewall" msgstr "Firewall" -msgid "Enter credentials file decryption password" -msgstr "Inserici la password di decrittazione del file delle credenziali" - -msgid "Configuration preview" -msgstr "Anteprima della configurazione" - -msgid "Enter a directory for the configuration(s) to be saved" -msgstr "Inserisci una cartella in cui salvare le configurazioni" - -msgid "Enter a respository name" -msgstr "Inserisci il nome di un repository" - -msgid "Enter the repository url" -msgstr "Inserisci l'URL della repository" - -msgid "Enter server url" -msgstr "Inserisci l'URL del server" - -msgid "Select mirror regions to be enabled" -msgstr "Seleziona quali regioni dei mirror abilitare" - -msgid "Select optional repositories to be enabled" -msgstr "Seleziona quali repository aggiuntive opzionali abilitare" - msgid "Select audio configuration" msgstr "Seleziona la configurazione audio" +msgid "Enter credentials file decryption password" +msgstr "Inserici la password di decrittazione del file delle credenziali" + msgid "Enter root password" msgstr "Inserisci la password di root" msgid "Select bootloader to install" msgstr "Seleziona il bootloader da installare" +msgid "Configuration preview" +msgstr "Anteprima della configurazione" + +msgid "Enter a directory for the configuration(s) to be saved" +msgstr "Inserisci una cartella in cui salvare le configurazioni" + msgid "Select encryption type" msgstr "Seleziona il tipo di crittografia" @@ -1956,9 +2058,6 @@ msgstr "Inserisci un nome dell'host" msgid "Select timezone" msgstr "Seleziona il fuso orario" -msgid "No packages found" -msgstr "Nessun pacchetto trovato" - msgid "Enter the number of parallel downloads to be enabled" msgstr "Inserisci il numero di download in parallelo da abilitare" @@ -1966,6 +2065,39 @@ msgstr "Inserisci il numero di download in parallelo da abilitare" msgid "Value must be between 1 and {}" msgstr "Il valore deve essere tra 1 e {}" +msgid "Select which kernel(s) to install" +msgstr "Scegli quali kernel installare" + +msgid "Enter a respository name" +msgstr "Inserisci il nome di un repository" + +msgid "Enter the repository url" +msgstr "Inserisci l'URL della repository" + +msgid "Enter server url" +msgstr "Inserisci l'URL del server" + +msgid "Select mirror regions to be enabled" +msgstr "Seleziona quali regioni dei mirror abilitare" + +msgid "Select optional repositories to be enabled" +msgstr "Seleziona quali repository aggiuntive opzionali abilitare" + +msgid "Select an interface" +msgstr "Seleziona un'interfaccia" + +msgid "Choose network configuration" +msgstr "Scegli la configurazione di rete" + +msgid "No packages found" +msgstr "Nessun pacchetto trovato" + +msgid "Select which greeter to install" +msgstr "Seleziona quale greeter installare" + +msgid "Select a profile type" +msgstr "Seleziona un tipo di profilo" + msgid "Enter new password" msgstr "Inserisci una nuova password" @@ -1975,20 +2107,54 @@ msgstr "Inserisci un nome utente" msgid "Enter a password" msgstr "Inserisci una password" -msgid "Select an interface" -msgstr "Seleziona un'interfaccia" - -msgid "Choose network configuration" -msgstr "Scegli la configurazione di rete" - -msgid "Select which kernel(s) to install" -msgstr "Scegli quali kernel installare" - -msgid "Select which greeter to install" -msgstr "Seleziona quale schermata di benvenuto installare" - -msgid "Select a profile type" -msgstr "Seleziona un tipo di profilo" - msgid "The password did not match, please try again" msgstr "La password non corrisponde, prova ancora" + +msgid "Password strength: Weak" +msgstr "Complessità password: Bassa" + +msgid "Password strength: Moderate" +msgstr "Complessità password: Media" + +msgid "Password strength: Strong" +msgstr "Complessità password: Alta" + +msgid "The selected desktop profile requires a regular user to log in via the greeter" +msgstr "Il profilo desktop selezionato richiede un utente regolare per accedere via greeter" + +#, python-brace-format +msgid "Environment type: {} {}" +msgstr "Tipo di ambiente: {} {}" + +msgid "Recommended" +msgstr "Raccomandato" + +msgid "Package" +msgstr "Pacchetto" + +msgid "Curated selection of KDE Plasma packages" +msgstr "Selezione curata di pacchetti di KDE Plasma" + +msgid "Dependencies" +msgstr "Dipendenze" + +msgid "Package group" +msgstr "Gruppo di pacchetti" + +msgid "Extensive KDE Plasma installation" +msgstr "Installazione di KDE Plasma estesa" + +msgid "Packages in group" +msgstr "Pacchetti nel gruppo" + +msgid "Minimal KDE Plasma installation" +msgstr "Installazione di KDE Plasma minimale" + +msgid "Description" +msgstr "Descrizione" + +msgid "Select a flavor of KDE Plasma to install" +msgstr "Seleziona la configurazione di KDE Plasma da installare" + +msgid "Input cannot be empty" +msgstr "Il campo non può essere vuoto" diff --git a/archinstall/locales/ku/LC_MESSAGES/base.po b/archinstall/locales/ku/LC_MESSAGES/base.po index f6f6bf2c..eeae0ddc 100644 --- a/archinstall/locales/ku/LC_MESSAGES/base.po +++ b/archinstall/locales/ku/LC_MESSAGES/base.po @@ -823,6 +823,22 @@ msgstr "Têketineke nederbasdar! Bi têketineke derbasdar re dîsa hewl bide [1 msgid "Parallel Downloads" msgstr "Daxistinên parallel" +msgid "Pacman" +msgstr "" + +msgid "Color" +msgstr "" + +#, fuzzy, python-brace-format +msgid "Enter the number of parallel downloads (1-{})" +msgstr "" +"Jimara daxistinên paralel ên ku werin çalakkirin têxîne.\n" +"\n" +"Nîşe:\n" + +msgid "Enable colored output for pacman" +msgstr "" + msgid "ESC to skip" msgstr "ESC bo derbas bikî" @@ -1663,6 +1679,139 @@ msgstr "Awaya lêgerînê dest pê bike" msgid "Exit search mode" msgstr "Awaya lêgerînê bi dawî bike" +msgid "General" +msgstr "" + +#, fuzzy +msgid "Navigation" +msgstr "Rêkxisitinê tomar bike" + +#, fuzzy +msgid "Selection" +msgstr "Herêman hilbijêre" + +msgid "Search" +msgstr "" + +msgid "Down" +msgstr "" + +msgid "Up" +msgstr "" + +#, fuzzy +msgid "Confirm" +msgstr "Biperjîne û derkeve" + +#, fuzzy +msgid "Focus right" +msgstr "Bilivîne rastê" + +#, fuzzy +msgid "Focus left" +msgstr "Bilivîne çepê" + +msgid "Toggle" +msgstr "" + +#, fuzzy +msgid "Show/Hide help" +msgstr "Alîkariyê nîşan bide" + +msgid "Quit" +msgstr "" + +msgid "First" +msgstr "" + +msgid "Last" +msgstr "" + +#, fuzzy +msgid "Select" +msgstr "Herêman hilbijêre" + +msgid "Page Up" +msgstr "" + +msgid "Page Down" +msgstr "" + +#, fuzzy +msgid "Page up" +msgstr "Koma pakêtê:" + +#, fuzzy +msgid "Page down" +msgstr "Bilivîne jêrê" + +msgid "Page Left" +msgstr "" + +#, fuzzy +msgid "Page Right" +msgstr "Bilivîne rastê" + +msgid "Cursor up" +msgstr "" + +#, fuzzy +msgid "Cursor down" +msgstr "Bilivîne jêrê" + +#, fuzzy +msgid "Cursor right" +msgstr "Bilivîne rastê" + +#, fuzzy +msgid "Cursor left" +msgstr "Bilivîne çepê" + +msgid "Top" +msgstr "" + +msgid "Bottom" +msgstr "" + +msgid "Home" +msgstr "" + +#, fuzzy +msgid "End" +msgstr "Çalakkirî" + +#, fuzzy +msgid "Toggle option" +msgstr "Vebijêrkên binpeldankê" + +msgid "Scroll Up" +msgstr "" + +#, fuzzy +msgid "Scroll Down" +msgstr "Pêşdîtina şemitandina jêr" + +msgid "Scroll Left" +msgstr "" + +msgid "Scroll Right" +msgstr "" + +msgid "Scroll Home" +msgstr "" + +msgid "Scroll End" +msgstr "" + +msgid "Focus Next" +msgstr "" + +msgid "Focus Previous" +msgstr "" + +msgid "Copy selected text" +msgstr "" + msgid "labwc needs access to your seat (collection of hardware devices i.e. keyboard, mouse, etc)" msgstr "labwc gihîştina cihê te pêwîst dike (komek ji reqalavan b.m. kilîtdank, mişk, hwd)" @@ -1885,3 +2034,202 @@ msgstr "" msgid "Use Network Manager (iwd backend)" msgstr "" + +msgid "Firewall" +msgstr "" + +#, fuzzy +msgid "Select audio configuration" +msgstr "Rêkxisitinê bikarhêner tomar bike" + +#, fuzzy +msgid "Enter credentials file decryption password" +msgstr "Borînpeyva şîfrekirina pelê bawernameyan" + +#, fuzzy +msgid "Enter root password" +msgstr "Borînpeyvekê têxîne: " + +msgid "Select bootloader to install" +msgstr "" + +#, fuzzy +msgid "Configuration preview" +msgstr "Rêkxistin" + +#, fuzzy +msgid "Enter a directory for the configuration(s) to be saved" +msgstr "Ji bo rêkxisitin ku werin tomarkirin pelrêçekê têxîne: " + +#, fuzzy +msgid "Select encryption type" +msgstr "Cûreyê şîfrekirinê" + +#, fuzzy +msgid "Select disks for the installation" +msgstr "Navê mêvandarê xwestî ji bo sazkirinê: " + +#, fuzzy +msgid "Enter a mountpoint" +msgstr "Xaleke siwarkirinê hilbijêre:" + +#, fuzzy, python-brace-format +msgid "Enter a size (default: {}): " +msgstr "Dawî têxîne (kesane: {}): " + +#, fuzzy +msgid "Enter subvolume name" +msgstr "Navê binpeldankê" + +#, fuzzy +msgid "Enter subvolume mountpoint" +msgstr "Xala siwarkirinê ya binpeldankê" + +#, fuzzy +msgid "Select a disk configuration" +msgstr "Rêkxisitina dîskê" + +#, fuzzy +msgid "Enter root mount directory" +msgstr "Pelrêça siwarkirina root" + +msgid "You will use whatever drive-setup is mounted at the specified directory" +msgstr "" + +msgid "WARNING: Archinstall won't check the suitability of this setup" +msgstr "" + +#, fuzzy +msgid "Select main filesystem" +msgstr "Pergala pelê biguherîne" + +msgid "Enter a hostname" +msgstr "" + +#, fuzzy +msgid "Select timezone" +msgstr "Herêmeke demê hilbijêre" + +#, fuzzy +msgid "Enter the number of parallel downloads to be enabled" +msgstr "" +"Jimara daxistinên paralel ên ku werin çalakkirin têxîne.\n" +"\n" +"Nîşe:\n" + +#, python-brace-format +msgid "Value must be between 1 and {}" +msgstr "" + +#, fuzzy +msgid "Select which kernel(s) to install" +msgstr "Tika ka kîjan silavkar divê were sazkirin hilbijêre" + +#, fuzzy +msgid "Enter a respository name" +msgstr "Navê depoyê" + +#, fuzzy +msgid "Enter the repository url" +msgstr "Depoya kesane biguherîne" + +#, fuzzy +msgid "Enter server url" +msgstr "Girêdana rajekar" + +#, fuzzy +msgid "Select mirror regions to be enabled" +msgstr "Herêmên eynikê ên hilbijartî" + +#, fuzzy +msgid "Select optional repositories to be enabled" +msgstr "Ka kîjan depoyên vebijêrkî divê çalak bibe hilbijêre" + +#, fuzzy +msgid "Select an interface" +msgstr "Navrûyê jê bibe" + +#, fuzzy +msgid "Choose network configuration" +msgstr "Rêkxisitina torê tune ye" + +#, fuzzy +msgid "No packages found" +msgstr "Amûrên U2F nehatin dîtin" + +#, fuzzy +msgid "Select which greeter to install" +msgstr "Tika ka kîjan silavkar divê were sazkirin hilbijêre" + +#, fuzzy +msgid "Select a profile type" +msgstr "Profîlên hilbijartî: " + +#, fuzzy +msgid "Enter new password" +msgstr "Borînpeyva wifi têxîne" + +msgid "Enter a username" +msgstr "" + +#, fuzzy +msgid "Enter a password" +msgstr "Borînpeyvekê têxîne: " + +#, fuzzy +msgid "The password did not match, please try again" +msgstr "Pejirandina borînpeyvê li hev nehat, tika dîsa hewl bide" + +msgid "Password strength: Weak" +msgstr "" + +msgid "Password strength: Moderate" +msgstr "" + +msgid "Password strength: Strong" +msgstr "" + +msgid "The selected desktop profile requires a regular user to log in via the greeter" +msgstr "" + +#, fuzzy, python-brace-format +msgid "Environment type: {} {}" +msgstr "Cûreya jîngehê: {}" + +#, fuzzy +msgid "Input cannot be empty" +msgstr "Nirx nabe ku vala be" + +msgid "Recommended" +msgstr "" + +#, fuzzy +msgid "Package" +msgstr "Koma pakêtê:" + +msgid "Curated selection of KDE Plasma packages" +msgstr "" + +msgid "Dependencies" +msgstr "" + +#, fuzzy +msgid "Package group" +msgstr "Koma pakêtê:" + +msgid "Extensive KDE Plasma installation" +msgstr "" + +#, fuzzy +msgid "Packages in group" +msgstr "Koma pakêtê:" + +msgid "Minimal KDE Plasma installation" +msgstr "" + +#, fuzzy +msgid "Description" +msgstr "Şîfrekirina dîskê" + +msgid "Select a flavor of KDE Plasma to install" +msgstr "" diff --git a/archinstall/locales/languages.json b/archinstall/locales/languages.json index 1cc5cda4..2dbcf3b4 100644 --- a/archinstall/locales/languages.json +++ b/archinstall/locales/languages.json @@ -169,7 +169,7 @@ {"abbr": "tr", "lang": "Turkish", "translated_lang" : "Türkçe"}, {"abbr": "tw", "lang": "Twi"}, {"abbr": "ug", "lang": "Uighur"}, - {"abbr": "uk", "lang": "Ukrainian"}, + {"abbr": "uk", "lang": "Ukrainian", "console_font": "UniCyr_8x16"}, {"abbr": "ur", "lang": "Urdu", "translated_lang": "اردو"}, {"abbr": "uz", "lang": "Uzbek", "translated_lang": "O'zbek"}, {"abbr": "ve", "lang": "Venda"}, diff --git a/archinstall/locales/messages.mo b/archinstall/locales/messages.mo new file mode 100644 index 00000000..c42ecb4e Binary files /dev/null and b/archinstall/locales/messages.mo differ diff --git a/archinstall/locales/pt_BR/LC_MESSAGES/base.po b/archinstall/locales/pt_BR/LC_MESSAGES/base.po index 83d5d191..c507724c 100644 --- a/archinstall/locales/pt_BR/LC_MESSAGES/base.po +++ b/archinstall/locales/pt_BR/LC_MESSAGES/base.po @@ -28,7 +28,7 @@ msgid " Please submit this issue (and file) to https://github.com/archlinux/a msgstr " Por favor, envie este problema (e o arquivo) para: https://github.com/archlinux/archinstall/issues" msgid "Do you really want to abort?" -msgstr "Tem certeza de que deseja abortar?" +msgstr "Tem certeza que deseja abortar?" msgid "And one more time for verification: " msgstr "Digite novamente para confirmação: " @@ -195,7 +195,7 @@ msgid "Select what you wish to do with the selected block devices" msgstr "Selecione o que deseja 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, que podem por exemplo facilitar a instalação de ambientes gráficos" +msgstr "Esta é uma lista de perfis pré-programados, que podem, por exemplo, facilitar a instalação de ambientes gráficos" msgid "Select keyboard layout" msgstr "Selecione o layout de teclado" @@ -207,10 +207,10 @@ msgid "Select one or more hard drives to use and configure" msgstr "Selecione um ou mais discos rígidos para usar e configurar" 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 melhor compatibilidade com seu hardware AMD, recomenda-se usar a opção totalmente open source ou as opções AMD / ATI." +msgstr "Para melhor compatibilidade com seu hardware AMD, recomenda-se usar a opção totalmente open-source ou as opções 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 "Para melhor compatibilidade com seu hardware Intel, recomenda-se usar a opção totalmente open source ou as opções Intel.\n" +msgstr "Para melhor compatibilidade com seu hardware Intel, recomenda-se usar a opção totalmente open-source ou as opções Intel.\n" msgid "For the best compatibility with your Nvidia hardware, you may want to use the Nvidia proprietary driver.\n" msgstr "Para melhor compatibilidade com seu hardware Nvidia, recomenda-se usar o driver proprietário da Nvidia.\n" @@ -222,13 +222,13 @@ msgid "" msgstr "" "\n" "\n" -"Selecione um driver de vídeo ou deixe em branco para instalar os drivers completamente open-source" +"Selecione um driver de vídeo ou deixe em branco para instalar os drivers open-source" msgid "All open-source (default)" msgstr "Tudo open-source (padrão)" msgid "Choose which kernels to use or leave blank for default \"{}\"" -msgstr "Escolhe quais kernels usar ou deixe em branco para o kernel padrão \"{}\"" +msgstr "Escolha quais kernels usar ou deixe em branco para o kernel padrão \"{}\"" msgid "Choose which locale language to use" msgstr "Escolha qual idioma de localização usar" @@ -249,7 +249,7 @@ msgid "You need to enter a valid fs-type in order to continue. See `man parted` msgstr "Você precisa definir um tipo de sistema de arquivo válido. Consulte o `man parted` para verificar os tipos de sistemas de arquivo válido." msgid "Error: Listing profiles on URL \"{}\" resulted in:" -msgstr "Erro: Listando os perfis em URL \"{}\" resulta em:" +msgstr "Erro: Listando os perfis em URL \"{}\" resultou em:" msgid "Error: Could not decode \"{}\" result as JSON:" msgstr "Erro: Não foi possível decodificar \"{}\" como JSON:" @@ -309,7 +309,7 @@ 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)" +msgstr "Instalar ({} a(s) configuração(ões) em falta)" msgid "" "You decided to skip harddrive selection\n" @@ -387,7 +387,7 @@ msgid "Enter disk encryption password (leave blank for no encryption): " msgstr "Digite a senha de encriptação do disco (deixe em branco para não encriptar): " msgid "Create a required super-user with sudo privileges: " -msgstr "Criar um superusuário requerido com privilégios de sudo: " +msgstr "Criar um superusuário necessário com privilégios de sudo: " msgid "Enter root password (leave blank to disable root): " msgstr "Digite uma senha de root (deixe em branco para desativar root): " @@ -446,7 +446,7 @@ msgid "Copy to new key:" msgstr "Copiar para nova chave:" msgid "Unknown nic type: {}. Possible values are {}" -msgstr "Tipo de NIC desconhecido: {}. Possíveis valores são {}" +msgstr "Tipo de NIC desconhecido: {}. Valores possíveis são {}" msgid "" "\n" @@ -456,7 +456,7 @@ msgstr "" "Esta é a configuração escolhida escolhida por você:" msgid "Pacman is already running, waiting maximum 10 minutes for it to terminate." -msgstr "O Pacman já está em execução, aguarde no máximo até 10 minutos para terminar." +msgstr "O Pacman já está em execução, esperando até o máximo de 10 minutos para terminar." msgid "Pre-existing pacman lock never exited. Please clean up any existing pacman sessions before using archinstall." msgstr "A trava pré-existente do Pacman não terminou. Por favor, limpe as sessões de pacman existentes antes de usar o archinstall." @@ -550,13 +550,13 @@ msgid "Missing configurations:\n" msgstr "Configurações em falta:\n" msgid "Either root-password or at least 1 superuser must be specified" -msgstr "Deve se especificar uma senha de root ou pelo menos 1 superusuário" +msgstr "Deve-se especificar uma senha de root ou pelo menos 1 superusuário" msgid "Manage superuser accounts: " msgstr "Administrar contas de superusuário: " msgid "Manage ordinary user accounts: " -msgstr "Administrar contas de usuário padrão: " +msgstr "Administrar contas de usuário comuns: " msgid " Subvolume :{:16}" msgstr " Subvolume :{:16}" @@ -743,7 +743,7 @@ msgid "Value: " msgstr "Valor: " msgid "You can skip selecting a drive and partitioning and use whatever drive-setup is mounted at /mnt (experimental)" -msgstr "Você pode ignorar a seleção de unidade e particionar seja lá o que estiver montado em /mnt (experimental)" +msgstr "Você pode ignorar a seleção de unidade e particionar o que já estiver montado em /mnt (experimental)" msgid "Select one of the disks or skip and use /mnt as default" msgstr "Selecione um dos discos ou ignore e use /mnt como padrão" @@ -833,8 +833,21 @@ msgstr "Entrada inválida! Tente novamente com uma entrada válida [1 para {max_ msgid "Parallel Downloads" msgstr "Downloads Paralelos" +msgid "Pacman" +msgstr "Pacman" + +msgid "Color" +msgstr "Cor" + +#, fuzzy, python-brace-format +msgid "Enter the number of parallel downloads (1-{})" +msgstr "Insira o número de downloads paralelos (1-{})" + +msgid "Enable colored output for pacman" +msgstr "Ative a saída colorida para o pacman" + msgid "ESC to skip" -msgstr "ESC para sair" +msgstr "ESC para pular" msgid "CTRL+C to reset" msgstr "CTRL+C para reiniciar" @@ -1674,6 +1687,139 @@ msgstr "Iniciar modo de busca" msgid "Exit search mode" msgstr "Sair do modo de busca" +msgid "General" +msgstr "Geral" + +#, fuzzy +msgid "Navigation" +msgstr "Salvar configuração" + +#, fuzzy +msgid "Selection" +msgstr "Selecionar regiões" + +msgid "Search" +msgstr "Buscar" + +msgid "Down" +msgstr "Abaixo" + +msgid "Up" +msgstr "Acima" + +#, fuzzy +msgid "Confirm" +msgstr "Confirmar" + +#, fuzzy +msgid "Focus right" +msgstr "Focar à direita" + +#, fuzzy +msgid "Focus left" +msgstr "Focar à esquerda" + +msgid "Toggle" +msgstr "Alternar" + +#, fuzzy +msgid "Show/Hide help" +msgstr "Mostrar/Esconder ajuda" + +msgid "Quit" +msgstr "Sair" + +msgid "First" +msgstr "Primeiro" + +msgid "Last" +msgstr "Último" + +#, fuzzy +msgid "Select" +msgstr "Selecionar" + +msgid "Page Up" +msgstr "Página acima" + +msgid "Page Down" +msgstr "Página abaixo" + +#, fuzzy +msgid "Page up" +msgstr "Página acima" + +#, fuzzy +msgid "Page down" +msgstr "Página abaixo" + +msgid "Page Left" +msgstr "Página à esquerda" + +#, fuzzy +msgid "Page Right" +msgstr "Página à direita" + +msgid "Cursor up" +msgstr "Cursor acima" + +#, fuzzy +msgid "Cursor down" +msgstr "Cursor abaixo" + +#, fuzzy +msgid "Cursor right" +msgstr "Cursor à direita" + +#, fuzzy +msgid "Cursor left" +msgstr "Cursor à esquerda" + +msgid "Top" +msgstr "Topo" + +msgid "Bottom" +msgstr "Rodapé" + +msgid "Home" +msgstr "Início" + +#, fuzzy +msgid "End" +msgstr "Final" + +#, fuzzy +msgid "Toggle option" +msgstr "Alternar opção" + +msgid "Scroll Up" +msgstr "Rolar visualização para cima" + +#, fuzzy +msgid "Scroll Down" +msgstr "Rolar visualização para baixo" + +msgid "Scroll Left" +msgstr "Rolar visualização para a esquerda" + +msgid "Scroll Right" +msgstr "Rolar visualização para a direita" + +msgid "Scroll Home" +msgstr "Rolar visualização até o começo" + +msgid "Scroll End" +msgstr "Rolar visualização até o final" + +msgid "Focus Next" +msgstr "Focar no próximo" + +msgid "Focus Previous" +msgstr "Focar no anterior" + +msgid "Copy selected text" +msgstr "Copiar o texto selecionado" + msgid "labwc needs access to your seat (collection of hardware devices i.e. keyboard, mouse, etc)" msgstr "labwc precisa de acesso ao seu seat (conjunto de dispositivos de hardware, como teclado, mouse etc.)" @@ -1866,7 +2012,7 @@ msgid "Will install to custom location with NVRAM entry" msgstr "Será instalado em um local personalizado com entrada NVRAM" msgid "Firmware that does not properly support NVRAM boot entries like most MSI motherboards," -msgstr "Firmware que não oferece suporte adequado a entradas de boot na NVRAM," +msgstr "Firmware que não oferece suporte adequado a entradas de boot na NVRAM, como a maioria das placas-mãe MSI," msgid "most Apple Macs, many laptops..." msgstr "a maioria dos Macs da Apple, muitos laptops..." @@ -1875,7 +2021,7 @@ msgid "Language" msgstr "Idioma" msgid "Compression algorithm" -msgstr "Algorítimo de compressão" +msgstr "Algoritmo de compressão" msgid "Only packages such as base, sudo, linux, linux-firmware, efibootmgr and optional profile packages are installed." msgstr "Apenas pacotes como base, base-devel, linux, linux-firmware, efibootmgr e pacotes opcionais de perfil são instalados." @@ -1884,10 +2030,10 @@ msgid "Select zram compression algorithm:" msgstr "Selecione o algoritmo de compressão zram:" msgid "Use Network Manager (default backend)" -msgstr "Use o Network Manager (default backend)" +msgstr "Use o Network Manager (backend padrão)" msgid "Use Network Manager (iwd backend)" -msgstr "Use o Network Manager (iwd backend)" +msgstr "Use o Network Manager (backend com iwd)" msgid "Firewall" msgstr "Firewall" @@ -2002,5 +2148,60 @@ msgstr "Digite uma senha" msgid "The password did not match, please try again" msgstr "A senha não corresponde. Tente novamente" +msgid "Password strength: Weak" +msgstr "Nível de segurança da senha: Fraca" + +msgid "Password strength: Moderate" +msgstr "Nível de segurança da senha: Moderada" + +msgid "Password strength: Strong" +msgstr "Nível de segurança da senha: Forte" + +msgid "The selected desktop profile requires a regular user to log in via the greeter" +msgstr "O perfil de desktop selecionado requer um usuário regular para fazer o login pelo greeter" + +#, fuzzy, python-brace-format +msgid "Environment type: {} {}" +msgstr "Tipo de ambiente: {}" + +#, fuzzy +msgid "Input cannot be empty" +msgstr "Valor não pode estar vazio" + +msgid "Recommended" +msgstr "Recomendado" + +#, fuzzy +msgid "Package" +msgstr "Pacote" + +msgid "Curated selection of KDE Plasma packages" +msgstr "Coleção selecionada de pacotes do KDE Plasma" + +msgid "Dependencies" +msgstr "Dependências" + +#, fuzzy +msgid "Package group" +msgstr "Grupo de pacotes:" + +msgid "Extensive KDE Plasma installation" +msgstr "Instalação extensiva do KDE Plasma" + +#, fuzzy +msgid "Packages in group" +msgstr "Pacotes no grupo" + +msgid "Minimal KDE Plasma installation" +msgstr "Instalação mínima do KDE Plasma" + +#, fuzzy +msgid "Description" +msgstr "Descrição" + +#, fuzzy +msgid "Select a flavor of KDE Plasma to install" +msgstr "Selecione uma versão do KDE Plasma para instalar" + #~ msgid "When picking a directory to save configuration files to, by default we will ignore the following folders: " #~ msgstr "Ao selecionar um diretório para salvar arquivos de configuração, por padrão nós ignoramos as seguintes pastas: " diff --git a/archinstall/locales/uk/LC_MESSAGES/base.mo b/archinstall/locales/uk/LC_MESSAGES/base.mo index 6d6f7558..1cb241b9 100644 Binary files a/archinstall/locales/uk/LC_MESSAGES/base.mo and b/archinstall/locales/uk/LC_MESSAGES/base.mo differ diff --git a/archinstall/locales/uk/LC_MESSAGES/base.po b/archinstall/locales/uk/LC_MESSAGES/base.po index 8181ac09..386a41f4 100644 --- a/archinstall/locales/uk/LC_MESSAGES/base.po +++ b/archinstall/locales/uk/LC_MESSAGES/base.po @@ -826,6 +826,19 @@ msgstr "Некоректне введення! Повторіть спробу msgid "Parallel Downloads" msgstr "Паралельні Завантаження" +msgid "Pacman" +msgstr "Pacman" + +msgid "Color" +msgstr "Колір" + +#, python-brace-format +msgid "Enter the number of parallel downloads (1-{})" +msgstr "Введіть кількість паралельних завантажень (1-{})" + +msgid "Enable colored output for pacman" +msgstr "Увімкнути кольоровий вивід для pacman" + msgid "ESC to skip" msgstr "ESC, щоб пропустити" @@ -1666,6 +1679,123 @@ msgstr "Запустити режим пошуку" msgid "Exit search mode" msgstr "Вийти з режиму пошуку" +msgid "General" +msgstr "Загальне" + +msgid "Navigation" +msgstr "Навігація" + +msgid "Selection" +msgstr "Вибір" + +msgid "Search" +msgstr "Пошук" + +msgid "Down" +msgstr "Вниз" + +msgid "Up" +msgstr "Вгору" + +msgid "Confirm" +msgstr "Підтвердити" + +msgid "Focus right" +msgstr "Фокус вправо" + +msgid "Focus left" +msgstr "Фокус вліво" + +msgid "Toggle" +msgstr "Перемкнути" + +msgid "Show/Hide help" +msgstr "Показати/Сховати довідку" + +msgid "Quit" +msgstr "Вийти" + +msgid "First" +msgstr "На початок" + +msgid "Last" +msgstr "В кінець" + +msgid "Select" +msgstr "Обрати" + +msgid "Page Up" +msgstr "Сторінка вгору" + +msgid "Page Down" +msgstr "Сторінка вниз" + +msgid "Page up" +msgstr "Сторінка вгору" + +msgid "Page down" +msgstr "Сторінка вниз" + +msgid "Page Left" +msgstr "Сторінка вліво" + +msgid "Page Right" +msgstr "Сторінка вправо" + +msgid "Cursor up" +msgstr "Курсор вгору" + +msgid "Cursor down" +msgstr "Курсор вниз" + +msgid "Cursor right" +msgstr "Курсор вправо" + +msgid "Cursor left" +msgstr "Курсор вліво" + +msgid "Top" +msgstr "На початок" + +msgid "Bottom" +msgstr "В кінець" + +msgid "Home" +msgstr "Початок" + +msgid "End" +msgstr "Кінець" + +msgid "Toggle option" +msgstr "Перемкнути опцію" + +msgid "Scroll Up" +msgstr "Прокрутка вгору" + +msgid "Scroll Down" +msgstr "Прокрутка вниз" + +msgid "Scroll Left" +msgstr "Прокрутка вліво" + +msgid "Scroll Right" +msgstr "Прокрутка вправо" + +msgid "Scroll Home" +msgstr "Прокрутка на початок" + +msgid "Scroll End" +msgstr "Прокрутка в кінець" + +msgid "Focus Next" +msgstr "Фокус на наступний" + +msgid "Focus Previous" +msgstr "Фокус на попередній" + +msgid "Copy selected text" +msgstr "Копіювати виділений текст" + msgid "labwc needs access to your seat (collection of hardware devices i.e. keyboard, mouse, etc)" msgstr "labwc потребує доступ до вашого місця (набору апаратних пристроїв, таких як клавіатура, миша тощо)" @@ -1884,6 +2014,21 @@ msgstr "Використовувати NetworkManager (з iwd)" msgid "Firewall" msgstr "Брандмауер" +msgid "Additional fonts" +msgstr "Додаткові шрифти" + +msgid "Select font packages to install" +msgstr "Оберіть пакети шрифтів для встановлення" + +msgid "Unicode font coverage for most languages" +msgstr "покриття шрифтами Unicode для більшості мов" + +msgid "color emoji for browsers and apps" +msgstr "кольорові емодзі для браузерів та програм" + +msgid "Chinese, Japanese, Korean characters" +msgstr "китайські, японські, корейські символи" + msgid "Select audio configuration" msgstr "Оберіть конфігурацію аудіо" @@ -2008,3 +2153,46 @@ msgstr "Надійність пароля: Сильна" msgid "The selected desktop profile requires a regular user to log in via the greeter" msgstr "Обраний профіль робочого столу вимагає входу звичайного користувача через менеджер входу" + +#, fuzzy, python-brace-format +msgid "Environment type: {} {}" +msgstr "Тип середовища: {}" + +#, fuzzy +msgid "Input cannot be empty" +msgstr "Значення не може бути пустим" + +msgid "Recommended" +msgstr "" + +#, fuzzy +msgid "Package" +msgstr "Група пакетів:" + +msgid "Curated selection of KDE Plasma packages" +msgstr "" + +msgid "Dependencies" +msgstr "" + +#, fuzzy +msgid "Package group" +msgstr "Група пакетів:" + +msgid "Extensive KDE Plasma installation" +msgstr "" + +#, fuzzy +msgid "Packages in group" +msgstr "Група пакетів:" + +msgid "Minimal KDE Plasma installation" +msgstr "" + +#, fuzzy +msgid "Description" +msgstr "Шифрування диска" + +#, fuzzy +msgid "Select a flavor of KDE Plasma to install" +msgstr "Оберіть завантажувач для встановлення" diff --git a/archinstall/main.py b/archinstall/main.py index ac072b0e..cf0e42f6 100644 --- a/archinstall/main.py +++ b/archinstall/main.py @@ -16,7 +16,7 @@ from archinstall.lib.networking import ping from archinstall.lib.output import debug, error, info, warn from archinstall.lib.packages.util import check_version_upgrade from archinstall.lib.pacman.pacman import Pacman -from archinstall.lib.translationhandler import tr +from archinstall.lib.translationhandler import tr, translation_handler from archinstall.lib.utils.util import running_from_iso from archinstall.tui.ui.components import tui @@ -95,6 +95,8 @@ def run() -> int: print(tr('Archinstall requires root privileges to run. See --help for more.')) return 1 + translation_handler.save_console_font() + _log_sys_info() if not arch_config_handler.args.offline: @@ -159,6 +161,8 @@ def main() -> int: _error_message(exc) rc = 1 + translation_handler.restore_console_font() + return rc diff --git a/archinstall/scripts/guided.py b/archinstall/scripts/guided.py index 5683ab9e..34133722 100644 --- a/archinstall/scripts/guided.py +++ b/archinstall/scripts/guided.py @@ -39,12 +39,10 @@ def show_menu( arch_config_handler.config, mirror_list_handler, arch_config_handler.args.skip_boot, + advanced=arch_config_handler.args.advanced, title=title_text, ) - if not arch_config_handler.args.advanced: - global_menu.set_enabled('parallel_downloads', False) - result: ArchConfig | None = tui.run(global_menu) if result is None: sys.exit(0) @@ -94,7 +92,7 @@ def perform_installation( ) if disk_config.config_type != DiskLayoutType.Pre_mount: - if disk_config.disk_encryption and disk_config.disk_encryption.encryption_type != EncryptionType.NoEncryption: + if disk_config.disk_encryption and disk_config.disk_encryption.encryption_type != EncryptionType.NO_ENCRYPTION: # generate encryption key files for the mounted luks devices installation.generate_key_files() @@ -106,6 +104,7 @@ def perform_installation( mkinitcpio=run_mkinitcpio, hostname=arch_config_handler.config.hostname, locale_config=locale_config, + pacman_config=config.pacman_config, ) if mirror_config := config.mirror_config: diff --git a/archinstall/tui/ui/components.py b/archinstall/tui/ui/components.py index 7882b1ef..c51d35f9 100644 --- a/archinstall/tui/ui/components.py +++ b/archinstall/tui/ui/components.py @@ -1,13 +1,13 @@ import sys from abc import ABC, abstractmethod from collections.abc import Awaitable, Callable -from dataclasses import dataclass +from dataclasses import dataclass, replace from enum import Enum, auto from typing import Any, ClassVar, Literal, TypeVar, cast, override from textual import work from textual.app import App, ComposeResult -from textual.binding import Binding +from textual.binding import Binding, BindingsMap from textual.containers import Center, Horizontal, ScrollableContainer, Vertical from textual.events import Key from textual.geometry import Offset @@ -27,6 +27,18 @@ from archinstall.tui.ui.result import Result, ResultType ValueT = TypeVar('ValueT') +def _translate_bindings(source: BindingsMap | None, target: BindingsMap) -> None: + """Translate binding descriptions from source to target. + + Uses source (original, immutable class-level cache) to avoid + double-translation on repeated calls (e.g. language switch). + """ + if source is None: + return + for key, bindings in source.key_to_bindings.items(): + target.key_to_bindings[key] = [replace(b, description=tr(b.description)) if b.description else b for b in bindings] + + class BaseScreen(Screen[Result[ValueT]]): BINDINGS: ClassVar = [ Binding('escape', 'cancel_operation', 'Cancel', show=True), @@ -97,6 +109,7 @@ class LoadingScreen(BaseScreen[ValueT]): yield Footer() def on_mount(self) -> None: + _translate_bindings(self._merged_bindings, self._bindings) if self._data_callback: self._exec_callback() else: @@ -129,6 +142,10 @@ class _OptionList(OptionList): Binding('k', 'cursor_up', 'Up', show=False), ] + @override + def on_mount(self) -> None: + _translate_bindings(self._merged_bindings, self._bindings) + class OptionListScreen(BaseScreen[ValueT]): """ @@ -271,6 +288,7 @@ class OptionListScreen(BaseScreen[ValueT]): yield Footer() def on_mount(self) -> None: + _translate_bindings(self._merged_bindings, self._bindings) self._update_options(self._options) self.query_one(OptionList).focus() @@ -356,6 +374,10 @@ class _SelectionList(SelectionList[ValueT]): Binding('space', 'select', 'Toggle', show=True), ] + @override + def on_mount(self) -> None: + _translate_bindings(self._merged_bindings, self._bindings) + class SelectListScreen(BaseScreen[ValueT]): """ @@ -500,6 +522,7 @@ class SelectListScreen(BaseScreen[ValueT]): self._handle_search_action() def on_mount(self) -> None: + _translate_bindings(self._merged_bindings, self._bindings) self._update_options(self._options) self.query_one(SelectionList).focus() @@ -670,6 +693,7 @@ class ConfirmationScreen(BaseScreen[ValueT]): yield Footer() def on_mount(self) -> None: + _translate_bindings(self._merged_bindings, self._bindings) self._update_selection() def action_focus_right(self) -> None: @@ -825,6 +849,7 @@ class InputScreen(BaseScreen[str]): yield Footer() def on_mount(self) -> None: + _translate_bindings(self._merged_bindings, self._bindings) input_field = self.query_one('#main_input', Input) input_field.focus() @@ -872,6 +897,10 @@ class _DataTable(DataTable[ValueT]): Binding('enter', 'select_cursor', 'Confirm', show=True), ] + @override + def on_mount(self) -> None: + _translate_bindings(self._merged_bindings, self._bindings) + class TableSelectionScreen(BaseScreen[ValueT]): BINDINGS: ClassVar = [ @@ -992,6 +1021,7 @@ class TableSelectionScreen(BaseScreen[ValueT]): yield Footer() def on_mount(self) -> None: + _translate_bindings(self._merged_bindings, self._bindings) self._display_header(True) data_table = self.query_one(DataTable) data_table.cell_padding = 2 @@ -1016,6 +1046,20 @@ class TableSelectionScreen(BaseScreen[ValueT]): header = self.query_one('#header_text', Label) header.display = not is_loading + def _get_column_keys(self, items: list[MenuItem]) -> list[str]: + all_keys: list[str] = [] + for item in items: + if item.value: + all_keys.extend(item.value.table_data().keys()) + + # Create unique list while preserving order + unique_keys: list[str] = list(dict.fromkeys(all_keys)) + + if self._multi: + unique_keys.insert(0, ' ') + + return unique_keys + def _put_data_to_table(self, table: DataTable[ValueT], group: MenuItemGroup) -> None: items = group.items selected = group.selected_items @@ -1024,15 +1068,7 @@ class TableSelectionScreen(BaseScreen[ValueT]): _ = self.dismiss(Result(ResultType.Selection)) return - value = items[0].value - if not value: - _ = self.dismiss(Result(ResultType.Selection)) - return - - cols = list(value.table_data().keys()) - - if self._multi: - cols.insert(0, ' ') + cols = self._get_column_keys(items) table.add_columns(*cols) @@ -1236,6 +1272,13 @@ class _AppInstance(App[ValueT]): super().__init__(ansi_color=True) self._main = main + @override + async def _on_exit_app(self) -> None: + from archinstall.lib.translationhandler import translation_handler + + translation_handler.restore_console_font() + await super()._on_exit_app() + def action_trigger_help(self) -> None: from textual.widgets import HelpPanel @@ -1245,6 +1288,10 @@ class _AppInstance(App[ValueT]): _ = self.screen.mount(HelpPanel()) def on_mount(self) -> None: + from archinstall.lib.translationhandler import translation_handler + + translation_handler.apply_console_font() + _translate_bindings(self._merged_bindings, self._bindings) self._run_worker() @work @@ -1291,5 +1338,10 @@ class TApp: assert TApp.app TApp.app.exit(result) + def translate_bindings(self) -> None: + """Re-translate app-level binding descriptions after language change.""" + if TApp.app is not None: + _translate_bindings(TApp.app._merged_bindings, TApp.app._bindings) + tui = TApp() diff --git a/docs/examples/python.rst b/docs/examples/python.rst index 020ea57a..1243aca5 100644 --- a/docs/examples/python.rst +++ b/docs/examples/python.rst @@ -64,8 +64,8 @@ After running ``python -m archinstall test_installer`` it should print something _PartitionInfo( partition=, name='primary', - type=, - fs_type=, + type=, + fs_type=, path='/dev/nvme0n1p1', start=Size(value=2048, unit=, sector_size=SectorSize(value=512, unit=)), length=Size(value=535822336, unit=, sector_size=SectorSize(value=512, unit=)), diff --git a/examples/full_automated_installation.py b/examples/full_automated_installation.py index 84920605..8193c149 100644 --- a/examples/full_automated_installation.py +++ b/examples/full_automated_installation.py @@ -37,20 +37,20 @@ device_modification = DeviceModification(device, wipe=True) # create a new boot partition boot_partition = PartitionModification( - status=ModificationStatus.Create, - type=PartitionType.Primary, + status=ModificationStatus.CREATE, + type=PartitionType.PRIMARY, start=Size(1, Unit.MiB, device.device_info.sector_size), length=Size(512, Unit.MiB, device.device_info.sector_size), mountpoint=Path('/boot'), - fs_type=FilesystemType.Fat32, + fs_type=FilesystemType.FAT32, flags=[PartitionFlag.BOOT], ) device_modification.add_partition(boot_partition) # create a root partition root_partition = PartitionModification( - status=ModificationStatus.Create, - type=PartitionType.Primary, + status=ModificationStatus.CREATE, + type=PartitionType.PRIMARY, start=Size(513, Unit.MiB, device.device_info.sector_size), length=Size(20, Unit.GiB, device.device_info.sector_size), mountpoint=None, @@ -64,8 +64,8 @@ length_home = device.device_info.total_size - start_home # create a new home partition home_partition = PartitionModification( - status=ModificationStatus.Create, - type=PartitionType.Primary, + status=ModificationStatus.CREATE, + type=PartitionType.PRIMARY, start=start_home, length=length_home, mountpoint=Path('/home'), @@ -82,7 +82,7 @@ disk_config = DiskLayoutConfiguration( # disk encryption configuration (Optional) disk_encryption = DiskEncryption( encryption_password=Password(plaintext='enc_password'), - encryption_type=EncryptionType.Luks, + encryption_type=EncryptionType.LUKS, partitions=[home_partition], hsm_device=None, ) diff --git a/pyproject.toml b/pyproject.toml index 2b5bfaae..cffb51e0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "archinstall" -version = "4.1" +version = "4.3" description = "Arch Linux installer - guided, templates etc." authors = [ {name = "Anton Hvornum", email = "anton@hvornum.se"}, @@ -18,11 +18,12 @@ classifiers = [ "Operating System :: POSIX :: Linux", ] dependencies = [ - "pyparted>=3.13.0", + "pyparted==3.13.0", "pydantic==2.12.5", - "cryptography>=45.0.7", - "textual>=5.3.0", - "markdown-it-py[linkify]>=4.0.0", + "cryptography==46.0.7", + "textual==8.2.3", + "markdown-it-py==4.0.0", + "linkify-it-py==2.1.0", ] [project.urls] @@ -33,10 +34,10 @@ Source = "https://github.com/archlinux/archinstall" [project.optional-dependencies] log = ["systemd_python==235"] dev = [ - "mypy==1.20.0", + "mypy==1.20.1", "flake8==7.3.0", "pre-commit==4.5.1", - "ruff==0.15.10", + "ruff==0.15.11", "pylint==4.0.5", "pytest==9.0.3", ] diff --git a/renovate.json b/renovate.json index 94a2f2cf..6c96b629 100644 --- a/renovate.json +++ b/renovate.json @@ -8,6 +8,32 @@ "pre-commit": { "enabled": true }, + "customManagers": [ + { + "customType": "regex", + "description": "Track runtime Python deps via Arch Linux repos instead of PyPI", + "managerFilePatterns": ["**/pyproject.toml"], + "matchStrings": [ + "\"(?pyparted|pydantic|cryptography|textual|markdown-it-py|linkify-it-py)==(?[^\"]+)\"" + ], + "depNameTemplate": "arch/python-{{{depName}}}", + "datasourceTemplate": "repology", + "versioningTemplate": "loose", + "extractVersionTemplate": "^(?.+)-\\d+$" + }, + { + "customType": "regex", + "description": "Track systemd_python via Arch Linux repos (different package name)", + "managerFilePatterns": ["**/pyproject.toml"], + "matchStrings": [ + "\"systemd_python==(?[^\"]+)\"" + ], + "depNameTemplate": "arch/python-systemd", + "datasourceTemplate": "repology", + "versioningTemplate": "loose", + "extractVersionTemplate": "^(?.+)-\\d+$" + } + ], "packageRules": [ { "matchDepTypes": [ @@ -24,6 +50,20 @@ "astral-sh/ruff-pre-commit" ], "automerge": true + }, + { + "description": "Disable PyPI updates for runtime deps tracked via Arch repos", + "matchDatasources": ["pypi"], + "matchPackageNames": [ + "pyparted", + "pydantic", + "cryptography", + "textual", + "markdown-it-py", + "linkify-it-py", + "systemd_python" + ], + "enabled": false } ] } diff --git a/tests/test_args.py b/tests/test_args.py index 1b052ec0..4cbad41b 100644 --- a/tests/test_args.py +++ b/tests/test_args.py @@ -22,6 +22,7 @@ from archinstall.lib.models.locale import LocaleConfiguration from archinstall.lib.models.mirrors import CustomRepository, CustomServer, MirrorConfiguration, MirrorRegion, SignCheck, SignOption from archinstall.lib.models.network import NetworkConfiguration, Nic, NicType from archinstall.lib.models.packages import Repository +from archinstall.lib.models.pacman import PacmanConfiguration from archinstall.lib.models.profile import ProfileConfiguration from archinstall.lib.models.users import Password, User from archinstall.lib.profile.profiles_handler import profile_handler @@ -234,7 +235,7 @@ def test_config_file_parsing( kernels=['linux-zen'], ntp=True, packages=['firefox'], - parallel_downloads=66, + pacman_config=PacmanConfiguration(parallel_downloads=66), swap=ZramConfiguration(enabled=False), timezone='UTC', services=['service_1', 'service_2'],