tane/apps/app_seeds/lib/i18n/strings_en.g.dart
vjrj 42c16c0e3f feat(ui): Material 3 redesign, cover-photo viewer, About screen
Apply a Material 3 seed-green palette and rounded components across the
home, inventory, quick-add, quantity picker and variety-detail screens.
The full-screen photo viewer can now set any photo as the cover (via
attachment sort order) and delete after confirmation. Lot forms and
packaging surface as choice chips.

Extract About out of Settings into its own screen (app version via
package_info_plus, website link). Add es/en strings for the new lot
types, presentation, home tagline and About. Update Seedees v2 mockups.
2026-07-09 11:51:59 +02:00

1110 lines
30 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$about$en about = Translations$about$en.internal(_root);
late final Translations$inventory$en inventory = Translations$inventory$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$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$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: 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: 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: 'Uncategorized'
String get uncategorized => 'Uncategorized';
}
// 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: '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: '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: 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…';
}
// 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: 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: 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';
}
/// 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',
'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',
'inventory.title' => 'Inventory',
'inventory.searchHint' => 'Search seeds',
'inventory.empty' => 'No seeds yet. Tap + to add your first.',
'inventory.uncategorized' => 'Uncategorized',
'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.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.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}%',
'editVariety.title' => 'Edit seed',
'editVariety.name' => 'Name',
'editVariety.category' => 'Category',
'editVariety.notes' => 'Notes',
'editVariety.species' => 'Species (from catalog)',
'editVariety.speciesHint' => 'Search a species…',
'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',
'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,
};
}
}