feat(i18n): complete Portuguese, add Brazilian Portuguese (pt_BR)
Some checks are pending
ci / analyze (push) Waiting to run
ci / test-commons-core (push) Waiting to run
ci / test-app-seeds (push) Waiting to run

Fill the ~74 UI strings pt.i18n.json was missing (saved searches, label
scanning, Plantaré, lot history), then add pt_BR as a proper Brazilian
variant rather than a copy of European Portuguese: tu/teu/tua -> você/
seu/sua with matching verb conjugation, partilhar -> compartilhar, and
Guardar -> Salvar for UI actions (seed-saving keeps "guardar", the
correct term in both variants). Wires AppLocale.ptBr into the language
picker and regenerates slang output.
This commit is contained in:
vjrj 2026-07-20 23:11:01 +02:00
parent 071be44851
commit d80f6d50fa
19 changed files with 5231 additions and 1920 deletions

View file

@ -12,6 +12,19 @@
"remove": "Remover dos favoritos",
"unavailable": "Já não está disponível"
},
"savedSearches": {
"title": "Pesquisas guardadas",
"empty": "Ainda não há pesquisas guardadas. Guarda uma pesquisa no mercado e avisamos-te quando aparecer algo parecido na tua zona.",
"save": "Guardar esta pesquisa",
"nameLabel": "Dá um nome a esta pesquisa",
"namePlaceholder": "ex.: Tomates perto de mim",
"saved": "Pesquisa guardada — vamos avisar-te sobre novas correspondências perto de ti",
"openTooltip": "Pesquisas guardadas",
"delete": "Eliminar",
"deleteConfirm": "Eliminar esta pesquisa guardada?",
"newMatchesBadge": "{n} novas",
"alert": "Sementes perto de ti: {label}"
},
"seedSaving": {
"title": "Guardar a sua semente",
"subtitle": "O que é preciso para manter a variedade fiel",
@ -95,6 +108,7 @@
"langEs": "Español",
"langEn": "English",
"langPt": "Português",
"langPtBr": "Português (Brasil)",
"langAst": "Asturianu",
"langFr": "Français",
"langDe": "Deutsch",
@ -147,9 +161,9 @@
"license": "Licença",
"licenseValue": "AGPL-3.0",
"website": "Sítio web",
"sourceCode": "Código-fonte",
"translate": "Ajuda a traduzir",
"translateSubtitle": "Ajuda a trazer o Tane para o teu idioma",
"sourceCode": "Código-fonte",
"translate": "Ajuda a traduzir",
"translateSubtitle": "Ajuda a trazer o Tane para o teu idioma",
"openSourceLicenses": "Licenças de código aberto",
"openSourceLicensesSubtitle": "Bibliotecas de terceiros e as suas licenças",
"copyright": "© {years} Associação Comunes, sob AGPLv3"
@ -226,6 +240,10 @@
"addLink": "Adicionar ligação",
"linkUrl": "URL",
"linkTitle": "Título (opcional)",
"reference": "Saber mais",
"refGbif": "GBIF",
"refWikipedia": "Wikipédia",
"refWikispecies": "Wikispecies",
"notes": "Notas",
"addLot": "Adicionar lote",
"editLot": "Editar lote",
@ -351,6 +369,15 @@
"saved": "Etiquetas guardadas",
"cancelled": "Cancelado"
},
"scan": {
"action": "Digitalizar um rótulo de semente",
"title": "Digitalizar um rótulo",
"notALabel": "Esse código não é um rótulo de semente",
"addTitle": "Não está na tua coleção",
"addBody": "Adicionar “{label}” às tuas sementes?",
"add": "Adicionar",
"added": "Adicionado à tua coleção"
},
"cropCalendar": {
"add": "Calendário de cultivo",
"title": "Calendário de cultivo",
@ -645,7 +672,30 @@
"dueByHint": "Um lembrete gentil, nunca imposto",
"pickDate": "Escolher data",
"clearDate": "Limpar data",
"sectionTitle": "Compromissos"
"sectionTitle": "Compromissos",
"propose": "Propor um Plantaré assinado",
"proposeHelp": "Ambos mantêm a mesma promessa, assinada pelos dois — prova de que esta semente mudou de mãos e será cultivada e devolvida.",
"proposeTo": "Com {name}",
"sent": "Proposta enviada — a aguardar que assinem",
"seedLabel": "Que semente?",
"seedHint": "A variedade a que se refere esta promessa",
"returnKindLabel": "O que volta?",
"returnSimilar": "Uma quantidade semelhante de semente",
"returnSimilarNote": "polinização aberta · não transgénico · cultivado organicamente",
"returnWork": "Algumas horas de trabalho",
"returnOther": "Outra coisa",
"workHoursLabel": "Quantas horas?",
"proposalsSection": "À espera da tua resposta",
"incomingFrom": "{name} propõe um Plantaré",
"accept": "Aceitar e assinar",
"declineAction": "Recusar",
"declineReasonHint": "Motivo (opcional)",
"acceptedToast": "Assinado — agora ambos o mantêm",
"declinedToast": "Recusado",
"badgeAwaiting": "A aguardar assinatura",
"badgeSigned": "Assinado por ambos",
"badgeDeclined": "Recusado",
"offline": "Estás offline — será enviado quando reconectares"
},
"handover": {
"title": "Dei ou recebi sementes",
@ -660,6 +710,37 @@
"promiseGave": "Vão devolver-me semente",
"promiseReceived": "Vou devolver semente"
},
"history": {
"title": "História deste lote",
"tooltip": "História",
"sowToday": "Semeado hoje",
"harvestToday": "Colhido hoje",
"sownRecorded": "Sementeira registada",
"harvestRecorded": "Colheita registada",
"movementReceived": "Recebido",
"movementGiven": "Oferecido",
"movementSown": "Semeado",
"movementHarvested": "Colhido",
"movementGerminationTest": "Teste de germinação",
"movementSplit": "Dividido em lotes",
"movementDiscarded": "Descartado",
"created": "Adicionado à tua coleção",
"from": "De {origin}",
"germinationResult": "Teste de germinação — {percent}%",
"linkedEarlier": "Vem de um lote anterior",
"outcomeQuestion": "Como correu?",
"outcomeGood": "Bem",
"outcomeMixed": "Mais ou menos",
"outcomePoor": "Mal",
"outcomeNoteHint": "Uma nota para o teu eu futuro (opcional)",
"outcomeSaved": "Registado",
"ratedGood": "Correu bem",
"ratedMixed": "Correu mais ou menos",
"ratedPoor": "Correu mal",
"outcomeTitle": "Nota da estação",
"outcomeYear": "Estação {year}",
"isolationHint": "Esta espécie cruza-se com vizinhas próximas — cultiva-a a cerca de {meters} m de distância de outras para a manter pura"
},
"sale": {
"title": "Vendas",
"help": "Regista semente vendida ou comprada — dinheiro, Ğ1 ou qualquer moeda. Um modelo separado do presente e do Plantare. Nunca se cobra comissão pelas sementes.",