Add a read-only "Learn more" section on the variety detail that surfaces verified external references for the linked species, built deterministically from bundled identifiers — no titles bundled, no network, offline-first: - GBIF taxon page from the backbone key - Wikipedia via Wikidata Special:GoToLinkedPage (locale-aware, RTL-safe, falls back to the Wikidata item when a language lacks the article) - Wikispecies from the scientific name Enrich the bundled catalog (species.json v3) with gbif_key + wikidata_qid for all 14 species, cross-checked (each QID carries GBIF ID P846 = the key). Schema already had the columns; seedBundled now persists and backfills them. The grower's own manual links stay but are demoted (progressive disclosure): the section only shows when links exist and "Add link" is a low-emphasis button, since hand-adding a link is the rarer power move. Pure-Dart link builder is unit-tested; repo persistence/backfill and the detail-screen section are covered too.
1751 lines
52 KiB
Dart
1751 lines
52 KiB
Dart
///
|
|
/// 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$app$en app = Translations$app$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$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);
|
|
}
|
|
|
|
// 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: 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';
|
|
}
|
|
|
|
// 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: 'Open market'
|
|
String get openMarket => 'Open market';
|
|
|
|
/// en: 'Browse and exchange'
|
|
String get openMarketSubtitle => 'Browse and exchange';
|
|
|
|
/// 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: 'Wishlist'
|
|
String get wishlist => 'Wishlist';
|
|
|
|
/// en: 'Following'
|
|
String get following => 'Following';
|
|
|
|
/// 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: '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: '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';
|
|
}
|
|
|
|
// 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';
|
|
}
|
|
|
|
// 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';
|
|
}
|
|
|
|
// 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: '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: '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: 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: '—'
|
|
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: 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) {
|
|
'app.title' => 'Tanemaki',
|
|
'common.save' => 'Save',
|
|
'common.cancel' => 'Cancel',
|
|
'common.delete' => 'Delete',
|
|
'common.edit' => 'Edit',
|
|
'common.type' => 'Type',
|
|
'common.comingSoon' => 'Coming soon',
|
|
'home.tagline' => 'Share and grow local seeds',
|
|
'home.openMarket' => 'Open market',
|
|
'home.openMarketSubtitle' => 'Browse and exchange',
|
|
'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' => 'Wishlist',
|
|
'menu.following' => 'Following',
|
|
'menu.settings' => 'Settings',
|
|
'settings.language' => 'Language',
|
|
'settings.systemLanguage' => 'System language',
|
|
'settings.langEs' => 'Español',
|
|
'settings.langEn' => 'English',
|
|
'settings.about' => 'About',
|
|
'settings.aboutText' => 'Local-first, encrypted inventory for traditional seeds. AGPL-3.0.',
|
|
'settings.aboutOpen' => 'About Tanemaki',
|
|
'backup.title' => 'Backup & restore',
|
|
'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',
|
|
'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',
|
|
'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',
|
|
'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.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.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',
|
|
'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.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',
|
|
_ => null,
|
|
};
|
|
}
|
|
}
|