posMessages top-level constant

Map<String, PosText> const posMessages

Was die Kasse selbst sagt: ein Satz je Schluessel (bereich.name), gleich wie im Web.

Implementation

const Map<String, PosText> posMessages = {
  'network.no_connection': PosText('Keine Verbindung zum Server. Bitte die Internetverbindung prüfen und erneut versuchen.'),
  'network.timeout': PosText('Der Server antwortet nicht. Bitte die Internetverbindung prüfen und erneut versuchen.'),
  'network.outcome_unknown': PosText('Der Server hat nicht geantwortet, der Vorgang kann trotzdem gebucht sein. Bitte vor einem neuen Versuch prüfen, ob der letzte Vorgang schon gebucht ist.'),
  'server.unexpected': PosText('Der Server hat unerwartet geantwortet (HTTP {status}). Bitte den Support verständigen.', placeholders: ['status']),
  'server.connection_disturbed': PosText('Die Verbindung zum Kassenserver ist gestört. Bitte kurz warten und erneut versuchen.'),
  'server.response_unreadable': PosText('Die Antwort des Kassenservers war nicht lesbar. Bitte die Kasse neu öffnen und vor einem neuen Versuch prüfen, ob der letzte Vorgang schon gebucht ist.'),
  'pairing.code_missing': PosText('Bitte den Kopplungs-Code eingeben.'),
  'pairing.failed': PosText('Die Kopplung ist fehlgeschlagen. Bitte erneut versuchen.'),
  'pairing.incomplete': PosText('Die Kopplung ist unvollständig zurückgekommen. Bitte im Panel einen neuen Code erzeugen und noch einmal versuchen.'),
  'device.browser_storage': PosText('Dieses Gerät konnte nicht gespeichert werden – der Browser-Speicher steht nicht zur Verfügung. Bitte den privaten Modus verlassen.', only: [PosSurface.web]),
  'login.pin_missing': PosText('Bitte die PIN eingeben.'),
  'login.failed': PosText('Die Anmeldung ist fehlgeschlagen. Bitte erneut versuchen.'),
  'login.not_completed': PosText('Die Anmeldung konnte nicht abgeschlossen werden. Bitte erneut versuchen.'),
  'login.completing': PosText('Anmeldung wird gerade abgeschlossen – bitte gleich noch einmal drücken.'),
  'session.expired': PosText('Die Sitzung ist abgelaufen. Bitte erneut anmelden.'),
  'session.expired_offline': PosText('Keine Verbindung zum Server – die Sitzung ist abgelaufen. Bitte erneut anmelden.'),
  'session.none': PosText('Keine Sitzung.'),
  'session.logging_out': PosText('Kasse meldet in {seconds} s ab – Bildschirm berühren, um weiterzuarbeiten.', placeholders: ['seconds']),
  'logout.press_again': PosText('Noch einmal drücken beendet die Schicht an dieser Kasse.'),
  'logout.cart_cleared': PosText('Noch einmal drücken meldet dich ab – der Warenkorb wird geleert.'),
  'permissions.not_changeable': PosText('Das darfst du nicht ändern – das Recht dafür vergibt der Inhaber im Panel.'),
  'cashregister.load_failed': PosText('Die Kasse konnte nicht geladen werden.'),
  'articles.load_failed': PosText('Die Artikel konnten nicht geladen werden.'),
  'articles.none_enabled': PosText('Keine Artikel an dieser Kasse. Im Panel unter „Kacheln & Gruppen“ freischalten.'),
  'articles.none_found': PosText('Keine Artikel gefunden.'),
  'articles.vat_rate_unknown': PosText('„{name}“ hat einen Steuersatz, den die Kasse nicht kennt.', placeholders: ['name']),
  'item.amount_missing': PosText('Bitte einen Betrag eingeben.'),
  'item.description_missing': PosText('Bitte eine Bezeichnung eingeben – sie steht am Beleg.'),
  'discount.percent_invalid': PosText('Bitte einen Prozentwert zwischen 0,1 und 100 eingeben.'),
  'checkout.nothing_entered': PosText('Noch nichts erfasst – bitte zuerst eine Position aufnehmen.'),
  'checkout.tendered_missing': PosText('Erst eintippen, was der Gast gibt – der Rückgeld-Rechner ist an.'),
  'checkout.tendered_too_little': PosText('Gegeben ist weniger als der Betrag.'),
  'checkout.locked': PosText('Kassieren gesperrt: {reason}', placeholders: ['reason']),
  'tip.over_half': PosText('Über 50 % Trinkgeld – wirklich? Steuerfrei ist nur ortsübliches Trinkgeld.'),
  'tip.kept_setting_hint': PosText('Der Mitarbeiter steckt das Bar-Trinkgeld beim Verkauf gleich ein: es zählt nicht ins Soll der Lade und gilt als schon genommen. An der Kasse lässt es sich je Verkauf umstellen.'),
  'completion.failed': PosText('Der Abschluss ist fehlgeschlagen.'),
  'completion.unknown': PosText('Unklar, ob der Beleg entstanden ist – die Antwort kam nicht an. Bitte nicht noch einmal abschließen: der Beleg kann bereits erstellt und signiert sein. Im Panel unter „Belege“ nachsehen; nur wenn er dort fehlt, den Verkauf erneut abschließen.'),
  'completion.zero_receipt_failed': PosText('Der Nullbeleg konnte nicht erstellt werden.'),
  'completion.signature_down': PosText('Die Signatureinheit hat nicht geantwortet. Der Beleg ist gültig und trägt den Vermerk „Sicherheitseinrichtung ausgefallen“.'),
  'completion.resolve_question': PosText('Nur erledigen, wenn der Beleg in der Belegliste steht – sonst bleiben {amount} ohne Beleg. Bitte zuerst unter „Belege“ nachsehen.', placeholders: ['amount']),
  'card_payment.not_possible': PosText('Kartenzahlung nicht möglich.'),
  'card_payment.not_completed': PosText('Die Kartenzahlung ist nicht zustande gekommen.'),
  'card_payment.not_started': PosText('Kartenzahlung nicht gestartet: {reason}', placeholders: ['reason']),
  'card_payment.unknown': PosText('Unklar, ob die Kartenzahlung durchgegangen ist – die Verbindung zum Terminal riss ab. Bitte am Terminal-Beleg nachsehen, BEVOR neu kassiert wird: die Karte kann belastet sein.'),
  'card_payment.unknown_with_id': PosText('Unklar, ob die Kartenzahlung durchgegangen ist – die Verbindung zum Terminal riss ab. Bitte am Terminal-Beleg nachsehen, BEVOR neu kassiert wird: die Karte kann belastet sein. Kennung der Zahlung: {reference}.', placeholders: ['reference']),
  'card_payment.waiting_for_terminal': PosText('Bitte am Terminal fortfahren …'),
  'card_payment.terminal_cancelling': PosText('Das Terminal bricht gleich von selbst ab …'),
  'card_payment.card_charged_receipt_open': PosText('Die Karte ist bereits mit {amount} belastet (Kennung {reference}) – der Beleg dazu fehlt noch. Bitte jetzt den Beleg erstellen und nicht erneut kassieren.', placeholders: ['amount', 'reference']),
  'card_payment.card_charged_cart_changed': PosText('Es gibt eine gebuchte Kartenzahlung über {amount} (Kennung {reference}), aber der Korb hat sich seither geändert. Bitte zuerst entscheiden: den Beleg zur gebuchten Zahlung erstellen oder die Zahlung am Terminal stornieren und hier verwerfen.', placeholders: ['amount', 'reference']),
  'card_payment.connect_not_connected': PosText('Kartenzahlung nicht möglich: Kasseneck Connect ist nicht verbunden – Einstellungen → Kasseneck Connect.', only: [PosSurface.web]),
  'card_payment.cart_locked_card_charged': PosText('Die Karte ist bereits belastet – Warenkorb, Rabatt und Trinkgeld bleiben gesperrt, bis der Beleg entsteht oder die Karte zurückerstattet ist.'),
  'card_payment.unpair_card_charged': PosText('Auf diesem Gerät liegt noch eine gebuchte Kartenzahlung ohne Beleg – sie muss von Hand am Terminal zurückerstattet werden (Betrag siehe unten).'),
  'terminal.none_found': PosText('Kein Hobex-Terminal gefunden – ist es eingeschaltet und im selben Netz wie dieser Rechner?', only: [PosSurface.web]),
  'terminal.not_ready': PosText('Terminal antwortet, ist aber nicht betriebsbereit: {response} – TID prüfen.', placeholders: ['response'], only: [PosSurface.web]),
  'gptom.app_missing': PosText('Die GP-Tom-App ist auf diesem Gerät nicht da.', only: [PosSurface.app]),
  'gptom.search_failed': PosText('GP Tom: Suche nach der App fehlgeschlagen: {reason}', placeholders: ['reason'], only: [PosSurface.app]),
  'gptom.payment_failed': PosText('GP Tom: Zahlung fehlgeschlagen: {reason}', placeholders: ['reason'], only: [PosSurface.app]),
  'gptom.terminal_not_responding': PosText('Das Terminal hat nicht geantwortet: {reason}', placeholders: ['reason'], only: [PosSurface.app]),
  'gptom.payment_not_completed': PosText('Die Zahlung wurde nicht abgeschlossen ({code}).', placeholders: ['code'], only: [PosSurface.app]),
  'gptom.declined': PosText('Das Terminal hat die Zahlung abgelehnt.', only: [PosSurface.app]),
  'gptom.declined_with_code': PosText('Das Terminal hat die Zahlung abgelehnt ({code}).', placeholders: ['code'], only: [PosSurface.app]),
  'gptom.not_opened': PosText('GP Tom ließ sich nicht öffnen – bitte die GP-Tom-App prüfen und erneut versuchen.', only: [PosSurface.app]),
  'gptom.timeout': PosText('Das Terminal hat in der Frist nicht geantwortet – die Karte kann belastet sein. Bitte am Terminal-Beleg nachsehen, BEVOR neu kassiert wird.', only: [PosSurface.app]),
  'gptom.timeout_with_id': PosText('Das Terminal hat in der Frist nicht geantwortet – die Karte kann belastet sein. Bitte am Terminal-Beleg nachsehen, BEVOR neu kassiert wird. Kennung der Zahlung: {reference}.', placeholders: ['reference'], only: [PosSurface.app]),
  'log.empty': PosText('Noch keine Einträge – das Protokoll füllt sich mit der ersten Kartenzahlung.'),
  'log.copied': PosText('Das Protokoll liegt in der Zwischenablage.'),
  'receipts.load_failed': PosText('Die Belege konnten nicht geladen werden.'),
  'receipts.none_in_period': PosText('Keine Belege in diesem Zeitraum.'),
  'receipt.load_failed': PosText('Der Beleg konnte nicht geladen werden.'),
  'receipt.not_found': PosText('Der Beleg wurde nicht gefunden.'),
  'cancellation.failed': PosText('Das Storno ist fehlgeschlagen.'),
  'cancellation.reason_missing': PosText('Bitte einen Grund wählen.'),
  'cancellation.item_missing': PosText('Bitte mindestens eine Position wählen.'),
  'cancellation.payments_missing': PosText('Dieser Beleg wurde in mehreren Zahlungen bezahlt – bitte angeben, wie zurückgegeben wird.'),
  'cancellation.refund_too_high': PosText('Eine Rückgabe ist höher als der Rest ihrer Zahlung – bitte die Beträge prüfen.'),
  'cancellation.refund_without_reference': PosText('Eine Rückgabe nennt keine Zahlung des Belegs – bitte das Storno neu beginnen.'),
  'cancellation.refund_reference_unknown': PosText('Eine Rückgabe nennt eine Zahlung, die es am Beleg nicht gibt – bitte das Storno neu beginnen.'),
  'cancellation.outcome_unknown': PosText('Unklar, ob das Storno entstanden ist – es kann bereits signiert sein. Bitte nicht erneut stornieren, sondern die Belegliste in ein paar Minuten neu laden.'),
  'cancellation.sum_mismatch': PosText('Die Rückgaben ergeben nicht den Betrag des Stornos – bitte die Beträge prüfen.'),
  'cancellation.refund_cards': PosText('Das Storno ist gebucht – bitte jede Karte unten am Terminal gutschreiben und abhaken.'),
  'cancellation.outcome_unknown_cards': PosText('Unklar, ob das Storno entstanden ist – es kann bereits signiert sein. Bitte nicht erneut stornieren und noch keine Karte gutschreiben, sondern die Belegliste in ein paar Minuten neu laden. Steht das Storno dort, die Karten laut Storno-Beleg am Terminal gutschreiben.'),
  'cancellation.cards_not_checked': PosText('Noch ist nicht jede Karte abgehakt – bitte jede am Terminal gutschreiben. Ist das schon geschehen, zum Schließen noch einmal drücken.'),
  'cancellation.input_rejected': PosText('Die Eingabe wurde abgelehnt – bitte das Storno neu beginnen.'),
  'cancellation.tip_refund_missing': PosText('Bitte wählen: Trinkgeld auch zurückgeben?'),
  'cancellation.tip_source_missing': PosText('Bitte wählen: Woher kommt das Trinkgeld zurück?'),
  'cancellation.tip_refunded_with_voucher': PosText('Beleg mit Gutschein: Das Trinkgeld wird mitstorniert.'),
  'voucher_error.not_found': PosText('Diesen Gutschein gibt es in diesem Betrieb nicht.'),
  'voucher_error.invalid': PosText('Dieser Gutschein ist nicht gültig.'),
  'voucher_error.invalid_code': PosText('Der Code ist nicht vollständig oder falsch abgetippt.'),
  'voucher_error.expired': PosText('Der Gutschein ist abgelaufen.'),
  'voucher_error.used_up': PosText('Der Gutschein ist bereits aufgebraucht.'),
  'voucher_error.blocked': PosText('Der Gutschein ist gesperrt.'),
  'voucher_error.cancelled': PosText('Der Gutschein wurde storniert.'),
  'voucher_error.insufficient_balance': PosText('Auf dem Gutschein ist nicht genug Guthaben.'),
  'voucher_error.exceeds_total': PosText('Der Gutschein deckt mehr, als offen ist. Bitte den Betrag anpassen.'),
  'voucher_error.balance_changed': PosText('Der Gutschein wurde gerade anderswo verwendet. Bitte neu prüfen.'),
  'voucher_error.rate_mismatch': PosText('Dieser Gutschein gilt nur für Leistungen mit {rate} %.', placeholders: ['rate']),
  'voucher_error.item_mismatch': PosText('Dieser Gutschein gilt nicht für die gewählten Positionen.'),
  'voucher_error.already_used': PosText('Dieser Gutschein wurde bereits verwendet.'),
  'voucher_error.partial_cancel': PosText('Belege mit Gutschein lassen sich nur ganz stornieren.'),
  'voucher_error.settings_missing': PosText('Die Gutschein-Einstellungen fehlen. Bitte die Kasse neu laden.'),
  'voucher_error.too_many_checks': PosText('Zu viele Versuche. Bitte in einer Stunde wieder.'),
  'voucher_error.sale_off': PosText('Gutscheine verkaufen geht hier noch nicht.'),
  'split.setting_hint': PosText('Ein Tisch zahlt in Teilen: jede Zahlung bar oder mit Karte, mit eigenem Trinkgeld – am Ende ein Beleg für alles.'),
  'split.amount_over_open': PosText('Der Betrag ist höher als offen – höchstens {amount}.', placeholders: ['amount']),
  'split.tip_over_amount': PosText('Das Trinkgeld ist höher als der Betrag dieser Zahlung.'),
  'split.tendered_too_little': PosText('Gegeben ist weniger als der Betrag dieser Zahlung.'),
  'split.still_open': PosText('Es sind noch {amount} offen – abschließen geht erst, wenn alles kassiert ist.', placeholders: ['amount']),
  'split.sum_mismatch': PosText('Die Zahlungen ergeben nicht den Betrag des Belegs – bitte die Liste prüfen.'),
  'split.cart_locked': PosText('Der Warenkorb ist gesperrt, solange Zahlungen kassiert sind – erst abschließen oder die Zahlungen entfernen.'),
  'split.switch_locked': PosText('Zurück zu Bar oder Karte geht erst, wenn keine Zahlung mehr kassiert ist.'),
  'split.return_cash': PosText('Bitte {amount} Bargeld an den Gast zurückgeben.', placeholders: ['amount']),
  'split.card_reverse_running': PosText('Die Kartenzahlung über {amount} wird am Terminal zurückgebucht …', placeholders: ['amount']),
  'split.card_reversed': PosText('Die Kartenzahlung über {amount} ist am Terminal zurückgebucht.', placeholders: ['amount']),
  'split.card_reverse_failed': PosText('Die Kartenzahlung über {amount} (Kennung {reference}) ließ sich nicht zurückbuchen – sie bleibt in der Liste. Bitte am Terminal-Beleg nachsehen und erneut versuchen.', placeholders: ['amount', 'reference']),
  'split.card_reverse_unknown': PosText('Unklar, ob die Rückbuchung über {amount} (Kennung {reference}) durchgegangen ist – die Zahlung bleibt in der Liste. Bitte am Terminal-Beleg nachsehen, BEVOR erneut zurückgebucht wird.', placeholders: ['amount', 'reference']),
  'split.card_already_reversed': PosText('Das Terminal meldet, dass die Kartenzahlung über {amount} bereits gutgeschrieben wurde (Kennung {reference}) – bitte am Terminal-Beleg prüfen und nicht erneut zurückbuchen.', placeholders: ['amount', 'reference']),
  'split.external_reverse': PosText('Diese Karte ist nicht an die Kasse angebunden. Bitte {amount} jetzt am Terminal zurückbuchen und danach bestätigen.', placeholders: ['amount']),
  'split.session_open': PosText('Eine getrennte Zahlung ist nicht abgeschlossen, {amount} sind schon kassiert. Bitte weiter kassieren oder alles zurückbuchen.', placeholders: ['amount']),
  'split.session_unreadable': PosText('Eine gespeicherte getrennte Zahlung auf diesem Gerät ließ sich nicht lesen – bitte prüfen, ob schon Karten belastet wurden (Kasseneck-Panel oder Terminal), und offene Beträge von Hand ausgleichen.'),
  'split.storage_failed': PosText('Die getrennte Zahlung ließ sich auf diesem Gerät nicht speichern – bitte die Kasse bis zum Abschluss dieses Belegs nicht neu laden, sonst stehen belastete Karten womöglich nicht mehr in der Liste.'),
  'split.too_many_payments': PosText('Ein Beleg lässt höchstens 20 Zahlungen zu.'),
  'split.unpair_open_cards': PosText('Auf diesem Gerät ist noch eine getrennte Zahlung mit belasteten Karten offen – sie müssen von Hand am Terminal zurückgebucht werden (Beträge siehe unten).'),
  'split.items_locked': PosText('Nach Positionen geht nicht mehr – eine Zahlung ist schon als Betrag kassiert.'),
  'split.select_items': PosText('Bitte zuerst antippen, was dieser Gast zahlt.'),
  'split.tendered_missing': PosText('Erst eintippen, was der Gast für diese Zahlung gibt – der Rückgeld-Rechner ist an.'),
  'receipt.link_copied': PosText('Der Link zum Beleg liegt in der Zwischenablage.'),
  'receipt.share_text': PosText('Beleg {number} von {business} über {amount}: {link}', placeholders: ['business', 'number', 'amount', 'link']),
  'receipt.not_shareable': PosText('Für diesen Beleg gibt es keinen Link – er stammt aus einer älteren Kasse.'),
  'receipt.test_hint_share': PosText('Test-Umgebung – der Beleg ist steuerlich nicht gültig.'),
  'receipt.mail_sent': PosText('Der Beleg wurde an {recipient} gesendet.', placeholders: ['recipient']),
  'receipt.mail_address_invalid': PosText('Diese E-Mail-Adresse ist nicht gültig.'),
  'receipt.mail_too_often': PosText('Dieser Beleg wurde schon oft gesendet – bitte später noch einmal.'),
  'receipt.mail_failed': PosText('Der Beleg konnte nicht gesendet werden. Bitte noch einmal versuchen.'),
  'receipt.mail_not_found': PosText('Dieser Beleg wurde nicht gefunden – er konnte nicht gesendet werden.'),
  'print.failed': PosText('Der Ausdruck ist fehlgeschlagen.'),
  'print.not_possible': PosText('Druck nicht möglich: {reason}', placeholders: ['reason']),
  'print.test_print_failed': PosText('Der Testdruck ist fehlgeschlagen.'),
  'print.test_print_not_possible': PosText('Der Testdruck ist fehlgeschlagen: {reason}', placeholders: ['reason']),
  'print.no_printer': PosText('Kein Bondrucker eingerichtet – in den Einstellungen unter Drucker & Lade.'),
  'print.printer_unreachable': PosText('Drucker nicht erreichbar.'),
  'print.job_expired': PosText('Drucker hat den Beleg nicht abgeholt (abgelaufen).', only: [PosSurface.web]),
  'print.no_printer_found': PosText('Kein Drucker gefunden – ist er eingeschaltet und im selben Netz wie dieser Rechner?', only: [PosSurface.web]),
  'print.chrome_only': PosText('{channel}-Druck geht nur in Chrome oder Edge (Windows, Mac, Android) – nicht in Safari und nicht am iPad.', placeholders: ['channel'], only: [PosSurface.web]),
  'print.no_printer_for_channel': PosText('Kein {channel}-Drucker verbunden – „{channel}-Drucker verbinden“ und den Drucker im Dialog wählen.', placeholders: ['channel'], only: [PosSurface.web]),
  'print.wizard_connect': PosText('Verbinde mit {name} …', placeholders: ['name']),
  'print.wizard_test_print_question': PosText('Ist der Testdruck gekommen?'),
  'print.wizard_qr_question': PosText('Welcher QR-Code ist sauber gedruckt?'),
  'print.wizard_qr_none_hint': PosText('Kein QR-Code kam sauber – der Beleg zeigt den QR-Code dann am Bildschirm.'),
  'print.wizard_nothing_arrived': PosText('Nichts gekommen? Drucker an, Papier drin, richtiges Gerät gewählt?'),
  'print.wizard_saved': PosText('{name} ist eingerichtet.', placeholders: ['name']),
  'print.wizard_cancelled': PosText('Nichts gespeichert.'),
  'codetable.question': PosText('In welcher Zeile steht kein falsches Zeichen?'),
  'codetable.question_hint': PosText('Lücken sind in Ordnung.'),
  'codetable.instruction': PosText('Die Zeile, in der KEIN falsches Zeichen steht. Eine Lücke ist in Ordnung. Passen mehrere, die mit den wenigsten Lücken.'),
  'codetable.instruction_none': PosText('Passt keine: {number}.', placeholders: ['number']),
  'bluetooth.off': PosText('Bluetooth ist ausgeschaltet. Bitte einschalten und erneut suchen.', only: [PosSurface.app]),
  'bluetooth.permission_missing': PosText('Bitte die Freigabe in den Geräte-Einstellungen erteilen.', only: [PosSurface.app]),
  'bluetooth.search_failed': PosText('Die Suche ist fehlgeschlagen: {reason}', placeholders: ['reason'], only: [PosSurface.app]),
  'connect.not_responding': PosText('Kasseneck Connect antwortet nicht – läuft das Programm auf diesem Rechner?', only: [PosSurface.web]),
  'connect.code_expired': PosText('Der Kopplungs-Code ist abgelaufen – im Agent einen neuen erzeugen („kasseneck-connect pair“).', only: [PosSurface.web]),
  'connect.too_many_attempts': PosText('Zu viele Fehlversuche – eine Minute warten und noch einmal versuchen.', only: [PosSurface.web]),
  'connect.printer_not_responding': PosText('Der Drucker antwortet nicht – Strom, Netzwerk und IP prüfen.', only: [PosSurface.web]),
  'connect.not_paired': PosText('Diese Kasse ist mit Kasseneck Connect nicht gekoppelt – in den Einstellungen „Koppeln“ drücken.', only: [PosSurface.web]),
  'connect.printer_unknown': PosText('Diesen Drucker kennt Kasseneck Connect nicht (mehr) – bitte neu suchen.', only: [PosSurface.web]),
  'connect.origin_not_allowed': PosText('Kasseneck Connect nimmt von dieser Adresse nichts an (Ursprung nicht freigegeben).', only: [PosSurface.web]),
  'connect.not_installed': PosText('Kasseneck Connect nicht gefunden – bitte installieren.', only: [PosSurface.web]),
  'connect.unpair_question': PosText('Diesen Browser wirklich von Connect trennen? Der Bondruck geht dann nicht mehr.', only: [PosSurface.web]),
  'settings.load_failed': PosText('Die Einstellungen konnten nicht geladen werden.'),
  'settings.save_failed': PosText('Die Einstellung konnte nicht gespeichert werden.'),
  'settings.not_loaded_yet': PosText('Noch nicht geladen – bitte kurz warten oder neu anmelden.'),
  'settings.ip_invalid': PosText('Keine gültige IP-Adresse (z. B. 192.168.1.50).'),
  'unpairing.failed': PosText('Entkoppeln fehlgeschlagen.'),
  'logo.upload_failed': PosText('Hochladen fehlgeschlagen.'),
  'logo.remove_failed': PosText('Entfernen fehlgeschlagen.'),
  'stocktake.none_open': PosText('An diesem Standort läuft gerade keine Inventur. Eine Inventur legt der Inhaber im Panel an.'),
  'stocktake.scan_or_search': PosText('Artikel scannen oder suchen.'),
  'stocktake.counted': PosText('{name}: {quantity} gezählt.', placeholders: ['name', 'quantity']),
  'stocktake.blind_hint': PosText('Blind zählen – die Kasse zeigt keinen Buchbestand. Bitte zählen, was wirklich da ist.'),
  'stocktake.recount_hint': PosText('Bitte die markierten Positionen nachzählen.'),
  'stocktake.unknown_code': PosText('Zu „{code}“ gibt es keinen Artikel. Bitte den Code prüfen oder den Artikel suchen.', placeholders: ['code']),
  'stocktake.quantity_invalid': PosText('Bitte eine gültige Menge eingeben – höchstens drei Nachkommastellen, bei Stückware nur ganze Zahlen.'),
  'stocktake.serials_capture': PosText('Bitte für jedes Stück die Seriennummer scannen.'),
  'stocktake.serials_mismatch': PosText('Je Stück genau eine Seriennummer: {count} erfasst, {quantity} gezählt.', placeholders: ['count', 'quantity']),
  'stocktake.reason_missing': PosText('Bitte einen Grund für das Stornieren eingeben.'),
  'stocktake.outcome_unknown': PosText('Unklar, ob die Zählung angekommen ist. „Erneut senden“ schickt dieselbe Zählung – sie zählt auch dann nur einmal.'),
  'shift.required': PosText('Bitte zuerst die Schicht öffnen.'),
  'shift.required_other': PosText('Die Schicht muss ein berechtigter Mitarbeiter öffnen.'),
  'shift.recount': PosText('Der gezählte Betrag weicht ab – bitte noch einmal zählen.'),
  'shift.comment_required': PosText('Die Abweichung ist größer als erlaubt – bitte kurz begründen.'),
  'shift.closed': PosText('Schicht {number} geschlossen.', placeholders: ['number']),
  'shift.long_open': PosText('Die Schicht läuft seit {since}.', placeholders: ['since']),
  'shift.already_open': PosText('An dieser Lade läuft schon eine Schicht.'),
  'shift.already_closed': PosText('Diese Schicht ist schon geschlossen.'),
  'shift.recount_exhausted': PosText('Es wurde schon zweimal gezählt. Bitte den Betrag der zweiten Zählung senden oder den Chef rufen.'),
  'shift.mode_off': PosText('An dieser Lade ist der Schichtbetrieb aus. Bitte im Panel einschalten.'),
  'shift.outcome_unknown': PosText('Unklar, ob das angekommen ist. „Erneut senden“ schickt denselben Vorgang – er zählt nur einmal.'),
  'cash_movement.exceeds_balance': PosText('So viel Bargeld ist laut Kassenstand nicht in der Lade.'),
  'cash_movement.note_required': PosText('Bitte einen Grund eingeben.'),
  'cash_movement.booked': PosText('{type} über {amount} gebucht.', placeholders: ['type', 'amount']),
  'cash_movement.type_invalid': PosText('Diese Art der Kassenbewegung ist hier nicht möglich.'),
  'cash_movement.same_drawer': PosText('Eine Umbuchung in dieselbe Lade geht nicht. Bitte eine andere Lade wählen.'),
  'tip_payout.exceeds_claim': PosText('Mehr als der offene Anspruch kann nicht ausgezahlt werden.'),
  'denominations.invalid': PosText('Scheine und Münzen ergeben nicht den Betrag.'),
  'amount.invalid': PosText('Bitte einen gültigen Betrag eingeben.'),
  'drawer.not_found': PosText('Diese Lade gibt es nicht mehr. Bitte im Panel die Lade dieses Geräts prüfen.'),
  'drawer.inactive': PosText('Diese Lade ist stillgelegt. Bitte im Panel eine andere Lade zuordnen.'),
  'tip_payout.recipient_required': PosText('Bitte einen Mitarbeiter wählen.'),
  'tip_payout.none_open': PosText('In dieser Schicht ist kein Trinkgeld offen.'),
  'shift.pending_hint': PosText('Noch nicht bestätigt. „Erneut senden“ schickt denselben Vorgang – er zählt nur einmal.'),
  'shift.change_float_missing': PosText('Es fehlen {amount} bis zum Wechselgeld von {total}.', placeholders: ['amount', 'total']),
  'app.not_in_browser': PosText('Die Kassen-App läuft nicht im Browser – dafür gibt es kasse.kasseneck.at.', only: [PosSurface.app]),
  'app.open_in_browser': PosText('Bitte im Browser öffnen: {target}', placeholders: ['target'], only: [PosSurface.app]),
};