Check translation contracts offline, add Swedish to the installer and enable the website languages

- Offline checks for terminal and website catalogs reject translations that change commands, paths, identifiers or placeholders
- Terminal and documentation texts that broke those contracts are corrected in every language
- Swedish can be chosen in the stable and beta installers
- The website routes, language switcher and exported pages cover the eight languages, with the shared website texts in each of them
- Website documentation translations are generated only when requested
- From PR #475 by @jcastro
This commit is contained in:
MacRimi
2026-10-18 12:58:25 +02:00
parent f363ef4395
commit f8cabb4700
54 changed files with 2149 additions and 173 deletions
+22 -22
View File
@@ -138,7 +138,7 @@
"ALL DATA ON": "TODOS OS DADOS EM",
"ALL DATA ON THIS DISK WILL BE PERMANENTLY LOST!": "TODOS OS DADOS NESTE DISCO SERÃO PERMANENTEMENTE PERDIDOS!",
"ALL Utilities": "TODOS os utilitários",
"ALLOWED_HOSTS cannot contain line breaks": "Allowed hosts não pode conter quebras de linha",
"ALLOWED_HOSTS cannot contain line breaks": "ALLOWED_HOSTS não pode conter quebras de linha",
"AList initial login": "Login inicial do AList",
"AMD (ROCm)": "AMD (ROCm)",
"AMD (VA-API and ROCm detection)": "AMD (detecção VA-API e ROCm)",
@@ -1643,8 +1643,8 @@
"Default Proxmox logo applied": "Logotipo padrão do Proxmox aplicado",
"Default is none (video-only passthrough). Use SPACE to toggle selections.": "O padrão é nenhum (passagem somente de vídeo). Use ESPAÇO para alternar as seleções.",
"Default journald configuration restored": "Configuração padrão do diário restaurada",
"Default location is /mnt/<name>. The share will be mounted here on the host with open permissions so an unprivileged LXC can bind-mount and write to it. For LXC access, bind-mount this path with the LXC Mount Manager.": "O local padrão é /mnt/<nome>. O compartilhamento será montado aqui no host com permissões abertas para que um LXC sem privilégios possa montar e gravar nele. Para acesso LXC, monte este caminho com o LXC Mount Manager.",
"Default location is /mnt/<name>. The share will be mounted here on the host. Use this path in /etc/fstab. For LXC access, bind-mount this path with the LXC Mount Manager.": "O local padrão é /mnt/<nome>. O compartilhamento será montado aqui no host. Use este caminho em /etc/fstab. Para acesso LXC, monte este caminho com o LXC Mount Manager.",
"Default location is /mnt/<name>. The share will be mounted here on the host with open permissions so an unprivileged LXC can bind-mount and write to it. For LXC access, bind-mount this path with the LXC Mount Manager.": "A localização predefinida é /mnt/<name>. A partilha será montada aqui no host com permissões abertas, para que um LXC sem privilégios a possa montar por bind mount e nela escrever. Utilize o LXC Mount Manager para criar essa montagem no LXC.",
"Default location is /mnt/<name>. The share will be mounted here on the host. Use this path in /etc/fstab. For LXC access, bind-mount this path with the LXC Mount Manager.": "A localização predefinida é /mnt/<name>. A partilha será montada aqui no host. Utilize este caminho em /etc/fstab. Para aceder a partir de um LXC, crie um bind mount deste caminho com o LXC Mount Manager.",
"Default login": "Utilizador por omissão",
"Default options": "Opções padrão",
"Default options read/write": "Opções padrão leitura/gravação",
@@ -2035,7 +2035,7 @@
"Enter VM ID:": "Insira o ID da VM:",
"Enter VM/CT ID:": "Insira o ID da VM/CT:",
"Enter ZFS pool name for the selected disk:": "Insira o nome do pool ZFS para o disco selecionado:",
"Enter a name for the mount point (used as /mnt/<name>):": "Insira um nome para o ponto de montagem (usado como /mnt/<nome>):",
"Enter a name for the mount point (used as /mnt/<name>):": "Introduza um nome para o ponto de montagem (será usado como /mnt/<name>):",
"Enter a name for the new virtual machine:": "Insira um nome para a nova máquina virtual:",
"Enter a non-empty password or access token on a single line.": "Insira uma senha ou token de acesso não vazio em uma única linha.",
"Enter a number, or write or paste a command:": "Digite um número ou escreva ou cole um comando:",
@@ -2179,11 +2179,11 @@
"Example: cp /etc/pve/lxc/114.conf /etc/pve/lxc/114.conf.bak": "Exemplo: cp /etc/pve/lxc/114.conf /etc/pve/lxc/114.conf.bak",
"Example: daily or Mon..Fri 03:00": "Exemplo: diariamente ou Seg..Sex 03:00",
"Example: mkdir -p /tmp/lxc_convert_114": "Exemplo: mkdir -p /tmp/lxc_convert_114",
"Example: pct config 110 | grep unprivileged": "Exemplo: configuração pct 110 | grep sem privilégios",
"Example: pct config 110 | grep unprivileged": "Exemplo: pct config 110 | grep unprivileged",
"Example: pct stop 110": "Exemplo: pct stop 110",
"Example: pct stop 114": "Exemplo: parada pct 114",
"Example: pct stop 114": "Exemplo: pct stop 114",
"Example: pvesm add nfs nfs-nas --server 192.168.1.50 --export /volume1/proxmox --content import,backup": "Exemplo: pvesm add nfs nfs-nas --server 192.168.1.50 --export /volume1/proxmox --content import,backup",
"Example: pvesm path local-lvm:vm-114-disk-0": "Exemplo: caminho pvesm local-lvm:vm-114-disk-0",
"Example: pvesm path local-lvm:vm-114-disk-0": "Exemplo: pvesm path local-lvm:vm-114-disk-0",
"Example: sed -i '/^unprivileged: 1/d' /etc/pve/lxc/110.conf": "Exemplo: sed -i '/^unprivileged: 1/d' /etc/pve/lxc/110.conf",
"Examples:": "Exemplos:",
"Execute destructive rollback?": "Executar reversão destrutiva?",
@@ -2495,7 +2495,7 @@
"For a consistent export, the VM should be stopped.": "Para uma exportação consistente, a VM deve ser interrompida.",
"For any question, issue or bug report, please use the official repository": "Para qualquer dúvida, problema ou relatório de bug, use o repositório oficial",
"For dedicated GPUs, FLR is required by this policy to reduce VM": "Para GPUs dedicadas, o FLR é exigido por esta política para reduzir VM",
"For example: pct enter 101": "Por exemplo: pct digite 101",
"For example: pct enter 101": "Por exemplo: pct enter 101",
"For guest shares add: --options guest": "Para compartilhamentos de convidados, adicione: --options guest",
"For security reasons, the system cannot format it.": "Por motivos de segurança, o sistema não pode formatá-lo.",
"For unprivileged containers, use instead:": "Para contêineres sem privilégios, use:",
@@ -2907,8 +2907,8 @@
"If notifications are enabled (Telegram/Discord/ntfy/...), you will receive a \"Host restore finished\" message when all background tasks complete.": "Se as notificações estiverem habilitadas (Telegram/Discord/ntfy/...), você receberá uma mensagem \"Restauração do host concluída\" quando todas as tarefas em segundo plano forem concluídas.",
"If passthrough fails on Windows: install RadeonResetBugFix.": "Se a passagem falhar no Windows: instale RadeonResetBugFix.",
"If path not accessible (ZFS/BTRFS):": "Se o caminho não estiver acessível (ZFS/BTRFS):",
"If pvesm path returned a DEVICE (LVM):": "Se o caminho pvesm retornou um DEVICE (LVM):",
"If pvesm path returned a DIRECTORY (ZFS/BTRFS):": "Se o caminho pvesm retornou um DIRETÓRIO (ZFS/BTRFS):",
"If pvesm path returned a DEVICE (LVM):": "Se pvesm path devolveu um DISPOSITIVO (LVM):",
"If pvesm path returned a DIRECTORY (ZFS/BTRFS):": "Se pvesm path devolveu um DIRETÓRIO (ZFS/BTRFS):",
"If repositories error:": "Se houver erro nos repositórios:",
"If the container had already been changed, its previous native backup is restored. Shared host directories are not reverted. The disks of the failed attempt are removed when the cleanup succeeds.": "Se o contêiner já tiver sido alterado, seu backup nativo anterior será restaurado. Os diretórios de host compartilhados não são revertidos. Os discos da tentativa fracassada serão removidos quando a limpeza for bem-sucedida.",
"If the host freezes, remove hostpci entries from": "Se o host congelar, remova as entradas hostpci de",
@@ -3048,7 +3048,7 @@
"Initiator IQN is authorised on the target": "O iniciador IQN está autorizado no alvo",
"Initiator IQN:": "IQN do iniciador:",
"Inkscape is professional quality vector graphics software which runs on Linux, Mac OS X and Windows desktop computers.": "Inkscape é um software gráfico vetorial de qualidade profissional que funciona em computadores desktop Linux, Mac OS X e Windows.",
"Inside the LXC, create the administrator: console kimai:user:create YOUR_USERNAME YOUR_EMAIL ROLE_SUPER_ADMIN": "Dentro do LXC, crie o administrador: console kimai:user:create Your USERNAME Your EMAIL ROLE_SUPER_ADMIN",
"Inside the LXC, create the administrator: console kimai:user:create YOUR_USERNAME YOUR_EMAIL ROLE_SUPER_ADMIN": "Dentro do LXC, crie o administrador: console kimai:user:create YOUR_USERNAME YOUR_EMAIL ROLE_SUPER_ADMIN",
"Inspect disks before any action": "Inspecione os discos antes de qualquer ação",
"Inspect host device nodes": "Inspecione os nós do dispositivo host",
"Inspect passthrough/kernel events": "Inspecionar eventos de passagem/kernel",
@@ -3225,7 +3225,7 @@
"Interrupted operation:": "operation interrompida:",
"Interrupted stack operation found": "Pilha interrompida operation encontrada",
"Invalid 'proxmox-ve' candidate (not 9.x or none). Please verify your repository configuration and network, then retry.": "Candidato 'proxmox-ve' inválido (não 9.x ou nenhum). Verifique a configuração e a rede do seu repositório e tente novamente.",
"Invalid ALLOWED_HOSTS value": "Valor Allowed hosts inválido",
"Invalid ALLOWED_HOSTS value": "Valor de ALLOWED_HOSTS inválido",
"Invalid Home Assistant OS check timeout": "Tempo de verificação do sistema operacional Home Assistant inválido",
"Invalid ID": "ID inválido",
"Invalid IPv4 address": "Endereço IPv4 inválido",
@@ -3460,7 +3460,7 @@
"Keyfile removed.": "arquivo-chave removido.",
"Keyrings method failed; trying apt-key fallback": "O método dos chaveiros falhou; tentando substituto do apt-key",
"KiCad - A Cross Platform and Open Source Electronics Design Automation Suite.": "KiCad - Uma plataforma cruzada e Open Source Electronics Design Automation Suite.",
"Kimai has no default account. Enter the container with: pct enter {main_vmid}": "Kimai não tem conta padrão. Digite o recipiente com: pct enter {main vmid}",
"Kimai has no default account. Enter the container with: pct enter {main_vmid}": "O Kimai não tem uma conta predefinida. Aceda ao contentor com: pct enter {main_vmid}",
"Kimai is a professional grade time-tracking application, free and open-source.": "Kimai é um aplicativo de rastreamento de tempo profissional, gratuito e de código aberto.",
"Kometa is a powerful tool designed to give you complete control over your media libraries. With Kometa, you can take your customization to the next level, with granular control over metadata, collections, overlays, and much more.": "Kometa é uma ferramenta poderosa projetada para lhe dar controle completo sobre suas bibliotecas de mídia. Com o Kometa, você pode levar sua personalização para o próximo nível, com controle granular sobre metadados, coleções, sobreposições e muito mais.",
"Kometa reads its configuration from /config/config.yml and the container only ships /config/config.yml.template. Copy the template to config.yml, fill in the required Plex and TMDb connections, then restart the container.": "Kometa lê a sua configuração a partir de /config/config.yml e o recipiente apenas navios /config/config.yml.template. Copie o modelo para config.yml, preencha o requi vermelho Plex e conexões TMDb, em seguida, reinicie o recipiente.",
@@ -3512,7 +3512,7 @@
"Leave empty to keep every backup (not recommended).": "Deixe em branco para manter todos os backups (não recomendado).",
"Leave empty to use the retention of the storage.": "Deixe em branco para usar a retenção do armazenamento.",
"Legacy PVE 8 .list files commented or not present": "Arquivos .list PVE 8 legados comentados ou não presentes",
"Legacy ceph.list commented or not present": "Ceph.list legado comentado ou não presente",
"Legacy ceph.list commented or not present": "ceph.list antigo comentado ou inexistente",
"Legacy gasket-dkms cleanup could not be verified as complete.": "Não foi possível confirmar a conclusão da limpeza do pacote gasket-dkms legado.",
"Legacy gasket-dkms detected": "gasket-dkms legado detetado",
"Legacy network tools (e.g., ifconfig)": "Ferramentas de rede legadas (por exemplo, ifconfig)",
@@ -4263,7 +4263,7 @@
"No jobs": "Sem empregos",
"No language selected.": "Nenhum idioma selecionado.",
"No local disk storage configured.": "Nenhum armazenamento em disco local configurado.",
"No main sources.list present (skipped)": "Nenhuma fonte principal.list presente (ignorada)",
"No main sources.list present (skipped)": "Não existe um sources.list principal (ignorado)",
"No matches for:": "Nenhuma correspondência para:",
"No matching PVE vzdump jobs were found for the PBS backend.": "Nenhum trabalho PVE vzdump correspondente foi encontrado para o backend do PBS.",
"No matching PVE vzdump jobs were found for the local archive backend.": "Nenhum trabalho PVE vzdump correspondente foi encontrado para o back-end do arquivo local.",
@@ -6993,7 +6993,7 @@
"Transaction log:": "Registo de transacções:",
"Translation files:": "Arquivos de tradução:",
"Transmission is designed for easy, powerful use. Transmission has the features you want from a BitTorrent client: encryption, a web interface, peer exchange, magnet links, DHT, µTP, UPnP and NAT-PMP port forwarding, webseed support, watch directories, tracker editing, global and per-torrent speed limits, and more.": "Transmission é projetado para uso fácil e poderoso. Transmission tem os recursos que você deseja de um cliente BitTorrent: criptografia, uma interface web, troca de pares, links magnéticos, DHT, μTP, encaminhamento de portas UPnP e NAT-PMP, suporte a webseed, diretórios de relógio, edição de rastreadores, limites de velocidade globais e per-torrent, e muito mais.",
"Tried pvesm path and manual detection methods": "Tentei caminho pvesm e métodos de detecção manual",
"Tried pvesm path and manual detection methods": "Foram tentados pvesm path e os métodos de deteção manual",
"Trust this certificate and save it for scheduled backups?": "Confiar neste certificado e salvá-lo para backups agendados?",
"Try Again": "Tente novamente",
"Try a different search term.": "Experimente um termo de pesquisa diferente.",
@@ -7213,7 +7213,7 @@
"Updates file is empty or unreadable.": "O arquivo de atualizações está vazio ou ilegível.",
"Updating": "Actualização",
"Updating APT package lists...": "Atualizando listas de pacotes APT...",
"Updating Debian Bookworm → Trixie in sources.list...": "Atualizando Debian Bookworm → Trixie em fontes.list...",
"Updating Debian Bookworm → Trixie in sources.list...": "A atualizar Debian Bookworm → Trixie em sources.list...",
"Updating Figurine binary...": "Atualizando o binário da estatueta...",
"Updating Lynis to the latest version...": "Atualizando Lynis para a versão mais recente...",
"Updating PVE application manager...": "Atualizando o gerenciador de aplicativos PVE...",
@@ -8018,8 +8018,8 @@
"pvesm command not found. This should not happen on Proxmox.": "Comando pvesm não encontrado. Isso não deveria acontecer no Proxmox.",
"pvesm not available.": "pvesm não disponível.",
"pvesm not found.": "pvesm não encontrado.",
"pvesm path failed, trying manual detection...": "caminho pvesm falhou, tentando detecção manual...",
"pvesm status failed": "status pvesm falhou",
"pvesm path failed, trying manual detection...": "O pvesm path falhou; a tentar a deteção manual...",
"pvesm status failed": "O pvesm status falhou",
"pyLoad is a Free and Open Source download manager written in Python and designed to be extremely lightweight, easily extensible and fully manageable via web.": "pyLoad é um gerenciador de download livre e Open Source escrito em Python e projetado para ser extremamente leve, facilmente extensível e totalmente gerenciável via web.",
"pyLoad web interface": "interface web pyLoad",
"qBittorrent WebUI password (user: admin)": "Senha do WebUI do qBittorrent (utilizador: administrador)",
@@ -8079,7 +8079,7 @@
"smbclient command is not working properly.": "O comando smbclient não está funcionando corretamente.",
"smbclient command not found after installation.": "Comando smbclient não encontrado após a instalação.",
"sources.list update skipped (no change)": "Atualização de sources.list ignorada (sem alteração)",
"sources.list updated to Trixie": "fontes.list atualizado para Trixie",
"sources.list updated to Trixie": "sources.list atualizado para Trixie",
"ssh-keygen failed. Cannot create a new SSH key.": "ssh-keygen falhou. Não é possível criar uma nova chave SSH.",
"stale entry/entries for interfaces no longer present": "entradas/entradas obsoletas para interfaces não estão mais presentes",
"standard performance": "desempenho padrão",
@@ -8098,7 +8098,7 @@
"switch_gpu_mode.sh was not found.": "switch_gpu_mode.sh não foi encontrado.",
"sysfs ROM dump failed — trying ACPI VFCT table...": "Falha no despejo de ROM do sysfs - tentando tabela ACPI VFCT...",
"syslog-ng allows you to flexibly collect, parse, classify, rewrite and correlate logs from across your infrastructure and store or route them to log analysis tools.": "o syslog-ng permite coletar, analisar, classificar, reescrever e correlacionar logs de toda sua infraestrutura e armazená-los ou roteá-los para ferramentas de análise de log.",
"systemctl restart networking failed:": "falha na reinicialização da rede do systemctl:",
"systemctl restart networking failed:": "O systemctl restart networking falhou:",
"systemd OnCalendar expression": "Expressão Systemd OnCalendar",
"the API key was not generated on the first start": "a tecla API não foi gerada no primeiro início",
"the NVIDIA hook of the container is not available:": "o hook NVIDIA do contêiner não está disponível:",
@@ -8152,7 +8152,7 @@
"video + recognition": "vídeo + reconhecimento",
"video only": "apenas vídeo",
"vzdump backup speed optimization completed": "otimização da velocidade de backup do vzdump concluída",
"wallabag builds its links from the address given during the installation. If it does not match the address of the container, edit lxc.environment.runtime: SYMFONY__ENV__DOMAIN_NAME in /etc/pve/lxc/<CTID>.conf with the container stopped, and start it again.": "wallabag constrói seus links a partir do endereço fornecido durante a instalação. Se não corresponder ao endereço do recipiente, edite lxc.environment. tempo de execução: SYMFONY ENV DOMAIN NAME em /etc/pve/lxc/<CTID>.conf com o recipiente parado, e inicie-o novamente.",
"wallabag builds its links from the address given during the installation. If it does not match the address of the container, edit lxc.environment.runtime: SYMFONY__ENV__DOMAIN_NAME in /etc/pve/lxc/<CTID>.conf with the container stopped, and start it again.": "O wallabag gera as ligações com o endereço indicado na instalação. Se não corresponder ao do contentor, pare-o, edite lxc.environment.runtime: SYMFONY__ENV__DOMAIN_NAME em /etc/pve/lxc/<CTID>.conf e volte a iniciá-lo.",
"wallabag listens on port 80 of the container and stores its data in SQLite.": "wallabag escuta na porta 80 do recipiente e armazena seus dados em SQLite.",
"wallabag web interface": "Interface Web wallabag",
"was": "era",