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:
vjrj 2026-07-15 15:57:23 +02:00
parent ab027a8779
commit 15385a26cf
36 changed files with 410 additions and 179 deletions

View file

@ -280,8 +280,8 @@ class _Translations$backup$ast extends Translations$backup$en {
// Translations
@override String get title => 'Copia de seguranza';
@override String get autoBackupTitle => 'Copies automátiques';
@override String autoBackupLast({required Object date}) => 'Cabera copia guardada\'l ${date}';
@override String get autoBackupNone => 'Guárdase una copia automáticamente en segundu planu';
@override String autoBackupLast({required Object date, required Object days}) => 'Cabera copia\'l ${date} · cada ${days} díes';
@override String autoBackupNone({required Object days}) => 'Guárdase una copia automáticamente cada ${days} díes';
@override String get exportJson => 'Guardar una copia de seguranza';
@override String get exportJsonSubtitle => 'Una copia completa pa guardar a salvo, restaurar dempués o pasar a otru preséu';
@override String get importJson => 'Restaurar una copia';
@ -771,8 +771,10 @@ class _Translations$market$ast extends Translations$market$en {
@override String get areaCodeLabel => 'Códigu de zona';
@override String get areaCodeHint => 'Un códigu curtiu como sp3e9 — non un nome de llugar';
@override String get serversLabel => 'Servidores de la comunidá';
@override String get serversHelp => 'Una direición per llinia (wss://…). Déxalo asina si nun sabes.';
@override String get serversHelp => 'Escueyi qué servidores usar. Déxalo asina si nun sabes.';
@override String get serversAdvanced => 'Amestar otru servidor';
@override String get serverAddress => 'Direición del servidor';
@override String get serverInvalid => 'Introduz una direición válida (wss://…)';
@override String get save => 'Guardar';
@override String get saved => 'Guardáu';
@override String get wanted => 'Gueto';
@ -1009,8 +1011,8 @@ class _Translations$legal$ast extends Translations$legal$en {
@override String get privacyBody => 'Tane funciona ensin cuenta, y tolo que rexistres queda nel to preséu, cifrao. Nun hai publicidá, nin rastreadores, nin sirvidor de Tane.\n\nNun se comparte nada sacantes que tu quieras: cuando espublices una ofierta o\'l to perfil, o unvíes un mensaxe, viaxa per sirvidores comuñales. Les ofiertes namái lleven una zona averada — enxamás la to direición.\n\nLo qu\'espubliques ye público, y puen quedar copies mesmo dempués de retiralo — asina que comparte con procuru.';
@override String get rulesTitle => 'Les regles del xuegu';
@override String get rulesBody => 'Tane ye una ferramienta, non una tienda: los intercambeos alcuérdense direutamente ente persones y naide lleva comisión. Eso tamién quier dicir que tu respuendes de lo qu\'ufiertes y unvíes.\n\nNel mercáu: sé honestu cola to simiente, ufierta namái lo que puedas compartir, trata bien a la xente y nun faigas spam. Puedes bloquiar a cualquiera y denunciar ofiertes o persones qu\'incumplan les normes — les denuncies atiéndense nos sirvidores comuñales.';
@override String get seedsTitle => 'Tocante a compartir simiente';
@override String get seedsBody => 'Regalar ya intercambiar simiente ente aficionaos ta reconocío ampliamente na mayoría de países. Vender pue ser distinto: en munchos sitios, vender simiente de variedaes non rexistraes oficialmente ta restrinxío — consulta la to normativa enantes de pidir un preciu.\n\nUnviar simiente a otru país tamién suel tar restrinxío, y les variedaes protexíes comercialmente nun puen propagase ensin permisu. Ante la dulda, meyor local y meyor regalu.';
@override String get seedsTitle => 'Tocante a compartir simiente y plantones';
@override String get seedsBody => 'Regalar ya intercambiar simiente ente aficionaos ta reconocío ampliamente na mayoría de países. Vender pue ser distinto: en munchos sitios, vender simiente de variedaes non rexistraes oficialmente ta restrinxío — consulta la to normativa enantes de pidir un preciu.\n\nUnviar simiente a otru país tamién suel tar restrinxío, y les variedaes protexíes comercialmente nun puen propagase ensin permisu. Ante la dulda, meyor local y meyor regalu.\n\nLo mesmo val pa plantones y plantes moces, pero la planta viva pue tener regles de tresporte y fitosanitaries más estrictes que la simiente: movela ente rexones o países pue requerir controles adicionales.';
@override String get readFull => 'Lleer los documentos completos na web';
}
@ -1495,8 +1497,8 @@ extension on TranslationsAst {
'settings.aboutOpen' => 'Tocante a Tane',
'backup.title' => 'Copia de seguranza',
'backup.autoBackupTitle' => 'Copies automátiques',
'backup.autoBackupLast' => ({required Object date}) => 'Cabera copia guardada\'l ${date}',
'backup.autoBackupNone' => 'Guárdase una copia automáticamente en segundu planu',
'backup.autoBackupLast' => ({required Object date, required Object days}) => 'Cabera copia\'l ${date} · cada ${days} díes',
'backup.autoBackupNone' => ({required Object days}) => 'Guárdase una copia automáticamente cada ${days} díes',
'backup.exportJson' => 'Guardar una copia de seguranza',
'backup.exportJsonSubtitle' => 'Una copia completa pa guardar a salvo, restaurar dempués o pasar a otru preséu',
'backup.importJson' => 'Restaurar una copia',
@ -1801,8 +1803,10 @@ extension on TranslationsAst {
'market.areaCodeLabel' => 'Códigu de zona',
'market.areaCodeHint' => 'Un códigu curtiu como sp3e9 — non un nome de llugar',
'market.serversLabel' => 'Servidores de la comunidá',
'market.serversHelp' => 'Una direición per llinia (wss://…). Déxalo asina si nun sabes.',
'market.serversHelp' => 'Escueyi qué servidores usar. Déxalo asina si nun sabes.',
'market.serversAdvanced' => 'Amestar otru servidor',
'market.serverAddress' => 'Direición del servidor',
'market.serverInvalid' => 'Introduz una direición válida (wss://…)',
'market.save' => 'Guardar',
'market.saved' => 'Guardáu',
'market.wanted' => 'Gueto',
@ -1922,10 +1926,10 @@ extension on TranslationsAst {
'sale.add' => 'Rexistrar venta',
'sale.empty' => 'Entá nun hai ventes. Anota equí lo que vendes o merques.',
'sale.iSold' => 'Vendí',
'sale.iBought' => 'Mercué',
'sale.direction' => '¿Vendes o merques?',
_ => null,
} ?? switch (path) {
'sale.iBought' => 'Mercué',
'sale.direction' => '¿Vendes o merques?',
'sale.counterparty' => '¿Con quién?',
'sale.counterpartyHint' => 'Una persona o un coleutivu (opcional)',
'sale.amount' => 'Importe',
@ -1942,8 +1946,8 @@ extension on TranslationsAst {
'legal.privacyBody' => 'Tane funciona ensin cuenta, y tolo que rexistres queda nel to preséu, cifrao. Nun hai publicidá, nin rastreadores, nin sirvidor de Tane.\n\nNun se comparte nada sacantes que tu quieras: cuando espublices una ofierta o\'l to perfil, o unvíes un mensaxe, viaxa per sirvidores comuñales. Les ofiertes namái lleven una zona averada — enxamás la to direición.\n\nLo qu\'espubliques ye público, y puen quedar copies mesmo dempués de retiralo — asina que comparte con procuru.',
'legal.rulesTitle' => 'Les regles del xuegu',
'legal.rulesBody' => 'Tane ye una ferramienta, non una tienda: los intercambeos alcuérdense direutamente ente persones y naide lleva comisión. Eso tamién quier dicir que tu respuendes de lo qu\'ufiertes y unvíes.\n\nNel mercáu: sé honestu cola to simiente, ufierta namái lo que puedas compartir, trata bien a la xente y nun faigas spam. Puedes bloquiar a cualquiera y denunciar ofiertes o persones qu\'incumplan les normes — les denuncies atiéndense nos sirvidores comuñales.',
'legal.seedsTitle' => 'Tocante a compartir simiente',
'legal.seedsBody' => 'Regalar ya intercambiar simiente ente aficionaos ta reconocío ampliamente na mayoría de países. Vender pue ser distinto: en munchos sitios, vender simiente de variedaes non rexistraes oficialmente ta restrinxío — consulta la to normativa enantes de pidir un preciu.\n\nUnviar simiente a otru país tamién suel tar restrinxío, y les variedaes protexíes comercialmente nun puen propagase ensin permisu. Ante la dulda, meyor local y meyor regalu.',
'legal.seedsTitle' => 'Tocante a compartir simiente y plantones',
'legal.seedsBody' => 'Regalar ya intercambiar simiente ente aficionaos ta reconocío ampliamente na mayoría de países. Vender pue ser distinto: en munchos sitios, vender simiente de variedaes non rexistraes oficialmente ta restrinxío — consulta la to normativa enantes de pidir un preciu.\n\nUnviar simiente a otru país tamién suel tar restrinxío, y les variedaes protexíes comercialmente nun puen propagase ensin permisu. Ante la dulda, meyor local y meyor regalu.\n\nLo mesmo val pa plantones y plantes moces, pero la planta viva pue tener regles de tresporte y fitosanitaries más estrictes que la simiente: movela ente rexones o países pue requerir controles adicionales.',
'legal.readFull' => 'Lleer los documentos completos na web',
'marketGate.title' => 'Enantes d\'entrar al mercáu',
'marketGate.intro' => 'El mercáu ye un espaciu compartíu ente vecines y vecinos. Al siguir, aceptes unes poques normes cencielles:',