feat: cover seedlings (plantón) in copy + legal, backup cadence, server picker
Beta-tester feedback triage. The data model already had LotType.seedling as first class; the gaps were copy and UX. - Seedlings/plantones: broaden landing hero (EN/ES), in-app legal notice, and all legal texts (site + docs masters) from seeds-only to "seeds and seedlings", with a live-plant phytosanitary/transport caveat. Seeds stay the hero — targeted, not a blanket rename. - Backups: settings line now states the 7-day cadence explicitly; cadence lives in AutoBackupService.backupInterval as the single source for text and schedule. - Community servers: replace the manual wss:// text box with a checklist of the known servers (defaults visible/toggleable) plus an "add server" affordance with basic validation. No jargon in the UI. i18n across en/es/pt/fr/de/ast (ja falls back). Tests updated + a new server-picker widget test.
This commit is contained in:
parent
ab027a8779
commit
15385a26cf
36 changed files with 410 additions and 179 deletions
|
|
@ -281,8 +281,8 @@ class _Translations$backup$pt extends Translations$backup$en {
|
|||
// Translations
|
||||
@override String get title => 'Cópia de segurança';
|
||||
@override String get autoBackupTitle => 'Cópias automáticas';
|
||||
@override String autoBackupLast({required Object date}) => 'Última cópia guardada em ${date}';
|
||||
@override String get autoBackupNone => 'Uma cópia é guardada automaticamente em segundo plano';
|
||||
@override String autoBackupLast({required Object date, required Object days}) => 'Última cópia em ${date} · a cada ${days} dias';
|
||||
@override String autoBackupNone({required Object days}) => 'Uma cópia é guardada automaticamente a cada ${days} dias';
|
||||
@override String get exportJson => 'Guardar uma cópia de segurança';
|
||||
@override String get exportJsonSubtitle => 'Uma cópia completa para guardar em segurança, restaurar depois ou levar para outro aparelho';
|
||||
@override String get importJson => 'Restaurar uma cópia';
|
||||
|
|
@ -770,8 +770,10 @@ class _Translations$market$pt extends Translations$market$en {
|
|||
@override String get areaCodeLabel => 'Código de zona';
|
||||
@override String get areaCodeHint => 'Um código curto como sp3e9 — não um nome de lugar';
|
||||
@override String get serversLabel => 'Servidores da comunidade';
|
||||
@override String get serversHelp => 'Um endereço por linha (wss://…). Deixa assim se não souberes.';
|
||||
@override String get serversHelp => 'Escolhe que servidores usar. Deixa assim se não souberes.';
|
||||
@override String get serversAdvanced => 'Adicionar outro servidor';
|
||||
@override String get serverAddress => 'Endereço do servidor';
|
||||
@override String get serverInvalid => 'Introduz um endereço válido (wss://…)';
|
||||
@override String get save => 'Guardar';
|
||||
@override String get saved => 'Guardado';
|
||||
@override String get wanted => 'Procuro';
|
||||
|
|
@ -1008,8 +1010,8 @@ class _Translations$legal$pt extends Translations$legal$en {
|
|||
@override String get privacyBody => 'O Tane funciona sem conta, e tudo o que registas fica no teu dispositivo, cifrado. Não há publicidade, nem rastreadores, nem servidor do Tane.\n\nNada é partilhado a não ser que tu queiras: quando publicas uma oferta ou o teu perfil, ou envias uma mensagem, viaja por servidores comunitários. As ofertas levam apenas uma zona aproximada — nunca a tua morada.\n\nO que publicas é público, e podem ficar cópias mesmo depois de o retirares — por isso partilha com cuidado.';
|
||||
@override String get rulesTitle => 'As regras do jogo';
|
||||
@override String get rulesBody => 'O Tane é uma ferramenta, não uma loja: as trocas são acordadas diretamente entre pessoas e ninguém fica com comissão. Isso também significa que és responsável pelo que ofereces e envias.\n\nNo mercado: sê honesto com as tuas sementes, oferece apenas o que podes partilhar, trata bem as pessoas e não faças spam. Podes bloquear qualquer pessoa e denunciar ofertas ou pessoas que quebrem as regras — as denúncias são tratadas nos servidores comunitários.';
|
||||
@override String get seedsTitle => 'Sobre partilhar sementes';
|
||||
@override String get seedsBody => 'Oferecer e trocar sementes entre amadores é amplamente reconhecido na maioria dos países. Vender pode ser diferente: em muitos lugares, vender sementes de variedades não registadas oficialmente é restrito — consulta as regras locais antes de pedir um preço.\n\nEnviar sementes para outro país também costuma ser restrito, e as variedades protegidas comercialmente não podem ser propagadas sem autorização. Na dúvida, melhor local e melhor oferta.';
|
||||
@override String get seedsTitle => 'Sobre partilhar sementes e mudas';
|
||||
@override String get seedsBody => 'Oferecer e trocar sementes entre amadores é amplamente reconhecido na maioria dos países. Vender pode ser diferente: em muitos lugares, vender sementes de variedades não registadas oficialmente é restrito — consulta as regras locais antes de pedir um preço.\n\nEnviar sementes para outro país também costuma ser restrito, e as variedades protegidas comercialmente não podem ser propagadas sem autorização. Na dúvida, melhor local e melhor oferta.\n\nO mesmo se aplica a mudas e plantas jovens, mas a planta viva pode ter regras de transporte e fitossanitárias mais rígidas do que a semente: movê-la entre regiões ou países pode exigir controlos adicionais.';
|
||||
@override String get readFull => 'Ler os documentos completos na web';
|
||||
}
|
||||
|
||||
|
|
@ -1495,8 +1497,8 @@ extension on TranslationsPt {
|
|||
'settings.aboutOpen' => 'Acerca do Tane',
|
||||
'backup.title' => 'Cópia de segurança',
|
||||
'backup.autoBackupTitle' => 'Cópias automáticas',
|
||||
'backup.autoBackupLast' => ({required Object date}) => 'Última cópia guardada em ${date}',
|
||||
'backup.autoBackupNone' => 'Uma cópia é guardada automaticamente em segundo plano',
|
||||
'backup.autoBackupLast' => ({required Object date, required Object days}) => 'Última cópia em ${date} · a cada ${days} dias',
|
||||
'backup.autoBackupNone' => ({required Object days}) => 'Uma cópia é guardada automaticamente a cada ${days} dias',
|
||||
'backup.exportJson' => 'Guardar uma cópia de segurança',
|
||||
'backup.exportJsonSubtitle' => 'Uma cópia completa para guardar em segurança, restaurar depois ou levar para outro aparelho',
|
||||
'backup.importJson' => 'Restaurar uma cópia',
|
||||
|
|
@ -1799,8 +1801,10 @@ extension on TranslationsPt {
|
|||
'market.areaCodeLabel' => 'Código de zona',
|
||||
'market.areaCodeHint' => 'Um código curto como sp3e9 — não um nome de lugar',
|
||||
'market.serversLabel' => 'Servidores da comunidade',
|
||||
'market.serversHelp' => 'Um endereço por linha (wss://…). Deixa assim se não souberes.',
|
||||
'market.serversHelp' => 'Escolhe que servidores usar. Deixa assim se não souberes.',
|
||||
'market.serversAdvanced' => 'Adicionar outro servidor',
|
||||
'market.serverAddress' => 'Endereço do servidor',
|
||||
'market.serverInvalid' => 'Introduz um endereço válido (wss://…)',
|
||||
'market.save' => 'Guardar',
|
||||
'market.saved' => 'Guardado',
|
||||
'market.wanted' => 'Procuro',
|
||||
|
|
@ -1921,10 +1925,10 @@ extension on TranslationsPt {
|
|||
'sale.empty' => 'Ainda não há vendas. Anota aqui o que vendes ou compras.',
|
||||
'sale.iSold' => 'Vendi',
|
||||
'sale.iBought' => 'Comprei',
|
||||
'sale.direction' => 'Vendes ou compras?',
|
||||
'sale.counterparty' => 'Com quem?',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'sale.direction' => 'Vendes ou compras?',
|
||||
'sale.counterparty' => 'Com quem?',
|
||||
'sale.counterpartyHint' => 'Uma pessoa ou um coletivo (opcional)',
|
||||
'sale.amount' => 'Montante',
|
||||
'sale.currency' => 'Moeda',
|
||||
|
|
@ -1940,8 +1944,8 @@ extension on TranslationsPt {
|
|||
'legal.privacyBody' => 'O Tane funciona sem conta, e tudo o que registas fica no teu dispositivo, cifrado. Não há publicidade, nem rastreadores, nem servidor do Tane.\n\nNada é partilhado a não ser que tu queiras: quando publicas uma oferta ou o teu perfil, ou envias uma mensagem, viaja por servidores comunitários. As ofertas levam apenas uma zona aproximada — nunca a tua morada.\n\nO que publicas é público, e podem ficar cópias mesmo depois de o retirares — por isso partilha com cuidado.',
|
||||
'legal.rulesTitle' => 'As regras do jogo',
|
||||
'legal.rulesBody' => 'O Tane é uma ferramenta, não uma loja: as trocas são acordadas diretamente entre pessoas e ninguém fica com comissão. Isso também significa que és responsável pelo que ofereces e envias.\n\nNo mercado: sê honesto com as tuas sementes, oferece apenas o que podes partilhar, trata bem as pessoas e não faças spam. Podes bloquear qualquer pessoa e denunciar ofertas ou pessoas que quebrem as regras — as denúncias são tratadas nos servidores comunitários.',
|
||||
'legal.seedsTitle' => 'Sobre partilhar sementes',
|
||||
'legal.seedsBody' => 'Oferecer e trocar sementes entre amadores é amplamente reconhecido na maioria dos países. Vender pode ser diferente: em muitos lugares, vender sementes de variedades não registadas oficialmente é restrito — consulta as regras locais antes de pedir um preço.\n\nEnviar sementes para outro país também costuma ser restrito, e as variedades protegidas comercialmente não podem ser propagadas sem autorização. Na dúvida, melhor local e melhor oferta.',
|
||||
'legal.seedsTitle' => 'Sobre partilhar sementes e mudas',
|
||||
'legal.seedsBody' => 'Oferecer e trocar sementes entre amadores é amplamente reconhecido na maioria dos países. Vender pode ser diferente: em muitos lugares, vender sementes de variedades não registadas oficialmente é restrito — consulta as regras locais antes de pedir um preço.\n\nEnviar sementes para outro país também costuma ser restrito, e as variedades protegidas comercialmente não podem ser propagadas sem autorização. Na dúvida, melhor local e melhor oferta.\n\nO mesmo se aplica a mudas e plantas jovens, mas a planta viva pode ter regras de transporte e fitossanitárias mais rígidas do que a semente: movê-la entre regiões ou países pode exigir controlos adicionais.',
|
||||
'legal.readFull' => 'Ler os documentos completos na web',
|
||||
'marketGate.title' => 'Antes de entrares no mercado',
|
||||
'marketGate.intro' => 'O mercado é um espaço partilhado entre vizinhas e vizinhos. Ao continuar, aceitas umas poucas regras simples:',
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue