From d80f6d50fa4ddf5b6ce0a7a099c118dd51bb9dff Mon Sep 17 00:00:00 2001 From: vjrj Date: Mon, 20 Jul 2026 23:11:01 +0200 Subject: [PATCH] feat(i18n): complete Portuguese, add Brazilian Portuguese (pt_BR) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- apps/app_seeds/lib/i18n/ast.i18n.json | 7 +- apps/app_seeds/lib/i18n/de.i18n.json | 9 +- apps/app_seeds/lib/i18n/en.i18n.json | 1613 ++++++------ apps/app_seeds/lib/i18n/es.i18n.json | 1611 ++++++------ apps/app_seeds/lib/i18n/fr.i18n.json | 7 +- apps/app_seeds/lib/i18n/ja.i18n.json | 89 +- apps/app_seeds/lib/i18n/pt.i18n.json | 89 +- apps/app_seeds/lib/i18n/pt_BR.i18n.json | 810 ++++++ apps/app_seeds/lib/i18n/strings.g.dart | 16 +- apps/app_seeds/lib/i18n/strings_ast.g.dart | 4 +- apps/app_seeds/lib/i18n/strings_de.g.dart | 4 +- apps/app_seeds/lib/i18n/strings_en.g.dart | 6 +- apps/app_seeds/lib/i18n/strings_es.g.dart | 4 +- apps/app_seeds/lib/i18n/strings_fr.g.dart | 4 +- apps/app_seeds/lib/i18n/strings_ja.g.dart | 2 + apps/app_seeds/lib/i18n/strings_pt.g.dart | 664 +++-- apps/app_seeds/lib/i18n/strings_pt_BR.g.dart | 2170 +++++++++++++++++ apps/app_seeds/lib/ui/settings_screen.dart | 1 + .../test/services/i18n_pt_br_locale_test.dart | 41 + 19 files changed, 5231 insertions(+), 1920 deletions(-) create mode 100644 apps/app_seeds/lib/i18n/pt_BR.i18n.json create mode 100644 apps/app_seeds/lib/i18n/strings_pt_BR.g.dart create mode 100644 apps/app_seeds/test/services/i18n_pt_br_locale_test.dart diff --git a/apps/app_seeds/lib/i18n/ast.i18n.json b/apps/app_seeds/lib/i18n/ast.i18n.json index 80d39a1..f27fa57 100644 --- a/apps/app_seeds/lib/i18n/ast.i18n.json +++ b/apps/app_seeds/lib/i18n/ast.i18n.json @@ -94,6 +94,7 @@ "langEs": "Español", "langEn": "English", "langPt": "Português", + "langPtBr": "Português (Brasil)", "langAst": "Asturianu", "langFr": "Français", "langDe": "Deutsch", @@ -146,9 +147,9 @@ "license": "Llicencia", "licenseValue": "AGPL-3.0", "website": "Sitiu web", - "sourceCode": "Códigu fonte", - "translate": "Ayuda a traducir", - "translateSubtitle": "Ayuda a traer Tane a la to llingua", + "sourceCode": "Códigu fonte", + "translate": "Ayuda a traducir", + "translateSubtitle": "Ayuda a traer Tane a la to llingua", "openSourceLicenses": "Llicencies de códigu abiertu", "openSourceLicensesSubtitle": "Biblioteques de terceros y les sos llicencies", "copyright": "© {years} Asociación Comunes, baxo AGPLv3" diff --git a/apps/app_seeds/lib/i18n/de.i18n.json b/apps/app_seeds/lib/i18n/de.i18n.json index 444b08b..6d63d63 100644 --- a/apps/app_seeds/lib/i18n/de.i18n.json +++ b/apps/app_seeds/lib/i18n/de.i18n.json @@ -95,6 +95,7 @@ "langEs": "Español", "langEn": "English", "langPt": "Português", + "langPtBr": "Português (Brasil)", "langAst": "Asturianu", "about": "Über", "aboutText": "Lokale, verschlüsselte Saatgutbank für traditionelle Samen. AGPL-3.0.", @@ -147,9 +148,9 @@ "license": "Lizenz", "licenseValue": "AGPL-3.0", "website": "Webseite", - "sourceCode": "Quellcode", - "translate": "Beim Übersetzen helfen", - "translateSubtitle": "Hilf, Tane in deine Sprache zu bringen", + "sourceCode": "Quellcode", + "translate": "Beim Übersetzen helfen", + "translateSubtitle": "Hilf, Tane in deine Sprache zu bringen", "openSourceLicenses": "Open-Source-Lizenzen", "openSourceLicensesSubtitle": "Bibliotheken von Drittanbietern und ihre Lizenzen", "copyright": "© {years} Comunes Association, unter AGPLv3" @@ -723,4 +724,4 @@ "manageEmpty": "Du hast niemanden blockiert", "unblock": "Entsperren" } -} \ No newline at end of file +} diff --git a/apps/app_seeds/lib/i18n/en.i18n.json b/apps/app_seeds/lib/i18n/en.i18n.json index 5dd0816..791f12d 100644 --- a/apps/app_seeds/lib/i18n/en.i18n.json +++ b/apps/app_seeds/lib/i18n/en.i18n.json @@ -1,809 +1,810 @@ { - "avatar": { - "title": "Your photo or avatar", - "fromPhoto": "Take or choose a photo", - "illustration": "Or pick an illustration", - "remove": "Remove" - }, - "favorites": { - "title": "Favorites", - "empty": "No favorites yet. Save offers you like from the market.", - "save": "Save to favorites", - "remove": "Remove from favorites", - "unavailable": "No longer available" - }, - "savedSearches": { - "title": "Saved searches", - "empty": "No saved searches yet. Save a search from the market and we'll tell you when something like it appears in your zone.", - "save": "Save this search", - "nameLabel": "Name this search", - "namePlaceholder": "e.g. Tomatoes near me", - "saved": "Search saved — we'll alert you about new matches nearby", - "openTooltip": "Saved searches", - "delete": "Delete", - "deleteConfirm": "Delete this saved search?", - "newMatchesBadge": "{n} new", - "alert": "New seeds near you: {label}" - }, - "seedSaving": { - "title": "Saving its seed", - "subtitle": "What it takes to keep the variety true", - "lifeCycle": "Cycle", - "cycleAnnual": "Annual", - "cycleBiennial": "Biennial — seeds in year 2", - "cyclePerennial": "Perennial", - "pollination": "Pollination", - "pollSelf": "Self-pollinating", - "pollCross": "Crosses with others", - "pollMixed": "Self-pollinates, sometimes crosses", - "byInsect": "by insects", - "byWind": "on the wind", - "isolation": "Keep apart", - "isolationRange": "{min}–{max} m from other varieties", - "isolationSingle": "{min} m from other varieties", - "plants": "Save from several plants", - "plantsValue": "From at least {n} plants", - "processing": "Cleaning the seed", - "procDry": "Dry seed (thresh)", - "procWet": "Wet seed (ferment and rinse)", - "difficulty": "Difficulty", - "diffEasy": "Easy", - "diffMedium": "Medium", - "diffHard": "Hard", - "advisory": "General guidance — adapt it to your climate and variety.", - "sourcePrefix": "Source" - }, - "calendar": { - "title": "This month", - "filterChip": "This month", - "selfNote": "What you've noted in your varieties.", - "nothing": "Nothing noted for {month}." - }, - "app": { - "title": "Tane" - }, - "bootstrap": { - "failed": "Tane couldn't start", - "retry": "Try again" - }, - "common": { - "save": "Save", - "cancel": "Cancel", - "delete": "Delete", - "edit": "Edit", - "type": "Type", - "comingSoon": "Coming soon", - "offline": "You're offline — sharing is paused" - }, - "home": { - "tagline": "Share and grow local seeds", - "openMarket": "Market", - "openMarketSubtitle": "Discover and share seeds nearby", - "yourInventory": "Your inventory", - "yourInventorySubtitle": "Manage your seeds" - }, - "photo": { - "camera": "Take a photo", - "gallery": "Choose from gallery", - "setAsCover": "Set as cover", - "isCover": "Cover photo", - "deleteConfirm": "Delete this photo?" - }, - "menu": { - "tagline": "your seed bank", - "inventory": "Inventory", - "market": "Market", - "profile": "Your profile", - "chat": "Chat", - "wishlist": "Favorites", - "following": "Following", - "plantares": "Plantares", - "sales": "Sales", - "calendar": "Calendar", - "settings": "Settings" - }, - "settings": { - "language": "Language", - "systemLanguage": "System language", - "langEs": "Español", - "langEn": "English", - "langPt": "Português", - "langAst": "Asturianu", - "langFr": "Français", - "langDe": "Deutsch", - "langJa": "日本語", - "about": "About", - "aboutText": "Local-first, encrypted inventory for traditional seeds. AGPL-3.0.", - "aboutOpen": "About Tane" - }, - "backup": { - "title": "Backup & restore", - "autoBackupTitle": "Automatic backups", - "autoBackupLast": "Last copy saved {date} · every {days} days", - "autoBackupNone": "A copy is kept automatically every {days} days", - "exportJson": "Save a backup", - "exportJsonSubtitle": "A complete copy to keep safe, restore later or move to another device", - "importJson": "Restore a backup", - "importJsonSubtitle": "Bring a saved copy back — nothing gets duplicated", - "exportCsv": "Export to a spreadsheet", - "exportCsvSubtitle": "A simple list for Excel or LibreOffice — no photos", - "importCsv": "Import a list", - "importCsvSubtitle": "Add entries from a spreadsheet", - "importConfirmTitle": "Restore a backup?", - "importConfirmBody": "Entries merge with your inventory; when the same entry exists on both sides, the newest version wins. Nothing gets duplicated.", - "importCsvConfirmTitle": "Import a list?", - "importCsvConfirmBody": "Every row is added as a new entry. This does not merge or replace, so importing the same file twice adds it twice.", - "importAction": "Import", - "exportSaved": "Copy saved", - "cancelled": "Cancelled", - "importDone": "Imported: {added} new, {updated} updated", - "importCsvDone": "Added {count} entries", - "importFailed": "This file could not be read as a Tane copy", - "failed": "Something went wrong", - "recoveryTitle": "Your recovery code", - "recoverySubtitle": "Print it and keep it safe — it opens your copies on a new device", - "recoveryIntro": "This code opens your saved copies and brings your bank back on any device. Keep two paper copies in safe places, like your best seed. Anyone holding it can read your copies, so share it with no one.", - "recoveryCopy": "Copy", - "recoverySave": "Save the sheet", - "recoverySheetTitle": "Tane — your recovery sheet", - "recoveryPromptTitle": "Enter your recovery code", - "recoveryPromptBody": "This copy was saved with another code. Type the code from your recovery sheet to open it.", - "recoveryWrongCode": "That code doesn't open this copy" - }, - "about": { - "title": "About", - "kanji": "種", - "tagline": "A local-first, decentralized app for managing and sharing traditional seeds and seedlings.", - "intro": "Tane (種, \"seed\" in Japanese) helps people and collectives keep a friendly inventory of their seed bank, decide what they offer, and share it locally — without a central intermediary that could control, censor, or be fined for it. Its name comes from tanemaki (種まき), \"to sow / scatter seeds\". The goal is both practical and political: to support traditional seed varieties and push back against the seed monopoly.", - "heritage": "The name honors the old Japanese mutual-aid traditions around rice — yui (shared community labour) and tanomoshi (reciprocity funds) — that inspired the paper Plantare, the \"community currency for seed exchange\" (BAH-Semillero, 2009, CC-BY-SA). Tane is the digital Plantare.", - "version": "Version", - "license": "License", - "licenseValue": "AGPL-3.0", - "website": "Website", - "sourceCode": "Source code", - "translate": "Help translate", - "translateSubtitle": "Help bring Tane to your language", - "openSourceLicenses": "Open-source licenses", - "openSourceLicensesSubtitle": "Third-party libraries and their licenses", - "copyright": "© {years} Comunes Association, under AGPLv3" - }, - "intro": { - "skip": "Skip", - "next": "Next", - "start": "Get started", - "menuEntry": "How Tane works", - "slides": { - "welcome": { - "title": "The seed that brought you here", - "body": "Every traditional seed is a letter written by thousands of generations, passed from hand to hand. We are what we are thanks to that sharing." - }, - "inventory": { - "title": "Your seed bank, in your pocket", - "body": "Note what you have, from which year, how much and where it came from — with the name you use. A photo and a name are enough to start." - }, - "privacy": { - "title": "Yours, and only yours", - "body": "No account, no internet, no trackers. Your data lives encrypted on your device, and only what you choose is ever shared." - }, - "share": { - "title": "Share, the way it's always been done", - "body": "Offer what you have spare — gift, swap or sell — and let someone nearby find it. Only an approximate distance is shown, never your address; you close the deal in person." - }, - "plantare": { - "title": "To sow is to multiply", - "body": "With a Plantare, whoever receives seed promises to return some later. And since returning it means growing it, every loan multiplies the commons." - } + "avatar": { + "title": "Your photo or avatar", + "fromPhoto": "Take or choose a photo", + "illustration": "Or pick an illustration", + "remove": "Remove" + }, + "favorites": { + "title": "Favorites", + "empty": "No favorites yet. Save offers you like from the market.", + "save": "Save to favorites", + "remove": "Remove from favorites", + "unavailable": "No longer available" + }, + "savedSearches": { + "title": "Saved searches", + "empty": "No saved searches yet. Save a search from the market and we'll tell you when something like it appears in your zone.", + "save": "Save this search", + "nameLabel": "Name this search", + "namePlaceholder": "e.g. Tomatoes near me", + "saved": "Search saved — we'll alert you about new matches nearby", + "openTooltip": "Saved searches", + "delete": "Delete", + "deleteConfirm": "Delete this saved search?", + "newMatchesBadge": "{n} new", + "alert": "New seeds near you: {label}" + }, + "seedSaving": { + "title": "Saving its seed", + "subtitle": "What it takes to keep the variety true", + "lifeCycle": "Cycle", + "cycleAnnual": "Annual", + "cycleBiennial": "Biennial — seeds in year 2", + "cyclePerennial": "Perennial", + "pollination": "Pollination", + "pollSelf": "Self-pollinating", + "pollCross": "Crosses with others", + "pollMixed": "Self-pollinates, sometimes crosses", + "byInsect": "by insects", + "byWind": "on the wind", + "isolation": "Keep apart", + "isolationRange": "{min}–{max} m from other varieties", + "isolationSingle": "{min} m from other varieties", + "plants": "Save from several plants", + "plantsValue": "From at least {n} plants", + "processing": "Cleaning the seed", + "procDry": "Dry seed (thresh)", + "procWet": "Wet seed (ferment and rinse)", + "difficulty": "Difficulty", + "diffEasy": "Easy", + "diffMedium": "Medium", + "diffHard": "Hard", + "advisory": "General guidance — adapt it to your climate and variety.", + "sourcePrefix": "Source" + }, + "calendar": { + "title": "This month", + "filterChip": "This month", + "selfNote": "What you've noted in your varieties.", + "nothing": "Nothing noted for {month}." + }, + "app": { + "title": "Tane" + }, + "bootstrap": { + "failed": "Tane couldn't start", + "retry": "Try again" + }, + "common": { + "save": "Save", + "cancel": "Cancel", + "delete": "Delete", + "edit": "Edit", + "type": "Type", + "comingSoon": "Coming soon", + "offline": "You're offline — sharing is paused" + }, + "home": { + "tagline": "Share and grow local seeds", + "openMarket": "Market", + "openMarketSubtitle": "Discover and share seeds nearby", + "yourInventory": "Your inventory", + "yourInventorySubtitle": "Manage your seeds" + }, + "photo": { + "camera": "Take a photo", + "gallery": "Choose from gallery", + "setAsCover": "Set as cover", + "isCover": "Cover photo", + "deleteConfirm": "Delete this photo?" + }, + "menu": { + "tagline": "your seed bank", + "inventory": "Inventory", + "market": "Market", + "profile": "Your profile", + "chat": "Chat", + "wishlist": "Favorites", + "following": "Following", + "plantares": "Plantares", + "sales": "Sales", + "calendar": "Calendar", + "settings": "Settings" + }, + "settings": { + "language": "Language", + "systemLanguage": "System language", + "langEs": "Español", + "langEn": "English", + "langPt": "Português", + "langPtBr": "Português (Brasil)", + "langAst": "Asturianu", + "langFr": "Français", + "langDe": "Deutsch", + "langJa": "日本語", + "about": "About", + "aboutText": "Local-first, encrypted inventory for traditional seeds. AGPL-3.0.", + "aboutOpen": "About Tane" + }, + "backup": { + "title": "Backup & restore", + "autoBackupTitle": "Automatic backups", + "autoBackupLast": "Last copy saved {date} · every {days} days", + "autoBackupNone": "A copy is kept automatically every {days} days", + "exportJson": "Save a backup", + "exportJsonSubtitle": "A complete copy to keep safe, restore later or move to another device", + "importJson": "Restore a backup", + "importJsonSubtitle": "Bring a saved copy back — nothing gets duplicated", + "exportCsv": "Export to a spreadsheet", + "exportCsvSubtitle": "A simple list for Excel or LibreOffice — no photos", + "importCsv": "Import a list", + "importCsvSubtitle": "Add entries from a spreadsheet", + "importConfirmTitle": "Restore a backup?", + "importConfirmBody": "Entries merge with your inventory; when the same entry exists on both sides, the newest version wins. Nothing gets duplicated.", + "importCsvConfirmTitle": "Import a list?", + "importCsvConfirmBody": "Every row is added as a new entry. This does not merge or replace, so importing the same file twice adds it twice.", + "importAction": "Import", + "exportSaved": "Copy saved", + "cancelled": "Cancelled", + "importDone": "Imported: {added} new, {updated} updated", + "importCsvDone": "Added {count} entries", + "importFailed": "This file could not be read as a Tane copy", + "failed": "Something went wrong", + "recoveryTitle": "Your recovery code", + "recoverySubtitle": "Print it and keep it safe — it opens your copies on a new device", + "recoveryIntro": "This code opens your saved copies and brings your bank back on any device. Keep two paper copies in safe places, like your best seed. Anyone holding it can read your copies, so share it with no one.", + "recoveryCopy": "Copy", + "recoverySave": "Save the sheet", + "recoverySheetTitle": "Tane — your recovery sheet", + "recoveryPromptTitle": "Enter your recovery code", + "recoveryPromptBody": "This copy was saved with another code. Type the code from your recovery sheet to open it.", + "recoveryWrongCode": "That code doesn't open this copy" + }, + "about": { + "title": "About", + "kanji": "種", + "tagline": "A local-first, decentralized app for managing and sharing traditional seeds and seedlings.", + "intro": "Tane (種, \"seed\" in Japanese) helps people and collectives keep a friendly inventory of their seed bank, decide what they offer, and share it locally — without a central intermediary that could control, censor, or be fined for it. Its name comes from tanemaki (種まき), \"to sow / scatter seeds\". The goal is both practical and political: to support traditional seed varieties and push back against the seed monopoly.", + "heritage": "The name honors the old Japanese mutual-aid traditions around rice — yui (shared community labour) and tanomoshi (reciprocity funds) — that inspired the paper Plantare, the \"community currency for seed exchange\" (BAH-Semillero, 2009, CC-BY-SA). Tane is the digital Plantare.", + "version": "Version", + "license": "License", + "licenseValue": "AGPL-3.0", + "website": "Website", + "sourceCode": "Source code", + "translate": "Help translate", + "translateSubtitle": "Help bring Tane to your language", + "openSourceLicenses": "Open-source licenses", + "openSourceLicensesSubtitle": "Third-party libraries and their licenses", + "copyright": "© {years} Comunes Association, under AGPLv3" + }, + "intro": { + "skip": "Skip", + "next": "Next", + "start": "Get started", + "menuEntry": "How Tane works", + "slides": { + "welcome": { + "title": "The seed that brought you here", + "body": "Every traditional seed is a letter written by thousands of generations, passed from hand to hand. We are what we are thanks to that sharing." + }, + "inventory": { + "title": "Your seed bank, in your pocket", + "body": "Note what you have, from which year, how much and where it came from — with the name you use. A photo and a name are enough to start." + }, + "privacy": { + "title": "Yours, and only yours", + "body": "No account, no internet, no trackers. Your data lives encrypted on your device, and only what you choose is ever shared." + }, + "share": { + "title": "Share, the way it's always been done", + "body": "Offer what you have spare — gift, swap or sell — and let someone nearby find it. Only an approximate distance is shown, never your address; you close the deal in person." + }, + "plantare": { + "title": "To sow is to multiply", + "body": "With a Plantare, whoever receives seed promises to return some later. And since returning it means growing it, every loan multiplies the commons." + } + } + }, + "inventory": { + "title": "Inventory", + "searchHint": "Search seeds", + "empty": "No seeds yet. Tap + to add your first.", + "noMatches": "No seeds match your filters.", + "clearFilters": "Clear filters", + "uncategorized": "Uncategorized", + "needsReproductionFilter": "To regrow", + "loadError": "Couldn't open your seed bank. It may just have been busy — try again.", + "retry": "Try again" + }, + "draft": { + "capture": "Capture photos", + "captured": "{n} captured to catalogue", + "triageTitle": "To catalogue", + "triageCount": "{n} to catalogue", + "untitled": "Unnamed", + "nameField": "Name this seed", + "nameHint": "What is it?", + "suggestFromPhoto": "Suggest name from photo", + "discard": "Discard" + }, + "quickAdd": { + "title": "Add a seed", + "labelField": "Name", + "labelRequired": "Give it a name", + "addPhoto": "Add photo", + "quantity": "How much?", + "more": "Add more…", + "save": "Save", + "saveAndAddAnother": "Save & add another", + "addedCount": "{n} added", + "cancel": "Cancel" + }, + "detail": { + "notFound": "This seed is no longer here.", + "lots": "Lots", + "noLots": "No lots yet.", + "names": "Also known as", + "addName": "Add name", + "links": "Links", + "addLink": "Add link", + "linkUrl": "URL", + "linkTitle": "Title (optional)", + "reference": "Learn more", + "refGbif": "GBIF", + "refWikipedia": "Wikipedia", + "refWikispecies": "Wikispecies", + "notes": "Notes", + "addLot": "Add lot", + "editLot": "Edit lot", + "deleteConfirm": "Delete this seed?", + "year": "Year {year}", + "noYear": "Year unknown" + }, + "germination": { + "title": "Germination", + "add": "Add test", + "sampleSize": "Sample size", + "germinated": "Germinated", + "none": "No germination tests yet.", + "result": "{percent}%" + }, + "viability": { + "expiringSoon": "Use or reproduce this season", + "expiringSoonYears": "Use or reproduce this season · keeps ~{years} yr", + "expired": "Past typical viability — reproduce", + "expiredYears": "Past typical viability (~{years} yr) — reproduce" + }, + "editVariety": { + "title": "Edit seed", + "name": "Name", + "category": "Category", + "notes": "Notes", + "species": "Species (from catalog)", + "speciesHint": "Search a species…", + "speciesSuggested": "Suggested from the name", + "organic": "Organic", + "organicHint": "Grown organically (eco)" + }, + "addLot": { + "title": "Add lot", + "year": "Harvest date", + "quantity": "How much?", + "amount": "Amount" + }, + "harvest": { + "pickTitle": "Select month / year", + "anyMonth": "Any month", + "noDate": "Set harvest date", + "monthNames": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ] + }, + "lotType": { + "seed": "Seeds", + "plant": "Plant", + "seedling": "Seedling", + "tree": "Tree / shrub", + "bulb": "Bulb / tuber", + "cutting": "Cutting" + }, + "presentation": { + "title": "Packaging", + "none": "Unspecified", + "pot": "Pot", + "tray": "Tray", + "plug": "Plug", + "bareRoot": "Bare-root", + "rootBall": "Root-ball" + }, + "provenance": { + "section": "Where it's from", + "seedsFrom": "Seeds from", + "seedsFromHint": "Who grew or gave them", + "place": "Place", + "placeHint": "Where they come from (with region)", + "addSeedsFrom": "Seeds from", + "addPlace": "Place" + }, + "abundance": { + "add": "How much I have", + "title": "How much I have", + "none": "Not set", + "plentyToShare": "Plenty to share", + "enoughToShare": "Enough to share a little", + "enoughForMe": "Enough for me", + "runningLow": "Running low" + }, + "share": { + "add": "Do you share it?", + "title": "Do you share it?", + "nudge": "You have plenty — you could share some.", + "price": "Price", + "priceHint": "Leave it empty to agree it later", + "private": "Just for me", + "gift": "To give away", + "exchange": "To swap", + "sell": "For sale", + "filterChip": "I share", + "printCatalog": "Print what I share", + "catalogTitle": "What I share", + "catalogSaved": "Catalog saved", + "cancelled": "Cancelled" + }, + "printLabels": { + "action": "Print labels", + "title": "Print labels", + "selectHint": "Pick the seeds to print labels for", + "selectAll": "Select all", + "selected": "{n} selected", + "none": "Select seeds first", + "format": "Label size", + "formatStickers": "Small stickers", + "formatStickersHint": "Many small labels per page — to peel onto packets", + "formatCards": "Large cards", + "formatCardsHint": "Fewer, bigger labels — for jars and boxes", + "count": "{n} labels", + "save": "Save labels", + "saved": "Labels saved", + "cancelled": "Cancelled" + }, + "scan": { + "action": "Scan a seed label", + "title": "Scan a label", + "notALabel": "That code is not a seed label", + "addTitle": "Not in your collection", + "addBody": "Add “{label}” to your seeds?", + "add": "Add it", + "added": "Added to your collection" + }, + "cropCalendar": { + "add": "Crop calendar", + "title": "Crop calendar", + "sow": "Sow", + "transplant": "Transplant", + "flowering": "Flowering", + "fruiting": "Fruiting", + "seedHarvest": "Seed harvest", + "editorHint": "Note the months typical for this variety in your area — these are your own notes.", + "unset": "—" + }, + "needsReproduction": { + "label": "To regrow this season", + "hint": "Grow it out before the seed runs out", + "badge": "To regrow" + }, + "preservation": { + "add": "How it's kept", + "title": "How it's kept", + "none": "Unspecified", + "jarWithDesiccant": "Jar with drying agent", + "glassJar": "Glass jar", + "paperEnvelope": "Paper envelope", + "paperBag": "Paper bag", + "plasticBag": "Plastic bag" + }, + "conditionCheck": { + "advanced": "Storage & seed-bank details", + "title": "Storage checks", + "add": "Add check", + "containers": "Jars / containers", + "desiccant": "Drying agent", + "none": "No storage checks yet.", + "summary": "{count} jar(s) · {state}" + }, + "desiccant": { + "none": "None", + "add": "Add some", + "replace": "Replace it", + "dry": "Blue — dry", + "fresh": "Just renewed" + }, + "unit": { + "aFew": "a few", + "some": "some", + "plenty": "plenty", + "pinch": "a pinch", + "handful": { + "singular": "handful", + "plural": "handfuls" + }, + "teaspoon": { + "singular": "teaspoon", + "plural": "teaspoons" + }, + "spoon": { + "singular": "spoon", + "plural": "spoons" + }, + "cup": { + "singular": "cup", + "plural": "cups" + }, + "jar": { + "singular": "jar", + "plural": "jars" + }, + "sack": { + "singular": "sack", + "plural": "sacks" + }, + "packet": { + "singular": "packet", + "plural": "packets" + }, + "cob": { + "singular": "cob", + "plural": "cobs" + }, + "pod": { + "singular": "pod", + "plural": "pods" + }, + "ear": { + "singular": "ear", + "plural": "ears" + }, + "head": { + "singular": "head", + "plural": "heads" + }, + "fruit": { + "singular": "fruit", + "plural": "fruits" + }, + "bulb": { + "singular": "bulb", + "plural": "bulbs" + }, + "tuber": { + "singular": "tuber", + "plural": "tubers" + }, + "seedHead": { + "singular": "seed head", + "plural": "seed heads" + }, + "bunch": { + "singular": "bunch", + "plural": "bunches" + }, + "plant": { + "singular": "plant", + "plural": "plants" + }, + "pot": { + "singular": "pot", + "plural": "pots" + }, + "tray": { + "singular": "tray", + "plural": "trays" + }, + "seedling": { + "singular": "seedling", + "plural": "seedlings" + }, + "tree": { + "singular": "tree", + "plural": "trees" + }, + "cutting": { + "singular": "cutting", + "plural": "cuttings" + }, + "grams": { + "singular": "gram", + "plural": "grams" + }, + "count": { + "singular": "seed", + "plural": "seeds" + } + }, + "market": { + "title": "Seeds near you", + "subtitle": "What others are sharing nearby", + "notSetUp": "Sharing isn't set up yet", + "notSetUpBody": "Turn on sharing to see and give seeds to people near you. It stays rough — your zone, never your exact address.", + "setUp": "Set up sharing", + "cantReach": "Can't reach the community servers right now", + "cantReachBody": "Try again, or check the servers under Advanced setup.", + "retry": "Retry", + "setArea": "Set your area", + "setAreaBody": "Tell the market roughly where you are to see seeds nearby.", + "searching": "Looking around your area…", + "empty": "No seeds shared near you yet", + "searchHint": "Search these seeds", + "noMatches": "No shared seeds match your search", + "near": "Near you", + "contact": "Message", + "mine": "You", + "configTitle": "Sharing setup", + "setupIntro": "Sharing with people nearby is optional. Just set your rough area — you're already connected to shared community servers so people can find what you offer, with no company in the middle.", + "areaLabel": "Your area", + "areaHelp": "Kept rough on purpose — your zone, never an exact spot.", + "areaSet": "Your area is set — kept coarse, never your exact spot", + "areaNotSet": "Area not set yet — use your location, or add a code under Advanced", + "advanced": "Advanced", + "areaCodeLabel": "Area code", + "areaCodeHint": "A short code like sp3e9 — not a place name", + "serversLabel": "Community servers", + "serversHelp": "Choose which servers to use. Leave the defaults if unsure.", + "serversAdvanced": "Add another server", + "serverAddress": "Server address", + "serverInvalid": "Enter a valid address (wss://…)", + "save": "Save", + "saved": "Saved", + "wanted": "Wanted", + "shareMine": "Share my seeds", + "sharedCount": "Shared {n} seeds nearby", + "nothingToShare": "Mark some seeds to give, swap or sell first", + "useLocation": "Use my approximate location", + "locationFailed": "Couldn't get your location — check that location is on and the permission is granted", + "queued": "Saved — we'll share these when you're connected", + "shareFailed": "Couldn't reach the community servers — your seeds weren't shared. Try again in a moment.", + "rangeLabel": "How far to look", + "rangeNear": "Very close", + "rangeArea": "Around here", + "rangeRegion": "My region", + "sharedBy": "Shared by", + "noProfile": "This person hasn't shared a profile yet", + "copyId": "Copy code", + "idCopied": "Code copied", + "photo": "Photo" + }, + "profile": { + "title": "Your profile", + "name": "Display name", + "nameHint": "How others see you", + "about": "About", + "aboutHint": "A short line — what you grow, where", + "g1": "Ğ1 address (optional)", + "g1Hint": "So people can pay you in Ğ1 — separate from your key", + "yourId": "Your identity", + "idHelp": "Share this so people can recognise you", + "copy": "Copy", + "copied": "Copied", + "save": "Save", + "saved": "Profile saved", + "identities": "Your identities", + "identitiesHelp": "Keep separate identities — each with its own messages and contacts. They all come from your one backup, so switching adds nothing to remember.", + "identityLabel": "Identity {n}", + "current": "In use", + "newIdentity": "New identity", + "switchTitle": "Switch identity?", + "switchBody": "Messages and contacts are kept separate for each identity. You can switch back anytime.", + "switchAction": "Switch" + }, + "chatList": { + "title": "Messages", + "empty": "No conversations yet. Message someone from the market." + }, + "chat": { + "title": "Chat", + "hint": "Write a message…", + "send": "Send", + "empty": "No messages yet — say hello", + "offline": "Set up sharing to send messages", + "payG1": "Pay in Ğ1", + "g1Copied": "Ğ1 address copied — paste it in your wallet", + "today": "Today", + "yesterday": "Yesterday", + "sendError": "Couldn't send — check your connection", + "noLinks": "Links aren't allowed in messages" + }, + "trust": { + "none": "No one vouches for them yet", + "count": "Vouched for by {n}", + "vouch": "I know this person", + "vouched": "You vouch for them", + "circle": "In your circle" + }, + "yourPeople": { + "title": "Your people", + "help": "People you've met and vouch for, and people who vouch for you.", + "youVouchFor": "You vouch for", + "vouchesForYou": "They vouch for you", + "youVouchForEmpty": "You don't vouch for anyone yet. When you meet someone, open your chat with them and tap \"I know this person\".", + "vouchesForYouEmpty": "No one vouches for you yet", + "revoke": "Stop vouching", + "revokeConfirm": "Stop vouching for this person?", + "offline": "You're offline — try again when you're connected" + }, + "ratings": { + "rate": "Rate this person", + "edit": "Edit your rating", + "commentHint": "How did it go? (optional)", + "fromYourCircle": "{n} from people you know", + "retract": "Remove your rating", + "saved": "Rating saved" + }, + "notifications": { + "newMessageFrom": "New message from {name}" + }, + "plantare": { + "title": "Plantares", + "help": "A Plantare is a promise to reproduce a seed and return some — how a variety keeps travelling from hand to hand. It's not a sale.", + "add": "Add a commitment", + "empty": "No commitments yet. When you share or receive seed with a promise to grow it out and return some, note it here.", + "iReturn": "I'll grow it out & return some", + "owedToMe": "They'll return some to me", + "direction": "Who reproduces & returns", + "counterparty": "With whom?", + "counterpartyHint": "A person or a collective (optional)", + "owed": "What comes back?", + "owedHint": "e.g. a handful next season (optional)", + "note": "Note (optional)", + "save": "Save", + "markReturned": "Mark returned", + "markForgiven": "Let it go", + "reopen": "Reopen", + "delete": "Remove", + "statusReturned": "Returned", + "statusForgiven": "Settled", + "openSection": "Open", + "settledSection": "Done", + "removeConfirm": "Remove this commitment?", + "returnBy": "Return by {date}", + "overdue": "overdue", + "dueByLabel": "Return by (optional)", + "dueByHint": "A gentle reminder, never enforced", + "pickDate": "Pick a date", + "clearDate": "Clear date", + "sectionTitle": "Commitments", + "propose": "Propose a signed Plantaré", + "proposeHelp": "Both of you keep the same promise, signed by both — proof that this seed changed hands and will be grown out and returned.", + "proposeTo": "With {name}", + "sent": "Proposal sent — waiting for them to sign", + "seedLabel": "Which seed?", + "seedHint": "The variety this promise is about", + "returnKindLabel": "What comes back?", + "returnSimilar": "A similar amount of seed", + "returnSimilarNote": "open-pollinated · non-GMO · organically grown", + "returnWork": "Some hours of work", + "returnOther": "Something else", + "workHoursLabel": "How many hours?", + "proposalsSection": "Waiting for your reply", + "incomingFrom": "{name} proposes a Plantaré", + "accept": "Accept & sign", + "declineAction": "Decline", + "declineReasonHint": "Reason (optional)", + "acceptedToast": "Signed — you both hold it now", + "declinedToast": "Declined", + "badgeAwaiting": "Awaiting signature", + "badgeSigned": "Signed by both", + "badgeDeclined": "Declined", + "offline": "You're offline — it'll be sent when you reconnect" + }, + "handover": { + "title": "Seeds changed hands", + "help": "A gift, a swap or a sale — note it down, with a return promise or without.", + "iGave": "I gave seeds", + "iReceived": "I received seeds", + "whichLot": "Which batch?", + "howMuch": "How much?", + "allOfIt": "All of it", + "partOfIt": "A part", + "paymentChip": "Money changed hands", + "promiseGave": "They'll return me seed", + "promiseReceived": "I'll return seed" + }, + "history": { + "title": "Story of this batch", + "tooltip": "Story", + "sowToday": "Sown today", + "harvestToday": "Harvested today", + "sownRecorded": "Sowing noted", + "harvestRecorded": "Harvest noted", + "movementReceived": "Received", + "movementGiven": "Given away", + "movementSown": "Sown", + "movementHarvested": "Harvested", + "movementGerminationTest": "Germination test", + "movementSplit": "Split into batches", + "movementDiscarded": "Discarded", + "created": "Added to your collection", + "from": "From {origin}", + "germinationResult": "Germination test — {percent}%", + "linkedEarlier": "Comes from an earlier batch", + "outcomeQuestion": "How did it do?", + "outcomeGood": "Well", + "outcomeMixed": "So-so", + "outcomePoor": "Poorly", + "outcomeNoteHint": "A note for your future self (optional)", + "outcomeSaved": "Noted", + "ratedGood": "It did well", + "ratedMixed": "It did so-so", + "ratedPoor": "It did poorly", + "outcomeTitle": "Season note", + "outcomeYear": "Season {year}", + "isolationHint": "This species crosses with its neighbours — grow it about {meters} m away from others to keep it true" + }, + "sale": { + "title": "Sales", + "help": "Record seed you sold or bought — money, Ğ1, or any currency. A separate model from a gift or a Plantare. No commission is ever taken on seeds.", + "add": "Record a sale", + "empty": "No sales yet. Note here what you sell or buy.", + "iSold": "I sold", + "iBought": "I bought", + "direction": "Sold or bought?", + "counterparty": "With whom?", + "counterpartyHint": "A person or a collective (optional)", + "amount": "Amount", + "currency": "Currency", + "currencyHint": "€, Ğ1, hours… (optional)", + "hours": "hours", + "note": "Note (optional)", + "save": "Save", + "delete": "Remove", + "removeConfirm": "Remove this sale?" + }, + "legal": { + "title": "Privacy & rules", + "subtitle": "Your privacy, the market rules, and sharing seeds legally", + "privacyTitle": "Your privacy", + "privacyBody": "Tane works without an account, and everything you record stays on your device, encrypted. There are no ads, no trackers, and no Tane server.\n\nNothing is shared unless you choose to: when you publish an offer or your profile, or send a message, it travels through community-run servers. Offers only ever carry a rough zone — never your address.\n\nWhat you publish is public, and copies may remain even after you remove it — so share with care.", + "rulesTitle": "Rules of the road", + "rulesBody": "Tane is a tool, not a shop: exchanges are agreed directly between people, and nobody takes a cut. That also means you are responsible for what you offer and send.\n\nIn the market: be honest about your seeds, only offer what you may share, treat people well, and don't spam. You can block anyone, and report offers or people that break the rules — reports are acted on in the community servers.", + "seedsTitle": "About sharing seeds and seedlings", + "seedsBody": "Gifting and swapping seeds between amateurs is broadly recognized in most countries. Selling can be different: in many places, selling seed of varieties that aren't officially registered is restricted — check your local rules before asking a price.\n\nSending seeds to another country is often restricted too, and commercially protected varieties must not be propagated without permission. When in doubt, keep it local and keep it a gift.\n\nThe same spirit applies to seedlings and young plants, but live plants can carry stricter transport and plant-health rules than seeds — moving them across regions or borders may need extra checks.", + "readFull": "Read the full documents online" + }, + "marketGate": { + "title": "Before you join the market", + "intro": "The market is a shared space between neighbours. By continuing, you agree to a few simple rules:", + "ruleHonest": "Be honest about the seeds you offer", + "ruleLegal": "Only share what you're allowed to share where you live", + "ruleRespect": "Treat people well — no spam, no abuse", + "publicNote": "What you publish here is public, and copies may remain even if you remove it later.", + "viewLegal": "Privacy & rules", + "accept": "I agree", + "decline": "Not now" + }, + "report": { + "offer": "Report this offer", + "person": "Report this person", + "title": "Report", + "prompt": "What's wrong?", + "reasonSpam": "Spam or a scam", + "reasonAbuse": "Abusive or disrespectful", + "reasonIllegal": "Seeds that shouldn't be offered", + "reasonOther": "Something else", + "detailsHint": "Add details (optional)", + "send": "Send report", + "sentHidden": "Report sent — you won't see this anymore", + "failed": "Couldn't send the report — check your connection", + "alsoBlock": "Also block this person" + }, + "block": { + "action": "Block this person", + "confirmTitle": "Block this person?", + "confirmBody": "You won't see their offers or messages anymore. You can unblock them later under Blocked people in the sharing setup.", + "confirm": "Block", + "blockedToast": "Blocked — their offers and messages are hidden", + "manageTitle": "Blocked people", + "manageEmpty": "You haven't blocked anyone", + "unblock": "Unblock" } - }, - "inventory": { - "title": "Inventory", - "searchHint": "Search seeds", - "empty": "No seeds yet. Tap + to add your first.", - "noMatches": "No seeds match your filters.", - "clearFilters": "Clear filters", - "uncategorized": "Uncategorized", - "needsReproductionFilter": "To regrow", - "loadError": "Couldn't open your seed bank. It may just have been busy — try again.", - "retry": "Try again" - }, - "draft": { - "capture": "Capture photos", - "captured": "{n} captured to catalogue", - "triageTitle": "To catalogue", - "triageCount": "{n} to catalogue", - "untitled": "Unnamed", - "nameField": "Name this seed", - "nameHint": "What is it?", - "suggestFromPhoto": "Suggest name from photo", - "discard": "Discard" - }, - "quickAdd": { - "title": "Add a seed", - "labelField": "Name", - "labelRequired": "Give it a name", - "addPhoto": "Add photo", - "quantity": "How much?", - "more": "Add more…", - "save": "Save", - "saveAndAddAnother": "Save & add another", - "addedCount": "{n} added", - "cancel": "Cancel" - }, - "detail": { - "notFound": "This seed is no longer here.", - "lots": "Lots", - "noLots": "No lots yet.", - "names": "Also known as", - "addName": "Add name", - "links": "Links", - "addLink": "Add link", - "linkUrl": "URL", - "linkTitle": "Title (optional)", - "reference": "Learn more", - "refGbif": "GBIF", - "refWikipedia": "Wikipedia", - "refWikispecies": "Wikispecies", - "notes": "Notes", - "addLot": "Add lot", - "editLot": "Edit lot", - "deleteConfirm": "Delete this seed?", - "year": "Year {year}", - "noYear": "Year unknown" - }, - "germination": { - "title": "Germination", - "add": "Add test", - "sampleSize": "Sample size", - "germinated": "Germinated", - "none": "No germination tests yet.", - "result": "{percent}%" - }, - "viability": { - "expiringSoon": "Use or reproduce this season", - "expiringSoonYears": "Use or reproduce this season · keeps ~{years} yr", - "expired": "Past typical viability — reproduce", - "expiredYears": "Past typical viability (~{years} yr) — reproduce" - }, - "editVariety": { - "title": "Edit seed", - "name": "Name", - "category": "Category", - "notes": "Notes", - "species": "Species (from catalog)", - "speciesHint": "Search a species…", - "speciesSuggested": "Suggested from the name", - "organic": "Organic", - "organicHint": "Grown organically (eco)" - }, - "addLot": { - "title": "Add lot", - "year": "Harvest date", - "quantity": "How much?", - "amount": "Amount" - }, - "harvest": { - "pickTitle": "Select month / year", - "anyMonth": "Any month", - "noDate": "Set harvest date", - "monthNames": [ - "January", - "February", - "March", - "April", - "May", - "June", - "July", - "August", - "September", - "October", - "November", - "December" - ] - }, - "lotType": { - "seed": "Seeds", - "plant": "Plant", - "seedling": "Seedling", - "tree": "Tree / shrub", - "bulb": "Bulb / tuber", - "cutting": "Cutting" - }, - "presentation": { - "title": "Packaging", - "none": "Unspecified", - "pot": "Pot", - "tray": "Tray", - "plug": "Plug", - "bareRoot": "Bare-root", - "rootBall": "Root-ball" - }, - "provenance": { - "section": "Where it's from", - "seedsFrom": "Seeds from", - "seedsFromHint": "Who grew or gave them", - "place": "Place", - "placeHint": "Where they come from (with region)", - "addSeedsFrom": "Seeds from", - "addPlace": "Place" - }, - "abundance": { - "add": "How much I have", - "title": "How much I have", - "none": "Not set", - "plentyToShare": "Plenty to share", - "enoughToShare": "Enough to share a little", - "enoughForMe": "Enough for me", - "runningLow": "Running low" - }, - "share": { - "add": "Do you share it?", - "title": "Do you share it?", - "nudge": "You have plenty — you could share some.", - "price": "Price", - "priceHint": "Leave it empty to agree it later", - "private": "Just for me", - "gift": "To give away", - "exchange": "To swap", - "sell": "For sale", - "filterChip": "I share", - "printCatalog": "Print what I share", - "catalogTitle": "What I share", - "catalogSaved": "Catalog saved", - "cancelled": "Cancelled" - }, - "printLabels": { - "action": "Print labels", - "title": "Print labels", - "selectHint": "Pick the seeds to print labels for", - "selectAll": "Select all", - "selected": "{n} selected", - "none": "Select seeds first", - "format": "Label size", - "formatStickers": "Small stickers", - "formatStickersHint": "Many small labels per page — to peel onto packets", - "formatCards": "Large cards", - "formatCardsHint": "Fewer, bigger labels — for jars and boxes", - "count": "{n} labels", - "save": "Save labels", - "saved": "Labels saved", - "cancelled": "Cancelled" - }, - "scan": { - "action": "Scan a seed label", - "title": "Scan a label", - "notALabel": "That code is not a seed label", - "addTitle": "Not in your collection", - "addBody": "Add “{label}” to your seeds?", - "add": "Add it", - "added": "Added to your collection" - }, - "cropCalendar": { - "add": "Crop calendar", - "title": "Crop calendar", - "sow": "Sow", - "transplant": "Transplant", - "flowering": "Flowering", - "fruiting": "Fruiting", - "seedHarvest": "Seed harvest", - "editorHint": "Note the months typical for this variety in your area — these are your own notes.", - "unset": "—" - }, - "needsReproduction": { - "label": "To regrow this season", - "hint": "Grow it out before the seed runs out", - "badge": "To regrow" - }, - "preservation": { - "add": "How it's kept", - "title": "How it's kept", - "none": "Unspecified", - "jarWithDesiccant": "Jar with drying agent", - "glassJar": "Glass jar", - "paperEnvelope": "Paper envelope", - "paperBag": "Paper bag", - "plasticBag": "Plastic bag" - }, - "conditionCheck": { - "advanced": "Storage & seed-bank details", - "title": "Storage checks", - "add": "Add check", - "containers": "Jars / containers", - "desiccant": "Drying agent", - "none": "No storage checks yet.", - "summary": "{count} jar(s) · {state}" - }, - "desiccant": { - "none": "None", - "add": "Add some", - "replace": "Replace it", - "dry": "Blue — dry", - "fresh": "Just renewed" - }, - "unit": { - "aFew": "a few", - "some": "some", - "plenty": "plenty", - "pinch": "a pinch", - "handful": { - "singular": "handful", - "plural": "handfuls" - }, - "teaspoon": { - "singular": "teaspoon", - "plural": "teaspoons" - }, - "spoon": { - "singular": "spoon", - "plural": "spoons" - }, - "cup": { - "singular": "cup", - "plural": "cups" - }, - "jar": { - "singular": "jar", - "plural": "jars" - }, - "sack": { - "singular": "sack", - "plural": "sacks" - }, - "packet": { - "singular": "packet", - "plural": "packets" - }, - "cob": { - "singular": "cob", - "plural": "cobs" - }, - "pod": { - "singular": "pod", - "plural": "pods" - }, - "ear": { - "singular": "ear", - "plural": "ears" - }, - "head": { - "singular": "head", - "plural": "heads" - }, - "fruit": { - "singular": "fruit", - "plural": "fruits" - }, - "bulb": { - "singular": "bulb", - "plural": "bulbs" - }, - "tuber": { - "singular": "tuber", - "plural": "tubers" - }, - "seedHead": { - "singular": "seed head", - "plural": "seed heads" - }, - "bunch": { - "singular": "bunch", - "plural": "bunches" - }, - "plant": { - "singular": "plant", - "plural": "plants" - }, - "pot": { - "singular": "pot", - "plural": "pots" - }, - "tray": { - "singular": "tray", - "plural": "trays" - }, - "seedling": { - "singular": "seedling", - "plural": "seedlings" - }, - "tree": { - "singular": "tree", - "plural": "trees" - }, - "cutting": { - "singular": "cutting", - "plural": "cuttings" - }, - "grams": { - "singular": "gram", - "plural": "grams" - }, - "count": { - "singular": "seed", - "plural": "seeds" - } - }, - "market": { - "title": "Seeds near you", - "subtitle": "What others are sharing nearby", - "notSetUp": "Sharing isn't set up yet", - "notSetUpBody": "Turn on sharing to see and give seeds to people near you. It stays rough — your zone, never your exact address.", - "setUp": "Set up sharing", - "cantReach": "Can't reach the community servers right now", - "cantReachBody": "Try again, or check the servers under Advanced setup.", - "retry": "Retry", - "setArea": "Set your area", - "setAreaBody": "Tell the market roughly where you are to see seeds nearby.", - "searching": "Looking around your area…", - "empty": "No seeds shared near you yet", - "searchHint": "Search these seeds", - "noMatches": "No shared seeds match your search", - "near": "Near you", - "contact": "Message", - "mine": "You", - "configTitle": "Sharing setup", - "setupIntro": "Sharing with people nearby is optional. Just set your rough area — you're already connected to shared community servers so people can find what you offer, with no company in the middle.", - "areaLabel": "Your area", - "areaHelp": "Kept rough on purpose — your zone, never an exact spot.", - "areaSet": "Your area is set — kept coarse, never your exact spot", - "areaNotSet": "Area not set yet — use your location, or add a code under Advanced", - "advanced": "Advanced", - "areaCodeLabel": "Area code", - "areaCodeHint": "A short code like sp3e9 — not a place name", - "serversLabel": "Community servers", - "serversHelp": "Choose which servers to use. Leave the defaults if unsure.", - "serversAdvanced": "Add another server", - "serverAddress": "Server address", - "serverInvalid": "Enter a valid address (wss://…)", - "save": "Save", - "saved": "Saved", - "wanted": "Wanted", - "shareMine": "Share my seeds", - "sharedCount": "Shared {n} seeds nearby", - "nothingToShare": "Mark some seeds to give, swap or sell first", - "useLocation": "Use my approximate location", - "locationFailed": "Couldn't get your location — check that location is on and the permission is granted", - "queued": "Saved — we'll share these when you're connected", - "shareFailed": "Couldn't reach the community servers — your seeds weren't shared. Try again in a moment.", - "rangeLabel": "How far to look", - "rangeNear": "Very close", - "rangeArea": "Around here", - "rangeRegion": "My region", - "sharedBy": "Shared by", - "noProfile": "This person hasn't shared a profile yet", - "copyId": "Copy code", - "idCopied": "Code copied", - "photo": "Photo" - }, - "profile": { - "title": "Your profile", - "name": "Display name", - "nameHint": "How others see you", - "about": "About", - "aboutHint": "A short line — what you grow, where", - "g1": "Ğ1 address (optional)", - "g1Hint": "So people can pay you in Ğ1 — separate from your key", - "yourId": "Your identity", - "idHelp": "Share this so people can recognise you", - "copy": "Copy", - "copied": "Copied", - "save": "Save", - "saved": "Profile saved", - "identities": "Your identities", - "identitiesHelp": "Keep separate identities — each with its own messages and contacts. They all come from your one backup, so switching adds nothing to remember.", - "identityLabel": "Identity {n}", - "current": "In use", - "newIdentity": "New identity", - "switchTitle": "Switch identity?", - "switchBody": "Messages and contacts are kept separate for each identity. You can switch back anytime.", - "switchAction": "Switch" - }, - "chatList": { - "title": "Messages", - "empty": "No conversations yet. Message someone from the market." - }, - "chat": { - "title": "Chat", - "hint": "Write a message…", - "send": "Send", - "empty": "No messages yet — say hello", - "offline": "Set up sharing to send messages", - "payG1": "Pay in Ğ1", - "g1Copied": "Ğ1 address copied — paste it in your wallet", - "today": "Today", - "yesterday": "Yesterday", - "sendError": "Couldn't send — check your connection", - "noLinks": "Links aren't allowed in messages" - }, - "trust": { - "none": "No one vouches for them yet", - "count": "Vouched for by {n}", - "vouch": "I know this person", - "vouched": "You vouch for them", - "circle": "In your circle" - }, - "yourPeople": { - "title": "Your people", - "help": "People you've met and vouch for, and people who vouch for you.", - "youVouchFor": "You vouch for", - "vouchesForYou": "They vouch for you", - "youVouchForEmpty": "You don't vouch for anyone yet. When you meet someone, open your chat with them and tap \"I know this person\".", - "vouchesForYouEmpty": "No one vouches for you yet", - "revoke": "Stop vouching", - "revokeConfirm": "Stop vouching for this person?", - "offline": "You're offline — try again when you're connected" - }, - "ratings": { - "rate": "Rate this person", - "edit": "Edit your rating", - "commentHint": "How did it go? (optional)", - "fromYourCircle": "{n} from people you know", - "retract": "Remove your rating", - "saved": "Rating saved" - }, - "notifications": { - "newMessageFrom": "New message from {name}" - }, - "plantare": { - "title": "Plantares", - "help": "A Plantare is a promise to reproduce a seed and return some — how a variety keeps travelling from hand to hand. It's not a sale.", - "add": "Add a commitment", - "empty": "No commitments yet. When you share or receive seed with a promise to grow it out and return some, note it here.", - "iReturn": "I'll grow it out & return some", - "owedToMe": "They'll return some to me", - "direction": "Who reproduces & returns", - "counterparty": "With whom?", - "counterpartyHint": "A person or a collective (optional)", - "owed": "What comes back?", - "owedHint": "e.g. a handful next season (optional)", - "note": "Note (optional)", - "save": "Save", - "markReturned": "Mark returned", - "markForgiven": "Let it go", - "reopen": "Reopen", - "delete": "Remove", - "statusReturned": "Returned", - "statusForgiven": "Settled", - "openSection": "Open", - "settledSection": "Done", - "removeConfirm": "Remove this commitment?", - "returnBy": "Return by {date}", - "overdue": "overdue", - "dueByLabel": "Return by (optional)", - "dueByHint": "A gentle reminder, never enforced", - "pickDate": "Pick a date", - "clearDate": "Clear date", - "sectionTitle": "Commitments", - "propose": "Propose a signed Plantaré", - "proposeHelp": "Both of you keep the same promise, signed by both — proof that this seed changed hands and will be grown out and returned.", - "proposeTo": "With {name}", - "sent": "Proposal sent — waiting for them to sign", - "seedLabel": "Which seed?", - "seedHint": "The variety this promise is about", - "returnKindLabel": "What comes back?", - "returnSimilar": "A similar amount of seed", - "returnSimilarNote": "open-pollinated · non-GMO · organically grown", - "returnWork": "Some hours of work", - "returnOther": "Something else", - "workHoursLabel": "How many hours?", - "proposalsSection": "Waiting for your reply", - "incomingFrom": "{name} proposes a Plantaré", - "accept": "Accept & sign", - "declineAction": "Decline", - "declineReasonHint": "Reason (optional)", - "acceptedToast": "Signed — you both hold it now", - "declinedToast": "Declined", - "badgeAwaiting": "Awaiting signature", - "badgeSigned": "Signed by both", - "badgeDeclined": "Declined", - "offline": "You're offline — it'll be sent when you reconnect" - }, - "handover": { - "title": "Seeds changed hands", - "help": "A gift, a swap or a sale — note it down, with a return promise or without.", - "iGave": "I gave seeds", - "iReceived": "I received seeds", - "whichLot": "Which batch?", - "howMuch": "How much?", - "allOfIt": "All of it", - "partOfIt": "A part", - "paymentChip": "Money changed hands", - "promiseGave": "They'll return me seed", - "promiseReceived": "I'll return seed" - }, - "history": { - "title": "Story of this batch", - "tooltip": "Story", - "sowToday": "Sown today", - "harvestToday": "Harvested today", - "sownRecorded": "Sowing noted", - "harvestRecorded": "Harvest noted", - "movementReceived": "Received", - "movementGiven": "Given away", - "movementSown": "Sown", - "movementHarvested": "Harvested", - "movementGerminationTest": "Germination test", - "movementSplit": "Split into batches", - "movementDiscarded": "Discarded", - "created": "Added to your collection", - "from": "From {origin}", - "germinationResult": "Germination test — {percent}%", - "linkedEarlier": "Comes from an earlier batch", - "outcomeQuestion": "How did it do?", - "outcomeGood": "Well", - "outcomeMixed": "So-so", - "outcomePoor": "Poorly", - "outcomeNoteHint": "A note for your future self (optional)", - "outcomeSaved": "Noted", - "ratedGood": "It did well", - "ratedMixed": "It did so-so", - "ratedPoor": "It did poorly", - "outcomeTitle": "Season note", - "outcomeYear": "Season {year}", - "isolationHint": "This species crosses with its neighbours — grow it about {meters} m away from others to keep it true" - }, - "sale": { - "title": "Sales", - "help": "Record seed you sold or bought — money, Ğ1, or any currency. A separate model from a gift or a Plantare. No commission is ever taken on seeds.", - "add": "Record a sale", - "empty": "No sales yet. Note here what you sell or buy.", - "iSold": "I sold", - "iBought": "I bought", - "direction": "Sold or bought?", - "counterparty": "With whom?", - "counterpartyHint": "A person or a collective (optional)", - "amount": "Amount", - "currency": "Currency", - "currencyHint": "€, Ğ1, hours… (optional)", - "hours": "hours", - "note": "Note (optional)", - "save": "Save", - "delete": "Remove", - "removeConfirm": "Remove this sale?" - }, - "legal": { - "title": "Privacy & rules", - "subtitle": "Your privacy, the market rules, and sharing seeds legally", - "privacyTitle": "Your privacy", - "privacyBody": "Tane works without an account, and everything you record stays on your device, encrypted. There are no ads, no trackers, and no Tane server.\n\nNothing is shared unless you choose to: when you publish an offer or your profile, or send a message, it travels through community-run servers. Offers only ever carry a rough zone — never your address.\n\nWhat you publish is public, and copies may remain even after you remove it — so share with care.", - "rulesTitle": "Rules of the road", - "rulesBody": "Tane is a tool, not a shop: exchanges are agreed directly between people, and nobody takes a cut. That also means you are responsible for what you offer and send.\n\nIn the market: be honest about your seeds, only offer what you may share, treat people well, and don't spam. You can block anyone, and report offers or people that break the rules — reports are acted on in the community servers.", - "seedsTitle": "About sharing seeds and seedlings", - "seedsBody": "Gifting and swapping seeds between amateurs is broadly recognized in most countries. Selling can be different: in many places, selling seed of varieties that aren't officially registered is restricted — check your local rules before asking a price.\n\nSending seeds to another country is often restricted too, and commercially protected varieties must not be propagated without permission. When in doubt, keep it local and keep it a gift.\n\nThe same spirit applies to seedlings and young plants, but live plants can carry stricter transport and plant-health rules than seeds — moving them across regions or borders may need extra checks.", - "readFull": "Read the full documents online" - }, - "marketGate": { - "title": "Before you join the market", - "intro": "The market is a shared space between neighbours. By continuing, you agree to a few simple rules:", - "ruleHonest": "Be honest about the seeds you offer", - "ruleLegal": "Only share what you're allowed to share where you live", - "ruleRespect": "Treat people well — no spam, no abuse", - "publicNote": "What you publish here is public, and copies may remain even if you remove it later.", - "viewLegal": "Privacy & rules", - "accept": "I agree", - "decline": "Not now" - }, - "report": { - "offer": "Report this offer", - "person": "Report this person", - "title": "Report", - "prompt": "What's wrong?", - "reasonSpam": "Spam or a scam", - "reasonAbuse": "Abusive or disrespectful", - "reasonIllegal": "Seeds that shouldn't be offered", - "reasonOther": "Something else", - "detailsHint": "Add details (optional)", - "send": "Send report", - "sentHidden": "Report sent — you won't see this anymore", - "failed": "Couldn't send the report — check your connection", - "alsoBlock": "Also block this person" - }, - "block": { - "action": "Block this person", - "confirmTitle": "Block this person?", - "confirmBody": "You won't see their offers or messages anymore. You can unblock them later under Blocked people in the sharing setup.", - "confirm": "Block", - "blockedToast": "Blocked — their offers and messages are hidden", - "manageTitle": "Blocked people", - "manageEmpty": "You haven't blocked anyone", - "unblock": "Unblock" - } } diff --git a/apps/app_seeds/lib/i18n/es.i18n.json b/apps/app_seeds/lib/i18n/es.i18n.json index 9516b8b..d1faa15 100644 --- a/apps/app_seeds/lib/i18n/es.i18n.json +++ b/apps/app_seeds/lib/i18n/es.i18n.json @@ -1,808 +1,809 @@ { - "avatar": { - "title": "Tu foto o avatar", - "fromPhoto": "Hacer o elegir una foto", - "illustration": "O elige un dibujo", - "remove": "Quitar" - }, - "favorites": { - "title": "Favoritos", - "empty": "Aún no tienes favoritos. Guarda ofertas que te gusten del mercado.", - "save": "Guardar en favoritos", - "remove": "Quitar de favoritos", - "unavailable": "Ya no está disponible" - }, - "savedSearches": { - "title": "Búsquedas guardadas", - "empty": "Aún no tienes búsquedas guardadas. Guarda una búsqueda desde el mercado y te avisaremos cuando aparezca algo así en tu zona.", - "save": "Guardar esta búsqueda", - "nameLabel": "Nombra esta búsqueda", - "namePlaceholder": "p. ej. Tomates cerca", - "saved": "Búsqueda guardada — te avisaremos de lo nuevo que encaje cerca", - "openTooltip": "Búsquedas guardadas", - "delete": "Eliminar", - "deleteConfirm": "¿Eliminar esta búsqueda guardada?", - "newMatchesBadge": "{n} nuevas", - "alert": "Semillas nuevas cerca: {label}" - }, - "seedSaving": { - "title": "Conservar su semilla", - "subtitle": "Lo que hace falta para mantener la variedad fiel", - "lifeCycle": "Ciclo", - "cycleAnnual": "Anual", - "cycleBiennial": "Bienal — da semilla el 2.º año", - "cyclePerennial": "Perenne", - "pollination": "Polinización", - "pollSelf": "Se autopoliniza", - "pollCross": "Se cruza con otras", - "pollMixed": "Se autopoliniza, pero se cruza a veces", - "byInsect": "por insectos", - "byWind": "por el viento", - "isolation": "Sepárala", - "isolationRange": "{min}–{max} m de otras variedades", - "isolationSingle": "{min} m de otras variedades", - "plants": "Guarda de varias plantas", - "plantsValue": "De al menos {n} plantas", - "processing": "Cómo limpiarla", - "procDry": "Semilla seca (trillar)", - "procWet": "Semilla húmeda (fermentar y lavar)", - "difficulty": "Dificultad", - "diffEasy": "Fácil", - "diffMedium": "Media", - "diffHard": "Difícil", - "advisory": "Orientativo — adáptalo a tu clima y variedad.", - "sourcePrefix": "Fuente" - }, - "calendar": { - "title": "Este mes", - "filterChip": "Este mes", - "selfNote": "Lo que has anotado en tus variedades.", - "nothing": "Nada anotado para {month}." - }, - "app": { - "title": "Tane" - }, - "bootstrap": { - "failed": "Tane no pudo arrancar", - "retry": "Reintentar" - }, - "common": { - "save": "Guardar", - "cancel": "Cancelar", - "delete": "Eliminar", - "edit": "Editar", - "type": "Tipo", - "comingSoon": "Pronto", - "offline": "Sin conexión — el compartir está en pausa" - }, - "home": { - "tagline": "Comparte y cultiva semillas locales", - "openMarket": "Mercado", - "openMarketSubtitle": "Descubre y comparte semillas cerca", - "yourInventory": "Tu inventario", - "yourInventorySubtitle": "Gestiona tus semillas" - }, - "photo": { - "camera": "Hacer una foto", - "gallery": "Elegir de la galería", - "setAsCover": "Poner de portada", - "isCover": "Foto de portada", - "deleteConfirm": "¿Borrar esta foto?" - }, - "menu": { - "tagline": "tu banco de semillas", - "inventory": "Inventario", - "market": "Mercado", - "profile": "Tu perfil", - "chat": "Chat", - "wishlist": "Favoritos", - "following": "Siguiendo", - "plantares": "Plantares", - "sales": "Ventas", - "calendar": "Calendario", - "settings": "Ajustes" - }, - "settings": { - "language": "Idioma", - "systemLanguage": "Idioma del sistema", - "langEs": "Español", - "langEn": "English", - "langPt": "Português", - "langFr": "Français", - "langDe": "Deutsch", - "langJa": "日本語", - "about": "Acerca de", - "aboutText": "Inventario local y cifrado para semillas tradicionales. AGPL-3.0.", - "aboutOpen": "Acerca de Tane" - }, - "backup": { - "title": "Copia de seguridad", - "autoBackupTitle": "Copias automáticas", - "autoBackupLast": "Última copia el {date} · cada {days} días", - "autoBackupNone": "Se guarda una copia automáticamente cada {days} días", - "exportJson": "Guardar una copia de seguridad", - "exportJsonSubtitle": "Una copia completa para guardar a salvo, restaurar luego o pasar a otro dispositivo", - "importJson": "Restaurar una copia", - "importJsonSubtitle": "Recupera una copia guardada — no se duplica nada", - "exportCsv": "Exportar a una hoja de cálculo", - "exportCsvSubtitle": "Una lista sencilla para Excel o LibreOffice — sin fotos", - "importCsv": "Importar una lista", - "importCsvSubtitle": "Añade entradas desde una hoja de cálculo", - "importConfirmTitle": "¿Restaurar una copia?", - "importConfirmBody": "Las entradas se fusionan con tu inventario; si una entrada existe en ambos lados, gana la versión más reciente. No se duplica nada.", - "importCsvConfirmTitle": "¿Importar una lista?", - "importCsvConfirmBody": "Cada fila se añade como una entrada nueva. No fusiona ni reemplaza, así que importar el mismo fichero dos veces lo añade dos veces.", - "importAction": "Importar", - "exportSaved": "Copia guardada", - "cancelled": "Cancelado", - "importDone": "Importado: {added} nuevas, {updated} actualizadas", - "importCsvDone": "Añadidas {count} entradas", - "importFailed": "Este fichero no se pudo leer como una copia de Tane", - "failed": "Algo ha salido mal", - "recoveryTitle": "Tu código de recuperación", - "recoverySubtitle": "Imprímelo y guárdalo bien: abre tus copias en otro dispositivo", - "recoveryIntro": "Este código abre tus copias guardadas y recupera tu banco en cualquier dispositivo. Guarda dos copias en papel en sitios seguros, como tu mejor semilla. Quien lo tenga puede leer tus copias, así que no lo compartas con nadie.", - "recoveryCopy": "Copiar", - "recoverySave": "Guardar la hoja", - "recoverySheetTitle": "Tane — tu hoja de recuperación", - "recoveryPromptTitle": "Escribe tu código de recuperación", - "recoveryPromptBody": "Esta copia se guardó con otro código. Escribe el código de tu hoja de recuperación para abrirla.", - "recoveryWrongCode": "Ese código no abre esta copia" - }, - "about": { - "title": "Acerca de", - "kanji": "種", - "tagline": "Una app local-first y descentralizada para gestionar y compartir semillas y plantones tradicionales.", - "intro": "Tane (種, «semilla» en japonés) ayuda a personas y colectivos a llevar un inventario amable de su banco de semillas, decidir qué ofrecen y compartirlo localmente — sin un intermediario central que pueda controlarlo, censurarlo o ser multado por ello. Su nombre viene de tanemaki (種まき), «sembrar / esparcir semillas». El objetivo es a la vez práctico y político: apoyar las variedades tradicionales de semillas y plantar cara al monopolio semillero.", - "heritage": "El nombre honra las viejas tradiciones japonesas de ayuda mutua en torno al arroz — yui (trabajo comunitario compartido) y tanomoshi (fondos de reciprocidad) — que inspiraron el papel Plantare, la «moneda comunitaria para el intercambio de semillas» (BAH-Semillero, 2009, CC-BY-SA). Tane es el Plantare digital.", - "version": "Versión", - "license": "Licencia", - "licenseValue": "AGPL-3.0", - "website": "Sitio web", - "sourceCode": "Código fuente", - "translate": "Ayuda a traducir", - "translateSubtitle": "Ayuda a traer Tane a tu idioma", - "openSourceLicenses": "Licencias de código abierto", - "openSourceLicensesSubtitle": "Bibliotecas de terceros y sus licencias", - "copyright": "© {years} Asociación Comunes, bajo AGPLv3" - }, - "intro": { - "skip": "Saltar", - "next": "Siguiente", - "start": "Empezar", - "menuEntry": "Cómo funciona Tane", - "slides": { - "welcome": { - "title": "La semilla que te trajo hasta aquí", - "body": "Cada semilla tradicional es una carta escrita por miles de generaciones, que pasó de mano en mano. Somos lo que somos gracias a ese intercambio." - }, - "inventory": { - "title": "Tu banco de semillas, en el bolsillo", - "body": "Apunta qué tienes, de qué año, cuánto y de dónde vino, con el nombre que tú usas. Una foto y un nombre bastan para empezar." - }, - "privacy": { - "title": "Tuyo y solo tuyo", - "body": "Sin cuenta, sin internet, sin rastreadores. Tus datos viven cifrados en tu dispositivo y solo se comparte lo que tú decidas." - }, - "share": { - "title": "Compartir, como siempre se hizo", - "body": "Ofrece lo que te sobra —regalo, trueque o venta— y que alguien cerca lo encuentre. Solo se muestra la distancia aproximada, nunca tu dirección; el trato lo cierras en persona." - }, - "plantare": { - "title": "Sembrar es multiplicar", - "body": "Con el Plantare, quien recibe promete devolver semilla más adelante. Y como para devolverla hay que cultivarla, cada préstamo multiplica el común." - } + "avatar": { + "title": "Tu foto o avatar", + "fromPhoto": "Hacer o elegir una foto", + "illustration": "O elige un dibujo", + "remove": "Quitar" + }, + "favorites": { + "title": "Favoritos", + "empty": "Aún no tienes favoritos. Guarda ofertas que te gusten del mercado.", + "save": "Guardar en favoritos", + "remove": "Quitar de favoritos", + "unavailable": "Ya no está disponible" + }, + "savedSearches": { + "title": "Búsquedas guardadas", + "empty": "Aún no tienes búsquedas guardadas. Guarda una búsqueda desde el mercado y te avisaremos cuando aparezca algo así en tu zona.", + "save": "Guardar esta búsqueda", + "nameLabel": "Nombra esta búsqueda", + "namePlaceholder": "p. ej. Tomates cerca", + "saved": "Búsqueda guardada — te avisaremos de lo nuevo que encaje cerca", + "openTooltip": "Búsquedas guardadas", + "delete": "Eliminar", + "deleteConfirm": "¿Eliminar esta búsqueda guardada?", + "newMatchesBadge": "{n} nuevas", + "alert": "Semillas nuevas cerca: {label}" + }, + "seedSaving": { + "title": "Conservar su semilla", + "subtitle": "Lo que hace falta para mantener la variedad fiel", + "lifeCycle": "Ciclo", + "cycleAnnual": "Anual", + "cycleBiennial": "Bienal — da semilla el 2.º año", + "cyclePerennial": "Perenne", + "pollination": "Polinización", + "pollSelf": "Se autopoliniza", + "pollCross": "Se cruza con otras", + "pollMixed": "Se autopoliniza, pero se cruza a veces", + "byInsect": "por insectos", + "byWind": "por el viento", + "isolation": "Sepárala", + "isolationRange": "{min}–{max} m de otras variedades", + "isolationSingle": "{min} m de otras variedades", + "plants": "Guarda de varias plantas", + "plantsValue": "De al menos {n} plantas", + "processing": "Cómo limpiarla", + "procDry": "Semilla seca (trillar)", + "procWet": "Semilla húmeda (fermentar y lavar)", + "difficulty": "Dificultad", + "diffEasy": "Fácil", + "diffMedium": "Media", + "diffHard": "Difícil", + "advisory": "Orientativo — adáptalo a tu clima y variedad.", + "sourcePrefix": "Fuente" + }, + "calendar": { + "title": "Este mes", + "filterChip": "Este mes", + "selfNote": "Lo que has anotado en tus variedades.", + "nothing": "Nada anotado para {month}." + }, + "app": { + "title": "Tane" + }, + "bootstrap": { + "failed": "Tane no pudo arrancar", + "retry": "Reintentar" + }, + "common": { + "save": "Guardar", + "cancel": "Cancelar", + "delete": "Eliminar", + "edit": "Editar", + "type": "Tipo", + "comingSoon": "Pronto", + "offline": "Sin conexión — el compartir está en pausa" + }, + "home": { + "tagline": "Comparte y cultiva semillas locales", + "openMarket": "Mercado", + "openMarketSubtitle": "Descubre y comparte semillas cerca", + "yourInventory": "Tu inventario", + "yourInventorySubtitle": "Gestiona tus semillas" + }, + "photo": { + "camera": "Hacer una foto", + "gallery": "Elegir de la galería", + "setAsCover": "Poner de portada", + "isCover": "Foto de portada", + "deleteConfirm": "¿Borrar esta foto?" + }, + "menu": { + "tagline": "tu banco de semillas", + "inventory": "Inventario", + "market": "Mercado", + "profile": "Tu perfil", + "chat": "Chat", + "wishlist": "Favoritos", + "following": "Siguiendo", + "plantares": "Plantares", + "sales": "Ventas", + "calendar": "Calendario", + "settings": "Ajustes" + }, + "settings": { + "language": "Idioma", + "systemLanguage": "Idioma del sistema", + "langEs": "Español", + "langEn": "English", + "langPt": "Português", + "langPtBr": "Português (Brasil)", + "langFr": "Français", + "langDe": "Deutsch", + "langJa": "日本語", + "about": "Acerca de", + "aboutText": "Inventario local y cifrado para semillas tradicionales. AGPL-3.0.", + "aboutOpen": "Acerca de Tane" + }, + "backup": { + "title": "Copia de seguridad", + "autoBackupTitle": "Copias automáticas", + "autoBackupLast": "Última copia el {date} · cada {days} días", + "autoBackupNone": "Se guarda una copia automáticamente cada {days} días", + "exportJson": "Guardar una copia de seguridad", + "exportJsonSubtitle": "Una copia completa para guardar a salvo, restaurar luego o pasar a otro dispositivo", + "importJson": "Restaurar una copia", + "importJsonSubtitle": "Recupera una copia guardada — no se duplica nada", + "exportCsv": "Exportar a una hoja de cálculo", + "exportCsvSubtitle": "Una lista sencilla para Excel o LibreOffice — sin fotos", + "importCsv": "Importar una lista", + "importCsvSubtitle": "Añade entradas desde una hoja de cálculo", + "importConfirmTitle": "¿Restaurar una copia?", + "importConfirmBody": "Las entradas se fusionan con tu inventario; si una entrada existe en ambos lados, gana la versión más reciente. No se duplica nada.", + "importCsvConfirmTitle": "¿Importar una lista?", + "importCsvConfirmBody": "Cada fila se añade como una entrada nueva. No fusiona ni reemplaza, así que importar el mismo fichero dos veces lo añade dos veces.", + "importAction": "Importar", + "exportSaved": "Copia guardada", + "cancelled": "Cancelado", + "importDone": "Importado: {added} nuevas, {updated} actualizadas", + "importCsvDone": "Añadidas {count} entradas", + "importFailed": "Este fichero no se pudo leer como una copia de Tane", + "failed": "Algo ha salido mal", + "recoveryTitle": "Tu código de recuperación", + "recoverySubtitle": "Imprímelo y guárdalo bien: abre tus copias en otro dispositivo", + "recoveryIntro": "Este código abre tus copias guardadas y recupera tu banco en cualquier dispositivo. Guarda dos copias en papel en sitios seguros, como tu mejor semilla. Quien lo tenga puede leer tus copias, así que no lo compartas con nadie.", + "recoveryCopy": "Copiar", + "recoverySave": "Guardar la hoja", + "recoverySheetTitle": "Tane — tu hoja de recuperación", + "recoveryPromptTitle": "Escribe tu código de recuperación", + "recoveryPromptBody": "Esta copia se guardó con otro código. Escribe el código de tu hoja de recuperación para abrirla.", + "recoveryWrongCode": "Ese código no abre esta copia" + }, + "about": { + "title": "Acerca de", + "kanji": "種", + "tagline": "Una app local-first y descentralizada para gestionar y compartir semillas y plantones tradicionales.", + "intro": "Tane (種, «semilla» en japonés) ayuda a personas y colectivos a llevar un inventario amable de su banco de semillas, decidir qué ofrecen y compartirlo localmente — sin un intermediario central que pueda controlarlo, censurarlo o ser multado por ello. Su nombre viene de tanemaki (種まき), «sembrar / esparcir semillas». El objetivo es a la vez práctico y político: apoyar las variedades tradicionales de semillas y plantar cara al monopolio semillero.", + "heritage": "El nombre honra las viejas tradiciones japonesas de ayuda mutua en torno al arroz — yui (trabajo comunitario compartido) y tanomoshi (fondos de reciprocidad) — que inspiraron el papel Plantare, la «moneda comunitaria para el intercambio de semillas» (BAH-Semillero, 2009, CC-BY-SA). Tane es el Plantare digital.", + "version": "Versión", + "license": "Licencia", + "licenseValue": "AGPL-3.0", + "website": "Sitio web", + "sourceCode": "Código fuente", + "translate": "Ayuda a traducir", + "translateSubtitle": "Ayuda a traer Tane a tu idioma", + "openSourceLicenses": "Licencias de código abierto", + "openSourceLicensesSubtitle": "Bibliotecas de terceros y sus licencias", + "copyright": "© {years} Asociación Comunes, bajo AGPLv3" + }, + "intro": { + "skip": "Saltar", + "next": "Siguiente", + "start": "Empezar", + "menuEntry": "Cómo funciona Tane", + "slides": { + "welcome": { + "title": "La semilla que te trajo hasta aquí", + "body": "Cada semilla tradicional es una carta escrita por miles de generaciones, que pasó de mano en mano. Somos lo que somos gracias a ese intercambio." + }, + "inventory": { + "title": "Tu banco de semillas, en el bolsillo", + "body": "Apunta qué tienes, de qué año, cuánto y de dónde vino, con el nombre que tú usas. Una foto y un nombre bastan para empezar." + }, + "privacy": { + "title": "Tuyo y solo tuyo", + "body": "Sin cuenta, sin internet, sin rastreadores. Tus datos viven cifrados en tu dispositivo y solo se comparte lo que tú decidas." + }, + "share": { + "title": "Compartir, como siempre se hizo", + "body": "Ofrece lo que te sobra —regalo, trueque o venta— y que alguien cerca lo encuentre. Solo se muestra la distancia aproximada, nunca tu dirección; el trato lo cierras en persona." + }, + "plantare": { + "title": "Sembrar es multiplicar", + "body": "Con el Plantare, quien recibe promete devolver semilla más adelante. Y como para devolverla hay que cultivarla, cada préstamo multiplica el común." + } + } + }, + "inventory": { + "title": "Inventario", + "searchHint": "Buscar semillas", + "empty": "Aún no hay semillas. Toca + para añadir la primera.", + "noMatches": "Ninguna semilla coincide con los filtros.", + "clearFilters": "Quitar filtros", + "uncategorized": "Sin categoría", + "needsReproductionFilter": "Por reproducir", + "loadError": "No se pudo abrir tu banco de semillas. Quizá estaba ocupado: inténtalo de nuevo.", + "retry": "Reintentar" + }, + "draft": { + "capture": "Capturar fotos", + "captured": "{n} capturadas por catalogar", + "triageTitle": "Por catalogar", + "triageCount": "{n} por catalogar", + "untitled": "Sin nombre", + "nameField": "Nombra esta semilla", + "nameHint": "¿Qué es?", + "suggestFromPhoto": "Sugerir nombre de la foto", + "discard": "Descartar" + }, + "quickAdd": { + "title": "Añadir una semilla", + "labelField": "Nombre", + "labelRequired": "Ponle un nombre", + "addPhoto": "Añadir foto", + "quantity": "¿Cuánta?", + "more": "Añadir más…", + "save": "Guardar", + "saveAndAddAnother": "Guardar y añadir otra", + "addedCount": "{n} añadidas", + "cancel": "Cancelar" + }, + "detail": { + "notFound": "Esta semilla ya no está aquí.", + "lots": "Lotes", + "noLots": "Aún no hay lotes.", + "names": "También conocida como", + "addName": "Añadir nombre", + "links": "Enlaces", + "addLink": "Añadir enlace", + "linkUrl": "URL", + "linkTitle": "Título (opcional)", + "reference": "Saber más", + "refGbif": "GBIF", + "refWikipedia": "Wikipedia", + "refWikispecies": "Wikispecies", + "notes": "Notas", + "addLot": "Añadir lote", + "editLot": "Editar lote", + "deleteConfirm": "¿Eliminar esta semilla?", + "year": "Año {year}", + "noYear": "Año desconocido" + }, + "germination": { + "title": "Germinación", + "add": "Añadir prueba", + "sampleSize": "Muestra", + "germinated": "Germinadas", + "none": "Aún no hay pruebas de germinación.", + "result": "{percent}%" + }, + "viability": { + "expiringSoon": "Úsala o multiplícala esta temporada", + "expiringSoonYears": "Úsala o multiplícala esta temporada · dura ~{years} años", + "expired": "Supera su viabilidad típica — a multiplicar", + "expiredYears": "Supera su viabilidad típica (~{years} años) — a multiplicar" + }, + "editVariety": { + "title": "Editar semilla", + "name": "Nombre", + "category": "Categoría", + "notes": "Notas", + "species": "Especie (del catálogo)", + "speciesHint": "Buscar una especie…", + "speciesSuggested": "Sugerida por el nombre", + "organic": "Ecológica", + "organicHint": "Cultivada de forma ecológica (eco)" + }, + "addLot": { + "title": "Añadir lote", + "year": "Fecha de cosecha", + "quantity": "¿Cuánta?", + "amount": "Cantidad" + }, + "harvest": { + "pickTitle": "Seleccionar mes / año", + "anyMonth": "Cualquier mes", + "noDate": "Indicar fecha de cosecha", + "monthNames": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ] + }, + "lotType": { + "seed": "Semillas", + "plant": "Planta", + "seedling": "Plantón", + "tree": "Árbol / arbusto", + "bulb": "Bulbo / tubérculo", + "cutting": "Esqueje" + }, + "presentation": { + "title": "Envase", + "none": "Sin especificar", + "pot": "Maceta", + "tray": "Bandeja", + "plug": "Alvéolo", + "bareRoot": "Raíz desnuda", + "rootBall": "Cepellón" + }, + "provenance": { + "section": "De dónde viene", + "seedsFrom": "Semillas de", + "seedsFromHint": "Quién las cultivó o las dio", + "place": "Lugar", + "placeHint": "De dónde vienen (con provincia)", + "addSeedsFrom": "Semillas de", + "addPlace": "Lugar" + }, + "abundance": { + "add": "Cuánta tengo", + "title": "Cuánta tengo", + "none": "Sin indicar", + "plentyToShare": "De sobra para compartir", + "enoughToShare": "Bastante, para compartir con moderación", + "enoughForMe": "Suficiente para mí", + "runningLow": "Queda poca" + }, + "share": { + "add": "¿La compartes?", + "title": "¿La compartes?", + "nudge": "Tienes de sobra: podrías compartir un poco.", + "price": "Precio", + "priceHint": "Déjalo vacío para acordarlo luego", + "private": "Solo para mí", + "gift": "Para regalar", + "exchange": "Para intercambiar", + "sell": "En venta", + "filterChip": "Comparto", + "printCatalog": "Imprimir lo que comparto", + "catalogTitle": "Lo que comparto", + "catalogSaved": "Catálogo guardado", + "cancelled": "Cancelado" + }, + "printLabels": { + "action": "Imprimir etiquetas", + "title": "Imprimir etiquetas", + "selectHint": "Elige las semillas para imprimir sus etiquetas", + "selectAll": "Seleccionar todo", + "selected": "{n} seleccionadas", + "none": "Selecciona semillas primero", + "format": "Tamaño de etiqueta", + "formatStickers": "Pegatinas pequeñas", + "formatStickersHint": "Muchas etiquetas pequeñas por hoja — para pegar en sobres", + "formatCards": "Tarjetas grandes", + "formatCardsHint": "Menos etiquetas, más grandes — para botes y cajas", + "count": "{n} etiquetas", + "save": "Guardar etiquetas", + "saved": "Etiquetas guardadas", + "cancelled": "Cancelado" + }, + "scan": { + "action": "Escanear una etiqueta", + "title": "Escanear etiqueta", + "notALabel": "Ese código no es una etiqueta de semillas", + "addTitle": "No está en tu colección", + "addBody": "¿Añadir «{label}» a tus semillas?", + "add": "Añadirla", + "added": "Añadida a tu colección" + }, + "cropCalendar": { + "add": "Calendario de cultivo", + "title": "Calendario de cultivo", + "sow": "Siembra", + "transplant": "Trasplante", + "flowering": "Floración", + "fruiting": "Fructificación", + "seedHarvest": "Cosecha de semilla", + "editorHint": "Anota tú los meses típicos de esta variedad en tu zona — son tus propias notas.", + "unset": "—" + }, + "needsReproduction": { + "label": "Reproducir esta temporada", + "hint": "Cultívala antes de que se acabe la semilla", + "badge": "Por reproducir" + }, + "preservation": { + "add": "Cómo se conserva", + "title": "Cómo se conserva", + "none": "Sin especificar", + "jarWithDesiccant": "Bote con desecante", + "glassJar": "Bote de cristal", + "paperEnvelope": "Sobre de papel", + "paperBag": "Bolsa de papel", + "plasticBag": "Bolsa de plástico" + }, + "conditionCheck": { + "advanced": "Conservación y detalles del banco", + "title": "Revisiones de conservación", + "add": "Añadir revisión", + "containers": "Botes / recipientes", + "desiccant": "Desecante", + "none": "Aún no hay revisiones.", + "summary": "{count} bote(s) · {state}" + }, + "desiccant": { + "none": "No tiene", + "add": "Se pone", + "replace": "Se cambia", + "dry": "Azul — seco", + "fresh": "Recién puesto" + }, + "unit": { + "aFew": "unas pocas", + "some": "algunas", + "plenty": "muchas", + "pinch": "una pizca", + "handful": { + "singular": "puñado", + "plural": "puñados" + }, + "teaspoon": { + "singular": "cucharadita", + "plural": "cucharaditas" + }, + "spoon": { + "singular": "cuchara", + "plural": "cucharas" + }, + "cup": { + "singular": "taza", + "plural": "tazas" + }, + "jar": { + "singular": "bote", + "plural": "botes" + }, + "sack": { + "singular": "saco", + "plural": "sacos" + }, + "packet": { + "singular": "sobre", + "plural": "sobres" + }, + "cob": { + "singular": "mazorca", + "plural": "mazorcas" + }, + "pod": { + "singular": "vaina", + "plural": "vainas" + }, + "ear": { + "singular": "espiga", + "plural": "espigas" + }, + "head": { + "singular": "cabezuela", + "plural": "cabezuelas" + }, + "fruit": { + "singular": "fruto", + "plural": "frutos" + }, + "bulb": { + "singular": "bulbo", + "plural": "bulbos" + }, + "tuber": { + "singular": "tubérculo", + "plural": "tubérculos" + }, + "seedHead": { + "singular": "cabeza de semillas", + "plural": "cabezas de semillas" + }, + "bunch": { + "singular": "manojo", + "plural": "manojos" + }, + "plant": { + "singular": "planta", + "plural": "plantas" + }, + "pot": { + "singular": "maceta", + "plural": "macetas" + }, + "tray": { + "singular": "bandeja", + "plural": "bandejas" + }, + "seedling": { + "singular": "plántula", + "plural": "plántulas" + }, + "tree": { + "singular": "árbol", + "plural": "árboles" + }, + "cutting": { + "singular": "esqueje", + "plural": "esquejes" + }, + "grams": { + "singular": "gramo", + "plural": "gramos" + }, + "count": { + "singular": "semilla", + "plural": "semillas" + } + }, + "market": { + "title": "Semillas cerca de ti", + "subtitle": "Lo que otras personas comparten cerca", + "notSetUp": "Aún no has configurado el compartir", + "notSetUpBody": "Activa el compartir para ver y dar semillas a gente cercana. Se mantiene aproximado — tu zona, nunca tu dirección exacta.", + "setUp": "Configurar el compartir", + "cantReach": "No se puede conectar con los servidores ahora mismo", + "cantReachBody": "Inténtalo de nuevo, o revisa los servidores en la configuración avanzada.", + "retry": "Reintentar", + "setArea": "Indica tu zona", + "setAreaBody": "Dile al mercado tu zona aproximada para ver semillas cerca.", + "searching": "Buscando por tu zona…", + "empty": "Aún no hay semillas compartidas cerca de ti", + "searchHint": "Buscar entre estas semillas", + "noMatches": "Ninguna semilla compartida coincide con tu búsqueda", + "near": "Cerca de ti", + "contact": "Mensaje", + "mine": "Tú", + "configTitle": "Configuración de compartir", + "setupIntro": "Compartir con gente cercana es opcional. Solo indica tu zona aproximada — ya estás conectado a servidores comunitarios compartidos para que otras personas encuentren lo que ofreces, sin ninguna empresa en medio.", + "areaLabel": "Tu zona", + "areaHelp": "Se mantiene aproximado a propósito — tu zona, nunca un punto exacto.", + "areaSet": "Tu zona está puesta — aproximada, nunca tu punto exacto", + "areaNotSet": "Zona sin definir — usa tu ubicación, o añade un código en Avanzado", + "advanced": "Avanzado", + "areaCodeLabel": "Código de zona", + "areaCodeHint": "Un código corto como sp3e9 — no un nombre de lugar", + "serversLabel": "Servidores de la comunidad", + "serversHelp": "Elige qué servidores usar. Déjalo así si no sabes.", + "serversAdvanced": "Añadir otro servidor", + "serverAddress": "Dirección del servidor", + "serverInvalid": "Introduce una dirección válida (wss://…)", + "save": "Guardar", + "saved": "Guardado", + "wanted": "Busco", + "shareMine": "Compartir mis semillas", + "sharedCount": "Compartidas {n} semillas", + "nothingToShare": "Marca antes algunas semillas para regalar, cambiar o vender", + "useLocation": "Usar mi ubicación aproximada", + "locationFailed": "No se pudo obtener tu ubicación — comprueba que la ubicación está activada y el permiso concedido", + "queued": "Guardado — las compartiremos cuando tengas conexión", + "shareFailed": "No se pudo conectar con los servidores — tus semillas no se compartieron. Inténtalo de nuevo en un momento.", + "rangeLabel": "Hasta dónde buscar", + "rangeNear": "Muy cerca", + "rangeArea": "Por mi zona", + "rangeRegion": "Mi región", + "sharedBy": "Compartido por", + "noProfile": "Esta persona aún no ha compartido su perfil", + "copyId": "Copiar código", + "idCopied": "Código copiado", + "photo": "Foto" + }, + "profile": { + "title": "Tu perfil", + "name": "Nombre", + "nameHint": "Cómo te ven los demás", + "about": "Sobre ti", + "aboutHint": "Una línea — qué cultivas, dónde", + "g1": "Dirección Ğ1 (opcional)", + "g1Hint": "Para que te paguen en Ğ1 — aparte de tu clave", + "yourId": "Tu identidad", + "idHelp": "Compártela para que te reconozcan", + "copy": "Copiar", + "copied": "Copiado", + "save": "Guardar", + "saved": "Perfil guardado", + "identities": "Tus identidades", + "identitiesHelp": "Ten identidades separadas — cada una con sus mensajes y contactos. Todas salen de tu única copia de seguridad, así que cambiar no añade nada que recordar.", + "identityLabel": "Identidad {n}", + "current": "En uso", + "newIdentity": "Nueva identidad", + "switchTitle": "¿Cambiar de identidad?", + "switchBody": "Los mensajes y contactos se guardan por separado para cada identidad. Puedes volver cuando quieras.", + "switchAction": "Cambiar" + }, + "chatList": { + "title": "Mensajes", + "empty": "Aún no hay conversaciones. Escribe a alguien desde el mercado." + }, + "chat": { + "title": "Chat", + "hint": "Escribe un mensaje…", + "send": "Enviar", + "empty": "Aún no hay mensajes — saluda", + "offline": "Configura el compartir para enviar mensajes", + "payG1": "Pagar en Ğ1", + "g1Copied": "Dirección Ğ1 copiada — pégala en tu cartera", + "today": "Hoy", + "yesterday": "Ayer", + "sendError": "No se pudo enviar — revisa tu conexión", + "noLinks": "No se permiten enlaces en los mensajes" + }, + "trust": { + "none": "Nadie los avala aún", + "count": "Avalada por {n}", + "vouch": "Conozco a esta persona", + "vouched": "Avalas a esta persona", + "circle": "En tu círculo" + }, + "yourPeople": { + "title": "Tu gente", + "help": "Personas que conoces y avalas, y personas que te avalan.", + "youVouchFor": "Tú avalas a", + "vouchesForYou": "Te avalan", + "youVouchForEmpty": "Aún no avalas a nadie. Cuando conozcas a alguien, abre vuestro chat y toca \"Conozco a esta persona\".", + "vouchesForYouEmpty": "Nadie te avala todavía", + "revoke": "Dejar de avalar", + "revokeConfirm": "¿Dejar de avalar a esta persona?", + "offline": "Sin conexión — inténtalo cuando estés en línea" + }, + "ratings": { + "rate": "Valorar a esta persona", + "edit": "Editar tu valoración", + "commentHint": "¿Qué tal fue? (opcional)", + "fromYourCircle": "{n} de gente que conoces", + "retract": "Quitar tu valoración", + "saved": "Valoración guardada" + }, + "notifications": { + "newMessageFrom": "Nuevo mensaje de {name}" + }, + "plantare": { + "title": "Plantares", + "help": "Un Plantare es el compromiso de reproducir una semilla y devolver una parte — así una variedad sigue viajando de mano en mano. No es una venta.", + "add": "Añadir compromiso", + "empty": "Aún no hay compromisos. Cuando compartas o recibas semilla con el compromiso de reproducirla y devolver algo, anótalo aquí.", + "iReturn": "La reproduzco y devuelvo yo", + "owedToMe": "Me la devuelven a mí", + "direction": "Quién reproduce y devuelve", + "counterparty": "¿Con quién?", + "counterpartyHint": "Una persona o un colectivo (opcional)", + "owed": "¿Qué se devuelve?", + "owedHint": "p. ej. un puñado la próxima temporada (opcional)", + "note": "Nota (opcional)", + "save": "Guardar", + "markReturned": "Marcar devuelto", + "markForgiven": "Dar por saldado", + "reopen": "Reabrir", + "delete": "Quitar", + "statusReturned": "Devuelto", + "statusForgiven": "Saldado", + "openSection": "Pendientes", + "settledSection": "Hechos", + "removeConfirm": "¿Quitar este compromiso?", + "returnBy": "Devolver antes del {date}", + "overdue": "vencido", + "dueByLabel": "Devolver antes de (opcional)", + "dueByHint": "Un recordatorio suave, nunca obligatorio", + "pickDate": "Elegir fecha", + "clearDate": "Quitar fecha", + "sectionTitle": "Compromisos", + "propose": "Proponer un Plantaré firmado", + "proposeHelp": "Los dos guardáis la misma promesa, firmada por ambos: prueba de que esta semilla cambió de manos y se cultivará y devolverá.", + "proposeTo": "Con {name}", + "sent": "Propuesta enviada — esperando su firma", + "seedLabel": "¿Qué semilla?", + "seedHint": "La variedad a la que se refiere la promesa", + "returnKindLabel": "¿Qué se devuelve?", + "returnSimilar": "Una cantidad similar de semilla", + "returnSimilarNote": "polinización abierta · no transgénica · cultivada en ecológico", + "returnWork": "Unas horas de trabajo", + "returnOther": "Otra cosa", + "workHoursLabel": "¿Cuántas horas?", + "proposalsSection": "Esperando tu respuesta", + "incomingFrom": "{name} te propone un Plantaré", + "accept": "Aceptar y firmar", + "declineAction": "Rechazar", + "declineReasonHint": "Motivo (opcional)", + "acceptedToast": "Firmado — ahora lo guardáis los dos", + "declinedToast": "Rechazado", + "badgeAwaiting": "Falta firma", + "badgeSigned": "Firmado por ambos", + "badgeDeclined": "Rechazado", + "offline": "Estás sin conexión — se enviará al reconectar" + }, + "handover": { + "title": "Di o recibí semillas", + "help": "Un regalo, un trueque o una venta: apúntalo, con promesa de devolver semilla o sin ella.", + "iGave": "Di semillas", + "iReceived": "Recibí semillas", + "whichLot": "¿De qué lote?", + "howMuch": "¿Cuánto?", + "allOfIt": "Todo", + "partOfIt": "Una parte", + "paymentChip": "Hubo dinero por medio", + "promiseGave": "Me devolverán semilla", + "promiseReceived": "Devolveré semilla" + }, + "history": { + "title": "Historia de este lote", + "tooltip": "Historia", + "sowToday": "Sembrado hoy", + "harvestToday": "Cosechado hoy", + "sownRecorded": "Siembra anotada", + "harvestRecorded": "Cosecha anotada", + "movementReceived": "Recibido", + "movementGiven": "Regalado", + "movementSown": "Sembrado", + "movementHarvested": "Cosechado", + "movementGerminationTest": "Prueba de germinación", + "movementSplit": "Repartido en lotes", + "movementDiscarded": "Descartado", + "created": "Entró en tu colección", + "from": "De {origin}", + "germinationResult": "Prueba de germinación — {percent}%", + "linkedEarlier": "Viene de un lote anterior", + "outcomeQuestion": "¿Qué tal se dio?", + "outcomeGood": "Bien", + "outcomeMixed": "Regular", + "outcomePoor": "Mal", + "outcomeNoteHint": "Una nota para tu yo del futuro (opcional)", + "outcomeSaved": "Anotado", + "ratedGood": "Se dio bien", + "ratedMixed": "Se dio regular", + "ratedPoor": "Se dio mal", + "outcomeTitle": "Nota de temporada", + "outcomeYear": "Temporada {year}", + "isolationHint": "Esta especie se cruza con sus vecinas — cultívala a unos {meters} m de otras para que se mantenga fiel" + }, + "sale": { + "title": "Ventas", + "help": "Registra semilla vendida o comprada — dinero, Ğ1 o cualquier moneda. Un modelo aparte del regalo y del Plantare. Nunca se cobra comisión por las semillas.", + "add": "Registrar venta", + "empty": "Aún no hay ventas. Anota aquí lo que vendes o compras.", + "iSold": "Vendí", + "iBought": "Compré", + "direction": "¿Vendes o compras?", + "counterparty": "¿Con quién?", + "counterpartyHint": "Una persona o un colectivo (opcional)", + "amount": "Importe", + "currency": "Moneda", + "currencyHint": "€, Ğ1, horas… (opcional)", + "hours": "horas", + "note": "Nota (opcional)", + "save": "Guardar", + "delete": "Quitar", + "removeConfirm": "¿Quitar esta venta?" + }, + "legal": { + "title": "Privacidad y normas", + "subtitle": "Tu privacidad, las normas del mercado y la legalidad de las semillas", + "privacyTitle": "Tu privacidad", + "privacyBody": "Tane funciona sin cuenta, y todo lo que registras se queda en tu dispositivo, cifrado. No hay publicidad, ni rastreadores, ni servidor de Tane.\n\nNo se comparte nada salvo que tú quieras: cuando publicas una oferta o tu perfil, o envías un mensaje, viaja por servidores comunitarios. Las ofertas solo llevan una zona aproximada — nunca tu dirección.\n\nLo que publicas es público, y pueden quedar copias incluso después de retirarlo — así que comparte con cuidado.", + "rulesTitle": "Las reglas del juego", + "rulesBody": "Tane es una herramienta, no una tienda: los intercambios se acuerdan directamente entre personas y nadie se lleva comisión. Eso también significa que tú respondes de lo que ofreces y envías.\n\nEn el mercado: sé honesto con tus semillas, ofrece solo lo que puedas compartir, trata bien a la gente y no hagas spam. Puedes bloquear a cualquiera y denunciar ofertas o personas que incumplan las normas — las denuncias se atienden en los servidores comunitarios.", + "seedsTitle": "Sobre compartir semillas y plantones", + "seedsBody": "Regalar e intercambiar semillas entre aficionados está ampliamente reconocido en la mayoría de países. Vender puede ser distinto: en muchos sitios, vender semilla de variedades no registradas oficialmente está restringido — consulta tu normativa antes de pedir un precio.\n\nEnviar semillas a otro país también suele estar restringido, y las variedades protegidas comercialmente no pueden propagarse sin permiso. Ante la duda, mejor local y mejor regalo.\n\nLo mismo vale para plantones y plantas jóvenes, pero la planta viva puede tener reglas de transporte y fitosanitarias más estrictas que la semilla: moverla entre regiones o países puede requerir controles adicionales.", + "readFull": "Leer los documentos completos en la web" + }, + "marketGate": { + "title": "Antes de entrar al mercado", + "intro": "El mercado es un espacio compartido entre vecinas y vecinos. Al continuar, aceptas unas pocas normas sencillas:", + "ruleHonest": "Sé honesto con las semillas que ofreces", + "ruleLegal": "Comparte solo lo que puedas compartir donde vives", + "ruleRespect": "Trata bien a la gente — sin spam ni abusos", + "publicNote": "Lo que publiques aquí es público, y pueden quedar copias aunque lo retires después.", + "viewLegal": "Privacidad y normas", + "accept": "Acepto", + "decline": "Ahora no" + }, + "report": { + "offer": "Denunciar esta oferta", + "person": "Denunciar a esta persona", + "title": "Denunciar", + "prompt": "¿Qué ocurre?", + "reasonSpam": "Spam o un engaño", + "reasonAbuse": "Abusivo o irrespetuoso", + "reasonIllegal": "Semillas que no deberían ofrecerse", + "reasonOther": "Otra cosa", + "detailsHint": "Añade detalles (opcional)", + "send": "Enviar denuncia", + "sentHidden": "Denuncia enviada — ya no verás esto", + "failed": "No se pudo enviar la denuncia — revisa tu conexión", + "alsoBlock": "Bloquear también a esta persona" + }, + "block": { + "action": "Bloquear a esta persona", + "confirmTitle": "¿Bloquear a esta persona?", + "confirmBody": "Dejarás de ver sus ofertas y mensajes. Puedes desbloquearla más adelante en Personas bloqueadas, en la configuración de compartir.", + "confirm": "Bloquear", + "blockedToast": "Persona bloqueada — sus ofertas y mensajes quedan ocultos", + "manageTitle": "Personas bloqueadas", + "manageEmpty": "No has bloqueado a nadie", + "unblock": "Desbloquear" } - }, - "inventory": { - "title": "Inventario", - "searchHint": "Buscar semillas", - "empty": "Aún no hay semillas. Toca + para añadir la primera.", - "noMatches": "Ninguna semilla coincide con los filtros.", - "clearFilters": "Quitar filtros", - "uncategorized": "Sin categoría", - "needsReproductionFilter": "Por reproducir", - "loadError": "No se pudo abrir tu banco de semillas. Quizá estaba ocupado: inténtalo de nuevo.", - "retry": "Reintentar" - }, - "draft": { - "capture": "Capturar fotos", - "captured": "{n} capturadas por catalogar", - "triageTitle": "Por catalogar", - "triageCount": "{n} por catalogar", - "untitled": "Sin nombre", - "nameField": "Nombra esta semilla", - "nameHint": "¿Qué es?", - "suggestFromPhoto": "Sugerir nombre de la foto", - "discard": "Descartar" - }, - "quickAdd": { - "title": "Añadir una semilla", - "labelField": "Nombre", - "labelRequired": "Ponle un nombre", - "addPhoto": "Añadir foto", - "quantity": "¿Cuánta?", - "more": "Añadir más…", - "save": "Guardar", - "saveAndAddAnother": "Guardar y añadir otra", - "addedCount": "{n} añadidas", - "cancel": "Cancelar" - }, - "detail": { - "notFound": "Esta semilla ya no está aquí.", - "lots": "Lotes", - "noLots": "Aún no hay lotes.", - "names": "También conocida como", - "addName": "Añadir nombre", - "links": "Enlaces", - "addLink": "Añadir enlace", - "linkUrl": "URL", - "linkTitle": "Título (opcional)", - "reference": "Saber más", - "refGbif": "GBIF", - "refWikipedia": "Wikipedia", - "refWikispecies": "Wikispecies", - "notes": "Notas", - "addLot": "Añadir lote", - "editLot": "Editar lote", - "deleteConfirm": "¿Eliminar esta semilla?", - "year": "Año {year}", - "noYear": "Año desconocido" - }, - "germination": { - "title": "Germinación", - "add": "Añadir prueba", - "sampleSize": "Muestra", - "germinated": "Germinadas", - "none": "Aún no hay pruebas de germinación.", - "result": "{percent}%" - }, - "viability": { - "expiringSoon": "Úsala o multiplícala esta temporada", - "expiringSoonYears": "Úsala o multiplícala esta temporada · dura ~{years} años", - "expired": "Supera su viabilidad típica — a multiplicar", - "expiredYears": "Supera su viabilidad típica (~{years} años) — a multiplicar" - }, - "editVariety": { - "title": "Editar semilla", - "name": "Nombre", - "category": "Categoría", - "notes": "Notas", - "species": "Especie (del catálogo)", - "speciesHint": "Buscar una especie…", - "speciesSuggested": "Sugerida por el nombre", - "organic": "Ecológica", - "organicHint": "Cultivada de forma ecológica (eco)" - }, - "addLot": { - "title": "Añadir lote", - "year": "Fecha de cosecha", - "quantity": "¿Cuánta?", - "amount": "Cantidad" - }, - "harvest": { - "pickTitle": "Seleccionar mes / año", - "anyMonth": "Cualquier mes", - "noDate": "Indicar fecha de cosecha", - "monthNames": [ - "enero", - "febrero", - "marzo", - "abril", - "mayo", - "junio", - "julio", - "agosto", - "septiembre", - "octubre", - "noviembre", - "diciembre" - ] - }, - "lotType": { - "seed": "Semillas", - "plant": "Planta", - "seedling": "Plantón", - "tree": "Árbol / arbusto", - "bulb": "Bulbo / tubérculo", - "cutting": "Esqueje" - }, - "presentation": { - "title": "Envase", - "none": "Sin especificar", - "pot": "Maceta", - "tray": "Bandeja", - "plug": "Alvéolo", - "bareRoot": "Raíz desnuda", - "rootBall": "Cepellón" - }, - "provenance": { - "section": "De dónde viene", - "seedsFrom": "Semillas de", - "seedsFromHint": "Quién las cultivó o las dio", - "place": "Lugar", - "placeHint": "De dónde vienen (con provincia)", - "addSeedsFrom": "Semillas de", - "addPlace": "Lugar" - }, - "abundance": { - "add": "Cuánta tengo", - "title": "Cuánta tengo", - "none": "Sin indicar", - "plentyToShare": "De sobra para compartir", - "enoughToShare": "Bastante, para compartir con moderación", - "enoughForMe": "Suficiente para mí", - "runningLow": "Queda poca" - }, - "share": { - "add": "¿La compartes?", - "title": "¿La compartes?", - "nudge": "Tienes de sobra: podrías compartir un poco.", - "price": "Precio", - "priceHint": "Déjalo vacío para acordarlo luego", - "private": "Solo para mí", - "gift": "Para regalar", - "exchange": "Para intercambiar", - "sell": "En venta", - "filterChip": "Comparto", - "printCatalog": "Imprimir lo que comparto", - "catalogTitle": "Lo que comparto", - "catalogSaved": "Catálogo guardado", - "cancelled": "Cancelado" - }, - "printLabels": { - "action": "Imprimir etiquetas", - "title": "Imprimir etiquetas", - "selectHint": "Elige las semillas para imprimir sus etiquetas", - "selectAll": "Seleccionar todo", - "selected": "{n} seleccionadas", - "none": "Selecciona semillas primero", - "format": "Tamaño de etiqueta", - "formatStickers": "Pegatinas pequeñas", - "formatStickersHint": "Muchas etiquetas pequeñas por hoja — para pegar en sobres", - "formatCards": "Tarjetas grandes", - "formatCardsHint": "Menos etiquetas, más grandes — para botes y cajas", - "count": "{n} etiquetas", - "save": "Guardar etiquetas", - "saved": "Etiquetas guardadas", - "cancelled": "Cancelado" - }, - "scan": { - "action": "Escanear una etiqueta", - "title": "Escanear etiqueta", - "notALabel": "Ese código no es una etiqueta de semillas", - "addTitle": "No está en tu colección", - "addBody": "¿Añadir «{label}» a tus semillas?", - "add": "Añadirla", - "added": "Añadida a tu colección" - }, - "cropCalendar": { - "add": "Calendario de cultivo", - "title": "Calendario de cultivo", - "sow": "Siembra", - "transplant": "Trasplante", - "flowering": "Floración", - "fruiting": "Fructificación", - "seedHarvest": "Cosecha de semilla", - "editorHint": "Anota tú los meses típicos de esta variedad en tu zona — son tus propias notas.", - "unset": "—" - }, - "needsReproduction": { - "label": "Reproducir esta temporada", - "hint": "Cultívala antes de que se acabe la semilla", - "badge": "Por reproducir" - }, - "preservation": { - "add": "Cómo se conserva", - "title": "Cómo se conserva", - "none": "Sin especificar", - "jarWithDesiccant": "Bote con desecante", - "glassJar": "Bote de cristal", - "paperEnvelope": "Sobre de papel", - "paperBag": "Bolsa de papel", - "plasticBag": "Bolsa de plástico" - }, - "conditionCheck": { - "advanced": "Conservación y detalles del banco", - "title": "Revisiones de conservación", - "add": "Añadir revisión", - "containers": "Botes / recipientes", - "desiccant": "Desecante", - "none": "Aún no hay revisiones.", - "summary": "{count} bote(s) · {state}" - }, - "desiccant": { - "none": "No tiene", - "add": "Se pone", - "replace": "Se cambia", - "dry": "Azul — seco", - "fresh": "Recién puesto" - }, - "unit": { - "aFew": "unas pocas", - "some": "algunas", - "plenty": "muchas", - "pinch": "una pizca", - "handful": { - "singular": "puñado", - "plural": "puñados" - }, - "teaspoon": { - "singular": "cucharadita", - "plural": "cucharaditas" - }, - "spoon": { - "singular": "cuchara", - "plural": "cucharas" - }, - "cup": { - "singular": "taza", - "plural": "tazas" - }, - "jar": { - "singular": "bote", - "plural": "botes" - }, - "sack": { - "singular": "saco", - "plural": "sacos" - }, - "packet": { - "singular": "sobre", - "plural": "sobres" - }, - "cob": { - "singular": "mazorca", - "plural": "mazorcas" - }, - "pod": { - "singular": "vaina", - "plural": "vainas" - }, - "ear": { - "singular": "espiga", - "plural": "espigas" - }, - "head": { - "singular": "cabezuela", - "plural": "cabezuelas" - }, - "fruit": { - "singular": "fruto", - "plural": "frutos" - }, - "bulb": { - "singular": "bulbo", - "plural": "bulbos" - }, - "tuber": { - "singular": "tubérculo", - "plural": "tubérculos" - }, - "seedHead": { - "singular": "cabeza de semillas", - "plural": "cabezas de semillas" - }, - "bunch": { - "singular": "manojo", - "plural": "manojos" - }, - "plant": { - "singular": "planta", - "plural": "plantas" - }, - "pot": { - "singular": "maceta", - "plural": "macetas" - }, - "tray": { - "singular": "bandeja", - "plural": "bandejas" - }, - "seedling": { - "singular": "plántula", - "plural": "plántulas" - }, - "tree": { - "singular": "árbol", - "plural": "árboles" - }, - "cutting": { - "singular": "esqueje", - "plural": "esquejes" - }, - "grams": { - "singular": "gramo", - "plural": "gramos" - }, - "count": { - "singular": "semilla", - "plural": "semillas" - } - }, - "market": { - "title": "Semillas cerca de ti", - "subtitle": "Lo que otras personas comparten cerca", - "notSetUp": "Aún no has configurado el compartir", - "notSetUpBody": "Activa el compartir para ver y dar semillas a gente cercana. Se mantiene aproximado — tu zona, nunca tu dirección exacta.", - "setUp": "Configurar el compartir", - "cantReach": "No se puede conectar con los servidores ahora mismo", - "cantReachBody": "Inténtalo de nuevo, o revisa los servidores en la configuración avanzada.", - "retry": "Reintentar", - "setArea": "Indica tu zona", - "setAreaBody": "Dile al mercado tu zona aproximada para ver semillas cerca.", - "searching": "Buscando por tu zona…", - "empty": "Aún no hay semillas compartidas cerca de ti", - "searchHint": "Buscar entre estas semillas", - "noMatches": "Ninguna semilla compartida coincide con tu búsqueda", - "near": "Cerca de ti", - "contact": "Mensaje", - "mine": "Tú", - "configTitle": "Configuración de compartir", - "setupIntro": "Compartir con gente cercana es opcional. Solo indica tu zona aproximada — ya estás conectado a servidores comunitarios compartidos para que otras personas encuentren lo que ofreces, sin ninguna empresa en medio.", - "areaLabel": "Tu zona", - "areaHelp": "Se mantiene aproximado a propósito — tu zona, nunca un punto exacto.", - "areaSet": "Tu zona está puesta — aproximada, nunca tu punto exacto", - "areaNotSet": "Zona sin definir — usa tu ubicación, o añade un código en Avanzado", - "advanced": "Avanzado", - "areaCodeLabel": "Código de zona", - "areaCodeHint": "Un código corto como sp3e9 — no un nombre de lugar", - "serversLabel": "Servidores de la comunidad", - "serversHelp": "Elige qué servidores usar. Déjalo así si no sabes.", - "serversAdvanced": "Añadir otro servidor", - "serverAddress": "Dirección del servidor", - "serverInvalid": "Introduce una dirección válida (wss://…)", - "save": "Guardar", - "saved": "Guardado", - "wanted": "Busco", - "shareMine": "Compartir mis semillas", - "sharedCount": "Compartidas {n} semillas", - "nothingToShare": "Marca antes algunas semillas para regalar, cambiar o vender", - "useLocation": "Usar mi ubicación aproximada", - "locationFailed": "No se pudo obtener tu ubicación — comprueba que la ubicación está activada y el permiso concedido", - "queued": "Guardado — las compartiremos cuando tengas conexión", - "shareFailed": "No se pudo conectar con los servidores — tus semillas no se compartieron. Inténtalo de nuevo en un momento.", - "rangeLabel": "Hasta dónde buscar", - "rangeNear": "Muy cerca", - "rangeArea": "Por mi zona", - "rangeRegion": "Mi región", - "sharedBy": "Compartido por", - "noProfile": "Esta persona aún no ha compartido su perfil", - "copyId": "Copiar código", - "idCopied": "Código copiado", - "photo": "Foto" - }, - "profile": { - "title": "Tu perfil", - "name": "Nombre", - "nameHint": "Cómo te ven los demás", - "about": "Sobre ti", - "aboutHint": "Una línea — qué cultivas, dónde", - "g1": "Dirección Ğ1 (opcional)", - "g1Hint": "Para que te paguen en Ğ1 — aparte de tu clave", - "yourId": "Tu identidad", - "idHelp": "Compártela para que te reconozcan", - "copy": "Copiar", - "copied": "Copiado", - "save": "Guardar", - "saved": "Perfil guardado", - "identities": "Tus identidades", - "identitiesHelp": "Ten identidades separadas — cada una con sus mensajes y contactos. Todas salen de tu única copia de seguridad, así que cambiar no añade nada que recordar.", - "identityLabel": "Identidad {n}", - "current": "En uso", - "newIdentity": "Nueva identidad", - "switchTitle": "¿Cambiar de identidad?", - "switchBody": "Los mensajes y contactos se guardan por separado para cada identidad. Puedes volver cuando quieras.", - "switchAction": "Cambiar" - }, - "chatList": { - "title": "Mensajes", - "empty": "Aún no hay conversaciones. Escribe a alguien desde el mercado." - }, - "chat": { - "title": "Chat", - "hint": "Escribe un mensaje…", - "send": "Enviar", - "empty": "Aún no hay mensajes — saluda", - "offline": "Configura el compartir para enviar mensajes", - "payG1": "Pagar en Ğ1", - "g1Copied": "Dirección Ğ1 copiada — pégala en tu cartera", - "today": "Hoy", - "yesterday": "Ayer", - "sendError": "No se pudo enviar — revisa tu conexión", - "noLinks": "No se permiten enlaces en los mensajes" - }, - "trust": { - "none": "Nadie los avala aún", - "count": "Avalada por {n}", - "vouch": "Conozco a esta persona", - "vouched": "Avalas a esta persona", - "circle": "En tu círculo" - }, - "yourPeople": { - "title": "Tu gente", - "help": "Personas que conoces y avalas, y personas que te avalan.", - "youVouchFor": "Tú avalas a", - "vouchesForYou": "Te avalan", - "youVouchForEmpty": "Aún no avalas a nadie. Cuando conozcas a alguien, abre vuestro chat y toca \"Conozco a esta persona\".", - "vouchesForYouEmpty": "Nadie te avala todavía", - "revoke": "Dejar de avalar", - "revokeConfirm": "¿Dejar de avalar a esta persona?", - "offline": "Sin conexión — inténtalo cuando estés en línea" - }, - "ratings": { - "rate": "Valorar a esta persona", - "edit": "Editar tu valoración", - "commentHint": "¿Qué tal fue? (opcional)", - "fromYourCircle": "{n} de gente que conoces", - "retract": "Quitar tu valoración", - "saved": "Valoración guardada" - }, - "notifications": { - "newMessageFrom": "Nuevo mensaje de {name}" - }, - "plantare": { - "title": "Plantares", - "help": "Un Plantare es el compromiso de reproducir una semilla y devolver una parte — así una variedad sigue viajando de mano en mano. No es una venta.", - "add": "Añadir compromiso", - "empty": "Aún no hay compromisos. Cuando compartas o recibas semilla con el compromiso de reproducirla y devolver algo, anótalo aquí.", - "iReturn": "La reproduzco y devuelvo yo", - "owedToMe": "Me la devuelven a mí", - "direction": "Quién reproduce y devuelve", - "counterparty": "¿Con quién?", - "counterpartyHint": "Una persona o un colectivo (opcional)", - "owed": "¿Qué se devuelve?", - "owedHint": "p. ej. un puñado la próxima temporada (opcional)", - "note": "Nota (opcional)", - "save": "Guardar", - "markReturned": "Marcar devuelto", - "markForgiven": "Dar por saldado", - "reopen": "Reabrir", - "delete": "Quitar", - "statusReturned": "Devuelto", - "statusForgiven": "Saldado", - "openSection": "Pendientes", - "settledSection": "Hechos", - "removeConfirm": "¿Quitar este compromiso?", - "returnBy": "Devolver antes del {date}", - "overdue": "vencido", - "dueByLabel": "Devolver antes de (opcional)", - "dueByHint": "Un recordatorio suave, nunca obligatorio", - "pickDate": "Elegir fecha", - "clearDate": "Quitar fecha", - "sectionTitle": "Compromisos", - "propose": "Proponer un Plantaré firmado", - "proposeHelp": "Los dos guardáis la misma promesa, firmada por ambos: prueba de que esta semilla cambió de manos y se cultivará y devolverá.", - "proposeTo": "Con {name}", - "sent": "Propuesta enviada — esperando su firma", - "seedLabel": "¿Qué semilla?", - "seedHint": "La variedad a la que se refiere la promesa", - "returnKindLabel": "¿Qué se devuelve?", - "returnSimilar": "Una cantidad similar de semilla", - "returnSimilarNote": "polinización abierta · no transgénica · cultivada en ecológico", - "returnWork": "Unas horas de trabajo", - "returnOther": "Otra cosa", - "workHoursLabel": "¿Cuántas horas?", - "proposalsSection": "Esperando tu respuesta", - "incomingFrom": "{name} te propone un Plantaré", - "accept": "Aceptar y firmar", - "declineAction": "Rechazar", - "declineReasonHint": "Motivo (opcional)", - "acceptedToast": "Firmado — ahora lo guardáis los dos", - "declinedToast": "Rechazado", - "badgeAwaiting": "Falta firma", - "badgeSigned": "Firmado por ambos", - "badgeDeclined": "Rechazado", - "offline": "Estás sin conexión — se enviará al reconectar" - }, - "handover": { - "title": "Di o recibí semillas", - "help": "Un regalo, un trueque o una venta: apúntalo, con promesa de devolver semilla o sin ella.", - "iGave": "Di semillas", - "iReceived": "Recibí semillas", - "whichLot": "¿De qué lote?", - "howMuch": "¿Cuánto?", - "allOfIt": "Todo", - "partOfIt": "Una parte", - "paymentChip": "Hubo dinero por medio", - "promiseGave": "Me devolverán semilla", - "promiseReceived": "Devolveré semilla" - }, - "history": { - "title": "Historia de este lote", - "tooltip": "Historia", - "sowToday": "Sembrado hoy", - "harvestToday": "Cosechado hoy", - "sownRecorded": "Siembra anotada", - "harvestRecorded": "Cosecha anotada", - "movementReceived": "Recibido", - "movementGiven": "Regalado", - "movementSown": "Sembrado", - "movementHarvested": "Cosechado", - "movementGerminationTest": "Prueba de germinación", - "movementSplit": "Repartido en lotes", - "movementDiscarded": "Descartado", - "created": "Entró en tu colección", - "from": "De {origin}", - "germinationResult": "Prueba de germinación — {percent}%", - "linkedEarlier": "Viene de un lote anterior", - "outcomeQuestion": "¿Qué tal se dio?", - "outcomeGood": "Bien", - "outcomeMixed": "Regular", - "outcomePoor": "Mal", - "outcomeNoteHint": "Una nota para tu yo del futuro (opcional)", - "outcomeSaved": "Anotado", - "ratedGood": "Se dio bien", - "ratedMixed": "Se dio regular", - "ratedPoor": "Se dio mal", - "outcomeTitle": "Nota de temporada", - "outcomeYear": "Temporada {year}", - "isolationHint": "Esta especie se cruza con sus vecinas — cultívala a unos {meters} m de otras para que se mantenga fiel" - }, - "sale": { - "title": "Ventas", - "help": "Registra semilla vendida o comprada — dinero, Ğ1 o cualquier moneda. Un modelo aparte del regalo y del Plantare. Nunca se cobra comisión por las semillas.", - "add": "Registrar venta", - "empty": "Aún no hay ventas. Anota aquí lo que vendes o compras.", - "iSold": "Vendí", - "iBought": "Compré", - "direction": "¿Vendes o compras?", - "counterparty": "¿Con quién?", - "counterpartyHint": "Una persona o un colectivo (opcional)", - "amount": "Importe", - "currency": "Moneda", - "currencyHint": "€, Ğ1, horas… (opcional)", - "hours": "horas", - "note": "Nota (opcional)", - "save": "Guardar", - "delete": "Quitar", - "removeConfirm": "¿Quitar esta venta?" - }, - "legal": { - "title": "Privacidad y normas", - "subtitle": "Tu privacidad, las normas del mercado y la legalidad de las semillas", - "privacyTitle": "Tu privacidad", - "privacyBody": "Tane funciona sin cuenta, y todo lo que registras se queda en tu dispositivo, cifrado. No hay publicidad, ni rastreadores, ni servidor de Tane.\n\nNo se comparte nada salvo que tú quieras: cuando publicas una oferta o tu perfil, o envías un mensaje, viaja por servidores comunitarios. Las ofertas solo llevan una zona aproximada — nunca tu dirección.\n\nLo que publicas es público, y pueden quedar copias incluso después de retirarlo — así que comparte con cuidado.", - "rulesTitle": "Las reglas del juego", - "rulesBody": "Tane es una herramienta, no una tienda: los intercambios se acuerdan directamente entre personas y nadie se lleva comisión. Eso también significa que tú respondes de lo que ofreces y envías.\n\nEn el mercado: sé honesto con tus semillas, ofrece solo lo que puedas compartir, trata bien a la gente y no hagas spam. Puedes bloquear a cualquiera y denunciar ofertas o personas que incumplan las normas — las denuncias se atienden en los servidores comunitarios.", - "seedsTitle": "Sobre compartir semillas y plantones", - "seedsBody": "Regalar e intercambiar semillas entre aficionados está ampliamente reconocido en la mayoría de países. Vender puede ser distinto: en muchos sitios, vender semilla de variedades no registradas oficialmente está restringido — consulta tu normativa antes de pedir un precio.\n\nEnviar semillas a otro país también suele estar restringido, y las variedades protegidas comercialmente no pueden propagarse sin permiso. Ante la duda, mejor local y mejor regalo.\n\nLo mismo vale para plantones y plantas jóvenes, pero la planta viva puede tener reglas de transporte y fitosanitarias más estrictas que la semilla: moverla entre regiones o países puede requerir controles adicionales.", - "readFull": "Leer los documentos completos en la web" - }, - "marketGate": { - "title": "Antes de entrar al mercado", - "intro": "El mercado es un espacio compartido entre vecinas y vecinos. Al continuar, aceptas unas pocas normas sencillas:", - "ruleHonest": "Sé honesto con las semillas que ofreces", - "ruleLegal": "Comparte solo lo que puedas compartir donde vives", - "ruleRespect": "Trata bien a la gente — sin spam ni abusos", - "publicNote": "Lo que publiques aquí es público, y pueden quedar copias aunque lo retires después.", - "viewLegal": "Privacidad y normas", - "accept": "Acepto", - "decline": "Ahora no" - }, - "report": { - "offer": "Denunciar esta oferta", - "person": "Denunciar a esta persona", - "title": "Denunciar", - "prompt": "¿Qué ocurre?", - "reasonSpam": "Spam o un engaño", - "reasonAbuse": "Abusivo o irrespetuoso", - "reasonIllegal": "Semillas que no deberían ofrecerse", - "reasonOther": "Otra cosa", - "detailsHint": "Añade detalles (opcional)", - "send": "Enviar denuncia", - "sentHidden": "Denuncia enviada — ya no verás esto", - "failed": "No se pudo enviar la denuncia — revisa tu conexión", - "alsoBlock": "Bloquear también a esta persona" - }, - "block": { - "action": "Bloquear a esta persona", - "confirmTitle": "¿Bloquear a esta persona?", - "confirmBody": "Dejarás de ver sus ofertas y mensajes. Puedes desbloquearla más adelante en Personas bloqueadas, en la configuración de compartir.", - "confirm": "Bloquear", - "blockedToast": "Persona bloqueada — sus ofertas y mensajes quedan ocultos", - "manageTitle": "Personas bloqueadas", - "manageEmpty": "No has bloqueado a nadie", - "unblock": "Desbloquear" - } } diff --git a/apps/app_seeds/lib/i18n/fr.i18n.json b/apps/app_seeds/lib/i18n/fr.i18n.json index a90758a..b56e42c 100644 --- a/apps/app_seeds/lib/i18n/fr.i18n.json +++ b/apps/app_seeds/lib/i18n/fr.i18n.json @@ -95,6 +95,7 @@ "langEs": "Español", "langEn": "English", "langPt": "Português", + "langPtBr": "Português (Brasil)", "langAst": "Asturianu", "langFr": "Français", "langDe": "Deutsch", @@ -147,9 +148,9 @@ "license": "Licence", "licenseValue": "AGPL-3.0", "website": "Site web", - "sourceCode": "Code source", - "translate": "Aider à traduire", - "translateSubtitle": "Aidez à traduire Tane dans votre langue", + "sourceCode": "Code source", + "translate": "Aider à traduire", + "translateSubtitle": "Aidez à traduire Tane dans votre langue", "openSourceLicenses": "Licences open source", "openSourceLicensesSubtitle": "Bibliothèques tiers et leurs licences", "copyright": "© {years} Association Comunes, sous AGPLv3" diff --git a/apps/app_seeds/lib/i18n/ja.i18n.json b/apps/app_seeds/lib/i18n/ja.i18n.json index b84bc5f..6f07653 100644 --- a/apps/app_seeds/lib/i18n/ja.i18n.json +++ b/apps/app_seeds/lib/i18n/ja.i18n.json @@ -1,46 +1,47 @@ { - "app": { - "title": "Tane" - }, - "common": { - "save": "保存", - "cancel": "キャンセル", - "delete": "削除", - "edit": "編集", - "type": "種類", - "comingSoon": "近日公開", - "offline": "オフラインです — 共有を一時停止しています" - }, - "menu": { - "tagline": "あなたの種子バンク", - "inventory": "在庫", - "market": "マーケット", - "profile": "プロフィール", - "chat": "チャット", - "wishlist": "お気に入り", - "following": "フォロー中", - "calendar": "カレンダー", - "settings": "設定" - }, - "settings": { - "language": "言語", - "systemLanguage": "システムの言語", - "langEs": "Español", - "langEn": "English", - "langPt": "Português", - "langAst": "Asturianu", - "langFr": "Français", - "langDe": "Deutsch", - "langJa": "日本語", - "about": "このアプリについて", - "aboutText": "在来種のためのローカルファースト・暗号化在庫管理。AGPL-3.0。", - "aboutOpen": "Tane について" - }, - "home": { - "tagline": "地域の種を分かち合い、育てよう", - "openMarket": "マーケット", - "openMarketSubtitle": "近くの種を見つけて分かち合う", - "yourInventory": "あなたの在庫", - "yourInventorySubtitle": "種を管理する" - } + "app": { + "title": "Tane" + }, + "common": { + "save": "保存", + "cancel": "キャンセル", + "delete": "削除", + "edit": "編集", + "type": "種類", + "comingSoon": "近日公開", + "offline": "オフラインです — 共有を一時停止しています" + }, + "menu": { + "tagline": "あなたの種子バンク", + "inventory": "在庫", + "market": "マーケット", + "profile": "プロフィール", + "chat": "チャット", + "wishlist": "お気に入り", + "following": "フォロー中", + "calendar": "カレンダー", + "settings": "設定" + }, + "settings": { + "language": "言語", + "systemLanguage": "システムの言語", + "langEs": "Español", + "langEn": "English", + "langPt": "Português", + "langPtBr": "Português (Brasil)", + "langAst": "Asturianu", + "langFr": "Français", + "langDe": "Deutsch", + "langJa": "日本語", + "about": "このアプリについて", + "aboutText": "在来種のためのローカルファースト・暗号化在庫管理。AGPL-3.0。", + "aboutOpen": "Tane について" + }, + "home": { + "tagline": "地域の種を分かち合い、育てよう", + "openMarket": "マーケット", + "openMarketSubtitle": "近くの種を見つけて分かち合う", + "yourInventory": "あなたの在庫", + "yourInventorySubtitle": "種を管理する" + } } diff --git a/apps/app_seeds/lib/i18n/pt.i18n.json b/apps/app_seeds/lib/i18n/pt.i18n.json index 5d248ee..2e78828 100644 --- a/apps/app_seeds/lib/i18n/pt.i18n.json +++ b/apps/app_seeds/lib/i18n/pt.i18n.json @@ -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.", diff --git a/apps/app_seeds/lib/i18n/pt_BR.i18n.json b/apps/app_seeds/lib/i18n/pt_BR.i18n.json new file mode 100644 index 0000000..4e9c920 --- /dev/null +++ b/apps/app_seeds/lib/i18n/pt_BR.i18n.json @@ -0,0 +1,810 @@ +{ + "avatar": { + "title": "A sua foto ou avatar", + "fromPhoto": "Tirar ou escolher uma foto", + "illustration": "Ou escolhe um desenho", + "remove": "Remover" + }, + "favorites": { + "title": "Favoritos", + "empty": "Ainda não tem favoritos. Salve ofertas que goste do mercado.", + "save": "Salvar nos favoritos", + "remove": "Remover dos favoritos", + "unavailable": "Já não está disponível" + }, + "savedSearches": { + "title": "Pesquisas salvas", + "empty": "Ainda não há pesquisas salvas. Salve uma pesquisa no mercado e te avisamos quando aparecer algo parecido na sua zona.", + "save": "Salvar esta pesquisa", + "nameLabel": "Dá um nome a esta pesquisa", + "namePlaceholder": "ex.: Tomates perto de mim", + "saved": "Pesquisa salva — vamos te avisar sobre novas correspondências perto de você", + "openTooltip": "Pesquisas salvas", + "delete": "Eliminar", + "deleteConfirm": "Eliminar esta pesquisa salva?", + "newMatchesBadge": "{n} novas", + "alert": "Sementes perto de você: {label}" + }, + "seedSaving": { + "title": "Guardar a sua semente", + "subtitle": "O que é preciso para manter a variedade fiel", + "lifeCycle": "Ciclo", + "cycleAnnual": "Anual", + "cycleBiennial": "Bienal — dá semente no 2.º ano", + "cyclePerennial": "Perene", + "pollination": "Polinização", + "pollSelf": "Autopoliniza-se", + "pollCross": "Cruza-se com outras", + "pollMixed": "Autopoliniza-se, mas às vezes cruza", + "byInsect": "por insetos", + "byWind": "pelo vento", + "isolation": "Separe-a", + "isolationRange": "{min}–{max} m de outras variedades", + "isolationSingle": "{min} m de outras variedades", + "plants": "Guarde de várias plantas", + "plantsValue": "De pelo menos {n} plantas", + "processing": "Como limpá-la", + "procDry": "Semente seca (debulhar)", + "procWet": "Semente húmida (fermentar e lavar)", + "difficulty": "Dificuldade", + "diffEasy": "Fácil", + "diffMedium": "Média", + "diffHard": "Difícil", + "advisory": "Orientativo — adapte-o ao seu clima e variedade.", + "sourcePrefix": "Fonte" + }, + "calendar": { + "title": "Este mês", + "filterChip": "Este mês", + "selfNote": "O que você anotou nas suas variedades.", + "nothing": "Nada anotado para {month}." + }, + "app": { + "title": "Tane" + }, + "bootstrap": { + "failed": "O Tane não conseguiu iniciar", + "retry": "Tentar de novo" + }, + "common": { + "save": "Salvar", + "cancel": "Cancelar", + "delete": "Eliminar", + "edit": "Editar", + "type": "Tipo", + "comingSoon": "Em breve", + "offline": "Sem ligação — a compartilha está em pausa" + }, + "home": { + "tagline": "Compartilha e cultiva sementes locais", + "openMarket": "Mercado", + "openMarketSubtitle": "Descobre e compartilha sementes por perto", + "yourInventory": "O seu inventário", + "yourInventorySubtitle": "Gere as suas sementes" + }, + "photo": { + "camera": "Tirar uma foto", + "gallery": "Escolher da galeria", + "setAsCover": "Usar como capa", + "isCover": "Foto de capa", + "deleteConfirm": "Eliminar esta foto?" + }, + "menu": { + "tagline": "o seu banco de sementes", + "inventory": "Inventário", + "market": "Mercado", + "profile": "O seu perfil", + "chat": "Conversas", + "wishlist": "Favoritos", + "following": "A seguir", + "plantares": "Plantares", + "sales": "Vendas", + "calendar": "Calendário", + "settings": "Definições" + }, + "settings": { + "language": "Idioma", + "systemLanguage": "Idioma do sistema", + "langEs": "Español", + "langEn": "English", + "langPt": "Português", + "langPtBr": "Português (Brasil)", + "langAst": "Asturianu", + "langFr": "Français", + "langDe": "Deutsch", + "langJa": "日本語", + "about": "Acerca de", + "aboutText": "Inventário local e cifrado para sementes tradicionais. AGPL-3.0.", + "aboutOpen": "Acerca do Tane" + }, + "backup": { + "title": "Cópia de segurança", + "autoBackupTitle": "Cópias automáticas", + "autoBackupLast": "Última cópia em {date} · a cada {days} dias", + "autoBackupNone": "Uma cópia é salva automaticamente a cada {days} dias", + "exportJson": "Salvar uma cópia de segurança", + "exportJsonSubtitle": "Uma cópia completa para guardar em segurança, restaurar depois ou levar para outro aparelho", + "importJson": "Restaurar uma cópia", + "importJsonSubtitle": "Recupera uma cópia salva — nada fica duplicado", + "exportCsv": "Exportar para uma folha de cálculo", + "exportCsvSubtitle": "Uma lista simples para Excel ou LibreOffice — sem fotos", + "importCsv": "Importar uma lista", + "importCsvSubtitle": "Acrescenta entradas a partir de uma folha de cálculo", + "importConfirmTitle": "Restaurar uma cópia?", + "importConfirmBody": "As entradas fundem-se com o seu inventário; quando a mesma entrada existe dos dois lados, vence a versão mais recente. Nada fica duplicado.", + "importCsvConfirmTitle": "Importar uma lista?", + "importCsvConfirmBody": "Cada linha é acrescentada como uma entrada nova. Não funde nem substitui, por isso importar o mesmo arquivo duas vezes acrescenta-o duas vezes.", + "importAction": "Importar", + "exportSaved": "Cópia salva", + "cancelled": "Cancelado", + "importDone": "Importado: {added} novas, {updated} atualizadas", + "importCsvDone": "{count} entradas acrescentadas", + "importFailed": "Este arquivo não pôde ser lido como uma cópia do Tane", + "failed": "Algo correu mal", + "recoveryTitle": "O seu código de recuperação", + "recoverySubtitle": "Imprime-o e guarda-o bem: abre as suas cópias noutro aparelho", + "recoveryIntro": "Este código abre as suas cópias salvas e recupera o seu banco em qualquer aparelho. Guarde duas cópias em papel em lugares seguros, como a sua melhor semente. Quem o tiver pode ler as suas cópias, por isso não o compartilhe com ninguém.", + "recoveryCopy": "Copiar", + "recoverySave": "Salvar a folha", + "recoverySheetTitle": "Tane — a sua folha de recuperação", + "recoveryPromptTitle": "Escreve o seu código de recuperação", + "recoveryPromptBody": "Esta cópia foi salva com outro código. Escreve o código da sua folha de recuperação para a abrir.", + "recoveryWrongCode": "Esse código não abre esta cópia" + }, + "about": { + "title": "Acerca de", + "kanji": "種", + "tagline": "Uma aplicação local e descentralizada para gerir e compartilhar sementes e plântulas tradicionais.", + "intro": "O Tane (種, \"semente\" em japonês) ajuda pessoas e coletivos a manter um inventário amigável do seu banco de sementes, decidir o que oferecem e compartilhá-lo localmente — sem um intermediário central que possa controlar, censurar ou ser multado por isso. O seu nome vem de tanemaki (種まき), \"semear / espalhar sementes\". O objetivo é prático e político ao mesmo tempo: apoiar as variedades tradicionais e fazer frente ao monopólio das sementes.", + "heritage": "O nome honra as antigas tradições japonesas de ajuda mútua à volta do arroz — yui (trabalho comunitário compartilhado) e tanomoshi (fundos de reciprocidade) — que inspiraram o Plantare em papel, a \"moeda comunitária de troca de sementes\" (BAH-Semillero, 2009, CC-BY-SA). O Tane é o Plantare digital.", + "version": "Versão", + "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 seu idioma", + "openSourceLicenses": "Licenças de código aberto", + "openSourceLicensesSubtitle": "Bibliotecas de terceiros e as suas licenças", + "copyright": "© {years} Associação Comunes, sob AGPLv3" + }, + "intro": { + "skip": "Saltar", + "next": "Seguinte", + "start": "Começar", + "menuEntry": "Como funciona o Tane", + "slides": { + "welcome": { + "title": "A semente que te trouxe até aqui", + "body": "Cada semente tradicional é uma carta escrita por milhares de gerações, passada de mão em mão. Somos o que somos graças a essa compartilha." + }, + "inventory": { + "title": "O seu banco de sementes, no bolso", + "body": "Anote o que tem, de que ano, quanto e de onde veio — com o nome que você usa. Uma foto e um nome chegam para começar." + }, + "privacy": { + "title": "Seu, e só seu", + "body": "Sem conta, sem internet, sem rastreadores. Os seus dados vivem cifrados no seu aparelho, e só o que você escolher é compartilhado." + }, + "share": { + "title": "Compartilhar, como sempre se fez", + "body": "Ofereça o que sobra — dar, trocar ou vender — e deixe que alguém perto de você o encontre. Só se mostra uma distância aproximada, nunca a sua morada; o acordo fecha-se em pessoa." + }, + "plantare": { + "title": "Semear é multiplicar", + "body": "Com um Plantare, quem recebe semente promete devolver uma parte mais tarde. E como devolvê-la implica cultivá-la, cada empréstimo multiplica o comum." + } + } + }, + "inventory": { + "title": "Inventário", + "searchHint": "Procurar sementes", + "empty": "Ainda não há sementes. Toca em + para adicionar a primeira.", + "noMatches": "Nenhuma semente corresponde aos seus filtros.", + "clearFilters": "Limpar filtros", + "uncategorized": "Sem categoria", + "needsReproductionFilter": "Para reproduzir", + "loadError": "Não foi possível abrir o seu banco de sementes. Talvez estivesse ocupado — tenta de novo.", + "retry": "Tentar de novo" + }, + "draft": { + "capture": "Capturar fotos", + "captured": "{n} capturadas para catalogar", + "triageTitle": "Para catalogar", + "triageCount": "{n} para catalogar", + "untitled": "Sem nome", + "nameField": "Dá um nome a esta semente", + "nameHint": "O que é?", + "suggestFromPhoto": "Sugerir nome a partir da foto", + "discard": "Descartar" + }, + "quickAdd": { + "title": "Adicionar uma semente", + "labelField": "Nome", + "labelRequired": "Dá-lhe um nome", + "addPhoto": "Adicionar foto", + "quantity": "Quanto?", + "more": "Adicionar mais…", + "save": "Salvar", + "saveAndAddAnother": "Salvar e adicionar outra", + "addedCount": "{n} adicionadas", + "cancel": "Cancelar" + }, + "detail": { + "notFound": "Esta semente já não está aqui.", + "lots": "Lotes", + "noLots": "Ainda não há lotes.", + "names": "Também conhecida como", + "addName": "Adicionar nome", + "links": "Ligações", + "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", + "deleteConfirm": "Eliminar esta semente?", + "year": "Ano {year}", + "noYear": "Ano desconhecido" + }, + "germination": { + "title": "Germinação", + "add": "Adicionar teste", + "sampleSize": "Tamanho da amostra", + "germinated": "Germinadas", + "none": "Ainda não há testes de germinação.", + "result": "{percent}%" + }, + "viability": { + "expiringSoon": "Usa ou reproduz nesta época", + "expiringSoonYears": "Usa ou reproduz nesta época · dura ~{years} anos", + "expired": "Passou a viabilidade típica — reproduzir", + "expiredYears": "Passou a viabilidade típica (~{years} anos) — reproduzir" + }, + "editVariety": { + "title": "Editar semente", + "name": "Nome", + "category": "Categoria", + "notes": "Notas", + "species": "Espécie (do catálogo)", + "speciesHint": "Procura uma espécie…", + "speciesSuggested": "Sugerida pelo nome", + "organic": "Biológica", + "organicHint": "Cultivada em modo biológico" + }, + "addLot": { + "title": "Adicionar lote", + "year": "Data de colheita", + "quantity": "Quanto?", + "amount": "Quantidade" + }, + "harvest": { + "pickTitle": "Escolhe mês / ano", + "anyMonth": "Qualquer mês", + "noDate": "Definir data de colheita", + "monthNames": [ + "janeiro", + "fevereiro", + "março", + "abril", + "maio", + "junho", + "julho", + "agosto", + "setembro", + "outubro", + "novembro", + "dezembro" + ] + }, + "lotType": { + "seed": "Sementes", + "plant": "Planta", + "seedling": "Plântula", + "tree": "Árvore / arbusto", + "bulb": "Bolbo / tubérculo", + "cutting": "Estaca" + }, + "presentation": { + "title": "Apresentação", + "none": "Sem indicar", + "pot": "Vaso", + "tray": "Tabuleiro", + "plug": "Alvéolo", + "bareRoot": "Raiz nua", + "rootBall": "Torrão" + }, + "provenance": { + "section": "De onde vem", + "seedsFrom": "Sementes de", + "seedsFromHint": "Quem as cultivou ou ofereceu", + "place": "Lugar", + "placeHint": "De onde vêm (com a região)", + "addSeedsFrom": "Sementes de", + "addPlace": "Lugar" + }, + "abundance": { + "add": "Quanta tenho", + "title": "Quanta tenho", + "none": "Sem indicar", + "plentyToShare": "De sobra para compartilhar", + "enoughToShare": "Bastante, para compartilhar com moderação", + "enoughForMe": "Suficiente para mim", + "runningLow": "Resta pouca" + }, + "share": { + "add": "Compartilhas esta?", + "title": "Compartilhas esta?", + "nudge": "Tem de sobra: podia compartilhar um pouco.", + "price": "Preço", + "priceHint": "Deixe vazio para combinar depois", + "private": "Só para mim", + "gift": "Para dar", + "exchange": "Para trocar", + "sell": "À venda", + "filterChip": "Compartilho", + "printCatalog": "Imprimir o que compartilho", + "catalogTitle": "O que compartilho", + "catalogSaved": "Catálogo salvo", + "cancelled": "Cancelado" + }, + "printLabels": { + "action": "Imprimir etiquetas", + "title": "Imprimir etiquetas", + "selectHint": "Escolhe as sementes para imprimir as etiquetas", + "selectAll": "Selecionar tudo", + "selected": "{n} selecionadas", + "none": "Seleciona sementes primeiro", + "format": "Tamanho da etiqueta", + "formatStickers": "Autocolantes pequenos", + "formatStickersHint": "Muitas etiquetas pequenas por folha — para colar em envelopes", + "formatCards": "Cartões grandes", + "formatCardsHint": "Menos etiquetas, maiores — para frascos e caixas", + "count": "{n} etiquetas", + "save": "Salvar etiquetas", + "saved": "Etiquetas salvas", + "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 sua coleção", + "addBody": "Adicionar “{label}” às suas sementes?", + "add": "Adicionar", + "added": "Adicionado à sua coleção" + }, + "cropCalendar": { + "add": "Calendário de cultivo", + "title": "Calendário de cultivo", + "sow": "Sementeira", + "transplant": "Transplante", + "flowering": "Floração", + "fruiting": "Frutificação", + "seedHarvest": "Colheita de semente", + "editorHint": "Anote os meses típicos desta variedade na sua zona — são suas notas.", + "unset": "—" + }, + "needsReproduction": { + "label": "Reproduzir nesta época", + "hint": "Cultiva-a antes que a semente acabe", + "badge": "Por reproduzir" + }, + "preservation": { + "add": "Como está guardada", + "title": "Como está guardada", + "none": "Sem indicar", + "jarWithDesiccant": "Frasco com agente secante", + "glassJar": "Frasco de vidro", + "paperEnvelope": "Envelope de papel", + "paperBag": "Saco de papel", + "plasticBag": "Saco de plástico" + }, + "conditionCheck": { + "advanced": "Armazenamento e detalhes de banco de sementes", + "title": "Verificações de armazenamento", + "add": "Adicionar verificação", + "containers": "Frascos / recipientes", + "desiccant": "Agente secante", + "none": "Ainda não há verificações de armazenamento.", + "summary": "{count} frasco(s) · {state}" + }, + "desiccant": { + "none": "Nenhum", + "add": "Adicionar", + "replace": "Substituir", + "dry": "Azul — seco", + "fresh": "Acabado de renovar" + }, + "unit": { + "aFew": "algumas", + "some": "bastantes", + "plenty": "muitas", + "pinch": "uma pitada", + "handful": { + "singular": "mão-cheia", + "plural": "mãos-cheias" + }, + "teaspoon": { + "singular": "colher de chá", + "plural": "colheres de chá" + }, + "spoon": { + "singular": "colher", + "plural": "colheres" + }, + "cup": { + "singular": "chávena", + "plural": "chávenas" + }, + "jar": { + "singular": "frasco", + "plural": "frascos" + }, + "sack": { + "singular": "saco", + "plural": "sacos" + }, + "packet": { + "singular": "pacote", + "plural": "pacotes" + }, + "cob": { + "singular": "maçaroca", + "plural": "maçarocas" + }, + "pod": { + "singular": "vagem", + "plural": "vagens" + }, + "ear": { + "singular": "espiga", + "plural": "espigas" + }, + "head": { + "singular": "cabeça", + "plural": "cabeças" + }, + "fruit": { + "singular": "fruto", + "plural": "frutos" + }, + "bulb": { + "singular": "bolbo", + "plural": "bolbos" + }, + "tuber": { + "singular": "tubérculo", + "plural": "tubérculos" + }, + "seedHead": { + "singular": "capítulo", + "plural": "capítulos" + }, + "bunch": { + "singular": "molho", + "plural": "molhos" + }, + "plant": { + "singular": "planta", + "plural": "plantas" + }, + "pot": { + "singular": "vaso", + "plural": "vasos" + }, + "tray": { + "singular": "tabuleiro", + "plural": "tabuleiros" + }, + "seedling": { + "singular": "plântula", + "plural": "plântulas" + }, + "tree": { + "singular": "árvore", + "plural": "árvores" + }, + "cutting": { + "singular": "estaca", + "plural": "estacas" + }, + "grams": { + "singular": "grama", + "plural": "gramas" + }, + "count": { + "singular": "semente", + "plural": "sementes" + } + }, + "market": { + "title": "Sementes perto de você", + "subtitle": "O que outras pessoas compartilham por perto", + "notSetUp": "Ainda não configurou a compartilha", + "notSetUpBody": "Ativa a compartilha para ver e dar sementes a pessoas por perto. Mantém-se aproximado — a sua zona, nunca a sua morada exata.", + "setUp": "Configurar a compartilha", + "cantReach": "Não é possível ligar aos servidores neste momento", + "cantReachBody": "Tenta de novo, ou verifica os servidores na configuração avançada.", + "retry": "Tentar de novo", + "setArea": "Indica a sua zona", + "setAreaBody": "Diz ao mercado a sua zona aproximada para ver sementes por perto.", + "searching": "A procurar pela sua zona…", + "empty": "Ainda não há sementes compartilhadas perto de você", + "searchHint": "Procurar nestas sementes", + "noMatches": "Nenhuma semente compartilhada corresponde à procura", + "near": "Perto de você", + "contact": "Mensagem", + "mine": "Você", + "configTitle": "Configuração de compartilha", + "setupIntro": "Compartilhar com pessoas por perto é opcional. Basta indicar a sua zona aproximada — já está conectado a servidores comunitários compartilhados para que outras pessoas encontrem o que você oferece, sem nenhuma empresa no meio.", + "areaLabel": "A sua zona", + "areaHelp": "Mantém-se aproximado de propósito — a sua zona, nunca um ponto exato.", + "areaSet": "A sua zona está definida — aproximada, nunca o seu ponto exato", + "areaNotSet": "Zona por definir — usa a sua localização, ou adiciona um código em Avançado", + "advanced": "Avançado", + "areaCodeLabel": "Código de zona", + "areaCodeHint": "Um código curto como sp3e9 — não um nome de lugar", + "serversLabel": "Servidores da comunidade", + "serversHelp": "Escolha que servidores usar. Deixe assim se não souber.", + "serversAdvanced": "Adicionar outro servidor", + "serverAddress": "Endereço do servidor", + "serverInvalid": "Introduz um endereço válido (wss://…)", + "save": "Salvar", + "saved": "Salvo", + "wanted": "Procuro", + "shareMine": "Compartilhar as minhas sementes", + "sharedCount": "Compartilhadas {n} sementes", + "nothingToShare": "Marca primeiro algumas sementes para dar, trocar ou vender", + "useLocation": "Usar a minha localização aproximada", + "locationFailed": "Não foi possível obter a sua localização — verifica se a localização está ativa e a permissão concedida", + "queued": "Salvo — vamos compartilhá-las quando você tiver conexão", + "shareFailed": "Não foi possível contactar os servidores — as suas sementes não foram compartilhadas. Tenta de novo daqui a pouco.", + "rangeLabel": "Até onde procurar", + "rangeNear": "Muito perto", + "rangeArea": "Pela minha zona", + "rangeRegion": "A minha região", + "sharedBy": "Compartilhado por", + "noProfile": "Esta pessoa ainda não compartilhou o seu perfil", + "copyId": "Copiar código", + "idCopied": "Código copiado", + "photo": "Foto" + }, + "profile": { + "title": "O seu perfil", + "name": "Nome", + "nameHint": "Como os outros te veem", + "about": "Sobre você", + "aboutHint": "Uma linha — o que cultivas, onde", + "g1": "Endereço Ğ1 (opcional)", + "g1Hint": "Para que te paguem em Ğ1 — separado da sua chave", + "yourId": "A sua identidade", + "idHelp": "Compartilha-a para que te reconheçam", + "copy": "Copiar", + "copied": "Copiado", + "save": "Salvar", + "saved": "Perfil salvo", + "identities": "As suas identidades", + "identitiesHelp": "Mantém identidades separadas — cada uma com as suas mensagens e contactos. Todas vêm da sua única cópia de segurança, por isso mudar não acrescenta nada para lembrar.", + "identityLabel": "Identidade {n}", + "current": "Em uso", + "newIdentity": "Nova identidade", + "switchTitle": "Mudar de identidade?", + "switchBody": "As mensagens e contatos são guardados separadamente para cada identidade. Pode voltar quando quiser.", + "switchAction": "Mudar" + }, + "chatList": { + "title": "Mensagens", + "empty": "Ainda não há conversas. Escreve a alguém a partir do mercado." + }, + "chat": { + "title": "Conversa", + "hint": "Escreve uma mensagem…", + "send": "Enviar", + "empty": "Ainda não há mensagens — diz olá", + "offline": "Configura a compartilha para enviar mensagens", + "payG1": "Pagar em Ğ1", + "g1Copied": "Endereço Ğ1 copiado — cola-o na sua carteira", + "today": "Hoje", + "yesterday": "Ontem", + "sendError": "Não foi possível enviar — verifica a sua ligação", + "noLinks": "Não são permitidos links nas mensagens" + }, + "trust": { + "none": "Ainda ninguém os avaliza", + "count": "Avalizada por {n}", + "vouch": "Conheço esta pessoa", + "vouched": "Avalizas esta pessoa", + "circle": "No seu círculo" + }, + "yourPeople": { + "title": "A sua gente", + "help": "Pessoas que conheces e avalizas, e pessoas que te avalizam.", + "youVouchFor": "Você avaliza", + "vouchesForYou": "Avalizam-te", + "youVouchForEmpty": "Ainda não avaliza ninguém. Quando conhecer alguém, abra a conversa com essa pessoa e toque em \"Conheço esta pessoa\".", + "vouchesForYouEmpty": "Ainda ninguém te avaliza", + "revoke": "Deixar de avalizar", + "revokeConfirm": "Deixar de avalizar esta pessoa?", + "offline": "Sem conexão — tente novamente quando estiver online" + }, + "ratings": { + "rate": "Avaliar esta pessoa", + "edit": "Editar a sua avaliação", + "commentHint": "Como correu? (opcional)", + "fromYourCircle": "{n} de pessoas que conheces", + "retract": "Remover a sua avaliação", + "saved": "Avaliação salva" + }, + "notifications": { + "newMessageFrom": "Nova mensagem de {name}" + }, + "plantare": { + "title": "Plantares", + "help": "Um Plantare é o compromisso de reproduzir uma semente e devolver uma parte — assim uma variedade continua a viajar de mão em mão. Não é uma venda.", + "add": "Adicionar compromisso", + "empty": "Ainda não há compromissos. Quando compartilhar ou receber semente com o compromisso de reproduzi-la e devolver algo, anote aqui.", + "iReturn": "Reproduzo e devolvo eu", + "owedToMe": "Devolvem-me a mim", + "direction": "Quem reproduz e devolve", + "counterparty": "Com quem?", + "counterpartyHint": "Uma pessoa ou um coletivo (opcional)", + "owed": "O que é devolvido?", + "owedHint": "p. ex. um punhado na próxima temporada (opcional)", + "note": "Nota (opcional)", + "save": "Salvar", + "markReturned": "Marcar devolvido", + "markForgiven": "Dar por saldado", + "reopen": "Reabrir", + "delete": "Remover", + "statusReturned": "Devolvido", + "statusForgiven": "Saldado", + "openSection": "Pendentes", + "settledSection": "Feitos", + "removeConfirm": "Remover este compromisso?", + "returnBy": "Devolver até {date}", + "overdue": "vencido", + "dueByLabel": "Devolver até (opcional)", + "dueByHint": "Um lembrete gentil, nunca imposto", + "pickDate": "Escolher data", + "clearDate": "Limpar data", + "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 sua 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": "Você está offline — será enviado quando reconectar" + }, + "handover": { + "title": "Dei ou recebi sementes", + "help": "Uma oferta, uma troca ou uma venda: anota-o, com promessa de devolver semente ou sem ela.", + "iGave": "Dei sementes", + "iReceived": "Recebi sementes", + "whichLot": "De que lote?", + "howMuch": "Quanto?", + "allOfIt": "Tudo", + "partOfIt": "Uma parte", + "paymentChip": "Houve dinheiro pelo meio", + "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 à sua 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 seu 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.", + "add": "Registar venda", + "empty": "Ainda não há vendas. Anota aqui o que vendes ou compras.", + "iSold": "Vendi", + "iBought": "Comprei", + "direction": "Vendes ou compras?", + "counterparty": "Com quem?", + "counterpartyHint": "Uma pessoa ou um coletivo (opcional)", + "amount": "Montante", + "currency": "Moeda", + "currencyHint": "€, Ğ1, horas… (opcional)", + "hours": "horas", + "note": "Nota (opcional)", + "save": "Salvar", + "delete": "Remover", + "removeConfirm": "Remover esta venda?" + }, + "legal": { + "title": "Privacidade e regras", + "subtitle": "A sua privacidade, as regras do mercado e a legalidade das sementes", + "privacyTitle": "A sua privacidade", + "privacyBody": "O Tane funciona sem conta, e tudo o que você registra fica no seu dispositivo, cifrado. Não há publicidade, nem rastreadores, nem servidor do Tane.\n\nNada é compartilhado a não ser que você queira: quando publica uma oferta ou o seu perfil, ou envia uma mensagem, viaja por servidores comunitários. As ofertas levam apenas uma zona aproximada — nunca a sua morada.\n\nO que publica é público, e podem ficar cópias mesmo depois de você retirar — por isso compartilhe com cuidado.", + "rulesTitle": "As regras do jogo", + "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 é responsável pelo que oferece e envia.\n\nNo mercado: seja honesto com suas sementes, ofereça apenas o que pode compartilhar, trate bem as pessoas e não faça spam. Pode bloquear qualquer pessoa e denunciar ofertas ou pessoas que quebrem as regras — as denúncias são tratadas nos servidores comunitários.", + "seedsTitle": "Sobre compartilhar sementes e mudas", + "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.", + "readFull": "Ler os documentos completos na web" + }, + "marketGate": { + "title": "Antes de entrar no mercado", + "intro": "O mercado é um espaço compartilhado entre vizinhas e vizinhos. Ao continuar, aceitas umas poucas regras simples:", + "ruleHonest": "Seja honesto com as sementes que oferece", + "ruleLegal": "Compartilhe apenas o que pode compartilhar onde vive", + "ruleRespect": "Trata bem as pessoas — sem spam nem abusos", + "publicNote": "O que você publicar aqui é público, e podem ficar cópias mesmo que você retire depois.", + "viewLegal": "Privacidade e regras", + "accept": "Aceito", + "decline": "Agora não" + }, + "report": { + "offer": "Denunciar esta oferta", + "person": "Denunciar esta pessoa", + "title": "Denunciar", + "prompt": "O que se passa?", + "reasonSpam": "Spam ou uma burla", + "reasonAbuse": "Abusivo ou desrespeitoso", + "reasonIllegal": "Sementes que não deviam ser oferecidas", + "reasonOther": "Outra coisa", + "detailsHint": "Acrescenta detalhes (opcional)", + "send": "Enviar denúncia", + "sentHidden": "Denúncia enviada — já não voltas a ver isto", + "failed": "Não foi possível enviar a denúncia — verifica a sua ligação", + "alsoBlock": "Bloquear também esta pessoa" + }, + "block": { + "action": "Bloquear esta pessoa", + "confirmTitle": "Bloquear esta pessoa?", + "confirmBody": "Deixa de ver as suas ofertas e mensagens. Pode desbloqueá-la mais tarde em Pessoas bloqueadas, na configuração de compartilhamento.", + "confirm": "Bloquear", + "blockedToast": "Pessoa bloqueada — as suas ofertas e mensagens ficam ocultas", + "manageTitle": "Pessoas bloqueadas", + "manageEmpty": "Você não bloqueou ninguém", + "unblock": "Desbloquear" + } +} diff --git a/apps/app_seeds/lib/i18n/strings.g.dart b/apps/app_seeds/lib/i18n/strings.g.dart index 23374a5..6acb839 100644 --- a/apps/app_seeds/lib/i18n/strings.g.dart +++ b/apps/app_seeds/lib/i18n/strings.g.dart @@ -3,10 +3,10 @@ /// Source: lib/i18n /// To regenerate, run: `dart run slang` /// -/// Locales: 7 -/// Strings: 3566 (509 per locale) +/// Locales: 8 +/// Strings: 4287 (535 per locale) /// -/// Built on 2026-07-18 at 10:28 UTC +/// Built on 2026-07-20 at 21:06 UTC // coverage:ignore-file // ignore_for_file: type=lint, unused_import @@ -24,6 +24,7 @@ import 'strings_es.g.dart' as l_es; import 'strings_fr.g.dart' as l_fr; import 'strings_ja.g.dart' as l_ja; import 'strings_pt.g.dart' as l_pt; +import 'strings_pt_BR.g.dart' as l_pt_BR; part 'strings_en.g.dart'; /// Supported locales. @@ -39,7 +40,8 @@ enum AppLocale with BaseAppLocale { es(languageCode: 'es'), fr(languageCode: 'fr'), ja(languageCode: 'ja'), - pt(languageCode: 'pt'); + pt(languageCode: 'pt'), + ptBr(languageCode: 'pt', countryCode: 'BR'); const AppLocale({ required this.languageCode, @@ -113,6 +115,12 @@ enum AppLocale with BaseAppLocale { cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver, ); + case AppLocale.ptBr: + return l_pt_BR.TranslationsPtBr( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); } } diff --git a/apps/app_seeds/lib/i18n/strings_ast.g.dart b/apps/app_seeds/lib/i18n/strings_ast.g.dart index e53dba8..b2a316f 100644 --- a/apps/app_seeds/lib/i18n/strings_ast.g.dart +++ b/apps/app_seeds/lib/i18n/strings_ast.g.dart @@ -262,6 +262,7 @@ class _Translations$settings$ast extends Translations$settings$en { @override String get langEs => 'Español'; @override String get langEn => 'English'; @override String get langPt => 'Português'; + @override String get langPtBr => 'Português (Brasil)'; @override String get langAst => 'Asturianu'; @override String get langFr => 'Français'; @override String get langDe => 'Deutsch'; @@ -1491,6 +1492,7 @@ extension on TranslationsAst { 'settings.langEs' => 'Español', 'settings.langEn' => 'English', 'settings.langPt' => 'Português', + 'settings.langPtBr' => 'Português (Brasil)', 'settings.langAst' => 'Asturianu', 'settings.langFr' => 'Français', 'settings.langDe' => 'Deutsch', @@ -1928,9 +1930,9 @@ extension on TranslationsAst { 'handover.promiseGave' => 'Van devolveme semiente', 'handover.promiseReceived' => 'Voi devolver semiente', 'sale.title' => 'Ventes', - 'sale.help' => 'Rexistra semilla vendida o mercada — dineru, Ğ1 o cualquier moneda. Un modelu aparte del regalu y del Plantare. Enxamás se cobra comisión poles semilles.', _ => null, } ?? switch (path) { + 'sale.help' => 'Rexistra semilla vendida o mercada — dineru, Ğ1 o cualquier moneda. Un modelu aparte del regalu y del Plantare. Enxamás se cobra comisión poles semilles.', 'sale.add' => 'Rexistrar venta', 'sale.empty' => 'Entá nun hai ventes. Anota equí lo que vendes o merques.', 'sale.iSold' => 'Vendí', diff --git a/apps/app_seeds/lib/i18n/strings_de.g.dart b/apps/app_seeds/lib/i18n/strings_de.g.dart index 460891b..3db7388 100644 --- a/apps/app_seeds/lib/i18n/strings_de.g.dart +++ b/apps/app_seeds/lib/i18n/strings_de.g.dart @@ -263,6 +263,7 @@ class _Translations$settings$de extends Translations$settings$en { @override String get langEs => 'Español'; @override String get langEn => 'English'; @override String get langPt => 'Português'; + @override String get langPtBr => 'Português (Brasil)'; @override String get langAst => 'Asturianu'; @override String get about => 'Über'; @override String get aboutText => 'Lokale, verschlüsselte Saatgutbank für traditionelle Samen. AGPL-3.0.'; @@ -1488,6 +1489,7 @@ extension on TranslationsDe { 'settings.langEs' => 'Español', 'settings.langEn' => 'English', 'settings.langPt' => 'Português', + 'settings.langPtBr' => 'Português (Brasil)', 'settings.langAst' => 'Asturianu', 'settings.about' => 'Über', 'settings.aboutText' => 'Lokale, verschlüsselte Saatgutbank für traditionelle Samen. AGPL-3.0.', @@ -1924,9 +1926,9 @@ extension on TranslationsDe { 'sale.add' => 'Verkauf notieren', 'sale.empty' => 'Noch keine Verkäufe. Notiere hier, was du verkaufst oder kaufst.', 'sale.iSold' => 'Ich verkaufte', - 'sale.iBought' => 'Ich kaufte', _ => null, } ?? switch (path) { + 'sale.iBought' => 'Ich kaufte', 'sale.direction' => 'Verkauft oder gekauft?', 'sale.counterparty' => 'Mit wem?', 'sale.counterpartyHint' => 'Eine Person oder ein Kollektiv (optional)', diff --git a/apps/app_seeds/lib/i18n/strings_en.g.dart b/apps/app_seeds/lib/i18n/strings_en.g.dart index 3f90a13..c74125c 100644 --- a/apps/app_seeds/lib/i18n/strings_en.g.dart +++ b/apps/app_seeds/lib/i18n/strings_en.g.dart @@ -460,6 +460,9 @@ class Translations$settings$en { /// en: 'Português' String get langPt => 'Português'; + /// en: 'Português (Brasil)' + String get langPtBr => 'Português (Brasil)'; + /// en: 'Asturianu' String get langAst => 'Asturianu'; @@ -2864,6 +2867,7 @@ extension on Translations { 'settings.langEs' => 'Español', 'settings.langEn' => 'English', 'settings.langPt' => 'Português', + 'settings.langPtBr' => 'Português (Brasil)', 'settings.langAst' => 'Asturianu', 'settings.langFr' => 'Français', 'settings.langDe' => 'Deutsch', @@ -3289,9 +3293,9 @@ extension on Translations { 'plantare.statusReturned' => 'Returned', 'plantare.statusForgiven' => 'Settled', 'plantare.openSection' => 'Open', - 'plantare.settledSection' => 'Done', _ => null, } ?? switch (path) { + 'plantare.settledSection' => 'Done', 'plantare.removeConfirm' => 'Remove this commitment?', 'plantare.returnBy' => ({required Object date}) => 'Return by ${date}', 'plantare.overdue' => 'overdue', diff --git a/apps/app_seeds/lib/i18n/strings_es.g.dart b/apps/app_seeds/lib/i18n/strings_es.g.dart index 752c4f5..947c10e 100644 --- a/apps/app_seeds/lib/i18n/strings_es.g.dart +++ b/apps/app_seeds/lib/i18n/strings_es.g.dart @@ -286,6 +286,7 @@ class _Translations$settings$es extends Translations$settings$en { @override String get langEs => 'Español'; @override String get langEn => 'English'; @override String get langPt => 'Português'; + @override String get langPtBr => 'Português (Brasil)'; @override String get langFr => 'Français'; @override String get langDe => 'Deutsch'; @override String get langJa => '日本語'; @@ -1605,6 +1606,7 @@ extension on TranslationsEs { 'settings.langEs' => 'Español', 'settings.langEn' => 'English', 'settings.langPt' => 'Português', + 'settings.langPtBr' => 'Português (Brasil)', 'settings.langFr' => 'Français', 'settings.langDe' => 'Deutsch', 'settings.langJa' => '日本語', @@ -2030,9 +2032,9 @@ extension on TranslationsEs { 'plantare.statusForgiven' => 'Saldado', 'plantare.openSection' => 'Pendientes', 'plantare.settledSection' => 'Hechos', - 'plantare.removeConfirm' => '¿Quitar este compromiso?', _ => null, } ?? switch (path) { + 'plantare.removeConfirm' => '¿Quitar este compromiso?', 'plantare.returnBy' => ({required Object date}) => 'Devolver antes del ${date}', 'plantare.overdue' => 'vencido', 'plantare.dueByLabel' => 'Devolver antes de (opcional)', diff --git a/apps/app_seeds/lib/i18n/strings_fr.g.dart b/apps/app_seeds/lib/i18n/strings_fr.g.dart index f28d9cc..38156f9 100644 --- a/apps/app_seeds/lib/i18n/strings_fr.g.dart +++ b/apps/app_seeds/lib/i18n/strings_fr.g.dart @@ -263,6 +263,7 @@ class _Translations$settings$fr extends Translations$settings$en { @override String get langEs => 'Español'; @override String get langEn => 'English'; @override String get langPt => 'Português'; + @override String get langPtBr => 'Português (Brasil)'; @override String get langAst => 'Asturianu'; @override String get langFr => 'Français'; @override String get langDe => 'Deutsch'; @@ -1488,6 +1489,7 @@ extension on TranslationsFr { 'settings.langEs' => 'Español', 'settings.langEn' => 'English', 'settings.langPt' => 'Português', + 'settings.langPtBr' => 'Português (Brasil)', 'settings.langAst' => 'Asturianu', 'settings.langFr' => 'Français', 'settings.langDe' => 'Deutsch', @@ -1924,9 +1926,9 @@ extension on TranslationsFr { 'sale.add' => 'Enregistrer une vente', 'sale.empty' => 'Pas encore de ventes. Notez ici ce que vous vendez ou achetez.', 'sale.iSold' => 'J\'ai vendu', - 'sale.iBought' => 'J\'ai acheté', _ => null, } ?? switch (path) { + 'sale.iBought' => 'J\'ai acheté', 'sale.direction' => 'Vendu ou acheté ?', 'sale.counterparty' => 'Avec qui ?', 'sale.counterpartyHint' => 'Une personne ou un collectif (optionnel)', diff --git a/apps/app_seeds/lib/i18n/strings_ja.g.dart b/apps/app_seeds/lib/i18n/strings_ja.g.dart index 01cfd2e..df11454 100644 --- a/apps/app_seeds/lib/i18n/strings_ja.g.dart +++ b/apps/app_seeds/lib/i18n/strings_ja.g.dart @@ -102,6 +102,7 @@ class _Translations$settings$ja extends Translations$settings$en { @override String get langEs => 'Español'; @override String get langEn => 'English'; @override String get langPt => 'Português'; + @override String get langPtBr => 'Português (Brasil)'; @override String get langAst => 'Asturianu'; @override String get langFr => 'Français'; @override String get langDe => 'Deutsch'; @@ -155,6 +156,7 @@ extension on TranslationsJa { 'settings.langEs' => 'Español', 'settings.langEn' => 'English', 'settings.langPt' => 'Português', + 'settings.langPtBr' => 'Português (Brasil)', 'settings.langAst' => 'Asturianu', 'settings.langFr' => 'Français', 'settings.langDe' => 'Deutsch', diff --git a/apps/app_seeds/lib/i18n/strings_pt.g.dart b/apps/app_seeds/lib/i18n/strings_pt.g.dart index dad41df..48d5799 100644 --- a/apps/app_seeds/lib/i18n/strings_pt.g.dart +++ b/apps/app_seeds/lib/i18n/strings_pt.g.dart @@ -39,61 +39,64 @@ class TranslationsPt extends Translations with BaseTranslations? meta}) => TranslationsPt(meta: meta ?? this.$meta); // Translations - @override late final _Translations$avatar$pt avatar = _Translations$avatar$pt._(_root); - @override late final _Translations$favorites$pt favorites = _Translations$favorites$pt._(_root); - @override late final _Translations$seedSaving$pt seedSaving = _Translations$seedSaving$pt._(_root); - @override late final _Translations$calendar$pt calendar = _Translations$calendar$pt._(_root); - @override late final _Translations$app$pt app = _Translations$app$pt._(_root); - @override late final _Translations$bootstrap$pt bootstrap = _Translations$bootstrap$pt._(_root); - @override late final _Translations$common$pt common = _Translations$common$pt._(_root); - @override late final _Translations$home$pt home = _Translations$home$pt._(_root); - @override late final _Translations$photo$pt photo = _Translations$photo$pt._(_root); - @override late final _Translations$menu$pt menu = _Translations$menu$pt._(_root); - @override late final _Translations$settings$pt settings = _Translations$settings$pt._(_root); - @override late final _Translations$backup$pt backup = _Translations$backup$pt._(_root); - @override late final _Translations$about$pt about = _Translations$about$pt._(_root); - @override late final _Translations$intro$pt intro = _Translations$intro$pt._(_root); - @override late final _Translations$inventory$pt inventory = _Translations$inventory$pt._(_root); - @override late final _Translations$draft$pt draft = _Translations$draft$pt._(_root); - @override late final _Translations$quickAdd$pt quickAdd = _Translations$quickAdd$pt._(_root); - @override late final _Translations$detail$pt detail = _Translations$detail$pt._(_root); - @override late final _Translations$germination$pt germination = _Translations$germination$pt._(_root); - @override late final _Translations$viability$pt viability = _Translations$viability$pt._(_root); - @override late final _Translations$editVariety$pt editVariety = _Translations$editVariety$pt._(_root); - @override late final _Translations$addLot$pt addLot = _Translations$addLot$pt._(_root); - @override late final _Translations$harvest$pt harvest = _Translations$harvest$pt._(_root); - @override late final _Translations$lotType$pt lotType = _Translations$lotType$pt._(_root); - @override late final _Translations$presentation$pt presentation = _Translations$presentation$pt._(_root); - @override late final _Translations$provenance$pt provenance = _Translations$provenance$pt._(_root); - @override late final _Translations$abundance$pt abundance = _Translations$abundance$pt._(_root); - @override late final _Translations$share$pt share = _Translations$share$pt._(_root); - @override late final _Translations$printLabels$pt printLabels = _Translations$printLabels$pt._(_root); - @override late final _Translations$cropCalendar$pt cropCalendar = _Translations$cropCalendar$pt._(_root); - @override late final _Translations$needsReproduction$pt needsReproduction = _Translations$needsReproduction$pt._(_root); - @override late final _Translations$preservation$pt preservation = _Translations$preservation$pt._(_root); - @override late final _Translations$conditionCheck$pt conditionCheck = _Translations$conditionCheck$pt._(_root); - @override late final _Translations$desiccant$pt desiccant = _Translations$desiccant$pt._(_root); - @override late final _Translations$unit$pt unit = _Translations$unit$pt._(_root); - @override late final _Translations$market$pt market = _Translations$market$pt._(_root); - @override late final _Translations$profile$pt profile = _Translations$profile$pt._(_root); - @override late final _Translations$chatList$pt chatList = _Translations$chatList$pt._(_root); - @override late final _Translations$chat$pt chat = _Translations$chat$pt._(_root); - @override late final _Translations$trust$pt trust = _Translations$trust$pt._(_root); - @override late final _Translations$yourPeople$pt yourPeople = _Translations$yourPeople$pt._(_root); - @override late final _Translations$ratings$pt ratings = _Translations$ratings$pt._(_root); - @override late final _Translations$notifications$pt notifications = _Translations$notifications$pt._(_root); - @override late final _Translations$plantare$pt plantare = _Translations$plantare$pt._(_root); - @override late final _Translations$handover$pt handover = _Translations$handover$pt._(_root); - @override late final _Translations$sale$pt sale = _Translations$sale$pt._(_root); - @override late final _Translations$legal$pt legal = _Translations$legal$pt._(_root); - @override late final _Translations$marketGate$pt marketGate = _Translations$marketGate$pt._(_root); - @override late final _Translations$report$pt report = _Translations$report$pt._(_root); - @override late final _Translations$block$pt block = _Translations$block$pt._(_root); + @override late final Translations$avatar$pt avatar = Translations$avatar$pt.internal(_root); + @override late final Translations$favorites$pt favorites = Translations$favorites$pt.internal(_root); + @override late final Translations$savedSearches$pt savedSearches = Translations$savedSearches$pt.internal(_root); + @override late final Translations$seedSaving$pt seedSaving = Translations$seedSaving$pt.internal(_root); + @override late final Translations$calendar$pt calendar = Translations$calendar$pt.internal(_root); + @override late final Translations$app$pt app = Translations$app$pt.internal(_root); + @override late final Translations$bootstrap$pt bootstrap = Translations$bootstrap$pt.internal(_root); + @override late final Translations$common$pt common = Translations$common$pt.internal(_root); + @override late final Translations$home$pt home = Translations$home$pt.internal(_root); + @override late final Translations$photo$pt photo = Translations$photo$pt.internal(_root); + @override late final Translations$menu$pt menu = Translations$menu$pt.internal(_root); + @override late final Translations$settings$pt settings = Translations$settings$pt.internal(_root); + @override late final Translations$backup$pt backup = Translations$backup$pt.internal(_root); + @override late final Translations$about$pt about = Translations$about$pt.internal(_root); + @override late final Translations$intro$pt intro = Translations$intro$pt.internal(_root); + @override late final Translations$inventory$pt inventory = Translations$inventory$pt.internal(_root); + @override late final Translations$draft$pt draft = Translations$draft$pt.internal(_root); + @override late final Translations$quickAdd$pt quickAdd = Translations$quickAdd$pt.internal(_root); + @override late final Translations$detail$pt detail = Translations$detail$pt.internal(_root); + @override late final Translations$germination$pt germination = Translations$germination$pt.internal(_root); + @override late final Translations$viability$pt viability = Translations$viability$pt.internal(_root); + @override late final Translations$editVariety$pt editVariety = Translations$editVariety$pt.internal(_root); + @override late final Translations$addLot$pt addLot = Translations$addLot$pt.internal(_root); + @override late final Translations$harvest$pt harvest = Translations$harvest$pt.internal(_root); + @override late final Translations$lotType$pt lotType = Translations$lotType$pt.internal(_root); + @override late final Translations$presentation$pt presentation = Translations$presentation$pt.internal(_root); + @override late final Translations$provenance$pt provenance = Translations$provenance$pt.internal(_root); + @override late final Translations$abundance$pt abundance = Translations$abundance$pt.internal(_root); + @override late final Translations$share$pt share = Translations$share$pt.internal(_root); + @override late final Translations$printLabels$pt printLabels = Translations$printLabels$pt.internal(_root); + @override late final Translations$scan$pt scan = Translations$scan$pt.internal(_root); + @override late final Translations$cropCalendar$pt cropCalendar = Translations$cropCalendar$pt.internal(_root); + @override late final Translations$needsReproduction$pt needsReproduction = Translations$needsReproduction$pt.internal(_root); + @override late final Translations$preservation$pt preservation = Translations$preservation$pt.internal(_root); + @override late final Translations$conditionCheck$pt conditionCheck = Translations$conditionCheck$pt.internal(_root); + @override late final Translations$desiccant$pt desiccant = Translations$desiccant$pt.internal(_root); + @override late final Translations$unit$pt unit = Translations$unit$pt.internal(_root); + @override late final Translations$market$pt market = Translations$market$pt.internal(_root); + @override late final Translations$profile$pt profile = Translations$profile$pt.internal(_root); + @override late final Translations$chatList$pt chatList = Translations$chatList$pt.internal(_root); + @override late final Translations$chat$pt chat = Translations$chat$pt.internal(_root); + @override late final Translations$trust$pt trust = Translations$trust$pt.internal(_root); + @override late final Translations$yourPeople$pt yourPeople = Translations$yourPeople$pt.internal(_root); + @override late final Translations$ratings$pt ratings = Translations$ratings$pt.internal(_root); + @override late final Translations$notifications$pt notifications = Translations$notifications$pt.internal(_root); + @override late final Translations$plantare$pt plantare = Translations$plantare$pt.internal(_root); + @override late final Translations$handover$pt handover = Translations$handover$pt.internal(_root); + @override late final Translations$history$pt history = Translations$history$pt.internal(_root); + @override late final Translations$sale$pt sale = Translations$sale$pt.internal(_root); + @override late final Translations$legal$pt legal = Translations$legal$pt.internal(_root); + @override late final Translations$marketGate$pt marketGate = Translations$marketGate$pt.internal(_root); + @override late final Translations$report$pt report = Translations$report$pt.internal(_root); + @override late final Translations$block$pt block = Translations$block$pt.internal(_root); } // Path: avatar -class _Translations$avatar$pt extends Translations$avatar$en { - _Translations$avatar$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$avatar$pt extends Translations$avatar$en { + Translations$avatar$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -105,8 +108,8 @@ class _Translations$avatar$pt extends Translations$avatar$en { } // Path: favorites -class _Translations$favorites$pt extends Translations$favorites$en { - _Translations$favorites$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$favorites$pt extends Translations$favorites$en { + Translations$favorites$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -118,9 +121,29 @@ class _Translations$favorites$pt extends Translations$favorites$en { @override String get unavailable => 'Já não está disponível'; } +// Path: savedSearches +class Translations$savedSearches$pt extends Translations$savedSearches$en { + Translations$savedSearches$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); + + final TranslationsPt _root; // ignore: unused_field + + // Translations + @override String get title => 'Pesquisas guardadas'; + @override String get empty => 'Ainda não há pesquisas guardadas. Guarda uma pesquisa no mercado e avisamos-te quando aparecer algo parecido na tua zona.'; + @override String get save => 'Guardar esta pesquisa'; + @override String get nameLabel => 'Dá um nome a esta pesquisa'; + @override String get namePlaceholder => 'ex.: Tomates perto de mim'; + @override String get saved => 'Pesquisa guardada — vamos avisar-te sobre novas correspondências perto de ti'; + @override String get openTooltip => 'Pesquisas guardadas'; + @override String get delete => 'Eliminar'; + @override String get deleteConfirm => 'Eliminar esta pesquisa guardada?'; + @override String newMatchesBadge({required Object n}) => '${n} novas'; + @override String alert({required Object label}) => 'Sementes perto de ti: ${label}'; +} + // Path: seedSaving -class _Translations$seedSaving$pt extends Translations$seedSaving$en { - _Translations$seedSaving$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$seedSaving$pt extends Translations$seedSaving$en { + Translations$seedSaving$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -154,8 +177,8 @@ class _Translations$seedSaving$pt extends Translations$seedSaving$en { } // Path: calendar -class _Translations$calendar$pt extends Translations$calendar$en { - _Translations$calendar$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$calendar$pt extends Translations$calendar$en { + Translations$calendar$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -167,8 +190,8 @@ class _Translations$calendar$pt extends Translations$calendar$en { } // Path: app -class _Translations$app$pt extends Translations$app$en { - _Translations$app$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$app$pt extends Translations$app$en { + Translations$app$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -177,8 +200,8 @@ class _Translations$app$pt extends Translations$app$en { } // Path: bootstrap -class _Translations$bootstrap$pt extends Translations$bootstrap$en { - _Translations$bootstrap$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$bootstrap$pt extends Translations$bootstrap$en { + Translations$bootstrap$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -188,8 +211,8 @@ class _Translations$bootstrap$pt extends Translations$bootstrap$en { } // Path: common -class _Translations$common$pt extends Translations$common$en { - _Translations$common$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$common$pt extends Translations$common$en { + Translations$common$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -204,8 +227,8 @@ class _Translations$common$pt extends Translations$common$en { } // Path: home -class _Translations$home$pt extends Translations$home$en { - _Translations$home$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$home$pt extends Translations$home$en { + Translations$home$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -218,8 +241,8 @@ class _Translations$home$pt extends Translations$home$en { } // Path: photo -class _Translations$photo$pt extends Translations$photo$en { - _Translations$photo$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$photo$pt extends Translations$photo$en { + Translations$photo$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -232,8 +255,8 @@ class _Translations$photo$pt extends Translations$photo$en { } // Path: menu -class _Translations$menu$pt extends Translations$menu$en { - _Translations$menu$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$menu$pt extends Translations$menu$en { + Translations$menu$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -252,8 +275,8 @@ class _Translations$menu$pt extends Translations$menu$en { } // Path: settings -class _Translations$settings$pt extends Translations$settings$en { - _Translations$settings$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$settings$pt extends Translations$settings$en { + Translations$settings$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -263,6 +286,7 @@ class _Translations$settings$pt extends Translations$settings$en { @override String get langEs => 'Español'; @override String get langEn => 'English'; @override String get langPt => 'Português'; + @override String get langPtBr => 'Português (Brasil)'; @override String get langAst => 'Asturianu'; @override String get langFr => 'Français'; @override String get langDe => 'Deutsch'; @@ -273,8 +297,8 @@ class _Translations$settings$pt extends Translations$settings$en { } // Path: backup -class _Translations$backup$pt extends Translations$backup$en { - _Translations$backup$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$backup$pt extends Translations$backup$en { + Translations$backup$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -314,8 +338,8 @@ class _Translations$backup$pt extends Translations$backup$en { } // Path: about -class _Translations$about$pt extends Translations$about$en { - _Translations$about$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$about$pt extends Translations$about$en { + Translations$about$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -338,8 +362,8 @@ class _Translations$about$pt extends Translations$about$en { } // Path: intro -class _Translations$intro$pt extends Translations$intro$en { - _Translations$intro$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$intro$pt extends Translations$intro$en { + Translations$intro$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -348,12 +372,12 @@ class _Translations$intro$pt extends Translations$intro$en { @override String get next => 'Seguinte'; @override String get start => 'Começar'; @override String get menuEntry => 'Como funciona o Tane'; - @override late final _Translations$intro$slides$pt slides = _Translations$intro$slides$pt._(_root); + @override late final Translations$intro$slides$pt slides = Translations$intro$slides$pt.internal(_root); } // Path: inventory -class _Translations$inventory$pt extends Translations$inventory$en { - _Translations$inventory$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$inventory$pt extends Translations$inventory$en { + Translations$inventory$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -370,8 +394,8 @@ class _Translations$inventory$pt extends Translations$inventory$en { } // Path: draft -class _Translations$draft$pt extends Translations$draft$en { - _Translations$draft$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$draft$pt extends Translations$draft$en { + Translations$draft$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -388,8 +412,8 @@ class _Translations$draft$pt extends Translations$draft$en { } // Path: quickAdd -class _Translations$quickAdd$pt extends Translations$quickAdd$en { - _Translations$quickAdd$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$quickAdd$pt extends Translations$quickAdd$en { + Translations$quickAdd$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -407,8 +431,8 @@ class _Translations$quickAdd$pt extends Translations$quickAdd$en { } // Path: detail -class _Translations$detail$pt extends Translations$detail$en { - _Translations$detail$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$detail$pt extends Translations$detail$en { + Translations$detail$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -422,6 +446,10 @@ class _Translations$detail$pt extends Translations$detail$en { @override String get addLink => 'Adicionar ligação'; @override String get linkUrl => 'URL'; @override String get linkTitle => 'Título (opcional)'; + @override String get reference => 'Saber mais'; + @override String get refGbif => 'GBIF'; + @override String get refWikipedia => 'Wikipédia'; + @override String get refWikispecies => 'Wikispecies'; @override String get notes => 'Notas'; @override String get addLot => 'Adicionar lote'; @override String get editLot => 'Editar lote'; @@ -431,8 +459,8 @@ class _Translations$detail$pt extends Translations$detail$en { } // Path: germination -class _Translations$germination$pt extends Translations$germination$en { - _Translations$germination$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$germination$pt extends Translations$germination$en { + Translations$germination$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -446,8 +474,8 @@ class _Translations$germination$pt extends Translations$germination$en { } // Path: viability -class _Translations$viability$pt extends Translations$viability$en { - _Translations$viability$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$viability$pt extends Translations$viability$en { + Translations$viability$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -459,8 +487,8 @@ class _Translations$viability$pt extends Translations$viability$en { } // Path: editVariety -class _Translations$editVariety$pt extends Translations$editVariety$en { - _Translations$editVariety$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$editVariety$pt extends Translations$editVariety$en { + Translations$editVariety$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -477,8 +505,8 @@ class _Translations$editVariety$pt extends Translations$editVariety$en { } // Path: addLot -class _Translations$addLot$pt extends Translations$addLot$en { - _Translations$addLot$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$addLot$pt extends Translations$addLot$en { + Translations$addLot$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -490,8 +518,8 @@ class _Translations$addLot$pt extends Translations$addLot$en { } // Path: harvest -class _Translations$harvest$pt extends Translations$harvest$en { - _Translations$harvest$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$harvest$pt extends Translations$harvest$en { + Translations$harvest$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -516,8 +544,8 @@ class _Translations$harvest$pt extends Translations$harvest$en { } // Path: lotType -class _Translations$lotType$pt extends Translations$lotType$en { - _Translations$lotType$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$lotType$pt extends Translations$lotType$en { + Translations$lotType$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -531,8 +559,8 @@ class _Translations$lotType$pt extends Translations$lotType$en { } // Path: presentation -class _Translations$presentation$pt extends Translations$presentation$en { - _Translations$presentation$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$presentation$pt extends Translations$presentation$en { + Translations$presentation$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -547,8 +575,8 @@ class _Translations$presentation$pt extends Translations$presentation$en { } // Path: provenance -class _Translations$provenance$pt extends Translations$provenance$en { - _Translations$provenance$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$provenance$pt extends Translations$provenance$en { + Translations$provenance$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -563,8 +591,8 @@ class _Translations$provenance$pt extends Translations$provenance$en { } // Path: abundance -class _Translations$abundance$pt extends Translations$abundance$en { - _Translations$abundance$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$abundance$pt extends Translations$abundance$en { + Translations$abundance$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -579,8 +607,8 @@ class _Translations$abundance$pt extends Translations$abundance$en { } // Path: share -class _Translations$share$pt extends Translations$share$en { - _Translations$share$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$share$pt extends Translations$share$en { + Translations$share$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -602,8 +630,8 @@ class _Translations$share$pt extends Translations$share$en { } // Path: printLabels -class _Translations$printLabels$pt extends Translations$printLabels$en { - _Translations$printLabels$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$printLabels$pt extends Translations$printLabels$en { + Translations$printLabels$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -625,9 +653,25 @@ class _Translations$printLabels$pt extends Translations$printLabels$en { @override String get cancelled => 'Cancelado'; } +// Path: scan +class Translations$scan$pt extends Translations$scan$en { + Translations$scan$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); + + final TranslationsPt _root; // ignore: unused_field + + // Translations + @override String get action => 'Digitalizar um rótulo de semente'; + @override String get title => 'Digitalizar um rótulo'; + @override String get notALabel => 'Esse código não é um rótulo de semente'; + @override String get addTitle => 'Não está na tua coleção'; + @override String addBody({required Object label}) => 'Adicionar “${label}” às tuas sementes?'; + @override String get add => 'Adicionar'; + @override String get added => 'Adicionado à tua coleção'; +} + // Path: cropCalendar -class _Translations$cropCalendar$pt extends Translations$cropCalendar$en { - _Translations$cropCalendar$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$cropCalendar$pt extends Translations$cropCalendar$en { + Translations$cropCalendar$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -644,8 +688,8 @@ class _Translations$cropCalendar$pt extends Translations$cropCalendar$en { } // Path: needsReproduction -class _Translations$needsReproduction$pt extends Translations$needsReproduction$en { - _Translations$needsReproduction$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$needsReproduction$pt extends Translations$needsReproduction$en { + Translations$needsReproduction$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -656,8 +700,8 @@ class _Translations$needsReproduction$pt extends Translations$needsReproduction$ } // Path: preservation -class _Translations$preservation$pt extends Translations$preservation$en { - _Translations$preservation$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$preservation$pt extends Translations$preservation$en { + Translations$preservation$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -673,8 +717,8 @@ class _Translations$preservation$pt extends Translations$preservation$en { } // Path: conditionCheck -class _Translations$conditionCheck$pt extends Translations$conditionCheck$en { - _Translations$conditionCheck$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$conditionCheck$pt extends Translations$conditionCheck$en { + Translations$conditionCheck$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -689,8 +733,8 @@ class _Translations$conditionCheck$pt extends Translations$conditionCheck$en { } // Path: desiccant -class _Translations$desiccant$pt extends Translations$desiccant$en { - _Translations$desiccant$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$desiccant$pt extends Translations$desiccant$en { + Translations$desiccant$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -703,8 +747,8 @@ class _Translations$desiccant$pt extends Translations$desiccant$en { } // Path: unit -class _Translations$unit$pt extends Translations$unit$en { - _Translations$unit$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$unit$pt extends Translations$unit$en { + Translations$unit$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -713,35 +757,35 @@ class _Translations$unit$pt extends Translations$unit$en { @override String get some => 'bastantes'; @override String get plenty => 'muitas'; @override String get pinch => 'uma pitada'; - @override late final _Translations$unit$handful$pt handful = _Translations$unit$handful$pt._(_root); - @override late final _Translations$unit$teaspoon$pt teaspoon = _Translations$unit$teaspoon$pt._(_root); - @override late final _Translations$unit$spoon$pt spoon = _Translations$unit$spoon$pt._(_root); - @override late final _Translations$unit$cup$pt cup = _Translations$unit$cup$pt._(_root); - @override late final _Translations$unit$jar$pt jar = _Translations$unit$jar$pt._(_root); - @override late final _Translations$unit$sack$pt sack = _Translations$unit$sack$pt._(_root); - @override late final _Translations$unit$packet$pt packet = _Translations$unit$packet$pt._(_root); - @override late final _Translations$unit$cob$pt cob = _Translations$unit$cob$pt._(_root); - @override late final _Translations$unit$pod$pt pod = _Translations$unit$pod$pt._(_root); - @override late final _Translations$unit$ear$pt ear = _Translations$unit$ear$pt._(_root); - @override late final _Translations$unit$head$pt head = _Translations$unit$head$pt._(_root); - @override late final _Translations$unit$fruit$pt fruit = _Translations$unit$fruit$pt._(_root); - @override late final _Translations$unit$bulb$pt bulb = _Translations$unit$bulb$pt._(_root); - @override late final _Translations$unit$tuber$pt tuber = _Translations$unit$tuber$pt._(_root); - @override late final _Translations$unit$seedHead$pt seedHead = _Translations$unit$seedHead$pt._(_root); - @override late final _Translations$unit$bunch$pt bunch = _Translations$unit$bunch$pt._(_root); - @override late final _Translations$unit$plant$pt plant = _Translations$unit$plant$pt._(_root); - @override late final _Translations$unit$pot$pt pot = _Translations$unit$pot$pt._(_root); - @override late final _Translations$unit$tray$pt tray = _Translations$unit$tray$pt._(_root); - @override late final _Translations$unit$seedling$pt seedling = _Translations$unit$seedling$pt._(_root); - @override late final _Translations$unit$tree$pt tree = _Translations$unit$tree$pt._(_root); - @override late final _Translations$unit$cutting$pt cutting = _Translations$unit$cutting$pt._(_root); - @override late final _Translations$unit$grams$pt grams = _Translations$unit$grams$pt._(_root); - @override late final _Translations$unit$count$pt count = _Translations$unit$count$pt._(_root); + @override late final Translations$unit$handful$pt handful = Translations$unit$handful$pt.internal(_root); + @override late final Translations$unit$teaspoon$pt teaspoon = Translations$unit$teaspoon$pt.internal(_root); + @override late final Translations$unit$spoon$pt spoon = Translations$unit$spoon$pt.internal(_root); + @override late final Translations$unit$cup$pt cup = Translations$unit$cup$pt.internal(_root); + @override late final Translations$unit$jar$pt jar = Translations$unit$jar$pt.internal(_root); + @override late final Translations$unit$sack$pt sack = Translations$unit$sack$pt.internal(_root); + @override late final Translations$unit$packet$pt packet = Translations$unit$packet$pt.internal(_root); + @override late final Translations$unit$cob$pt cob = Translations$unit$cob$pt.internal(_root); + @override late final Translations$unit$pod$pt pod = Translations$unit$pod$pt.internal(_root); + @override late final Translations$unit$ear$pt ear = Translations$unit$ear$pt.internal(_root); + @override late final Translations$unit$head$pt head = Translations$unit$head$pt.internal(_root); + @override late final Translations$unit$fruit$pt fruit = Translations$unit$fruit$pt.internal(_root); + @override late final Translations$unit$bulb$pt bulb = Translations$unit$bulb$pt.internal(_root); + @override late final Translations$unit$tuber$pt tuber = Translations$unit$tuber$pt.internal(_root); + @override late final Translations$unit$seedHead$pt seedHead = Translations$unit$seedHead$pt.internal(_root); + @override late final Translations$unit$bunch$pt bunch = Translations$unit$bunch$pt.internal(_root); + @override late final Translations$unit$plant$pt plant = Translations$unit$plant$pt.internal(_root); + @override late final Translations$unit$pot$pt pot = Translations$unit$pot$pt.internal(_root); + @override late final Translations$unit$tray$pt tray = Translations$unit$tray$pt.internal(_root); + @override late final Translations$unit$seedling$pt seedling = Translations$unit$seedling$pt.internal(_root); + @override late final Translations$unit$tree$pt tree = Translations$unit$tree$pt.internal(_root); + @override late final Translations$unit$cutting$pt cutting = Translations$unit$cutting$pt.internal(_root); + @override late final Translations$unit$grams$pt grams = Translations$unit$grams$pt.internal(_root); + @override late final Translations$unit$count$pt count = Translations$unit$count$pt.internal(_root); } // Path: market -class _Translations$market$pt extends Translations$market$en { - _Translations$market$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$market$pt extends Translations$market$en { + Translations$market$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -799,8 +843,8 @@ class _Translations$market$pt extends Translations$market$en { } // Path: profile -class _Translations$profile$pt extends Translations$profile$en { - _Translations$profile$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$profile$pt extends Translations$profile$en { + Translations$profile$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -829,8 +873,8 @@ class _Translations$profile$pt extends Translations$profile$en { } // Path: chatList -class _Translations$chatList$pt extends Translations$chatList$en { - _Translations$chatList$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$chatList$pt extends Translations$chatList$en { + Translations$chatList$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -840,8 +884,8 @@ class _Translations$chatList$pt extends Translations$chatList$en { } // Path: chat -class _Translations$chat$pt extends Translations$chat$en { - _Translations$chat$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$chat$pt extends Translations$chat$en { + Translations$chat$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -860,8 +904,8 @@ class _Translations$chat$pt extends Translations$chat$en { } // Path: trust -class _Translations$trust$pt extends Translations$trust$en { - _Translations$trust$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$trust$pt extends Translations$trust$en { + Translations$trust$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -874,8 +918,8 @@ class _Translations$trust$pt extends Translations$trust$en { } // Path: yourPeople -class _Translations$yourPeople$pt extends Translations$yourPeople$en { - _Translations$yourPeople$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$yourPeople$pt extends Translations$yourPeople$en { + Translations$yourPeople$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -892,8 +936,8 @@ class _Translations$yourPeople$pt extends Translations$yourPeople$en { } // Path: ratings -class _Translations$ratings$pt extends Translations$ratings$en { - _Translations$ratings$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$ratings$pt extends Translations$ratings$en { + Translations$ratings$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -907,8 +951,8 @@ class _Translations$ratings$pt extends Translations$ratings$en { } // Path: notifications -class _Translations$notifications$pt extends Translations$notifications$en { - _Translations$notifications$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$notifications$pt extends Translations$notifications$en { + Translations$notifications$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -917,8 +961,8 @@ class _Translations$notifications$pt extends Translations$notifications$en { } // Path: plantare -class _Translations$plantare$pt extends Translations$plantare$en { - _Translations$plantare$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$plantare$pt extends Translations$plantare$en { + Translations$plantare$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -952,11 +996,34 @@ class _Translations$plantare$pt extends Translations$plantare$en { @override String get pickDate => 'Escolher data'; @override String get clearDate => 'Limpar data'; @override String get sectionTitle => 'Compromissos'; + @override String get propose => 'Propor um Plantaré assinado'; + @override String get proposeHelp => 'Ambos mantêm a mesma promessa, assinada pelos dois — prova de que esta semente mudou de mãos e será cultivada e devolvida.'; + @override String proposeTo({required Object name}) => 'Com ${name}'; + @override String get sent => 'Proposta enviada — a aguardar que assinem'; + @override String get seedLabel => 'Que semente?'; + @override String get seedHint => 'A variedade a que se refere esta promessa'; + @override String get returnKindLabel => 'O que volta?'; + @override String get returnSimilar => 'Uma quantidade semelhante de semente'; + @override String get returnSimilarNote => 'polinização aberta · não transgénico · cultivado organicamente'; + @override String get returnWork => 'Algumas horas de trabalho'; + @override String get returnOther => 'Outra coisa'; + @override String get workHoursLabel => 'Quantas horas?'; + @override String get proposalsSection => 'À espera da tua resposta'; + @override String incomingFrom({required Object name}) => '${name} propõe um Plantaré'; + @override String get accept => 'Aceitar e assinar'; + @override String get declineAction => 'Recusar'; + @override String get declineReasonHint => 'Motivo (opcional)'; + @override String get acceptedToast => 'Assinado — agora ambos o mantêm'; + @override String get declinedToast => 'Recusado'; + @override String get badgeAwaiting => 'A aguardar assinatura'; + @override String get badgeSigned => 'Assinado por ambos'; + @override String get badgeDeclined => 'Recusado'; + @override String get offline => 'Estás offline — será enviado quando reconectares'; } // Path: handover -class _Translations$handover$pt extends Translations$handover$en { - _Translations$handover$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$handover$pt extends Translations$handover$en { + Translations$handover$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -974,9 +1041,47 @@ class _Translations$handover$pt extends Translations$handover$en { @override String get promiseReceived => 'Vou devolver semente'; } +// Path: history +class Translations$history$pt extends Translations$history$en { + Translations$history$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); + + final TranslationsPt _root; // ignore: unused_field + + // Translations + @override String get title => 'História deste lote'; + @override String get tooltip => 'História'; + @override String get sowToday => 'Semeado hoje'; + @override String get harvestToday => 'Colhido hoje'; + @override String get sownRecorded => 'Sementeira registada'; + @override String get harvestRecorded => 'Colheita registada'; + @override String get movementReceived => 'Recebido'; + @override String get movementGiven => 'Oferecido'; + @override String get movementSown => 'Semeado'; + @override String get movementHarvested => 'Colhido'; + @override String get movementGerminationTest => 'Teste de germinação'; + @override String get movementSplit => 'Dividido em lotes'; + @override String get movementDiscarded => 'Descartado'; + @override String get created => 'Adicionado à tua coleção'; + @override String from({required Object origin}) => 'De ${origin}'; + @override String germinationResult({required Object percent}) => 'Teste de germinação — ${percent}%'; + @override String get linkedEarlier => 'Vem de um lote anterior'; + @override String get outcomeQuestion => 'Como correu?'; + @override String get outcomeGood => 'Bem'; + @override String get outcomeMixed => 'Mais ou menos'; + @override String get outcomePoor => 'Mal'; + @override String get outcomeNoteHint => 'Uma nota para o teu eu futuro (opcional)'; + @override String get outcomeSaved => 'Registado'; + @override String get ratedGood => 'Correu bem'; + @override String get ratedMixed => 'Correu mais ou menos'; + @override String get ratedPoor => 'Correu mal'; + @override String get outcomeTitle => 'Nota da estação'; + @override String outcomeYear({required Object year}) => 'Estação ${year}'; + @override String isolationHint({required Object meters}) => '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'; +} + // Path: sale -class _Translations$sale$pt extends Translations$sale$en { - _Translations$sale$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$sale$pt extends Translations$sale$en { + Translations$sale$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -1001,8 +1106,8 @@ class _Translations$sale$pt extends Translations$sale$en { } // Path: legal -class _Translations$legal$pt extends Translations$legal$en { - _Translations$legal$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$legal$pt extends Translations$legal$en { + Translations$legal$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -1019,8 +1124,8 @@ class _Translations$legal$pt extends Translations$legal$en { } // Path: marketGate -class _Translations$marketGate$pt extends Translations$marketGate$en { - _Translations$marketGate$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$marketGate$pt extends Translations$marketGate$en { + Translations$marketGate$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -1037,8 +1142,8 @@ class _Translations$marketGate$pt extends Translations$marketGate$en { } // Path: report -class _Translations$report$pt extends Translations$report$en { - _Translations$report$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$report$pt extends Translations$report$en { + Translations$report$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -1059,8 +1164,8 @@ class _Translations$report$pt extends Translations$report$en { } // Path: block -class _Translations$block$pt extends Translations$block$en { - _Translations$block$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$block$pt extends Translations$block$en { + Translations$block$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -1076,22 +1181,22 @@ class _Translations$block$pt extends Translations$block$en { } // Path: intro.slides -class _Translations$intro$slides$pt extends Translations$intro$slides$en { - _Translations$intro$slides$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$intro$slides$pt extends Translations$intro$slides$en { + Translations$intro$slides$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field // Translations - @override late final _Translations$intro$slides$welcome$pt welcome = _Translations$intro$slides$welcome$pt._(_root); - @override late final _Translations$intro$slides$inventory$pt inventory = _Translations$intro$slides$inventory$pt._(_root); - @override late final _Translations$intro$slides$privacy$pt privacy = _Translations$intro$slides$privacy$pt._(_root); - @override late final _Translations$intro$slides$share$pt share = _Translations$intro$slides$share$pt._(_root); - @override late final _Translations$intro$slides$plantare$pt plantare = _Translations$intro$slides$plantare$pt._(_root); + @override late final Translations$intro$slides$welcome$pt welcome = Translations$intro$slides$welcome$pt.internal(_root); + @override late final Translations$intro$slides$inventory$pt inventory = Translations$intro$slides$inventory$pt.internal(_root); + @override late final Translations$intro$slides$privacy$pt privacy = Translations$intro$slides$privacy$pt.internal(_root); + @override late final Translations$intro$slides$share$pt share = Translations$intro$slides$share$pt.internal(_root); + @override late final Translations$intro$slides$plantare$pt plantare = Translations$intro$slides$plantare$pt.internal(_root); } // Path: unit.handful -class _Translations$unit$handful$pt extends Translations$unit$handful$en { - _Translations$unit$handful$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$unit$handful$pt extends Translations$unit$handful$en { + Translations$unit$handful$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -1101,8 +1206,8 @@ class _Translations$unit$handful$pt extends Translations$unit$handful$en { } // Path: unit.teaspoon -class _Translations$unit$teaspoon$pt extends Translations$unit$teaspoon$en { - _Translations$unit$teaspoon$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$unit$teaspoon$pt extends Translations$unit$teaspoon$en { + Translations$unit$teaspoon$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -1112,8 +1217,8 @@ class _Translations$unit$teaspoon$pt extends Translations$unit$teaspoon$en { } // Path: unit.spoon -class _Translations$unit$spoon$pt extends Translations$unit$spoon$en { - _Translations$unit$spoon$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$unit$spoon$pt extends Translations$unit$spoon$en { + Translations$unit$spoon$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -1123,8 +1228,8 @@ class _Translations$unit$spoon$pt extends Translations$unit$spoon$en { } // Path: unit.cup -class _Translations$unit$cup$pt extends Translations$unit$cup$en { - _Translations$unit$cup$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$unit$cup$pt extends Translations$unit$cup$en { + Translations$unit$cup$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -1134,8 +1239,8 @@ class _Translations$unit$cup$pt extends Translations$unit$cup$en { } // Path: unit.jar -class _Translations$unit$jar$pt extends Translations$unit$jar$en { - _Translations$unit$jar$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$unit$jar$pt extends Translations$unit$jar$en { + Translations$unit$jar$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -1145,8 +1250,8 @@ class _Translations$unit$jar$pt extends Translations$unit$jar$en { } // Path: unit.sack -class _Translations$unit$sack$pt extends Translations$unit$sack$en { - _Translations$unit$sack$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$unit$sack$pt extends Translations$unit$sack$en { + Translations$unit$sack$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -1156,8 +1261,8 @@ class _Translations$unit$sack$pt extends Translations$unit$sack$en { } // Path: unit.packet -class _Translations$unit$packet$pt extends Translations$unit$packet$en { - _Translations$unit$packet$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$unit$packet$pt extends Translations$unit$packet$en { + Translations$unit$packet$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -1167,8 +1272,8 @@ class _Translations$unit$packet$pt extends Translations$unit$packet$en { } // Path: unit.cob -class _Translations$unit$cob$pt extends Translations$unit$cob$en { - _Translations$unit$cob$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$unit$cob$pt extends Translations$unit$cob$en { + Translations$unit$cob$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -1178,8 +1283,8 @@ class _Translations$unit$cob$pt extends Translations$unit$cob$en { } // Path: unit.pod -class _Translations$unit$pod$pt extends Translations$unit$pod$en { - _Translations$unit$pod$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$unit$pod$pt extends Translations$unit$pod$en { + Translations$unit$pod$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -1189,8 +1294,8 @@ class _Translations$unit$pod$pt extends Translations$unit$pod$en { } // Path: unit.ear -class _Translations$unit$ear$pt extends Translations$unit$ear$en { - _Translations$unit$ear$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$unit$ear$pt extends Translations$unit$ear$en { + Translations$unit$ear$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -1200,8 +1305,8 @@ class _Translations$unit$ear$pt extends Translations$unit$ear$en { } // Path: unit.head -class _Translations$unit$head$pt extends Translations$unit$head$en { - _Translations$unit$head$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$unit$head$pt extends Translations$unit$head$en { + Translations$unit$head$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -1211,8 +1316,8 @@ class _Translations$unit$head$pt extends Translations$unit$head$en { } // Path: unit.fruit -class _Translations$unit$fruit$pt extends Translations$unit$fruit$en { - _Translations$unit$fruit$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$unit$fruit$pt extends Translations$unit$fruit$en { + Translations$unit$fruit$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -1222,8 +1327,8 @@ class _Translations$unit$fruit$pt extends Translations$unit$fruit$en { } // Path: unit.bulb -class _Translations$unit$bulb$pt extends Translations$unit$bulb$en { - _Translations$unit$bulb$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$unit$bulb$pt extends Translations$unit$bulb$en { + Translations$unit$bulb$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -1233,8 +1338,8 @@ class _Translations$unit$bulb$pt extends Translations$unit$bulb$en { } // Path: unit.tuber -class _Translations$unit$tuber$pt extends Translations$unit$tuber$en { - _Translations$unit$tuber$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$unit$tuber$pt extends Translations$unit$tuber$en { + Translations$unit$tuber$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -1244,8 +1349,8 @@ class _Translations$unit$tuber$pt extends Translations$unit$tuber$en { } // Path: unit.seedHead -class _Translations$unit$seedHead$pt extends Translations$unit$seedHead$en { - _Translations$unit$seedHead$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$unit$seedHead$pt extends Translations$unit$seedHead$en { + Translations$unit$seedHead$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -1255,8 +1360,8 @@ class _Translations$unit$seedHead$pt extends Translations$unit$seedHead$en { } // Path: unit.bunch -class _Translations$unit$bunch$pt extends Translations$unit$bunch$en { - _Translations$unit$bunch$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$unit$bunch$pt extends Translations$unit$bunch$en { + Translations$unit$bunch$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -1266,8 +1371,8 @@ class _Translations$unit$bunch$pt extends Translations$unit$bunch$en { } // Path: unit.plant -class _Translations$unit$plant$pt extends Translations$unit$plant$en { - _Translations$unit$plant$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$unit$plant$pt extends Translations$unit$plant$en { + Translations$unit$plant$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -1277,8 +1382,8 @@ class _Translations$unit$plant$pt extends Translations$unit$plant$en { } // Path: unit.pot -class _Translations$unit$pot$pt extends Translations$unit$pot$en { - _Translations$unit$pot$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$unit$pot$pt extends Translations$unit$pot$en { + Translations$unit$pot$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -1288,8 +1393,8 @@ class _Translations$unit$pot$pt extends Translations$unit$pot$en { } // Path: unit.tray -class _Translations$unit$tray$pt extends Translations$unit$tray$en { - _Translations$unit$tray$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$unit$tray$pt extends Translations$unit$tray$en { + Translations$unit$tray$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -1299,8 +1404,8 @@ class _Translations$unit$tray$pt extends Translations$unit$tray$en { } // Path: unit.seedling -class _Translations$unit$seedling$pt extends Translations$unit$seedling$en { - _Translations$unit$seedling$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$unit$seedling$pt extends Translations$unit$seedling$en { + Translations$unit$seedling$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -1310,8 +1415,8 @@ class _Translations$unit$seedling$pt extends Translations$unit$seedling$en { } // Path: unit.tree -class _Translations$unit$tree$pt extends Translations$unit$tree$en { - _Translations$unit$tree$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$unit$tree$pt extends Translations$unit$tree$en { + Translations$unit$tree$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -1321,8 +1426,8 @@ class _Translations$unit$tree$pt extends Translations$unit$tree$en { } // Path: unit.cutting -class _Translations$unit$cutting$pt extends Translations$unit$cutting$en { - _Translations$unit$cutting$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$unit$cutting$pt extends Translations$unit$cutting$en { + Translations$unit$cutting$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -1332,8 +1437,8 @@ class _Translations$unit$cutting$pt extends Translations$unit$cutting$en { } // Path: unit.grams -class _Translations$unit$grams$pt extends Translations$unit$grams$en { - _Translations$unit$grams$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$unit$grams$pt extends Translations$unit$grams$en { + Translations$unit$grams$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -1343,8 +1448,8 @@ class _Translations$unit$grams$pt extends Translations$unit$grams$en { } // Path: unit.count -class _Translations$unit$count$pt extends Translations$unit$count$en { - _Translations$unit$count$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$unit$count$pt extends Translations$unit$count$en { + Translations$unit$count$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -1354,8 +1459,8 @@ class _Translations$unit$count$pt extends Translations$unit$count$en { } // Path: intro.slides.welcome -class _Translations$intro$slides$welcome$pt extends Translations$intro$slides$welcome$en { - _Translations$intro$slides$welcome$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$intro$slides$welcome$pt extends Translations$intro$slides$welcome$en { + Translations$intro$slides$welcome$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -1365,8 +1470,8 @@ class _Translations$intro$slides$welcome$pt extends Translations$intro$slides$we } // Path: intro.slides.inventory -class _Translations$intro$slides$inventory$pt extends Translations$intro$slides$inventory$en { - _Translations$intro$slides$inventory$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$intro$slides$inventory$pt extends Translations$intro$slides$inventory$en { + Translations$intro$slides$inventory$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -1376,8 +1481,8 @@ class _Translations$intro$slides$inventory$pt extends Translations$intro$slides$ } // Path: intro.slides.privacy -class _Translations$intro$slides$privacy$pt extends Translations$intro$slides$privacy$en { - _Translations$intro$slides$privacy$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$intro$slides$privacy$pt extends Translations$intro$slides$privacy$en { + Translations$intro$slides$privacy$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -1387,8 +1492,8 @@ class _Translations$intro$slides$privacy$pt extends Translations$intro$slides$pr } // Path: intro.slides.share -class _Translations$intro$slides$share$pt extends Translations$intro$slides$share$en { - _Translations$intro$slides$share$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$intro$slides$share$pt extends Translations$intro$slides$share$en { + Translations$intro$slides$share$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -1398,8 +1503,8 @@ class _Translations$intro$slides$share$pt extends Translations$intro$slides$shar } // Path: intro.slides.plantare -class _Translations$intro$slides$plantare$pt extends Translations$intro$slides$plantare$en { - _Translations$intro$slides$plantare$pt._(TranslationsPt root) : this._root = root, super.internal(root); +class Translations$intro$slides$plantare$pt extends Translations$intro$slides$plantare$en { + Translations$intro$slides$plantare$pt.internal(TranslationsPt root) : this._root = root, super.internal(root); final TranslationsPt _root; // ignore: unused_field @@ -1425,6 +1530,17 @@ extension on TranslationsPt { 'favorites.save' => 'Guardar nos favoritos', 'favorites.remove' => 'Remover dos favoritos', 'favorites.unavailable' => 'Já não está disponível', + 'savedSearches.title' => 'Pesquisas guardadas', + 'savedSearches.empty' => 'Ainda não há pesquisas guardadas. Guarda uma pesquisa no mercado e avisamos-te quando aparecer algo parecido na tua zona.', + 'savedSearches.save' => 'Guardar esta pesquisa', + 'savedSearches.nameLabel' => 'Dá um nome a esta pesquisa', + 'savedSearches.namePlaceholder' => 'ex.: Tomates perto de mim', + 'savedSearches.saved' => 'Pesquisa guardada — vamos avisar-te sobre novas correspondências perto de ti', + 'savedSearches.openTooltip' => 'Pesquisas guardadas', + 'savedSearches.delete' => 'Eliminar', + 'savedSearches.deleteConfirm' => 'Eliminar esta pesquisa guardada?', + 'savedSearches.newMatchesBadge' => ({required Object n}) => '${n} novas', + 'savedSearches.alert' => ({required Object label}) => 'Sementes perto de ti: ${label}', 'seedSaving.title' => 'Guardar a sua semente', 'seedSaving.subtitle' => 'O que é preciso para manter a variedade fiel', 'seedSaving.lifeCycle' => 'Ciclo', @@ -1491,6 +1607,7 @@ extension on TranslationsPt { 'settings.langEs' => 'Español', 'settings.langEn' => 'English', 'settings.langPt' => 'Português', + 'settings.langPtBr' => 'Português (Brasil)', 'settings.langAst' => 'Asturianu', 'settings.langFr' => 'Français', 'settings.langDe' => 'Deutsch', @@ -1596,6 +1713,10 @@ extension on TranslationsPt { 'detail.addLink' => 'Adicionar ligação', 'detail.linkUrl' => 'URL', 'detail.linkTitle' => 'Título (opcional)', + 'detail.reference' => 'Saber mais', + 'detail.refGbif' => 'GBIF', + 'detail.refWikipedia' => 'Wikipédia', + 'detail.refWikispecies' => 'Wikispecies', 'detail.notes' => 'Notas', 'detail.addLot' => 'Adicionar lote', 'detail.editLot' => 'Editar lote', @@ -1696,6 +1817,13 @@ extension on TranslationsPt { 'printLabels.save' => 'Guardar etiquetas', 'printLabels.saved' => 'Etiquetas guardadas', 'printLabels.cancelled' => 'Cancelado', + 'scan.action' => 'Digitalizar um rótulo de semente', + 'scan.title' => 'Digitalizar um rótulo', + 'scan.notALabel' => 'Esse código não é um rótulo de semente', + 'scan.addTitle' => 'Não está na tua coleção', + 'scan.addBody' => ({required Object label}) => 'Adicionar “${label}” às tuas sementes?', + 'scan.add' => 'Adicionar', + 'scan.added' => 'Adicionado à tua coleção', 'cropCalendar.add' => 'Calendário de cultivo', 'cropCalendar.title' => 'Calendário de cultivo', 'cropCalendar.sow' => 'Sementeira', @@ -1905,6 +2033,8 @@ extension on TranslationsPt { 'plantare.statusReturned' => 'Devolvido', 'plantare.statusForgiven' => 'Saldado', 'plantare.openSection' => 'Pendentes', + _ => null, + } ?? switch (path) { 'plantare.settledSection' => 'Feitos', 'plantare.removeConfirm' => 'Remover este compromisso?', 'plantare.returnBy' => ({required Object date}) => 'Devolver até ${date}', @@ -1914,6 +2044,29 @@ extension on TranslationsPt { 'plantare.pickDate' => 'Escolher data', 'plantare.clearDate' => 'Limpar data', 'plantare.sectionTitle' => 'Compromissos', + 'plantare.propose' => 'Propor um Plantaré assinado', + 'plantare.proposeHelp' => 'Ambos mantêm a mesma promessa, assinada pelos dois — prova de que esta semente mudou de mãos e será cultivada e devolvida.', + 'plantare.proposeTo' => ({required Object name}) => 'Com ${name}', + 'plantare.sent' => 'Proposta enviada — a aguardar que assinem', + 'plantare.seedLabel' => 'Que semente?', + 'plantare.seedHint' => 'A variedade a que se refere esta promessa', + 'plantare.returnKindLabel' => 'O que volta?', + 'plantare.returnSimilar' => 'Uma quantidade semelhante de semente', + 'plantare.returnSimilarNote' => 'polinização aberta · não transgénico · cultivado organicamente', + 'plantare.returnWork' => 'Algumas horas de trabalho', + 'plantare.returnOther' => 'Outra coisa', + 'plantare.workHoursLabel' => 'Quantas horas?', + 'plantare.proposalsSection' => 'À espera da tua resposta', + 'plantare.incomingFrom' => ({required Object name}) => '${name} propõe um Plantaré', + 'plantare.accept' => 'Aceitar e assinar', + 'plantare.declineAction' => 'Recusar', + 'plantare.declineReasonHint' => 'Motivo (opcional)', + 'plantare.acceptedToast' => 'Assinado — agora ambos o mantêm', + 'plantare.declinedToast' => 'Recusado', + 'plantare.badgeAwaiting' => 'A aguardar assinatura', + 'plantare.badgeSigned' => 'Assinado por ambos', + 'plantare.badgeDeclined' => 'Recusado', + 'plantare.offline' => 'Estás offline — será enviado quando reconectares', 'handover.title' => 'Dei ou recebi sementes', 'handover.help' => 'Uma oferta, uma troca ou uma venda: anota-o, com promessa de devolver semente ou sem ela.', 'handover.iGave' => 'Dei sementes', @@ -1925,11 +2078,38 @@ extension on TranslationsPt { 'handover.paymentChip' => 'Houve dinheiro pelo meio', 'handover.promiseGave' => 'Vão devolver-me semente', 'handover.promiseReceived' => 'Vou devolver semente', + 'history.title' => 'História deste lote', + 'history.tooltip' => 'História', + 'history.sowToday' => 'Semeado hoje', + 'history.harvestToday' => 'Colhido hoje', + 'history.sownRecorded' => 'Sementeira registada', + 'history.harvestRecorded' => 'Colheita registada', + 'history.movementReceived' => 'Recebido', + 'history.movementGiven' => 'Oferecido', + 'history.movementSown' => 'Semeado', + 'history.movementHarvested' => 'Colhido', + 'history.movementGerminationTest' => 'Teste de germinação', + 'history.movementSplit' => 'Dividido em lotes', + 'history.movementDiscarded' => 'Descartado', + 'history.created' => 'Adicionado à tua coleção', + 'history.from' => ({required Object origin}) => 'De ${origin}', + 'history.germinationResult' => ({required Object percent}) => 'Teste de germinação — ${percent}%', + 'history.linkedEarlier' => 'Vem de um lote anterior', + 'history.outcomeQuestion' => 'Como correu?', + 'history.outcomeGood' => 'Bem', + 'history.outcomeMixed' => 'Mais ou menos', + 'history.outcomePoor' => 'Mal', + 'history.outcomeNoteHint' => 'Uma nota para o teu eu futuro (opcional)', + 'history.outcomeSaved' => 'Registado', + 'history.ratedGood' => 'Correu bem', + 'history.ratedMixed' => 'Correu mais ou menos', + 'history.ratedPoor' => 'Correu mal', + 'history.outcomeTitle' => 'Nota da estação', + 'history.outcomeYear' => ({required Object year}) => 'Estação ${year}', + 'history.isolationHint' => ({required Object meters}) => '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', 'sale.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.', 'sale.add' => 'Registar venda', - _ => null, - } ?? switch (path) { 'sale.empty' => 'Ainda não há vendas. Anota aqui o que vendes ou compras.', 'sale.iSold' => 'Vendi', 'sale.iBought' => 'Comprei', diff --git a/apps/app_seeds/lib/i18n/strings_pt_BR.g.dart b/apps/app_seeds/lib/i18n/strings_pt_BR.g.dart new file mode 100644 index 0000000..b2bdb8a --- /dev/null +++ b/apps/app_seeds/lib/i18n/strings_pt_BR.g.dart @@ -0,0 +1,2170 @@ +/// +/// Generated file. Do not edit. +/// +// coverage:ignore-file +// ignore_for_file: type=lint, unused_import +// dart format off + +import 'package:flutter/widgets.dart'; +import 'package:intl/intl.dart'; +import 'package:slang/generated.dart'; +import 'strings.g.dart'; +import 'strings_pt.g.dart'; + +// Path: +class TranslationsPtBr extends TranslationsPt with BaseTranslations { + /// You can call this constructor and build your own translation instance of this locale. + /// Constructing via the enum [AppLocale.build] is preferred. + TranslationsPtBr({Map? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata? meta}) + : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), + $meta = meta ?? TranslationMetadata( + locale: AppLocale.ptBr, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ), + super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) { + super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta + $meta.setFlatMapFunction(_flatMapFunction); + } + + /// Metadata for the translations of . + @override final TranslationMetadata $meta; + + /// Access flat map + @override dynamic operator[](String key) => $meta.getTranslation(key) ?? super.$meta.getTranslation(key); + + late final TranslationsPtBr _root = this; // ignore: unused_field + + @override + TranslationsPtBr $copyWith({TranslationMetadata? meta}) => TranslationsPtBr(meta: meta ?? this.$meta); + + // Translations + @override late final _Translations$avatar$pt_BR avatar = _Translations$avatar$pt_BR._(_root); + @override late final _Translations$favorites$pt_BR favorites = _Translations$favorites$pt_BR._(_root); + @override late final _Translations$savedSearches$pt_BR savedSearches = _Translations$savedSearches$pt_BR._(_root); + @override late final _Translations$seedSaving$pt_BR seedSaving = _Translations$seedSaving$pt_BR._(_root); + @override late final _Translations$calendar$pt_BR calendar = _Translations$calendar$pt_BR._(_root); + @override late final _Translations$app$pt_BR app = _Translations$app$pt_BR._(_root); + @override late final _Translations$bootstrap$pt_BR bootstrap = _Translations$bootstrap$pt_BR._(_root); + @override late final _Translations$common$pt_BR common = _Translations$common$pt_BR._(_root); + @override late final _Translations$home$pt_BR home = _Translations$home$pt_BR._(_root); + @override late final _Translations$photo$pt_BR photo = _Translations$photo$pt_BR._(_root); + @override late final _Translations$menu$pt_BR menu = _Translations$menu$pt_BR._(_root); + @override late final _Translations$settings$pt_BR settings = _Translations$settings$pt_BR._(_root); + @override late final _Translations$backup$pt_BR backup = _Translations$backup$pt_BR._(_root); + @override late final _Translations$about$pt_BR about = _Translations$about$pt_BR._(_root); + @override late final _Translations$intro$pt_BR intro = _Translations$intro$pt_BR._(_root); + @override late final _Translations$inventory$pt_BR inventory = _Translations$inventory$pt_BR._(_root); + @override late final _Translations$draft$pt_BR draft = _Translations$draft$pt_BR._(_root); + @override late final _Translations$quickAdd$pt_BR quickAdd = _Translations$quickAdd$pt_BR._(_root); + @override late final _Translations$detail$pt_BR detail = _Translations$detail$pt_BR._(_root); + @override late final _Translations$germination$pt_BR germination = _Translations$germination$pt_BR._(_root); + @override late final _Translations$viability$pt_BR viability = _Translations$viability$pt_BR._(_root); + @override late final _Translations$editVariety$pt_BR editVariety = _Translations$editVariety$pt_BR._(_root); + @override late final _Translations$addLot$pt_BR addLot = _Translations$addLot$pt_BR._(_root); + @override late final _Translations$harvest$pt_BR harvest = _Translations$harvest$pt_BR._(_root); + @override late final _Translations$lotType$pt_BR lotType = _Translations$lotType$pt_BR._(_root); + @override late final _Translations$presentation$pt_BR presentation = _Translations$presentation$pt_BR._(_root); + @override late final _Translations$provenance$pt_BR provenance = _Translations$provenance$pt_BR._(_root); + @override late final _Translations$abundance$pt_BR abundance = _Translations$abundance$pt_BR._(_root); + @override late final _Translations$share$pt_BR share = _Translations$share$pt_BR._(_root); + @override late final _Translations$printLabels$pt_BR printLabels = _Translations$printLabels$pt_BR._(_root); + @override late final _Translations$scan$pt_BR scan = _Translations$scan$pt_BR._(_root); + @override late final _Translations$cropCalendar$pt_BR cropCalendar = _Translations$cropCalendar$pt_BR._(_root); + @override late final _Translations$needsReproduction$pt_BR needsReproduction = _Translations$needsReproduction$pt_BR._(_root); + @override late final _Translations$preservation$pt_BR preservation = _Translations$preservation$pt_BR._(_root); + @override late final _Translations$conditionCheck$pt_BR conditionCheck = _Translations$conditionCheck$pt_BR._(_root); + @override late final _Translations$desiccant$pt_BR desiccant = _Translations$desiccant$pt_BR._(_root); + @override late final _Translations$unit$pt_BR unit = _Translations$unit$pt_BR._(_root); + @override late final _Translations$market$pt_BR market = _Translations$market$pt_BR._(_root); + @override late final _Translations$profile$pt_BR profile = _Translations$profile$pt_BR._(_root); + @override late final _Translations$chatList$pt_BR chatList = _Translations$chatList$pt_BR._(_root); + @override late final _Translations$chat$pt_BR chat = _Translations$chat$pt_BR._(_root); + @override late final _Translations$trust$pt_BR trust = _Translations$trust$pt_BR._(_root); + @override late final _Translations$yourPeople$pt_BR yourPeople = _Translations$yourPeople$pt_BR._(_root); + @override late final _Translations$ratings$pt_BR ratings = _Translations$ratings$pt_BR._(_root); + @override late final _Translations$notifications$pt_BR notifications = _Translations$notifications$pt_BR._(_root); + @override late final _Translations$plantare$pt_BR plantare = _Translations$plantare$pt_BR._(_root); + @override late final _Translations$handover$pt_BR handover = _Translations$handover$pt_BR._(_root); + @override late final _Translations$history$pt_BR history = _Translations$history$pt_BR._(_root); + @override late final _Translations$sale$pt_BR sale = _Translations$sale$pt_BR._(_root); + @override late final _Translations$legal$pt_BR legal = _Translations$legal$pt_BR._(_root); + @override late final _Translations$marketGate$pt_BR marketGate = _Translations$marketGate$pt_BR._(_root); + @override late final _Translations$report$pt_BR report = _Translations$report$pt_BR._(_root); + @override late final _Translations$block$pt_BR block = _Translations$block$pt_BR._(_root); +} + +// Path: avatar +class _Translations$avatar$pt_BR extends Translations$avatar$pt { + _Translations$avatar$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get title => 'A sua foto ou avatar'; + @override String get fromPhoto => 'Tirar ou escolher uma foto'; + @override String get illustration => 'Ou escolhe um desenho'; + @override String get remove => 'Remover'; +} + +// Path: favorites +class _Translations$favorites$pt_BR extends Translations$favorites$pt { + _Translations$favorites$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get title => 'Favoritos'; + @override String get empty => 'Ainda não tem favoritos. Salve ofertas que goste do mercado.'; + @override String get save => 'Salvar nos favoritos'; + @override String get remove => 'Remover dos favoritos'; + @override String get unavailable => 'Já não está disponível'; +} + +// Path: savedSearches +class _Translations$savedSearches$pt_BR extends Translations$savedSearches$pt { + _Translations$savedSearches$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get title => 'Pesquisas salvas'; + @override String get empty => 'Ainda não há pesquisas salvas. Salve uma pesquisa no mercado e te avisamos quando aparecer algo parecido na sua zona.'; + @override String get save => 'Salvar esta pesquisa'; + @override String get nameLabel => 'Dá um nome a esta pesquisa'; + @override String get namePlaceholder => 'ex.: Tomates perto de mim'; + @override String get saved => 'Pesquisa salva — vamos te avisar sobre novas correspondências perto de você'; + @override String get openTooltip => 'Pesquisas salvas'; + @override String get delete => 'Eliminar'; + @override String get deleteConfirm => 'Eliminar esta pesquisa salva?'; + @override String newMatchesBadge({required Object n}) => '${n} novas'; + @override String alert({required Object label}) => 'Sementes perto de você: ${label}'; +} + +// Path: seedSaving +class _Translations$seedSaving$pt_BR extends Translations$seedSaving$pt { + _Translations$seedSaving$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get title => 'Guardar a sua semente'; + @override String get subtitle => 'O que é preciso para manter a variedade fiel'; + @override String get lifeCycle => 'Ciclo'; + @override String get cycleAnnual => 'Anual'; + @override String get cycleBiennial => 'Bienal — dá semente no 2.º ano'; + @override String get cyclePerennial => 'Perene'; + @override String get pollination => 'Polinização'; + @override String get pollSelf => 'Autopoliniza-se'; + @override String get pollCross => 'Cruza-se com outras'; + @override String get pollMixed => 'Autopoliniza-se, mas às vezes cruza'; + @override String get byInsect => 'por insetos'; + @override String get byWind => 'pelo vento'; + @override String get isolation => 'Separe-a'; + @override String isolationRange({required Object min, required Object max}) => '${min}–${max} m de outras variedades'; + @override String isolationSingle({required Object min}) => '${min} m de outras variedades'; + @override String get plants => 'Guarde de várias plantas'; + @override String plantsValue({required Object n}) => 'De pelo menos ${n} plantas'; + @override String get processing => 'Como limpá-la'; + @override String get procDry => 'Semente seca (debulhar)'; + @override String get procWet => 'Semente húmida (fermentar e lavar)'; + @override String get difficulty => 'Dificuldade'; + @override String get diffEasy => 'Fácil'; + @override String get diffMedium => 'Média'; + @override String get diffHard => 'Difícil'; + @override String get advisory => 'Orientativo — adapte-o ao seu clima e variedade.'; + @override String get sourcePrefix => 'Fonte'; +} + +// Path: calendar +class _Translations$calendar$pt_BR extends Translations$calendar$pt { + _Translations$calendar$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get title => 'Este mês'; + @override String get filterChip => 'Este mês'; + @override String get selfNote => 'O que você anotou nas suas variedades.'; + @override String nothing({required Object month}) => 'Nada anotado para ${month}.'; +} + +// Path: app +class _Translations$app$pt_BR extends Translations$app$pt { + _Translations$app$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get title => 'Tane'; +} + +// Path: bootstrap +class _Translations$bootstrap$pt_BR extends Translations$bootstrap$pt { + _Translations$bootstrap$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get failed => 'O Tane não conseguiu iniciar'; + @override String get retry => 'Tentar de novo'; +} + +// Path: common +class _Translations$common$pt_BR extends Translations$common$pt { + _Translations$common$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get save => 'Salvar'; + @override String get cancel => 'Cancelar'; + @override String get delete => 'Eliminar'; + @override String get edit => 'Editar'; + @override String get type => 'Tipo'; + @override String get comingSoon => 'Em breve'; + @override String get offline => 'Sem ligação — a compartilha está em pausa'; +} + +// Path: home +class _Translations$home$pt_BR extends Translations$home$pt { + _Translations$home$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get tagline => 'Compartilha e cultiva sementes locais'; + @override String get openMarket => 'Mercado'; + @override String get openMarketSubtitle => 'Descobre e compartilha sementes por perto'; + @override String get yourInventory => 'O seu inventário'; + @override String get yourInventorySubtitle => 'Gere as suas sementes'; +} + +// Path: photo +class _Translations$photo$pt_BR extends Translations$photo$pt { + _Translations$photo$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get camera => 'Tirar uma foto'; + @override String get gallery => 'Escolher da galeria'; + @override String get setAsCover => 'Usar como capa'; + @override String get isCover => 'Foto de capa'; + @override String get deleteConfirm => 'Eliminar esta foto?'; +} + +// Path: menu +class _Translations$menu$pt_BR extends Translations$menu$pt { + _Translations$menu$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get tagline => 'o seu banco de sementes'; + @override String get inventory => 'Inventário'; + @override String get market => 'Mercado'; + @override String get profile => 'O seu perfil'; + @override String get chat => 'Conversas'; + @override String get wishlist => 'Favoritos'; + @override String get following => 'A seguir'; + @override String get plantares => 'Plantares'; + @override String get sales => 'Vendas'; + @override String get calendar => 'Calendário'; + @override String get settings => 'Definições'; +} + +// Path: settings +class _Translations$settings$pt_BR extends Translations$settings$pt { + _Translations$settings$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get language => 'Idioma'; + @override String get systemLanguage => 'Idioma do sistema'; + @override String get langEs => 'Español'; + @override String get langEn => 'English'; + @override String get langPt => 'Português'; + @override String get langPtBr => 'Português (Brasil)'; + @override String get langAst => 'Asturianu'; + @override String get langFr => 'Français'; + @override String get langDe => 'Deutsch'; + @override String get langJa => '日本語'; + @override String get about => 'Acerca de'; + @override String get aboutText => 'Inventário local e cifrado para sementes tradicionais. AGPL-3.0.'; + @override String get aboutOpen => 'Acerca do Tane'; +} + +// Path: backup +class _Translations$backup$pt_BR extends Translations$backup$pt { + _Translations$backup$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get title => 'Cópia de segurança'; + @override String get autoBackupTitle => 'Cópias automáticas'; + @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 é salva automaticamente a cada ${days} dias'; + @override String get exportJson => 'Salvar 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'; + @override String get importJsonSubtitle => 'Recupera uma cópia salva — nada fica duplicado'; + @override String get exportCsv => 'Exportar para uma folha de cálculo'; + @override String get exportCsvSubtitle => 'Uma lista simples para Excel ou LibreOffice — sem fotos'; + @override String get importCsv => 'Importar uma lista'; + @override String get importCsvSubtitle => 'Acrescenta entradas a partir de uma folha de cálculo'; + @override String get importConfirmTitle => 'Restaurar uma cópia?'; + @override String get importConfirmBody => 'As entradas fundem-se com o seu inventário; quando a mesma entrada existe dos dois lados, vence a versão mais recente. Nada fica duplicado.'; + @override String get importCsvConfirmTitle => 'Importar uma lista?'; + @override String get importCsvConfirmBody => 'Cada linha é acrescentada como uma entrada nova. Não funde nem substitui, por isso importar o mesmo arquivo duas vezes acrescenta-o duas vezes.'; + @override String get importAction => 'Importar'; + @override String get exportSaved => 'Cópia salva'; + @override String get cancelled => 'Cancelado'; + @override String importDone({required Object added, required Object updated}) => 'Importado: ${added} novas, ${updated} atualizadas'; + @override String importCsvDone({required Object count}) => '${count} entradas acrescentadas'; + @override String get importFailed => 'Este arquivo não pôde ser lido como uma cópia do Tane'; + @override String get failed => 'Algo correu mal'; + @override String get recoveryTitle => 'O seu código de recuperação'; + @override String get recoverySubtitle => 'Imprime-o e guarda-o bem: abre as suas cópias noutro aparelho'; + @override String get recoveryIntro => 'Este código abre as suas cópias salvas e recupera o seu banco em qualquer aparelho. Guarde duas cópias em papel em lugares seguros, como a sua melhor semente. Quem o tiver pode ler as suas cópias, por isso não o compartilhe com ninguém.'; + @override String get recoveryCopy => 'Copiar'; + @override String get recoverySave => 'Salvar a folha'; + @override String get recoverySheetTitle => 'Tane — a sua folha de recuperação'; + @override String get recoveryPromptTitle => 'Escreve o seu código de recuperação'; + @override String get recoveryPromptBody => 'Esta cópia foi salva com outro código. Escreve o código da sua folha de recuperação para a abrir.'; + @override String get recoveryWrongCode => 'Esse código não abre esta cópia'; +} + +// Path: about +class _Translations$about$pt_BR extends Translations$about$pt { + _Translations$about$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get title => 'Acerca de'; + @override String get kanji => '種'; + @override String get tagline => 'Uma aplicação local e descentralizada para gerir e compartilhar sementes e plântulas tradicionais.'; + @override String get intro => 'O Tane (種, "semente" em japonês) ajuda pessoas e coletivos a manter um inventário amigável do seu banco de sementes, decidir o que oferecem e compartilhá-lo localmente — sem um intermediário central que possa controlar, censurar ou ser multado por isso. O seu nome vem de tanemaki (種まき), "semear / espalhar sementes". O objetivo é prático e político ao mesmo tempo: apoiar as variedades tradicionais e fazer frente ao monopólio das sementes.'; + @override String get heritage => 'O nome honra as antigas tradições japonesas de ajuda mútua à volta do arroz — yui (trabalho comunitário compartilhado) e tanomoshi (fundos de reciprocidade) — que inspiraram o Plantare em papel, a "moeda comunitária de troca de sementes" (BAH-Semillero, 2009, CC-BY-SA). O Tane é o Plantare digital.'; + @override String get version => 'Versão'; + @override String get license => 'Licença'; + @override String get licenseValue => 'AGPL-3.0'; + @override String get website => 'Sítio web'; + @override String get sourceCode => 'Código-fonte'; + @override String get translate => 'Ajuda a traduzir'; + @override String get translateSubtitle => 'Ajuda a trazer o Tane para o seu idioma'; + @override String get openSourceLicenses => 'Licenças de código aberto'; + @override String get openSourceLicensesSubtitle => 'Bibliotecas de terceiros e as suas licenças'; + @override String copyright({required Object years}) => '© ${years} Associação Comunes, sob AGPLv3'; +} + +// Path: intro +class _Translations$intro$pt_BR extends Translations$intro$pt { + _Translations$intro$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get skip => 'Saltar'; + @override String get next => 'Seguinte'; + @override String get start => 'Começar'; + @override String get menuEntry => 'Como funciona o Tane'; + @override late final _Translations$intro$slides$pt_BR slides = _Translations$intro$slides$pt_BR._(_root); +} + +// Path: inventory +class _Translations$inventory$pt_BR extends Translations$inventory$pt { + _Translations$inventory$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get title => 'Inventário'; + @override String get searchHint => 'Procurar sementes'; + @override String get empty => 'Ainda não há sementes. Toca em + para adicionar a primeira.'; + @override String get noMatches => 'Nenhuma semente corresponde aos seus filtros.'; + @override String get clearFilters => 'Limpar filtros'; + @override String get uncategorized => 'Sem categoria'; + @override String get needsReproductionFilter => 'Para reproduzir'; + @override String get loadError => 'Não foi possível abrir o seu banco de sementes. Talvez estivesse ocupado — tenta de novo.'; + @override String get retry => 'Tentar de novo'; +} + +// Path: draft +class _Translations$draft$pt_BR extends Translations$draft$pt { + _Translations$draft$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get capture => 'Capturar fotos'; + @override String captured({required Object n}) => '${n} capturadas para catalogar'; + @override String get triageTitle => 'Para catalogar'; + @override String triageCount({required Object n}) => '${n} para catalogar'; + @override String get untitled => 'Sem nome'; + @override String get nameField => 'Dá um nome a esta semente'; + @override String get nameHint => 'O que é?'; + @override String get suggestFromPhoto => 'Sugerir nome a partir da foto'; + @override String get discard => 'Descartar'; +} + +// Path: quickAdd +class _Translations$quickAdd$pt_BR extends Translations$quickAdd$pt { + _Translations$quickAdd$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get title => 'Adicionar uma semente'; + @override String get labelField => 'Nome'; + @override String get labelRequired => 'Dá-lhe um nome'; + @override String get addPhoto => 'Adicionar foto'; + @override String get quantity => 'Quanto?'; + @override String get more => 'Adicionar mais…'; + @override String get save => 'Salvar'; + @override String get saveAndAddAnother => 'Salvar e adicionar outra'; + @override String addedCount({required Object n}) => '${n} adicionadas'; + @override String get cancel => 'Cancelar'; +} + +// Path: detail +class _Translations$detail$pt_BR extends Translations$detail$pt { + _Translations$detail$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get notFound => 'Esta semente já não está aqui.'; + @override String get lots => 'Lotes'; + @override String get noLots => 'Ainda não há lotes.'; + @override String get names => 'Também conhecida como'; + @override String get addName => 'Adicionar nome'; + @override String get links => 'Ligações'; + @override String get addLink => 'Adicionar ligação'; + @override String get linkUrl => 'URL'; + @override String get linkTitle => 'Título (opcional)'; + @override String get reference => 'Saber mais'; + @override String get refGbif => 'GBIF'; + @override String get refWikipedia => 'Wikipédia'; + @override String get refWikispecies => 'Wikispecies'; + @override String get notes => 'Notas'; + @override String get addLot => 'Adicionar lote'; + @override String get editLot => 'Editar lote'; + @override String get deleteConfirm => 'Eliminar esta semente?'; + @override String year({required Object year}) => 'Ano ${year}'; + @override String get noYear => 'Ano desconhecido'; +} + +// Path: germination +class _Translations$germination$pt_BR extends Translations$germination$pt { + _Translations$germination$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get title => 'Germinação'; + @override String get add => 'Adicionar teste'; + @override String get sampleSize => 'Tamanho da amostra'; + @override String get germinated => 'Germinadas'; + @override String get none => 'Ainda não há testes de germinação.'; + @override String result({required Object percent}) => '${percent}%'; +} + +// Path: viability +class _Translations$viability$pt_BR extends Translations$viability$pt { + _Translations$viability$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get expiringSoon => 'Usa ou reproduz nesta época'; + @override String expiringSoonYears({required Object years}) => 'Usa ou reproduz nesta época · dura ~${years} anos'; + @override String get expired => 'Passou a viabilidade típica — reproduzir'; + @override String expiredYears({required Object years}) => 'Passou a viabilidade típica (~${years} anos) — reproduzir'; +} + +// Path: editVariety +class _Translations$editVariety$pt_BR extends Translations$editVariety$pt { + _Translations$editVariety$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get title => 'Editar semente'; + @override String get name => 'Nome'; + @override String get category => 'Categoria'; + @override String get notes => 'Notas'; + @override String get species => 'Espécie (do catálogo)'; + @override String get speciesHint => 'Procura uma espécie…'; + @override String get speciesSuggested => 'Sugerida pelo nome'; + @override String get organic => 'Biológica'; + @override String get organicHint => 'Cultivada em modo biológico'; +} + +// Path: addLot +class _Translations$addLot$pt_BR extends Translations$addLot$pt { + _Translations$addLot$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get title => 'Adicionar lote'; + @override String get year => 'Data de colheita'; + @override String get quantity => 'Quanto?'; + @override String get amount => 'Quantidade'; +} + +// Path: harvest +class _Translations$harvest$pt_BR extends Translations$harvest$pt { + _Translations$harvest$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get pickTitle => 'Escolhe mês / ano'; + @override String get anyMonth => 'Qualquer mês'; + @override String get noDate => 'Definir data de colheita'; + @override List get monthNames => [ + 'janeiro', + 'fevereiro', + 'março', + 'abril', + 'maio', + 'junho', + 'julho', + 'agosto', + 'setembro', + 'outubro', + 'novembro', + 'dezembro', + ]; +} + +// Path: lotType +class _Translations$lotType$pt_BR extends Translations$lotType$pt { + _Translations$lotType$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get seed => 'Sementes'; + @override String get plant => 'Planta'; + @override String get seedling => 'Plântula'; + @override String get tree => 'Árvore / arbusto'; + @override String get bulb => 'Bolbo / tubérculo'; + @override String get cutting => 'Estaca'; +} + +// Path: presentation +class _Translations$presentation$pt_BR extends Translations$presentation$pt { + _Translations$presentation$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get title => 'Apresentação'; + @override String get none => 'Sem indicar'; + @override String get pot => 'Vaso'; + @override String get tray => 'Tabuleiro'; + @override String get plug => 'Alvéolo'; + @override String get bareRoot => 'Raiz nua'; + @override String get rootBall => 'Torrão'; +} + +// Path: provenance +class _Translations$provenance$pt_BR extends Translations$provenance$pt { + _Translations$provenance$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get section => 'De onde vem'; + @override String get seedsFrom => 'Sementes de'; + @override String get seedsFromHint => 'Quem as cultivou ou ofereceu'; + @override String get place => 'Lugar'; + @override String get placeHint => 'De onde vêm (com a região)'; + @override String get addSeedsFrom => 'Sementes de'; + @override String get addPlace => 'Lugar'; +} + +// Path: abundance +class _Translations$abundance$pt_BR extends Translations$abundance$pt { + _Translations$abundance$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get add => 'Quanta tenho'; + @override String get title => 'Quanta tenho'; + @override String get none => 'Sem indicar'; + @override String get plentyToShare => 'De sobra para compartilhar'; + @override String get enoughToShare => 'Bastante, para compartilhar com moderação'; + @override String get enoughForMe => 'Suficiente para mim'; + @override String get runningLow => 'Resta pouca'; +} + +// Path: share +class _Translations$share$pt_BR extends Translations$share$pt { + _Translations$share$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get add => 'Compartilhas esta?'; + @override String get title => 'Compartilhas esta?'; + @override String get nudge => 'Tem de sobra: podia compartilhar um pouco.'; + @override String get price => 'Preço'; + @override String get priceHint => 'Deixe vazio para combinar depois'; + @override String get private => 'Só para mim'; + @override String get gift => 'Para dar'; + @override String get exchange => 'Para trocar'; + @override String get sell => 'À venda'; + @override String get filterChip => 'Compartilho'; + @override String get printCatalog => 'Imprimir o que compartilho'; + @override String get catalogTitle => 'O que compartilho'; + @override String get catalogSaved => 'Catálogo salvo'; + @override String get cancelled => 'Cancelado'; +} + +// Path: printLabels +class _Translations$printLabels$pt_BR extends Translations$printLabels$pt { + _Translations$printLabels$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get action => 'Imprimir etiquetas'; + @override String get title => 'Imprimir etiquetas'; + @override String get selectHint => 'Escolhe as sementes para imprimir as etiquetas'; + @override String get selectAll => 'Selecionar tudo'; + @override String selected({required Object n}) => '${n} selecionadas'; + @override String get none => 'Seleciona sementes primeiro'; + @override String get format => 'Tamanho da etiqueta'; + @override String get formatStickers => 'Autocolantes pequenos'; + @override String get formatStickersHint => 'Muitas etiquetas pequenas por folha — para colar em envelopes'; + @override String get formatCards => 'Cartões grandes'; + @override String get formatCardsHint => 'Menos etiquetas, maiores — para frascos e caixas'; + @override String count({required Object n}) => '${n} etiquetas'; + @override String get save => 'Salvar etiquetas'; + @override String get saved => 'Etiquetas salvas'; + @override String get cancelled => 'Cancelado'; +} + +// Path: scan +class _Translations$scan$pt_BR extends Translations$scan$pt { + _Translations$scan$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get action => 'Digitalizar um rótulo de semente'; + @override String get title => 'Digitalizar um rótulo'; + @override String get notALabel => 'Esse código não é um rótulo de semente'; + @override String get addTitle => 'Não está na sua coleção'; + @override String addBody({required Object label}) => 'Adicionar “${label}” às suas sementes?'; + @override String get add => 'Adicionar'; + @override String get added => 'Adicionado à sua coleção'; +} + +// Path: cropCalendar +class _Translations$cropCalendar$pt_BR extends Translations$cropCalendar$pt { + _Translations$cropCalendar$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get add => 'Calendário de cultivo'; + @override String get title => 'Calendário de cultivo'; + @override String get sow => 'Sementeira'; + @override String get transplant => 'Transplante'; + @override String get flowering => 'Floração'; + @override String get fruiting => 'Frutificação'; + @override String get seedHarvest => 'Colheita de semente'; + @override String get editorHint => 'Anote os meses típicos desta variedade na sua zona — são suas notas.'; + @override String get unset => '—'; +} + +// Path: needsReproduction +class _Translations$needsReproduction$pt_BR extends Translations$needsReproduction$pt { + _Translations$needsReproduction$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get label => 'Reproduzir nesta época'; + @override String get hint => 'Cultiva-a antes que a semente acabe'; + @override String get badge => 'Por reproduzir'; +} + +// Path: preservation +class _Translations$preservation$pt_BR extends Translations$preservation$pt { + _Translations$preservation$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get add => 'Como está guardada'; + @override String get title => 'Como está guardada'; + @override String get none => 'Sem indicar'; + @override String get jarWithDesiccant => 'Frasco com agente secante'; + @override String get glassJar => 'Frasco de vidro'; + @override String get paperEnvelope => 'Envelope de papel'; + @override String get paperBag => 'Saco de papel'; + @override String get plasticBag => 'Saco de plástico'; +} + +// Path: conditionCheck +class _Translations$conditionCheck$pt_BR extends Translations$conditionCheck$pt { + _Translations$conditionCheck$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get advanced => 'Armazenamento e detalhes de banco de sementes'; + @override String get title => 'Verificações de armazenamento'; + @override String get add => 'Adicionar verificação'; + @override String get containers => 'Frascos / recipientes'; + @override String get desiccant => 'Agente secante'; + @override String get none => 'Ainda não há verificações de armazenamento.'; + @override String summary({required Object count, required Object state}) => '${count} frasco(s) · ${state}'; +} + +// Path: desiccant +class _Translations$desiccant$pt_BR extends Translations$desiccant$pt { + _Translations$desiccant$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get none => 'Nenhum'; + @override String get add => 'Adicionar'; + @override String get replace => 'Substituir'; + @override String get dry => 'Azul — seco'; + @override String get fresh => 'Acabado de renovar'; +} + +// Path: unit +class _Translations$unit$pt_BR extends Translations$unit$pt { + _Translations$unit$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get aFew => 'algumas'; + @override String get some => 'bastantes'; + @override String get plenty => 'muitas'; + @override String get pinch => 'uma pitada'; + @override late final _Translations$unit$handful$pt_BR handful = _Translations$unit$handful$pt_BR._(_root); + @override late final _Translations$unit$teaspoon$pt_BR teaspoon = _Translations$unit$teaspoon$pt_BR._(_root); + @override late final _Translations$unit$spoon$pt_BR spoon = _Translations$unit$spoon$pt_BR._(_root); + @override late final _Translations$unit$cup$pt_BR cup = _Translations$unit$cup$pt_BR._(_root); + @override late final _Translations$unit$jar$pt_BR jar = _Translations$unit$jar$pt_BR._(_root); + @override late final _Translations$unit$sack$pt_BR sack = _Translations$unit$sack$pt_BR._(_root); + @override late final _Translations$unit$packet$pt_BR packet = _Translations$unit$packet$pt_BR._(_root); + @override late final _Translations$unit$cob$pt_BR cob = _Translations$unit$cob$pt_BR._(_root); + @override late final _Translations$unit$pod$pt_BR pod = _Translations$unit$pod$pt_BR._(_root); + @override late final _Translations$unit$ear$pt_BR ear = _Translations$unit$ear$pt_BR._(_root); + @override late final _Translations$unit$head$pt_BR head = _Translations$unit$head$pt_BR._(_root); + @override late final _Translations$unit$fruit$pt_BR fruit = _Translations$unit$fruit$pt_BR._(_root); + @override late final _Translations$unit$bulb$pt_BR bulb = _Translations$unit$bulb$pt_BR._(_root); + @override late final _Translations$unit$tuber$pt_BR tuber = _Translations$unit$tuber$pt_BR._(_root); + @override late final _Translations$unit$seedHead$pt_BR seedHead = _Translations$unit$seedHead$pt_BR._(_root); + @override late final _Translations$unit$bunch$pt_BR bunch = _Translations$unit$bunch$pt_BR._(_root); + @override late final _Translations$unit$plant$pt_BR plant = _Translations$unit$plant$pt_BR._(_root); + @override late final _Translations$unit$pot$pt_BR pot = _Translations$unit$pot$pt_BR._(_root); + @override late final _Translations$unit$tray$pt_BR tray = _Translations$unit$tray$pt_BR._(_root); + @override late final _Translations$unit$seedling$pt_BR seedling = _Translations$unit$seedling$pt_BR._(_root); + @override late final _Translations$unit$tree$pt_BR tree = _Translations$unit$tree$pt_BR._(_root); + @override late final _Translations$unit$cutting$pt_BR cutting = _Translations$unit$cutting$pt_BR._(_root); + @override late final _Translations$unit$grams$pt_BR grams = _Translations$unit$grams$pt_BR._(_root); + @override late final _Translations$unit$count$pt_BR count = _Translations$unit$count$pt_BR._(_root); +} + +// Path: market +class _Translations$market$pt_BR extends Translations$market$pt { + _Translations$market$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get title => 'Sementes perto de você'; + @override String get subtitle => 'O que outras pessoas compartilham por perto'; + @override String get notSetUp => 'Ainda não configurou a compartilha'; + @override String get notSetUpBody => 'Ativa a compartilha para ver e dar sementes a pessoas por perto. Mantém-se aproximado — a sua zona, nunca a sua morada exata.'; + @override String get setUp => 'Configurar a compartilha'; + @override String get cantReach => 'Não é possível ligar aos servidores neste momento'; + @override String get cantReachBody => 'Tenta de novo, ou verifica os servidores na configuração avançada.'; + @override String get retry => 'Tentar de novo'; + @override String get setArea => 'Indica a sua zona'; + @override String get setAreaBody => 'Diz ao mercado a sua zona aproximada para ver sementes por perto.'; + @override String get searching => 'A procurar pela sua zona…'; + @override String get empty => 'Ainda não há sementes compartilhadas perto de você'; + @override String get searchHint => 'Procurar nestas sementes'; + @override String get noMatches => 'Nenhuma semente compartilhada corresponde à procura'; + @override String get near => 'Perto de você'; + @override String get contact => 'Mensagem'; + @override String get mine => 'Você'; + @override String get configTitle => 'Configuração de compartilha'; + @override String get setupIntro => 'Compartilhar com pessoas por perto é opcional. Basta indicar a sua zona aproximada — já está conectado a servidores comunitários compartilhados para que outras pessoas encontrem o que você oferece, sem nenhuma empresa no meio.'; + @override String get areaLabel => 'A sua zona'; + @override String get areaHelp => 'Mantém-se aproximado de propósito — a sua zona, nunca um ponto exato.'; + @override String get areaSet => 'A sua zona está definida — aproximada, nunca o seu ponto exato'; + @override String get areaNotSet => 'Zona por definir — usa a sua localização, ou adiciona um código em Avançado'; + @override String get advanced => 'Avançado'; + @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 => 'Escolha que servidores usar. Deixe assim se não souber.'; + @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 => 'Salvar'; + @override String get saved => 'Salvo'; + @override String get wanted => 'Procuro'; + @override String get shareMine => 'Compartilhar as minhas sementes'; + @override String sharedCount({required Object n}) => 'Compartilhadas ${n} sementes'; + @override String get nothingToShare => 'Marca primeiro algumas sementes para dar, trocar ou vender'; + @override String get useLocation => 'Usar a minha localização aproximada'; + @override String get locationFailed => 'Não foi possível obter a sua localização — verifica se a localização está ativa e a permissão concedida'; + @override String get queued => 'Salvo — vamos compartilhá-las quando você tiver conexão'; + @override String get shareFailed => 'Não foi possível contactar os servidores — as suas sementes não foram compartilhadas. Tenta de novo daqui a pouco.'; + @override String get rangeLabel => 'Até onde procurar'; + @override String get rangeNear => 'Muito perto'; + @override String get rangeArea => 'Pela minha zona'; + @override String get rangeRegion => 'A minha região'; + @override String get sharedBy => 'Compartilhado por'; + @override String get noProfile => 'Esta pessoa ainda não compartilhou o seu perfil'; + @override String get copyId => 'Copiar código'; + @override String get idCopied => 'Código copiado'; + @override String get photo => 'Foto'; +} + +// Path: profile +class _Translations$profile$pt_BR extends Translations$profile$pt { + _Translations$profile$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get title => 'O seu perfil'; + @override String get name => 'Nome'; + @override String get nameHint => 'Como os outros te veem'; + @override String get about => 'Sobre você'; + @override String get aboutHint => 'Uma linha — o que cultivas, onde'; + @override String get g1 => 'Endereço Ğ1 (opcional)'; + @override String get g1Hint => 'Para que te paguem em Ğ1 — separado da sua chave'; + @override String get yourId => 'A sua identidade'; + @override String get idHelp => 'Compartilha-a para que te reconheçam'; + @override String get copy => 'Copiar'; + @override String get copied => 'Copiado'; + @override String get save => 'Salvar'; + @override String get saved => 'Perfil salvo'; + @override String get identities => 'As suas identidades'; + @override String get identitiesHelp => 'Mantém identidades separadas — cada uma com as suas mensagens e contactos. Todas vêm da sua única cópia de segurança, por isso mudar não acrescenta nada para lembrar.'; + @override String identityLabel({required Object n}) => 'Identidade ${n}'; + @override String get current => 'Em uso'; + @override String get newIdentity => 'Nova identidade'; + @override String get switchTitle => 'Mudar de identidade?'; + @override String get switchBody => 'As mensagens e contatos são guardados separadamente para cada identidade. Pode voltar quando quiser.'; + @override String get switchAction => 'Mudar'; +} + +// Path: chatList +class _Translations$chatList$pt_BR extends Translations$chatList$pt { + _Translations$chatList$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get title => 'Mensagens'; + @override String get empty => 'Ainda não há conversas. Escreve a alguém a partir do mercado.'; +} + +// Path: chat +class _Translations$chat$pt_BR extends Translations$chat$pt { + _Translations$chat$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get title => 'Conversa'; + @override String get hint => 'Escreve uma mensagem…'; + @override String get send => 'Enviar'; + @override String get empty => 'Ainda não há mensagens — diz olá'; + @override String get offline => 'Configura a compartilha para enviar mensagens'; + @override String get payG1 => 'Pagar em Ğ1'; + @override String get g1Copied => 'Endereço Ğ1 copiado — cola-o na sua carteira'; + @override String get today => 'Hoje'; + @override String get yesterday => 'Ontem'; + @override String get sendError => 'Não foi possível enviar — verifica a sua ligação'; + @override String get noLinks => 'Não são permitidos links nas mensagens'; +} + +// Path: trust +class _Translations$trust$pt_BR extends Translations$trust$pt { + _Translations$trust$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get none => 'Ainda ninguém os avaliza'; + @override String count({required Object n}) => 'Avalizada por ${n}'; + @override String get vouch => 'Conheço esta pessoa'; + @override String get vouched => 'Avalizas esta pessoa'; + @override String get circle => 'No seu círculo'; +} + +// Path: yourPeople +class _Translations$yourPeople$pt_BR extends Translations$yourPeople$pt { + _Translations$yourPeople$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get title => 'A sua gente'; + @override String get help => 'Pessoas que conheces e avalizas, e pessoas que te avalizam.'; + @override String get youVouchFor => 'Você avaliza'; + @override String get vouchesForYou => 'Avalizam-te'; + @override String get youVouchForEmpty => 'Ainda não avaliza ninguém. Quando conhecer alguém, abra a conversa com essa pessoa e toque em "Conheço esta pessoa".'; + @override String get vouchesForYouEmpty => 'Ainda ninguém te avaliza'; + @override String get revoke => 'Deixar de avalizar'; + @override String get revokeConfirm => 'Deixar de avalizar esta pessoa?'; + @override String get offline => 'Sem conexão — tente novamente quando estiver online'; +} + +// Path: ratings +class _Translations$ratings$pt_BR extends Translations$ratings$pt { + _Translations$ratings$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get rate => 'Avaliar esta pessoa'; + @override String get edit => 'Editar a sua avaliação'; + @override String get commentHint => 'Como correu? (opcional)'; + @override String fromYourCircle({required Object n}) => '${n} de pessoas que conheces'; + @override String get retract => 'Remover a sua avaliação'; + @override String get saved => 'Avaliação salva'; +} + +// Path: notifications +class _Translations$notifications$pt_BR extends Translations$notifications$pt { + _Translations$notifications$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String newMessageFrom({required Object name}) => 'Nova mensagem de ${name}'; +} + +// Path: plantare +class _Translations$plantare$pt_BR extends Translations$plantare$pt { + _Translations$plantare$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get title => 'Plantares'; + @override String get help => 'Um Plantare é o compromisso de reproduzir uma semente e devolver uma parte — assim uma variedade continua a viajar de mão em mão. Não é uma venda.'; + @override String get add => 'Adicionar compromisso'; + @override String get empty => 'Ainda não há compromissos. Quando compartilhar ou receber semente com o compromisso de reproduzi-la e devolver algo, anote aqui.'; + @override String get iReturn => 'Reproduzo e devolvo eu'; + @override String get owedToMe => 'Devolvem-me a mim'; + @override String get direction => 'Quem reproduz e devolve'; + @override String get counterparty => 'Com quem?'; + @override String get counterpartyHint => 'Uma pessoa ou um coletivo (opcional)'; + @override String get owed => 'O que é devolvido?'; + @override String get owedHint => 'p. ex. um punhado na próxima temporada (opcional)'; + @override String get note => 'Nota (opcional)'; + @override String get save => 'Salvar'; + @override String get markReturned => 'Marcar devolvido'; + @override String get markForgiven => 'Dar por saldado'; + @override String get reopen => 'Reabrir'; + @override String get delete => 'Remover'; + @override String get statusReturned => 'Devolvido'; + @override String get statusForgiven => 'Saldado'; + @override String get openSection => 'Pendentes'; + @override String get settledSection => 'Feitos'; + @override String get removeConfirm => 'Remover este compromisso?'; + @override String returnBy({required Object date}) => 'Devolver até ${date}'; + @override String get overdue => 'vencido'; + @override String get dueByLabel => 'Devolver até (opcional)'; + @override String get dueByHint => 'Um lembrete gentil, nunca imposto'; + @override String get pickDate => 'Escolher data'; + @override String get clearDate => 'Limpar data'; + @override String get sectionTitle => 'Compromissos'; + @override String get propose => 'Propor um Plantaré assinado'; + @override String get proposeHelp => 'Ambos mantêm a mesma promessa, assinada pelos dois — prova de que esta semente mudou de mãos e será cultivada e devolvida.'; + @override String proposeTo({required Object name}) => 'Com ${name}'; + @override String get sent => 'Proposta enviada — a aguardar que assinem'; + @override String get seedLabel => 'Que semente?'; + @override String get seedHint => 'A variedade a que se refere esta promessa'; + @override String get returnKindLabel => 'O que volta?'; + @override String get returnSimilar => 'Uma quantidade semelhante de semente'; + @override String get returnSimilarNote => 'polinização aberta · não transgénico · cultivado organicamente'; + @override String get returnWork => 'Algumas horas de trabalho'; + @override String get returnOther => 'Outra coisa'; + @override String get workHoursLabel => 'Quantas horas?'; + @override String get proposalsSection => 'À espera da sua resposta'; + @override String incomingFrom({required Object name}) => '${name} propõe um Plantaré'; + @override String get accept => 'Aceitar e assinar'; + @override String get declineAction => 'Recusar'; + @override String get declineReasonHint => 'Motivo (opcional)'; + @override String get acceptedToast => 'Assinado — agora ambos o mantêm'; + @override String get declinedToast => 'Recusado'; + @override String get badgeAwaiting => 'A aguardar assinatura'; + @override String get badgeSigned => 'Assinado por ambos'; + @override String get badgeDeclined => 'Recusado'; + @override String get offline => 'Você está offline — será enviado quando reconectar'; +} + +// Path: handover +class _Translations$handover$pt_BR extends Translations$handover$pt { + _Translations$handover$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get title => 'Dei ou recebi sementes'; + @override String get help => 'Uma oferta, uma troca ou uma venda: anota-o, com promessa de devolver semente ou sem ela.'; + @override String get iGave => 'Dei sementes'; + @override String get iReceived => 'Recebi sementes'; + @override String get whichLot => 'De que lote?'; + @override String get howMuch => 'Quanto?'; + @override String get allOfIt => 'Tudo'; + @override String get partOfIt => 'Uma parte'; + @override String get paymentChip => 'Houve dinheiro pelo meio'; + @override String get promiseGave => 'Vão devolver-me semente'; + @override String get promiseReceived => 'Vou devolver semente'; +} + +// Path: history +class _Translations$history$pt_BR extends Translations$history$pt { + _Translations$history$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get title => 'História deste lote'; + @override String get tooltip => 'História'; + @override String get sowToday => 'Semeado hoje'; + @override String get harvestToday => 'Colhido hoje'; + @override String get sownRecorded => 'Sementeira registada'; + @override String get harvestRecorded => 'Colheita registada'; + @override String get movementReceived => 'Recebido'; + @override String get movementGiven => 'Oferecido'; + @override String get movementSown => 'Semeado'; + @override String get movementHarvested => 'Colhido'; + @override String get movementGerminationTest => 'Teste de germinação'; + @override String get movementSplit => 'Dividido em lotes'; + @override String get movementDiscarded => 'Descartado'; + @override String get created => 'Adicionado à sua coleção'; + @override String from({required Object origin}) => 'De ${origin}'; + @override String germinationResult({required Object percent}) => 'Teste de germinação — ${percent}%'; + @override String get linkedEarlier => 'Vem de um lote anterior'; + @override String get outcomeQuestion => 'Como correu?'; + @override String get outcomeGood => 'Bem'; + @override String get outcomeMixed => 'Mais ou menos'; + @override String get outcomePoor => 'Mal'; + @override String get outcomeNoteHint => 'Uma nota para o seu eu futuro (opcional)'; + @override String get outcomeSaved => 'Registado'; + @override String get ratedGood => 'Correu bem'; + @override String get ratedMixed => 'Correu mais ou menos'; + @override String get ratedPoor => 'Correu mal'; + @override String get outcomeTitle => 'Nota da estação'; + @override String outcomeYear({required Object year}) => 'Estação ${year}'; + @override String isolationHint({required Object meters}) => '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'; +} + +// Path: sale +class _Translations$sale$pt_BR extends Translations$sale$pt { + _Translations$sale$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get title => 'Vendas'; + @override String get 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.'; + @override String get add => 'Registar venda'; + @override String get empty => 'Ainda não há vendas. Anota aqui o que vendes ou compras.'; + @override String get iSold => 'Vendi'; + @override String get iBought => 'Comprei'; + @override String get direction => 'Vendes ou compras?'; + @override String get counterparty => 'Com quem?'; + @override String get counterpartyHint => 'Uma pessoa ou um coletivo (opcional)'; + @override String get amount => 'Montante'; + @override String get currency => 'Moeda'; + @override String get currencyHint => '€, Ğ1, horas… (opcional)'; + @override String get hours => 'horas'; + @override String get note => 'Nota (opcional)'; + @override String get save => 'Salvar'; + @override String get delete => 'Remover'; + @override String get removeConfirm => 'Remover esta venda?'; +} + +// Path: legal +class _Translations$legal$pt_BR extends Translations$legal$pt { + _Translations$legal$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get title => 'Privacidade e regras'; + @override String get subtitle => 'A sua privacidade, as regras do mercado e a legalidade das sementes'; + @override String get privacyTitle => 'A sua privacidade'; + @override String get privacyBody => 'O Tane funciona sem conta, e tudo o que você registra fica no seu dispositivo, cifrado. Não há publicidade, nem rastreadores, nem servidor do Tane.\n\nNada é compartilhado a não ser que você queira: quando publica uma oferta ou o seu perfil, ou envia uma mensagem, viaja por servidores comunitários. As ofertas levam apenas uma zona aproximada — nunca a sua morada.\n\nO que publica é público, e podem ficar cópias mesmo depois de você retirar — por isso compartilhe 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 é responsável pelo que oferece e envia.\n\nNo mercado: seja honesto com suas sementes, ofereça apenas o que pode compartilhar, trate bem as pessoas e não faça spam. Pode 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 compartilhar 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'; +} + +// Path: marketGate +class _Translations$marketGate$pt_BR extends Translations$marketGate$pt { + _Translations$marketGate$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get title => 'Antes de entrar no mercado'; + @override String get intro => 'O mercado é um espaço compartilhado entre vizinhas e vizinhos. Ao continuar, aceitas umas poucas regras simples:'; + @override String get ruleHonest => 'Seja honesto com as sementes que oferece'; + @override String get ruleLegal => 'Compartilhe apenas o que pode compartilhar onde vive'; + @override String get ruleRespect => 'Trata bem as pessoas — sem spam nem abusos'; + @override String get publicNote => 'O que você publicar aqui é público, e podem ficar cópias mesmo que você retire depois.'; + @override String get viewLegal => 'Privacidade e regras'; + @override String get accept => 'Aceito'; + @override String get decline => 'Agora não'; +} + +// Path: report +class _Translations$report$pt_BR extends Translations$report$pt { + _Translations$report$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get offer => 'Denunciar esta oferta'; + @override String get person => 'Denunciar esta pessoa'; + @override String get title => 'Denunciar'; + @override String get prompt => 'O que se passa?'; + @override String get reasonSpam => 'Spam ou uma burla'; + @override String get reasonAbuse => 'Abusivo ou desrespeitoso'; + @override String get reasonIllegal => 'Sementes que não deviam ser oferecidas'; + @override String get reasonOther => 'Outra coisa'; + @override String get detailsHint => 'Acrescenta detalhes (opcional)'; + @override String get send => 'Enviar denúncia'; + @override String get sentHidden => 'Denúncia enviada — já não voltas a ver isto'; + @override String get failed => 'Não foi possível enviar a denúncia — verifica a sua ligação'; + @override String get alsoBlock => 'Bloquear também esta pessoa'; +} + +// Path: block +class _Translations$block$pt_BR extends Translations$block$pt { + _Translations$block$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get action => 'Bloquear esta pessoa'; + @override String get confirmTitle => 'Bloquear esta pessoa?'; + @override String get confirmBody => 'Deixa de ver as suas ofertas e mensagens. Pode desbloqueá-la mais tarde em Pessoas bloqueadas, na configuração de compartilhamento.'; + @override String get confirm => 'Bloquear'; + @override String get blockedToast => 'Pessoa bloqueada — as suas ofertas e mensagens ficam ocultas'; + @override String get manageTitle => 'Pessoas bloqueadas'; + @override String get manageEmpty => 'Você não bloqueou ninguém'; + @override String get unblock => 'Desbloquear'; +} + +// Path: intro.slides +class _Translations$intro$slides$pt_BR extends Translations$intro$slides$pt { + _Translations$intro$slides$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override late final _Translations$intro$slides$welcome$pt_BR welcome = _Translations$intro$slides$welcome$pt_BR._(_root); + @override late final _Translations$intro$slides$inventory$pt_BR inventory = _Translations$intro$slides$inventory$pt_BR._(_root); + @override late final _Translations$intro$slides$privacy$pt_BR privacy = _Translations$intro$slides$privacy$pt_BR._(_root); + @override late final _Translations$intro$slides$share$pt_BR share = _Translations$intro$slides$share$pt_BR._(_root); + @override late final _Translations$intro$slides$plantare$pt_BR plantare = _Translations$intro$slides$plantare$pt_BR._(_root); +} + +// Path: unit.handful +class _Translations$unit$handful$pt_BR extends Translations$unit$handful$pt { + _Translations$unit$handful$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get singular => 'mão-cheia'; + @override String get plural => 'mãos-cheias'; +} + +// Path: unit.teaspoon +class _Translations$unit$teaspoon$pt_BR extends Translations$unit$teaspoon$pt { + _Translations$unit$teaspoon$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get singular => 'colher de chá'; + @override String get plural => 'colheres de chá'; +} + +// Path: unit.spoon +class _Translations$unit$spoon$pt_BR extends Translations$unit$spoon$pt { + _Translations$unit$spoon$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get singular => 'colher'; + @override String get plural => 'colheres'; +} + +// Path: unit.cup +class _Translations$unit$cup$pt_BR extends Translations$unit$cup$pt { + _Translations$unit$cup$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get singular => 'chávena'; + @override String get plural => 'chávenas'; +} + +// Path: unit.jar +class _Translations$unit$jar$pt_BR extends Translations$unit$jar$pt { + _Translations$unit$jar$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get singular => 'frasco'; + @override String get plural => 'frascos'; +} + +// Path: unit.sack +class _Translations$unit$sack$pt_BR extends Translations$unit$sack$pt { + _Translations$unit$sack$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get singular => 'saco'; + @override String get plural => 'sacos'; +} + +// Path: unit.packet +class _Translations$unit$packet$pt_BR extends Translations$unit$packet$pt { + _Translations$unit$packet$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get singular => 'pacote'; + @override String get plural => 'pacotes'; +} + +// Path: unit.cob +class _Translations$unit$cob$pt_BR extends Translations$unit$cob$pt { + _Translations$unit$cob$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get singular => 'maçaroca'; + @override String get plural => 'maçarocas'; +} + +// Path: unit.pod +class _Translations$unit$pod$pt_BR extends Translations$unit$pod$pt { + _Translations$unit$pod$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get singular => 'vagem'; + @override String get plural => 'vagens'; +} + +// Path: unit.ear +class _Translations$unit$ear$pt_BR extends Translations$unit$ear$pt { + _Translations$unit$ear$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get singular => 'espiga'; + @override String get plural => 'espigas'; +} + +// Path: unit.head +class _Translations$unit$head$pt_BR extends Translations$unit$head$pt { + _Translations$unit$head$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get singular => 'cabeça'; + @override String get plural => 'cabeças'; +} + +// Path: unit.fruit +class _Translations$unit$fruit$pt_BR extends Translations$unit$fruit$pt { + _Translations$unit$fruit$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get singular => 'fruto'; + @override String get plural => 'frutos'; +} + +// Path: unit.bulb +class _Translations$unit$bulb$pt_BR extends Translations$unit$bulb$pt { + _Translations$unit$bulb$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get singular => 'bolbo'; + @override String get plural => 'bolbos'; +} + +// Path: unit.tuber +class _Translations$unit$tuber$pt_BR extends Translations$unit$tuber$pt { + _Translations$unit$tuber$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get singular => 'tubérculo'; + @override String get plural => 'tubérculos'; +} + +// Path: unit.seedHead +class _Translations$unit$seedHead$pt_BR extends Translations$unit$seedHead$pt { + _Translations$unit$seedHead$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get singular => 'capítulo'; + @override String get plural => 'capítulos'; +} + +// Path: unit.bunch +class _Translations$unit$bunch$pt_BR extends Translations$unit$bunch$pt { + _Translations$unit$bunch$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get singular => 'molho'; + @override String get plural => 'molhos'; +} + +// Path: unit.plant +class _Translations$unit$plant$pt_BR extends Translations$unit$plant$pt { + _Translations$unit$plant$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get singular => 'planta'; + @override String get plural => 'plantas'; +} + +// Path: unit.pot +class _Translations$unit$pot$pt_BR extends Translations$unit$pot$pt { + _Translations$unit$pot$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get singular => 'vaso'; + @override String get plural => 'vasos'; +} + +// Path: unit.tray +class _Translations$unit$tray$pt_BR extends Translations$unit$tray$pt { + _Translations$unit$tray$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get singular => 'tabuleiro'; + @override String get plural => 'tabuleiros'; +} + +// Path: unit.seedling +class _Translations$unit$seedling$pt_BR extends Translations$unit$seedling$pt { + _Translations$unit$seedling$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get singular => 'plântula'; + @override String get plural => 'plântulas'; +} + +// Path: unit.tree +class _Translations$unit$tree$pt_BR extends Translations$unit$tree$pt { + _Translations$unit$tree$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get singular => 'árvore'; + @override String get plural => 'árvores'; +} + +// Path: unit.cutting +class _Translations$unit$cutting$pt_BR extends Translations$unit$cutting$pt { + _Translations$unit$cutting$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get singular => 'estaca'; + @override String get plural => 'estacas'; +} + +// Path: unit.grams +class _Translations$unit$grams$pt_BR extends Translations$unit$grams$pt { + _Translations$unit$grams$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get singular => 'grama'; + @override String get plural => 'gramas'; +} + +// Path: unit.count +class _Translations$unit$count$pt_BR extends Translations$unit$count$pt { + _Translations$unit$count$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get singular => 'semente'; + @override String get plural => 'sementes'; +} + +// Path: intro.slides.welcome +class _Translations$intro$slides$welcome$pt_BR extends Translations$intro$slides$welcome$pt { + _Translations$intro$slides$welcome$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get title => 'A semente que te trouxe até aqui'; + @override String get body => 'Cada semente tradicional é uma carta escrita por milhares de gerações, passada de mão em mão. Somos o que somos graças a essa compartilha.'; +} + +// Path: intro.slides.inventory +class _Translations$intro$slides$inventory$pt_BR extends Translations$intro$slides$inventory$pt { + _Translations$intro$slides$inventory$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get title => 'O seu banco de sementes, no bolso'; + @override String get body => 'Anote o que tem, de que ano, quanto e de onde veio — com o nome que você usa. Uma foto e um nome chegam para começar.'; +} + +// Path: intro.slides.privacy +class _Translations$intro$slides$privacy$pt_BR extends Translations$intro$slides$privacy$pt { + _Translations$intro$slides$privacy$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get title => 'Seu, e só seu'; + @override String get body => 'Sem conta, sem internet, sem rastreadores. Os seus dados vivem cifrados no seu aparelho, e só o que você escolher é compartilhado.'; +} + +// Path: intro.slides.share +class _Translations$intro$slides$share$pt_BR extends Translations$intro$slides$share$pt { + _Translations$intro$slides$share$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get title => 'Compartilhar, como sempre se fez'; + @override String get body => 'Ofereça o que sobra — dar, trocar ou vender — e deixe que alguém perto de você o encontre. Só se mostra uma distância aproximada, nunca a sua morada; o acordo fecha-se em pessoa.'; +} + +// Path: intro.slides.plantare +class _Translations$intro$slides$plantare$pt_BR extends Translations$intro$slides$plantare$pt { + _Translations$intro$slides$plantare$pt_BR._(TranslationsPtBr root) : this._root = root, super.internal(root); + + final TranslationsPtBr _root; // ignore: unused_field + + // Translations + @override String get title => 'Semear é multiplicar'; + @override String get body => 'Com um Plantare, quem recebe semente promete devolver uma parte mais tarde. E como devolvê-la implica cultivá-la, cada empréstimo multiplica o comum.'; +} + +/// The flat map containing all translations for locale . +/// Only for edge cases! For simple maps, use the map function of this library. +/// +/// The Dart AOT compiler has issues with very large switch statements, +/// so the map is split into smaller functions (512 entries each). +extension on TranslationsPtBr { + dynamic _flatMapFunction(String path) { + return switch (path) { + 'avatar.title' => 'A sua foto ou avatar', + 'avatar.fromPhoto' => 'Tirar ou escolher uma foto', + 'avatar.illustration' => 'Ou escolhe um desenho', + 'avatar.remove' => 'Remover', + 'favorites.title' => 'Favoritos', + 'favorites.empty' => 'Ainda não tem favoritos. Salve ofertas que goste do mercado.', + 'favorites.save' => 'Salvar nos favoritos', + 'favorites.remove' => 'Remover dos favoritos', + 'favorites.unavailable' => 'Já não está disponível', + 'savedSearches.title' => 'Pesquisas salvas', + 'savedSearches.empty' => 'Ainda não há pesquisas salvas. Salve uma pesquisa no mercado e te avisamos quando aparecer algo parecido na sua zona.', + 'savedSearches.save' => 'Salvar esta pesquisa', + 'savedSearches.nameLabel' => 'Dá um nome a esta pesquisa', + 'savedSearches.namePlaceholder' => 'ex.: Tomates perto de mim', + 'savedSearches.saved' => 'Pesquisa salva — vamos te avisar sobre novas correspondências perto de você', + 'savedSearches.openTooltip' => 'Pesquisas salvas', + 'savedSearches.delete' => 'Eliminar', + 'savedSearches.deleteConfirm' => 'Eliminar esta pesquisa salva?', + 'savedSearches.newMatchesBadge' => ({required Object n}) => '${n} novas', + 'savedSearches.alert' => ({required Object label}) => 'Sementes perto de você: ${label}', + 'seedSaving.title' => 'Guardar a sua semente', + 'seedSaving.subtitle' => 'O que é preciso para manter a variedade fiel', + 'seedSaving.lifeCycle' => 'Ciclo', + 'seedSaving.cycleAnnual' => 'Anual', + 'seedSaving.cycleBiennial' => 'Bienal — dá semente no 2.º ano', + 'seedSaving.cyclePerennial' => 'Perene', + 'seedSaving.pollination' => 'Polinização', + 'seedSaving.pollSelf' => 'Autopoliniza-se', + 'seedSaving.pollCross' => 'Cruza-se com outras', + 'seedSaving.pollMixed' => 'Autopoliniza-se, mas às vezes cruza', + 'seedSaving.byInsect' => 'por insetos', + 'seedSaving.byWind' => 'pelo vento', + 'seedSaving.isolation' => 'Separe-a', + 'seedSaving.isolationRange' => ({required Object min, required Object max}) => '${min}–${max} m de outras variedades', + 'seedSaving.isolationSingle' => ({required Object min}) => '${min} m de outras variedades', + 'seedSaving.plants' => 'Guarde de várias plantas', + 'seedSaving.plantsValue' => ({required Object n}) => 'De pelo menos ${n} plantas', + 'seedSaving.processing' => 'Como limpá-la', + 'seedSaving.procDry' => 'Semente seca (debulhar)', + 'seedSaving.procWet' => 'Semente húmida (fermentar e lavar)', + 'seedSaving.difficulty' => 'Dificuldade', + 'seedSaving.diffEasy' => 'Fácil', + 'seedSaving.diffMedium' => 'Média', + 'seedSaving.diffHard' => 'Difícil', + 'seedSaving.advisory' => 'Orientativo — adapte-o ao seu clima e variedade.', + 'seedSaving.sourcePrefix' => 'Fonte', + 'calendar.title' => 'Este mês', + 'calendar.filterChip' => 'Este mês', + 'calendar.selfNote' => 'O que você anotou nas suas variedades.', + 'calendar.nothing' => ({required Object month}) => 'Nada anotado para ${month}.', + 'app.title' => 'Tane', + 'bootstrap.failed' => 'O Tane não conseguiu iniciar', + 'bootstrap.retry' => 'Tentar de novo', + 'common.save' => 'Salvar', + 'common.cancel' => 'Cancelar', + 'common.delete' => 'Eliminar', + 'common.edit' => 'Editar', + 'common.type' => 'Tipo', + 'common.comingSoon' => 'Em breve', + 'common.offline' => 'Sem ligação — a compartilha está em pausa', + 'home.tagline' => 'Compartilha e cultiva sementes locais', + 'home.openMarket' => 'Mercado', + 'home.openMarketSubtitle' => 'Descobre e compartilha sementes por perto', + 'home.yourInventory' => 'O seu inventário', + 'home.yourInventorySubtitle' => 'Gere as suas sementes', + 'photo.camera' => 'Tirar uma foto', + 'photo.gallery' => 'Escolher da galeria', + 'photo.setAsCover' => 'Usar como capa', + 'photo.isCover' => 'Foto de capa', + 'photo.deleteConfirm' => 'Eliminar esta foto?', + 'menu.tagline' => 'o seu banco de sementes', + 'menu.inventory' => 'Inventário', + 'menu.market' => 'Mercado', + 'menu.profile' => 'O seu perfil', + 'menu.chat' => 'Conversas', + 'menu.wishlist' => 'Favoritos', + 'menu.following' => 'A seguir', + 'menu.plantares' => 'Plantares', + 'menu.sales' => 'Vendas', + 'menu.calendar' => 'Calendário', + 'menu.settings' => 'Definições', + 'settings.language' => 'Idioma', + 'settings.systemLanguage' => 'Idioma do sistema', + 'settings.langEs' => 'Español', + 'settings.langEn' => 'English', + 'settings.langPt' => 'Português', + 'settings.langPtBr' => 'Português (Brasil)', + 'settings.langAst' => 'Asturianu', + 'settings.langFr' => 'Français', + 'settings.langDe' => 'Deutsch', + 'settings.langJa' => '日本語', + 'settings.about' => 'Acerca de', + 'settings.aboutText' => 'Inventário local e cifrado para sementes tradicionais. AGPL-3.0.', + 'settings.aboutOpen' => 'Acerca do Tane', + 'backup.title' => 'Cópia de segurança', + 'backup.autoBackupTitle' => 'Cópias automáticas', + '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 é salva automaticamente a cada ${days} dias', + 'backup.exportJson' => 'Salvar 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', + 'backup.importJsonSubtitle' => 'Recupera uma cópia salva — nada fica duplicado', + 'backup.exportCsv' => 'Exportar para uma folha de cálculo', + 'backup.exportCsvSubtitle' => 'Uma lista simples para Excel ou LibreOffice — sem fotos', + 'backup.importCsv' => 'Importar uma lista', + 'backup.importCsvSubtitle' => 'Acrescenta entradas a partir de uma folha de cálculo', + 'backup.importConfirmTitle' => 'Restaurar uma cópia?', + 'backup.importConfirmBody' => 'As entradas fundem-se com o seu inventário; quando a mesma entrada existe dos dois lados, vence a versão mais recente. Nada fica duplicado.', + 'backup.importCsvConfirmTitle' => 'Importar uma lista?', + 'backup.importCsvConfirmBody' => 'Cada linha é acrescentada como uma entrada nova. Não funde nem substitui, por isso importar o mesmo arquivo duas vezes acrescenta-o duas vezes.', + 'backup.importAction' => 'Importar', + 'backup.exportSaved' => 'Cópia salva', + 'backup.cancelled' => 'Cancelado', + 'backup.importDone' => ({required Object added, required Object updated}) => 'Importado: ${added} novas, ${updated} atualizadas', + 'backup.importCsvDone' => ({required Object count}) => '${count} entradas acrescentadas', + 'backup.importFailed' => 'Este arquivo não pôde ser lido como uma cópia do Tane', + 'backup.failed' => 'Algo correu mal', + 'backup.recoveryTitle' => 'O seu código de recuperação', + 'backup.recoverySubtitle' => 'Imprime-o e guarda-o bem: abre as suas cópias noutro aparelho', + 'backup.recoveryIntro' => 'Este código abre as suas cópias salvas e recupera o seu banco em qualquer aparelho. Guarde duas cópias em papel em lugares seguros, como a sua melhor semente. Quem o tiver pode ler as suas cópias, por isso não o compartilhe com ninguém.', + 'backup.recoveryCopy' => 'Copiar', + 'backup.recoverySave' => 'Salvar a folha', + 'backup.recoverySheetTitle' => 'Tane — a sua folha de recuperação', + 'backup.recoveryPromptTitle' => 'Escreve o seu código de recuperação', + 'backup.recoveryPromptBody' => 'Esta cópia foi salva com outro código. Escreve o código da sua folha de recuperação para a abrir.', + 'backup.recoveryWrongCode' => 'Esse código não abre esta cópia', + 'about.title' => 'Acerca de', + 'about.kanji' => '種', + 'about.tagline' => 'Uma aplicação local e descentralizada para gerir e compartilhar sementes e plântulas tradicionais.', + 'about.intro' => 'O Tane (種, "semente" em japonês) ajuda pessoas e coletivos a manter um inventário amigável do seu banco de sementes, decidir o que oferecem e compartilhá-lo localmente — sem um intermediário central que possa controlar, censurar ou ser multado por isso. O seu nome vem de tanemaki (種まき), "semear / espalhar sementes". O objetivo é prático e político ao mesmo tempo: apoiar as variedades tradicionais e fazer frente ao monopólio das sementes.', + 'about.heritage' => 'O nome honra as antigas tradições japonesas de ajuda mútua à volta do arroz — yui (trabalho comunitário compartilhado) e tanomoshi (fundos de reciprocidade) — que inspiraram o Plantare em papel, a "moeda comunitária de troca de sementes" (BAH-Semillero, 2009, CC-BY-SA). O Tane é o Plantare digital.', + 'about.version' => 'Versão', + 'about.license' => 'Licença', + 'about.licenseValue' => 'AGPL-3.0', + 'about.website' => 'Sítio web', + 'about.sourceCode' => 'Código-fonte', + 'about.translate' => 'Ajuda a traduzir', + 'about.translateSubtitle' => 'Ajuda a trazer o Tane para o seu idioma', + 'about.openSourceLicenses' => 'Licenças de código aberto', + 'about.openSourceLicensesSubtitle' => 'Bibliotecas de terceiros e as suas licenças', + 'about.copyright' => ({required Object years}) => '© ${years} Associação Comunes, sob AGPLv3', + 'intro.skip' => 'Saltar', + 'intro.next' => 'Seguinte', + 'intro.start' => 'Começar', + 'intro.menuEntry' => 'Como funciona o Tane', + 'intro.slides.welcome.title' => 'A semente que te trouxe até aqui', + 'intro.slides.welcome.body' => 'Cada semente tradicional é uma carta escrita por milhares de gerações, passada de mão em mão. Somos o que somos graças a essa compartilha.', + 'intro.slides.inventory.title' => 'O seu banco de sementes, no bolso', + 'intro.slides.inventory.body' => 'Anote o que tem, de que ano, quanto e de onde veio — com o nome que você usa. Uma foto e um nome chegam para começar.', + 'intro.slides.privacy.title' => 'Seu, e só seu', + 'intro.slides.privacy.body' => 'Sem conta, sem internet, sem rastreadores. Os seus dados vivem cifrados no seu aparelho, e só o que você escolher é compartilhado.', + 'intro.slides.share.title' => 'Compartilhar, como sempre se fez', + 'intro.slides.share.body' => 'Ofereça o que sobra — dar, trocar ou vender — e deixe que alguém perto de você o encontre. Só se mostra uma distância aproximada, nunca a sua morada; o acordo fecha-se em pessoa.', + 'intro.slides.plantare.title' => 'Semear é multiplicar', + 'intro.slides.plantare.body' => 'Com um Plantare, quem recebe semente promete devolver uma parte mais tarde. E como devolvê-la implica cultivá-la, cada empréstimo multiplica o comum.', + 'inventory.title' => 'Inventário', + 'inventory.searchHint' => 'Procurar sementes', + 'inventory.empty' => 'Ainda não há sementes. Toca em + para adicionar a primeira.', + 'inventory.noMatches' => 'Nenhuma semente corresponde aos seus filtros.', + 'inventory.clearFilters' => 'Limpar filtros', + 'inventory.uncategorized' => 'Sem categoria', + 'inventory.needsReproductionFilter' => 'Para reproduzir', + 'inventory.loadError' => 'Não foi possível abrir o seu banco de sementes. Talvez estivesse ocupado — tenta de novo.', + 'inventory.retry' => 'Tentar de novo', + 'draft.capture' => 'Capturar fotos', + 'draft.captured' => ({required Object n}) => '${n} capturadas para catalogar', + 'draft.triageTitle' => 'Para catalogar', + 'draft.triageCount' => ({required Object n}) => '${n} para catalogar', + 'draft.untitled' => 'Sem nome', + 'draft.nameField' => 'Dá um nome a esta semente', + 'draft.nameHint' => 'O que é?', + 'draft.suggestFromPhoto' => 'Sugerir nome a partir da foto', + 'draft.discard' => 'Descartar', + 'quickAdd.title' => 'Adicionar uma semente', + 'quickAdd.labelField' => 'Nome', + 'quickAdd.labelRequired' => 'Dá-lhe um nome', + 'quickAdd.addPhoto' => 'Adicionar foto', + 'quickAdd.quantity' => 'Quanto?', + 'quickAdd.more' => 'Adicionar mais…', + 'quickAdd.save' => 'Salvar', + 'quickAdd.saveAndAddAnother' => 'Salvar e adicionar outra', + 'quickAdd.addedCount' => ({required Object n}) => '${n} adicionadas', + 'quickAdd.cancel' => 'Cancelar', + 'detail.notFound' => 'Esta semente já não está aqui.', + 'detail.lots' => 'Lotes', + 'detail.noLots' => 'Ainda não há lotes.', + 'detail.names' => 'Também conhecida como', + 'detail.addName' => 'Adicionar nome', + 'detail.links' => 'Ligações', + 'detail.addLink' => 'Adicionar ligação', + 'detail.linkUrl' => 'URL', + 'detail.linkTitle' => 'Título (opcional)', + 'detail.reference' => 'Saber mais', + 'detail.refGbif' => 'GBIF', + 'detail.refWikipedia' => 'Wikipédia', + 'detail.refWikispecies' => 'Wikispecies', + 'detail.notes' => 'Notas', + 'detail.addLot' => 'Adicionar lote', + 'detail.editLot' => 'Editar lote', + 'detail.deleteConfirm' => 'Eliminar esta semente?', + 'detail.year' => ({required Object year}) => 'Ano ${year}', + 'detail.noYear' => 'Ano desconhecido', + 'germination.title' => 'Germinação', + 'germination.add' => 'Adicionar teste', + 'germination.sampleSize' => 'Tamanho da amostra', + 'germination.germinated' => 'Germinadas', + 'germination.none' => 'Ainda não há testes de germinação.', + 'germination.result' => ({required Object percent}) => '${percent}%', + 'viability.expiringSoon' => 'Usa ou reproduz nesta época', + 'viability.expiringSoonYears' => ({required Object years}) => 'Usa ou reproduz nesta época · dura ~${years} anos', + 'viability.expired' => 'Passou a viabilidade típica — reproduzir', + 'viability.expiredYears' => ({required Object years}) => 'Passou a viabilidade típica (~${years} anos) — reproduzir', + 'editVariety.title' => 'Editar semente', + 'editVariety.name' => 'Nome', + 'editVariety.category' => 'Categoria', + 'editVariety.notes' => 'Notas', + 'editVariety.species' => 'Espécie (do catálogo)', + 'editVariety.speciesHint' => 'Procura uma espécie…', + 'editVariety.speciesSuggested' => 'Sugerida pelo nome', + 'editVariety.organic' => 'Biológica', + 'editVariety.organicHint' => 'Cultivada em modo biológico', + 'addLot.title' => 'Adicionar lote', + 'addLot.year' => 'Data de colheita', + 'addLot.quantity' => 'Quanto?', + 'addLot.amount' => 'Quantidade', + 'harvest.pickTitle' => 'Escolhe mês / ano', + 'harvest.anyMonth' => 'Qualquer mês', + 'harvest.noDate' => 'Definir data de colheita', + 'harvest.monthNames.0' => 'janeiro', + 'harvest.monthNames.1' => 'fevereiro', + 'harvest.monthNames.2' => 'março', + 'harvest.monthNames.3' => 'abril', + 'harvest.monthNames.4' => 'maio', + 'harvest.monthNames.5' => 'junho', + 'harvest.monthNames.6' => 'julho', + 'harvest.monthNames.7' => 'agosto', + 'harvest.monthNames.8' => 'setembro', + 'harvest.monthNames.9' => 'outubro', + 'harvest.monthNames.10' => 'novembro', + 'harvest.monthNames.11' => 'dezembro', + 'lotType.seed' => 'Sementes', + 'lotType.plant' => 'Planta', + 'lotType.seedling' => 'Plântula', + 'lotType.tree' => 'Árvore / arbusto', + 'lotType.bulb' => 'Bolbo / tubérculo', + 'lotType.cutting' => 'Estaca', + 'presentation.title' => 'Apresentação', + 'presentation.none' => 'Sem indicar', + 'presentation.pot' => 'Vaso', + 'presentation.tray' => 'Tabuleiro', + 'presentation.plug' => 'Alvéolo', + 'presentation.bareRoot' => 'Raiz nua', + 'presentation.rootBall' => 'Torrão', + 'provenance.section' => 'De onde vem', + 'provenance.seedsFrom' => 'Sementes de', + 'provenance.seedsFromHint' => 'Quem as cultivou ou ofereceu', + 'provenance.place' => 'Lugar', + 'provenance.placeHint' => 'De onde vêm (com a região)', + 'provenance.addSeedsFrom' => 'Sementes de', + 'provenance.addPlace' => 'Lugar', + 'abundance.add' => 'Quanta tenho', + 'abundance.title' => 'Quanta tenho', + 'abundance.none' => 'Sem indicar', + 'abundance.plentyToShare' => 'De sobra para compartilhar', + 'abundance.enoughToShare' => 'Bastante, para compartilhar com moderação', + 'abundance.enoughForMe' => 'Suficiente para mim', + 'abundance.runningLow' => 'Resta pouca', + 'share.add' => 'Compartilhas esta?', + 'share.title' => 'Compartilhas esta?', + 'share.nudge' => 'Tem de sobra: podia compartilhar um pouco.', + 'share.price' => 'Preço', + 'share.priceHint' => 'Deixe vazio para combinar depois', + 'share.private' => 'Só para mim', + 'share.gift' => 'Para dar', + 'share.exchange' => 'Para trocar', + 'share.sell' => 'À venda', + 'share.filterChip' => 'Compartilho', + 'share.printCatalog' => 'Imprimir o que compartilho', + 'share.catalogTitle' => 'O que compartilho', + 'share.catalogSaved' => 'Catálogo salvo', + 'share.cancelled' => 'Cancelado', + 'printLabels.action' => 'Imprimir etiquetas', + 'printLabels.title' => 'Imprimir etiquetas', + 'printLabels.selectHint' => 'Escolhe as sementes para imprimir as etiquetas', + 'printLabels.selectAll' => 'Selecionar tudo', + 'printLabels.selected' => ({required Object n}) => '${n} selecionadas', + 'printLabels.none' => 'Seleciona sementes primeiro', + 'printLabels.format' => 'Tamanho da etiqueta', + 'printLabels.formatStickers' => 'Autocolantes pequenos', + 'printLabels.formatStickersHint' => 'Muitas etiquetas pequenas por folha — para colar em envelopes', + 'printLabels.formatCards' => 'Cartões grandes', + 'printLabels.formatCardsHint' => 'Menos etiquetas, maiores — para frascos e caixas', + 'printLabels.count' => ({required Object n}) => '${n} etiquetas', + 'printLabels.save' => 'Salvar etiquetas', + 'printLabels.saved' => 'Etiquetas salvas', + 'printLabels.cancelled' => 'Cancelado', + 'scan.action' => 'Digitalizar um rótulo de semente', + 'scan.title' => 'Digitalizar um rótulo', + 'scan.notALabel' => 'Esse código não é um rótulo de semente', + 'scan.addTitle' => 'Não está na sua coleção', + 'scan.addBody' => ({required Object label}) => 'Adicionar “${label}” às suas sementes?', + 'scan.add' => 'Adicionar', + 'scan.added' => 'Adicionado à sua coleção', + 'cropCalendar.add' => 'Calendário de cultivo', + 'cropCalendar.title' => 'Calendário de cultivo', + 'cropCalendar.sow' => 'Sementeira', + 'cropCalendar.transplant' => 'Transplante', + 'cropCalendar.flowering' => 'Floração', + 'cropCalendar.fruiting' => 'Frutificação', + 'cropCalendar.seedHarvest' => 'Colheita de semente', + 'cropCalendar.editorHint' => 'Anote os meses típicos desta variedade na sua zona — são suas notas.', + 'cropCalendar.unset' => '—', + 'needsReproduction.label' => 'Reproduzir nesta época', + 'needsReproduction.hint' => 'Cultiva-a antes que a semente acabe', + 'needsReproduction.badge' => 'Por reproduzir', + 'preservation.add' => 'Como está guardada', + 'preservation.title' => 'Como está guardada', + 'preservation.none' => 'Sem indicar', + 'preservation.jarWithDesiccant' => 'Frasco com agente secante', + 'preservation.glassJar' => 'Frasco de vidro', + 'preservation.paperEnvelope' => 'Envelope de papel', + 'preservation.paperBag' => 'Saco de papel', + 'preservation.plasticBag' => 'Saco de plástico', + 'conditionCheck.advanced' => 'Armazenamento e detalhes de banco de sementes', + 'conditionCheck.title' => 'Verificações de armazenamento', + 'conditionCheck.add' => 'Adicionar verificação', + 'conditionCheck.containers' => 'Frascos / recipientes', + 'conditionCheck.desiccant' => 'Agente secante', + 'conditionCheck.none' => 'Ainda não há verificações de armazenamento.', + 'conditionCheck.summary' => ({required Object count, required Object state}) => '${count} frasco(s) · ${state}', + 'desiccant.none' => 'Nenhum', + 'desiccant.add' => 'Adicionar', + 'desiccant.replace' => 'Substituir', + 'desiccant.dry' => 'Azul — seco', + 'desiccant.fresh' => 'Acabado de renovar', + 'unit.aFew' => 'algumas', + 'unit.some' => 'bastantes', + 'unit.plenty' => 'muitas', + 'unit.pinch' => 'uma pitada', + 'unit.handful.singular' => 'mão-cheia', + 'unit.handful.plural' => 'mãos-cheias', + 'unit.teaspoon.singular' => 'colher de chá', + 'unit.teaspoon.plural' => 'colheres de chá', + 'unit.spoon.singular' => 'colher', + 'unit.spoon.plural' => 'colheres', + 'unit.cup.singular' => 'chávena', + 'unit.cup.plural' => 'chávenas', + 'unit.jar.singular' => 'frasco', + 'unit.jar.plural' => 'frascos', + 'unit.sack.singular' => 'saco', + 'unit.sack.plural' => 'sacos', + 'unit.packet.singular' => 'pacote', + 'unit.packet.plural' => 'pacotes', + 'unit.cob.singular' => 'maçaroca', + 'unit.cob.plural' => 'maçarocas', + 'unit.pod.singular' => 'vagem', + 'unit.pod.plural' => 'vagens', + 'unit.ear.singular' => 'espiga', + 'unit.ear.plural' => 'espigas', + 'unit.head.singular' => 'cabeça', + 'unit.head.plural' => 'cabeças', + 'unit.fruit.singular' => 'fruto', + 'unit.fruit.plural' => 'frutos', + 'unit.bulb.singular' => 'bolbo', + 'unit.bulb.plural' => 'bolbos', + 'unit.tuber.singular' => 'tubérculo', + 'unit.tuber.plural' => 'tubérculos', + 'unit.seedHead.singular' => 'capítulo', + 'unit.seedHead.plural' => 'capítulos', + 'unit.bunch.singular' => 'molho', + 'unit.bunch.plural' => 'molhos', + 'unit.plant.singular' => 'planta', + 'unit.plant.plural' => 'plantas', + 'unit.pot.singular' => 'vaso', + 'unit.pot.plural' => 'vasos', + 'unit.tray.singular' => 'tabuleiro', + 'unit.tray.plural' => 'tabuleiros', + 'unit.seedling.singular' => 'plântula', + 'unit.seedling.plural' => 'plântulas', + 'unit.tree.singular' => 'árvore', + 'unit.tree.plural' => 'árvores', + 'unit.cutting.singular' => 'estaca', + 'unit.cutting.plural' => 'estacas', + 'unit.grams.singular' => 'grama', + 'unit.grams.plural' => 'gramas', + 'unit.count.singular' => 'semente', + 'unit.count.plural' => 'sementes', + 'market.title' => 'Sementes perto de você', + 'market.subtitle' => 'O que outras pessoas compartilham por perto', + 'market.notSetUp' => 'Ainda não configurou a compartilha', + 'market.notSetUpBody' => 'Ativa a compartilha para ver e dar sementes a pessoas por perto. Mantém-se aproximado — a sua zona, nunca a sua morada exata.', + 'market.setUp' => 'Configurar a compartilha', + 'market.cantReach' => 'Não é possível ligar aos servidores neste momento', + 'market.cantReachBody' => 'Tenta de novo, ou verifica os servidores na configuração avançada.', + 'market.retry' => 'Tentar de novo', + 'market.setArea' => 'Indica a sua zona', + 'market.setAreaBody' => 'Diz ao mercado a sua zona aproximada para ver sementes por perto.', + 'market.searching' => 'A procurar pela sua zona…', + 'market.empty' => 'Ainda não há sementes compartilhadas perto de você', + 'market.searchHint' => 'Procurar nestas sementes', + 'market.noMatches' => 'Nenhuma semente compartilhada corresponde à procura', + 'market.near' => 'Perto de você', + 'market.contact' => 'Mensagem', + 'market.mine' => 'Você', + 'market.configTitle' => 'Configuração de compartilha', + 'market.setupIntro' => 'Compartilhar com pessoas por perto é opcional. Basta indicar a sua zona aproximada — já está conectado a servidores comunitários compartilhados para que outras pessoas encontrem o que você oferece, sem nenhuma empresa no meio.', + 'market.areaLabel' => 'A sua zona', + 'market.areaHelp' => 'Mantém-se aproximado de propósito — a sua zona, nunca um ponto exato.', + 'market.areaSet' => 'A sua zona está definida — aproximada, nunca o seu ponto exato', + 'market.areaNotSet' => 'Zona por definir — usa a sua localização, ou adiciona um código em Avançado', + 'market.advanced' => 'Avançado', + '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' => 'Escolha que servidores usar. Deixe assim se não souber.', + 'market.serversAdvanced' => 'Adicionar outro servidor', + 'market.serverAddress' => 'Endereço do servidor', + 'market.serverInvalid' => 'Introduz um endereço válido (wss://…)', + 'market.save' => 'Salvar', + 'market.saved' => 'Salvo', + 'market.wanted' => 'Procuro', + 'market.shareMine' => 'Compartilhar as minhas sementes', + 'market.sharedCount' => ({required Object n}) => 'Compartilhadas ${n} sementes', + 'market.nothingToShare' => 'Marca primeiro algumas sementes para dar, trocar ou vender', + 'market.useLocation' => 'Usar a minha localização aproximada', + 'market.locationFailed' => 'Não foi possível obter a sua localização — verifica se a localização está ativa e a permissão concedida', + 'market.queued' => 'Salvo — vamos compartilhá-las quando você tiver conexão', + 'market.shareFailed' => 'Não foi possível contactar os servidores — as suas sementes não foram compartilhadas. Tenta de novo daqui a pouco.', + 'market.rangeLabel' => 'Até onde procurar', + 'market.rangeNear' => 'Muito perto', + 'market.rangeArea' => 'Pela minha zona', + 'market.rangeRegion' => 'A minha região', + 'market.sharedBy' => 'Compartilhado por', + 'market.noProfile' => 'Esta pessoa ainda não compartilhou o seu perfil', + 'market.copyId' => 'Copiar código', + 'market.idCopied' => 'Código copiado', + 'market.photo' => 'Foto', + 'profile.title' => 'O seu perfil', + 'profile.name' => 'Nome', + 'profile.nameHint' => 'Como os outros te veem', + 'profile.about' => 'Sobre você', + 'profile.aboutHint' => 'Uma linha — o que cultivas, onde', + 'profile.g1' => 'Endereço Ğ1 (opcional)', + 'profile.g1Hint' => 'Para que te paguem em Ğ1 — separado da sua chave', + 'profile.yourId' => 'A sua identidade', + 'profile.idHelp' => 'Compartilha-a para que te reconheçam', + 'profile.copy' => 'Copiar', + 'profile.copied' => 'Copiado', + 'profile.save' => 'Salvar', + 'profile.saved' => 'Perfil salvo', + 'profile.identities' => 'As suas identidades', + 'profile.identitiesHelp' => 'Mantém identidades separadas — cada uma com as suas mensagens e contactos. Todas vêm da sua única cópia de segurança, por isso mudar não acrescenta nada para lembrar.', + 'profile.identityLabel' => ({required Object n}) => 'Identidade ${n}', + 'profile.current' => 'Em uso', + 'profile.newIdentity' => 'Nova identidade', + 'profile.switchTitle' => 'Mudar de identidade?', + 'profile.switchBody' => 'As mensagens e contatos são guardados separadamente para cada identidade. Pode voltar quando quiser.', + 'profile.switchAction' => 'Mudar', + 'chatList.title' => 'Mensagens', + 'chatList.empty' => 'Ainda não há conversas. Escreve a alguém a partir do mercado.', + 'chat.title' => 'Conversa', + 'chat.hint' => 'Escreve uma mensagem…', + 'chat.send' => 'Enviar', + 'chat.empty' => 'Ainda não há mensagens — diz olá', + 'chat.offline' => 'Configura a compartilha para enviar mensagens', + 'chat.payG1' => 'Pagar em Ğ1', + 'chat.g1Copied' => 'Endereço Ğ1 copiado — cola-o na sua carteira', + 'chat.today' => 'Hoje', + 'chat.yesterday' => 'Ontem', + 'chat.sendError' => 'Não foi possível enviar — verifica a sua ligação', + 'chat.noLinks' => 'Não são permitidos links nas mensagens', + 'trust.none' => 'Ainda ninguém os avaliza', + 'trust.count' => ({required Object n}) => 'Avalizada por ${n}', + 'trust.vouch' => 'Conheço esta pessoa', + 'trust.vouched' => 'Avalizas esta pessoa', + 'trust.circle' => 'No seu círculo', + 'yourPeople.title' => 'A sua gente', + 'yourPeople.help' => 'Pessoas que conheces e avalizas, e pessoas que te avalizam.', + 'yourPeople.youVouchFor' => 'Você avaliza', + 'yourPeople.vouchesForYou' => 'Avalizam-te', + 'yourPeople.youVouchForEmpty' => 'Ainda não avaliza ninguém. Quando conhecer alguém, abra a conversa com essa pessoa e toque em "Conheço esta pessoa".', + 'yourPeople.vouchesForYouEmpty' => 'Ainda ninguém te avaliza', + 'yourPeople.revoke' => 'Deixar de avalizar', + 'yourPeople.revokeConfirm' => 'Deixar de avalizar esta pessoa?', + 'yourPeople.offline' => 'Sem conexão — tente novamente quando estiver online', + 'ratings.rate' => 'Avaliar esta pessoa', + 'ratings.edit' => 'Editar a sua avaliação', + 'ratings.commentHint' => 'Como correu? (opcional)', + 'ratings.fromYourCircle' => ({required Object n}) => '${n} de pessoas que conheces', + 'ratings.retract' => 'Remover a sua avaliação', + 'ratings.saved' => 'Avaliação salva', + 'notifications.newMessageFrom' => ({required Object name}) => 'Nova mensagem de ${name}', + 'plantare.title' => 'Plantares', + 'plantare.help' => 'Um Plantare é o compromisso de reproduzir uma semente e devolver uma parte — assim uma variedade continua a viajar de mão em mão. Não é uma venda.', + 'plantare.add' => 'Adicionar compromisso', + 'plantare.empty' => 'Ainda não há compromissos. Quando compartilhar ou receber semente com o compromisso de reproduzi-la e devolver algo, anote aqui.', + 'plantare.iReturn' => 'Reproduzo e devolvo eu', + 'plantare.owedToMe' => 'Devolvem-me a mim', + 'plantare.direction' => 'Quem reproduz e devolve', + 'plantare.counterparty' => 'Com quem?', + 'plantare.counterpartyHint' => 'Uma pessoa ou um coletivo (opcional)', + 'plantare.owed' => 'O que é devolvido?', + 'plantare.owedHint' => 'p. ex. um punhado na próxima temporada (opcional)', + 'plantare.note' => 'Nota (opcional)', + 'plantare.save' => 'Salvar', + 'plantare.markReturned' => 'Marcar devolvido', + 'plantare.markForgiven' => 'Dar por saldado', + 'plantare.reopen' => 'Reabrir', + 'plantare.delete' => 'Remover', + 'plantare.statusReturned' => 'Devolvido', + 'plantare.statusForgiven' => 'Saldado', + 'plantare.openSection' => 'Pendentes', + _ => null, + } ?? switch (path) { + 'plantare.settledSection' => 'Feitos', + 'plantare.removeConfirm' => 'Remover este compromisso?', + 'plantare.returnBy' => ({required Object date}) => 'Devolver até ${date}', + 'plantare.overdue' => 'vencido', + 'plantare.dueByLabel' => 'Devolver até (opcional)', + 'plantare.dueByHint' => 'Um lembrete gentil, nunca imposto', + 'plantare.pickDate' => 'Escolher data', + 'plantare.clearDate' => 'Limpar data', + 'plantare.sectionTitle' => 'Compromissos', + 'plantare.propose' => 'Propor um Plantaré assinado', + 'plantare.proposeHelp' => 'Ambos mantêm a mesma promessa, assinada pelos dois — prova de que esta semente mudou de mãos e será cultivada e devolvida.', + 'plantare.proposeTo' => ({required Object name}) => 'Com ${name}', + 'plantare.sent' => 'Proposta enviada — a aguardar que assinem', + 'plantare.seedLabel' => 'Que semente?', + 'plantare.seedHint' => 'A variedade a que se refere esta promessa', + 'plantare.returnKindLabel' => 'O que volta?', + 'plantare.returnSimilar' => 'Uma quantidade semelhante de semente', + 'plantare.returnSimilarNote' => 'polinização aberta · não transgénico · cultivado organicamente', + 'plantare.returnWork' => 'Algumas horas de trabalho', + 'plantare.returnOther' => 'Outra coisa', + 'plantare.workHoursLabel' => 'Quantas horas?', + 'plantare.proposalsSection' => 'À espera da sua resposta', + 'plantare.incomingFrom' => ({required Object name}) => '${name} propõe um Plantaré', + 'plantare.accept' => 'Aceitar e assinar', + 'plantare.declineAction' => 'Recusar', + 'plantare.declineReasonHint' => 'Motivo (opcional)', + 'plantare.acceptedToast' => 'Assinado — agora ambos o mantêm', + 'plantare.declinedToast' => 'Recusado', + 'plantare.badgeAwaiting' => 'A aguardar assinatura', + 'plantare.badgeSigned' => 'Assinado por ambos', + 'plantare.badgeDeclined' => 'Recusado', + 'plantare.offline' => 'Você está offline — será enviado quando reconectar', + 'handover.title' => 'Dei ou recebi sementes', + 'handover.help' => 'Uma oferta, uma troca ou uma venda: anota-o, com promessa de devolver semente ou sem ela.', + 'handover.iGave' => 'Dei sementes', + 'handover.iReceived' => 'Recebi sementes', + 'handover.whichLot' => 'De que lote?', + 'handover.howMuch' => 'Quanto?', + 'handover.allOfIt' => 'Tudo', + 'handover.partOfIt' => 'Uma parte', + 'handover.paymentChip' => 'Houve dinheiro pelo meio', + 'handover.promiseGave' => 'Vão devolver-me semente', + 'handover.promiseReceived' => 'Vou devolver semente', + 'history.title' => 'História deste lote', + 'history.tooltip' => 'História', + 'history.sowToday' => 'Semeado hoje', + 'history.harvestToday' => 'Colhido hoje', + 'history.sownRecorded' => 'Sementeira registada', + 'history.harvestRecorded' => 'Colheita registada', + 'history.movementReceived' => 'Recebido', + 'history.movementGiven' => 'Oferecido', + 'history.movementSown' => 'Semeado', + 'history.movementHarvested' => 'Colhido', + 'history.movementGerminationTest' => 'Teste de germinação', + 'history.movementSplit' => 'Dividido em lotes', + 'history.movementDiscarded' => 'Descartado', + 'history.created' => 'Adicionado à sua coleção', + 'history.from' => ({required Object origin}) => 'De ${origin}', + 'history.germinationResult' => ({required Object percent}) => 'Teste de germinação — ${percent}%', + 'history.linkedEarlier' => 'Vem de um lote anterior', + 'history.outcomeQuestion' => 'Como correu?', + 'history.outcomeGood' => 'Bem', + 'history.outcomeMixed' => 'Mais ou menos', + 'history.outcomePoor' => 'Mal', + 'history.outcomeNoteHint' => 'Uma nota para o seu eu futuro (opcional)', + 'history.outcomeSaved' => 'Registado', + 'history.ratedGood' => 'Correu bem', + 'history.ratedMixed' => 'Correu mais ou menos', + 'history.ratedPoor' => 'Correu mal', + 'history.outcomeTitle' => 'Nota da estação', + 'history.outcomeYear' => ({required Object year}) => 'Estação ${year}', + 'history.isolationHint' => ({required Object meters}) => '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', + 'sale.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.', + 'sale.add' => 'Registar venda', + '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?', + 'sale.counterpartyHint' => 'Uma pessoa ou um coletivo (opcional)', + 'sale.amount' => 'Montante', + 'sale.currency' => 'Moeda', + 'sale.currencyHint' => '€, Ğ1, horas… (opcional)', + 'sale.hours' => 'horas', + 'sale.note' => 'Nota (opcional)', + 'sale.save' => 'Salvar', + 'sale.delete' => 'Remover', + 'sale.removeConfirm' => 'Remover esta venda?', + 'legal.title' => 'Privacidade e regras', + 'legal.subtitle' => 'A sua privacidade, as regras do mercado e a legalidade das sementes', + 'legal.privacyTitle' => 'A sua privacidade', + 'legal.privacyBody' => 'O Tane funciona sem conta, e tudo o que você registra fica no seu dispositivo, cifrado. Não há publicidade, nem rastreadores, nem servidor do Tane.\n\nNada é compartilhado a não ser que você queira: quando publica uma oferta ou o seu perfil, ou envia uma mensagem, viaja por servidores comunitários. As ofertas levam apenas uma zona aproximada — nunca a sua morada.\n\nO que publica é público, e podem ficar cópias mesmo depois de você retirar — por isso compartilhe 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 é responsável pelo que oferece e envia.\n\nNo mercado: seja honesto com suas sementes, ofereça apenas o que pode compartilhar, trate bem as pessoas e não faça spam. Pode 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 compartilhar 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 entrar no mercado', + 'marketGate.intro' => 'O mercado é um espaço compartilhado entre vizinhas e vizinhos. Ao continuar, aceitas umas poucas regras simples:', + 'marketGate.ruleHonest' => 'Seja honesto com as sementes que oferece', + 'marketGate.ruleLegal' => 'Compartilhe apenas o que pode compartilhar onde vive', + 'marketGate.ruleRespect' => 'Trata bem as pessoas — sem spam nem abusos', + 'marketGate.publicNote' => 'O que você publicar aqui é público, e podem ficar cópias mesmo que você retire depois.', + 'marketGate.viewLegal' => 'Privacidade e regras', + 'marketGate.accept' => 'Aceito', + 'marketGate.decline' => 'Agora não', + 'report.offer' => 'Denunciar esta oferta', + 'report.person' => 'Denunciar esta pessoa', + 'report.title' => 'Denunciar', + 'report.prompt' => 'O que se passa?', + 'report.reasonSpam' => 'Spam ou uma burla', + 'report.reasonAbuse' => 'Abusivo ou desrespeitoso', + 'report.reasonIllegal' => 'Sementes que não deviam ser oferecidas', + 'report.reasonOther' => 'Outra coisa', + 'report.detailsHint' => 'Acrescenta detalhes (opcional)', + 'report.send' => 'Enviar denúncia', + 'report.sentHidden' => 'Denúncia enviada — já não voltas a ver isto', + 'report.failed' => 'Não foi possível enviar a denúncia — verifica a sua ligação', + 'report.alsoBlock' => 'Bloquear também esta pessoa', + 'block.action' => 'Bloquear esta pessoa', + 'block.confirmTitle' => 'Bloquear esta pessoa?', + 'block.confirmBody' => 'Deixa de ver as suas ofertas e mensagens. Pode desbloqueá-la mais tarde em Pessoas bloqueadas, na configuração de compartilhamento.', + 'block.confirm' => 'Bloquear', + 'block.blockedToast' => 'Pessoa bloqueada — as suas ofertas e mensagens ficam ocultas', + 'block.manageTitle' => 'Pessoas bloqueadas', + 'block.manageEmpty' => 'Você não bloqueou ninguém', + 'block.unblock' => 'Desbloquear', + _ => null, + }; + } +} diff --git a/apps/app_seeds/lib/ui/settings_screen.dart b/apps/app_seeds/lib/ui/settings_screen.dart index ff619ef..fa49126 100644 --- a/apps/app_seeds/lib/ui/settings_screen.dart +++ b/apps/app_seeds/lib/ui/settings_screen.dart @@ -57,6 +57,7 @@ List<(AppLocale, String)> _languages(Translations t) => [ (AppLocale.ast, t.settings.langAst), (AppLocale.en, t.settings.langEn), (AppLocale.pt, t.settings.langPt), + (AppLocale.ptBr, t.settings.langPtBr), (AppLocale.fr, t.settings.langFr), (AppLocale.de, t.settings.langDe), (AppLocale.ja, t.settings.langJa), diff --git a/apps/app_seeds/test/services/i18n_pt_br_locale_test.dart b/apps/app_seeds/test/services/i18n_pt_br_locale_test.dart new file mode 100644 index 0000000..84a4d3a --- /dev/null +++ b/apps/app_seeds/test/services/i18n_pt_br_locale_test.dart @@ -0,0 +1,41 @@ +import 'package:flutter/widgets.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:tane/i18n/strings.g.dart'; + +/// Brazilian Portuguese (`pt_BR`) is the first locale in the app to carry a +/// region code alongside a base language that already has its own locale +/// (`pt`, European Portuguese) — a case slang and the settings picker had +/// never exercised before. These tests pin that both variants are wired +/// distinctly and neither silently falls back to the other. +void main() { + test('pt and pt_BR are both supported, as distinct locales', () { + expect( + AppLocaleUtils.supportedLocales, + containsAll([const Locale('pt'), const Locale('pt', 'BR')]), + ); + }); + + test('core strings resolve in Brazilian Portuguese', () { + final ptBr = AppLocale.ptBr.buildSync(); + expect(ptBr.menu.inventory, 'Inventário'); + expect(ptBr.common.save, 'Salvar'); + expect(ptBr.settings.langPtBr, 'Português (Brasil)'); + }); + + test('pt_BR wording diverges from pt where Brazilian usage differs', () { + final pt = AppLocale.pt.buildSync(); + final ptBr = AppLocale.ptBr.buildSync(); + // European Portuguese uses "Guardar"; Brazilian software uses "Salvar". + expect(pt.common.save, 'Guardar'); + expect(ptBr.common.save, 'Salvar'); + }); + + test('pt_BR translates a key added after the initial pt rollout', () { + final en = AppLocale.en.buildSync(); + final ptBr = AppLocale.ptBr.buildSync(); + // savedSearches was a later addition; if pt_BR were missing it, this + // would silently surface the English fallback instead. + expect(ptBr.savedSearches.title, isNot(en.savedSearches.title)); + expect(ptBr.savedSearches.title, isNotEmpty); + }); +}