Wires the 'coming soon' market card to a real discovery screen (mockups 04/05): - MarketScreen: opens an OfferTransport lazily; local-first, so it degrades to a human 'set up sharing' prompt when no relay/area is set or the net is down. - Discovers offers by the saved coarse area, lists them with human reciprocity labels (gift/swap/for sale), 'near you' (never exact location), price only for sales. Config sheet to set area + community servers (no bundled public relays). - Threaded via TaneApp(social, socialSettings) — null keeps the card 'coming soon' (so Block 1 tests pass unchanged); main wires it live. - i18n en/es/pt (market.*), reuses share.* for type labels. 3 market widget tests + home tests green; app_seeds analyzes clean.
349 lines
13 KiB
JSON
349 lines
13 KiB
JSON
{
|
|
"app": {
|
|
"title": "Tanemaki"
|
|
},
|
|
"common": {
|
|
"save": "Save",
|
|
"cancel": "Cancel",
|
|
"delete": "Delete",
|
|
"edit": "Edit",
|
|
"type": "Type",
|
|
"comingSoon": "Coming soon"
|
|
},
|
|
"home": {
|
|
"tagline": "Share and grow local seeds",
|
|
"openMarket": "Open market",
|
|
"openMarketSubtitle": "Browse and exchange",
|
|
"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": "Wishlist",
|
|
"following": "Following",
|
|
"settings": "Settings"
|
|
},
|
|
"settings": {
|
|
"language": "Language",
|
|
"systemLanguage": "System language",
|
|
"langEs": "Español",
|
|
"langEn": "English",
|
|
"langPt": "Português",
|
|
"about": "About",
|
|
"aboutText": "Local-first, encrypted inventory for traditional seeds. AGPL-3.0.",
|
|
"aboutOpen": "About Tanemaki"
|
|
},
|
|
"backup": {
|
|
"title": "Backup & restore",
|
|
"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 Tanemaki 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": "Tanemaki — 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": "Tanemaki (種まき, \"to sow / scatter seeds\" in Japanese; short name Tane, 種 \"seed\") 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. 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). Tanemaki is the digital Plantare.",
|
|
"version": "Version",
|
|
"license": "License",
|
|
"licenseValue": "AGPL-3.0",
|
|
"website": "Website",
|
|
"openSourceLicenses": "Open-source licenses",
|
|
"openSourceLicensesSubtitle": "Third-party libraries and their licenses"
|
|
},
|
|
"intro": {
|
|
"skip": "Skip",
|
|
"next": "Next",
|
|
"start": "Get started",
|
|
"menuEntry": "How Tanemaki 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"
|
|
},
|
|
"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…",
|
|
"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.",
|
|
"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"
|
|
},
|
|
"cropCalendar": {
|
|
"add": "Crop calendar",
|
|
"title": "Crop calendar",
|
|
"sow": "Sow",
|
|
"transplant": "Transplant",
|
|
"flowering": "Flowering",
|
|
"fruiting": "Fruiting",
|
|
"seedHarvest": "Seed harvest",
|
|
"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": "Add a community server and your area to see and share seeds nearby. Everything stays coarse — never your exact address.",
|
|
"setUp": "Set up sharing",
|
|
"searching": "Looking around your area…",
|
|
"empty": "No seeds shared near you yet",
|
|
"near": "Near you",
|
|
"configTitle": "Sharing setup",
|
|
"areaLabel": "Area code",
|
|
"areaHelp": "Kept coarse on purpose — roughly your zone, never an exact spot.",
|
|
"serversLabel": "Community servers",
|
|
"serversHelp": "One address per line — run by seed networks or collectives, not a company.",
|
|
"save": "Save",
|
|
"saved": "Saved",
|
|
"wanted": "Wanted"
|
|
}
|
|
}
|