feat: alphabet list, change Layout etc

This commit is contained in:
2026-10-11 20:37:59 +02:00
parent 489896305d
commit 072f560989
31 changed files with 1847 additions and 832 deletions
+20 -13
View File
@@ -27,6 +27,11 @@
"@couldNotCreateTab": {"placeholders": {"error": {"type": "String"}}},
"searchByName": "Search by name…",
"clearSearch": "Clear search",
"openNewTabDescription": "Add a customer or group to the bar",
"tabOpened": "Tab opened for {name}",
"@tabOpened": {"placeholders": {"name": {"type": "String"}}},
"searchTabs": "Search tabs",
"closeSearch": "Close search",
"allCustomers": "All customers",
"customer": "Customer",
"noClosedTabs": "No closed tabs yet",
@@ -102,6 +107,10 @@
"closeTab": "Close tab",
"productStockSummary": "{category} • {price} • Stock: {stock}",
"@productStockSummary": {"placeholders": {"category": {"type": "String"}, "price": {"type": "String"}, "stock": {"type": "int"}}},
"infiniteStock": "Infinite stock",
"infiniteStockDescription": "Never runs out, the stock isn't counted",
"productInfiniteStockSummary": "{category} • {price} • Infinite stock",
"@productInfiniteStockSummary": {"placeholders": {"category": {"type": "String"}, "price": {"type": "String"}}},
"outOfStock": "OUT OF STOCK",
"tabsYouCloseAppearHere": "Tabs you close will show up here.",
"enterPinSubtitle": "You’ll use this to unlock the app",
@@ -146,13 +155,8 @@
"@versionAvailable": {"placeholders": {"version": {"type": "String"}}},
"later": "Later",
"update": "Update",
"updateReady": "Update ready",
"updateReadyDescription": "The update has been downloaded and installed. Restart the app now to apply the changes.",
"restartApp": "Restart app",
"updateFailed": "Update failed",
"retry": "Retry",
"updating": "Updating",
"installing": "Installing",
"doNotCloseDuringUpdate": "Do not close the app during the update",
"cancelUpdate": "Cancel update?",
"cancelUpdateDescription": "The update is in progress. If you leave now, the app may become unstable.",
@@ -160,14 +164,19 @@
"cancelUpdateAction": "Cancel update",
"preparingDownload": "Preparing download…",
"simulatedDownloadError": "Simulated download error (network timeout)",
"downloadFailed": "Download failed",
"downloading": "Downloading {percent}%",
"@downloading": {"placeholders": {"percent": {"type": "String"}}},
"installingUpdate": "Installing update…",
"updateInstalledRestarting": "Update installed! Restarting…",
"installationFailed": "Installation failed",
"updateAlreadyInProgress": "Update already in progress",
"updateAlreadyRunning": "Update already running",
"updatingTo": "Updating to {version}",
"@updatingTo": {"placeholders": {"version": {"type": "String"}}},
"downloadingUpdate": "Downloading update…",
"confirmInstallation": "Confirm the installation",
"confirmInstallationDescription": "Confirm the update in the Android prompt, then open KoolTap again.",
"openInstallerAgain": "Open installer again",
"whatsNew": "What's new",
"updateDownloadFailed": "Could not download the update. Check the internet connection and try again.",
"updateChecksumFailed": "The downloaded update is damaged. Try again.",
"updatePermissionDenied": "KoolTap is not allowed to install updates. Allow \"Install unknown apps\" for KoolTap in the Android settings.",
"updateInstallFailed": "The update could not be installed.",
"genericError": "An unexpected error occurred.",
"couldNotLoadBar": "Could not load bar screen.",
"couldNotCreateTabMessage": "Could not create tab.",
@@ -186,8 +195,6 @@
"currentPinIncorrect": "Current PIN is incorrect.",
"couldNotLoadSettings": "Could not load settings.",
"couldNotSaveSettings": "Could not save settings.",
"downloadFailedWithDetail": "Download failed.",
"installationFailedWithDetail": "Installation failed.",
"devMenu": "Dev Menu",
"dataManagement": "Data Management",
"clearOpenTabs": "Clear all open tabs",
+99 -69
View File
@@ -254,6 +254,30 @@ abstract class AppLocalizations {
/// **'Clear search'**
String get clearSearch;
/// No description provided for @openNewTabDescription.
///
/// In en, this message translates to:
/// **'Add a customer or group to the bar'**
String get openNewTabDescription;
/// No description provided for @tabOpened.
///
/// In en, this message translates to:
/// **'Tab opened for {name}'**
String tabOpened(String name);
/// No description provided for @searchTabs.
///
/// In en, this message translates to:
/// **'Search tabs'**
String get searchTabs;
/// No description provided for @closeSearch.
///
/// In en, this message translates to:
/// **'Close search'**
String get closeSearch;
/// No description provided for @allCustomers.
///
/// In en, this message translates to:
@@ -674,6 +698,24 @@ abstract class AppLocalizations {
/// **'{category} • {price} • Stock: {stock}'**
String productStockSummary(String category, String price, int stock);
/// No description provided for @infiniteStock.
///
/// In en, this message translates to:
/// **'Infinite stock'**
String get infiniteStock;
/// No description provided for @infiniteStockDescription.
///
/// In en, this message translates to:
/// **'Never runs out, the stock isn\'t counted'**
String get infiniteStockDescription;
/// No description provided for @productInfiniteStockSummary.
///
/// In en, this message translates to:
/// **'{category} • {price} • Infinite stock'**
String productInfiniteStockSummary(String category, String price);
/// No description provided for @outOfStock.
///
/// In en, this message translates to:
@@ -920,24 +962,6 @@ abstract class AppLocalizations {
/// **'Update'**
String get update;
/// No description provided for @updateReady.
///
/// In en, this message translates to:
/// **'Update ready'**
String get updateReady;
/// No description provided for @updateReadyDescription.
///
/// In en, this message translates to:
/// **'The update has been downloaded and installed. Restart the app now to apply the changes.'**
String get updateReadyDescription;
/// No description provided for @restartApp.
///
/// In en, this message translates to:
/// **'Restart app'**
String get restartApp;
/// No description provided for @updateFailed.
///
/// In en, this message translates to:
@@ -950,18 +974,6 @@ abstract class AppLocalizations {
/// **'Retry'**
String get retry;
/// No description provided for @updating.
///
/// In en, this message translates to:
/// **'Updating'**
String get updating;
/// No description provided for @installing.
///
/// In en, this message translates to:
/// **'Installing'**
String get installing;
/// No description provided for @doNotCloseDuringUpdate.
///
/// In en, this message translates to:
@@ -1004,47 +1016,77 @@ abstract class AppLocalizations {
/// **'Simulated download error (network timeout)'**
String get simulatedDownloadError;
/// No description provided for @downloadFailed.
///
/// In en, this message translates to:
/// **'Download failed'**
String get downloadFailed;
/// No description provided for @downloading.
///
/// In en, this message translates to:
/// **'Downloading {percent}%'**
String downloading(String percent);
/// No description provided for @installingUpdate.
///
/// In en, this message translates to:
/// **'Installing update…'**
String get installingUpdate;
/// No description provided for @updateInstalledRestarting.
///
/// In en, this message translates to:
/// **'Update installed! Restarting…'**
String get updateInstalledRestarting;
/// No description provided for @installationFailed.
///
/// In en, this message translates to:
/// **'Installation failed'**
String get installationFailed;
/// No description provided for @updateAlreadyInProgress.
///
/// In en, this message translates to:
/// **'Update already in progress'**
String get updateAlreadyInProgress;
/// No description provided for @updateAlreadyRunning.
/// No description provided for @updatingTo.
///
/// In en, this message translates to:
/// **'Update already running'**
String get updateAlreadyRunning;
/// **'Updating to {version}'**
String updatingTo(String version);
/// No description provided for @downloadingUpdate.
///
/// In en, this message translates to:
/// **'Downloading update…'**
String get downloadingUpdate;
/// No description provided for @confirmInstallation.
///
/// In en, this message translates to:
/// **'Confirm the installation'**
String get confirmInstallation;
/// No description provided for @confirmInstallationDescription.
///
/// In en, this message translates to:
/// **'Confirm the update in the Android prompt, then open KoolTap again.'**
String get confirmInstallationDescription;
/// No description provided for @openInstallerAgain.
///
/// In en, this message translates to:
/// **'Open installer again'**
String get openInstallerAgain;
/// No description provided for @whatsNew.
///
/// In en, this message translates to:
/// **'What\'s new'**
String get whatsNew;
/// No description provided for @updateDownloadFailed.
///
/// In en, this message translates to:
/// **'Could not download the update. Check the internet connection and try again.'**
String get updateDownloadFailed;
/// No description provided for @updateChecksumFailed.
///
/// In en, this message translates to:
/// **'The downloaded update is damaged. Try again.'**
String get updateChecksumFailed;
/// No description provided for @updatePermissionDenied.
///
/// In en, this message translates to:
/// **'KoolTap is not allowed to install updates. Allow \"Install unknown apps\" for KoolTap in the Android settings.'**
String get updatePermissionDenied;
/// No description provided for @updateInstallFailed.
///
/// In en, this message translates to:
/// **'The update could not be installed.'**
String get updateInstallFailed;
/// No description provided for @genericError.
///
@@ -1154,18 +1196,6 @@ abstract class AppLocalizations {
/// **'Could not save settings.'**
String get couldNotSaveSettings;
/// No description provided for @downloadFailedWithDetail.
///
/// In en, this message translates to:
/// **'Download failed.'**
String get downloadFailedWithDetail;
/// No description provided for @installationFailedWithDetail.
///
/// In en, this message translates to:
/// **'Installation failed.'**
String get installationFailedWithDetail;
/// No description provided for @devMenu.
///
/// In en, this message translates to:
+60 -37
View File
@@ -91,6 +91,20 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get clearSearch => 'Clear search';
@override
String get openNewTabDescription => 'Add a customer or group to the bar';
@override
String tabOpened(String name) {
return 'Tab opened for $name';
}
@override
String get searchTabs => 'Search tabs';
@override
String get closeSearch => 'Close search';
@override
String get allCustomers => 'All customers';
@@ -325,6 +339,18 @@ class AppLocalizationsEn extends AppLocalizations {
return '$category • $price • Stock: $stock';
}
@override
String get infiniteStock => 'Infinite stock';
@override
String get infiniteStockDescription =>
'Never runs out, the stock isn\'t counted';
@override
String productInfiniteStockSummary(String category, String price) {
return '$category • $price • Infinite stock';
}
@override
String get outOfStock => 'OUT OF STOCK';
@@ -455,28 +481,12 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get update => 'Update';
@override
String get updateReady => 'Update ready';
@override
String get updateReadyDescription =>
'The update has been downloaded and installed. Restart the app now to apply the changes.';
@override
String get restartApp => 'Restart app';
@override
String get updateFailed => 'Update failed';
@override
String get retry => 'Retry';
@override
String get updating => 'Updating';
@override
String get installing => 'Installing';
@override
String get doNotCloseDuringUpdate => 'Do not close the app during the update';
@@ -500,28 +510,47 @@ class AppLocalizationsEn extends AppLocalizations {
String get simulatedDownloadError =>
'Simulated download error (network timeout)';
@override
String get downloadFailed => 'Download failed';
@override
String downloading(String percent) {
return 'Downloading $percent%';
}
@override
String get installingUpdate => 'Installing update…';
@override
String get updateInstalledRestarting => 'Update installed! Restarting…';
@override
String get installationFailed => 'Installation failed';
@override
String get updateAlreadyInProgress => 'Update already in progress';
@override
String get updateAlreadyRunning => 'Update already running';
String updatingTo(String version) {
return 'Updating to $version';
}
@override
String get downloadingUpdate => 'Downloading update…';
@override
String get confirmInstallation => 'Confirm the installation';
@override
String get confirmInstallationDescription =>
'Confirm the update in the Android prompt, then open KoolTap again.';
@override
String get openInstallerAgain => 'Open installer again';
@override
String get whatsNew => 'What\'s new';
@override
String get updateDownloadFailed =>
'Could not download the update. Check the internet connection and try again.';
@override
String get updateChecksumFailed =>
'The downloaded update is damaged. Try again.';
@override
String get updatePermissionDenied =>
'KoolTap is not allowed to install updates. Allow \"Install unknown apps\" for KoolTap in the Android settings.';
@override
String get updateInstallFailed => 'The update could not be installed.';
@override
String get genericError => 'An unexpected error occurred.';
@@ -577,12 +606,6 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get couldNotSaveSettings => 'Could not save settings.';
@override
String get downloadFailedWithDetail => 'Download failed.';
@override
String get installationFailedWithDetail => 'Installation failed.';
@override
String get devMenu => 'Dev Menu';
+10 -38
View File
@@ -1,4 +1,5 @@
import '../models/app_error.dart';
import '../models/update_failure.dart';
import 'app_localizations.dart';
extension AppLocalizationsHelpers on AppLocalizations {
@@ -44,47 +45,18 @@ extension AppLocalizationsHelpers on AppLocalizations {
};
}
/// Update messages still come from the OTA plugin as plain strings.
String _updateMessage(String? message) {
return switch (message) {
'Update failed' => updateFailed,
'Download failed' => downloadFailed,
'Installation failed' => installationFailed,
'Update already in progress' => updateAlreadyInProgress,
_ => message ?? genericError,
String updateFailureText(UpdateFailure? failure) {
return switch (failure) {
UpdateFailure.download => updateDownloadFailed,
UpdateFailure.checksum => updateChecksumFailed,
UpdateFailure.permission => updatePermissionDenied,
UpdateFailure.install => updateInstallFailed,
UpdateFailure.alreadyRunning => updateAlreadyInProgress,
UpdateFailure.simulated => simulatedDownloadError,
UpdateFailure.unknown || null => updateFailed,
};
}
String updateStatus(String status) {
if (status.startsWith('Downloading ')) {
return downloading(status.substring('Downloading '.length));
}
return switch (status) {
'Preparing download…' => preparingDownload,
'Download failed' => downloadFailed,
'Installing update…' => installingUpdate,
'Update installed! Restarting…' => updateInstalledRestarting,
'Installation failed' => installationFailed,
'Update already running' => updateAlreadyRunning,
_ => status,
};
}
String updateError(String? message) {
if (message == null) return updateFailed;
if (message.startsWith('Download failed')) return downloadFailedWithDetail;
if (message.startsWith('Installation failed')) {
return installationFailedWithDetail;
}
if (message == 'Simulated download error (network timeout)') {
return simulatedDownloadError;
}
if (message == 'Update already in progress') return updateAlreadyInProgress;
return _updateMessage(message);
}
String devAction(String? message) {
if (message == null) return '';
+67 -44
View File
@@ -68,7 +68,7 @@ class AppLocalizationsNl extends AppLocalizations {
String get openOrSelectTab => 'Open of selecteer eerst een poef.';
@override
String get openNewTab => 'Nieuw poef openen';
String get openNewTab => 'Nieuwe poef openen';
@override
String get customerGroupName => 'Naam klant / groep';
@@ -90,6 +90,21 @@ class AppLocalizationsNl extends AppLocalizations {
@override
String get clearSearch => 'Zoekopdracht wissen';
@override
String get openNewTabDescription =>
'Een klant of groep toevoegen aan de kassa';
@override
String tabOpened(String name) {
return 'Poef geopend voor $name';
}
@override
String get searchTabs => 'Poefs zoeken';
@override
String get closeSearch => 'Zoeken sluiten';
@override
String get allCustomers => 'Alle klanten';
@@ -325,6 +340,18 @@ class AppLocalizationsNl extends AppLocalizations {
return '$category • $price • Voorraad: $stock';
}
@override
String get infiniteStock => 'Oneindige voorraad';
@override
String get infiniteStockDescription =>
'Raakt nooit op, de voorraad wordt niet geteld';
@override
String productInfiniteStockSummary(String category, String price) {
return '$category • $price • Oneindige voorraad';
}
@override
String get outOfStock => 'UITVERKOCHT';
@@ -457,28 +484,12 @@ class AppLocalizationsNl extends AppLocalizations {
@override
String get update => 'Updaten';
@override
String get updateReady => 'Update klaar';
@override
String get updateReadyDescription =>
'De update is gedownload en geïnstalleerd. Start de app nu opnieuw om de wijzigingen toe te passen.';
@override
String get restartApp => 'App opnieuw starten';
@override
String get updateFailed => 'Update mislukt';
@override
String get retry => 'Opnieuw proberen';
@override
String get updating => 'Updaten';
@override
String get installing => 'Installeren';
@override
String get doNotCloseDuringUpdate => 'Sluit de app niet tijdens de update';
@@ -502,29 +513,47 @@ class AppLocalizationsNl extends AppLocalizations {
String get simulatedDownloadError =>
'Gesimuleerde downloadfout (netwerktime-out)';
@override
String get downloadFailed => 'Download mislukt';
@override
String downloading(String percent) {
return 'Downloaden $percent%';
}
@override
String get installingUpdate => 'Update installeren…';
@override
String get updateInstalledRestarting =>
'Update geïnstalleerd! Opnieuw starten…';
@override
String get installationFailed => 'Installatie mislukt';
@override
String get updateAlreadyInProgress => 'Update is al bezig';
@override
String get updateAlreadyRunning => 'Update wordt al uitgevoerd';
String updatingTo(String version) {
return 'Updaten naar $version';
}
@override
String get downloadingUpdate => 'Update downloaden…';
@override
String get confirmInstallation => 'Bevestig de installatie';
@override
String get confirmInstallationDescription =>
'Bevestig de update in het Android-venster en open KoolTap daarna opnieuw.';
@override
String get openInstallerAgain => 'Installatie opnieuw openen';
@override
String get whatsNew => 'Wat is er nieuw';
@override
String get updateDownloadFailed =>
'Kon de update niet downloaden. Controleer de internetverbinding en probeer opnieuw.';
@override
String get updateChecksumFailed =>
'De gedownloade update is beschadigd. Probeer opnieuw.';
@override
String get updatePermissionDenied =>
'KoolTap mag geen updates installeren. Sta \"Onbekende apps installeren\" toe voor KoolTap in de Android-instellingen.';
@override
String get updateInstallFailed => 'De update kon niet worden geïnstalleerd.';
@override
String get genericError => 'Er is een onverwachte fout opgetreden.';
@@ -584,12 +613,6 @@ class AppLocalizationsNl extends AppLocalizations {
String get couldNotSaveSettings =>
'Instellingen konden niet worden opgeslagen.';
@override
String get downloadFailedWithDetail => 'Download mislukt.';
@override
String get installationFailedWithDetail => 'Installatie mislukt.';
@override
String get devMenu => 'Ontwikkelaarsmenu';
@@ -659,10 +682,10 @@ class AppLocalizationsNl extends AppLocalizations {
String get testingHelpers => 'Testhelpers';
@override
String get createTestTab => 'Testtabblad maken';
String get createTestTab => 'Testpoef maken';
@override
String get addRandomItems => 'Tabblad met willekeurige items toevoegen';
String get addRandomItems => 'Poef met willekeurige items toevoegen';
@override
String get addTestProducts => '100 testproducten toevoegen';
@@ -754,11 +777,11 @@ class AppLocalizationsNl extends AppLocalizations {
String get categoryOther => 'Overig';
@override
String get devActionClearedOpenTabs => 'Alle open tabbladen gewist';
String get devActionClearedOpenTabs => 'Alle open poefs gewist';
@override
String get devActionClearedHistory =>
'Geschiedenis van gesloten tabbladen gewist';
'Geschiedenis van gesloten poefs gewist';
@override
String get devActionClearedProducts => 'Alle producten gewist';
@@ -796,7 +819,7 @@ class AppLocalizationsNl extends AppLocalizations {
@override
String devActionTestTab(int count) {
return 'Testtabblad gemaakt met $count items';
return 'Testpoef gemaakt met $count items';
}
@override
+26 -19
View File
@@ -19,7 +19,7 @@
"importNamesDescription": "Bereid een lijst met namen voor om later als poefs te gebruiken.",
"importPlaceholder": "Namen importeren is hier later beschikbaar.",
"openOrSelectTab": "Open of selecteer eerst een poef.",
"openNewTab": "Nieuw poef openen",
"openNewTab": "Nieuwe poef openen",
"customerGroupName": "Naam klant / groep",
"cancel": "Annuleren",
"openTab": "Poef openen",
@@ -27,6 +27,11 @@
"@couldNotCreateTab": {"placeholders": {"error": {"type": "String"}}},
"searchByName": "Zoeken op naam…",
"clearSearch": "Zoekopdracht wissen",
"openNewTabDescription": "Een klant of groep toevoegen aan de kassa",
"tabOpened": "Poef geopend voor {name}",
"@tabOpened": {"placeholders": {"name": {"type": "String"}}},
"searchTabs": "Poefs zoeken",
"closeSearch": "Zoeken sluiten",
"allCustomers": "Alle klanten",
"customer": "Klant",
"noClosedTabs": "Nog geen gesloten poefs",
@@ -102,6 +107,10 @@
"closeTab": "Poef sluiten",
"productStockSummary": "{category} • {price} • Voorraad: {stock}",
"@productStockSummary": {"placeholders": {"category": {"type": "String"}, "price": {"type": "String"}, "stock": {"type": "int"}}},
"infiniteStock": "Oneindige voorraad",
"infiniteStockDescription": "Raakt nooit op, de voorraad wordt niet geteld",
"productInfiniteStockSummary": "{category} • {price} • Oneindige voorraad",
"@productInfiniteStockSummary": {"placeholders": {"category": {"type": "String"}, "price": {"type": "String"}}},
"outOfStock": "UITVERKOCHT",
"tabsYouCloseAppearHere": "Gesloten poefs verschijnen hier.",
"enterPinSubtitle": "Je gebruikt dit om de app te ontgrendelen",
@@ -146,13 +155,8 @@
"@versionAvailable": {"placeholders": {"version": {"type": "String"}}},
"later": "Later",
"update": "Updaten",
"updateReady": "Update klaar",
"updateReadyDescription": "De update is gedownload en geïnstalleerd. Start de app nu opnieuw om de wijzigingen toe te passen.",
"restartApp": "App opnieuw starten",
"updateFailed": "Update mislukt",
"retry": "Opnieuw proberen",
"updating": "Updaten",
"installing": "Installeren",
"doNotCloseDuringUpdate": "Sluit de app niet tijdens de update",
"cancelUpdate": "Update annuleren?",
"cancelUpdateDescription": "De update is bezig. Als je nu weggaat, kan de app instabiel worden.",
@@ -160,14 +164,19 @@
"cancelUpdateAction": "Update annuleren",
"preparingDownload": "Download voorbereiden…",
"simulatedDownloadError": "Gesimuleerde downloadfout (netwerktime-out)",
"downloadFailed": "Download mislukt",
"downloading": "Downloaden {percent}%",
"@downloading": {"placeholders": {"percent": {"type": "String"}}},
"installingUpdate": "Update installeren…",
"updateInstalledRestarting": "Update geïnstalleerd! Opnieuw starten…",
"installationFailed": "Installatie mislukt",
"updateAlreadyInProgress": "Update is al bezig",
"updateAlreadyRunning": "Update wordt al uitgevoerd",
"updatingTo": "Updaten naar {version}",
"@updatingTo": {"placeholders": {"version": {"type": "String"}}},
"downloadingUpdate": "Update downloaden…",
"confirmInstallation": "Bevestig de installatie",
"confirmInstallationDescription": "Bevestig de update in het Android-venster en open KoolTap daarna opnieuw.",
"openInstallerAgain": "Installatie opnieuw openen",
"whatsNew": "Wat is er nieuw",
"updateDownloadFailed": "Kon de update niet downloaden. Controleer de internetverbinding en probeer opnieuw.",
"updateChecksumFailed": "De gedownloade update is beschadigd. Probeer opnieuw.",
"updatePermissionDenied": "KoolTap mag geen updates installeren. Sta \"Onbekende apps installeren\" toe voor KoolTap in de Android-instellingen.",
"updateInstallFailed": "De update kon niet worden geïnstalleerd.",
"genericError": "Er is een onverwachte fout opgetreden.",
"couldNotLoadBar": "Barkassa kon niet worden geladen.",
"couldNotCreateTabMessage": "Poef kon niet worden aangemaakt.",
@@ -186,8 +195,6 @@
"currentPinIncorrect": "Huidige PIN is onjuist.",
"couldNotLoadSettings": "Instellingen konden niet worden geladen.",
"couldNotSaveSettings": "Instellingen konden niet worden opgeslagen.",
"downloadFailedWithDetail": "Download mislukt.",
"installationFailedWithDetail": "Installatie mislukt.",
"devMenu": "Ontwikkelaarsmenu",
"dataManagement": "Databeheer",
"clearOpenTabs": "Alle open poefs wissen",
@@ -210,8 +217,8 @@
"simulateUpdateDownload": "Updatedownload simuleren",
"openDownloadProgress": "Downloadvoortgang openen",
"testingHelpers": "Testhelpers",
"createTestTab": "Testtabblad maken",
"addRandomItems": "Tabblad met willekeurige items toevoegen",
"createTestTab": "Testpoef maken",
"addRandomItems": "Poef met willekeurige items toevoegen",
"addTestProducts": "100 testproducten toevoegen",
"stressTestGrid": "Productraster stresstesten",
"simulateLowStock": "Lage voorraad simuleren",
@@ -240,8 +247,8 @@
"categoryCoffee": "Koffie",
"categoryTea": "Thee",
"categoryOther": "Overig",
"devActionClearedOpenTabs": "Alle open tabbladen gewist",
"devActionClearedHistory": "Geschiedenis van gesloten tabbladen gewist",
"devActionClearedOpenTabs": "Alle open poefs gewist",
"devActionClearedHistory": "Geschiedenis van gesloten poefs gewist",
"devActionClearedProducts": "Alle producten gewist",
"devActionSeededProducts": "{count} producten toegevoegd",
"@devActionSeededProducts": {"placeholders": {"count": {"type": "int"}}},
@@ -254,7 +261,7 @@
"devActionCacheCleared": "Afbeeldingencache gewist (geen actie in debugmodus)",
"devActionLowStock": "Lage voorraad gesimuleerd voor {count} producten",
"@devActionLowStock": {"placeholders": {"count": {"type": "int"}}},
"devActionTestTab": "Testtabblad gemaakt met {count} items",
"devActionTestTab": "Testpoef gemaakt met {count} items",
"@devActionTestTab": {"placeholders": {"count": {"type": "int"}}},
"devActionTestProducts": "{count} testproducten toegevoegd",
"@devActionTestProducts": {"placeholders": {"count": {"type": "int"}}},