From 01c9432afdca59b248d95ffb4e94ecf9d0248108 Mon Sep 17 00:00:00 2001 From: Softer Date: Tue, 14 Jul 2026 14:12:53 +0300 Subject: [PATCH 01/16] Use sentence case for summary labels (#4617) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit str.title() title-cased every label word, which is wrong outside English: it turned the Ukrainian "Ім'я хоста" into "Ім'Я Хоста" and broke acronyms ("NTP" -> "Ntp"). The source strings and their translations are already written with the correct casing. Capitalize only the first letter of each label instead. --- archinstall/lib/utils/format.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/archinstall/lib/utils/format.py b/archinstall/lib/utils/format.py index 2ac8c377..4d74c5c5 100644 --- a/archinstall/lib/utils/format.py +++ b/archinstall/lib/utils/format.py @@ -9,6 +9,14 @@ if TYPE_CHECKING: from _typeshed import DataclassInstance +def _sentence_case(text: str) -> str: + # Only capitalize the first letter of the label. The source strings and + # their translations are already written with the correct casing for each + # language, so title-casing every word is wrong outside English (it turned + # "Ім'я хоста" into "Ім'Я Хоста" and "(NTP)" into "(Ntp)"). + return text[:1].upper() + text[1:] + + def as_key_value_pair( entries: dict[str, str | list[str] | bool], ignore_empty: bool = True, @@ -33,7 +41,7 @@ def as_key_value_pair( if isinstance(value, list): value = '\n '.join(str(val) for val in value) - table.add_row(label.title(), f': {value}') + table.add_row(_sentence_case(label), f': {value}') return table.stringify() From caff461f0ba429c23607f6f6a5aad929e5777c07 Mon Sep 17 00:00:00 2001 From: Jonathan Pichel Date: Tue, 14 Jul 2026 13:13:26 +0200 Subject: [PATCH 02/16] Fix Galician locale (#4630) * Sync Galician translation with template * Delete all outdated Galician translation entries * Improve Galician translation --- archinstall/locales/base.pot | 4 + archinstall/locales/gl/LC_MESSAGES/base.mo | Bin 59176 -> 33425 bytes archinstall/locales/gl/LC_MESSAGES/base.po | 3028 +++++++------------- 3 files changed, 995 insertions(+), 2037 deletions(-) diff --git a/archinstall/locales/base.pot b/archinstall/locales/base.pot index a5ffcc7d..edeeb6d2 100644 --- a/archinstall/locales/base.pot +++ b/archinstall/locales/base.pot @@ -344,6 +344,10 @@ msgstr "" msgid "Iteration time" msgstr "" +msgid "" +"No disks were detected. A disk is required to be able to install Arch Linux" +msgstr "" + msgid "Select disks for the installation" msgstr "" diff --git a/archinstall/locales/gl/LC_MESSAGES/base.mo b/archinstall/locales/gl/LC_MESSAGES/base.mo index c65c900646831097c478c4f0c72ede628d272d39..22504fd56846657ec62883a3a8be64adb160aafa 100644 GIT binary patch literal 33425 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

j~V6@#{Trw}3 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∾Ub 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 diff --git a/archinstall/locales/gl/LC_MESSAGES/base.po b/archinstall/locales/gl/LC_MESSAGES/base.po index 746e3fc6..ab23c2f6 100644 --- a/archinstall/locales/gl/LC_MESSAGES/base.po +++ b/archinstall/locales/gl/LC_MESSAGES/base.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: \n" "POT-Creation-Date: \n" "PO-Revision-Date: \n" -"Last-Translator: gaelgnz \n" +"Last-Translator: cachelous \n" "Language-Team: \n" "Language: gl\n" "MIME-Version: 1.0\n" @@ -11,1539 +11,499 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 3.8\n" -msgid "[!] A log file has been created here: {} {}" -msgstr "[!] Se ha creado un archivo de registro aquí: {} {}" +msgid "Recommended" +msgstr "Recomendado" -msgid " Please submit this issue (and file) to https://github.com/archlinux/archinstall/issues" -msgstr " Por favor envíe este problema (e archivo) a https://github.com/archlinux/archinstall/issues" +msgid "Package" +msgstr "Paquete" -msgid "Do you really want to abort?" -msgstr "¿Realmente desexas abortar?" +msgid "Curated selection of KDE Plasma packages" +msgstr "Selección curada de paquetes de KDE Plasma" -msgid "And one more time for verification: " -msgstr "E unha vez mais para verificar: " +msgid "Dependencies" +msgstr "Dependencias" -msgid "Would you like to use swap on zram?" -msgstr "¿Gustarialle usar swap en zram?" +msgid "Package group" +msgstr "Grupo de paquetes" -msgid "Desired hostname for the installation: " -msgstr "Nome do host desexado para a instalación: " +msgid "Extensive KDE Plasma installation" +msgstr "Instalación extensiva de KDE Plasma" -msgid "Username for required superuser with sudo privileges: " -msgstr "Nome de usuario para o superusuario con privilegios sudo: " +msgid "Packages in group" +msgstr "Paquetes no grupo" -msgid "Any additional users to install (leave blank for no users): " -msgstr "Algún usuario adicional a instalar (dexalo en blanco para non agregar ninguno): " - -msgid "Should this user be a superuser (sudoer)?" -msgstr "Debería este usuario ser un superusuario (sudoer)?" - -msgid "Select a timezone" -msgstr "Seleccione unha zona horaria" - -msgid "Would you like to use GRUB as a bootloader instead of systemd-boot?" -msgstr "Gustarialle usar GRUB como xestor de arranque en lugar de systemd-boot?" - -msgid "Choose a bootloader" -msgstr "Elixa un xestor de arranque" - -msgid "Choose an audio server" -msgstr "Elixa un servidor de audio" - -msgid "Only packages such as base, base-devel, linux, linux-firmware, efibootmgr and optional profile packages are installed." -msgstr "So paquetes como base, base-devel, linux, linux-firmware, efibootmgr e paquetes opcionales de perfil instalaranse." - -msgid "Note: base-devel is no longer installed by default. Add it here if you need build tools." -msgstr "Nota: base-devel xa non veñe instalado por defecto. Agreguelo aquí se necesita herramientas de build." - -msgid "If you desire a web browser, such as firefox or chromium, you may specify it in the following prompt." -msgstr "Si deseaxa un navegador web, como firefox o chromium, pode especificalo non seguiente mensaxe." - -msgid "Write additional packages to install (space separated, leave blank to skip): " -msgstr "Escriba paquetes adicionais para instalar (separados por espazos, dexe en blanco para omitir): " - -msgid "Copy ISO network configuration to installation" -msgstr "Copiar a configuración de red ISO a instalación" - -msgid "Use NetworkManager (necessary for configuring internet graphically in GNOME and KDE)" -msgstr "Usar NetworkManager (necesario para configurar internet gráficamente en GNOME y KDE)" - -msgid "Select one network interface to configure" -msgstr "Seleccione unha interfaz de red para configurar" - -msgid "Select which mode to configure for \"{}\" or skip to use default mode \"{}\"" -msgstr "Seleccione qué modo configurar para \"{}\" ou omita para usar o modo predeterminado \"{}\"" - -#, python-brace-format -msgid "Enter the IP and subnet for {} (example: 192.168.0.5/24): " -msgstr "Escriba a IP e subred para {} (ejemplo: 192.168.0.5/24): " - -msgid "Enter your gateway (router) IP address or leave blank for none: " -msgstr "Escriba a IP de a sua porta de enlace (enrutador) ou dexelo en branco para non usar ningunha: " - -msgid "Enter your DNS servers (space separated, blank for none): " -msgstr "Ingrese os seus servidores DNS (separados por espazos, en branco para ningun): " - -msgid "Select which filesystem your main partition should use" -msgstr "Seleccione qué sistema de archivos debe usar a sua partición principal" - -msgid "Current partition layout" -msgstr "Distribución actual das particions" - -msgid "" -"Select what to do with\n" -"{}" -msgstr "" -"Seleccione qué hacer con\n" -"{}" - -msgid "Enter a desired filesystem type for the partition" -msgstr "Ingrese un tipo de sistema de arquivos desexado para a partición" - -msgid "Enter the start location (in parted units: s, GB, %, etc. ; default: {}): " -msgstr "Ingrese a ubicación de inicio (en unidades divididas: s, GB, %, etc. ; predeterminado: {}): " - -msgid "Enter the end location (in parted units: s, GB, %, etc. ; ex: {}): " -msgstr "Ingrese a ubicación final (en unidades divididas: s, GB, %, etc. ; ej.: {}): " - -msgid "{} contains queued partitions, this will remove those, are you sure?" -msgstr "{} contén particions en cola, esto eliminará esas particións, ¿está seguro?" - -msgid "" -"{}\n" -"\n" -"Select by index which partitions to delete" -msgstr "" -"{}\n" -"\n" -"Seleccione por índice qué particions eliminar" - -msgid "" -"{}\n" -"\n" -"Select by index which partition to mount where" -msgstr "" -"{}\n" -"\n" -"Seleccione por índice qué partición montar en qué ubicación" - -msgid " * Partition mount-points are relative to inside the installation, the boot would be /boot as an example." -msgstr " * Os puntos de montaxe da partición son relativos ao interior da instalación, por exemplo: o arranque sería /boot." - -msgid "Select where to mount partition (leave blank to remove mountpoint): " -msgstr "Seleccione onde montar a partición (dexela en branco para eliminar o punto de montaje): " - -msgid "" -"{}\n" -"\n" -"Select which partition to mask for formatting" -msgstr "" -"{}\n" -"\n" -"Seleccione cal partición enmascarar para formatear" - -msgid "" -"{}\n" -"\n" -"Select which partition to mark as encrypted" -msgstr "" -"{}\n" -"\n" -"Seleccione cal partición marcar como encriptada" - -msgid "" -"{}\n" -"\n" -"Select which partition to mark as bootable" -msgstr "" -"{}\n" -"\n" -"Seleccione cal partición marcar como de arranque" - -msgid "" -"{}\n" -"\n" -"Select which partition to set a filesystem on" -msgstr "" -"{}\n" -"\n" -"Seleccione en cal partición establecer un sistema de arquivos" - -msgid "Enter a desired filesystem type for the partition: " -msgstr "Ingrese un tipo de sistema de arquivos desexado para a partición: " - -msgid "Archinstall language" -msgstr "Idioma de Archinstall" - -msgid "Wipe all selected drives and use a best-effort default partition layout" -msgstr "Borrar todas as unidades seleccionadas e usar un diseño de partición predeterminado de mellor esforzo" - -msgid "Select what to do with each individual drive (followed by partition usage)" -msgstr "Seleccione qué hacer con cada unidad individual (seguido do uso da partición)" - -msgid "Select what you wish to do with the selected block devices" -msgstr "Seleccione o que desexa hacer con os dispositivos de bloque seleccionados" - -msgid "This is a list of pre-programmed profiles, they might make it easier to install things like desktop environments" -msgstr "Esta es unha lista de perfils preprogramados que podrían facilitarche a instalación de cousas como entornos de escritorio" - -msgid "Select keyboard layout" -msgstr "Seleccione a distribución do teclado" - -msgid "Select one of the regions to download packages from" -msgstr "Seleccione qué rexión usar para descargar paquetes" - -msgid "Select one or more hard drives to use and configure" -msgstr "Seleccione uno o mais discos duros 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 obtener a mellor compatibilidade con o seu hardware AMD, e posible que desexe utilizar as opcions de código aberto ou 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 obtener a mellor compatibilidade con o seu hardware Intel, e posible que desexe utilizar as opciones de código abierto ou de Intel.\n" - -msgid "For the best compatibility with your Nvidia hardware, you may want to use the Nvidia proprietary driver.\n" -msgstr "Para obtener a mellor compatibilidade con o seu hardware de Nvidia, e posible que desexe utilizar o controlador patentado de Nvidia.\n" - -msgid "" -"\n" -"\n" -"Select a graphics driver or leave blank to install all open-source drivers" -msgstr "" -"\n" -"\n" -"Seleccione un controlador de gráficos ou dexelo en branco para instalar todos os controladores de código abierto" - -msgid "All open-source (default)" -msgstr "Todos de código aberto (predeterminado)" - -msgid "Choose which kernels to use or leave blank for default \"{}\"" -msgstr "Escoxa qué kernel usar o déjelo en branco para usar o kernel \"{}\" predeterminado" - -msgid "Choose which locale language to use" -msgstr "Escoxa qué idioma local usar" - -msgid "Choose which locale encoding to use" -msgstr "Escoxa qué codificación local usar" - -msgid "Select one of the values shown below: " -msgstr "Seleccione uno de os valores que se muestran a continuación: " - -msgid "Select one or more of the options below: " -msgstr "Seleccione unha o más das siguientes opciones: " - -msgid "Adding partition...." -msgstr "Añadiendo partición..." - -msgid "You need to enter a valid fs-type in order to continue. See `man parted` for valid fs-type's." -msgstr "Debe ingresar un tipo de sistema de archivos (fs-type) válido para continuar. Consulte `man parted` para conocer os tipos válidos." - -msgid "Error: Listing profiles on URL \"{}\" resulted in:" -msgstr "Error: Listar perfiles na URL \"{}\" resultó en:" - -msgid "Error: Could not decode \"{}\" result as JSON:" -msgstr "Error: No se pudo decodificar el resultado \"{}\" como JSON:" - -msgid "Keyboard layout" -msgstr "Distribución do teclado" - -msgid "Mirror region" -msgstr "Región do servidor" - -msgid "Locale language" -msgstr "Idioma local" - -msgid "Locale encoding" -msgstr "Codificación local" - -msgid "Drive(s)" -msgstr "Disco(s)" - -# not sure about this one... we've been saying distribución instead of diseño up to now... -msgid "Disk layout" -msgstr "Diseño do disco" - -msgid "Encryption password" -msgstr "Contraseña de cifrado" - -msgid "Swap" -msgstr "Swap" - -msgid "Bootloader" -msgstr "xestor de arranque" - -msgid "Root password" -msgstr "Contraseña de root" - -msgid "Superuser account" -msgstr "Conta de superusuario" - -msgid "User account" -msgstr "Conta de usuario" - -msgid "Profile" -msgstr "Perfil" - -msgid "Audio" -msgstr "Audio" - -msgid "Kernels" -msgstr "Núcleos" - -msgid "Additional packages" -msgstr "Paquetes adicionais" - -msgid "Network configuration" -msgstr "Configuración da red" - -msgid "Automatic time sync (NTP)" -msgstr "Sincronización automática de hora (NTP)" - -# are you installing missing configs or are there missing configs -msgid "Install ({} config(s) missing)" -msgstr "Instalar ({} ajuste(s) faltante(s))" - -msgid "" -"You decided to skip harddrive selection\n" -"and will use whatever drive-setup is mounted at {} (experimental)\n" -"WARNING: Archinstall won't check the suitability of this setup\n" -"Do you wish to continue?" -msgstr "" -"Ha decidido saltar a selección de discos duros\n" -"y usar a configuración montada en {} (experimental)\n" -"ADVERTENCIA: Archinstall no verificará a idoneidad de esta configuración\n" -"¿Desexa continuar?" - -msgid "Re-using partition instance: {}" -msgstr "Reutilizando instancia de partición: {}" - -msgid "Create a new partition" -msgstr "Crear unha nueva partición" - -msgid "Delete a partition" -msgstr "Eliminar unha partición" - -msgid "Clear/Delete all partitions" -msgstr "Limpiar/Eliminar todas as particións" - -msgid "Assign mount-point for a partition" -msgstr "Asignar punto de montaje para unha partición" - -msgid "Mark/Unmark a partition to be formatted (wipes data)" -msgstr "Marcar/Desmarcar unha partición para ser formateada (borra os datos)" - -msgid "Mark/Unmark a partition as encrypted" -msgstr "Marcar/Desmarcar unha partición como encriptada" - -msgid "Mark/Unmark a partition as bootable (automatic for /boot)" -msgstr "Marcar/Desmarcar unha partición como arrancable (automática para /boot)" - -msgid "Set desired filesystem for a partition" -msgstr "Establecer el sistema de archivos deseado para unha partición" - -msgid "Abort" -msgstr "Abortar" - -msgid "Hostname" -msgstr "Nome de host" - -msgid "Not configured, unavailable unless setup manually" -msgstr "No configurado, no disponible a menos que se configure manualmente" - -msgid "Timezone" -msgstr "Zona horaria" - -msgid "Set/Modify the below options" -msgstr "Establecer/Modificar as opciones siguientes" - -msgid "Install" -msgstr "Instalar" - -msgid "" -"Use ESC to skip\n" -"\n" -msgstr "" -"Usar ESC para saltar\n" -"\n" - -msgid "Suggest partition layout" -msgstr "Sugerir el diseño de partición" - -msgid "Enter a password: " -msgstr "Ingrese unha contraseña: " - -msgid "Enter a encryption password for {}" -msgstr "Ingrese unha contraseña de cifrado para {}" - -msgid "Enter disk encryption password (leave blank for no encryption): " -msgstr "Ingrese a contraseña de cifrado de disco (deje en blanco para no cifrar): " - -msgid "Create a required super-user with sudo privileges: " -msgstr "Crear un super-usuario requerido con privilexios sudo: " - -msgid "Enter root password (leave blank to disable root): " -msgstr "Ingrese a contraseña de root (deje en blanco para deshabilitar root): " - -msgid "Password for user \"{}\": " -msgstr "Contraseña para o usuario “{}”: " - -msgid "Verifying that additional packages exist (this might take a few seconds)" -msgstr "Verificando que os paquetes adicionais existen (esto pode tardar unos segundos)" - -msgid "Would you like to use automatic time synchronization (NTP) with the default time servers?\n" -msgstr "¿Gustarialle utilizar a sincronización automática de hora (NTP) con os servidores de hora predeterminados?\n" - -msgid "" -"Hardware time and other post-configuration steps might be required in order for NTP to work.\n" -"For more information, please check the Arch wiki" -msgstr "" -"A hora do hardware y otros pasos post-configuración poden ser necesarios para que NTP funcione. \n" -"Para más información, por favor, consulte a wiki de Arch" - -msgid "Enter a username to create an additional user (leave blank to skip): " -msgstr "Introduzca un nome de usuario para crear un usuario adicional (deje en blanco para saltar): " - -msgid "Use ESC to skip\n" -msgstr "Use ESC para omitir\n" - -msgid "" -"\n" -" Choose an object from the list, and select one of the available actions for it to execute" -msgstr "" -"\n" -"Escoxa un objeto da lista y seleccione unha das acciones disponibles para ejecutar" - -msgid "Cancel" -msgstr "Cancelar" - -msgid "Confirm and exit" -msgstr "Confirmar e salir" - -msgid "Add" -msgstr "Añadir" - -msgid "Copy" -msgstr "Copiar" - -msgid "Edit" -msgstr "Editar" - -msgid "Delete" -msgstr "Eliminar" - -msgid "Select an action for '{}'" -msgstr "Seleccione unha acción para '{}'" - -msgid "Copy to new key:" -msgstr "Copiar a nueva clave:" - -msgid "Unknown nic type: {}. Possible values are {}" -msgstr "Tipo de nic desconocido: {}. os valores posibles son {}" - -msgid "" -"\n" -"This is your chosen configuration:" -msgstr "" -"\n" -"Esta es su configuración elegida:" - -msgid "Pacman is already running, waiting maximum 10 minutes for it to terminate." -msgstr "Pacman ya se está ejecutando, esperando un máximo de 10 minutos para que finalice." - -msgid "Pre-existing pacman lock never exited. Please clean up any existing pacman sessions before using archinstall." -msgstr "o bloqueo de pacman preexistente nunca se cerró. Limpie cualquier sesión de pacman existente antes de usar archinstall." - -msgid "Choose which optional additional repositories to enable" -msgstr "Escoxa qué repositorios adicionais opcionales habilitar" - -msgid "Add a user" -msgstr "Añadir un usuario" - -msgid "Change password" -msgstr "Cambiar contraseña" - -# maybe ascender/descender here? -msgid "Promote/Demote user" -msgstr "Promocionar/Degradar usuario" - -msgid "Delete User" -msgstr "Eliminar usuario" - -msgid "" -"\n" -"Define a new user\n" -msgstr "" -"\n" -"Definir un nuevo usuario\n" - -msgid "User Name : " -msgstr "Nome de usuario : " - -msgid "Should {} be a superuser (sudoer)?" -msgstr "¿Debe {} ser un superusuario (sudoer)?" - -msgid "Define users with sudo privilege: " -msgstr "Defina usuarios con privilegio sudo: " - -msgid "No network configuration" -msgstr "Sin configuración de red" - -msgid "Set desired subvolumes on a btrfs partition" -msgstr "Establecer os subvolúmenes deseados en unha partición btrfs" - -msgid "" -"{}\n" -"\n" -"Select which partition to set subvolumes on" -msgstr "" -"{}\n" -"\n" -"Seleccione en qué partición configurar os subvolúmenes" - -msgid "Manage btrfs subvolumes for current partition" -msgstr "Administrar subvolúmenes btrfs para la partición actual" - -msgid "No configuration" -msgstr "Sin configuración" - -msgid "Save user configuration" -msgstr "Guardar configuración de usuario" - -msgid "Save user credentials" -msgstr "Guardar credenciales de usuario" - -msgid "Save disk layout" -msgstr "Guardar diseño de disco" - -msgid "Save all" -msgstr "Guardar todo" - -msgid "Choose which configuration to save" -msgstr "Escoxa qué configuración guardar" - -msgid "Enter a directory for the configuration(s) to be saved: " -msgstr "Ingrese un directorio para guardar a(s) configuración(es): " - -msgid "Not a valid directory: {}" -msgstr "No es un directorio válido: {}" - -msgid "The password you are using seems to be weak," -msgstr "A contraseña que está utilizando parece ser débil," - -msgid "are you sure you want to use it?" -msgstr "¿Está seguro de querer usarlo?" - -msgid "Optional repositories" -msgstr "Repositorios opcionales" - -msgid "Save configuration" -msgstr "Guardar configuración" - -msgid "Missing configurations:\n" -msgstr "Configuraciones que faltan:\n" - -msgid "Either root-password or at least 1 superuser must be specified" -msgstr "Debe especificar unha contraseña de root o al menos 1 superusuario" - -msgid "Manage superuser accounts: " -msgstr "Administrar cuentas de superusuario: " - -msgid "Manage ordinary user accounts: " -msgstr "Administrar cuentas de usuario ordinarias: " - -msgid " Subvolume :{:16}" -msgstr " Subvolumen :{:16}" - -msgid " mounted at {:16}" -msgstr " montado en {:16}" - -msgid " with option {}" -msgstr " con opción {}" - -msgid "" -"\n" -" Fill the desired values for a new subvolume \n" -msgstr "" -"\n" -"Complete os valores deseados para un nuevo subvolumen\n" - -msgid "Subvolume name " -msgstr "Nome do subvolumen " - -msgid "Subvolume mountpoint" -msgstr "Punto de montaje do subvolumen" - -msgid "Subvolume options" -msgstr "Opciones do subvolumen" - -msgid "Save" -msgstr "Guardar" - -msgid "Subvolume name :" -msgstr "Nome do subvolumen :" - -msgid "Select a mount point :" -msgstr "Seleccione un punto de montaje :" - -msgid "Select the desired subvolume options " -msgstr "Seleccione as opciones de subvolumen deseadas " - -msgid "Define users with sudo privilege, by username: " -msgstr "Defina usuarios con privilexio sudo, por nome de usuario: " - -#, python-brace-format -msgid "[!] A log file has been created here: {}" -msgstr "[!] Se ha creado un archivo de registro aquí: {}" - -msgid "Would you like to use BTRFS subvolumes with a default structure?" -msgstr "¿Le gustaría utilizar subvolúmenes BTRFS con unha estructura predeterminada?" - -msgid "Would you like to use BTRFS compression?" -msgstr "¿Le gustaría usar a compresión BTRFS?" - -msgid "Would you like to create a separate partition for /home?" -msgstr "¿Le gustaría crear unha partición separada para /home?" - -msgid "The selected drives do not have the minimum capacity required for an automatic suggestion\n" -msgstr "As unidades seleccionadas no tienna capacidad mínima requerida para unha sugerencia automática\n" - -msgid "Minimum capacity for /home partition: {}GB\n" -msgstr "Capacidad mínima para a partición /home: {}GB\n" - -msgid "Minimum capacity for Arch Linux partition: {}GB" -msgstr "Capacidad mínima para a partición Arch Linux: {}GB" - -msgid "Continue" -msgstr "Continuar" - -msgid "yes" -msgstr "sí" - -msgid "no" -msgstr "no" - -msgid "set: {}" -msgstr "establecer: {}" - -msgid "Manual configuration setting must be a list" -msgstr "A configuración manual debe ser unha lista." - -msgid "No iface specified for manual configuration" -msgstr "No se especificó iface para a configuración manual" - -msgid "Manual nic configuration with no auto DHCP requires an IP address" -msgstr "A configuración manual da NIC sin DHCP automático requiere unha dirección IP" - -msgid "Add interface" -msgstr "Añadir interfaz" - -msgid "Edit interface" -msgstr "Editar interfaz" - -msgid "Delete interface" -msgstr "Eliminar intefaz" - -msgid "Select interface to add" -msgstr "Seleccione a interfaz para agregar" - -msgid "Manual configuration" -msgstr "Configuración manual" - -msgid "Mark/Unmark a partition as compressed (btrfs only)" -msgstr "Marcar/Desmarcar unha partición como comprimida (solo btrfs)" - -msgid "The password you are using seems to be weak, are you sure you want to use it?" -msgstr "A contraseña que está utilizando parece ser débil, ¿está seguro de que desea usarla?" - -msgid "Provides a selection of desktop environments and tiling window managers, e.g. gnome, kde, sway" -msgstr "Proporciona unha selección de entornos de escritorio y administradores de ventanas en mosaico, p.e. gnome, kde, sway" - -msgid "Select your desired desktop environment" -msgstr "Seleccione su entorno de escritorio deseado" - -msgid "A very basic installation that allows you to customize Arch Linux as you see fit." -msgstr "unha instalación muy básica que te permite personalizar Arch Linux como mejor te parezca." - -msgid "Provides a selection of various server packages to install and enable, e.g. httpd, nginx, mariadb" -msgstr "Proporciona unha selección de varios paquetes de servidor para instalar y habilitar, p.e. httpd, nginx, mariadb" - -msgid "Choose which servers to install, if none then a minimal installation will be done" -msgstr "Escoxa qué servidores instalar, si no hay ninguno, se realizará unha instalación mínima" - -msgid "Installs a minimal system as well as xorg and graphics drivers." -msgstr "Instala un sistema mínimo, así como controladores xorg y gráficos." - -msgid "Press Enter to continue." -msgstr "Presione Entrar para continuar." - -msgid "Would you like to chroot into the newly created installation and perform post-installation configuration?" -msgstr "¿Gustarialle acceder a la instalación recién creada e realizar a configuración posterior á instalación?" - -msgid "Are you sure you want to reset this setting?" -msgstr "¿Está seguro de que desea restablecer esta configuración?" - -msgid "Select one or more hard drives to use and configure\n" -msgstr "Seleccione uno ou miss discos duros para usar e configurar\n" - -msgid "Any modifications to the existing setting will reset the disk layout!" -msgstr "¡Cualquier modificación a a configuración existente restablecerá el diseño do disco!" - -msgid "If you reset the harddrive selection this will also reset the current disk layout. Are you sure?" -msgstr "Se restablece a selección do disco duro, esto tamén restablecerá o diseño actual do disco. ¿Está seguro?" - -msgid "Save and exit" -msgstr "Guardar y salir" - -msgid "" -"{}\n" -"contains queued partitions, this will remove those, are you sure?" -msgstr "" -"{}\n" -"contiene particións en cola, esto as eliminará, ¿está seguro?" - -msgid "No audio server" -msgstr "Sin servidor de audio" - -msgid "(default)" -msgstr "(predeterminado)" - -msgid "Use ESC to skip" -msgstr "Use ESC para omitir" - -msgid "" -"Use CTRL+C to reset current selection\n" -"\n" -msgstr "" -"Use CTRL+C para restablecer a selección actual\n" -"\n" - -msgid "Copy to: " -msgstr "Copiar a: " - -msgid "Edit: " -msgstr "Editar: " - -msgid "Key: " -msgstr "Clave: " - -msgid "Edit {}: " -msgstr "Editar {}: " - -msgid "Add: " -msgstr "Añadir: " - -msgid "Value: " -msgstr "Valor: " - -msgid "You can skip selecting a drive and partitioning and use whatever drive-setup is mounted at /mnt (experimental)" -msgstr "pode omitir a selección de unha unidad y a partición y usar cualquier configuración de unidad que esté montada en /mnt (experimental)" - -msgid "Select one of the disks or skip and use /mnt as default" -msgstr "Seleccione uno de os discos u omita y use /mnt como predeterminado" - -msgid "Select which partitions to mark for formatting:" -msgstr "Seleccione qué particións marcar para formatear:" - -msgid "Use HSM to unlock encrypted drive" -msgstr "Usar HSM para desbloquear a unidad cifrada" - -msgid "Device" -msgstr "Dispositivo" - -msgid "Size" -msgstr "Tamaño" - -msgid "Free space" -msgstr "Espacio libre" - -msgid "Bus-type" -msgstr "Tipo de bus" - -msgid "Either root-password or at least 1 user with sudo privileges must be specified" -msgstr "Debe especificar unha contraseña de root o al menos 1 usuario con privilegios sudo" - -msgid "Enter username (leave blank to skip): " -msgstr "Ingrese el nombre de usuario (déjelo en blanco para omitir): " - -msgid "The username you entered is invalid. Try again" -msgstr "o nombre de usuario que ingresó no es válido. Intente nuevamente" - -msgid "Should \"{}\" be a superuser (sudo)?" -msgstr "¿Debe \"{}\" ser un superusuario (sudo)?" - -msgid "Select which partitions to encrypt" -msgstr "Seleccione qué particións cifrar" - -msgid "very weak" -msgstr "muy débil" - -msgid "weak" -msgstr "débil" - -msgid "moderate" -msgstr "moderado" - -msgid "strong" -msgstr "fuerte" - -msgid "Add subvolume" -msgstr "Agregar subvolumen" - -msgid "Edit subvolume" -msgstr "Editar subvolumen" - -msgid "Delete subvolume" -msgstr "Eliminar subvolumen" - -msgid "Configured {} interfaces" -msgstr "Interfaces {} configuradas" - -msgid "This option enables the number of parallel downloads that can occur during installation" -msgstr "Esta opción habilita a cantidad de descargas paralelas que poden ocurrir durante a instalación" - -msgid "" -"Enter the number of parallel downloads to be enabled.\n" -" (Enter a value between 1 to {})\n" -"Note:" -msgstr "" -"Ingrese el número de descargas paralelas que se habilitarán.\n" -" (Ingrese un valor entre 1 y {})\n" -"Nota:" - -msgid " - Maximum value : {} ( Allows {} parallel downloads, allows {} downloads at a time )" -msgstr " - Valor máximo : {} ( Habilita {} descargas paralelas, permite {} descargas simultáneas )" - -msgid " - Minimum value : 1 ( Allows 1 parallel download, allows 2 downloads at a time )" -msgstr " - Valor mínimo : 1 ( Habilita 1 descarga paralela, permite 2 descargas simultáneas )" - -msgid " - Disable/Default : 0 ( Disables parallel downloading, allows only 1 download at a time )" -msgstr " - Deshabilitar/Predeterminado : 0 ( Deshabilita a descarga paralea, permite solo 1 descarga simultánea )" - -#, python-brace-format -msgid "Invalid input! Try again with a valid input [1 to {max_downloads}, or 0 to disable]" -msgstr "¡Entrada no válida! Intente nuevamente con unha entrada válida [1 a {max_downloads}, o 0 para deshabilitar]" - -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" - -msgid "CTRL+C to reset" -msgstr "CTRL+C para restablecer" - -msgid "TAB to select" -msgstr "TAB para seleccionar" - -msgid "[Default value: 0] > " -msgstr "[Valor predeterminado: 0] > " - -msgid "To be able to use this translation, please install a font manually that supports the language." -msgstr "Para poder usar esta traducción, instale manualmente unha fonte que admita el idioma." - -msgid "The font should be stored as {}" -msgstr "A fonte debe almacenarse como {}" - -msgid "Archinstall requires root privileges to run. See --help for more." -msgstr "Archinstall require privilegios de root para ejecutarse. Consulte --help para más información." - -msgid "Select an execution mode" -msgstr "Seleccione un modo de execución" - -#, python-brace-format -msgid "Unable to fetch profile from specified url: {}" -msgstr "No se pode recuperar el perfil da URL especificada: {}" - -#, python-brace-format -msgid "Profiles must have unique name, but profile definitions with duplicate name found: {}" -msgstr "os perfiles deben tener un nombre único, pero se encontraron definiciones de perfil con nombre duplicado: {}" - -msgid "Select one or more devices to use and configure" -msgstr "Seleccione uno o más dispositivos para usar y configurar" - -msgid "If you reset the device selection this will also reset the current disk layout. Are you sure?" -msgstr "Si restablece la selección do dispositivo, esto también restablecerá el diseño actual do disco. ¿Está seguro?" - -msgid "Existing Partitions" -msgstr "particións existentes" - -msgid "Select a partitioning option" -msgstr "Seleccione unha opción de partición" - -msgid "Enter the root directory of the mounted devices: " -msgstr "Ingrese el directorio raíz de os dispositivos montados: " - -#, python-brace-format -msgid "Minimum capacity for /home partition: {}GiB\n" -msgstr "Capacidad mínima para la partición /home: {}GiB\n" - -#, python-brace-format -msgid "Minimum capacity for Arch Linux partition: {}GiB" -msgstr "Capacidad mínima para la partición 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 "Esta es unha lista de profiles_bck preprogramados que podrían facilitar la instalación de cosas como entornos de escritorio" - -msgid "Current profile selection" -msgstr "Selección de perfil actual" - -msgid "Remove all newly added partitions" -msgstr "Eliminar todas las particións recién agregadas" - -msgid "Assign mountpoint" -msgstr "Asignar punto de montaje" - -msgid "Mark/Unmark to be formatted (wipes data)" -msgstr "Marcar/Desmarcar para formatear (borra datos)" - -msgid "Mark/Unmark as bootable" -msgstr "Marcar/Desmarcar como arrancable" - -msgid "Change filesystem" -msgstr "Cambiar el sistema de archivos" - -msgid "Mark/Unmark as compressed" -msgstr "Marcar/Desmarcar como comprimido" - -msgid "Set subvolumes" -msgstr "Establecer subvolúmenes" - -msgid "Delete partition" -msgstr "Eliminar partición" - -msgid "Partition" -msgstr "Partición" - -msgid "This partition is currently encrypted, to format it a filesystem has to be specified" -msgstr "Esta partición está actualmente cifrada, para formatearla se debe especificar un sistema de archivos" - -msgid "Partition mount-points are relative to inside the installation, the boot would be /boot as an example." -msgstr "os puntos de montaje da partición son relativos al interior da instalación; el arranque sería /boot como ejemplo." - -msgid "If mountpoint /boot is set, then the partition will also be marked as bootable." -msgstr "Si se establece el punto de montaje /boot, la partición también se marcará como arrancable." - -msgid "Mountpoint: " -msgstr "Punto de montaje: " - -msgid "Current free sectors on device {}:" -msgstr "Sectores libres actuales en el dispositivo {}:" - -msgid "Total sectors: {}" -msgstr "Sectores totales: {}" - -msgid "Enter the start sector (default: {}): " -msgstr "Introduzca el sector de inicio (predeterminado: {}): " - -msgid "Enter the end sector of the partition (percentage or block number, default: {}): " -msgstr "Ingrese el sector final da partición (porcentaje o número de bloque, predeterminado: {}): " - -msgid "This will remove all newly added partitions, continue?" -msgstr "Esto eliminará todas las particións recientemente agregadas, ¿continuar?" - -#, python-brace-format -msgid "Partition management: {}" -msgstr "Gestión de particións: {}" - -#, python-brace-format -msgid "Total length: {}" -msgstr "Largo total: {}" - -msgid "Encryption type" -msgstr "Tipo de cifrado" - -msgid "Iteration time" -msgstr "Tiempo de iteración" - -msgid "Enter iteration time for LUKS encryption (in milliseconds)" -msgstr "Ingrese el tiempo de iteración para cifrado LUKS (en milisegundos)" - -msgid "Higher values increase security but slow down boot time" -msgstr "Valores más grandes mejoran la seguridad pero aumentan el tiempo de arranque" - -msgid "Default: 10000ms, Recommended range: 1000-60000" -msgstr "Por defecto: 10000ms, Rango recomendado 1000-60000" - -msgid "Iteration time cannot be empty" -msgstr "Tiempo de iteración no pode estar vacío" - -msgid "Iteration time must be at least 100ms" -msgstr "Tiempo de iteración no pode menor a 100ms" - -msgid "Iteration time must be at most 120000ms" -msgstr "Tiempo de iteración no pode ser mayor a 120000ms" - -msgid "Please enter a valid number" -msgstr "Por favor ingrese un número válido" - -msgid "Partitions" -msgstr "particións" - -msgid "No HSM devices available" -msgstr "Non hai dispositivos HSM disponibles" - -msgid "Partitions to be encrypted" -msgstr "particións a cifrar" - -msgid "Select disk encryption option" -msgstr "Seleccione la opción de cifrado de disco" - -msgid "Select a FIDO2 device to use for HSM" -msgstr "Seleccione un dispositivo FIDO2 para usar con HSM" - -msgid "Use a best-effort default partition layout" -msgstr "Utlizar un diseño de partición predeterminado de mejor esfuerzo" - -msgid "Manual Partitioning" -msgstr "Partición manual" - -msgid "Pre-mounted configuration" -msgstr "Configuración premontada" - -msgid "Unknown" -msgstr "Desconocido" - -msgid "Partition encryption" -msgstr "Cifrado de partición" - -#, python-brace-format -msgid " ! Formatting {} in " -msgstr " ! Formateando {} en " - -msgid "← Back" -msgstr "← Regresar" - -msgid "Disk encryption" -msgstr "Cifrado de disco" - -msgid "Configuration" -msgstr "Configuración" - -msgid "Password" -msgstr "Contraseña" - -msgid "All settings will be reset, are you sure?" -msgstr "Todos os ajustes se restablecerán, ¿está seguro?" - -msgid "Back" -msgstr "Regresar" - -msgid "Please chose which greeter to install for the chosen profiles: {}" -msgstr "Por favor, elixa qué xestor de inicio de sesión instalar para os perfiles elegidos: {}" - -#, python-brace-format -msgid "Environment type: {}" -msgstr "Tipo de entorno: {}" - -msgid "The proprietary Nvidia driver is not supported by Sway. It is likely that you will run into issues, are you okay with that?" -msgstr "O controlador propietario de Nvidia no es compatible con Sway. Es probable que encuentre problemas, ¿Desexar continuar?" - -msgid "Installed packages" -msgstr "Paquetes instalados" - -msgid "Add profile" -msgstr "Agregar perfil" - -msgid "Edit profile" -msgstr "Editar perfil" - -msgid "Delete profile" -msgstr "Eliminar perfil" - -msgid "Profile name: " -msgstr "Nome de perfil: " - -msgid "The profile name you entered is already in use. Try again" -msgstr "El nombre de perfil que ingresó ya está en uso. Intente nuevamente" - -msgid "Packages to be install with this profile (space separated, leave blank to skip): " -msgstr "Paquetes que se instalarasen con este perfil (separados por espacios, déjelo en blanco para omitir): " - -msgid "Services to be enabled with this profile (space separated, leave blank to skip): " -msgstr "Servicios que se habilitarán con este perfil (separados por espacios, deje en blanco para omitir): " - -msgid "Should this profile be enabled for installation?" -msgstr "¿Debería habilitarse este perfil para la instalación?" - -msgid "Create your own" -msgstr "Crear tu propio" - -msgid "" -"\n" -"Select a graphics driver or leave blank to install all open-source drivers" -msgstr "" -"\n" -"Seleccione un controlador de gráficos o deje en blanco para instalar todos os controladores de código abierto" - -msgid "Sway needs access to your seat (collection of hardware devices i.e. keyboard, mouse, etc)" -msgstr "Sway necesita acceso a sus dispositivos de hardware (teclado, mouse, etc.)" - -msgid "" -"\n" -"\n" -"Choose an option to give Sway access to your hardware" -msgstr "" -"\n" -"\n" -"Escoxa unha opción para darle a Sway acceso a su hardware" - -msgid "Graphics driver" -msgstr "Controlador de gráficos" - -msgid "Greeter" -msgstr "xestor de inicio de sesión" - -msgid "Please chose which greeter to install" -msgstr "Por favor, elixa qué xestor de inicio de sesión instalar" - -msgid "This is a list of pre-programmed default_profiles" -msgstr "Esta es unha lista de default_profiles preprogramados" - -msgid "Disk configuration" -msgstr "Configuración do disco" - -msgid "Profiles" -msgstr "Perfiles" - -msgid "Finding possible directories to save configuration files ..." -msgstr "Encontrar posibles directorios para guardar archivos de configuración..." - -msgid "Select directory (or directories) for saving configuration files" -msgstr "Seleccione el directorio (o directorios) para guardar os archivos de configuración" - -msgid "Add a custom mirror" -msgstr "Agregar un espejo personalizado" - -msgid "Change custom mirror" -msgstr "Cambiar espejo personalizado" - -msgid "Delete custom mirror" -msgstr "Eliminar espejo personalizado" - -msgid "Enter name (leave blank to skip): " -msgstr "Ingrese el nombre (deje en blanco para omitir): " - -msgid "Enter url (leave blank to skip): " -msgstr "Ingrese la URL (deje en blanco para omitir): " - -msgid "Select signature check option" -msgstr "Seleccione la opción de verificación de firma" - -msgid "Select signature option" -msgstr "Seleccione la opción de firma" - -msgid "Custom mirrors" -msgstr "Espejos personalizados" - -msgid "Defined" -msgstr "Definido" - -msgid "Save user configuration (including disk layout)" -msgstr "Guardar la configuración do usuario (incluido el diseño do disco)" - -msgid "" -"Enter a directory for the configuration(s) to be saved (tab completion enabled)\n" -"Save directory: " -msgstr "" -"Ingrese un directorio para guardar las configuraciones (completar con tabulación habilitado)\n" -"Guardar directorio: " - -msgid "" -"Do you want to save {} configuration file(s) in the following location?\n" -"\n" -"{}" -msgstr "" -"¿Desexa guardar {} archivo(s) de configuración na siguiente ubicación?\n" -"\n" -"{}" - -msgid "Saving {} configuration files to {}" -msgstr "Guardar {} archivos de configuración en {}" - -msgid "Mirrors" -msgstr "Espellos" - -msgid "Mirror regions" -msgstr "Rexions de espejos" - -msgid " - Maximum value : {} ( Allows {} parallel downloads, allows {max_downloads+1} downloads at a time )" -msgstr " - Valor máximo : {} ( Habilita {} descargas paralelas, permite {max_downloads+1} descargas simultáneas )" - -msgid "Invalid input! Try again with a valid input [1 to {}, or 0 to disable]" -msgstr "¡Entrada no válida! Intente nuevamente con unha entrada válida [1 a {}, o 0 para deshabilitar]" - -msgid "Locales" -msgstr "Localidades" - -msgid "Use NetworkManager (necessary to configure internet graphically in GNOME and KDE)" -msgstr "Usar NetworkManager (necesario para configurar internet gráficamente en GNOME y KDE)" - -msgid "Total: {} / {}" -msgstr "Total: {} / {}" - -msgid "All entered values can be suffixed with a unit: B, KB, KiB, MB, MiB..." -msgstr "Todos os valores ingresados poden tener unha unidad como sufijo: B, KB, KiB, MB, MiB ..." - -msgid "If no unit is provided, the value is interpreted as sectors" -msgstr "Se non se proporciona ningunha unidad, o valor se interpreta como sectores" - -msgid "Enter start (default: sector {}): " -msgstr "Ingrese el inicio (predeterminado: sector {}): " - -msgid "Enter end (default: {}): " -msgstr "Ingrese el final (predeterminado: {}): " - -msgid "Unable to determine fido2 devices. Is libfido2 installed?" -msgstr "Non se pode determinar os dispositivos fido2. ¿Está instalado libfido2?" - -msgid "Path" -msgstr "Ruta" - -msgid "Manufacturer" -msgstr "Fabricante" - -msgid "Product" -msgstr "Producto" - -#, python-brace-format -msgid "Invalid configuration: {error}" -msgstr "Configuración no válida: {error}" +msgid "Minimal KDE Plasma installation" +msgstr "Instalación mínima de KDE Plasma" msgid "Type" msgstr "Tipo" -msgid "This option enables the number of parallel downloads that can occur during package downloads" -msgstr "Esta opción habilita a cantidade de descargas paralelas que poden ocurrir durante as descargas de paquetes" +msgid "Description" +msgstr "Descrición" -msgid "" -"Enter the number of parallel downloads to be enabled.\n" -"\n" -"Note:\n" -msgstr "" -"Ingrese el número de descargas paralelas que se habilitarán.\n" -"\n" -"Nota:\n" +msgid "Select a flavor of KDE Plasma to install" +msgstr "Selecciona a variante de KDE Plasma que instalar" #, python-brace-format -msgid " - Maximum recommended value : {} ( Allows {} parallel downloads at a time )" -msgstr " - Valor máximo recomendado : {} ( Permite {} descargas paralelas simultáneas )" +msgid "{} needs access to your seat" +msgstr "{} necesita acceso ao teu posto (seat)" -msgid " - Disable/Default : 0 ( Disables parallel downloading, allows only 1 download at a time )\n" -msgstr " - Deshabilitar/Predeterminado : 0 ( Deshabilita la descarga paralela, permite solo 1 descarga simultánea )\n" +msgid "collection of hardware devices i.e. keyboard, mouse" +msgstr "conxunto de dispositivos de hardware, p. ex. teclado e rato" -msgid "Invalid input! Try again with a valid input [or 0 to disable]" -msgstr "¡Entrada non válida! Intente novamente con unha entrada válida [ou 0 para deshabilitar]" +#, python-brace-format +msgid "Choose an option how to give {} access to your hardware" +msgstr "Escolle como darlle acceso a {} ao teu hardware" -msgid "Hyprland needs access to your seat (collection of hardware devices i.e. keyboard, mouse, etc)" -msgstr "Hyprland necesita acceso ao seu asiento (colección de dispositivos de hardware, es decir, teclado, mouse, etc.)" +#, python-brace-format +msgid "Environment type: {} {}" +msgstr "Tipo de contorno: {} {}" -msgid "" -"\n" -"\n" -"Choose an option to give Hyprland access to your hardware" -msgstr "" -"\n" -"\n" -"Escoxa unha opción para darle acceso a Hyprland a su hardware" +#, python-brace-format +msgid "Environment type: {}" +msgstr "Tipo de contorno: {}" -msgid "All entered values can be suffixed with a unit: %, B, KB, KiB, MB, MiB..." -msgstr "Todos os valores introducidos poden tener como sufijo unha unidad: %, B, KB, KiB, MB, MiB..." +msgid "Installed packages" +msgstr "Paquetes instalados" -msgid "Would you like to use unified kernel images?" -msgstr "¿Gustarialle utilizar imágenes do kernel unificadas?" +msgid "Bluetooth" +msgstr "Bluetooth" + +msgid "Audio" +msgstr "Son" + +msgid "Print service" +msgstr "Servizo de impresión" + +msgid "Power management" +msgstr "Xestión de enerxía" + +msgid "Firewall" +msgstr "Devasa" + +msgid "Additional fonts" +msgstr "Tipos de letra adicionais" + +msgid "Enabled" +msgstr "Activado" + +msgid "Disabled" +msgstr "Desactivado" + +msgid "Would you like to configure Bluetooth?" +msgstr "Queres configurar o Bluetooth?" + +msgid "Would you like to configure the print service?" +msgstr "Queres configurar o servizo de impresión?" + +msgid "Select audio configuration" +msgstr "Selecciona a configuración de son" + +msgid "Select font packages to install" +msgstr "Selecciona os paquetes de tipos de letra que instalar" + +msgid "ArchInstall Language" +msgstr "Idioma de ArchInstall" + +msgid "Version" +msgstr "Versión" + +msgid "Installation Script" +msgstr "Script de instalación" + +msgid "Locales" +msgstr "Configuración rexional" + +msgid "Disk configuration" +msgstr "Configuración de discos" + +msgid "Profile" +msgstr "Perfil" + +msgid "Mirrors and repositories" +msgstr "Réplicas e repositorios" + +msgid "Network" +msgstr "Rede" + +msgid "Bootloader" +msgstr "Cargador de arranque" + +msgid "Application" +msgstr "Aplicación" + +msgid "Authentication" +msgstr "Autenticación" + +msgid "Swap" +msgstr "Swap" + +msgid "Hostname" +msgstr "Nome de host" + +msgid "Kernels" +msgstr "Núcleos" + +msgid "Automatic time sync (NTP)" +msgstr "Sincronización automática da hora (NTP)" + +msgid "Timezone" +msgstr "Fuso horario" + +msgid "Services" +msgstr "Servizos" + +msgid "Additional packages" +msgstr "Paquetes adicionais" + +msgid "Pacman" +msgstr "Pacman" + +msgid "Custom commands" +msgstr "Ordes personalizadas" + +msgid "Users" +msgstr "Usuarios" + +msgid "Root encrypted password" +msgstr "Contrasinal cifrado de root" + +msgid "Disk encryption password" +msgstr "Contrasinal de cifrado do disco" + +msgid "Incorrect credentials file decryption password" +msgstr "O contrasinal de descifrado do ficheiro de credenciais é incorrecto" + +msgid "Enter credentials file decryption password" +msgstr "Introduce o contrasinal de descifrado do ficheiro de credenciais" + +msgid "Incorrect password" +msgstr "Contrasinal incorrecto" + +#, python-brace-format +msgid "Setting up U2F login: {}" +msgstr "Configurando o inicio de sesión U2F: {}" + +#, python-brace-format +msgid "Setting up U2F device for user: {}" +msgstr "Configurando o dispositivo U2F para o usuario: {}" + +msgid "You may need to enter the PIN and then touch your U2F device to register it" +msgstr "Pode que teñas que introducir o PIN e despois tocar o teu dispositivo U2F para rexistralo" + +msgid "Root password" +msgstr "Contrasinal de root" + +msgid "User account" +msgstr "Conta de usuario" + +msgid "U2F login setup" +msgstr "Configuración do inicio de sesión U2F" + +msgid "U2F login method: " +msgstr "Método de inicio de sesión U2F: " + +msgid "Passwordless sudo: " +msgstr "Sudo sen contrasinal: " + +msgid "No U2F devices found" +msgstr "Non se atopou ningún dispositivo U2F" + +msgid "Enter root password" +msgstr "Introduce o contrasinal de root" + +msgid "Enable passwordless sudo?" +msgstr "Queres activar sudo sen contrasinal?" msgid "Unified kernel images" -msgstr "Imaxes do kernel unificadas" +msgstr "Imaxes de núcleo unificadas" -msgid "Waiting for time sync (timedatectl show) to complete." -msgstr "Esperando a que se complete la sincronización da hora (timedatectl show)." +msgid "Install to removable location" +msgstr "Instalar nunha localización extraíble" -msgid "Time syncronization not completing, while you wait - check the docs for workarounds: https://archinstall.readthedocs.io/" -msgstr "A sincronización de hora no se completa mientras espera - consulte os documentos para encontrar soluciones: https://archinstall.readthedocs.io/" +msgid "Plymouth" +msgstr "Plymouth" -msgid "Skipping waiting for automatic time sync (this can cause issues if time is out of sync during installation)" -msgstr "Saltarse la espera de sincronización automática da hora (esto pode causar problemas si la hora no está sincronizada durante la instalación)" +msgid "Will install to /EFI/BOOT/ (removable location, safe default)" +msgstr "Instalarase en /EFI/BOOT/ (localización extraíble, opción predeterminada segura)" -msgid "Waiting for Arch Linux keyring sync (archlinux-keyring-wkd-sync) to complete." -msgstr "Esperando a que se complete la sincronización do llavero de Arch Linux (archlinux-keyring-wkd-sync)." +msgid "Will install to custom location with NVRAM entry" +msgstr "Instalarase nunha localización personalizada cunha entrada NVRAM" -msgid "Selected profiles: " -msgstr "Perfiles seleccionados: " +msgid "Plymouth adds a cosmetic boot splash but can cause boot problems on some setups:" +msgstr "Plymouth engade unha pantalla de arranque decorativa, pero pode causar problemas de arranque nalgunhas configuracións:" -msgid "Time synchronization not completing, while you wait - check the docs for workarounds: https://archinstall.readthedocs.io/" -msgstr "A sincronización de hora no se completa mientras espera - consulte os documentos para encontrar soluciones: https://archinstall.readthedocs.io/" +msgid "black screen with the NVIDIA driver" +msgstr "pantalla en negro co controlador de NVIDIA" -msgid "Mark/Unmark as nodatacow" -msgstr "Marcar/Desmarcar como nodatacow" +msgid "hidden password prompt with disk encryption (LUKS)" +msgstr "petición de contrasinal oculta co cifrado de disco (LUKS)" -msgid "Would you like to use compression or disable CoW?" -msgstr "¿Le gustaría utilizar compresión o desactivar CoW?" +msgid "Would you like to enable it?" +msgstr "Queres activalo?" -msgid "Use compression" -msgstr "Usar compresión" +msgid "Would you like to use unified kernel images?" +msgstr "Queres usar imaxes de núcleo unificadas?" -msgid "Disable Copy-on-Write" -msgstr "Desactivar copia en escritura" +msgid "Would you like to install the bootloader to the default removable media search location?" +msgstr "Queres instalar o cargador de arranque na localización predeterminada de busca de medios extraíbles?" -msgid "Provides a selection of desktop environments and tiling window managers, e.g. GNOME, KDE Plasma, Sway" -msgstr "Proporciona unha selección de entornos de escritorio y administradores de ventanas en mosaico, p.e. GNOME, KDE Plasma, Sway" +msgid "This installs the bootloader to /EFI/BOOT/BOOTX64.EFI (or similar) which is useful for:" +msgstr "Isto instala o cargador de arranque en /EFI/BOOT/BOOTX64.EFI (ou similar), o cal é útil para:" + +msgid "Firmware that does not properly support NVRAM boot entries like most MSI motherboards," +msgstr "Firmware que non admite correctamente as entradas de arranque NVRAM, como a maioría das placas base de MSI," + +msgid "most Apple Macs, many laptops..." +msgstr "a maioría dos Mac de Apple, moitos portátiles..." + +msgid "USB drives or other portable external media." +msgstr "unidades USB ou outros medios externos portátiles." + +msgid "Systems where you want the disk to be bootable on any computer." +msgstr "Sistemas nos que queiras que o disco arranque en calquera computador." + +msgid "Select bootloader to install" +msgstr "Selecciona o cargador de arranque que instalar" + +msgid "UEFI is not detected and some options are disabled" +msgstr "Non se detectou UEFI e algunhas opcións están desactivadas" + +msgid "Select Plymouth theme" +msgstr "Selecciona o tema de Plymouth" + +msgid "The specified configuration will be applied" +msgstr "Aplicarase a configuración especificada" + +msgid "Would you like to continue?" +msgstr "Queres continuar?" + +msgid "Configuration preview" +msgstr "Vista previa da configuración" + +msgid "No configuration" +msgstr "Sen configuración" + +msgid "Save user configuration (including disk layout)" +msgstr "Gardar a configuración do usuario (incluída a disposición dos discos)" + +msgid "Save user credentials" +msgstr "Gardar as credenciais do usuario" + +msgid "Save all" +msgstr "Gardar todo" + +msgid "Enter a directory for the configuration(s) to be saved" +msgstr "Introduce un directorio onde gardar as configuracións" + +#, python-brace-format +msgid "Do you want to save the configuration file(s) to {}?" +msgstr "Queres gardar os ficheiros de configuración en {}?" + +msgid "Do you want to encrypt the user_credentials.json file?" +msgstr "Queres cifrar o ficheiro user_credentials.json?" + +msgid "Credentials file encryption password" +msgstr "Contrasinal de cifrado do ficheiro de credenciais" + +msgid "Partitioning" +msgstr "Particionado" + +msgid "Disk encryption" +msgstr "Cifrado de disco" #, python-brace-format msgid "Configuration type: {}" msgstr "Tipo de configuración: {}" -msgid "LVM configuration type" -msgstr "Tipo de configuración LVM" +msgid "Mountpoint" +msgstr "Punto de montaxe" -msgid "LVM disk encryption with more than 2 partitions is currently not supported" -msgstr "Actualmente no se admite el cifrado de disco LVM con más de 2 particións" +msgid "Configuration" +msgstr "Configuración" -msgid "Use NetworkManager (necessary to configure internet graphically in GNOME and KDE Plasma)" -msgstr "Usar NetworkManager (necesario para configurar internet gráficamente en GNOME y KDE Plasma)" - -msgid "Select a LVM option" -msgstr "Seleccione unha opción LVM" - -msgid "Partitioning" -msgstr "Particionamiento" - -msgid "Logical Volume Management (LVM)" -msgstr "Gestión de volúmenes lógicos (LVM)" +msgid "Wipe" +msgstr "Borrar" msgid "Physical volumes" -msgstr "Volúmenes físicos" +msgstr "Volumes físicos" msgid "Volumes" -msgstr "Volúmenes" +msgstr "Volumes" + +#, python-brace-format +msgid "Snapshot type: {}" +msgstr "Tipo de instantánea: {}" + +msgid "LVM disk encryption with more than 2 partitions is currently not supported" +msgstr "Actualmente non se admite o cifrado de disco LVM con máis de 2 particións" + +msgid "Encryption type" +msgstr "Tipo de cifrado" + +msgid "Password" +msgstr "Contrasinal" + +msgid "Iteration time" +msgstr "Tempo de iteración" + +msgid "No disks were detected. A disk is required to be able to install Arch Linux" +msgstr "Non se detectou ningún disco. Fai falta un disco para poder instalar Arch Linux" + +msgid "Select disks for the installation" +msgstr "Selecciona os discos para a instalación" + +msgid "Partitions" +msgstr "Particións" + +msgid "Select a disk configuration" +msgstr "Selecciona unha configuración de discos" + +msgid "Enter root mount directory" +msgstr "Introduce o directorio de montaxe raíz" + +msgid "You will use whatever drive-setup is mounted at the specified directory" +msgstr "Usarase a configuración de unidades que estea montada no directorio especificado" + +msgid "WARNING: Archinstall won't check the suitability of this setup" +msgstr "AVISO: Archinstall non comprobará a idoneidade desta configuración" + +msgid "Select main filesystem" +msgstr "Selecciona o sistema de ficheiros principal" + +msgid "Would you like to use compression or disable CoW?" +msgstr "Queres usar compresión ou desactivar o CoW?" + +msgid "Use compression" +msgstr "Usar compresión" + +msgid "Disable Copy-on-Write" +msgstr "Desactivar o Copy-on-Write" + +msgid "Would you like to use BTRFS subvolumes with a default structure?" +msgstr "Queres usar subvolumes de BTRFS cunha estrutura predeterminada?" + +msgid "Would you like to create a separate partition for /home?" +msgstr "Queres crear unha partición separada para /home?" + +msgid "The selected drives do not have the minimum capacity required for an automatic suggestion\n" +msgstr "As unidades seleccionadas non teñen a capacidade mínima necesaria para unha suxestión automática\n" + +#, python-brace-format +msgid "Minimum capacity for /home partition: {}GiB\n" +msgstr "Capacidade mínima para a partición /home: {}GiB\n" + +#, python-brace-format +msgid "Minimum capacity for Arch Linux partition: {}GiB" +msgstr "Capacidade mínima para a partición de Arch Linux: {}GiB" + +msgid "Encryption password" +msgstr "Contrasinal de cifrado" msgid "LVM volumes" -msgstr "Volúmenes LVM" - -msgid "LVM volumes to be encrypted" -msgstr "Volúmenes LVM a cifrar" - -msgid "Select which LVM volumes to encrypt" -msgstr "Seleccione qué volúmenes LVM cifrar" - -msgid "Default layout" -msgstr "Diseño predeterminado" - -msgid "No Encryption" -msgstr "Sen cifrado" - -msgid "LUKS" -msgstr "LUKS" - -msgid "LVM on LUKS" -msgstr "LVM en LUKS" - -msgid "LUKS on LVM" -msgstr "LUKS en LVM" - -msgid "Yes" -msgstr "Sí" - -msgid "No" -msgstr "No" - -msgid "Archinstall help" -msgstr "axuda de archinstall" - -msgid " (default)" -msgstr " (predeterminado)" - -msgid "Press Ctrl+h for help" -msgstr "Presione Ctrl+h para obtener axuda" - -msgid "Choose an option to give Sway access to your hardware" -msgstr "Escoxa unha opción para darle a Sway acceso a su hardware" - -# maybe "Acceso a la estación" or "Gestión de puestos (seats)" could be better? -msgid "Seat access" -msgstr "Acceso al asiento" - -msgid "Mountpoint" -msgstr "Punto de montaje" +msgstr "Volumes LVM" msgid "HSM" msgstr "HSM" -msgid "Enter disk encryption password (leave blank for no encryption)" -msgstr "Ingrese la contraseña de cifrado do disco (deje en blanco si no desea cifrar)" +msgid "Partitions to be encrypted" +msgstr "Particións a cifrar" -msgid "Disk encryption password" -msgstr "Contraseña de cifrado de disco" +msgid "LVM volumes to be encrypted" +msgstr "Volumes LVM a cifrar" + +msgid "HSM device" +msgstr "Dispositivo HSM" + +msgid "Select encryption type" +msgstr "Selecciona o tipo de cifrado" + +msgid "Enter disk encryption password (leave blank for no encryption)" +msgstr "Introduce o contrasinal de cifrado do disco (déixao en branco para non cifrar)" + +msgid "Select a FIDO2 device to use for HSM" +msgstr "Selecciona un dispositivo FIDO2 para usar como HSM" + +msgid "Enter iteration time for LUKS encryption (in milliseconds)" +msgstr "Introduce o tempo de iteración para o cifrado LUKS (en milisegundos)" + +msgid "Higher values increase security but slow down boot time" +msgstr "Valores máis altos aumentan a seguridade, pero fan o arranque máis lento" + +#, python-brace-format +msgid "Default: {}ms, Recommended range: 1000-60000" +msgstr "Por defecto: {}ms; intervalo recomendado: 1000-60000" + +msgid "Iteration time must be at least 100ms" +msgstr "O tempo de iteración debe ser de polo menos 100ms" + +msgid "Iteration time must be at most 120000ms" +msgstr "O tempo de iteración debe ser como máximo de 120000ms" + +msgid "Please enter a valid number" +msgstr "Introduce un número válido" + +msgid "Suggest partition layout" +msgstr "Suxerir unha disposición de particións" + +msgid "Remove all newly added partitions" +msgstr "Eliminar todas as particións engadidas recentemente" + +msgid "Assign mountpoint" +msgstr "Asignar punto de montaxe" + +msgid "Mark/Unmark to be formatted (wipes data)" +msgstr "Marcar/Desmarcar para formatar (borra os datos)" + +msgid "Mark/Unmark as bootable" +msgstr "Marcar/Desmarcar como arrancable" + +msgid "Mark/Unmark as ESP" +msgstr "Marcar/Desmarcar como ESP" + +msgid "Mark/Unmark as XBOOTLDR" +msgstr "Marcar/Desmarcar como XBOOTLDR" + +msgid "Change filesystem" +msgstr "Cambiar o sistema de ficheiros" + +msgid "Mark/Unmark as compressed" +msgstr "Marcar/Desmarcar como comprimida" + +msgid "Mark/Unmark as nodatacow" +msgstr "Marcar/Desmarcar como nodatacow" + +msgid "Set subvolumes" +msgstr "Definir os subvolumes" + +msgid "Delete partition" +msgstr "Eliminar a partición" + +#, python-brace-format +msgid "Partition management: {}" +msgstr "Xestión de particións: {}" + +#, python-brace-format +msgid "Total length: {}" +msgstr "Lonxitude total: {}" msgid "Partition - New" -msgstr "Partición - nova" +msgstr "Partición - Nova" -msgid "Filesystem" -msgstr "Sistema de archivos" +msgid "Partition" +msgstr "Partición" + +msgid "This partition is currently encrypted, to format it a filesystem has to be specified" +msgstr "Esta partición está cifrada actualmente; para formatala hai que especificar un sistema de ficheiros" + +msgid "Partition mount-points are relative to inside the installation, the boot would be /boot as an example." +msgstr "Os puntos de montaxe das particións son relativos ao interior da instalación; por exemplo, o de arranque sería /boot." + +msgid "Enter a mountpoint" +msgstr "Introduce un punto de montaxe" msgid "Invalid size" -msgstr "Tamaño no válido" - -msgid "Start (default: sector {}): " -msgstr "Inicio (predeterminado: sector {}): " - -msgid "End (default: {}): " -msgstr "Fin (predeterminado: {}): " - -msgid "Subvolume name" -msgstr "Nome do subvolumen" - -msgid "Disk configuration type" -msgstr "Tipo de configuración do disco" - -msgid "Root mount directory" -msgstr "Directorio de montaxe raíz" - -msgid "Select language" -msgstr "Seleccionar idioma" - -msgid "Write additional packages to install (space separated, leave blank to skip)" -msgstr "Escriba paquetes adicionais para instalar (separados por espacios, déxelo en blanco para omitir)" - -msgid "Invalid download number" -msgstr "Número de descarga no válido" - -msgid "Number downloads" -msgstr "Número de descargas" - -msgid "The username you entered is invalid" -msgstr "O nome de usuario ingresado no es válido" - -msgid "Username" -msgstr "Nome de usuario" - -#, python-brace-format -msgid "Should \"{}\" be a superuser (sudo)?\n" -msgstr "¿\"{}\" debería ser un superusuario (sudo)?\n" - -msgid "Interfaces" -msgstr "Interfaces" - -msgid "You need to enter a valid IP in IP-config mode" -msgstr "Debe ingresar unha IP válida en el modo de configuración de IP" - -msgid "Modes" -msgstr "Modos" - -msgid "IP address" -msgstr "Dirección IP" - -msgid "Enter your gateway (router) IP address (leave blank for none)" -msgstr "Ingrese la dirección IP de su puerta de enlace (enrutador) (deje en blanco si no hay ninguna)" - -msgid "Gateway address" -msgstr "Dirección de puerta de enlace" - -msgid "Enter your DNS servers with space separated (leave blank for none)" -msgstr "Ingrese sus servidores DNS separados por espacios (deje en blanco si no hay ninguno)" - -msgid "DNS servers" -msgstr "Servidores DNS" - -msgid "Configure interfaces" -msgstr "Configurar interfaces" - -msgid "Kernel" -msgstr "Núcleo" - -msgid "UEFI is not detected and some options are disabled" -msgstr "No se detecta UEFI ou algunhas opciones están deshabilitadas" - -msgid "Info" -msgstr "Info" - -msgid "The proprietary Nvidia driver is not supported by Sway." -msgstr "O controlador patentado de Nvidia non e compatible con Sway." - -msgid "It is likely that you will run into issues, are you okay with that?" -msgstr "Es probable que tengas problemas. ¿Te parece bien?" - -msgid "Main profile" -msgstr "Perfil principal" - -msgid "Confirm password" -msgstr "Confirmar contraseña" - -msgid "The confirmation password did not match, please try again" -msgstr "A contraseña de confirmación no coincide, por favor intente nuevamente" - -msgid "Not a valid directory" -msgstr "No es un directorio válido" - -msgid "Would you like to continue?" -msgstr "¿Quiere continuar?" - -msgid "Directory" -msgstr "Directorio" - -msgid "Enter a directory for the configuration(s) to be saved (tab completion enabled)" -msgstr "Ingrese un directorio para guardar las configuraciones (autocompletado de tabulación habilitado)" - -#, python-brace-format -msgid "Do you want to save the configuration file(s) to {}?" -msgstr "¿Desexa guardar os archivos de configuración en {}?" - -msgid "Enabled" -msgstr "Habilitado" - -msgid "Disabled" -msgstr "Deshabilitado" - -msgid "Please submit this issue (and file) to https://github.com/archlinux/archinstall/issues" -msgstr "Envíe este problema (y archivo) a https://github.com/archlinux/archinstall/issues" - -msgid "Mirror name" -msgstr "Nome do espejo" - -msgid "Url" -msgstr "Url" - -msgid "Select signature check" -msgstr "Seleccionar verificación de firma" - -msgid "Select execution mode" -msgstr "Seleccionar modo de execución" - -msgid "Press ? for help" -msgstr "Presione ? para obtener axuda" - -msgid "Choose an option to give Hyprland access to your hardware" -msgstr "Escoxa unha opción para darle a Hyprland acceso a su hardware" - -msgid "Additional repositories" -msgstr "Repositorios adicionais" - -msgid "NTP" -msgstr "NTP" - -msgid "Swap on zram" -msgstr "Swap en zram" - -msgid "Name" -msgstr "Nome" - -msgid "Signature check" -msgstr "Comprobación de firma" +msgstr "Tamaño non válido" #, python-brace-format msgid "Selected free space segment on device {}:" @@ -1553,699 +513,693 @@ msgstr "Segmento de espazo libre seleccionado no dispositivo {}:" msgid "Size: {} / {}" msgstr "Tamaño: {} / {}" +msgid "All entered values can be suffixed with a unit: %, B, KB, KiB, MB, MiB..." +msgstr "Todos os valores introducidos poden levar como sufixo unha unidade: %, B, KB, KiB, MB, MiB..." + +msgid "If no unit is provided, the value is interpreted as sectors" +msgstr "Se non se indica unha unidade, o valor interprétase como sectores" + #, python-brace-format -msgid "Size (default: {}): " -msgstr "Tamaño (predeterminado: {}): " +msgid "Enter a size (default: {}): " +msgstr "Introduce un tamaño (por defecto: {}): " -msgid "HSM device" -msgstr "Dispositivo HSM" +msgid "This will remove all newly added partitions, continue?" +msgstr "Isto eliminará todas as particións engadidas recentemente. Queres continuar?" -msgid "Some packages could not be found in the repository" -msgstr "No se pudieron encontrar algunos paquetes en el repositorio" +msgid "Add subvolume" +msgstr "Engadir subvolume" -msgid "User" -msgstr "Usuario" +msgid "Edit subvolume" +msgstr "Editar subvolume" -msgid "The specified configuration will be applied" -msgstr "Aplicarase la configuración especificada" +msgid "Delete subvolume" +msgstr "Eliminar subvolume" -msgid "Wipe" -msgstr "Borrar" +msgid "Value cannot be empty" +msgstr "O valor non pode estar baleiro" -msgid "Mark/Unmark as XBOOTLDR" -msgstr "Marcar/Desmarcar como XBOOTLDR" +msgid "Enter subvolume name" +msgstr "Introduce o nome do subvolume" -msgid "Loading packages..." -msgstr "Cargando paquetes..." +msgid "Subvolume name" +msgstr "Nome do subvolume" -msgid "Select any packages from the below list that should be installed additionally" -msgstr "Seleccione cualquier paquete da lista a continuación que deba instalarse adicionalmente" +msgid "Enter subvolume mountpoint" +msgstr "Introduce o punto de montaxe do subvolume" -msgid "Add a custom repository" -msgstr "Agregar un repositorio personalizado" +msgid "Exit archinstall" +msgstr "Saír de archinstall" -msgid "Change custom repository" -msgstr "Cambiar el repositorio personalizado" +msgid "Reboot system" +msgstr "Reiniciar o sistema" -msgid "Delete custom repository" -msgstr "Eliminar repositorio personalizado" +msgid "chroot into installation for post-installation configurations" +msgstr "facer chroot na instalación para configuracións posteriores á instalación" -msgid "Repository name" -msgstr "Nome do repositorio" +msgid "Would you like to use automatic time synchronization (NTP) with the default time servers?\n" +msgstr "Queres usar a sincronización automática da hora (NTP) cos servidores de hora predeterminados?\n" -msgid "Add a custom server" -msgstr "Agregar un servidor personalizado" +msgid "" +"Hardware time and other post-configuration steps might be required in order for NTP to work.\n" +"For more information, please check the Arch wiki" +msgstr "" +"A hora do hardware e outros pasos posteriores á configuración poden ser necesarios para que NTP funcione.\n" +"Para máis información, consulta a wiki de Arch" -msgid "Change custom server" -msgstr "Cambiar servidor personalizado" +msgid "Enter a hostname" +msgstr "Introduce un nome de host" -msgid "Delete custom server" -msgstr "Eliminar servidor personalizado" +msgid "Select timezone" +msgstr "Selecciona o fuso horario" -msgid "Server url" -msgstr "URL do servidor" +msgid "What would you like to do next?" +msgstr "Que queres facer a continuación?" -msgid "Select regions" -msgstr "Seleccione regiones" +msgid "Select which kernel(s) to install" +msgstr "Selecciona que núcleo(s) instalar" -msgid "Add custom servers" -msgstr "Agregar servidores personalizados" +msgid "For the best compatibility with your AMD hardware, you may want to use either the all open-source or AMD / ATI options." +msgstr "Para a mellor compatibilidade co teu hardware de AMD, quizais queiras usar a opción de só código aberto ou a de AMD / ATI." -msgid "Add custom repository" -msgstr "Agregar repositorio personalizado" +msgid "For the best compatibility with your Intel hardware, you may want to use either the all open-source or Intel options.\n" +msgstr "Para a mellor compatibilidade co teu hardware de Intel, quizais queiras usar a opción de só código aberto ou a de Intel.\n" -msgid "Loading mirror regions..." -msgstr "Cargando regiones de espejo..." +msgid "For the best compatibility with your Nvidia hardware, you may want to use the Nvidia proprietary driver.\n" +msgstr "Para a mellor compatibilidade co teu hardware de Nvidia, quizais queiras usar o controlador privativo de Nvidia.\n" -msgid "Mirrors and repositories" -msgstr "Espejos y repositorios" +msgid "Would you like to use swap on zram?" +msgstr "Queres usar swap en zram?" + +msgid "Select zram compression algorithm:" +msgstr "Selecciona o algoritmo de compresión de zram:" + +msgid "Archinstall language" +msgstr "Idioma de Archinstall" + +msgid "Applications" +msgstr "Aplicacións" + +msgid "Network configuration" +msgstr "Configuración de rede" + +msgid "Save configuration" +msgstr "Gardar a configuración" + +msgid "Install" +msgstr "Instalar" + +msgid "Abort" +msgstr "Abortar" + +msgid "Either root-password or at least 1 user with sudo privileges must be specified" +msgstr "Hai que especificar o contrasinal de root ou polo menos 1 usuario con privilexios de sudo" + +msgid "The selected desktop profile requires a regular user to log in via the greeter" +msgstr "O perfil de escritorio seleccionado require un usuario normal para iniciar sesión mediante o xestor de inicio de sesión" + +msgid "Language" +msgstr "Idioma" + +msgid "NTP" +msgstr "NTP" + +msgid "LVM configuration type" +msgstr "Tipo de configuración LVM" + +#, python-brace-format +msgid "Btrfs snapshot type: {}" +msgstr "Tipo de instantánea de Btrfs: {}" + +msgid "Swap on zram" +msgstr "Swap en zram" + +msgid "Compression algorithm" +msgstr "Algoritmo de compresión" + +msgid "Parallel Downloads" +msgstr "Descargas paralelas" + +msgid "Color" +msgstr "Cor" + +msgid "Kernel" +msgstr "Núcleo" + +msgid "No network configuration selected. Network will need to be set up manually on the installed system." +msgstr "Non se seleccionou ningunha configuración de rede. Haberá que configurar a rede manualmente no sistema instalado." + +msgid "Missing configurations:" +msgstr "Configuracións que faltan:" + +msgid "Invalid configuration:" +msgstr "Configuración non válida:" + +msgid "Ready to install" +msgstr "Listo para instalar" + +msgid "Warnings:" +msgstr "Avisos:" + +msgid "Profiles" +msgstr "Perfís" + +msgid "Graphics driver" +msgstr "Controlador gráfico" + +msgid "Greeter" +msgstr "Xestor de inicio de sesión" msgid "Selected mirror regions" -msgstr "Regiones de espejo seleccionadas" +msgstr "Rexións de réplicas seleccionadas" msgid "Custom servers" msgstr "Servidores personalizados" +msgid "Optional repositories" +msgstr "Repositorios opcionais" + msgid "Custom repositories" msgstr "Repositorios personalizados" -msgid "Only ASCII characters are supported" -msgstr "Sólo admitense caracteres ASCII" +#, python-brace-format +msgid "[!] A log file has been created here: {}" +msgstr "[!] Creouse un ficheiro de rexistro aquí: {}" -msgid "Show help" -msgstr "Mostrar axuda" +msgid "Please submit this issue (and file) to https://github.com/archlinux/archinstall/issues" +msgstr "Por favor, envía este problema (e o ficheiro) a https://github.com/archlinux/archinstall/issues" -msgid "Exit help" -msgstr "Axuda para salir" +msgid "Syncing the system..." +msgstr "Sincronizando o sistema..." -msgid "Preview scroll up" -msgstr "Subir en vista previa" +msgid "Waiting for time sync (timedatectl show) to complete." +msgstr "Agardando a que remate a sincronización da hora (timedatectl show)." -msgid "Preview scroll down" -msgstr "Bajar en vista previa" +msgid "Time synchronization not completing, while you wait - check the docs for workarounds: https://archinstall.readthedocs.io/" +msgstr "A sincronización da hora aínda non rematou; mentres agardas, consulta a documentación para posibles solucións: https://archinstall.readthedocs.io/" -msgid "Move up" -msgstr "Subir" +msgid "Skipping waiting for automatic time sync (this can cause issues if time is out of sync during installation)" +msgstr "Omítese a espera da sincronización automática da hora (isto pode causar problemas se a hora está desincronizada durante a instalación)" -msgid "Move down" -msgstr "Bajar" +msgid "Waiting for Arch Linux keyring sync (archlinux-keyring-wkd-sync) to complete." +msgstr "Agardando a que remate a sincronización do chaveiro de Arch Linux (archlinux-keyring-wkd-sync)." -msgid "Move right" -msgstr "Mover a la dereita" +msgid "Keyboard layout" +msgstr "Disposición do teclado" -msgid "Move left" -msgstr "Mover a la esquerda" +msgid "Locale language" +msgstr "Idioma da configuración rexional" -msgid "Jump to entry" -msgstr "Saltar á entrada" +msgid "Locale encoding" +msgstr "Codificación da configuración rexional" -msgid "Skip selection (if available)" -msgstr "Saltar selección (si está disponible)" +msgid "Console font" +msgstr "Tipo de letra da consola" -msgid "Reset selection (if available)" -msgstr "Restablecer selección (si está disponible)" +msgid "Back" +msgstr "Volver" -msgid "Select on single select" -msgstr "Seleccionar en selección única" +msgid "Are you sure you want to reset this setting?" +msgstr "Seguro que queres restablecer esta opción?" -msgid "Select on multi select" -msgstr "Seleccionar en selección múltiple" +msgid "Confirm and exit" +msgstr "Confirmar e saír" -msgid "Reset" -msgstr "Restablecer" +msgid "Cancel" +msgstr "Cancelar" -msgid "Skip selection menu" -msgstr "Saltar el menú de selección" +msgid "Password strength: Weak" +msgstr "Forza do contrasinal: débil" -msgid "Start search mode" -msgstr "Iniciar modo de búsqueda" +msgid "Password strength: Moderate" +msgstr "Forza do contrasinal: moderada" -msgid "Exit search mode" -msgstr "Salir do modo de búsqueda" +msgid "Password strength: Strong" +msgstr "Forza do contrasinal: forte" -msgid "General" -msgstr "" +msgid "Confirm password" +msgstr "Confirma o contrasinal" -#, fuzzy -msgid "Navigation" -msgstr "Guardar configuración" +msgid "The password did not match, please try again" +msgstr "O contrasinal non coincide; téntao de novo" -#, fuzzy -msgid "Selection" -msgstr "Seleccione regiones" +msgid "Not a valid directory" +msgstr "Non é un directorio válido" -msgid "Search" -msgstr "" +msgid "Do you really want to abort?" +msgstr "Seguro que queres abortar?" -msgid "Down" -msgstr "" +msgid "Add a custom repository" +msgstr "Engadir un repositorio personalizado" -msgid "Up" -msgstr "" +msgid "Change custom repository" +msgstr "Cambiar o repositorio personalizado" -#, fuzzy -msgid "Confirm" -msgstr "Confirmar e salir" +msgid "Delete custom repository" +msgstr "Eliminar o repositorio personalizado" -#, fuzzy -msgid "Focus right" -msgstr "Mover a la dereita" +msgid "Enter a repository name" +msgstr "Introduce un nome para o repositorio" -#, fuzzy -msgid "Focus left" -msgstr "Mover a la esquerda" +msgid "Name" +msgstr "Nome" -msgid "Toggle" -msgstr "" +msgid "Enter the repository url" +msgstr "Introduce o URL do repositorio" -#, fuzzy -msgid "Show/Hide help" -msgstr "Mostrar axuda" +msgid "Url" +msgstr "URL" -msgid "Quit" -msgstr "" +msgid "Select signature check" +msgstr "Selecciona a comprobación de sinatura" -msgid "First" -msgstr "" +msgid "Signature check" +msgstr "Comprobación de sinatura" -msgid "Last" -msgstr "" +msgid "Select signature option" +msgstr "Selecciona a opción de sinatura" -#, fuzzy -msgid "Select" -msgstr "Seleccione regiones" +msgid "Add a custom server" +msgstr "Engadir un servidor personalizado" -msgid "Page Up" -msgstr "" +msgid "Change custom server" +msgstr "Cambiar o servidor personalizado" -msgid "Page Down" -msgstr "" +msgid "Delete custom server" +msgstr "Eliminar o servidor personalizado" -#, fuzzy -msgid "Page up" -msgstr "Grupo de paquetes:" +msgid "Enter server url" +msgstr "Introduce o URL do servidor" -#, fuzzy -msgid "Page down" -msgstr "Bajar" +msgid "Select regions" +msgstr "Selecciona as rexións" -msgid "Page Left" -msgstr "" +msgid "Add custom servers" +msgstr "Engadir servidores personalizados" -#, fuzzy -msgid "Page Right" -msgstr "Mover a la dereita" +msgid "Add custom repository" +msgstr "Engadir repositorio personalizado" -msgid "Cursor up" -msgstr "" +msgid "Additional repositories" +msgstr "Repositorios adicionais" -#, fuzzy -msgid "Cursor down" -msgstr "Bajar" +msgid "Loading mirror regions..." +msgstr "Cargando as rexións de réplicas..." -#, fuzzy -msgid "Cursor right" -msgstr "Mover a la dereita" +msgid "Select mirror regions to be enabled" +msgstr "Selecciona as rexións de réplicas que activar" -#, fuzzy -msgid "Cursor left" -msgstr "Mover a la esquerda" +msgid "Select optional repositories to be enabled" +msgstr "Selecciona os repositorios opcionais que activar" -msgid "Top" -msgstr "" +msgid "Unicode font coverage for most languages" +msgstr "cobertura Unicode para a maioría dos idiomas" -msgid "Bottom" -msgstr "" +msgid "color emoji for browsers and apps" +msgstr "emojis a cor para navegadores e aplicacións" -msgid "Home" -msgstr "" +msgid "Chinese, Japanese, Korean characters" +msgstr "caracteres chineses, xaponeses e coreanos" -#, fuzzy -msgid "End" -msgstr "Habilitado" +msgid "Arial/Times/Courier replacement, Cyrillic support for Steam/games" +msgstr "substituto de Arial/Times/Courier, compatibilidade co cirílico para Steam/xogos" -#, fuzzy -msgid "Toggle option" -msgstr "Opciones do subvolumen" +msgid "wide Unicode coverage, good fallback font" +msgstr "ampla cobertura Unicode, bo tipo de letra de reserva" -msgid "Scroll Up" -msgstr "" +msgid "Zram enabled" +msgstr "Zram activado" -#, fuzzy -msgid "Scroll Down" -msgstr "Bajar en vista previa" +#, python-brace-format +msgid "Zram algorithm {}" +msgstr "Algoritmo de zram {}" -msgid "Scroll Left" -msgstr "" +msgid "Bluetooth enabled" +msgstr "Bluetooth activado" -msgid "Scroll Right" -msgstr "" +#, python-brace-format +msgid "Audio server \"{}\"" +msgstr "Servidor de son \"{}\"" -msgid "Scroll Home" -msgstr "" +#, python-brace-format +msgid "Power management \"{}\"" +msgstr "Xestión de enerxía \"{}\"" -msgid "Scroll End" -msgstr "" +msgid "Print service enabled" +msgstr "Servizo de impresión activado" -msgid "Focus Next" -msgstr "" +#, python-brace-format +msgid "Firewall \"{}\"" +msgstr "Devasa \"{}\"" -msgid "Focus Previous" -msgstr "" +#, python-brace-format +msgid "Extra fonts \"{}\"" +msgstr "Tipos de letra adicionais \"{}\"" -msgid "Copy selected text" -msgstr "" +msgid "Passwordless login" +msgstr "Inicio de sesión sen contrasinal" -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.)" +msgid "Second factor login" +msgstr "Inicio de sesión con segundo factor" -msgid "Choose an option to give labwc access to your hardware" -msgstr "Escoxa unha opción para darle a labwc acceso a su hardware" +msgid "Root password set" +msgstr "Contrasinal de root definido" -msgid "niri needs access to your seat (collection of hardware devices i.e. keyboard, mouse, etc)" -msgstr "niri necesita acceso a su asiento (colección de dispositivos de hardware, es decir, teclado, ratón, etc.)" +#, python-brace-format +msgid "Configured {} user(s)" +msgstr "{} usuario(s) configurado(s)" -msgid "Choose an option to give niri access to your hardware" -msgstr "Escoxa unha opción para darle a niri acceso a su hardware" +msgid "U2F set up" +msgstr "U2F configurado" -msgid "Mark/Unmark as ESP" -msgstr "Marcar/Desmarcar como ESP" +#, python-brace-format +msgid "Bootloader \"{}\"" +msgstr "Cargador de arranque \"{}\"" + +msgid "UKI enabled" +msgstr "UKI activado" + +msgid "Removable" +msgstr "Extraíble" + +#, python-brace-format +msgid "Plymouth \"{}\"" +msgstr "Plymouth \"{}\"" + +msgid "Use a best-effort default partition layout" +msgstr "Usar a mellor disposición de particións predeterminada posible" + +msgid "Manual Partitioning" +msgstr "Particionado manual" + +msgid "Pre-mounted configuration" +msgstr "Configuración premontada" + +msgid "Default" +msgstr "Predeterminada" + +msgid "Manual" +msgstr "Manual" + +msgid "Pre-mount" +msgstr "Premontaxe" + +#, python-brace-format +msgid "{} layout" +msgstr "Disposición {}" + +#, python-brace-format +msgid "Devices {}" +msgstr "Dispositivos {}" + +msgid "LVM set up" +msgstr "LVM configurado" + +#, python-brace-format +msgid "{} encryption" +msgstr "Cifrado {}" + +#, python-brace-format +msgid "Btrfs snapshot \"{}\"" +msgstr "Instantánea de Btrfs \"{}\"" + +msgid "Unknown" +msgstr "Descoñecido" + +msgid "Default layout" +msgstr "Disposición predeterminada" + +msgid "No Encryption" +msgstr "Sen cifrado" + +msgid "LUKS" +msgstr "LUKS" + +msgid "LVM on LUKS" +msgstr "LVM sobre LUKS" + +msgid "LUKS on LVM" +msgstr "LUKS sobre LVM" + +#, python-brace-format +msgid "Keyboard layout \"{}\"" +msgstr "Disposición do teclado \"{}\"" + +#, python-brace-format +msgid "Locale language \"{}\"" +msgstr "Idioma da configuración rexional \"{}\"" + +#, python-brace-format +msgid "Locale encoding \"{}\"" +msgstr "Codificación da configuración rexional \"{}\"" + +#, python-brace-format +msgid "Console font \"{}\"" +msgstr "Tipo de letra da consola \"{}\"" + +#, python-brace-format +msgid "Mirror regions \"{}\"" +msgstr "Rexións de réplicas \"{}\"" + +#, python-brace-format +msgid "Optional repositories \"{}\"" +msgstr "Repositorios opcionais \"{}\"" + +msgid "Custom servers set up" +msgstr "Servidores personalizados configurados" + +msgid "Custom repositories set up" +msgstr "Repositorios personalizados configurados" + +msgid "Copy ISO network configuration to installation" +msgstr "Copiar a configuración de rede da ISO á instalación" + +msgid "Use Network Manager (default backend)" +msgstr "Usar Network Manager (backend predeterminado)" + +msgid "Use Network Manager (iwd backend)" +msgstr "Usar Network Manager (backend iwd)" + +msgid "Use standalone iwd" +msgstr "Usar iwd de forma independente" + +msgid "Manual configuration" +msgstr "Configuración manual" msgid "Package group:" msgstr "Grupo de paquetes:" -msgid "Exit archinstall" -msgstr "Salir de archinstall" +msgid "Color enabled" +msgstr "Cor activada" -msgid "Reboot system" -msgstr "Reiniciar el sistema" +#, python-brace-format +msgid "{} graphics driver" +msgstr "Controlador gráfico {}" -msgid "chroot into installation for post-installation configurations" -msgstr "chroot na instalación para configuraciones posteriores a la instalación" +#, python-brace-format +msgid "{} greeter" +msgstr "Xestor de inicio de sesión {}" -msgid "Installation completed" -msgstr "Instalación completada" +msgid "very weak" +msgstr "moi débil" -msgid "What would you like to do next?" -msgstr "¿Qué lle gustaría hacer a continuación?" +msgid "weak" +msgstr "débil" + +msgid "moderate" +msgstr "moderada" + +msgid "strong" +msgstr "forte" + +msgid "Add interface" +msgstr "Engadir interface" + +msgid "Edit interface" +msgstr "Editar interface" + +msgid "Delete interface" +msgstr "Eliminar interface" + +msgid "Select an interface" +msgstr "Selecciona unha interface" + +msgid "You need to enter a valid IP in IP-config mode" +msgstr "Debes introducir unha IP válida no modo de configuración IP" #, python-brace-format msgid "Select which mode to configure for \"{}\"" -msgstr "Seleccione qué modo configurar para \"{}\"" +msgstr "Selecciona que modo configurar para \"{}\"" -msgid "Incorrect credentials file decryption password" -msgstr "Contraseña incorrecta para descifrar el archivo de credenciales" +#, python-brace-format +msgid "Enter the IP and subnet for {} (example: 192.168.0.5/24): " +msgstr "Introduce a IP e a subrede para {} (exemplo: 192.168.0.5/24): " -msgid "Incorrect password" -msgstr "Contraseña incorrecta" +msgid "Enter your gateway (router) IP address (leave blank for none)" +msgstr "Introduce o enderezo IP da túa pasarela (router) (déixao en branco se non hai)" -msgid "Credentials file decryption password" -msgstr "Contraseña para descifrar el archivo de credenciales" +msgid "Enter your DNS servers with space separated (leave blank for none)" +msgstr "Introduce os teus servidores DNS separados por espazos (déixao en branco se non hai)" -msgid "Do you want to encrypt the user_credentials.json file?" -msgstr "¿Desexa encriptar el archivo user_credentials.json?" +msgid "Choose network configuration" +msgstr "Escolle a configuración de rede" -msgid "Credentials file encryption password" -msgstr "Contraseña para cifrar el archivo de credenciales" +msgid "Recommended: Network Manager for desktop, Manual for server" +msgstr "Recomendado: Network Manager para escritorio, Manual para servidor" + +msgid "Configure interfaces" +msgstr "Configurar as interfaces" + +msgid "No network connection found" +msgstr "Non se atopou ningunha conexión de rede" + +msgid "Would you like to connect to a Wifi?" +msgstr "Queres conectarte a unha wifi?" + +msgid "No wifi interface found" +msgstr "Non se atopou ningunha interface wifi" + +msgid "No wifi networks found" +msgstr "Non se atopou ningunha rede wifi" + +msgid "Select wifi network to connect to" +msgstr "Selecciona a rede wifi á que conectarte" + +msgid "Scanning wifi networks..." +msgstr "Buscando redes wifi..." + +msgid "Failed setting up wifi" +msgstr "Produciuse un erro ao configurar a wifi" + +msgid "Enter wifi password" +msgstr "Introduce o contrasinal da wifi" #, python-brace-format msgid "Repositories: {}" msgstr "Repositorios: {}" -msgid "New version available" -msgstr "Nova versión disponible" +msgid "Loading packages..." +msgstr "Cargando os paquetes..." -msgid "Passwordless login" -msgstr "Inicio de sesión sin contraseña" - -msgid "Second factor login" -msgstr "Inicio de sesión con factor secundario" - -msgid "Bluetooth" -msgstr "Bluetooth" - -msgid "Would you like to configure Bluetooth?" -msgstr "¿Desexa configurar Bluetooth?" - -msgid "Print service" -msgstr "Servicio de impresión" - -msgid "Would you like to configure the print service?" -msgstr "¿Desexa configurar el servicio de impresión?" - -msgid "Power management" -msgstr "Administración de energía" - -msgid "Authentication" -msgstr "Autenticación" - -msgid "Applications" -msgstr "Aplicacións" - -msgid "U2F login method: " -msgstr "Método de inicio de sesión U2F: " - -msgid "Passwordless sudo: " -msgstr "Sudo sen contraseña: " - -#, python-brace-format -msgid "Btrfs snapshot type: {}" -msgstr "Tipo de snapshot Btrfs: {}" - -msgid "Syncing the system..." -msgstr "Sincronizando o sistema..." - -msgid "Value cannot be empty" -msgstr "O valor no pode estár vacío" - -msgid "Snapshot type" -msgstr "Tipo de snapshot" - -#, python-brace-format -msgid "Snapshot type: {}" -msgstr "Tipo de snapshot: {}" - -msgid "U2F login setup" -msgstr "Configuración de inicio de sesión U2F" - -msgid "No U2F devices found" -msgstr "No se encontró dispositivos U2F" - -msgid "U2F Login Method" -msgstr "Método de inicio de sesión U2F" - -msgid "Enable passwordless sudo?" -msgstr "Habilitar sudo sin contraseña?" - -#, python-brace-format -msgid "Setting up U2F device for user: {}" -msgstr "Configurando dispositivo U2F para usuario: {}" - -msgid "You may need to enter the PIN and then touch your U2F device to register it" -msgstr "pode que deba ingresar su PIN antes de tocar su dispositivo U2F para registrarlo" - -msgid "Starting device modifications in " -msgstr "Iniciando modificaciones en dispositivo en " - -msgid "No network connection found" -msgstr "No se encontró unha conección de red" - -msgid "Would you like to connect to a Wifi?" -msgstr "¿Desexa conectarse a Wifi?" - -msgid "No wifi interface found" -msgstr "No se encontró ningunha interfaz de wifi" - -msgid "Select wifi network to connect to" -msgstr "Seleccione unha red de wifi para conectarse" - -msgid "Scanning wifi networks..." -msgstr "Buscando redes de wifi..." - -msgid "No wifi networks found" -msgstr "No se encontró redes de wifi" - -msgid "Failed setting up wifi" -msgstr "Error configurando wifi" - -msgid "Enter wifi password" -msgstr "Ingrese contraseña de wifi" - -msgid "Ok" -msgstr "Ok" - -msgid "Removable" -msgstr "Desmontable" - -msgid "Install to removable location" -msgstr "Instalar a ubicación desmontable" - -msgid "Will install to /EFI/BOOT/ (removable location)" -msgstr "Se instalarase en /EFI/BOOT/ (ubicación desmontable)" - -msgid "Will install to standard location with NVRAM entry" -msgstr "Se instalarase en ubicación estandar con entrada NVRAM" - -msgid "Would you like to install the bootloader to the default removable media search location?" -msgstr "¿Desexa instalar el xestor de arranque na ubicación predeterminada de búsqueda de medios desmontables?" - -msgid "This installs the bootloader to /EFI/BOOT/BOOTX64.EFI (or similar) which is useful for:" -msgstr "Esto instala el xestor de arranque en /EFI/BOOT/BOOTX64.EFI (o similar) lo cual es útil para:" - -msgid "USB drives or other portable external media." -msgstr "Disco USB u otros medios portátiles externos." - -msgid "Systems where you want the disk to be bootable on any computer." -msgstr "Sistemas donde quiere que el disco sea arrancable en cualquier computadora." - -msgid "Firmware that does not properly support NVRAM boot entries." -msgstr "Firmware que non soporta entradas arrancables NVRAM." - -msgid "Will install to /EFI/BOOT/ (removable location, safe default)" -msgstr "Instalarase a /EFI/BOOT/ (ubicación desmontable, segura por defecto)" - -msgid "Will install to custom location with NVRAM entry" -msgstr "Instalarase a ubicación personalizada con entrada NVRAM" - -msgid "Firmware that does not properly support NVRAM boot entries like most MSI motherboards," -msgstr "Firmware que non soporta entradas arrancables NVRAM como la mayoría das placas MSI," - -msgid "most Apple Macs, many laptops..." -msgstr "A mayoría das Macs Apple, moitas laptops..." - -msgid "Language" -msgstr "Idioma local" - -msgid "Compression algorithm" -msgstr "Algoritmo de compresión" +msgid "No packages found" +msgstr "Non se atopou ningún paquete" msgid "Only packages such as base, sudo, linux, linux-firmware, efibootmgr and optional profile packages are installed." -msgstr "Solo paquetes como base, base-devel, linux, linux-firmware, efibootmgr y paquetes opcionales de perfil se instalan." +msgstr "Só se instalan paquetes como base, sudo, linux, linux-firmware, efibootmgr e os paquetes opcionais do perfil." -msgid "Select zram compression algorithm:" -msgstr "Seleccione algorimto de compresión zram:" +msgid "Note: base-devel is no longer installed by default. Add it here if you need build tools." +msgstr "Nota: base-devel xa non se instala por defecto. Engádeo aquí se necesitas ferramentas de compilación." -msgid "Use Network Manager (default backend)" -msgstr "Usar xestor de Red (backend por defecto)" +msgid "Select any packages from the below list that should be installed additionally" +msgstr "Selecciona da seguinte lista os paquetes adicionais que queiras instalar" -msgid "Use Network Manager (iwd backend)" -msgstr "Usar xestor de Red (backend iwd)" - -msgid "Firewall" -msgstr "" - -#, fuzzy -msgid "Select audio configuration" -msgstr "Guardar configuración de usuario" - -#, fuzzy -msgid "Enter credentials file decryption password" -msgstr "Contraseña para descifrar el archivo de credenciales" - -#, fuzzy -msgid "Enter root password" -msgstr "Ingrese unha contraseña: " - -msgid "Select bootloader to install" -msgstr "" - -#, fuzzy -msgid "Configuration preview" -msgstr "Configuración" - -#, fuzzy -msgid "Enter a directory for the configuration(s) to be saved" -msgstr "Ingrese un directorio para guardar a(s) configuración(es): " - -#, fuzzy -msgid "Select encryption type" -msgstr "Tipo de cifrado" - -#, fuzzy -msgid "Select disks for the installation" -msgstr "Nome do host desexado para a instalación: " - -#, fuzzy -msgid "Enter a mountpoint" -msgstr "Seleccione un punto de montaje :" - -#, fuzzy, python-brace-format -msgid "Enter a size (default: {}): " -msgstr "Ingrese el final (predeterminado: {}): " - -#, fuzzy -msgid "Enter subvolume name" -msgstr "Nome do subvolumen" - -#, fuzzy -msgid "Enter subvolume mountpoint" -msgstr "Punto de montaje do subvolumen" - -#, fuzzy -msgid "Select a disk configuration" -msgstr "Configuración do disco" - -#, fuzzy -msgid "Enter root mount directory" -msgstr "Directorio de montaxe raíz" - -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 "Cambiar el sistema de archivos" - -msgid "Enter a hostname" -msgstr "" - -#, fuzzy -msgid "Select timezone" -msgstr "Seleccione unha zona horaria" - -#, fuzzy -msgid "Enter the number of parallel downloads to be enabled" -msgstr "" -"Ingrese el número de descargas paralelas que se habilitarán.\n" -"\n" -"Nota:\n" +#, python-brace-format +msgid "Enter the number of parallel downloads (1-{})" +msgstr "Introduce o número de descargas paralelas (1-{})" #, python-brace-format msgid "Value must be between 1 and {}" -msgstr "" +msgstr "O valor debe estar entre 1 e {}" -#, fuzzy -msgid "Select which kernel(s) to install" -msgstr "Por favor, elixa qué xestor de inicio de sesión instalar" +msgid "Enable colored output for pacman" +msgstr "Activar a saída con cores para pacman" -#, fuzzy -msgid "Enter a respository name" -msgstr "Nome do repositorio" +msgid "Pacman is already running, waiting maximum 10 minutes for it to terminate." +msgstr "Pacman xa se está a executar; agardarase un máximo de 10 minutos a que remate." -#, fuzzy -msgid "Enter the repository url" -msgstr "Cambiar el repositorio personalizado" +msgid "Pre-existing pacman lock never exited. Please clean up any existing pacman sessions before using archinstall." +msgstr "O bloqueo preexistente de pacman nunca rematou. Limpa calquera sesión de pacman existente antes de usar archinstall." -#, fuzzy -msgid "Enter server url" -msgstr "URL do servidor" +msgid "The proprietary Nvidia driver is not supported by Sway." +msgstr "Sway non admite o controlador privativo de Nvidia." -#, fuzzy -msgid "Select mirror regions to be enabled" -msgstr "Regiones de espejo seleccionadas" +msgid "It is likely that you will run into issues, are you okay with that?" +msgstr "É probable que teñas problemas. Estás de acordo?" -#, fuzzy -msgid "Select optional repositories to be enabled" -msgstr "Escoxa qué repositorios adicionais opcionales habilitar" +msgid "Selected profiles: " +msgstr "Perfís seleccionados: " -#, fuzzy -msgid "Select an interface" -msgstr "Eliminar intefaz" - -#, fuzzy -msgid "Choose network configuration" -msgstr "Sin configuración de red" - -#, fuzzy -msgid "No packages found" -msgstr "No se encontró dispositivos U2F" - -#, fuzzy msgid "Select which greeter to install" -msgstr "Por favor, elixa qué xestor de inicio de sesión instalar" +msgstr "Selecciona que xestor de inicio de sesión instalar" -#, fuzzy msgid "Select a profile type" -msgstr "Perfiles seleccionados: " - -#, fuzzy -msgid "Enter new password" -msgstr "Ingrese contraseña de wifi" - -msgid "Enter a username" -msgstr "" - -#, fuzzy -msgid "Enter a password" -msgstr "Ingrese unha contraseña: " - -#, fuzzy -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 :" - -#~ msgid "Value :" -#~ msgstr "Valor :" +msgstr "Selecciona un tipo de perfil" #, python-brace-format -#~ msgid "Edit {origkey} :" -#~ msgstr "Editar {origkey} :" +msgid "Unable to fetch profile from specified url: {}" +msgstr "Non se puido obter o perfil do URL especificado: {}" -#~ msgid "Copy to :" -#~ msgstr "Copiar a :" +#, python-brace-format +msgid "Profiles must have unique name, but profile definitions with duplicate name found: {}" +msgstr "Os perfís deben ter un nome único, pero atopáronse definicións de perfil con nomes duplicados: {}" -#~ msgid "Edite :" -#~ msgstr "Editar :" +msgid "Add a user" +msgstr "Engadir un usuario" -#~ msgid "Key :" -#~ msgstr "Clave :" +msgid "Change password" +msgstr "Cambiar o contrasinal" + +msgid "Promote/Demote user" +msgstr "Ascender/Degradar usuario" + +msgid "Delete User" +msgstr "Eliminar usuario" + +msgid "User" +msgstr "Usuario" + +msgid "Enter new password" +msgstr "Introduce o novo contrasinal" + +msgid "The username you entered is invalid" +msgstr "O nome de usuario que introduciches non é válido" + +msgid "Enter a username" +msgstr "Introduce un nome de usuario" + +msgid "Username" +msgstr "Nome de usuario" + +msgid "Enter a password" +msgstr "Introduce un contrasinal" + +#, python-brace-format +msgid "Should \"{}\" be a superuser (sudo)?\n" +msgstr "Debería \"{}\" ser superusuario (sudo)?\n" + +#, python-brace-format +msgid "About to upload \"{}\" to the publicly accessible {}" +msgstr "Vaise subir \"{}\" a {}, que é accesible publicamente" + +msgid "Do you want to continue?" +msgstr "Queres continuar?" + +#, python-brace-format +msgid "Log uploaded successfully. URL: {}" +msgstr "O rexistro subiuse correctamente. URL: {}" + +msgid "Failed to upload log." +msgstr "Produciuse un erro ao subir o rexistro." + +msgid "Archinstall requires root privileges to run. See --help for more." +msgstr "Archinstall precisa privilexios de root para executarse. Consulta --help para máis información." + +msgid "New version available" +msgstr "Hai unha nova versión dispoñible" + +msgid "Starting device modifications in " +msgstr "Comezando as modificacións nos dispositivos en " + +msgid "Ok" +msgstr "Aceptar" + +msgid "Input cannot be empty" +msgstr "A entrada non pode estar baleira" + +msgid "Yes" +msgstr "Si" + +msgid "No" +msgstr "Non" + +msgid " (default)" +msgstr " (predeterminado)" From 39dbebf26c9b280ffd1534526c8dd440d6623818 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 18 Jul 2026 21:16:43 +1000 Subject: [PATCH 03/16] Update pre-commit hook astral-sh/ruff-pre-commit to v0.15.22 (#4637) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 188bbcf3..a26b0696 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.21 + rev: v0.15.22 hooks: # fix unused imports and sort them - id: ruff From b0bfb4366122f04dc9722fe8891cf113e0894711 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 18 Jul 2026 21:17:15 +1000 Subject: [PATCH 04/16] Update dependency ruff to v0.15.22 (#4636) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 6c6ac0c2..ce725c3a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -37,7 +37,7 @@ dev = [ "mypy==2.3.0", "flake8==7.3.0", "pre-commit==4.6.0", - "ruff==0.15.21", + "ruff==0.15.22", "pylint==4.0.6", "pytest==9.1.1", "hypothesis>=6.152.4", From b6d8fe25a14bb5e765b210aff65ea446ff32ad1f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 21 Jul 2026 20:39:28 +1000 Subject: [PATCH 05/16] Update dependency arch/python-markdown-it-py to v4.2.0 (#4644) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index ce725c3a..5a5e3e36 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -22,7 +22,7 @@ dependencies = [ "pydantic==2.13.4", "cryptography==49.0.0", "textual==8.2.8", - "markdown-it-py==4.0.0", + "markdown-it-py==4.2.0", "linkify-it-py==2.1.0", ] From 2751716d2e484b96b9c80e712276d1ef9ee440a2 Mon Sep 17 00:00:00 2001 From: codefiles <11915375+codefiles@users.noreply.github.com> Date: Tue, 21 Jul 2026 06:44:10 -0400 Subject: [PATCH 06/16] Set LANG to fully qualified locale name (#4645) --- archinstall/lib/installer.py | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/archinstall/lib/installer.py b/archinstall/lib/installer.py index 985e16cd..ca13cf12 100644 --- a/archinstall/lib/installer.py +++ b/archinstall/lib/installer.py @@ -660,16 +660,12 @@ class Installer: # in the first column of the entry; check for both cases. entry_re = re.compile(rf'#{lang}(\.{encoding})?{modifier} {encoding}') - lang_value = None for index, line in enumerate(locale_gen_lines): if entry_re.match(line): - uncommented_line = line.removeprefix('#') - locale_gen_lines[index] = uncommented_line + locale_gen_lines[index] = line.removeprefix('#') locale_gen.write_text(''.join(locale_gen_lines)) - lang_value = uncommented_line.split()[0] break - - if lang_value is None: + else: error(f"Invalid locale: language '{locale_config.sys_lang}', encoding '{locale_config.sys_enc}'") return False @@ -679,7 +675,7 @@ class Installer: error(f'Failed to run locale-gen on target: {e}') return False - (self.target / 'etc/locale.conf').write_text(f'LANG={lang_value}\n') + (self.target / 'etc/locale.conf').write_text(f'LANG={lang}.{encoding}{modifier}\n') return True def set_timezone(self, zone: str) -> bool: From 2f344a84ff6f7e1f28d133ebc591b2a6f725dbe9 Mon Sep 17 00:00:00 2001 From: codefiles <11915375+codefiles@users.noreply.github.com> Date: Tue, 21 Jul 2026 06:50:56 -0400 Subject: [PATCH 07/16] Remove redundant is_valid_path (#4646) --- archinstall/lib/args.py | 7 +++---- archinstall/lib/utils/util.py | 5 ----- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/archinstall/lib/args.py b/archinstall/lib/args.py index 95869c2f..3d372625 100644 --- a/archinstall/lib/args.py +++ b/archinstall/lib/args.py @@ -35,7 +35,6 @@ from archinstall.lib.models.users import Password, User, UserSerialization from archinstall.lib.plugins import load_plugin from archinstall.lib.translationhandler import Language, tr, translation_handler from archinstall.lib.utils.format import as_key_value_pair -from archinstall.lib.utils.util import is_valid_path from archinstall.lib.version import get_version from archinstall.tui.components import tui @@ -404,7 +403,7 @@ class ArchConfig: ) -> None: save_path = dest_path or DEFAULT_SAVE_PATH - if not is_valid_path(save_path): + if not save_path.is_dir(): warn( f'Destination directory {save_path} does not exist or is not a directory\n.', 'Configuration files can not be saved', @@ -416,7 +415,7 @@ class ArchConfig: self.save_user_creds(save_path, password=password) def save_user_config(self, dest_path: Path) -> None: - if not is_valid_path(dest_path): + if not dest_path.is_dir(): error(f'Invalid path {dest_path}. User configuration could not be saved.') return @@ -430,7 +429,7 @@ class ArchConfig: dest_path: Path, password: str | None = None, ) -> None: - if not is_valid_path(dest_path): + if not dest_path.is_dir(): error(f'Invalid path {dest_path}. User credentials could not be saved.') return diff --git a/archinstall/lib/utils/util.py b/archinstall/lib/utils/util.py index a0c34f5f..f94ca18c 100644 --- a/archinstall/lib/utils/util.py +++ b/archinstall/lib/utils/util.py @@ -1,7 +1,6 @@ import secrets import string from datetime import UTC, datetime -from pathlib import Path from archinstall.lib.pathnames import ARCHISO_MOUNTPOINT from archinstall.lib.utils.format import as_columns @@ -47,7 +46,3 @@ def format_cols(items: list[str], header: str | None = None) -> str: # remove whitespaces on each row text = '\n'.join(t.strip() for t in text.split('\n')) return text - - -def is_valid_path(path: Path) -> bool: - return path.exists() and path.is_dir() From 91d6d4dca15601c779b7d5a2eec8bc84ff6f8c4e Mon Sep 17 00:00:00 2001 From: Ksan Date: Tue, 21 Jul 2026 11:02:55 +0000 Subject: [PATCH 08/16] Add Serbian translation (#4642) --- archinstall/locales/sr/LC_MESSAGES/base.mo | Bin 0 -> 32368 bytes archinstall/locales/sr/LC_MESSAGES/base.po | 1203 ++++++++++++++++++++ 2 files changed, 1203 insertions(+) create mode 100644 archinstall/locales/sr/LC_MESSAGES/base.mo create mode 100644 archinstall/locales/sr/LC_MESSAGES/base.po diff --git a/archinstall/locales/sr/LC_MESSAGES/base.mo b/archinstall/locales/sr/LC_MESSAGES/base.mo new file mode 100644 index 0000000000000000000000000000000000000000..59cc1559786002d1110dd3fd7ce79bb1e747b35f GIT binary patch literal 32368 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.ZxCL9i;W75%Q}^LD*A@ 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 VAr`}_`7gzw94?<8eX!CS{9iFXAFu!b literal 0 HcmV?d00001 diff --git a/archinstall/locales/sr/LC_MESSAGES/base.po b/archinstall/locales/sr/LC_MESSAGES/base.po new file mode 100644 index 00000000..489eebd2 --- /dev/null +++ b/archinstall/locales/sr/LC_MESSAGES/base.po @@ -0,0 +1,1203 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Last-Translator: Ksan Đorđe \n" +"Language-Team: \n" +"Language: sr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" + +msgid "Recommended" +msgstr "Preporučeno" + +msgid "Package" +msgstr "Paket" + +msgid "Curated selection of KDE Plasma packages" +msgstr "Odabrani skup KDE Plasma paketa" + +msgid "Dependencies" +msgstr "Zavisnosti" + +msgid "Package group" +msgstr "Grupa paketa" + +msgid "Extensive KDE Plasma installation" +msgstr "Opsežna KDE Plasma instalacija" + +msgid "Packages in group" +msgstr "Paketi u grupi" + +msgid "Minimal KDE Plasma installation" +msgstr "Minimalna KDE Plasma instalacija" + +msgid "Type" +msgstr "Tip" + +msgid "Description" +msgstr "Opis" + +msgid "Select a flavor of KDE Plasma to install" +msgstr "Izaberite varijantu KDE Plasma za instalaciju" + +#, python-brace-format +msgid "{} needs access to your seat" +msgstr "{} zahteva pristup vašem sedištu (seat)" + +msgid "collection of hardware devices i.e. keyboard, mouse" +msgstr "skup hardverskih uređaja tj. tastatura, miš" + +#, python-brace-format +msgid "Choose an option how to give {} access to your hardware" +msgstr "Izaberite opciju kako da date {} pristup vašem hardveru" + +#, python-brace-format +msgid "Environment type: {} {}" +msgstr "Tip okruženja: {} {}" + +#, python-brace-format +msgid "Environment type: {}" +msgstr "Tip okruženja: {}" + +msgid "Installed packages" +msgstr "Instalirani paketi" + +msgid "Bluetooth" +msgstr "Bluetooth" + +msgid "Audio" +msgstr "Audio" + +msgid "Print service" +msgstr "Servis štampanja" + +msgid "Power management" +msgstr "Upravljanje napajanjem" + +msgid "Firewall" +msgstr "Zaštitni zid" + +msgid "Additional fonts" +msgstr "Dodatni fontovi" + +msgid "Enabled" +msgstr "Upaljeno" + +msgid "Disabled" +msgstr "Ugašeno" + +msgid "Would you like to configure Bluetooth?" +msgstr "Da li bi željeli da podesite Bluetooth?" + +msgid "Would you like to configure the print service?" +msgstr "Da li bi željeli da podesite servis štampanja?" + +msgid "Select audio configuration" +msgstr "Izaberite audio konfiguraciju" + +msgid "Select font packages to install" +msgstr "Izaberite pakete fontova za instalaciju" + +msgid "ArchInstall Language" +msgstr "ArchInstall jezik" + +msgid "Version" +msgstr "Verzija" + +msgid "Installation Script" +msgstr "Instalaciona skripta" + +msgid "Locales" +msgstr "Lokali" + +msgid "Disk configuration" +msgstr "Konfiguracija diska" + +msgid "Profile" +msgstr "Profil" + +msgid "Mirrors and repositories" +msgstr "Mirori i repozitorijumi" + +msgid "Network" +msgstr "Mreža" + +msgid "Bootloader" +msgstr "Bootloader" + +msgid "Application" +msgstr "Aplikacija" + +msgid "Authentication" +msgstr "Autentifikacija" + +msgid "Swap" +msgstr "Swap" + +msgid "Hostname" +msgstr "Ime hosta" + +msgid "Kernels" +msgstr "Kerneli" + +msgid "Automatic time sync (NTP)" +msgstr "Automatska sinhronizacija vremena (NTP)" + +msgid "Timezone" +msgstr "Vremenska zona" + +msgid "Services" +msgstr "Servisi" + +msgid "Additional packages" +msgstr "Dodatni paketi" + +msgid "Pacman" +msgstr "Pacman" + +msgid "Custom commands" +msgstr "Prilagođene komande" + +msgid "Users" +msgstr "Korisnici" + +msgid "Root encrypted password" +msgstr "Šifrovana root lozinka" + +msgid "Disk encryption password" +msgstr "Lozinka za šifrovanje diska" + +msgid "Incorrect credentials file decryption password" +msgstr "Neispravna lozinka za dešifrovanje datoteke sa podacima za prijavu" + +msgid "Enter credentials file decryption password" +msgstr "Unesite lozinku za dešifrovanje datoteke sa podacima za prijavu" + +msgid "Incorrect password" +msgstr "Netačna lozinka" + +#, python-brace-format +msgid "Setting up U2F login: {}" +msgstr "Podešavanje U2F prijave: {}" + +#, python-brace-format +msgid "Setting up U2F device for user: {}" +msgstr "Podešavanje U2F uređaja za korisnika: {}" + +msgid "You may need to enter the PIN and then touch your U2F device to register it" +msgstr "Možda ćete morati da unesete PIN i zatim dodirnete vaš U2F uređaj da biste ga registrovali" + +msgid "Root password" +msgstr "Root lozinka" + +msgid "User account" +msgstr "Korisnički nalog" + +msgid "U2F login setup" +msgstr "Podešavanje U2F prijave" + +msgid "U2F login method: " +msgstr "Metod U2F prijave: " + +msgid "Passwordless sudo: " +msgstr "Sudo bez lozinke: " + +msgid "No U2F devices found" +msgstr "Nije pronađen nijedan U2F uređaj" + +msgid "Enter root password" +msgstr "Unesite root lozinku" + +msgid "Enable passwordless sudo?" +msgstr "Omogućiti sudo bez lozinke?" + +msgid "Unified kernel images" +msgstr "Objedinjene slike kernela (UKI)" + +msgid "Install to removable location" +msgstr "Instaliraj na prenosivu lokaciju" + +msgid "Plymouth" +msgstr "Plymouth" + +msgid "Will install to /EFI/BOOT/ (removable location, safe default)" +msgstr "Instaliraće se u /EFI/BOOT/ (prenosiva lokacija, bezbedna podrazumevana opcija)" + +msgid "Will install to custom location with NVRAM entry" +msgstr "Instaliraće se na prilagođenu lokaciju sa NVRAM unosom" + +msgid "Plymouth adds a cosmetic boot splash but can cause boot problems on some setups:" +msgstr "Plymouth dodaje kozmetički ekran pri pokretanju, ali može izazvati probleme pri pokretanju na nekim konfiguracijama:" + +msgid "black screen with the NVIDIA driver" +msgstr "crn ekran sa NVIDIA drajverom" + +msgid "hidden password prompt with disk encryption (LUKS)" +msgstr "skriven upit za lozinku pri šifrovanju diska (LUKS)" + +msgid "Would you like to enable it?" +msgstr "Da li želite da ga omogućite?" + +msgid "Would you like to use unified kernel images?" +msgstr "Da li želite da koristite ujedinjene slike kernela (UKI)?" + +msgid "Would you like to install the bootloader to the default removable media search location?" +msgstr "Da li želite da instalirate bootloader na podrazumevanu lokaciju za pretragu prenosivih medija?" + +msgid "This installs the bootloader to /EFI/BOOT/BOOTX64.EFI (or similar) which is useful for:" +msgstr "Ovo instalira bootloader u /EFI/BOOT/BOOTX64.EFI (ili slično) što je korisno za:" + +msgid "Firmware that does not properly support NVRAM boot entries like most MSI motherboards," +msgstr "Firmver koji ne podržava pravilno NVRAM unose za pokretanje, kao većina MSI matičnih ploča," + +msgid "most Apple Macs, many laptops..." +msgstr "većina Apple Mac računara, mnogi laptopovi..." + +msgid "USB drives or other portable external media." +msgstr "USB diskovi ili drugi prenosivi spoljni mediji." + +msgid "Systems where you want the disk to be bootable on any computer." +msgstr "Sistemi gde želite da disk bude pokretljiv na bilo kom računaru." + +msgid "Select bootloader to install" +msgstr "Izaberite bootloader za instalaciju" + +msgid "UEFI is not detected and some options are disabled" +msgstr "UEFI nije detektovan i neke opcije su ugašene" + +msgid "Select Plymouth theme" +msgstr "Izaberite Plymouth temu" + +msgid "The specified configuration will be applied" +msgstr "Navedena konfiguracija će biti primjenjena" + +msgid "Would you like to continue?" +msgstr "Da li želite da nastavite?" + +msgid "Configuration preview" +msgstr "Pregled konfiguracije" + +msgid "No configuration" +msgstr "Bez konfiguracije" + +msgid "Save user configuration (including disk layout)" +msgstr "Sačuvaj korisničku konfiguraciju (uključujući raspored diska)" + +msgid "Save user credentials" +msgstr "Sačuvaj podatke za prijavu korisnika" + +msgid "Save all" +msgstr "Sačuvaj sve" + +msgid "Enter a directory for the configuration(s) to be saved" +msgstr "Unesite direktorijum u koji će konfiguracija(e) biti sačuvana(e)" + +#, python-brace-format +msgid "Do you want to save the configuration file(s) to {}?" +msgstr "Da li želite da sačuvate konfiguracionu datoteku(e) u {}?" + +msgid "Do you want to encrypt the user_credentials.json file?" +msgstr "Da li želite da šifrujete datoteku user_credentials.json?" + +msgid "Credentials file encryption password" +msgstr "Lozinka za šifrovanje datoteke sa podacima za prijavu" + +msgid "Partitioning" +msgstr "Particionisanje" + +msgid "Disk encryption" +msgstr "Šifrovanje diska" + +#, python-brace-format +msgid "Configuration type: {}" +msgstr "Tip konfiguracije: {}" + +msgid "Mountpoint" +msgstr "Tačka montiranja" + +msgid "Configuration" +msgstr "Konfiguracija" + +msgid "Wipe" +msgstr "Obriši" + +msgid "Physical volumes" +msgstr "Fizički volumeni" + +msgid "Volumes" +msgstr "Volumeni" + +#, python-brace-format +msgid "Snapshot type: {}" +msgstr "Tip snimka: {}" + +msgid "LVM disk encryption with more than 2 partitions is currently not supported" +msgstr "LVM šifrovanje diska sa više od 2 particije trenutno nije podržano" + +msgid "Encryption type" +msgstr "Tip šifrovanja" + +msgid "Password" +msgstr "Lozinka" + +msgid "Iteration time" +msgstr "Vrijeme iteracije" + +msgid "No disks were detected. A disk is required to be able to install Arch Linux" +msgstr "Nijedan disk nije detektovan. Disk je neophodan da biste mogli da instalirate Arch Linux" + +msgid "Select disks for the installation" +msgstr "Izaberite diskove za instalaciju" + +msgid "Partitions" +msgstr "Particije" + +msgid "Select a disk configuration" +msgstr "Izaberite konfiguraciju diska" + +msgid "Enter root mount directory" +msgstr "Unesite root direktorijum montiranja" + +msgid "You will use whatever drive-setup is mounted at the specified directory" +msgstr "Koristićete podešavanje diskova koje je montirano na navedenoj putanji" + +msgid "WARNING: Archinstall won't check the suitability of this setup" +msgstr "UPOZORENJE: Archinstall neće proveravati prikladnost ovog podešavanja" + +msgid "Select main filesystem" +msgstr "Izaberite glavni fajl sistem" + +msgid "Would you like to use compression or disable CoW?" +msgstr "Da li želite da koristite kompresiju ili da ugasite CoW?" + +msgid "Use compression" +msgstr "Koristi kompresiju" + +msgid "Disable Copy-on-Write" +msgstr "Ugasi Copy-on-Write" + +msgid "Would you like to use BTRFS subvolumes with a default structure?" +msgstr "Da li želite da koristite BTRFS podvolumene sa podrazumevanom strukturom?" + +msgid "Would you like to create a separate partition for /home?" +msgstr "Da li želite da kreirate posebnu particiju za /home?" + +msgid "The selected drives do not have the minimum capacity required for an automatic suggestion\n" +msgstr "Izabrani diskovi nemaju minimalni kapacitet potreban za automatski prijedlog\n" + +#, python-brace-format +msgid "Minimum capacity for /home partition: {}GiB\n" +msgstr "Minimalni kapacitet za /home particiju: {}GiB\n" + +#, python-brace-format +msgid "Minimum capacity for Arch Linux partition: {}GiB" +msgstr "Minimalni kapacitet za Arch Linux particiju: {}GiB" + +msgid "Encryption password" +msgstr "Lozinka za šifrovanje" + +msgid "LVM volumes" +msgstr "LVM volumeni" + +msgid "HSM" +msgstr "HSM" + +msgid "Partitions to be encrypted" +msgstr "Particije koje treba šifrovati" + +msgid "LVM volumes to be encrypted" +msgstr "LVM volumeni koje treba šifrovati" + +msgid "HSM device" +msgstr "HSM uređaj" + +msgid "Select encryption type" +msgstr "Izaberite tip šifrovanja" + +msgid "Enter disk encryption password (leave blank for no encryption)" +msgstr "Unesite lozinku za šifrovanje diska (ostavite prazno ako ne želite šifrovanje)" + +msgid "Select a FIDO2 device to use for HSM" +msgstr "Izaberite FIDO2 uređaj za korišćenje kao HSM" + +msgid "Enter iteration time for LUKS encryption (in milliseconds)" +msgstr "Unesite vrijeme iteracije za LUKS šifrovanje (u milisekundama)" + +msgid "Higher values increase security but slow down boot time" +msgstr "Veće vrijednosti povećavaju bezbednost ali usporavaju pokretanje sistema" + +#, python-brace-format +msgid "Default: {}ms, Recommended range: 1000-60000" +msgstr "Podrazumevano: {}ms, Preporučeni opseg: 1000-60000" + +msgid "Iteration time must be at least 100ms" +msgstr "Vrijeme iteracije mora biti najmanje 100ms" + +msgid "Iteration time must be at most 120000ms" +msgstr "Vrijeme iteracije mora biti najviše 120000ms" + +msgid "Please enter a valid number" +msgstr "Molimo unesite ispravan broj" + +msgid "Suggest partition layout" +msgstr "Predloži raspored particija" + +msgid "Remove all newly added partitions" +msgstr "Ukloni sve novododate particije" + +msgid "Assign mountpoint" +msgstr "Dodjeli tačku montiranja" + +msgid "Mark/Unmark to be formatted (wipes data)" +msgstr "Označi/odznači za formatiranje (briše podatke)" + +msgid "Mark/Unmark as bootable" +msgstr "Označi/odznači kao pokretljivo" + +msgid "Mark/Unmark as ESP" +msgstr "Označi/odznači kao ESP" + +msgid "Mark/Unmark as XBOOTLDR" +msgstr "Označi/odznači kao XBOOTLDR" + +msgid "Change filesystem" +msgstr "Promjeni fajl sistem" + +msgid "Mark/Unmark as compressed" +msgstr "Označi/odznači kao komprimovano" + +msgid "Mark/Unmark as nodatacow" +msgstr "Označi/odznači kao nodatacow" + +msgid "Set subvolumes" +msgstr "Postavi podvolumene" + +msgid "Delete partition" +msgstr "Obriši particiju" + +#, python-brace-format +msgid "Partition management: {}" +msgstr "Upravljanje particijama: {}" + +#, python-brace-format +msgid "Total length: {}" +msgstr "Ukupna dužina: {}" + +msgid "Partition - New" +msgstr "Particija - Nova" + +msgid "Partition" +msgstr "Particija" + +msgid "This partition is currently encrypted, to format it a filesystem has to be specified" +msgstr "Ova particija je trenutno šifrovana, da biste je formatirali morate navesti fajl sistem" + +msgid "Partition mount-points are relative to inside the installation, the boot would be /boot as an example." +msgstr "Tačke montiranja particija su relativne u odnosu na instalaciju, na primer boot bi bio /boot." + +msgid "Enter a mountpoint" +msgstr "Unesite tačku montiranja" + +msgid "Invalid size" +msgstr "Neispravna veličina" + +#, python-brace-format +msgid "Selected free space segment on device {}:" +msgstr "Izabrani segment slobodnog prostora na uređaju {}:" + +#, python-brace-format +msgid "Size: {} / {}" +msgstr "Veličina: {} / {}" + +msgid "All entered values can be suffixed with a unit: %, B, KB, KiB, MB, MiB..." +msgstr "Sve unjete vrijednosti mogu imati sufiks jedinice: %, B, KB, KiB, MB, MiB..." + +msgid "If no unit is provided, the value is interpreted as sectors" +msgstr "Ako jedinica nije navedena, vrijednost se tumači kao sektori" + +#, python-brace-format +msgid "Enter a size (default: {}): " +msgstr "Unesite veličinu (podrazumevano: {}): " + +msgid "This will remove all newly added partitions, continue?" +msgstr "Ovo će ukloniti sve novododate particije, nastaviti?" + +msgid "Add subvolume" +msgstr "Dodaj podvolumen" + +msgid "Edit subvolume" +msgstr "Izmeni podvolumen" + +msgid "Delete subvolume" +msgstr "Obriši podvolumen" + +msgid "Value cannot be empty" +msgstr "Vrijednost ne može biti prazna" + +msgid "Enter subvolume name" +msgstr "Unesite ime podvolumena" + +msgid "Subvolume name" +msgstr "Ime podvolumena" + +msgid "Enter subvolume mountpoint" +msgstr "Unesite tačku montiranja podvolumena" + +msgid "Exit archinstall" +msgstr "Izađi iz archinstall-a" + +msgid "Reboot system" +msgstr "Ponovo pokreni sistem" + +msgid "chroot into installation for post-installation configurations" +msgstr "chroot u instalaciju radi post-instalacionih podešavanja" + +msgid "Would you like to use automatic time synchronization (NTP) with the default time servers?\n" +msgstr "Da li želite da koristite automatsku sinhronizaciju vremena (NTP) sa podrazumevanim serverima vremena?\n" + +msgid "" +"Hardware time and other post-configuration steps might be required in order for NTP to work.\n" +"For more information, please check the Arch wiki" +msgstr "Hardversko vreme i drugi post-konfiguracioni koraci mogu biti potrebni da bi NTP radio.\nZa više informacija, molimo pogledajte Arch wiki" + +msgid "Enter a hostname" +msgstr "Unesite ime hosta" + +msgid "Select timezone" +msgstr "Izaberite vremensku zonu" + +msgid "What would you like to do next?" +msgstr "Šta biste željeli da uradite sljedeće?" + +msgid "Select which kernel(s) to install" +msgstr "Izaberite koje kernel(e) instalirati" + +msgid "For the best compatibility with your AMD hardware, you may want to use either the all open-source or AMD / ATI options." +msgstr "Za najbolju kompatibilnost sa vašim AMD hardverom, možda ćete željeti da koristite ili potpuno open-source ili AMD / ATI opcije." + +msgid "For the best compatibility with your Intel hardware, you may want to use either the all open-source or Intel options.\n" +msgstr "Za najbolju kompatibilnost sa vašim Intel hardverom, možda ćete željeti da koristite ili potpuno open-source ili Intel opcije.\n" + +msgid "For the best compatibility with your Nvidia hardware, you may want to use the Nvidia proprietary driver.\n" +msgstr "Za najbolju kompatibilnost sa vašim Nvidia hardverom, možda ćete željeti da koristite Nvidia vlasnički drajver.\n" + +msgid "Would you like to use swap on zram?" +msgstr "Da li želite da koristite swap na zram-u?" + +msgid "Select zram compression algorithm:" +msgstr "Izaberite zram algoritam kompresije:" + +msgid "Archinstall language" +msgstr "Archinstall jezik" + +msgid "Applications" +msgstr "Aplikacije" + +msgid "Network configuration" +msgstr "Konfiguracija mreže" + +msgid "Save configuration" +msgstr "Sačuvaj konfiguraciju" + +msgid "Install" +msgstr "Instaliraj" + +msgid "Abort" +msgstr "Prekini" + +msgid "Either root-password or at least 1 user with sudo privileges must be specified" +msgstr "Mora biti navedena ili root lozinka ili najmanje 1 korisnik sa sudo privilegijama" + +msgid "The selected desktop profile requires a regular user to log in via the greeter" +msgstr "Izabrani desktop profil zahtjeva običnog korisnika za prijavu preko greeter-a" + +msgid "Language" +msgstr "Jezik" + +msgid "NTP" +msgstr "NTP" + +msgid "LVM configuration type" +msgstr "Tip LVM konfiguracije" + +#, python-brace-format +msgid "Btrfs snapshot type: {}" +msgstr "Tip Btrfs snimka: {}" + +msgid "Swap on zram" +msgstr "Swap na zram-u" + +msgid "Compression algorithm" +msgstr "Algoritam kompresije" + +msgid "Parallel Downloads" +msgstr "Paralelna preuzimanja" + +msgid "Color" +msgstr "Boja" + +msgid "Kernel" +msgstr "Kernel" + +msgid "No network configuration selected. Network will need to be set up manually on the installed system." +msgstr "Nijedna konfiguracija mreže nije izabrana. Mrežu će biti potrebno ručno podesiti na instaliranom sistemu." + +msgid "Missing configurations:" +msgstr "Nedostajuće konfiguracije:" + +msgid "Invalid configuration:" +msgstr "Neispravna konfiguracija:" + +msgid "Ready to install" +msgstr "Spremno za instalaciju" + +msgid "Warnings:" +msgstr "Upozorenja:" + +msgid "Profiles" +msgstr "Profili" + +msgid "Graphics driver" +msgstr "Grafički drajver" + +msgid "Greeter" +msgstr "Greeter" + +msgid "Selected mirror regions" +msgstr "Izabrani regioni mirora" + +msgid "Custom servers" +msgstr "Prilagođeni serveri" + +msgid "Optional repositories" +msgstr "Opcioni repozitorijumi" + +msgid "Custom repositories" +msgstr "Prilagođeni repozitorijumi" + +#, python-brace-format +msgid "[!] A log file has been created here: {}" +msgstr "[!] Ovde je kreirana log datoteka: {}" + +msgid "Please submit this issue (and file) to https://github.com/archlinux/archinstall/issues" +msgstr "Molimo prijavite ovaj problem (i datoteku) na https://github.com/archlinux/archinstall/issues" + +msgid "Syncing the system..." +msgstr "Sinhronizacija sistema..." + +msgid "Waiting for time sync (timedatectl show) to complete." +msgstr "Čekanje da se sinhronizacija vremena (timedatectl show) završi." + +msgid "Time synchronization not completing, while you wait - check the docs for workarounds: https://archinstall.readthedocs.io/" +msgstr "Sinhronizacija vremena se ne završava, dok čekate - pogledajte dokumentaciju za zaobilazna rješenja: https://archinstall.readthedocs.io/" + +msgid "Skipping waiting for automatic time sync (this can cause issues if time is out of sync during installation)" +msgstr "Preskakanje čekanja na automatsku sinhronizaciju vremena (ovo može izazvati probleme ako vreme nije sinhronizovano tokom instalacije)" + +msgid "Waiting for Arch Linux keyring sync (archlinux-keyring-wkd-sync) to complete." +msgstr "Čekanje da se sinhronizacija Arch Linux keyring-a (archlinux-keyring-wkd-sync) završi." + +msgid "Keyboard layout" +msgstr "Raspored tastature" + +msgid "Locale language" +msgstr "Jezik lokala" + +msgid "Locale encoding" +msgstr "Kodiranje lokala" + +msgid "Console font" +msgstr "Font konzole" + +msgid "Back" +msgstr "Nazad" + +msgid "Are you sure you want to reset this setting?" +msgstr "Da li ste sigurni da želite da resetujete ovo podešavanje?" + +msgid "Confirm and exit" +msgstr "Potvrdi i izađi" + +msgid "Cancel" +msgstr "Otkaži" + +msgid "Password strength: Weak" +msgstr "Jačina lozinke: Slaba" + +msgid "Password strength: Moderate" +msgstr "Jačina lozinke: Umjerena" + +msgid "Password strength: Strong" +msgstr "Jačina lozinke: Jaka" + +msgid "Confirm password" +msgstr "Potvrdite lozinku" + +msgid "The password did not match, please try again" +msgstr "Lozinke se ne poklapaju, molimo pokušajte ponovo" + +msgid "Not a valid directory" +msgstr "Nije ispravan direktorijum" + +msgid "Do you really want to abort?" +msgstr "Da li zaista želite da prekinete?" + +msgid "Add a custom repository" +msgstr "Dodaj prilagođeni repozitorijum" + +msgid "Change custom repository" +msgstr "Izmeni prilagođeni repozitorijum" + +msgid "Delete custom repository" +msgstr "Obriši prilagođeni repozitorijum" + +msgid "Enter a repository name" +msgstr "Unesite ime repozitorijuma" + +msgid "Name" +msgstr "Ime" + +msgid "Enter the repository url" +msgstr "Unesite URL repozitorijuma" + +msgid "Url" +msgstr "URL" + +msgid "Select signature check" +msgstr "Izaberite proveru potpisa" + +msgid "Signature check" +msgstr "Provera potpisa" + +msgid "Select signature option" +msgstr "Izaberite opciju potpisa" + +msgid "Add a custom server" +msgstr "Dodaj prilagođeni server" + +msgid "Change custom server" +msgstr "Izmeni prilagođeni server" + +msgid "Delete custom server" +msgstr "Obriši prilagođeni server" + +msgid "Enter server url" +msgstr "Unesite URL servera" + +msgid "Select regions" +msgstr "Izaberite regione" + +msgid "Add custom servers" +msgstr "Dodaj prilagođene servere" + +msgid "Add custom repository" +msgstr "Dodaj prilagođeni repozitorijum" + +msgid "Additional repositories" +msgstr "Dodatni repozitorijumi" + +msgid "Loading mirror regions..." +msgstr "Učitavanje regiona mirora..." + +msgid "Select mirror regions to be enabled" +msgstr "Izaberite regione mirora koje treba omogućiti" + +msgid "Select optional repositories to be enabled" +msgstr "Izaberite opcione repozitorijume koje treba omogućiti" + +msgid "Unicode font coverage for most languages" +msgstr "Unicode pokrivenost fontova za većinu jezika" + +msgid "color emoji for browsers and apps" +msgstr "emoji u boji za pregledače i aplikacije" + +msgid "Chinese, Japanese, Korean characters" +msgstr "kineski, japanski, korejski znakovi" + +msgid "Arial/Times/Courier replacement, Cyrillic support for Steam/games" +msgstr "zamena za Arial/Times/Courier, podrška za ćirilicu u Steam-u/igrama" + +msgid "wide Unicode coverage, good fallback font" +msgstr "široka Unicode pokrivenost, dobar rezervni font" + +msgid "Zram enabled" +msgstr "Zram omogućen" + +#, python-brace-format +msgid "Zram algorithm {}" +msgstr "Zram algoritam {}" + +msgid "Bluetooth enabled" +msgstr "Bluetooth omogućen" + +#, python-brace-format +msgid "Audio server \"{}\"" +msgstr "Audio server \"{}\"" + +#, python-brace-format +msgid "Power management \"{}\"" +msgstr "Upravljanje napajanjem \"{}\"" + +msgid "Print service enabled" +msgstr "Servis štampanja omogućen" + +#, python-brace-format +msgid "Firewall \"{}\"" +msgstr "Zaštitni zid \"{}\"" + +#, python-brace-format +msgid "Extra fonts \"{}\"" +msgstr "Dodatni fontovi \"{}\"" + +msgid "Passwordless login" +msgstr "Prijava bez lozinke" + +msgid "Second factor login" +msgstr "Prijava sa drugim faktorom" + +msgid "Root password set" +msgstr "Root lozinka postavljena" + +#, python-brace-format +msgid "Configured {} user(s)" +msgstr "Konfigurisano {} korisnik(a)" + +msgid "U2F set up" +msgstr "U2F podešen" + +#, python-brace-format +msgid "Bootloader \"{}\"" +msgstr "Bootloader \"{}\"" + +msgid "UKI enabled" +msgstr "UKI omogućen" + +msgid "Removable" +msgstr "Prenosivo" + +#, python-brace-format +msgid "Plymouth \"{}\"" +msgstr "Plymouth \"{}\"" + +msgid "Use a best-effort default partition layout" +msgstr "Koristi podrazumjevani raspored particija (best-effort)" + +msgid "Manual Partitioning" +msgstr "Ručno particionisanje" + +msgid "Pre-mounted configuration" +msgstr "Prethodno montirana konfiguracija" + +msgid "Default" +msgstr "Podrazumevano" + +msgid "Manual" +msgstr "Ručno" + +msgid "Pre-mount" +msgstr "Prethodno montiranje" + +#, python-brace-format +msgid "{} layout" +msgstr "{} raspored" + +#, python-brace-format +msgid "Devices {}" +msgstr "Uređaji {}" + +msgid "LVM set up" +msgstr "LVM podešen" + +#, python-brace-format +msgid "{} encryption" +msgstr "{} šifrovanje" + +#, python-brace-format +msgid "Btrfs snapshot \"{}\"" +msgstr "Btrfs snimak \"{}\"" + +msgid "Unknown" +msgstr "Nepoznato" + +msgid "Default layout" +msgstr "Podrazumjevani raspored" + +msgid "No Encryption" +msgstr "Bez šifrovanja" + +msgid "LUKS" +msgstr "LUKS" + +msgid "LVM on LUKS" +msgstr "LVM na LUKS-u" + +msgid "LUKS on LVM" +msgstr "LUKS na LVM-u" + +#, python-brace-format +msgid "Keyboard layout \"{}\"" +msgstr "Raspored tastature \"{}\"" + +#, python-brace-format +msgid "Locale language \"{}\"" +msgstr "Jezik lokala \"{}\"" + +#, python-brace-format +msgid "Locale encoding \"{}\"" +msgstr "Kodiranje lokala \"{}\"" + +#, python-brace-format +msgid "Console font \"{}\"" +msgstr "Font konzole \"{}\"" + +#, python-brace-format +msgid "Mirror regions \"{}\"" +msgstr "Regioni mirora \"{}\"" + +#, python-brace-format +msgid "Optional repositories \"{}\"" +msgstr "Opcioni repozitorijumi \"{}\"" + +msgid "Custom servers set up" +msgstr "Prilagođeni serveri podešeni" + +msgid "Custom repositories set up" +msgstr "Prilagođeni repozitorijumi podešeni" + +msgid "Copy ISO network configuration to installation" +msgstr "Kopiraj mrežnu konfiguraciju sa ISO-a u instalaciju" + +msgid "Use Network Manager (default backend)" +msgstr "Koristi Network Manager (podrazumevani backend)" + +msgid "Use Network Manager (iwd backend)" +msgstr "Koristi Network Manager (iwd backend)" + +msgid "Use standalone iwd" +msgstr "Koristi samostalni iwd" + +msgid "Manual configuration" +msgstr "Ručna konfiguracija" + +msgid "Package group:" +msgstr "Grupa paketa:" + +msgid "Color enabled" +msgstr "Boja omogućena" + +#, python-brace-format +msgid "{} graphics driver" +msgstr "{} grafički drajver" + +#, python-brace-format +msgid "{} greeter" +msgstr "{} greeter" + +msgid "very weak" +msgstr "veoma slaba" + +msgid "weak" +msgstr "slaba" + +msgid "moderate" +msgstr "umerena" + +msgid "strong" +msgstr "jaka" + +msgid "Add interface" +msgstr "Dodaj interfejs" + +msgid "Edit interface" +msgstr "Izmeni interfejs" + +msgid "Delete interface" +msgstr "Obriši interfejs" + +msgid "Select an interface" +msgstr "Izaberite interfejs" + +msgid "You need to enter a valid IP in IP-config mode" +msgstr "Morate uneti ispravnu IP adresu u režimu IP konfiguracije" + +#, python-brace-format +msgid "Select which mode to configure for \"{}\"" +msgstr "Izaberite koji režim da konfigurišete za \"{}\"" + +#, python-brace-format +msgid "Enter the IP and subnet for {} (example: 192.168.0.5/24): " +msgstr "Unesite IP i podmrežu za {} (primer: 192.168.0.5/24): " + +msgid "Enter your gateway (router) IP address (leave blank for none)" +msgstr "Unesite IP adresu vašeg gateway-a (rutera) (ostavite prazno za nijedan)" + +msgid "Enter your DNS servers with space separated (leave blank for none)" +msgstr "Unesite vaše DNS servere razdvojene razmakom (ostavite prazno za nijedan)" + +msgid "Choose network configuration" +msgstr "Izaberite konfiguraciju mreže" + +msgid "Recommended: Network Manager for desktop, Manual for server" +msgstr "Preporučeno: Network Manager za desktop, Ručno za server" + +msgid "Configure interfaces" +msgstr "Konfiguriši interfejse" + +msgid "No network connection found" +msgstr "Nije pronađena mrežna veza" + +msgid "Would you like to connect to a Wifi?" +msgstr "Da li želite da se povežete na WiFi?" + +msgid "No wifi interface found" +msgstr "Nije pronađen WiFi interfejs" + +msgid "No wifi networks found" +msgstr "Nije pronađena nijedna WiFi mreža" + +msgid "Select wifi network to connect to" +msgstr "Izaberite WiFi mrežu za povezivanje" + +msgid "Scanning wifi networks..." +msgstr "Skeniranje WiFi mreža..." + +msgid "Failed setting up wifi" +msgstr "Podešavanje WiFi-ja nije uspjelo" + +msgid "Enter wifi password" +msgstr "Unesite WiFi lozinku" + +#, python-brace-format +msgid "Repositories: {}" +msgstr "Repozitorijumi: {}" + +msgid "Loading packages..." +msgstr "Učitavanje paketa..." + +msgid "No packages found" +msgstr "Nije pronađen nijedan paket" + +msgid "Only packages such as base, sudo, linux, linux-firmware, efibootmgr and optional profile packages are installed." +msgstr "Instalirani su samo paketi kao što su base, sudo, linux, linux-firmware, efibootmgr i opcioni paketi profila." + +msgid "Note: base-devel is no longer installed by default. Add it here if you need build tools." +msgstr "Napomena: base-devel se više ne instalira podrazumevano. Dodajte ga ovde ako su vam potrebni alati za kompajliranje." + +msgid "Select any packages from the below list that should be installed additionally" +msgstr "Izaberite bilo koje pakete sa donje liste koje treba dodatno instalirati" + +msgid "Pacman is already running, waiting maximum 10 minutes for it to terminate." +msgstr "Pacman je već pokrenut, čeka se najviše 10 minuta da se završi." + +msgid "Pre-existing pacman lock never exited. Please clean up any existing pacman sessions before using archinstall." +msgstr "Postojeće pacman zaključavanje nikada nije završeno. Molimo očistite sve postojeće pacman sesije pre korišćenja archinstall-a." + +#, python-brace-format +msgid "Enter the number of parallel downloads (1-{})" +msgstr "Unesite broj paralelnih preuzimanja (1-{})" + +#, python-brace-format +msgid "Value must be between 1 and {}" +msgstr "Vrijednost mora biti između 1 i {}" + +msgid "Enable colored output for pacman" +msgstr "Omogući obojeni ispis za pacman" + +msgid "The proprietary Nvidia driver is not supported by Sway." +msgstr "Vlasnički Nvidia drajver nije podržan od strane Sway-a." + +msgid "It is likely that you will run into issues, are you okay with that?" +msgstr "Vjerovatno ćete naići na probleme, da li vam to odgovara?" + +msgid "Selected profiles: " +msgstr "Izabrani profili: " + +msgid "Select which greeter to install" +msgstr "Izaberite koji greeter da instalirate" + +msgid "Select a profile type" +msgstr "Izaberite tip profila" + +#, python-brace-format +msgid "Unable to fetch profile from specified url: {}" +msgstr "Nije moguće preuzeti profil sa navedenog URL-a: {}" + +#, python-brace-format +msgid "Profiles must have unique name, but profile definitions with duplicate name found: {}" +msgstr "Profili moraju imati jedinstveno ime, ali su pronađene definicije profila sa imenom duplikatom: {}" + +msgid "Add a user" +msgstr "Dodaj korisnika" + +msgid "Change password" +msgstr "Promeni lozinku" + +msgid "Promote/Demote user" +msgstr "Unapredi/degradiraj korisnika" + +msgid "Delete User" +msgstr "Obriši korisnika" + +msgid "User" +msgstr "Korisnik" + +msgid "Enter new password" +msgstr "Unesite novu lozinku" + +msgid "The username you entered is invalid" +msgstr "Korisničko ime koje ste uneli je neispravno" + +msgid "Enter a username" +msgstr "Unesite korisničko ime" + +msgid "Username" +msgstr "Korisničko ime" + +msgid "Enter a password" +msgstr "Unesite lozinku" + +#, python-brace-format +msgid "Should \"{}\" be a superuser (sudo)?\n" +msgstr "Da li \"{}\" treba da bude superkorisnik (sudo)?\n" + +#, python-brace-format +msgid "About to upload \"{}\" to the publicly accessible {}" +msgstr "Sprema se otpremanje \"{}\" na javno dostupni {}" + +msgid "Do you want to continue?" +msgstr "Da li želite da nastavite?" + +#, python-brace-format +msgid "Log uploaded successfully. URL: {}" +msgstr "Log je uspešno otpremljen. URL: {}" + +msgid "Failed to upload log." +msgstr "Otpremanje log-a nije uspelo." + +msgid "Archinstall requires root privileges to run. See --help for more." +msgstr "Archinstall zahteva root privilegije za pokretanje. Pogledajte --help za više." + +msgid "New version available" +msgstr "Dostupna je nova verzija" + +msgid "Starting device modifications in " +msgstr "Pokretanje izmena uređaja za " + +msgid "Ok" +msgstr "U redu" + +msgid "Input cannot be empty" +msgstr "Unos ne može biti prazan" + +msgid "Yes" +msgstr "Da" + +msgid "No" +msgstr "Ne" + +msgid " (default)" +msgstr " (podrazumevano)" From 389f4cfc64b8b4dbb174a03fc1c0da6450fe87d3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 21 Jul 2026 21:03:30 +1000 Subject: [PATCH 09/16] Update actions/setup-python action to v7 (#4647) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/github-pages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/github-pages.yml b/.github/workflows/github-pages.yml index 5f129d82..e34e6b57 100644 --- a/.github/workflows/github-pages.yml +++ b/.github/workflows/github-pages.yml @@ -22,7 +22,7 @@ jobs: options: --privileged steps: - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 - - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6 + - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7 - name: Install pre-dependencies run: | pacman -Sy --noconfirm tree git python-pyparted python-setuptools python-sphinx python-sphinx_rtd_theme python-build python-installer python-wheel From 2bf116030bebee1deb81b4081e60cb0f2b188faf Mon Sep 17 00:00:00 2001 From: codefiles <11915375+codefiles@users.noreply.github.com> Date: Tue, 21 Jul 2026 19:39:42 -0400 Subject: [PATCH 10/16] Fix too-many-statements-in-try-clause violations (#4648) * Fix too-many-statements-in-try-clause violations * Remove obsolete _wpa_cli comments * Refactor _wpa_cli try block --- archinstall/lib/installer.py | 26 ++++----- archinstall/lib/network/wifi_handler.py | 61 +++++++++++---------- archinstall/lib/profile/profiles_handler.py | 8 +-- archinstall/lib/translationhandler.py | 37 +++++++------ 4 files changed, 67 insertions(+), 65 deletions(-) diff --git a/archinstall/lib/installer.py b/archinstall/lib/installer.py index ca13cf12..53f9841c 100644 --- a/archinstall/lib/installer.py +++ b/archinstall/lib/installer.py @@ -1476,20 +1476,20 @@ class Installer: parent_dev_path = get_parent_device_path(efi_partition.safe_dev_path) + efi_dir_path = self.target / efi_partition.mountpoint.relative_to('/') / 'EFI' + efi_dir_path_target = efi_partition.mountpoint / 'EFI' + if bootloader_removable: + efi_dir_path = efi_dir_path / 'BOOT' + efi_dir_path_target = efi_dir_path_target / 'BOOT' + else: + efi_dir_path = efi_dir_path / 'arch-limine' + efi_dir_path_target = efi_dir_path_target / 'arch-limine' + + config_path = efi_dir_path / 'limine.conf' + + efi_dir_path.mkdir(parents=True, exist_ok=True) + try: - efi_dir_path = self.target / efi_partition.mountpoint.relative_to('/') / 'EFI' - efi_dir_path_target = efi_partition.mountpoint / 'EFI' - if bootloader_removable: - efi_dir_path = efi_dir_path / 'BOOT' - efi_dir_path_target = efi_dir_path_target / 'BOOT' - else: - efi_dir_path = efi_dir_path / 'arch-limine' - efi_dir_path_target = efi_dir_path_target / 'arch-limine' - - config_path = efi_dir_path / 'limine.conf' - - efi_dir_path.mkdir(parents=True, exist_ok=True) - for file in ('BOOTIA32.EFI', 'BOOTX64.EFI'): (limine_path / file).copy_into(efi_dir_path) except Exception as err: diff --git a/archinstall/lib/network/wifi_handler.py b/archinstall/lib/network/wifi_handler.py index bc068d2a..a0a3f05a 100644 --- a/archinstall/lib/network/wifi_handler.py +++ b/archinstall/lib/network/wifi_handler.py @@ -58,7 +58,7 @@ class WifiHandler(InstanceRunnable[bool]): async def _enable_supplicant(self, wifi_iface: str) -> bool: self._wpa_config.load_config() - result = self._wpa_cli('status') # if it it's running it will blow up + result = self._wpa_cli('status') if result.success: debug('wpa_supplicant already running') @@ -72,18 +72,19 @@ class WifiHandler(InstanceRunnable[bool]): try: SysCommand(f'wpa_supplicant -B -i {wifi_iface} -c {self._wpa_config.config_file}') - result = self._wpa_cli('status') # if it it's running it will blow up - - if result.success: - debug('successfully enabled wpa_supplicant') - return True - else: - debug(f'failed to enable wpa_supplicant: {result.error}') - return False except SysCallError as err: debug(f'failed to enable wpa_supplicant: {err}') return False + result = self._wpa_cli('status') + + if result.success: + debug('successfully enabled wpa_supplicant') + return True + else: + debug(f'failed to enable wpa_supplicant: {result.error}') + return False + def _find_wifi_interface(self) -> str | None: net_path = Path('/sys/class/net') @@ -197,15 +198,6 @@ class WifiHandler(InstanceRunnable[bool]): try: result = SysCommand(cmd).decode() - - if 'FAIL' in result: - debug(f'wpa_cli returned FAIL: {result}') - return WpaCliResult( - success=False, - error=f'wpa_cli returned a failure: {result}', - ) - - return WpaCliResult(success=True, response=result) except SysCallError as err: debug(f'error running wpa_cli command: {err}') return WpaCliResult( @@ -213,6 +205,15 @@ class WifiHandler(InstanceRunnable[bool]): error=f'Error running wpa_cli command: {err}', ) + if 'FAIL' in result: + debug(f'wpa_cli returned FAIL: {result}') + return WpaCliResult( + success=False, + error=f'wpa_cli returned a failure: {result}', + ) + + return WpaCliResult(success=True, response=result) + def _find_network_id(self, ssid: str, iface: str) -> int | None: result = self._wpa_cli('list_networks', iface) @@ -254,18 +255,18 @@ class WifiHandler(InstanceRunnable[bool]): try: result = self._wpa_cli('scan_results', iface) - - if not result.success: - debug(f'Failed to retrieve scan results: {result.error}') - return [] - - if not result.response: - debug('No wifi networks found') - return [] - - networks = WifiNetwork.from_wpa(result.response) - - return networks except SysCallError as err: debug('Unable to retrieve wifi results') raise err + + if not result.success: + debug(f'Failed to retrieve scan results: {result.error}') + return [] + + if not result.response: + debug('No wifi networks found') + return [] + + networks = WifiNetwork.from_wpa(result.response) + + return networks diff --git a/archinstall/lib/profile/profiles_handler.py b/archinstall/lib/profile/profiles_handler.py index 1e770de5..8430e001 100644 --- a/archinstall/lib/profile/profiles_handler.py +++ b/archinstall/lib/profile/profiles_handler.py @@ -258,6 +258,10 @@ class ProfileHandler: """ try: data = fetch_data_from_url(url) + except ValueError: + err = tr('Unable to fetch profile from specified url: {}').format(url) + error(err) + else: b_data = bytes(data, 'utf-8') with NamedTemporaryFile(delete=False, suffix='.py') as fp: @@ -266,10 +270,6 @@ class ProfileHandler: profiles = self._process_profile_file(filepath) self.remove_custom_profiles(profiles) - self.add_custom_profiles(profiles) - except ValueError: - err = tr('Unable to fetch profile from specified url: {}').format(url) - error(err) def _load_profile_class(self, module: ModuleType) -> list[Profile]: """ diff --git a/archinstall/lib/translationhandler.py b/archinstall/lib/translationhandler.py index c2736f35..7da523b2 100644 --- a/archinstall/lib/translationhandler.py +++ b/archinstall/lib/translationhandler.py @@ -82,13 +82,14 @@ class TranslationHandler: if not running_from_iso(): return + 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) + 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}') @@ -136,21 +137,21 @@ class TranslationHandler: try: # get a translation for a specific language translation = gettext.translation('base', localedir=self._get_locales_dir(), languages=(abbr, lang)) - - # calculate the percentage of total translated text to total number of messages - if abbr == 'en': - percent = 100 - else: - num_translations = self._get_catalog_size(translation) - percent = int((num_translations / self._total_messages) * 100) - # 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, console_font) - languages.append(language) except FileNotFoundError as err: raise FileNotFoundError(f"Could not locate language file for '{lang}': {err}") + # calculate the percentage of total translated text to total number of messages + if abbr == 'en': + percent = 100 + else: + num_translations = self._get_catalog_size(translation) + percent = int((num_translations / self._total_messages) * 100) + # 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, console_font) + languages.append(language) + return languages def _load_language_mappings(self) -> list[dict[str, str]]: From fc7dd17ebd0d932fa2852aec4a82c764e17774e8 Mon Sep 17 00:00:00 2001 From: Franco Castillo Date: Tue, 21 Jul 2026 20:41:26 -0300 Subject: [PATCH 11/16] Update Spanish translation (#4651) Signed-off-by: Franco Castillo --- archinstall/locales/es/LC_MESSAGES/base.mo | Bin 32636 -> 33438 bytes archinstall/locales/es/LC_MESSAGES/base.po | 56 +++++++++++++++------ 2 files changed, 40 insertions(+), 16 deletions(-) diff --git a/archinstall/locales/es/LC_MESSAGES/base.mo b/archinstall/locales/es/LC_MESSAGES/base.mo index 91060f90d8de2b32a6a99b8a758a5d45b1050b1a..063aa5b3d3416f7940661190293fff19429905e8 100644 GIT binary patch delta 8973 zcmZ|U33OG}y~pvBfe;c1W0)a_7(xO8%!Cl8ggFdh4nq*Qxw#=1lH70y0tC2-j|%bt zAy6!XMJfo0TAMl)fwqDbaRAIyQK3~-qSjfSR6*PC@1B!t-&*f1|9b^XT$BEbmi?Ia;Z12Wa)VCqe1&sp~)X`IzkFO$gFgo@yjOLhx?J(VT4CYZU!Zh4x z*Uw>V>dh0aiFQZTlQ0ekU?&`nk+=YxF}_hkK{r;SRw#Br3Bts0`kZ%E$v4&-lhMyWu%CP``lf@fvD?AMExv^s3aQ z*bYKvXgq2Hv#=k!k$;T)`Bw^_L{01(YC+#(XN>7d{*{`Z6f|%aHpTI%_GzdTJ5XD) z1-0_ssEO5~CUn;JE!$5}6T69eE;`xDY&+CA2^fvp$>d*$WEc&a;Z)QB4phok+Vx#H zfckGS3mZ@q?Apt+4;E0*K@&Hk_WCF`#WSdtzl<8^T~vQx_9FjUK`-*8i3~*5C!qFx z9%>?fyL}t>rhWj2;VYPf%~P%C$D&d@7d2o2)!#?9 zPQ($o5QpM#P!GO`n%K9fj^p|m1_$3rK-Ke5XJ;BJ)ozT&AnMRM>NtU#Uao2UUY`x(Yy9D@8~EazX!=)0SEx*d-EO_-?J<^m z7gT0?;dmStYG?m9QqanFh8hfGKX##h47IYesKay-wKac74fIdcKrPd)dJ?Lhg_=-4 z@<}kJq9*D`Jzs;mZ!5OZ`~MIH?dj9D=TQSTpw2{ChV>qI#sumkkzF#J$Q+FOP#ymn zb^q(A{ys-7EGpC5!qyl`Jsvf|&KT6*BvOzAF&qo91x`iHbOE+PKTg2)=){YtOl4Gc@Z1!I_1ZdD}vk5h`L#PQnhT8iR*cx9#rSb}D z4?n;**nfb&<-9Sdt(l0*#5^p;0P0L#MrGt<)OgnikbmuQOOCQu(h-&VEYwO0Py>`= zTU>$4#Aej}4`3l4NA=Tspf&N%IE8u&>i!iNkN08)?ng~HE;z^UPNF)#hXd(pgYgz>fPs8v^nDnCy1xWFU;y=8a5Dv^b`NTxM^P(& z3VD-^7f}=X4m)8>de;O}QSC#KzbD3Y?1IZN1$Ur+KZ&}(9w%V~cE;=>p)YIDm_k7_ ztiblT6?MuF+4a95e*ldu*c-$69O_J@q3$1yTG2Gr-Y-TyzY^8&ZtR68?D_|&*D{Ll zcdGvWr&3S{(@`^Bg33e?HP8ms1G}&z9!E{69yQ<%R4SVe=UI$LW%Mr81Zq+JJc)Y# z4C*z!g3W^zu2N8{zCivln&evV_h{r?8D1>Fqc|78!#+48&zi_uoJIX1oPoEH18z(m z!NJ1~s0D@dIn^16MNOb92DR5cC}<^FsMli@X5eJhp<0Lf;B3Ku_$+FVKS52r?I`Q8 zreXy3bkwIh8+%|8YU@^`#yN}{_nA@TKa#>rH0b@jfSTzQY=YNN1AL0zF?_T&P!HQw zB>P4>>Tp$IHl9MA{_B{4KO)<1bRT1VG3Q|<_03~~hLKERI}KXdA210&!Y1 z@z%_HVz`dCy)b5N(=iy3$rb%x$Seb^$WTMO%o zY9EODlshn(OreH?W_AGeNqqwO`(d2LRv6A#MPI zwPmYN3tEqQZZ8hNW2g+gUr7G-p8r6DQq_s?s9w8t)S;P)+JYeF;$Gyq7*}v4_ML5Y zv=o)eO{g>TJ5;|Hu{VB(CU%@-{dfN$yq&r~NI?%AMBQ)(Nrv$u&c__SF3QBOusuGC z?eGk0OWwlHcndYr4ni2t*g$0cVDQE>xqGoyl zwde1nR@z~q_17*9GpNtTrnm{!aV>Vjy=dZ7s4w1|s0>_2_5Ts_aWo;0cg zK`W`k4j4q8;$7GsA3{y!G-@j@p*s8&bzjqBtGyj+z!dC-S*TC(Jk()zVmt;=6W)Z~ z8Q(Za!NfDRA7TRaD5v$m4U@44^%+kzI)PRRkr~fqS?0jMyRcig$ZX&Ax z`|NrxD$`+$$iGtDX_2+315v5UMGZX7uDdXbdNt0#HK?tqNBtFRK;8c}Y64Bl_^4qI z)c0i{YGIF|w(_`LKVL@v6KQydhTHH*+eEjO@-e6sm!Sp>ViMNkG<*i5F?O-_mbAlV z)RRyX*<<@OuB2X%F<7v~IseiN1|`?gkcNOOJJCmZ0w2hCCNEo~O`_hEFjYW2&t8Jr}ita_o=$P%C}~ zwPjaPXQ#=r7l&e3 z-nCUY7kTrHH&GoA;e@4O8S=F?c48@BNA*)w&8qQX)Id4Qt;0DMHGx^E49>%#QWm5T zj}PM@Jc)Yn25QBTE3Cg-nV3nv5=}gSv3MHwp*fGrSUqZhFphj4CZRG_ik-0rrR!?N#JoGyVq+T`_sJ^?HoNfz)SVJG>8<;6W_F)@uxdb7U;UYZ|RKKZqdl71DOYM5lMdQq>y$B4#j9BnZ~E8-6{ zwk5JCcP3t-{GNT|_vofg*L>R>l(j8e^!_JNxQF=pm2KbH*mjM=g8$R@l>OszoX&6m z+jz6>UD(flrVJO`pWc66ym7_{p%QzHgZXhQ_Q%(;IUc}TqVbBf3wqW5 zOcZdB&Qca}op_OO&^Cq`N$jHj1<{?dE^YI78ea!(0HJFq@hf5=H%+#0Y;CLGbr|;$ zor#BuS^W0j7*Bjk=n(&d@X(%!aX1pE5Zwt~DL?BkwEl1!-wgf4YhnKwXV=9dLZ9Gr ze)~oZTpfrW)H`7p`x(9C`YU>r(COASoA@kLvfhX~%J&nwgfoo%dwIB&*hj+(tgt(K zkotK-R~gZS(5sV8^dKg2->-2wUPWDc^%}396!d>;RS~)}h!VT}cgmNDj*a^tI{Gwt ziCk`KON^kro_K|*Bwiw(BZlzXeC%m=HWYtDy${is@(I+{iSj4-GLcESRE=C4h;2jy zF-!Rm=f@whC6PwFLCm8~R~RM`XDAQC&3Kb2raTrOB5o&UP}en?7)|_) zq3yI?c^re|8h`nJoW=t)`K{XieG&B*b~&GN0p+*sdL{L4l$#T=ly$X0K8~UPY>S|L zh4M)vl5(N;KaIj#8g%`hSV&!$zH)ydE)pLRy7Gx5p%Mp;`|hK>g9s4Kh-CZOjg%X& zWp$gOJn{+)xBvE!_ z6ebdvDK8}&uQ3$n5yeCs`?(90^X&2v%AXUuen+IzK7bgm{a;Okk621WI_ml_Vj+=9 z=xQMD;P>Zou^PB`TZI0rS;hUtDiyfyiLZ!15sjBi1?7La-Le;BiFQ0( zL%e3Ui{8{5uO^h25I@lHWn&|z|LmS*>Z7Q4K|khTOROg1i9G6au*F3Fl|xLTA*QZp zLTSsoE&X1LsC8uAJ-)>4TjDdTU0#=2;_|zkepg99GtX4B>Gqjk*V2I7>nbt*9<$hG zI*Q9(D!MCuen)w^ndfzunG@ZWf#pU)ZQ3Yj-Fq2VB1+3wRCogZGGmHeFcWK5C;n7( zl$7{Phw1eADqMcI(=7IQ{HCv}+~F%Tivxbs>8Kab?6%Fuk>{<^P5Zw$Y!xZL4fV)~q3 zm#fmOcKgdro-qpw^GD^gV6S_b%Uio*+|GfeuRCk5-|hR}S`_W7-LK`1FLs>vdEv4Y*7) z;wWE4hd#5F(^FaMUKH>;=&X`u*3~RJ5YdW9{jLg!**Lqpwo5Lz&}Njbs0@oOa}>MF z-F}C++*5aMWz&e1f6uGZwTOk&r|Bveey^w8QR4C1TT^>s_1VEbPdPL92TC-j&^->H hi#3`aXMkjfo_4xRy*#HoLV0f7oLy@ktep`|`4{p9nFjy> delta 8208 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 Date: Wed, 22 Jul 2026 10:00:02 +1000 Subject: [PATCH 12/16] Update actions/checkout digest to 3d3c42e (#4649) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/bandit.yaml | 2 +- .github/workflows/flake8.yaml | 2 +- .github/workflows/github-pages.yml | 2 +- .github/workflows/iso-build.yaml | 2 +- .github/workflows/mypy.yaml | 2 +- .github/workflows/pylint.yaml | 2 +- .github/workflows/pytest.yaml | 2 +- .github/workflows/python-build.yml | 2 +- .github/workflows/python-publish.yml | 2 +- .github/workflows/ruff-format.yaml | 2 +- .github/workflows/ruff-lint.yaml | 2 +- .github/workflows/translation-check.yaml | 2 +- .github/workflows/uki-build.yaml | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/.github/workflows/bandit.yaml b/.github/workflows/bandit.yaml index 68072742..1b71ab69 100644 --- a/.github/workflows/bandit.yaml +++ b/.github/workflows/bandit.yaml @@ -6,7 +6,7 @@ jobs: container: image: archlinux/archlinux:latest steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - run: pacman --noconfirm -Syu bandit - name: Security checkup with Bandit run: bandit -r archinstall || exit 0 diff --git a/.github/workflows/flake8.yaml b/.github/workflows/flake8.yaml index 278a9840..80c086a0 100644 --- a/.github/workflows/flake8.yaml +++ b/.github/workflows/flake8.yaml @@ -6,7 +6,7 @@ jobs: container: image: archlinux/archlinux:latest steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Prepare arch run: | pacman-key --init diff --git a/.github/workflows/github-pages.yml b/.github/workflows/github-pages.yml index e34e6b57..020ae6f7 100644 --- a/.github/workflows/github-pages.yml +++ b/.github/workflows/github-pages.yml @@ -21,7 +21,7 @@ jobs: image: archlinux/archlinux:latest options: --privileged steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7 - name: Install pre-dependencies run: | diff --git a/.github/workflows/iso-build.yaml b/.github/workflows/iso-build.yaml index 0e6eaabc..6ed55478 100644 --- a/.github/workflows/iso-build.yaml +++ b/.github/workflows/iso-build.yaml @@ -26,7 +26,7 @@ jobs: image: archlinux/archlinux:latest options: --privileged steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - run: pwd - run: find . - run: cat /etc/os-release diff --git a/.github/workflows/mypy.yaml b/.github/workflows/mypy.yaml index 35909767..aab849cb 100644 --- a/.github/workflows/mypy.yaml +++ b/.github/workflows/mypy.yaml @@ -6,7 +6,7 @@ jobs: container: image: archlinux/archlinux:latest steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Prepare arch run: | pacman-key --init diff --git a/.github/workflows/pylint.yaml b/.github/workflows/pylint.yaml index 0c6975c9..e3480de7 100644 --- a/.github/workflows/pylint.yaml +++ b/.github/workflows/pylint.yaml @@ -6,7 +6,7 @@ jobs: container: image: archlinux/archlinux:latest steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Prepare arch run: | pacman-key --init diff --git a/.github/workflows/pytest.yaml b/.github/workflows/pytest.yaml index 0378544b..6f914de0 100644 --- a/.github/workflows/pytest.yaml +++ b/.github/workflows/pytest.yaml @@ -7,7 +7,7 @@ jobs: image: archlinux/archlinux:latest options: --privileged steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Prepare arch run: | pacman-key --init diff --git a/.github/workflows/python-build.yml b/.github/workflows/python-build.yml index 313e63fb..ebcaaece 100644 --- a/.github/workflows/python-build.yml +++ b/.github/workflows/python-build.yml @@ -11,7 +11,7 @@ jobs: image: archlinux/archlinux:latest options: --privileged steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Prepare arch run: | pacman-key --init diff --git a/.github/workflows/python-publish.yml b/.github/workflows/python-publish.yml index 8868cd38..3933c7ba 100644 --- a/.github/workflows/python-publish.yml +++ b/.github/workflows/python-publish.yml @@ -18,7 +18,7 @@ jobs: image: archlinux/archlinux:latest options: --privileged steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Prepare arch run: | pacman-key --init diff --git a/.github/workflows/ruff-format.yaml b/.github/workflows/ruff-format.yaml index 6c0e99bf..04527763 100644 --- a/.github/workflows/ruff-format.yaml +++ b/.github/workflows/ruff-format.yaml @@ -4,6 +4,6 @@ jobs: ruff_format_check: runs-on: ubuntu-latest steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - uses: astral-sh/ruff-action@278981a28ce3188b1e39527901f38254bf3aac89 # v4.1.0 - run: ruff format --diff diff --git a/.github/workflows/ruff-lint.yaml b/.github/workflows/ruff-lint.yaml index 56ae13a6..12a7f88d 100644 --- a/.github/workflows/ruff-lint.yaml +++ b/.github/workflows/ruff-lint.yaml @@ -4,5 +4,5 @@ jobs: ruff: runs-on: ubuntu-latest steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - uses: astral-sh/ruff-action@278981a28ce3188b1e39527901f38254bf3aac89 # v4.1.0 diff --git a/.github/workflows/translation-check.yaml b/.github/workflows/translation-check.yaml index 927e8858..40cce6ee 100644 --- a/.github/workflows/translation-check.yaml +++ b/.github/workflows/translation-check.yaml @@ -15,7 +15,7 @@ jobs: name: Validate translations runs-on: ubuntu-latest steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Install gettext run: sudo apt-get update && sudo apt-get install -y gettext - name: Run translation checks diff --git a/.github/workflows/uki-build.yaml b/.github/workflows/uki-build.yaml index 87e2feb0..e27b767a 100644 --- a/.github/workflows/uki-build.yaml +++ b/.github/workflows/uki-build.yaml @@ -26,7 +26,7 @@ jobs: image: archlinux/archlinux:latest options: --privileged steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - run: pwd - run: find . - run: cat /etc/os-release From b7ad6f7514eaad5c8c0f975f5a8795b1cac25525 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 22 Jul 2026 10:00:37 +1000 Subject: [PATCH 13/16] Update dependency pre-commit to v4.6.1 (#4650) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 5a5e3e36..cd86b61c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,7 +36,7 @@ log = ["systemd_python==236"] dev = [ "mypy==2.3.0", "flake8==7.3.0", - "pre-commit==4.6.0", + "pre-commit==4.6.1", "ruff==0.15.22", "pylint==4.0.6", "pytest==9.1.1", From 6dff8525fd5b1956b612e7acabd933351a79ba29 Mon Sep 17 00:00:00 2001 From: codefiles <11915375+codefiles@users.noreply.github.com> Date: Tue, 21 Jul 2026 20:01:55 -0400 Subject: [PATCH 14/16] Remove unused format_cols (#4652) --- archinstall/lib/utils/format.py | 17 ----------------- archinstall/lib/utils/util.py | 23 ----------------------- 2 files changed, 40 deletions(-) diff --git a/archinstall/lib/utils/format.py b/archinstall/lib/utils/format.py index 4d74c5c5..1edfa3c6 100644 --- a/archinstall/lib/utils/format.py +++ b/archinstall/lib/utils/format.py @@ -46,23 +46,6 @@ def as_key_value_pair( return table.stringify() -def as_columns(entries: list[str], cols: int) -> str: - """ - Will format a list into a given number of columns - """ - chunks: list[list[str]] = [] - output = '' - - for i in range(0, len(entries), cols): - chunks.append(entries[i : i + cols]) - - for row in chunks: - out_fmt = '{: <30} ' * len(row) - output += out_fmt.format(*row) + '\n' - - return output - - def _get_values( o: DataclassInstance, class_formatter: str | Callable | None = None, # type: ignore[type-arg] # pyright: ignore[reportMissingTypeArgument] diff --git a/archinstall/lib/utils/util.py b/archinstall/lib/utils/util.py index f94ca18c..b90137c0 100644 --- a/archinstall/lib/utils/util.py +++ b/archinstall/lib/utils/util.py @@ -3,7 +3,6 @@ import string from datetime import UTC, datetime from archinstall.lib.pathnames import ARCHISO_MOUNTPOINT -from archinstall.lib.utils.format import as_columns def timestamp() -> str: @@ -24,25 +23,3 @@ def running_from_iso() -> bool: def generate_password(length: int = 64) -> str: haystack = string.printable # digits, ascii_letters, punctuation (!"#$[] etc) and whitespace return ''.join(secrets.choice(haystack) for _ in range(length)) - - -def format_cols(items: list[str], header: str | None = None) -> str: - if header: - text = f'{header}:\n' - else: - text = '' - - nr_items = len(items) - if nr_items <= 4: - col = 1 - elif nr_items <= 8: - col = 2 - elif nr_items <= 12: - col = 3 - else: - col = 4 - - text += as_columns(items, col) - # remove whitespaces on each row - text = '\n'.join(t.strip() for t in text.split('\n')) - return text From a633fc5d27dbc742aa3904355394128a0e2ef137 Mon Sep 17 00:00:00 2001 From: codefiles <11915375+codefiles@users.noreply.github.com> Date: Wed, 22 Jul 2026 04:25:55 -0400 Subject: [PATCH 15/16] Use run for lsblk command (#4654) --- archinstall/lib/disk/utils.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/archinstall/lib/disk/utils.py b/archinstall/lib/disk/utils.py index 900445e1..5829164a 100644 --- a/archinstall/lib/disk/utils.py +++ b/archinstall/lib/disk/utils.py @@ -1,8 +1,9 @@ from pathlib import Path +from subprocess import CalledProcessError from pydantic import BaseModel -from archinstall.lib.command import SysCommand +from archinstall.lib.command import SysCommand, run from archinstall.lib.exceptions import DiskError, SysCallError from archinstall.lib.log import debug, info, warn from archinstall.lib.models.device import LsblkInfo @@ -29,19 +30,18 @@ def _fetch_lsblk_info( cmd.append(str(dev_path)) try: - worker = SysCommand(cmd) - except SysCallError as err: + result = run(cmd) + except CalledProcessError as err: # Get the output minus the message/info from lsblk if it returns a non-zero exit code. - if err.worker_log: - debug(f'Error calling lsblk: {err.worker_log.decode()}') + if stdout := err.stdout: + debug(f'Error calling lsblk: {stdout.decode().rstrip()}') if dev_path: raise DiskError(f'Failed to read disk "{dev_path}" with lsblk') raise err - output = worker.output(remove_cr=False) - return LsblkOutput.model_validate_json(output) + return LsblkOutput.model_validate_json(result.stdout) def get_lsblk_info( From 7fd4b4382bdba3ef577f86c4e3fad9811d3885f3 Mon Sep 17 00:00:00 2001 From: Softer Date: Thu, 23 Jul 2026 06:02:22 +0300 Subject: [PATCH 16/16] Extract TUI binding descriptions into base.pot and translate raw widget bindings (#4587) * Extract binding descriptions into base.pot and translate raw widget bindings (#4584) xgettext only knew the tr keyword, so binding descriptions - translated at runtime via tr(b.description) in _translate_bindings() - never made it into base.pot. The strings added manually in #4363 were wiped by the regeneration in #4557. Teach the generator two more keywords: Binding:3 picks up our own binding definitions, and tr_noop marks strings that only exist inside the textual package, listed in the new tui/binding_descriptions.py. The list walks the full MRO of the textual classes used in components.py, since _translate_bindings() operates on the merged bindings map (e.g. Scroll Up comes from ScrollView and carries live translations in 18 locales today). Raw Input and Button widgets never went through _translate_bindings(), so their help-panel descriptions stayed English regardless of .po content - subclass them (_Input/_Button) following the _OptionList pattern to make those translations real. test_tooling/check_binding_descriptions.py verifies the list against the installed textual after upgrades (manual, not wired into CI). * Document key binding descriptions in the locales README --- archinstall/lib/translationhandler.py | 9 ++ archinstall/locales/README.md | 14 ++ archinstall/locales/base.pot | 180 +++++++++++++++++++++ archinstall/locales/locales_generator.sh | 8 +- archinstall/tui/binding_descriptions.py | 77 +++++++++ archinstall/tui/components.py | 23 ++- test_tooling/check_binding_descriptions.py | 66 ++++++++ 7 files changed, 371 insertions(+), 6 deletions(-) create mode 100644 archinstall/tui/binding_descriptions.py create mode 100755 test_tooling/check_binding_descriptions.py diff --git a/archinstall/lib/translationhandler.py b/archinstall/lib/translationhandler.py index 7da523b2..42c52f9d 100644 --- a/archinstall/lib/translationhandler.py +++ b/archinstall/lib/translationhandler.py @@ -278,6 +278,15 @@ def tr(message: str) -> str: return str(_DeferredTranslation(message)) +def tr_noop(message: str) -> str: + """Mark a string for xgettext extraction without translating it here. + + Use for strings that are translated later from a variable, e.g. + binding descriptions passed through tr() at runtime. + """ + return message + + builtins._ = _DeferredTranslation # type: ignore[attr-defined] diff --git a/archinstall/locales/README.md b/archinstall/locales/README.md index da853e80..89b31e62 100644 --- a/archinstall/locales/README.md +++ b/archinstall/locales/README.md @@ -58,3 +58,17 @@ msgstr "Wollen sie wirklich abbrechen?" After the translations have been written, run the script once more `./locales_generator.sh ` and it will auto-generate the `base.mo` file with the included translations. After that you're all ready to go and enjoy Archinstall in the new language :) + +## Key binding descriptions + +`base.po` also contains the key binding descriptions shown in the footer and the help panel, for example `Scroll Up` or `Toggle option`. Translate them like any other string, but keep them short so they still fit in the footer. + +Most of them come from the `textual` library, where `xgettext` cannot see them, so they are listed with `tr_noop` in `archinstall/tui/binding_descriptions.py`, a module that exists only to make them extractable and is never imported at runtime. Archinstall's own descriptions are taken from the third positional argument of `Binding()`, so that argument must never be passed as a keyword. + +The list has to be verified after a `textual` upgrade, or after a new textual widget is introduced in `archinstall/tui/components.py` (the widget also has to be added to `TEXTUAL_CLASSES` in the checker). Nothing in CI checks it, so run the following from the repository root + +``` +python3 test_tooling/check_binding_descriptions.py +``` + +It prints every missing or stale entry, and an `OK` line when the list matches the installed `textual`. Fix `binding_descriptions.py` until it passes, then run `./locales_generator.sh ` again. diff --git a/archinstall/locales/base.pot b/archinstall/locales/base.pot index edeeb6d2..a242cbaf 100644 --- a/archinstall/locales/base.pot +++ b/archinstall/locales/base.pot @@ -1224,12 +1224,192 @@ msgstr "" msgid "Starting device modifications in " msgstr "" +msgid "Bottom" +msgstr "" + +msgid "Copy selected text" +msgstr "" + +msgid "Cursor down" +msgstr "" + +msgid "Cursor left" +msgstr "" + +msgid "Cursor right" +msgstr "" + +msgid "Cursor up" +msgstr "" + +msgid "Cut selected text" +msgstr "" + +msgid "Delete all to the left" +msgstr "" + +msgid "Delete all to the right" +msgstr "" + +msgid "Delete character left" +msgstr "" + +msgid "Delete character right" +msgstr "" + +msgid "Delete left to start of word" +msgstr "" + +msgid "Delete right to start of word" +msgstr "" + +msgid "Down" +msgstr "" + +msgid "End" +msgstr "" + +msgid "First" +msgstr "" + +msgid "Focus Next" +msgstr "" + +msgid "Focus Previous" +msgstr "" + +msgid "Go to end" +msgstr "" + +msgid "Go to start" +msgstr "" + +msgid "Home" +msgstr "" + +msgid "Last" +msgstr "" + +msgid "Move cursor left" +msgstr "" + +msgid "Move cursor left a word" +msgstr "" + +msgid "Move cursor left a word and select" +msgstr "" + +msgid "Move cursor left and select" +msgstr "" + +msgid "Move cursor right a word" +msgstr "" + +msgid "Move cursor right a word and select" +msgstr "" + +msgid "Move cursor right and select" +msgstr "" + +msgid "Move cursor right or accept the completion suggestion" +msgstr "" + +msgid "Page Down" +msgstr "" + +msgid "Page Left" +msgstr "" + +msgid "Page Right" +msgstr "" + +msgid "Page Up" +msgstr "" + +msgid "Page down" +msgstr "" + +msgid "Page up" +msgstr "" + +msgid "Paste text from the clipboard" +msgstr "" + +msgid "Press button" +msgstr "" + +msgid "Quit" +msgstr "" + +msgid "Scroll Down" +msgstr "" + +msgid "Scroll End" +msgstr "" + +msgid "Scroll Home" +msgstr "" + +msgid "Scroll Left" +msgstr "" + +msgid "Scroll Right" +msgstr "" + +msgid "Scroll Up" +msgstr "" + +msgid "Select" +msgstr "" + +msgid "Select all" +msgstr "" + +msgid "Select line end" +msgstr "" + +msgid "Select line start" +msgstr "" + +msgid "Submit" +msgstr "" + +msgid "Toggle option" +msgstr "" + +msgid "Top" +msgstr "" + +msgid "Up" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Search" +msgstr "" + +msgid "Toggle" +msgstr "" + +msgid "Confirm" +msgstr "" + +msgid "Focus right" +msgstr "" + +msgid "Focus left" +msgstr "" + msgid "Ok" msgstr "" msgid "Input cannot be empty" msgstr "" +msgid "Show/Hide help" +msgstr "" + msgid "Yes" msgstr "" diff --git a/archinstall/locales/locales_generator.sh b/archinstall/locales/locales_generator.sh index cc8d1b02..90818eb4 100755 --- a/archinstall/locales/locales_generator.sh +++ b/archinstall/locales/locales_generator.sh @@ -14,8 +14,14 @@ usage() { } generate_pot() { + # tr - regular translation calls + # tr_noop - extraction-only marker for strings translated later from a variable + # Binding:3 - the description argument of textual Binding() definitions, + # translated at runtime by _translate_bindings(). The description + # must be passed positionally - xgettext cannot see keyword arguments. find . -type f -iname '*.py' | sort \ - | xargs xgettext --no-location --omit-header --keyword='tr' \ + | xargs xgettext --no-location --omit-header \ + --keyword='tr' --keyword='tr_noop' --keyword='Binding:3' \ -d base -o locales/base.pot } diff --git a/archinstall/tui/binding_descriptions.py b/archinstall/tui/binding_descriptions.py new file mode 100644 index 00000000..288ce70d --- /dev/null +++ b/archinstall/tui/binding_descriptions.py @@ -0,0 +1,77 @@ +"""Textual's built-in key binding descriptions, listed for xgettext. + +These strings live inside the textual package, so xgettext cannot find them +when scanning this code base. At runtime _translate_bindings() in +components.py translates every binding description with tr(), including the +ones inherited from textual widgets - this module only makes those strings +visible to the extraction in locales_generator.sh (via the tr_noop keyword). + +The list covers the MRO-merged bindings of the textual classes used in +components.py: _translate_bindings() operates on the merged bindings map, so +descriptions inherited from ancestors (e.g. Scroll Up from ScrollView) are +translated at runtime too and must be listed here. + +Verify or regenerate the list after a textual upgrade or after introducing +a new textual widget in components.py: + + python3 test_tooling/check_binding_descriptions.py +""" + +from archinstall.lib.translationhandler import tr_noop + +# textual 8.2.8 +TEXTUAL_BINDING_DESCRIPTIONS: tuple[str, ...] = ( + tr_noop('Bottom'), + tr_noop('Copy selected text'), + tr_noop('Cursor down'), + tr_noop('Cursor left'), + tr_noop('Cursor right'), + tr_noop('Cursor up'), + tr_noop('Cut selected text'), + tr_noop('Delete all to the left'), + tr_noop('Delete all to the right'), + tr_noop('Delete character left'), + tr_noop('Delete character right'), + tr_noop('Delete left to start of word'), + tr_noop('Delete right to start of word'), + tr_noop('Down'), + tr_noop('End'), + tr_noop('First'), + tr_noop('Focus Next'), + tr_noop('Focus Previous'), + tr_noop('Go to end'), + tr_noop('Go to start'), + tr_noop('Home'), + tr_noop('Last'), + tr_noop('Move cursor left'), + tr_noop('Move cursor left a word'), + tr_noop('Move cursor left a word and select'), + tr_noop('Move cursor left and select'), + tr_noop('Move cursor right a word'), + tr_noop('Move cursor right a word and select'), + tr_noop('Move cursor right and select'), + tr_noop('Move cursor right or accept the completion suggestion'), + tr_noop('Page Down'), + tr_noop('Page Left'), + tr_noop('Page Right'), + tr_noop('Page Up'), + tr_noop('Page down'), + tr_noop('Page up'), + tr_noop('Paste text from the clipboard'), + tr_noop('Press button'), + tr_noop('Quit'), + tr_noop('Scroll Down'), + tr_noop('Scroll End'), + tr_noop('Scroll Home'), + tr_noop('Scroll Left'), + tr_noop('Scroll Right'), + tr_noop('Scroll Up'), + tr_noop('Select'), + tr_noop('Select all'), + tr_noop('Select line end'), + tr_noop('Select line start'), + tr_noop('Submit'), + tr_noop('Toggle option'), + tr_noop('Top'), + tr_noop('Up'), +) diff --git a/archinstall/tui/components.py b/archinstall/tui/components.py index a2e6b132..03349c90 100644 --- a/archinstall/tui/components.py +++ b/archinstall/tui/components.py @@ -150,6 +150,19 @@ class LoadingScreen(BaseScreen[ValueT]): _ = self.dismiss() +class _Input(Input): + @override + def on_mount(self) -> None: + _translate_bindings(self._merged_bindings, self._bindings) + + +class _Button(Button): + # no @override: Button has no on_mount in its MRO, + # textual dispatches the handler by naming convention + def on_mount(self) -> None: + _translate_bindings(self._merged_bindings, self._bindings) + + class _OptionList(OptionList): BINDINGS: ClassVar = [ Binding('down', 'cursor_down', 'Down', show=True), @@ -309,7 +322,7 @@ class OptionListScreen(BaseScreen[ValueT]): yield ScrollableContainer(preview_label) if self._filter: - yield Input(placeholder='/filter', id='filter-input') + yield _Input(placeholder='/filter', id='filter-input') yield Footer() @@ -540,7 +553,7 @@ class SelectListScreen(BaseScreen[ValueT]): yield ScrollableContainer(preview_label) if self._filter: - yield Input(placeholder='/filter', id='filter-input') + yield _Input(placeholder='/filter', id='filter-input') yield Footer() @@ -702,12 +715,12 @@ class ConfirmationScreen(BaseScreen[ValueT]): with Vertical(classes='content-container'): with Horizontal(classes='buttons-container'): for item in self._group.items: - yield Button(item.text, id=item.key) + yield _Button(item.text, id=item.key) else: with Vertical(): with Horizontal(classes='buttons-container'): for item in self._group.items: - yield Button(item.text, id=item.key) + yield _Button(item.text, id=item.key) yield Rule(orientation='horizontal') if self._preview_header is not None: @@ -848,7 +861,7 @@ class InputScreen(BaseScreen[str]): with Center(classes='container-wrapper'): with Vertical(classes='input-content'): - yield Input( + yield _Input( placeholder=self._placeholder, password=self._password, value=self._default_value, diff --git a/test_tooling/check_binding_descriptions.py b/test_tooling/check_binding_descriptions.py new file mode 100755 index 00000000..0354f15a --- /dev/null +++ b/test_tooling/check_binding_descriptions.py @@ -0,0 +1,66 @@ +#!/usr/bin/env python3 +"""Verify archinstall/tui/binding_descriptions.py against the installed textual. + +Run manually after a textual upgrade or after introducing a new textual +widget in archinstall/tui/components.py: + + python3 test_tooling/check_binding_descriptions.py + +The script parses the tr_noop() entries from binding_descriptions.py (no +archinstall import needed) and compares them with the MRO-merged binding +descriptions of the textual classes used in components.py. Exits non-zero +on any difference and prints the exact missing/stale entries. +""" + +import re +import sys +from pathlib import Path + +from textual.app import App +from textual.screen import Screen +from textual.widgets import Button, DataTable, HelpPanel, Input, OptionList, SelectionList + +# Must mirror the textual widget classes used in archinstall/tui/components.py. +# Extend when a new widget is introduced there. +TEXTUAL_CLASSES = (App, Screen, Button, DataTable, HelpPanel, Input, OptionList, SelectionList) + +MODULE_PATH = Path(__file__).parent.parent / 'archinstall/tui/binding_descriptions.py' + + +def live_descriptions() -> set[str]: + descriptions: set[str] = set() + # Walk the full MRO: _translate_bindings() operates on the merged bindings + # map, so descriptions inherited from ancestors are translated too. + for cls in TEXTUAL_CLASSES: + for klass in cls.__mro__: + for binding in klass.__dict__.get('BINDINGS', []): + description = getattr(binding, 'description', None) + if not description and isinstance(binding, tuple) and len(binding) > 2: + description = binding[2] + if description: + descriptions.add(str(description)) + return descriptions + + +def listed_descriptions() -> set[str]: + content = MODULE_PATH.read_text(encoding='utf-8') + return set(re.findall(r"tr_noop\('([^']+)'\)", content)) + + +def main() -> int: + live = live_descriptions() + listed = listed_descriptions() + + if live == listed: + print(f'OK: {len(listed)} descriptions in sync with installed textual') + return 0 + + for description in sorted(live - listed): + print(f'missing from binding_descriptions.py: {description}') + for description in sorted(listed - live): + print(f'stale in binding_descriptions.py: {description}') + return 1 + + +if __name__ == '__main__': + sys.exit(main())