feat(sales): local sales/purchase ledger (any currency)
A sale is a distinct model from a gift or a Plantare (reproduction
commitment): a recorded seed sale or purchase with an optional price in
ANY currency — €, Ğ1, time, or none yet. Mirrors the Plantare feature.
- schema v10: Sales table (SyncColumns), guarded createTable migration,
schema dump + generated schema_v10 for the migration round-trip test
- enum SaleDirection { iSold, iBought }
- VarietyRepository: create/watch/watchForVariety/delete + backup
export/exportForSync/import (LWW-by-HLC, tombstones)
- InventorySnapshot.sales + JSON codec encode/decode (round-trips amount,
currency, counterparty)
- UI: SalesScreen (/sales), sale sheet, drawer entry, variety-detail
action beside 'add Plantare'; money hides a trailing .0
- i18n sale block + menu.sales in en/es/pt/ast
- tests: sales repo test (5) incl. Ğ1/price-less/backup round-trip;
Sales screen added to the small-screen overflow guard
Also harden the overflow guard: swallow the headless engine's image
resource service PNG-decode errors (unrelated to layout) while still
failing on real RenderFlex overflows, so home/about stop reporting
false failures.
This commit is contained in:
parent
833ddaed4d
commit
e2665c27d4
27 changed files with 6156 additions and 23 deletions
|
|
@ -37,6 +37,7 @@
|
|||
"wishlist": "Llista de deseos",
|
||||
"following": "Siguiendo",
|
||||
"plantares": "Plantares",
|
||||
"sales": "Ventes",
|
||||
"settings": "Axustes"
|
||||
},
|
||||
"settings": {
|
||||
|
|
@ -577,5 +578,23 @@
|
|||
"openSection": "Pendientes",
|
||||
"settledSection": "Fechos",
|
||||
"removeConfirm": "¿Quitar esti compromisu?"
|
||||
},
|
||||
"sale": {
|
||||
"title": "Ventes",
|
||||
"help": "Rexistra semilla vendida o mercada — dineru, Ğ1 o cualquier moneda. Un modelu aparte del regalu y del Plantare. Enxamás se cobra comisión poles semilles.",
|
||||
"add": "Rexistrar venta",
|
||||
"empty": "Entá nun hai ventes. Anota equí lo que vendes o merques.",
|
||||
"iSold": "Vendí",
|
||||
"iBought": "Mercué",
|
||||
"direction": "¿Vendes o merques?",
|
||||
"counterparty": "¿Con quién?",
|
||||
"counterpartyHint": "Una persona o un coleutivu (opcional)",
|
||||
"amount": "Importe",
|
||||
"currency": "Moneda",
|
||||
"currencyHint": "€, Ğ1, hores… (opcional)",
|
||||
"note": "Nota (opcional)",
|
||||
"save": "Guardar",
|
||||
"delete": "Quitar",
|
||||
"removeConfirm": "¿Quitar esta venta?"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@
|
|||
"wishlist": "Wishlist",
|
||||
"following": "Following",
|
||||
"plantares": "Plantares",
|
||||
"sales": "Sales",
|
||||
"settings": "Settings"
|
||||
},
|
||||
"settings": {
|
||||
|
|
@ -580,5 +581,23 @@
|
|||
"openSection": "Open",
|
||||
"settledSection": "Done",
|
||||
"removeConfirm": "Remove this commitment?"
|
||||
},
|
||||
"sale": {
|
||||
"title": "Sales",
|
||||
"help": "Record seed you sold or bought — money, Ğ1, or any currency. A separate model from a gift or a Plantare. No commission is ever taken on seeds.",
|
||||
"add": "Record a sale",
|
||||
"empty": "No sales yet. Note here what you sell or buy.",
|
||||
"iSold": "I sold",
|
||||
"iBought": "I bought",
|
||||
"direction": "Sold or bought?",
|
||||
"counterparty": "With whom?",
|
||||
"counterpartyHint": "A person or a collective (optional)",
|
||||
"amount": "Amount",
|
||||
"currency": "Currency",
|
||||
"currencyHint": "€, Ğ1, hours… (optional)",
|
||||
"note": "Note (optional)",
|
||||
"save": "Save",
|
||||
"delete": "Remove",
|
||||
"removeConfirm": "Remove this sale?"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@
|
|||
"wishlist": "Lista de deseos",
|
||||
"following": "Siguiendo",
|
||||
"plantares": "Plantares",
|
||||
"sales": "Ventas",
|
||||
"settings": "Ajustes"
|
||||
},
|
||||
"settings": {
|
||||
|
|
@ -579,5 +580,23 @@
|
|||
"openSection": "Pendientes",
|
||||
"settledSection": "Hechos",
|
||||
"removeConfirm": "¿Quitar este compromiso?"
|
||||
},
|
||||
"sale": {
|
||||
"title": "Ventas",
|
||||
"help": "Registra semilla vendida o comprada — dinero, Ğ1 o cualquier moneda. Un modelo aparte del regalo y del Plantare. Nunca se cobra comisión por las semillas.",
|
||||
"add": "Registrar venta",
|
||||
"empty": "Aún no hay ventas. Anota aquí lo que vendes o compras.",
|
||||
"iSold": "Vendí",
|
||||
"iBought": "Compré",
|
||||
"direction": "¿Vendes o compras?",
|
||||
"counterparty": "¿Con quién?",
|
||||
"counterpartyHint": "Una persona o un colectivo (opcional)",
|
||||
"amount": "Importe",
|
||||
"currency": "Moneda",
|
||||
"currencyHint": "€, Ğ1, horas… (opcional)",
|
||||
"note": "Nota (opcional)",
|
||||
"save": "Guardar",
|
||||
"delete": "Quitar",
|
||||
"removeConfirm": "¿Quitar esta venta?"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@
|
|||
"wishlist": "Lista de desejos",
|
||||
"following": "A seguir",
|
||||
"plantares": "Plantares",
|
||||
"sales": "Vendas",
|
||||
"settings": "Definições"
|
||||
},
|
||||
"settings": {
|
||||
|
|
@ -576,5 +577,23 @@
|
|||
"openSection": "Pendentes",
|
||||
"settledSection": "Feitos",
|
||||
"removeConfirm": "Remover este compromisso?"
|
||||
},
|
||||
"sale": {
|
||||
"title": "Vendas",
|
||||
"help": "Regista semente vendida ou comprada — dinheiro, Ğ1 ou qualquer moeda. Um modelo separado do presente e do Plantare. Nunca se cobra comissão pelas sementes.",
|
||||
"add": "Registar venda",
|
||||
"empty": "Ainda não há vendas. Anota aqui o que vendes ou compras.",
|
||||
"iSold": "Vendi",
|
||||
"iBought": "Comprei",
|
||||
"direction": "Vendes ou compras?",
|
||||
"counterparty": "Com quem?",
|
||||
"counterpartyHint": "Uma pessoa ou um coletivo (opcional)",
|
||||
"amount": "Montante",
|
||||
"currency": "Moeda",
|
||||
"currencyHint": "€, Ğ1, horas… (opcional)",
|
||||
"note": "Nota (opcional)",
|
||||
"save": "Guardar",
|
||||
"delete": "Remover",
|
||||
"removeConfirm": "Remover esta venda?"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,9 +4,9 @@
|
|||
/// To regenerate, run: `dart run slang`
|
||||
///
|
||||
/// Locales: 4
|
||||
/// Strings: 1760 (440 per locale)
|
||||
/// Strings: 1828 (457 per locale)
|
||||
///
|
||||
/// Built on 2026-07-11 at 00:04 UTC
|
||||
/// Built on 2026-07-11 at 00:20 UTC
|
||||
|
||||
// coverage:ignore-file
|
||||
// ignore_for_file: type=lint, unused_import
|
||||
|
|
|
|||
|
|
@ -78,6 +78,7 @@ class TranslationsAst extends Translations with BaseTranslations<AppLocale, Tran
|
|||
@override late final _Translations$wot$ast wot = _Translations$wot$ast._(_root);
|
||||
@override late final _Translations$notifications$ast notifications = _Translations$notifications$ast._(_root);
|
||||
@override late final _Translations$plantare$ast plantare = _Translations$plantare$ast._(_root);
|
||||
@override late final _Translations$sale$ast sale = _Translations$sale$ast._(_root);
|
||||
}
|
||||
|
||||
// Path: app
|
||||
|
|
@ -159,6 +160,7 @@ class _Translations$menu$ast extends Translations$menu$en {
|
|||
@override String get wishlist => 'Llista de deseos';
|
||||
@override String get following => 'Siguiendo';
|
||||
@override String get plantares => 'Plantares';
|
||||
@override String get sales => 'Ventes';
|
||||
@override String get settings => 'Axustes';
|
||||
}
|
||||
|
||||
|
|
@ -839,6 +841,31 @@ class _Translations$plantare$ast extends Translations$plantare$en {
|
|||
@override String get removeConfirm => '¿Quitar esti compromisu?';
|
||||
}
|
||||
|
||||
// Path: sale
|
||||
class _Translations$sale$ast extends Translations$sale$en {
|
||||
_Translations$sale$ast._(TranslationsAst root) : this._root = root, super.internal(root);
|
||||
|
||||
final TranslationsAst _root; // ignore: unused_field
|
||||
|
||||
// Translations
|
||||
@override String get title => 'Ventes';
|
||||
@override String get help => 'Rexistra semilla vendida o mercada — dineru, Ğ1 o cualquier moneda. Un modelu aparte del regalu y del Plantare. Enxamás se cobra comisión poles semilles.';
|
||||
@override String get add => 'Rexistrar venta';
|
||||
@override String get empty => 'Entá nun hai ventes. Anota equí lo que vendes o merques.';
|
||||
@override String get iSold => 'Vendí';
|
||||
@override String get iBought => 'Mercué';
|
||||
@override String get direction => '¿Vendes o merques?';
|
||||
@override String get counterparty => '¿Con quién?';
|
||||
@override String get counterpartyHint => 'Una persona o un coleutivu (opcional)';
|
||||
@override String get amount => 'Importe';
|
||||
@override String get currency => 'Moneda';
|
||||
@override String get currencyHint => '€, Ğ1, hores… (opcional)';
|
||||
@override String get note => 'Nota (opcional)';
|
||||
@override String get save => 'Guardar';
|
||||
@override String get delete => 'Quitar';
|
||||
@override String get removeConfirm => '¿Quitar esta venta?';
|
||||
}
|
||||
|
||||
// Path: intro.slides
|
||||
class _Translations$intro$slides$ast extends Translations$intro$slides$en {
|
||||
_Translations$intro$slides$ast._(TranslationsAst root) : this._root = root, super.internal(root);
|
||||
|
|
@ -1207,6 +1234,7 @@ extension on TranslationsAst {
|
|||
'menu.wishlist' => 'Llista de deseos',
|
||||
'menu.following' => 'Siguiendo',
|
||||
'menu.plantares' => 'Plantares',
|
||||
'menu.sales' => 'Ventes',
|
||||
'menu.settings' => 'Axustes',
|
||||
'settings.language' => 'Llingua',
|
||||
'settings.systemLanguage' => 'Llingua del sistema',
|
||||
|
|
@ -1619,6 +1647,22 @@ extension on TranslationsAst {
|
|||
'plantare.openSection' => 'Pendientes',
|
||||
'plantare.settledSection' => 'Fechos',
|
||||
'plantare.removeConfirm' => '¿Quitar esti compromisu?',
|
||||
'sale.title' => 'Ventes',
|
||||
'sale.help' => 'Rexistra semilla vendida o mercada — dineru, Ğ1 o cualquier moneda. Un modelu aparte del regalu y del Plantare. Enxamás se cobra comisión poles semilles.',
|
||||
'sale.add' => 'Rexistrar venta',
|
||||
'sale.empty' => 'Entá nun hai ventes. Anota equí lo que vendes o merques.',
|
||||
'sale.iSold' => 'Vendí',
|
||||
'sale.iBought' => 'Mercué',
|
||||
'sale.direction' => '¿Vendes o merques?',
|
||||
'sale.counterparty' => '¿Con quién?',
|
||||
'sale.counterpartyHint' => 'Una persona o un coleutivu (opcional)',
|
||||
'sale.amount' => 'Importe',
|
||||
'sale.currency' => 'Moneda',
|
||||
'sale.currencyHint' => '€, Ğ1, hores… (opcional)',
|
||||
'sale.note' => 'Nota (opcional)',
|
||||
'sale.save' => 'Guardar',
|
||||
'sale.delete' => 'Quitar',
|
||||
'sale.removeConfirm' => '¿Quitar esta venta?',
|
||||
_ => null,
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -79,6 +79,7 @@ class Translations with BaseTranslations<AppLocale, Translations> {
|
|||
late final Translations$wot$en wot = Translations$wot$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$sale$en sale = Translations$sale$en.internal(_root);
|
||||
}
|
||||
|
||||
// Path: app
|
||||
|
|
@ -218,6 +219,9 @@ class Translations$menu$en {
|
|||
/// en: 'Plantares'
|
||||
String get plantares => 'Plantares';
|
||||
|
||||
/// en: 'Sales'
|
||||
String get sales => 'Sales';
|
||||
|
||||
/// en: 'Settings'
|
||||
String get settings => 'Settings';
|
||||
}
|
||||
|
|
@ -1590,6 +1594,63 @@ class Translations$plantare$en {
|
|||
String get removeConfirm => 'Remove this commitment?';
|
||||
}
|
||||
|
||||
// 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: '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);
|
||||
|
|
@ -2075,6 +2136,7 @@ extension on Translations {
|
|||
'menu.wishlist' => 'Wishlist',
|
||||
'menu.following' => 'Following',
|
||||
'menu.plantares' => 'Plantares',
|
||||
'menu.sales' => 'Sales',
|
||||
'menu.settings' => 'Settings',
|
||||
'settings.language' => 'Language',
|
||||
'settings.systemLanguage' => 'System language',
|
||||
|
|
@ -2489,6 +2551,22 @@ extension on Translations {
|
|||
'plantare.openSection' => 'Open',
|
||||
'plantare.settledSection' => 'Done',
|
||||
'plantare.removeConfirm' => 'Remove this commitment?',
|
||||
'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.note' => 'Note (optional)',
|
||||
'sale.save' => 'Save',
|
||||
'sale.delete' => 'Remove',
|
||||
'sale.removeConfirm' => 'Remove this sale?',
|
||||
_ => null,
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -78,6 +78,7 @@ class TranslationsEs extends Translations with BaseTranslations<AppLocale, Trans
|
|||
@override late final _Translations$wot$es wot = _Translations$wot$es._(_root);
|
||||
@override late final _Translations$notifications$es notifications = _Translations$notifications$es._(_root);
|
||||
@override late final _Translations$plantare$es plantare = _Translations$plantare$es._(_root);
|
||||
@override late final _Translations$sale$es sale = _Translations$sale$es._(_root);
|
||||
}
|
||||
|
||||
// Path: app
|
||||
|
|
@ -160,6 +161,7 @@ class _Translations$menu$es extends Translations$menu$en {
|
|||
@override String get wishlist => 'Lista de deseos';
|
||||
@override String get following => 'Siguiendo';
|
||||
@override String get plantares => 'Plantares';
|
||||
@override String get sales => 'Ventas';
|
||||
@override String get settings => 'Ajustes';
|
||||
}
|
||||
|
||||
|
|
@ -841,6 +843,31 @@ class _Translations$plantare$es extends Translations$plantare$en {
|
|||
@override String get removeConfirm => '¿Quitar este compromiso?';
|
||||
}
|
||||
|
||||
// Path: sale
|
||||
class _Translations$sale$es extends Translations$sale$en {
|
||||
_Translations$sale$es._(TranslationsEs root) : this._root = root, super.internal(root);
|
||||
|
||||
final TranslationsEs _root; // ignore: unused_field
|
||||
|
||||
// Translations
|
||||
@override String get title => 'Ventas';
|
||||
@override String get help => 'Registra semilla vendida o comprada — dinero, Ğ1 o cualquier moneda. Un modelo aparte del regalo y del Plantare. Nunca se cobra comisión por las semillas.';
|
||||
@override String get add => 'Registrar venta';
|
||||
@override String get empty => 'Aún no hay ventas. Anota aquí lo que vendes o compras.';
|
||||
@override String get iSold => 'Vendí';
|
||||
@override String get iBought => 'Compré';
|
||||
@override String get direction => '¿Vendes o compras?';
|
||||
@override String get counterparty => '¿Con quién?';
|
||||
@override String get counterpartyHint => 'Una persona o un colectivo (opcional)';
|
||||
@override String get amount => 'Importe';
|
||||
@override String get currency => 'Moneda';
|
||||
@override String get currencyHint => '€, Ğ1, horas… (opcional)';
|
||||
@override String get note => 'Nota (opcional)';
|
||||
@override String get save => 'Guardar';
|
||||
@override String get delete => 'Quitar';
|
||||
@override String get removeConfirm => '¿Quitar esta venta?';
|
||||
}
|
||||
|
||||
// Path: intro.slides
|
||||
class _Translations$intro$slides$es extends Translations$intro$slides$en {
|
||||
_Translations$intro$slides$es._(TranslationsEs root) : this._root = root, super.internal(root);
|
||||
|
|
@ -1210,6 +1237,7 @@ extension on TranslationsEs {
|
|||
'menu.wishlist' => 'Lista de deseos',
|
||||
'menu.following' => 'Siguiendo',
|
||||
'menu.plantares' => 'Plantares',
|
||||
'menu.sales' => 'Ventas',
|
||||
'menu.settings' => 'Ajustes',
|
||||
'settings.language' => 'Idioma',
|
||||
'settings.systemLanguage' => 'Idioma del sistema',
|
||||
|
|
@ -1623,6 +1651,22 @@ extension on TranslationsEs {
|
|||
'plantare.openSection' => 'Pendientes',
|
||||
'plantare.settledSection' => 'Hechos',
|
||||
'plantare.removeConfirm' => '¿Quitar este compromiso?',
|
||||
'sale.title' => 'Ventas',
|
||||
'sale.help' => 'Registra semilla vendida o comprada — dinero, Ğ1 o cualquier moneda. Un modelo aparte del regalo y del Plantare. Nunca se cobra comisión por las semillas.',
|
||||
'sale.add' => 'Registrar venta',
|
||||
'sale.empty' => 'Aún no hay ventas. Anota aquí lo que vendes o compras.',
|
||||
'sale.iSold' => 'Vendí',
|
||||
'sale.iBought' => 'Compré',
|
||||
'sale.direction' => '¿Vendes o compras?',
|
||||
'sale.counterparty' => '¿Con quién?',
|
||||
'sale.counterpartyHint' => 'Una persona o un colectivo (opcional)',
|
||||
'sale.amount' => 'Importe',
|
||||
'sale.currency' => 'Moneda',
|
||||
'sale.currencyHint' => '€, Ğ1, horas… (opcional)',
|
||||
'sale.note' => 'Nota (opcional)',
|
||||
'sale.save' => 'Guardar',
|
||||
'sale.delete' => 'Quitar',
|
||||
'sale.removeConfirm' => '¿Quitar esta venta?',
|
||||
_ => null,
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -78,6 +78,7 @@ class TranslationsPt extends Translations with BaseTranslations<AppLocale, Trans
|
|||
@override late final _Translations$wot$pt wot = _Translations$wot$pt._(_root);
|
||||
@override late final _Translations$notifications$pt notifications = _Translations$notifications$pt._(_root);
|
||||
@override late final _Translations$plantare$pt plantare = _Translations$plantare$pt._(_root);
|
||||
@override late final _Translations$sale$pt sale = _Translations$sale$pt._(_root);
|
||||
}
|
||||
|
||||
// Path: app
|
||||
|
|
@ -160,6 +161,7 @@ class _Translations$menu$pt extends Translations$menu$en {
|
|||
@override String get wishlist => 'Lista de desejos';
|
||||
@override String get following => 'A seguir';
|
||||
@override String get plantares => 'Plantares';
|
||||
@override String get sales => 'Vendas';
|
||||
@override String get settings => 'Definições';
|
||||
}
|
||||
|
||||
|
|
@ -838,6 +840,31 @@ class _Translations$plantare$pt extends Translations$plantare$en {
|
|||
@override String get removeConfirm => 'Remover este compromisso?';
|
||||
}
|
||||
|
||||
// Path: sale
|
||||
class _Translations$sale$pt extends Translations$sale$en {
|
||||
_Translations$sale$pt._(TranslationsPt root) : this._root = root, super.internal(root);
|
||||
|
||||
final TranslationsPt _root; // ignore: unused_field
|
||||
|
||||
// Translations
|
||||
@override String get title => 'Vendas';
|
||||
@override String get help => 'Regista semente vendida ou comprada — dinheiro, Ğ1 ou qualquer moeda. Um modelo separado do presente e do Plantare. Nunca se cobra comissão pelas sementes.';
|
||||
@override String get add => 'Registar venda';
|
||||
@override String get empty => 'Ainda não há vendas. Anota aqui o que vendes ou compras.';
|
||||
@override String get iSold => 'Vendi';
|
||||
@override String get iBought => 'Comprei';
|
||||
@override String get direction => 'Vendes ou compras?';
|
||||
@override String get counterparty => 'Com quem?';
|
||||
@override String get counterpartyHint => 'Uma pessoa ou um coletivo (opcional)';
|
||||
@override String get amount => 'Montante';
|
||||
@override String get currency => 'Moeda';
|
||||
@override String get currencyHint => '€, Ğ1, horas… (opcional)';
|
||||
@override String get note => 'Nota (opcional)';
|
||||
@override String get save => 'Guardar';
|
||||
@override String get delete => 'Remover';
|
||||
@override String get removeConfirm => 'Remover esta venda?';
|
||||
}
|
||||
|
||||
// Path: intro.slides
|
||||
class _Translations$intro$slides$pt extends Translations$intro$slides$en {
|
||||
_Translations$intro$slides$pt._(TranslationsPt root) : this._root = root, super.internal(root);
|
||||
|
|
@ -1207,6 +1234,7 @@ extension on TranslationsPt {
|
|||
'menu.wishlist' => 'Lista de desejos',
|
||||
'menu.following' => 'A seguir',
|
||||
'menu.plantares' => 'Plantares',
|
||||
'menu.sales' => 'Vendas',
|
||||
'menu.settings' => 'Definições',
|
||||
'settings.language' => 'Idioma',
|
||||
'settings.systemLanguage' => 'Idioma do sistema',
|
||||
|
|
@ -1617,6 +1645,22 @@ extension on TranslationsPt {
|
|||
'plantare.openSection' => 'Pendentes',
|
||||
'plantare.settledSection' => 'Feitos',
|
||||
'plantare.removeConfirm' => 'Remover este compromisso?',
|
||||
'sale.title' => 'Vendas',
|
||||
'sale.help' => 'Regista semente vendida ou comprada — dinheiro, Ğ1 ou qualquer moeda. Um modelo separado do presente e do Plantare. Nunca se cobra comissão pelas sementes.',
|
||||
'sale.add' => 'Registar venda',
|
||||
'sale.empty' => 'Ainda não há vendas. Anota aqui o que vendes ou compras.',
|
||||
'sale.iSold' => 'Vendi',
|
||||
'sale.iBought' => 'Comprei',
|
||||
'sale.direction' => 'Vendes ou compras?',
|
||||
'sale.counterparty' => 'Com quem?',
|
||||
'sale.counterpartyHint' => 'Uma pessoa ou um coletivo (opcional)',
|
||||
'sale.amount' => 'Montante',
|
||||
'sale.currency' => 'Moeda',
|
||||
'sale.currencyHint' => '€, Ğ1, horas… (opcional)',
|
||||
'sale.note' => 'Nota (opcional)',
|
||||
'sale.save' => 'Guardar',
|
||||
'sale.delete' => 'Remover',
|
||||
'sale.removeConfirm' => 'Remover esta venda?',
|
||||
_ => null,
|
||||
};
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue