tane/apps/app_seeds/lib/i18n/strings_en.g.dart
vjrj be5977d688 fix(ux): filter clear pinned, no-match text, instant avatar save, market avatar, favourites, WoT drawer
Six reported UX issues:
- Inventory 'clear filters' is now pinned outside the horizontal scroll,
  always visible — you no longer have to scroll past every chip to find it.
- Empty result now reads 'No seeds match your filters' (not 'no seeds
  yet') when a SEARCH or the 'this month' filter hid everything — the
  'filtered' flag was missing query + sowThisMonthOnly. Guarded by a test.
- Profile avatar saves + publishes the instant you pick it, so it no
  longer looks saved when it wasn't (the Save button sits below the fold).
- Market offer detail shows the author's real avatar (photo/illustration)
  instead of a generic person icon — resolves + caches their kind:0 picture.
- 'Wishlist' renamed to Favourites/Favoritos (en/es/pt/ast).
- The drawer 'following' item now opens the web-of-trust 'your people'
  screen when the social layer is on (was a dead item).

analyze clean; inventory/market/home + overflow suites green.
2026-07-12 02:56:08 +02:00

2827 lines
90 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

///
/// Generated file. Do not edit.
///
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
// dart format off
part of 'strings.g.dart';
// Path: <root>
typedef TranslationsEn = Translations; // ignore: unused_element
class Translations with BaseTranslations<AppLocale, Translations> {
/// Returns the current translations of the given [context].
///
/// Usage:
/// final t = Translations.of(context);
static Translations of(BuildContext context) => InheritedLocaleData.of<AppLocale, Translations>(context).translations;
/// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred.
Translations({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
: assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'),
$meta = meta ?? TranslationMetadata(
locale: AppLocale.en,
overrides: overrides ?? {},
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
) {
$meta.setFlatMapFunction(_flatMapFunction);
}
/// Metadata for the translations of <en>.
@override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map
dynamic operator[](String key) => $meta.getTranslation(key);
late final Translations _root = this; // ignore: unused_field
Translations $copyWith({TranslationMetadata<AppLocale, Translations>? meta}) => Translations(meta: meta ?? this.$meta);
// Translations
late final Translations$avatar$en avatar = Translations$avatar$en.internal(_root);
late final Translations$seedSaving$en seedSaving = Translations$seedSaving$en.internal(_root);
late final Translations$calendar$en calendar = Translations$calendar$en.internal(_root);
late final Translations$app$en app = Translations$app$en.internal(_root);
late final Translations$bootstrap$en bootstrap = Translations$bootstrap$en.internal(_root);
late final Translations$common$en common = Translations$common$en.internal(_root);
late final Translations$home$en home = Translations$home$en.internal(_root);
late final Translations$photo$en photo = Translations$photo$en.internal(_root);
late final Translations$menu$en menu = Translations$menu$en.internal(_root);
late final Translations$settings$en settings = Translations$settings$en.internal(_root);
late final Translations$backup$en backup = Translations$backup$en.internal(_root);
late final Translations$about$en about = Translations$about$en.internal(_root);
late final Translations$intro$en intro = Translations$intro$en.internal(_root);
late final Translations$inventory$en inventory = Translations$inventory$en.internal(_root);
late final Translations$draft$en draft = Translations$draft$en.internal(_root);
late final Translations$quickAdd$en quickAdd = Translations$quickAdd$en.internal(_root);
late final Translations$detail$en detail = Translations$detail$en.internal(_root);
late final Translations$germination$en germination = Translations$germination$en.internal(_root);
late final Translations$viability$en viability = Translations$viability$en.internal(_root);
late final Translations$editVariety$en editVariety = Translations$editVariety$en.internal(_root);
late final Translations$addLot$en addLot = Translations$addLot$en.internal(_root);
late final Translations$harvest$en harvest = Translations$harvest$en.internal(_root);
late final Translations$lotType$en lotType = Translations$lotType$en.internal(_root);
late final Translations$presentation$en presentation = Translations$presentation$en.internal(_root);
late final Translations$provenance$en provenance = Translations$provenance$en.internal(_root);
late final Translations$abundance$en abundance = Translations$abundance$en.internal(_root);
late final Translations$share$en share = Translations$share$en.internal(_root);
late final Translations$printLabels$en printLabels = Translations$printLabels$en.internal(_root);
late final Translations$cropCalendar$en cropCalendar = Translations$cropCalendar$en.internal(_root);
late final Translations$needsReproduction$en needsReproduction = Translations$needsReproduction$en.internal(_root);
late final Translations$preservation$en preservation = Translations$preservation$en.internal(_root);
late final Translations$conditionCheck$en conditionCheck = Translations$conditionCheck$en.internal(_root);
late final Translations$desiccant$en desiccant = Translations$desiccant$en.internal(_root);
late final Translations$unit$en unit = Translations$unit$en.internal(_root);
late final Translations$market$en market = Translations$market$en.internal(_root);
late final Translations$profile$en profile = Translations$profile$en.internal(_root);
late final Translations$chatList$en chatList = Translations$chatList$en.internal(_root);
late final Translations$chat$en chat = Translations$chat$en.internal(_root);
late final Translations$trust$en trust = Translations$trust$en.internal(_root);
late final Translations$yourPeople$en yourPeople = Translations$yourPeople$en.internal(_root);
late final Translations$ratings$en ratings = Translations$ratings$en.internal(_root);
late final Translations$notifications$en notifications = Translations$notifications$en.internal(_root);
late final Translations$plantare$en plantare = Translations$plantare$en.internal(_root);
late final Translations$handover$en handover = Translations$handover$en.internal(_root);
late final Translations$sale$en sale = Translations$sale$en.internal(_root);
}
// Path: avatar
class Translations$avatar$en {
Translations$avatar$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'Your photo or avatar'
String get title => 'Your photo or avatar';
/// en: 'Take or choose a photo'
String get fromPhoto => 'Take or choose a photo';
/// en: 'Or pick an illustration'
String get illustration => 'Or pick an illustration';
/// en: 'Remove'
String get remove => 'Remove';
}
// Path: seedSaving
class Translations$seedSaving$en {
Translations$seedSaving$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'Saving its seed'
String get title => 'Saving its seed';
/// en: 'What it takes to keep the variety true'
String get subtitle => 'What it takes to keep the variety true';
/// en: 'Cycle'
String get lifeCycle => 'Cycle';
/// en: 'Annual'
String get cycleAnnual => 'Annual';
/// en: 'Biennial — seeds in year 2'
String get cycleBiennial => 'Biennial — seeds in year 2';
/// en: 'Perennial'
String get cyclePerennial => 'Perennial';
/// en: 'Pollination'
String get pollination => 'Pollination';
/// en: 'Self-pollinating'
String get pollSelf => 'Self-pollinating';
/// en: 'Crosses with others'
String get pollCross => 'Crosses with others';
/// en: 'Self-pollinates, sometimes crosses'
String get pollMixed => 'Self-pollinates, sometimes crosses';
/// en: 'by insects'
String get byInsect => 'by insects';
/// en: 'on the wind'
String get byWind => 'on the wind';
/// en: 'Keep apart'
String get isolation => 'Keep apart';
/// en: '{min}{max} m from other varieties'
String isolationRange({required Object min, required Object max}) => '${min}${max} m from other varieties';
/// en: '{min} m from other varieties'
String isolationSingle({required Object min}) => '${min} m from other varieties';
/// en: 'Save from several plants'
String get plants => 'Save from several plants';
/// en: 'From at least {n} plants'
String plantsValue({required Object n}) => 'From at least ${n} plants';
/// en: 'Cleaning the seed'
String get processing => 'Cleaning the seed';
/// en: 'Dry seed (thresh)'
String get procDry => 'Dry seed (thresh)';
/// en: 'Wet seed (ferment and rinse)'
String get procWet => 'Wet seed (ferment and rinse)';
/// en: 'Difficulty'
String get difficulty => 'Difficulty';
/// en: 'Easy'
String get diffEasy => 'Easy';
/// en: 'Medium'
String get diffMedium => 'Medium';
/// en: 'Hard'
String get diffHard => 'Hard';
/// en: 'General guidance — adapt it to your climate and variety.'
String get advisory => 'General guidance — adapt it to your climate and variety.';
/// en: 'Source'
String get sourcePrefix => 'Source';
}
// Path: calendar
class Translations$calendar$en {
Translations$calendar$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'This month'
String get title => 'This month';
/// en: 'This month'
String get filterChip => 'This month';
/// en: 'What you've noted in your varieties.'
String get selfNote => 'What you\'ve noted in your varieties.';
/// en: 'Nothing noted for {month}.'
String nothing({required Object month}) => 'Nothing noted for ${month}.';
}
// Path: app
class Translations$app$en {
Translations$app$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'Tanemaki'
String get title => 'Tanemaki';
}
// Path: bootstrap
class Translations$bootstrap$en {
Translations$bootstrap$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'Tanemaki couldn't start'
String get failed => 'Tanemaki couldn\'t start';
/// en: 'Try again'
String get retry => 'Try again';
}
// Path: common
class Translations$common$en {
Translations$common$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'Save'
String get save => 'Save';
/// en: 'Cancel'
String get cancel => 'Cancel';
/// en: 'Delete'
String get delete => 'Delete';
/// en: 'Edit'
String get edit => 'Edit';
/// en: 'Type'
String get type => 'Type';
/// en: 'Coming soon'
String get comingSoon => 'Coming soon';
/// en: 'You're offline — sharing is paused'
String get offline => 'You\'re offline — sharing is paused';
}
// Path: home
class Translations$home$en {
Translations$home$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'Share and grow local seeds'
String get tagline => 'Share and grow local seeds';
/// en: 'Market'
String get openMarket => 'Market';
/// en: 'Discover and share seeds nearby'
String get openMarketSubtitle => 'Discover and share seeds nearby';
/// en: 'Your inventory'
String get yourInventory => 'Your inventory';
/// en: 'Manage your seeds'
String get yourInventorySubtitle => 'Manage your seeds';
}
// Path: photo
class Translations$photo$en {
Translations$photo$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'Take a photo'
String get camera => 'Take a photo';
/// en: 'Choose from gallery'
String get gallery => 'Choose from gallery';
/// en: 'Set as cover'
String get setAsCover => 'Set as cover';
/// en: 'Cover photo'
String get isCover => 'Cover photo';
/// en: 'Delete this photo?'
String get deleteConfirm => 'Delete this photo?';
}
// Path: menu
class Translations$menu$en {
Translations$menu$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'your seed bank'
String get tagline => 'your seed bank';
/// en: 'Inventory'
String get inventory => 'Inventory';
/// en: 'Market'
String get market => 'Market';
/// en: 'Your profile'
String get profile => 'Your profile';
/// en: 'Chat'
String get chat => 'Chat';
/// en: 'Favorites'
String get wishlist => 'Favorites';
/// en: 'Following'
String get following => 'Following';
/// en: 'Plantares'
String get plantares => 'Plantares';
/// en: 'Sales'
String get sales => 'Sales';
/// en: 'Calendar'
String get calendar => 'Calendar';
/// en: 'Settings'
String get settings => 'Settings';
}
// Path: settings
class Translations$settings$en {
Translations$settings$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'Language'
String get language => 'Language';
/// en: 'System language'
String get systemLanguage => 'System language';
/// en: 'Español'
String get langEs => 'Español';
/// en: 'English'
String get langEn => 'English';
/// en: 'Português'
String get langPt => 'Português';
/// en: 'Asturianu'
String get langAst => 'Asturianu';
/// en: 'About'
String get about => 'About';
/// en: 'Local-first, encrypted inventory for traditional seeds. AGPL-3.0.'
String get aboutText => 'Local-first, encrypted inventory for traditional seeds. AGPL-3.0.';
/// en: 'About Tanemaki'
String get aboutOpen => 'About Tanemaki';
}
// Path: backup
class Translations$backup$en {
Translations$backup$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'Backup & restore'
String get title => 'Backup & restore';
/// en: 'Automatic backups'
String get autoBackupTitle => 'Automatic backups';
/// en: 'Last copy saved {date}'
String autoBackupLast({required Object date}) => 'Last copy saved ${date}';
/// en: 'A copy is kept automatically in the background'
String get autoBackupNone => 'A copy is kept automatically in the background';
/// en: 'Save a backup'
String get exportJson => 'Save a backup';
/// en: 'A complete copy to keep safe, restore later or move to another device'
String get exportJsonSubtitle => 'A complete copy to keep safe, restore later or move to another device';
/// en: 'Restore a backup'
String get importJson => 'Restore a backup';
/// en: 'Bring a saved copy back — nothing gets duplicated'
String get importJsonSubtitle => 'Bring a saved copy back — nothing gets duplicated';
/// en: 'Export to a spreadsheet'
String get exportCsv => 'Export to a spreadsheet';
/// en: 'A simple list for Excel or LibreOffice — no photos'
String get exportCsvSubtitle => 'A simple list for Excel or LibreOffice — no photos';
/// en: 'Import a list'
String get importCsv => 'Import a list';
/// en: 'Add entries from a spreadsheet'
String get importCsvSubtitle => 'Add entries from a spreadsheet';
/// en: 'Restore a backup?'
String get importConfirmTitle => 'Restore a backup?';
/// en: 'Entries merge with your inventory; when the same entry exists on both sides, the newest version wins. Nothing gets duplicated.'
String get importConfirmBody => 'Entries merge with your inventory; when the same entry exists on both sides, the newest version wins. Nothing gets duplicated.';
/// en: 'Import a list?'
String get importCsvConfirmTitle => 'Import a list?';
/// en: 'Every row is added as a new entry. This does not merge or replace, so importing the same file twice adds it twice.'
String get importCsvConfirmBody => 'Every row is added as a new entry. This does not merge or replace, so importing the same file twice adds it twice.';
/// en: 'Import'
String get importAction => 'Import';
/// en: 'Copy saved'
String get exportSaved => 'Copy saved';
/// en: 'Cancelled'
String get cancelled => 'Cancelled';
/// en: 'Imported: {added} new, {updated} updated'
String importDone({required Object added, required Object updated}) => 'Imported: ${added} new, ${updated} updated';
/// en: 'Added {count} entries'
String importCsvDone({required Object count}) => 'Added ${count} entries';
/// en: 'This file could not be read as a Tanemaki copy'
String get importFailed => 'This file could not be read as a Tanemaki copy';
/// en: 'Something went wrong'
String get failed => 'Something went wrong';
/// en: 'Your recovery code'
String get recoveryTitle => 'Your recovery code';
/// en: 'Print it and keep it safe — it opens your copies on a new device'
String get recoverySubtitle => 'Print it and keep it safe — it opens your copies on a new device';
/// en: '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.'
String get 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.';
/// en: 'Copy'
String get recoveryCopy => 'Copy';
/// en: 'Save the sheet'
String get recoverySave => 'Save the sheet';
/// en: 'Tanemaki — your recovery sheet'
String get recoverySheetTitle => 'Tanemaki — your recovery sheet';
/// en: 'Enter your recovery code'
String get recoveryPromptTitle => 'Enter your recovery code';
/// en: 'This copy was saved with another code. Type the code from your recovery sheet to open it.'
String get recoveryPromptBody => 'This copy was saved with another code. Type the code from your recovery sheet to open it.';
/// en: 'That code doesn't open this copy'
String get recoveryWrongCode => 'That code doesn\'t open this copy';
}
// Path: about
class Translations$about$en {
Translations$about$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'About'
String get title => 'About';
/// en: '種まき'
String get kanji => '種まき';
/// en: 'A local-first, decentralized app for managing and sharing traditional seeds and seedlings.'
String get tagline => 'A local-first, decentralized app for managing and sharing traditional seeds and seedlings.';
/// en: '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.'
String get 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.';
/// en: '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.'
String get 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.';
/// en: 'Version'
String get version => 'Version';
/// en: 'License'
String get license => 'License';
/// en: 'AGPL-3.0'
String get licenseValue => 'AGPL-3.0';
/// en: 'Website'
String get website => 'Website';
/// en: 'Open-source licenses'
String get openSourceLicenses => 'Open-source licenses';
/// en: 'Third-party libraries and their licenses'
String get openSourceLicensesSubtitle => 'Third-party libraries and their licenses';
/// en: '© {years} Comunes Association, under AGPLv3'
String copyright({required Object years}) => '© ${years} Comunes Association, under AGPLv3';
}
// Path: intro
class Translations$intro$en {
Translations$intro$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'Skip'
String get skip => 'Skip';
/// en: 'Next'
String get next => 'Next';
/// en: 'Get started'
String get start => 'Get started';
/// en: 'How Tanemaki works'
String get menuEntry => 'How Tanemaki works';
late final Translations$intro$slides$en slides = Translations$intro$slides$en.internal(_root);
}
// Path: inventory
class Translations$inventory$en {
Translations$inventory$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'Inventory'
String get title => 'Inventory';
/// en: 'Search seeds'
String get searchHint => 'Search seeds';
/// en: 'No seeds yet. Tap + to add your first.'
String get empty => 'No seeds yet. Tap + to add your first.';
/// en: 'No seeds match your filters.'
String get noMatches => 'No seeds match your filters.';
/// en: 'Clear filters'
String get clearFilters => 'Clear filters';
/// en: 'Uncategorized'
String get uncategorized => 'Uncategorized';
/// en: 'To regrow'
String get needsReproductionFilter => 'To regrow';
/// en: 'Couldn't open your seed bank. It may just have been busy — try again.'
String get loadError => 'Couldn\'t open your seed bank. It may just have been busy — try again.';
/// en: 'Try again'
String get retry => 'Try again';
}
// Path: draft
class Translations$draft$en {
Translations$draft$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'Capture photos'
String get capture => 'Capture photos';
/// en: '{n} captured to catalogue'
String captured({required Object n}) => '${n} captured to catalogue';
/// en: 'To catalogue'
String get triageTitle => 'To catalogue';
/// en: '{n} to catalogue'
String triageCount({required Object n}) => '${n} to catalogue';
/// en: 'Unnamed'
String get untitled => 'Unnamed';
/// en: 'Name this seed'
String get nameField => 'Name this seed';
/// en: 'What is it?'
String get nameHint => 'What is it?';
/// en: 'Suggest name from photo'
String get suggestFromPhoto => 'Suggest name from photo';
/// en: 'Discard'
String get discard => 'Discard';
}
// Path: quickAdd
class Translations$quickAdd$en {
Translations$quickAdd$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'Add a seed'
String get title => 'Add a seed';
/// en: 'Name'
String get labelField => 'Name';
/// en: 'Give it a name'
String get labelRequired => 'Give it a name';
/// en: 'Add photo'
String get addPhoto => 'Add photo';
/// en: 'How much?'
String get quantity => 'How much?';
/// en: 'Add more…'
String get more => 'Add more…';
/// en: 'Save'
String get save => 'Save';
/// en: 'Save & add another'
String get saveAndAddAnother => 'Save & add another';
/// en: '{n} added'
String addedCount({required Object n}) => '${n} added';
/// en: 'Cancel'
String get cancel => 'Cancel';
}
// Path: detail
class Translations$detail$en {
Translations$detail$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'This seed is no longer here.'
String get notFound => 'This seed is no longer here.';
/// en: 'Lots'
String get lots => 'Lots';
/// en: 'No lots yet.'
String get noLots => 'No lots yet.';
/// en: 'Also known as'
String get names => 'Also known as';
/// en: 'Add name'
String get addName => 'Add name';
/// en: 'Links'
String get links => 'Links';
/// en: 'Add link'
String get addLink => 'Add link';
/// en: 'URL'
String get linkUrl => 'URL';
/// en: 'Title (optional)'
String get linkTitle => 'Title (optional)';
/// en: 'Learn more'
String get reference => 'Learn more';
/// en: 'GBIF'
String get refGbif => 'GBIF';
/// en: 'Wikipedia'
String get refWikipedia => 'Wikipedia';
/// en: 'Wikispecies'
String get refWikispecies => 'Wikispecies';
/// en: 'Notes'
String get notes => 'Notes';
/// en: 'Add lot'
String get addLot => 'Add lot';
/// en: 'Edit lot'
String get editLot => 'Edit lot';
/// en: 'Delete this seed?'
String get deleteConfirm => 'Delete this seed?';
/// en: 'Year {year}'
String year({required Object year}) => 'Year ${year}';
/// en: 'Year unknown'
String get noYear => 'Year unknown';
}
// Path: germination
class Translations$germination$en {
Translations$germination$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'Germination'
String get title => 'Germination';
/// en: 'Add test'
String get add => 'Add test';
/// en: 'Sample size'
String get sampleSize => 'Sample size';
/// en: 'Germinated'
String get germinated => 'Germinated';
/// en: 'No germination tests yet.'
String get none => 'No germination tests yet.';
/// en: '{percent}%'
String result({required Object percent}) => '${percent}%';
}
// Path: viability
class Translations$viability$en {
Translations$viability$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'Use or reproduce this season'
String get expiringSoon => 'Use or reproduce this season';
/// en: 'Use or reproduce this season · keeps ~{years} yr'
String expiringSoonYears({required Object years}) => 'Use or reproduce this season · keeps ~${years} yr';
/// en: 'Past typical viability — reproduce'
String get expired => 'Past typical viability — reproduce';
/// en: 'Past typical viability (~{years} yr) — reproduce'
String expiredYears({required Object years}) => 'Past typical viability (~${years} yr) — reproduce';
}
// Path: editVariety
class Translations$editVariety$en {
Translations$editVariety$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'Edit seed'
String get title => 'Edit seed';
/// en: 'Name'
String get name => 'Name';
/// en: 'Category'
String get category => 'Category';
/// en: 'Notes'
String get notes => 'Notes';
/// en: 'Species (from catalog)'
String get species => 'Species (from catalog)';
/// en: 'Search a species…'
String get speciesHint => 'Search a species…';
/// en: 'Suggested from the name'
String get speciesSuggested => 'Suggested from the name';
/// en: 'Organic'
String get organic => 'Organic';
/// en: 'Grown organically (eco)'
String get organicHint => 'Grown organically (eco)';
}
// Path: addLot
class Translations$addLot$en {
Translations$addLot$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'Add lot'
String get title => 'Add lot';
/// en: 'Harvest date'
String get year => 'Harvest date';
/// en: 'How much?'
String get quantity => 'How much?';
/// en: 'Amount'
String get amount => 'Amount';
}
// Path: harvest
class Translations$harvest$en {
Translations$harvest$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'Select month / year'
String get pickTitle => 'Select month / year';
/// en: 'Any month'
String get anyMonth => 'Any month';
/// en: 'Set harvest date'
String get noDate => 'Set harvest date';
List<String> get monthNames => [
'January',
'February',
'March',
'April',
'May',
'June',
'July',
'August',
'September',
'October',
'November',
'December',
];
}
// Path: lotType
class Translations$lotType$en {
Translations$lotType$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'Seeds'
String get seed => 'Seeds';
/// en: 'Plant'
String get plant => 'Plant';
/// en: 'Seedling'
String get seedling => 'Seedling';
/// en: 'Tree / shrub'
String get tree => 'Tree / shrub';
/// en: 'Bulb / tuber'
String get bulb => 'Bulb / tuber';
/// en: 'Cutting'
String get cutting => 'Cutting';
}
// Path: presentation
class Translations$presentation$en {
Translations$presentation$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'Packaging'
String get title => 'Packaging';
/// en: 'Unspecified'
String get none => 'Unspecified';
/// en: 'Pot'
String get pot => 'Pot';
/// en: 'Tray'
String get tray => 'Tray';
/// en: 'Plug'
String get plug => 'Plug';
/// en: 'Bare-root'
String get bareRoot => 'Bare-root';
/// en: 'Root-ball'
String get rootBall => 'Root-ball';
}
// Path: provenance
class Translations$provenance$en {
Translations$provenance$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'Where it's from'
String get section => 'Where it\'s from';
/// en: 'Seeds from'
String get seedsFrom => 'Seeds from';
/// en: 'Who grew or gave them'
String get seedsFromHint => 'Who grew or gave them';
/// en: 'Place'
String get place => 'Place';
/// en: 'Where they come from (with region)'
String get placeHint => 'Where they come from (with region)';
/// en: 'Seeds from'
String get addSeedsFrom => 'Seeds from';
/// en: 'Place'
String get addPlace => 'Place';
}
// Path: abundance
class Translations$abundance$en {
Translations$abundance$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'How much I have'
String get add => 'How much I have';
/// en: 'How much I have'
String get title => 'How much I have';
/// en: 'Not set'
String get none => 'Not set';
/// en: 'Plenty to share'
String get plentyToShare => 'Plenty to share';
/// en: 'Enough to share a little'
String get enoughToShare => 'Enough to share a little';
/// en: 'Enough for me'
String get enoughForMe => 'Enough for me';
/// en: 'Running low'
String get runningLow => 'Running low';
}
// Path: share
class Translations$share$en {
Translations$share$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'Do you share it?'
String get add => 'Do you share it?';
/// en: 'Do you share it?'
String get title => 'Do you share it?';
/// en: 'You have plenty — you could share some.'
String get nudge => 'You have plenty — you could share some.';
/// en: 'Price'
String get price => 'Price';
/// en: 'Leave it empty to agree it later'
String get priceHint => 'Leave it empty to agree it later';
/// en: 'Just for me'
String get private => 'Just for me';
/// en: 'To give away'
String get gift => 'To give away';
/// en: 'To swap'
String get exchange => 'To swap';
/// en: 'For sale'
String get sell => 'For sale';
/// en: 'I share'
String get filterChip => 'I share';
/// en: 'Print what I share'
String get printCatalog => 'Print what I share';
/// en: 'What I share'
String get catalogTitle => 'What I share';
/// en: 'Catalog saved'
String get catalogSaved => 'Catalog saved';
/// en: 'Cancelled'
String get cancelled => 'Cancelled';
}
// Path: printLabels
class Translations$printLabels$en {
Translations$printLabels$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'Print labels'
String get action => 'Print labels';
/// en: 'Print labels'
String get title => 'Print labels';
/// en: 'Pick the seeds to print labels for'
String get selectHint => 'Pick the seeds to print labels for';
/// en: 'Select all'
String get selectAll => 'Select all';
/// en: '{n} selected'
String selected({required Object n}) => '${n} selected';
/// en: 'Select seeds first'
String get none => 'Select seeds first';
/// en: 'Label size'
String get format => 'Label size';
/// en: 'Small stickers'
String get formatStickers => 'Small stickers';
/// en: 'Many small labels per page — to peel onto packets'
String get formatStickersHint => 'Many small labels per page — to peel onto packets';
/// en: 'Large cards'
String get formatCards => 'Large cards';
/// en: 'Fewer, bigger labels — for jars and boxes'
String get formatCardsHint => 'Fewer, bigger labels — for jars and boxes';
/// en: '{n} labels'
String count({required Object n}) => '${n} labels';
/// en: 'Save labels'
String get save => 'Save labels';
/// en: 'Labels saved'
String get saved => 'Labels saved';
/// en: 'Cancelled'
String get cancelled => 'Cancelled';
}
// Path: cropCalendar
class Translations$cropCalendar$en {
Translations$cropCalendar$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'Crop calendar'
String get add => 'Crop calendar';
/// en: 'Crop calendar'
String get title => 'Crop calendar';
/// en: 'Sow'
String get sow => 'Sow';
/// en: 'Transplant'
String get transplant => 'Transplant';
/// en: 'Flowering'
String get flowering => 'Flowering';
/// en: 'Fruiting'
String get fruiting => 'Fruiting';
/// en: 'Seed harvest'
String get seedHarvest => 'Seed harvest';
/// en: 'Note the months typical for this variety in your area — these are your own notes.'
String get editorHint => 'Note the months typical for this variety in your area — these are your own notes.';
/// en: '—'
String get unset => '';
}
// Path: needsReproduction
class Translations$needsReproduction$en {
Translations$needsReproduction$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'To regrow this season'
String get label => 'To regrow this season';
/// en: 'Grow it out before the seed runs out'
String get hint => 'Grow it out before the seed runs out';
/// en: 'To regrow'
String get badge => 'To regrow';
}
// Path: preservation
class Translations$preservation$en {
Translations$preservation$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'How it's kept'
String get add => 'How it\'s kept';
/// en: 'How it's kept'
String get title => 'How it\'s kept';
/// en: 'Unspecified'
String get none => 'Unspecified';
/// en: 'Jar with drying agent'
String get jarWithDesiccant => 'Jar with drying agent';
/// en: 'Glass jar'
String get glassJar => 'Glass jar';
/// en: 'Paper envelope'
String get paperEnvelope => 'Paper envelope';
/// en: 'Paper bag'
String get paperBag => 'Paper bag';
/// en: 'Plastic bag'
String get plasticBag => 'Plastic bag';
}
// Path: conditionCheck
class Translations$conditionCheck$en {
Translations$conditionCheck$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'Storage & seed-bank details'
String get advanced => 'Storage & seed-bank details';
/// en: 'Storage checks'
String get title => 'Storage checks';
/// en: 'Add check'
String get add => 'Add check';
/// en: 'Jars / containers'
String get containers => 'Jars / containers';
/// en: 'Drying agent'
String get desiccant => 'Drying agent';
/// en: 'No storage checks yet.'
String get none => 'No storage checks yet.';
/// en: '{count} jar(s) · {state}'
String summary({required Object count, required Object state}) => '${count} jar(s) · ${state}';
}
// Path: desiccant
class Translations$desiccant$en {
Translations$desiccant$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'None'
String get none => 'None';
/// en: 'Add some'
String get add => 'Add some';
/// en: 'Replace it'
String get replace => 'Replace it';
/// en: 'Blue — dry'
String get dry => 'Blue — dry';
/// en: 'Just renewed'
String get fresh => 'Just renewed';
}
// Path: unit
class Translations$unit$en {
Translations$unit$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'a few'
String get aFew => 'a few';
/// en: 'some'
String get some => 'some';
/// en: 'plenty'
String get plenty => 'plenty';
/// en: 'a pinch'
String get pinch => 'a pinch';
late final Translations$unit$handful$en handful = Translations$unit$handful$en.internal(_root);
late final Translations$unit$teaspoon$en teaspoon = Translations$unit$teaspoon$en.internal(_root);
late final Translations$unit$spoon$en spoon = Translations$unit$spoon$en.internal(_root);
late final Translations$unit$cup$en cup = Translations$unit$cup$en.internal(_root);
late final Translations$unit$jar$en jar = Translations$unit$jar$en.internal(_root);
late final Translations$unit$sack$en sack = Translations$unit$sack$en.internal(_root);
late final Translations$unit$packet$en packet = Translations$unit$packet$en.internal(_root);
late final Translations$unit$cob$en cob = Translations$unit$cob$en.internal(_root);
late final Translations$unit$pod$en pod = Translations$unit$pod$en.internal(_root);
late final Translations$unit$ear$en ear = Translations$unit$ear$en.internal(_root);
late final Translations$unit$head$en head = Translations$unit$head$en.internal(_root);
late final Translations$unit$fruit$en fruit = Translations$unit$fruit$en.internal(_root);
late final Translations$unit$bulb$en bulb = Translations$unit$bulb$en.internal(_root);
late final Translations$unit$tuber$en tuber = Translations$unit$tuber$en.internal(_root);
late final Translations$unit$seedHead$en seedHead = Translations$unit$seedHead$en.internal(_root);
late final Translations$unit$bunch$en bunch = Translations$unit$bunch$en.internal(_root);
late final Translations$unit$plant$en plant = Translations$unit$plant$en.internal(_root);
late final Translations$unit$pot$en pot = Translations$unit$pot$en.internal(_root);
late final Translations$unit$tray$en tray = Translations$unit$tray$en.internal(_root);
late final Translations$unit$seedling$en seedling = Translations$unit$seedling$en.internal(_root);
late final Translations$unit$tree$en tree = Translations$unit$tree$en.internal(_root);
late final Translations$unit$cutting$en cutting = Translations$unit$cutting$en.internal(_root);
late final Translations$unit$grams$en grams = Translations$unit$grams$en.internal(_root);
late final Translations$unit$count$en count = Translations$unit$count$en.internal(_root);
}
// Path: market
class Translations$market$en {
Translations$market$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'Seeds near you'
String get title => 'Seeds near you';
/// en: 'What others are sharing nearby'
String get subtitle => 'What others are sharing nearby';
/// en: 'Sharing isn't set up yet'
String get notSetUp => 'Sharing isn\'t set up yet';
/// en: 'Turn on sharing to see and give seeds to people near you. It stays rough — your zone, never your exact address.'
String get notSetUpBody => 'Turn on sharing to see and give seeds to people near you. It stays rough — your zone, never your exact address.';
/// en: 'Set up sharing'
String get setUp => 'Set up sharing';
/// en: 'Can't reach the community servers right now'
String get cantReach => 'Can\'t reach the community servers right now';
/// en: 'Try again, or check the servers under Advanced setup.'
String get cantReachBody => 'Try again, or check the servers under Advanced setup.';
/// en: 'Retry'
String get retry => 'Retry';
/// en: 'Set your area'
String get setArea => 'Set your area';
/// en: 'Tell the market roughly where you are to see seeds nearby.'
String get setAreaBody => 'Tell the market roughly where you are to see seeds nearby.';
/// en: 'Looking around your area…'
String get searching => 'Looking around your area…';
/// en: 'No seeds shared near you yet'
String get empty => 'No seeds shared near you yet';
/// en: 'Search these seeds'
String get searchHint => 'Search these seeds';
/// en: 'No shared seeds match your search'
String get noMatches => 'No shared seeds match your search';
/// en: 'Near you'
String get near => 'Near you';
/// en: 'Message'
String get contact => 'Message';
/// en: 'You'
String get mine => 'You';
/// en: 'Sharing setup'
String get configTitle => 'Sharing setup';
/// en: '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.'
String get 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.';
/// en: 'Your area'
String get areaLabel => 'Your area';
/// en: 'Kept rough on purpose — your zone, never an exact spot.'
String get areaHelp => 'Kept rough on purpose — your zone, never an exact spot.';
/// en: 'Your area is set — kept coarse, never your exact spot'
String get areaSet => 'Your area is set — kept coarse, never your exact spot';
/// en: 'Area not set yet — use your location, or add a code under Advanced'
String get areaNotSet => 'Area not set yet — use your location, or add a code under Advanced';
/// en: 'Advanced'
String get advanced => 'Advanced';
/// en: 'Area code'
String get areaCodeLabel => 'Area code';
/// en: 'A short code like sp3e9 — not a place name'
String get areaCodeHint => 'A short code like sp3e9 — not a place name';
/// en: 'Community servers'
String get serversLabel => 'Community servers';
/// en: 'One address per line (wss://…). Leave the defaults if unsure.'
String get serversHelp => 'One address per line (wss://…). Leave the defaults if unsure.';
/// en: 'Add another server'
String get serversAdvanced => 'Add another server';
/// en: 'Save'
String get save => 'Save';
/// en: 'Saved'
String get saved => 'Saved';
/// en: 'Wanted'
String get wanted => 'Wanted';
/// en: 'Share my seeds'
String get shareMine => 'Share my seeds';
/// en: 'Shared {n} seeds nearby'
String sharedCount({required Object n}) => 'Shared ${n} seeds nearby';
/// en: 'Mark some seeds to give, swap or sell first'
String get nothingToShare => 'Mark some seeds to give, swap or sell first';
/// en: 'Use my approximate location'
String get useLocation => 'Use my approximate location';
/// en: 'Couldn't get your location — check that location is on and the permission is granted'
String get locationFailed => 'Couldn\'t get your location — check that location is on and the permission is granted';
/// en: 'Saved — we'll share these when you're connected'
String get queued => 'Saved — we\'ll share these when you\'re connected';
/// en: 'Couldn't reach the community servers — your seeds weren't shared. Try again in a moment.'
String get shareFailed => 'Couldn\'t reach the community servers — your seeds weren\'t shared. Try again in a moment.';
/// en: 'How far to look'
String get rangeLabel => 'How far to look';
/// en: 'Very close'
String get rangeNear => 'Very close';
/// en: 'Around here'
String get rangeArea => 'Around here';
/// en: 'My region'
String get rangeRegion => 'My region';
/// en: 'Shared by'
String get sharedBy => 'Shared by';
/// en: 'This person hasn't shared a profile yet'
String get noProfile => 'This person hasn\'t shared a profile yet';
/// en: 'Copy code'
String get copyId => 'Copy code';
/// en: 'Code copied'
String get idCopied => 'Code copied';
/// en: 'Photo'
String get photo => 'Photo';
}
// Path: profile
class Translations$profile$en {
Translations$profile$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'Your profile'
String get title => 'Your profile';
/// en: 'Display name'
String get name => 'Display name';
/// en: 'How others see you'
String get nameHint => 'How others see you';
/// en: 'About'
String get about => 'About';
/// en: 'A short line — what you grow, where'
String get aboutHint => 'A short line — what you grow, where';
/// en: 'Ğ1 address (optional)'
String get g1 => 'Ğ1 address (optional)';
/// en: 'So people can pay you in Ğ1 — separate from your key'
String get g1Hint => 'So people can pay you in Ğ1 — separate from your key';
/// en: 'Your identity'
String get yourId => 'Your identity';
/// en: 'Share this so people can recognise you'
String get idHelp => 'Share this so people can recognise you';
/// en: 'Copy'
String get copy => 'Copy';
/// en: 'Copied'
String get copied => 'Copied';
/// en: 'Save'
String get save => 'Save';
/// en: 'Profile saved'
String get saved => 'Profile saved';
/// en: 'Your identities'
String get identities => 'Your identities';
/// en: 'Keep separate identities — each with its own messages and contacts. They all come from your one backup, so switching adds nothing to remember.'
String get identitiesHelp => 'Keep separate identities — each with its own messages and contacts. They all come from your one backup, so switching adds nothing to remember.';
/// en: 'Identity {n}'
String identityLabel({required Object n}) => 'Identity ${n}';
/// en: 'In use'
String get current => 'In use';
/// en: 'New identity'
String get newIdentity => 'New identity';
/// en: 'Switch identity?'
String get switchTitle => 'Switch identity?';
/// en: 'Messages and contacts are kept separate for each identity. You can switch back anytime.'
String get switchBody => 'Messages and contacts are kept separate for each identity. You can switch back anytime.';
/// en: 'Switch'
String get switchAction => 'Switch';
}
// Path: chatList
class Translations$chatList$en {
Translations$chatList$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'Messages'
String get title => 'Messages';
/// en: 'No conversations yet. Message someone from the market.'
String get empty => 'No conversations yet. Message someone from the market.';
}
// Path: chat
class Translations$chat$en {
Translations$chat$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'Chat'
String get title => 'Chat';
/// en: 'Write a message…'
String get hint => 'Write a message…';
/// en: 'Send'
String get send => 'Send';
/// en: 'No messages yet — say hello'
String get empty => 'No messages yet — say hello';
/// en: 'Set up sharing to send messages'
String get offline => 'Set up sharing to send messages';
/// en: 'Pay in Ğ1'
String get payG1 => 'Pay in Ğ1';
/// en: 'Ğ1 address copied — paste it in your wallet'
String get g1Copied => 'Ğ1 address copied — paste it in your wallet';
/// en: 'Today'
String get today => 'Today';
/// en: 'Yesterday'
String get yesterday => 'Yesterday';
/// en: 'Couldn't send — check your connection'
String get sendError => 'Couldn\'t send — check your connection';
/// en: 'Links aren't allowed in messages'
String get noLinks => 'Links aren\'t allowed in messages';
}
// Path: trust
class Translations$trust$en {
Translations$trust$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'No one vouches for them yet'
String get none => 'No one vouches for them yet';
/// en: 'Vouched for by {n}'
String count({required Object n}) => 'Vouched for by ${n}';
/// en: 'I know this person'
String get vouch => 'I know this person';
/// en: 'You vouch for them'
String get vouched => 'You vouch for them';
/// en: 'In your circle'
String get circle => 'In your circle';
}
// Path: yourPeople
class Translations$yourPeople$en {
Translations$yourPeople$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'Your people'
String get title => 'Your people';
/// en: 'People you've met and vouch for, and people who vouch for you.'
String get help => 'People you\'ve met and vouch for, and people who vouch for you.';
/// en: 'You vouch for'
String get youVouchFor => 'You vouch for';
/// en: 'They vouch for you'
String get vouchesForYou => 'They vouch for you';
/// en: 'You don't vouch for anyone yet. When you meet someone, open your chat with them and tap "I know this person".'
String get youVouchForEmpty => 'You don\'t vouch for anyone yet. When you meet someone, open your chat with them and tap "I know this person".';
/// en: 'No one vouches for you yet'
String get vouchesForYouEmpty => 'No one vouches for you yet';
/// en: 'Stop vouching'
String get revoke => 'Stop vouching';
/// en: 'Stop vouching for this person?'
String get revokeConfirm => 'Stop vouching for this person?';
/// en: 'You're offline — try again when you're connected'
String get offline => 'You\'re offline — try again when you\'re connected';
}
// Path: ratings
class Translations$ratings$en {
Translations$ratings$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'Rate this person'
String get rate => 'Rate this person';
/// en: 'Edit your rating'
String get edit => 'Edit your rating';
/// en: 'How did it go? (optional)'
String get commentHint => 'How did it go? (optional)';
/// en: '{n} from people you know'
String fromYourCircle({required Object n}) => '${n} from people you know';
/// en: 'Remove your rating'
String get retract => 'Remove your rating';
/// en: 'Rating saved'
String get saved => 'Rating saved';
}
// Path: notifications
class Translations$notifications$en {
Translations$notifications$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'New message from {name}'
String newMessageFrom({required Object name}) => 'New message from ${name}';
}
// Path: plantare
class Translations$plantare$en {
Translations$plantare$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'Plantares'
String get title => 'Plantares';
/// en: '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.'
String get 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.';
/// en: 'Add a commitment'
String get add => 'Add a commitment';
/// en: 'No commitments yet. When you share or receive seed with a promise to grow it out and return some, note it here.'
String get empty => 'No commitments yet. When you share or receive seed with a promise to grow it out and return some, note it here.';
/// en: 'I'll grow it out & return some'
String get iReturn => 'I\'ll grow it out & return some';
/// en: 'They'll return some to me'
String get owedToMe => 'They\'ll return some to me';
/// en: 'Who reproduces & returns'
String get direction => 'Who reproduces & returns';
/// en: 'With whom?'
String get counterparty => 'With whom?';
/// en: 'A person or a collective (optional)'
String get counterpartyHint => 'A person or a collective (optional)';
/// en: 'What comes back?'
String get owed => 'What comes back?';
/// en: 'e.g. a handful next season (optional)'
String get owedHint => 'e.g. a handful next season (optional)';
/// en: 'Note (optional)'
String get note => 'Note (optional)';
/// en: 'Save'
String get save => 'Save';
/// en: 'Mark returned'
String get markReturned => 'Mark returned';
/// en: 'Let it go'
String get markForgiven => 'Let it go';
/// en: 'Reopen'
String get reopen => 'Reopen';
/// en: 'Remove'
String get delete => 'Remove';
/// en: 'Returned'
String get statusReturned => 'Returned';
/// en: 'Settled'
String get statusForgiven => 'Settled';
/// en: 'Open'
String get openSection => 'Open';
/// en: 'Done'
String get settledSection => 'Done';
/// en: 'Remove this commitment?'
String get removeConfirm => 'Remove this commitment?';
}
// Path: handover
class Translations$handover$en {
Translations$handover$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'Seeds changed hands'
String get title => 'Seeds changed hands';
/// en: 'A gift, a swap or a sale — note it down, with a return promise or without.'
String get help => 'A gift, a swap or a sale — note it down, with a return promise or without.';
/// en: 'I gave seeds'
String get iGave => 'I gave seeds';
/// en: 'I received seeds'
String get iReceived => 'I received seeds';
/// en: 'Which batch?'
String get whichLot => 'Which batch?';
/// en: 'How much?'
String get howMuch => 'How much?';
/// en: 'All of it'
String get allOfIt => 'All of it';
/// en: 'A part'
String get partOfIt => 'A part';
/// en: 'Money changed hands'
String get paymentChip => 'Money changed hands';
/// en: 'They'll return me seed'
String get promiseGave => 'They\'ll return me seed';
/// en: 'I'll return seed'
String get promiseReceived => 'I\'ll return seed';
}
// Path: sale
class Translations$sale$en {
Translations$sale$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'Sales'
String get title => 'Sales';
/// en: '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.'
String get 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.';
/// en: 'Record a sale'
String get add => 'Record a sale';
/// en: 'No sales yet. Note here what you sell or buy.'
String get empty => 'No sales yet. Note here what you sell or buy.';
/// en: 'I sold'
String get iSold => 'I sold';
/// en: 'I bought'
String get iBought => 'I bought';
/// en: 'Sold or bought?'
String get direction => 'Sold or bought?';
/// en: 'With whom?'
String get counterparty => 'With whom?';
/// en: 'A person or a collective (optional)'
String get counterpartyHint => 'A person or a collective (optional)';
/// en: 'Amount'
String get amount => 'Amount';
/// en: 'Currency'
String get currency => 'Currency';
/// en: '€, Ğ1, hours… (optional)'
String get currencyHint => '€, Ğ1, hours… (optional)';
/// en: 'hours'
String get hours => 'hours';
/// en: 'Note (optional)'
String get note => 'Note (optional)';
/// en: 'Save'
String get save => 'Save';
/// en: 'Remove'
String get delete => 'Remove';
/// en: 'Remove this sale?'
String get removeConfirm => 'Remove this sale?';
}
// Path: intro.slides
class Translations$intro$slides$en {
Translations$intro$slides$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
late final Translations$intro$slides$welcome$en welcome = Translations$intro$slides$welcome$en.internal(_root);
late final Translations$intro$slides$inventory$en inventory = Translations$intro$slides$inventory$en.internal(_root);
late final Translations$intro$slides$privacy$en privacy = Translations$intro$slides$privacy$en.internal(_root);
late final Translations$intro$slides$share$en share = Translations$intro$slides$share$en.internal(_root);
late final Translations$intro$slides$plantare$en plantare = Translations$intro$slides$plantare$en.internal(_root);
}
// Path: unit.handful
class Translations$unit$handful$en {
Translations$unit$handful$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'handful'
String get singular => 'handful';
/// en: 'handfuls'
String get plural => 'handfuls';
}
// Path: unit.teaspoon
class Translations$unit$teaspoon$en {
Translations$unit$teaspoon$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'teaspoon'
String get singular => 'teaspoon';
/// en: 'teaspoons'
String get plural => 'teaspoons';
}
// Path: unit.spoon
class Translations$unit$spoon$en {
Translations$unit$spoon$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'spoon'
String get singular => 'spoon';
/// en: 'spoons'
String get plural => 'spoons';
}
// Path: unit.cup
class Translations$unit$cup$en {
Translations$unit$cup$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'cup'
String get singular => 'cup';
/// en: 'cups'
String get plural => 'cups';
}
// Path: unit.jar
class Translations$unit$jar$en {
Translations$unit$jar$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'jar'
String get singular => 'jar';
/// en: 'jars'
String get plural => 'jars';
}
// Path: unit.sack
class Translations$unit$sack$en {
Translations$unit$sack$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'sack'
String get singular => 'sack';
/// en: 'sacks'
String get plural => 'sacks';
}
// Path: unit.packet
class Translations$unit$packet$en {
Translations$unit$packet$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'packet'
String get singular => 'packet';
/// en: 'packets'
String get plural => 'packets';
}
// Path: unit.cob
class Translations$unit$cob$en {
Translations$unit$cob$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'cob'
String get singular => 'cob';
/// en: 'cobs'
String get plural => 'cobs';
}
// Path: unit.pod
class Translations$unit$pod$en {
Translations$unit$pod$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'pod'
String get singular => 'pod';
/// en: 'pods'
String get plural => 'pods';
}
// Path: unit.ear
class Translations$unit$ear$en {
Translations$unit$ear$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'ear'
String get singular => 'ear';
/// en: 'ears'
String get plural => 'ears';
}
// Path: unit.head
class Translations$unit$head$en {
Translations$unit$head$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'head'
String get singular => 'head';
/// en: 'heads'
String get plural => 'heads';
}
// Path: unit.fruit
class Translations$unit$fruit$en {
Translations$unit$fruit$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'fruit'
String get singular => 'fruit';
/// en: 'fruits'
String get plural => 'fruits';
}
// Path: unit.bulb
class Translations$unit$bulb$en {
Translations$unit$bulb$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'bulb'
String get singular => 'bulb';
/// en: 'bulbs'
String get plural => 'bulbs';
}
// Path: unit.tuber
class Translations$unit$tuber$en {
Translations$unit$tuber$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'tuber'
String get singular => 'tuber';
/// en: 'tubers'
String get plural => 'tubers';
}
// Path: unit.seedHead
class Translations$unit$seedHead$en {
Translations$unit$seedHead$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'seed head'
String get singular => 'seed head';
/// en: 'seed heads'
String get plural => 'seed heads';
}
// Path: unit.bunch
class Translations$unit$bunch$en {
Translations$unit$bunch$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'bunch'
String get singular => 'bunch';
/// en: 'bunches'
String get plural => 'bunches';
}
// Path: unit.plant
class Translations$unit$plant$en {
Translations$unit$plant$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'plant'
String get singular => 'plant';
/// en: 'plants'
String get plural => 'plants';
}
// Path: unit.pot
class Translations$unit$pot$en {
Translations$unit$pot$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'pot'
String get singular => 'pot';
/// en: 'pots'
String get plural => 'pots';
}
// Path: unit.tray
class Translations$unit$tray$en {
Translations$unit$tray$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'tray'
String get singular => 'tray';
/// en: 'trays'
String get plural => 'trays';
}
// Path: unit.seedling
class Translations$unit$seedling$en {
Translations$unit$seedling$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'seedling'
String get singular => 'seedling';
/// en: 'seedlings'
String get plural => 'seedlings';
}
// Path: unit.tree
class Translations$unit$tree$en {
Translations$unit$tree$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'tree'
String get singular => 'tree';
/// en: 'trees'
String get plural => 'trees';
}
// Path: unit.cutting
class Translations$unit$cutting$en {
Translations$unit$cutting$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'cutting'
String get singular => 'cutting';
/// en: 'cuttings'
String get plural => 'cuttings';
}
// Path: unit.grams
class Translations$unit$grams$en {
Translations$unit$grams$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'gram'
String get singular => 'gram';
/// en: 'grams'
String get plural => 'grams';
}
// Path: unit.count
class Translations$unit$count$en {
Translations$unit$count$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'seed'
String get singular => 'seed';
/// en: 'seeds'
String get plural => 'seeds';
}
// Path: intro.slides.welcome
class Translations$intro$slides$welcome$en {
Translations$intro$slides$welcome$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'The seed that brought you here'
String get title => 'The seed that brought you here';
/// en: '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.'
String get 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.';
}
// Path: intro.slides.inventory
class Translations$intro$slides$inventory$en {
Translations$intro$slides$inventory$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'Your seed bank, in your pocket'
String get title => 'Your seed bank, in your pocket';
/// en: '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.'
String get 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.';
}
// Path: intro.slides.privacy
class Translations$intro$slides$privacy$en {
Translations$intro$slides$privacy$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'Yours, and only yours'
String get title => 'Yours, and only yours';
/// en: 'No account, no internet, no trackers. Your data lives encrypted on your device, and only what you choose is ever shared.'
String get body => 'No account, no internet, no trackers. Your data lives encrypted on your device, and only what you choose is ever shared.';
}
// Path: intro.slides.share
class Translations$intro$slides$share$en {
Translations$intro$slides$share$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'Share, the way it's always been done'
String get title => 'Share, the way it\'s always been done';
/// en: '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.'
String get 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.';
}
// Path: intro.slides.plantare
class Translations$intro$slides$plantare$en {
Translations$intro$slides$plantare$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'To sow is to multiply'
String get title => 'To sow is to multiply';
/// en: 'With a Plantare, whoever receives seed promises to return some later. And since returning it means growing it, every loan multiplies the commons.'
String get body => 'With a Plantare, whoever receives seed promises to return some later. And since returning it means growing it, every loan multiplies the commons.';
}
/// The flat map containing all translations for locale <en>.
/// 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 Translations {
dynamic _flatMapFunction(String path) {
return switch (path) {
'avatar.title' => 'Your photo or avatar',
'avatar.fromPhoto' => 'Take or choose a photo',
'avatar.illustration' => 'Or pick an illustration',
'avatar.remove' => 'Remove',
'seedSaving.title' => 'Saving its seed',
'seedSaving.subtitle' => 'What it takes to keep the variety true',
'seedSaving.lifeCycle' => 'Cycle',
'seedSaving.cycleAnnual' => 'Annual',
'seedSaving.cycleBiennial' => 'Biennial — seeds in year 2',
'seedSaving.cyclePerennial' => 'Perennial',
'seedSaving.pollination' => 'Pollination',
'seedSaving.pollSelf' => 'Self-pollinating',
'seedSaving.pollCross' => 'Crosses with others',
'seedSaving.pollMixed' => 'Self-pollinates, sometimes crosses',
'seedSaving.byInsect' => 'by insects',
'seedSaving.byWind' => 'on the wind',
'seedSaving.isolation' => 'Keep apart',
'seedSaving.isolationRange' => ({required Object min, required Object max}) => '${min}${max} m from other varieties',
'seedSaving.isolationSingle' => ({required Object min}) => '${min} m from other varieties',
'seedSaving.plants' => 'Save from several plants',
'seedSaving.plantsValue' => ({required Object n}) => 'From at least ${n} plants',
'seedSaving.processing' => 'Cleaning the seed',
'seedSaving.procDry' => 'Dry seed (thresh)',
'seedSaving.procWet' => 'Wet seed (ferment and rinse)',
'seedSaving.difficulty' => 'Difficulty',
'seedSaving.diffEasy' => 'Easy',
'seedSaving.diffMedium' => 'Medium',
'seedSaving.diffHard' => 'Hard',
'seedSaving.advisory' => 'General guidance — adapt it to your climate and variety.',
'seedSaving.sourcePrefix' => 'Source',
'calendar.title' => 'This month',
'calendar.filterChip' => 'This month',
'calendar.selfNote' => 'What you\'ve noted in your varieties.',
'calendar.nothing' => ({required Object month}) => 'Nothing noted for ${month}.',
'app.title' => 'Tanemaki',
'bootstrap.failed' => 'Tanemaki couldn\'t start',
'bootstrap.retry' => 'Try again',
'common.save' => 'Save',
'common.cancel' => 'Cancel',
'common.delete' => 'Delete',
'common.edit' => 'Edit',
'common.type' => 'Type',
'common.comingSoon' => 'Coming soon',
'common.offline' => 'You\'re offline — sharing is paused',
'home.tagline' => 'Share and grow local seeds',
'home.openMarket' => 'Market',
'home.openMarketSubtitle' => 'Discover and share seeds nearby',
'home.yourInventory' => 'Your inventory',
'home.yourInventorySubtitle' => 'Manage your seeds',
'photo.camera' => 'Take a photo',
'photo.gallery' => 'Choose from gallery',
'photo.setAsCover' => 'Set as cover',
'photo.isCover' => 'Cover photo',
'photo.deleteConfirm' => 'Delete this photo?',
'menu.tagline' => 'your seed bank',
'menu.inventory' => 'Inventory',
'menu.market' => 'Market',
'menu.profile' => 'Your profile',
'menu.chat' => 'Chat',
'menu.wishlist' => 'Favorites',
'menu.following' => 'Following',
'menu.plantares' => 'Plantares',
'menu.sales' => 'Sales',
'menu.calendar' => 'Calendar',
'menu.settings' => 'Settings',
'settings.language' => 'Language',
'settings.systemLanguage' => 'System language',
'settings.langEs' => 'Español',
'settings.langEn' => 'English',
'settings.langPt' => 'Português',
'settings.langAst' => 'Asturianu',
'settings.about' => 'About',
'settings.aboutText' => 'Local-first, encrypted inventory for traditional seeds. AGPL-3.0.',
'settings.aboutOpen' => 'About Tanemaki',
'backup.title' => 'Backup & restore',
'backup.autoBackupTitle' => 'Automatic backups',
'backup.autoBackupLast' => ({required Object date}) => 'Last copy saved ${date}',
'backup.autoBackupNone' => 'A copy is kept automatically in the background',
'backup.exportJson' => 'Save a backup',
'backup.exportJsonSubtitle' => 'A complete copy to keep safe, restore later or move to another device',
'backup.importJson' => 'Restore a backup',
'backup.importJsonSubtitle' => 'Bring a saved copy back — nothing gets duplicated',
'backup.exportCsv' => 'Export to a spreadsheet',
'backup.exportCsvSubtitle' => 'A simple list for Excel or LibreOffice — no photos',
'backup.importCsv' => 'Import a list',
'backup.importCsvSubtitle' => 'Add entries from a spreadsheet',
'backup.importConfirmTitle' => 'Restore a backup?',
'backup.importConfirmBody' => 'Entries merge with your inventory; when the same entry exists on both sides, the newest version wins. Nothing gets duplicated.',
'backup.importCsvConfirmTitle' => 'Import a list?',
'backup.importCsvConfirmBody' => 'Every row is added as a new entry. This does not merge or replace, so importing the same file twice adds it twice.',
'backup.importAction' => 'Import',
'backup.exportSaved' => 'Copy saved',
'backup.cancelled' => 'Cancelled',
'backup.importDone' => ({required Object added, required Object updated}) => 'Imported: ${added} new, ${updated} updated',
'backup.importCsvDone' => ({required Object count}) => 'Added ${count} entries',
'backup.importFailed' => 'This file could not be read as a Tanemaki copy',
'backup.failed' => 'Something went wrong',
'backup.recoveryTitle' => 'Your recovery code',
'backup.recoverySubtitle' => 'Print it and keep it safe — it opens your copies on a new device',
'backup.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.',
'backup.recoveryCopy' => 'Copy',
'backup.recoverySave' => 'Save the sheet',
'backup.recoverySheetTitle' => 'Tanemaki — your recovery sheet',
'backup.recoveryPromptTitle' => 'Enter your recovery code',
'backup.recoveryPromptBody' => 'This copy was saved with another code. Type the code from your recovery sheet to open it.',
'backup.recoveryWrongCode' => 'That code doesn\'t open this copy',
'about.title' => 'About',
'about.kanji' => '種まき',
'about.tagline' => 'A local-first, decentralized app for managing and sharing traditional seeds and seedlings.',
'about.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.',
'about.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.',
'about.version' => 'Version',
'about.license' => 'License',
'about.licenseValue' => 'AGPL-3.0',
'about.website' => 'Website',
'about.openSourceLicenses' => 'Open-source licenses',
'about.openSourceLicensesSubtitle' => 'Third-party libraries and their licenses',
'about.copyright' => ({required Object years}) => '© ${years} Comunes Association, under AGPLv3',
'intro.skip' => 'Skip',
'intro.next' => 'Next',
'intro.start' => 'Get started',
'intro.menuEntry' => 'How Tanemaki works',
'intro.slides.welcome.title' => 'The seed that brought you here',
'intro.slides.welcome.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.',
'intro.slides.inventory.title' => 'Your seed bank, in your pocket',
'intro.slides.inventory.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.',
'intro.slides.privacy.title' => 'Yours, and only yours',
'intro.slides.privacy.body' => 'No account, no internet, no trackers. Your data lives encrypted on your device, and only what you choose is ever shared.',
'intro.slides.share.title' => 'Share, the way it\'s always been done',
'intro.slides.share.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.',
'intro.slides.plantare.title' => 'To sow is to multiply',
'intro.slides.plantare.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',
'inventory.searchHint' => 'Search seeds',
'inventory.empty' => 'No seeds yet. Tap + to add your first.',
'inventory.noMatches' => 'No seeds match your filters.',
'inventory.clearFilters' => 'Clear filters',
'inventory.uncategorized' => 'Uncategorized',
'inventory.needsReproductionFilter' => 'To regrow',
'inventory.loadError' => 'Couldn\'t open your seed bank. It may just have been busy — try again.',
'inventory.retry' => 'Try again',
'draft.capture' => 'Capture photos',
'draft.captured' => ({required Object n}) => '${n} captured to catalogue',
'draft.triageTitle' => 'To catalogue',
'draft.triageCount' => ({required Object n}) => '${n} to catalogue',
'draft.untitled' => 'Unnamed',
'draft.nameField' => 'Name this seed',
'draft.nameHint' => 'What is it?',
'draft.suggestFromPhoto' => 'Suggest name from photo',
'draft.discard' => 'Discard',
'quickAdd.title' => 'Add a seed',
'quickAdd.labelField' => 'Name',
'quickAdd.labelRequired' => 'Give it a name',
'quickAdd.addPhoto' => 'Add photo',
'quickAdd.quantity' => 'How much?',
'quickAdd.more' => 'Add more…',
'quickAdd.save' => 'Save',
'quickAdd.saveAndAddAnother' => 'Save & add another',
'quickAdd.addedCount' => ({required Object n}) => '${n} added',
'quickAdd.cancel' => 'Cancel',
'detail.notFound' => 'This seed is no longer here.',
'detail.lots' => 'Lots',
'detail.noLots' => 'No lots yet.',
'detail.names' => 'Also known as',
'detail.addName' => 'Add name',
'detail.links' => 'Links',
'detail.addLink' => 'Add link',
'detail.linkUrl' => 'URL',
'detail.linkTitle' => 'Title (optional)',
'detail.reference' => 'Learn more',
'detail.refGbif' => 'GBIF',
'detail.refWikipedia' => 'Wikipedia',
'detail.refWikispecies' => 'Wikispecies',
'detail.notes' => 'Notes',
'detail.addLot' => 'Add lot',
'detail.editLot' => 'Edit lot',
'detail.deleteConfirm' => 'Delete this seed?',
'detail.year' => ({required Object year}) => 'Year ${year}',
'detail.noYear' => 'Year unknown',
'germination.title' => 'Germination',
'germination.add' => 'Add test',
'germination.sampleSize' => 'Sample size',
'germination.germinated' => 'Germinated',
'germination.none' => 'No germination tests yet.',
'germination.result' => ({required Object percent}) => '${percent}%',
'viability.expiringSoon' => 'Use or reproduce this season',
'viability.expiringSoonYears' => ({required Object years}) => 'Use or reproduce this season · keeps ~${years} yr',
'viability.expired' => 'Past typical viability — reproduce',
'viability.expiredYears' => ({required Object years}) => 'Past typical viability (~${years} yr) — reproduce',
'editVariety.title' => 'Edit seed',
'editVariety.name' => 'Name',
'editVariety.category' => 'Category',
'editVariety.notes' => 'Notes',
'editVariety.species' => 'Species (from catalog)',
'editVariety.speciesHint' => 'Search a species…',
'editVariety.speciesSuggested' => 'Suggested from the name',
'editVariety.organic' => 'Organic',
'editVariety.organicHint' => 'Grown organically (eco)',
'addLot.title' => 'Add lot',
'addLot.year' => 'Harvest date',
'addLot.quantity' => 'How much?',
'addLot.amount' => 'Amount',
'harvest.pickTitle' => 'Select month / year',
'harvest.anyMonth' => 'Any month',
'harvest.noDate' => 'Set harvest date',
'harvest.monthNames.0' => 'January',
'harvest.monthNames.1' => 'February',
'harvest.monthNames.2' => 'March',
'harvest.monthNames.3' => 'April',
'harvest.monthNames.4' => 'May',
'harvest.monthNames.5' => 'June',
'harvest.monthNames.6' => 'July',
'harvest.monthNames.7' => 'August',
'harvest.monthNames.8' => 'September',
'harvest.monthNames.9' => 'October',
'harvest.monthNames.10' => 'November',
'harvest.monthNames.11' => 'December',
'lotType.seed' => 'Seeds',
'lotType.plant' => 'Plant',
'lotType.seedling' => 'Seedling',
'lotType.tree' => 'Tree / shrub',
'lotType.bulb' => 'Bulb / tuber',
'lotType.cutting' => 'Cutting',
'presentation.title' => 'Packaging',
'presentation.none' => 'Unspecified',
'presentation.pot' => 'Pot',
'presentation.tray' => 'Tray',
'presentation.plug' => 'Plug',
'presentation.bareRoot' => 'Bare-root',
'presentation.rootBall' => 'Root-ball',
'provenance.section' => 'Where it\'s from',
'provenance.seedsFrom' => 'Seeds from',
'provenance.seedsFromHint' => 'Who grew or gave them',
'provenance.place' => 'Place',
'provenance.placeHint' => 'Where they come from (with region)',
'provenance.addSeedsFrom' => 'Seeds from',
'provenance.addPlace' => 'Place',
'abundance.add' => 'How much I have',
'abundance.title' => 'How much I have',
'abundance.none' => 'Not set',
'abundance.plentyToShare' => 'Plenty to share',
'abundance.enoughToShare' => 'Enough to share a little',
'abundance.enoughForMe' => 'Enough for me',
'abundance.runningLow' => 'Running low',
'share.add' => 'Do you share it?',
'share.title' => 'Do you share it?',
'share.nudge' => 'You have plenty — you could share some.',
'share.price' => 'Price',
'share.priceHint' => 'Leave it empty to agree it later',
'share.private' => 'Just for me',
'share.gift' => 'To give away',
'share.exchange' => 'To swap',
'share.sell' => 'For sale',
'share.filterChip' => 'I share',
'share.printCatalog' => 'Print what I share',
'share.catalogTitle' => 'What I share',
'share.catalogSaved' => 'Catalog saved',
'share.cancelled' => 'Cancelled',
'printLabels.action' => 'Print labels',
'printLabels.title' => 'Print labels',
'printLabels.selectHint' => 'Pick the seeds to print labels for',
'printLabels.selectAll' => 'Select all',
'printLabels.selected' => ({required Object n}) => '${n} selected',
'printLabels.none' => 'Select seeds first',
'printLabels.format' => 'Label size',
'printLabels.formatStickers' => 'Small stickers',
'printLabels.formatStickersHint' => 'Many small labels per page — to peel onto packets',
'printLabels.formatCards' => 'Large cards',
'printLabels.formatCardsHint' => 'Fewer, bigger labels — for jars and boxes',
'printLabels.count' => ({required Object n}) => '${n} labels',
'printLabels.save' => 'Save labels',
'printLabels.saved' => 'Labels saved',
'printLabels.cancelled' => 'Cancelled',
'cropCalendar.add' => 'Crop calendar',
'cropCalendar.title' => 'Crop calendar',
'cropCalendar.sow' => 'Sow',
'cropCalendar.transplant' => 'Transplant',
'cropCalendar.flowering' => 'Flowering',
'cropCalendar.fruiting' => 'Fruiting',
'cropCalendar.seedHarvest' => 'Seed harvest',
'cropCalendar.editorHint' => 'Note the months typical for this variety in your area — these are your own notes.',
'cropCalendar.unset' => '',
'needsReproduction.label' => 'To regrow this season',
'needsReproduction.hint' => 'Grow it out before the seed runs out',
'needsReproduction.badge' => 'To regrow',
'preservation.add' => 'How it\'s kept',
'preservation.title' => 'How it\'s kept',
'preservation.none' => 'Unspecified',
'preservation.jarWithDesiccant' => 'Jar with drying agent',
'preservation.glassJar' => 'Glass jar',
'preservation.paperEnvelope' => 'Paper envelope',
'preservation.paperBag' => 'Paper bag',
'preservation.plasticBag' => 'Plastic bag',
'conditionCheck.advanced' => 'Storage & seed-bank details',
'conditionCheck.title' => 'Storage checks',
'conditionCheck.add' => 'Add check',
'conditionCheck.containers' => 'Jars / containers',
'conditionCheck.desiccant' => 'Drying agent',
'conditionCheck.none' => 'No storage checks yet.',
'conditionCheck.summary' => ({required Object count, required Object state}) => '${count} jar(s) · ${state}',
'desiccant.none' => 'None',
'desiccant.add' => 'Add some',
'desiccant.replace' => 'Replace it',
'desiccant.dry' => 'Blue — dry',
'desiccant.fresh' => 'Just renewed',
'unit.aFew' => 'a few',
'unit.some' => 'some',
'unit.plenty' => 'plenty',
'unit.pinch' => 'a pinch',
'unit.handful.singular' => 'handful',
'unit.handful.plural' => 'handfuls',
'unit.teaspoon.singular' => 'teaspoon',
'unit.teaspoon.plural' => 'teaspoons',
'unit.spoon.singular' => 'spoon',
'unit.spoon.plural' => 'spoons',
'unit.cup.singular' => 'cup',
'unit.cup.plural' => 'cups',
'unit.jar.singular' => 'jar',
'unit.jar.plural' => 'jars',
'unit.sack.singular' => 'sack',
'unit.sack.plural' => 'sacks',
'unit.packet.singular' => 'packet',
'unit.packet.plural' => 'packets',
'unit.cob.singular' => 'cob',
'unit.cob.plural' => 'cobs',
'unit.pod.singular' => 'pod',
'unit.pod.plural' => 'pods',
'unit.ear.singular' => 'ear',
'unit.ear.plural' => 'ears',
'unit.head.singular' => 'head',
'unit.head.plural' => 'heads',
'unit.fruit.singular' => 'fruit',
'unit.fruit.plural' => 'fruits',
'unit.bulb.singular' => 'bulb',
'unit.bulb.plural' => 'bulbs',
'unit.tuber.singular' => 'tuber',
'unit.tuber.plural' => 'tubers',
'unit.seedHead.singular' => 'seed head',
'unit.seedHead.plural' => 'seed heads',
'unit.bunch.singular' => 'bunch',
'unit.bunch.plural' => 'bunches',
'unit.plant.singular' => 'plant',
'unit.plant.plural' => 'plants',
'unit.pot.singular' => 'pot',
'unit.pot.plural' => 'pots',
'unit.tray.singular' => 'tray',
'unit.tray.plural' => 'trays',
'unit.seedling.singular' => 'seedling',
'unit.seedling.plural' => 'seedlings',
'unit.tree.singular' => 'tree',
'unit.tree.plural' => 'trees',
'unit.cutting.singular' => 'cutting',
'unit.cutting.plural' => 'cuttings',
'unit.grams.singular' => 'gram',
'unit.grams.plural' => 'grams',
'unit.count.singular' => 'seed',
'unit.count.plural' => 'seeds',
'market.title' => 'Seeds near you',
'market.subtitle' => 'What others are sharing nearby',
'market.notSetUp' => 'Sharing isn\'t set up yet',
'market.notSetUpBody' => 'Turn on sharing to see and give seeds to people near you. It stays rough — your zone, never your exact address.',
'market.setUp' => 'Set up sharing',
'market.cantReach' => 'Can\'t reach the community servers right now',
'market.cantReachBody' => 'Try again, or check the servers under Advanced setup.',
'market.retry' => 'Retry',
'market.setArea' => 'Set your area',
'market.setAreaBody' => 'Tell the market roughly where you are to see seeds nearby.',
'market.searching' => 'Looking around your area…',
'market.empty' => 'No seeds shared near you yet',
'market.searchHint' => 'Search these seeds',
'market.noMatches' => 'No shared seeds match your search',
'market.near' => 'Near you',
'market.contact' => 'Message',
'market.mine' => 'You',
'market.configTitle' => 'Sharing setup',
'market.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.',
'market.areaLabel' => 'Your area',
'market.areaHelp' => 'Kept rough on purpose — your zone, never an exact spot.',
'market.areaSet' => 'Your area is set — kept coarse, never your exact spot',
'market.areaNotSet' => 'Area not set yet — use your location, or add a code under Advanced',
'market.advanced' => 'Advanced',
'market.areaCodeLabel' => 'Area code',
'market.areaCodeHint' => 'A short code like sp3e9 — not a place name',
'market.serversLabel' => 'Community servers',
'market.serversHelp' => 'One address per line (wss://…). Leave the defaults if unsure.',
'market.serversAdvanced' => 'Add another server',
'market.save' => 'Save',
'market.saved' => 'Saved',
'market.wanted' => 'Wanted',
'market.shareMine' => 'Share my seeds',
'market.sharedCount' => ({required Object n}) => 'Shared ${n} seeds nearby',
'market.nothingToShare' => 'Mark some seeds to give, swap or sell first',
'market.useLocation' => 'Use my approximate location',
'market.locationFailed' => 'Couldn\'t get your location — check that location is on and the permission is granted',
'market.queued' => 'Saved — we\'ll share these when you\'re connected',
'market.shareFailed' => 'Couldn\'t reach the community servers — your seeds weren\'t shared. Try again in a moment.',
'market.rangeLabel' => 'How far to look',
'market.rangeNear' => 'Very close',
'market.rangeArea' => 'Around here',
'market.rangeRegion' => 'My region',
'market.sharedBy' => 'Shared by',
'market.noProfile' => 'This person hasn\'t shared a profile yet',
'market.copyId' => 'Copy code',
'market.idCopied' => 'Code copied',
'market.photo' => 'Photo',
'profile.title' => 'Your profile',
'profile.name' => 'Display name',
'profile.nameHint' => 'How others see you',
'profile.about' => 'About',
'profile.aboutHint' => 'A short line — what you grow, where',
'profile.g1' => 'Ğ1 address (optional)',
'profile.g1Hint' => 'So people can pay you in Ğ1 — separate from your key',
'profile.yourId' => 'Your identity',
'profile.idHelp' => 'Share this so people can recognise you',
'profile.copy' => 'Copy',
'profile.copied' => 'Copied',
'profile.save' => 'Save',
'profile.saved' => 'Profile saved',
'profile.identities' => 'Your identities',
'profile.identitiesHelp' => 'Keep separate identities — each with its own messages and contacts. They all come from your one backup, so switching adds nothing to remember.',
'profile.identityLabel' => ({required Object n}) => 'Identity ${n}',
'profile.current' => 'In use',
'profile.newIdentity' => 'New identity',
'profile.switchTitle' => 'Switch identity?',
'profile.switchBody' => 'Messages and contacts are kept separate for each identity. You can switch back anytime.',
'profile.switchAction' => 'Switch',
'chatList.title' => 'Messages',
'chatList.empty' => 'No conversations yet. Message someone from the market.',
'chat.title' => 'Chat',
'chat.hint' => 'Write a message…',
'chat.send' => 'Send',
'chat.empty' => 'No messages yet — say hello',
'chat.offline' => 'Set up sharing to send messages',
'chat.payG1' => 'Pay in Ğ1',
'chat.g1Copied' => 'Ğ1 address copied — paste it in your wallet',
'chat.today' => 'Today',
'chat.yesterday' => 'Yesterday',
'chat.sendError' => 'Couldn\'t send — check your connection',
'chat.noLinks' => 'Links aren\'t allowed in messages',
'trust.none' => 'No one vouches for them yet',
'trust.count' => ({required Object n}) => 'Vouched for by ${n}',
'trust.vouch' => 'I know this person',
'trust.vouched' => 'You vouch for them',
'trust.circle' => 'In your circle',
'yourPeople.title' => 'Your people',
'yourPeople.help' => 'People you\'ve met and vouch for, and people who vouch for you.',
'yourPeople.youVouchFor' => 'You vouch for',
'yourPeople.vouchesForYou' => 'They vouch for you',
'yourPeople.youVouchForEmpty' => 'You don\'t vouch for anyone yet. When you meet someone, open your chat with them and tap "I know this person".',
'yourPeople.vouchesForYouEmpty' => 'No one vouches for you yet',
'yourPeople.revoke' => 'Stop vouching',
'yourPeople.revokeConfirm' => 'Stop vouching for this person?',
'yourPeople.offline' => 'You\'re offline — try again when you\'re connected',
'ratings.rate' => 'Rate this person',
'ratings.edit' => 'Edit your rating',
'ratings.commentHint' => 'How did it go? (optional)',
'ratings.fromYourCircle' => ({required Object n}) => '${n} from people you know',
'ratings.retract' => 'Remove your rating',
'ratings.saved' => 'Rating saved',
'notifications.newMessageFrom' => ({required Object name}) => 'New message from ${name}',
'plantare.title' => 'Plantares',
'plantare.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.',
'plantare.add' => 'Add a commitment',
'plantare.empty' => 'No commitments yet. When you share or receive seed with a promise to grow it out and return some, note it here.',
'plantare.iReturn' => 'I\'ll grow it out & return some',
'plantare.owedToMe' => 'They\'ll return some to me',
'plantare.direction' => 'Who reproduces & returns',
'plantare.counterparty' => 'With whom?',
'plantare.counterpartyHint' => 'A person or a collective (optional)',
'plantare.owed' => 'What comes back?',
'plantare.owedHint' => 'e.g. a handful next season (optional)',
'plantare.note' => 'Note (optional)',
'plantare.save' => 'Save',
'plantare.markReturned' => 'Mark returned',
'plantare.markForgiven' => 'Let it go',
'plantare.reopen' => 'Reopen',
'plantare.delete' => 'Remove',
'plantare.statusReturned' => 'Returned',
'plantare.statusForgiven' => 'Settled',
'plantare.openSection' => 'Open',
'plantare.settledSection' => 'Done',
'plantare.removeConfirm' => 'Remove this commitment?',
'handover.title' => 'Seeds changed hands',
'handover.help' => 'A gift, a swap or a sale — note it down, with a return promise or without.',
'handover.iGave' => 'I gave seeds',
'handover.iReceived' => 'I received seeds',
'handover.whichLot' => 'Which batch?',
'handover.howMuch' => 'How much?',
'handover.allOfIt' => 'All of it',
'handover.partOfIt' => 'A part',
'handover.paymentChip' => 'Money changed hands',
'handover.promiseGave' => 'They\'ll return me seed',
'handover.promiseReceived' => 'I\'ll return seed',
'sale.title' => 'Sales',
'sale.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.',
'sale.add' => 'Record a sale',
'sale.empty' => 'No sales yet. Note here what you sell or buy.',
'sale.iSold' => 'I sold',
'sale.iBought' => 'I bought',
'sale.direction' => 'Sold or bought?',
'sale.counterparty' => 'With whom?',
'sale.counterpartyHint' => 'A person or a collective (optional)',
'sale.amount' => 'Amount',
'sale.currency' => 'Currency',
'sale.currencyHint' => '€, Ğ1, hours… (optional)',
'sale.hours' => 'hours',
'sale.note' => 'Note (optional)',
'sale.save' => 'Save',
'sale.delete' => 'Remove',
'sale.removeConfirm' => 'Remove this sale?',
_ => null,
};
}
}