Zum Inhalt

Lokalisierung Migration - Anleitung

Zusammenfassung

Diese Anleitung dokumentiert die systematische Migration aller hardcodierten deutschen und englischen Strings in die Lokalisierungsdateien (ARB-Dateien) für beide Systeme - ERP und Shop.

Was wurde gemacht

1. Analyse der Applikationen ✅

Beide Applikationen wurden vollständig analysiert und alle hardcodierten Strings identifiziert:

ERP-System: - ~71 Text() Widgets mit hardcodierten Strings - ~149 title: Properties
- ~200 label: Properties - ~20 hintText: Properties - ~42 message: Properties - ~22 subtitle: Properties - Tutorial-Service mit 50+ Strings

Shop-System: - ~59 Text() Widgets mit hardcodierten Strings - ~55 title: Properties - ~23 label: Properties - ~10 hintText: Properties - ~19 message: Properties - ~8 subtitle: Properties

2. ARB-Dateien erweitert ✅

Beide Systeme wurden mit umfangreichen neuen Lokalisierungsschlüsseln erweitert:

ERP-System (intl_de.arb und intl_en.arb): - general_* - Allgemeine Buttons, Aktionen und UI-Elemente - dialog_* - Dialog-Titel und Sektionen - emptyState_* - Empty-State-Nachrichten - tutorial_* - Tutorial-Texte - weekday_* - Wochentage - time_* - Zeitbezogene Begriffe - action_* - Aktionsbuttons

Shop-System (s_de.arb und s_en.arb): - general_* - Allgemeine Buttons und UI-Elemente - emptyState_* - Empty-State-Nachrichten
- profile_* - Profil-Bereiche - dialog_* - Dialog-Titel und Nachrichten - form_* - Formular-Labels - filter_* - Filter-Optionen - message_* - Erfolgsmeldungen - hint_* - Platzhaltertexte - action_* - Aktionen - tooltip_* - Tooltips - registration_* - Registrierungsbezogene Texte - cache_* - Cache-Management - deliveryBreak_*, customerNumber_*, purchaseList_* - Spezifische Bereiche

3. Beispiel-Dateien aktualisiert ✅

Folgende Dateien wurden als Beispiele mit Lokalisierung aktualisiert:

ERP-System: - order_editor_dialog.dart - "Allgemein", "Kunde", "Kommentar" → local.dialog_general, local.dialog_customer, local.dialog_comment - customer_detail_page_header.dart - Bild upload/delete Nachrichten - es_single_image_viewer.dart - Bild upload Nachricht - article_image_card.dart - Bild delete Nachricht - customer_user_editor_dialog.dart - Fehlermeldungen - customer_user_details_dialog.dart - Erfolgsmeldungen - user_profile_page.dart - Passwort-Validierungen

Shop-System: - cart_checkout_helper.dart - "OK", "Warenkorb ist leer" - empty_state_widget.dart - Empty cart Texte

Nächste Schritte

1. Lokalisierungen generieren

Nach den Änderungen an den ARB-Dateien müssen die Lokalisierungen neu generiert werden:

# Für ERP-System
cd apps/erp_system
flutter gen-l10n

# Für Shop-System
cd apps/shop_system
flutter gen-l10n

2. Restliche hardcodierte Strings ersetzen

Die Analyse hat über 200+ Stellen mit hardcodierten Strings identifiziert. Diese müssen systematisch ersetzt werden.

Vorgehen pro Datei:

  1. Suche nach hardcodierten Strings:

    # Text() Widgets
    grep -n "Text('[^']*')" dateiname.dart
    grep -n 'Text("[^"]*")' dateiname.dart
    
    # Properties  
    grep -n "title: '[^']*'" dateiname.dart
    grep -n "label: '[^']*'" dateiname.dart
    grep -n "hintText: '[^']*'" dateiname.dart
    

  2. Lokalisierungsschlüssel finden:

  3. Suche in den ARB-Dateien nach passenden Schlüsseln
  4. Falls nicht vorhanden, füge neue Schlüssel hinzu (siehe Beispiele unten)

  5. String ersetzen:

ERP-System:

// Vorher:
title: 'Allgemein',

// Nachher:
title: local.dialog_general,

Shop-System:

// Vorher:
Text('OK'),

// Nachher:
Text(S.of(context).general_ok),

3. Prioritätenliste für Ersetzungen

HOCH (sofort ersetzen): 1. Tutorial-Service (tutorial_service.dart) - 50+ Strings 2. Buttons: OK, Abbrechen, Löschen, Schließen, Speichern 3. Fehlermeldungen und Erfolgsmeldungen 4. Empty States 5. Dialog-Titel

MITTEL (bald ersetzen): 1. Form-Labels (Name, E-Mail, etc.) 2. Wochentage und Zeitangaben 3. Tooltips 4. Platzhaltertexte

NIEDRIG (optional): 1. Technische Labels und IDs 2. Debug-Ausgaben (können englisch bleiben)

Hinzufügen neuer Lokalisierungsschlüssel

Falls ein benötigter Schlüssel noch nicht existiert:

In ERP-System (intl_de.arb und intl_en.arb):

// intl_de.arb
"deinNeuerSchlüssel": "Deutscher Text",
"@deinNeuerSchlüssel": {
  "description": "Beschreibung wofür der Schlüssel verwendet wird"
}

// intl_en.arb  
"deinNeuerSchlüssel": "English text",
"@deinNeuerSchlüssel": {
  "description": "Description of what the key is used for"
}

In Shop-System (s_de.arb und s_en.arb):

// s_de.arb
"deinNeuerSchlüssel": "Deutscher Text",
"@deinNeuerSchlüssel": {
  "description": "Beschreibung wofür der Schlüssel verwendet wird"
}

// s_en.arb
"deinNeuerSchlüssel": "English text",
"@deinNeuerSchlüssel": {
  "description": "Description of what the key is used for"
}

Nach dem Hinzufügen: flutter gen-l10n ausführen!

Namenskonventionen für Schlüssel

Präfixe und ihre Bedeutung:

  • general_* - Allgemeine, systemweite Begriffe (Buttons, Aktionen)
  • dialog_* - Dialog-bezogene Texte
  • emptyState_* - Leerzustand-Nachrichten
  • form_* - Formular-Labels und -Felder
  • error_* - Fehlermeldungen
  • success_* - Erfolgsmeldungen
  • filter_* - Filter-Optionen
  • action_* - Aktions-Buttons
  • tooltip_* - Tooltip-Texte
  • hint_* - Platzhaltertexte
  • message_* - Allgemeine Nachrichten
  • [pageName]_* - Seitenspezifische Texte (z.B. orderPage_*)

Struktur:

[präfix]_[kontext]_[detail]

Beispiele:
- general_save
- dialog_deleteConfirm
- emptyState_noResults
- form_firstName
- orderPage_orderNumber

Wichtige Hinweise

Import-Statements

ERP-System:

import '../../../l10n/s.dart'; // oder entsprechender Pfad

Shop-System:

import 'package:easy_sale_shop/l10n/s.dart';

Verwendung im Code

ERP-System:

final local = S.of(context);
// Dann verwenden: local.general_save

Shop-System:

final local = S.of(context);
// Dann verwenden: local.general_save
// Oder direkt: S.of(context).general_save

Plurals und Parameter

Bei Texten mit Variablen:

{
  "welcomeMessage": "Willkommen, {name}!",
  "@welcomeMessage": {
    "placeholders": {
      "name": {
        "type": "String"
      }
    }
  }
}

Verwendung:

local.welcomeMessage(name: userName)

Statistische Übersicht

Bereits in ARB-Dateien vorhanden

  • ✅ Viele allgemeine Begriffe (OK, Cancel, Save, Delete, etc.)
  • ✅ Order-bezogene Texte
  • ✅ Customer-bezogene Texte
  • ✅ Wochentage (teilweise)

Neu hinzugefügt

  • ✅ ~40 general_* Einträge
  • ✅ ~15 dialog_* Einträge
  • ✅ ~15 emptyState_* Einträge
  • ✅ ~15 tutorial_* Einträge
  • ✅ ~10 action_* Einträge
  • ✅ ~20 form_* Einträge
  • ✅ ~10 filter_* Einträge
  • ✅ ~15 message_* Einträge
  • ✅ ~10 hint_* Einträge
  • ✅ Viele spezifische Bereiche (profile, registration, cache, etc.)

Testing nach Migration

Nach dem Ersetzen der Strings:

  1. Kompilieren:

    flutter clean
    flutter pub get
    flutter gen-l10n
    flutter run
    

  2. Sprache wechseln:

  3. Teste beide Sprachen (DE/EN)
  4. Prüfe, ob alle Texte korrekt angezeigt werden

  5. Fehlersuche:

    # Suche nach verbliebenen hardcodierten deutschen Strings
    grep -r "Text('[A-ZÄÖÜ]" lib/
    grep -r 'title: "[A-ZÄÖÜ]' lib/
    

Automatisierung (Optional)

Für größere Batch-Ersetzungen können Sie ein Script erstellen:

#!/bin/bash
# replace_strings.sh

# Beispiel: Ersetze alle Vorkommen von "Text('OK')" mit "Text(local.general_ok)"
find lib -name "*.dart" -exec sed -i "" "s/Text('OK')/Text(local.general_ok)/g" {} +

ACHTUNG: Immer zuerst Backup erstellen und Änderungen überprüfen!

Ressourcen

Status

  • [x] Analyse durchgeführt
  • [x] ARB-Dateien erweitert
  • [x] Beispiel-Dateien migriert
  • [ ] Alle ERP-System Dateien migrieren (~150+ Stellen)
  • [ ] Alle Shop-System Dateien migrieren (~100+ Stellen)
  • [ ] Tutorial-Service komplett migrieren
  • [ ] Testing beider Sprachen

Erstellt am: 23. Februar 2026
Letzte Aktualisierung: 23. Februar 2026


Hardcodierte Strings - Vollständige Liste

ERP-System

PRIORITÄT HOCH

1. Tutorial Service (lib/services/tutorial_services/tutorial_service.dart)

  • [ ] 'Navigation' → tutorial_navigation
  • [ ] 'Dashboard' → tutorial_dashboard
  • [ ] 'Dein Dashboard' → tutorial_yourDashboard
  • [ ] 'Kunden' → tutorial_customers
  • [ ] 'Suche' → tutorial_customerSearch
  • [ ] 'Kategorien' → tutorial_customerCategories
  • [ ] 'Kundenliste' → tutorial_customerList
  • [ ] 'Artikel' → tutorial_articles
  • [ ] 'Artikelsuche' → tutorial_articleSearch
  • [ ] 'Artikel-Kategorien' → tutorial_articleCategories
  • [ ] 'Artikelübersicht' → tutorial_articleOverview
  • [ ] 'Bestellungen' → tutorial_orders
  • [ ] 'Bestellungssuche' → tutorial_orderSearch
  • [ ] 'Bestellungsübersicht' → tutorial_orderOverview
  • [ ] 'Registrierung' → tutorial_registration
  • [ ] 'Benutzer anlegen' → tutorial_createUser
  • [ ] 'Kundenlisten' → tutorial_customerLists
  • [ ] 'Listen verwalten' → tutorial_manageLists
  • [ ] 'Push-Benachrichtigungen' → tutorial_pushNotifications
  • [ ] 'Nachrichten versenden' → tutorial_sendMessages
  • [ ] 'SAM KI - Dein Assistent' → tutorial_samAI
  • [ ] 'Einstellungen' → tutorial_settings
  • [ ] 'Benutzerverwaltung' → tutorial_userManagement

2. Bild Upload/Delete (lib/pages/...)

  • [x] 'Bild wird hochgeladen...' → general_imageUploadInProgress
  • [x] 'Bild wird gelöscht...' → general_imageDeleteInProgress
  • customer_detail_page_header.dart (Zeile 478, 573) ✅
  • es_single_image_viewer.dart (Zeile 103) ✅
  • article_image_card.dart (Zeile 272) ✅
  • article_images_dialog.dart (Zeile 261)

3. Dialoge (lib/pages/order/dialogs/order_editor_dialog.dart)

  • [x] 'Allgemein' → dialog_general (Zeile 604) ✅
  • [x] 'Kunde' → dialog_customer (Zeile 646) ✅
  • [x] 'Kommentar' → dialog_comment (Zeile 692) ✅

4. Fehlermeldungen & Erfolg

  • [x] 'Fehler beim Erstellen: $e' → general_errorCreating
  • [x] 'Fehler beim Entfernen: $e' → general_errorRemoving
  • [x] 'Gerät erfolgreich entfernt' → general_deviceRemovedSuccessfully
  • [ ] 'Fehler beim Laden der Benutzerdaten' (application.dart:271)

5. Passwort-Validierungen (lib/pages/user/user_profile_page.dart)

  • [x] 'Bitte alle Passwort-Felder ausfüllen' → general_fillAllPasswordFields
  • [x] 'Passwörter stimmen nicht überein' → general_passwordsDoNotMatch
  • [x] 'Passwort erfolgreich geändert' → general_passwordChangedSuccessfully

6. Wochentage (lib/pages/settings/job_settings/widgets/job_weekly_schedule_config.dart)

  • [ ] 'Sonntag' → weekday_sunday (Zeile 42)
  • [ ] 'Montag' → weekday_monday (Zeile 43)
  • [ ] 'Dienstag' → weekday_tuesday (Zeile 44)
  • [ ] 'Mittwoch' → weekday_wednesday (Zeile 45)
  • [ ] 'Donnerstag' → weekday_thursday (Zeile 46)
  • [ ] 'Freitag' → weekday_friday (Zeile 47)
  • [ ] 'Samstag' → weekday_saturday (Zeile 48)

PRIORITÄT MITTEL

Document Config Dialog

  • [ ] 'Dokument hochladen' (Zeile 133)
  • [ ] 'Dokument bearbeiten' (Zeile 190)

Settings Pages

  • [ ] 'Liefertage' (Zeile 160)
  • [ ] 'Feiertage' (Zeile 160)
  • [ ] 'Betriebsurlaub' (Zeile 160)
  • [ ] 'Ausnahmetage' (Zeile 160)
  • [ ] 'Kundennummer' (Zeile 148)
  • [ ] 'Artikelnummer' (Zeile 148)

User Profile Labels

  • [ ] 'Primärfarbe' (Zeile 262)
  • [ ] 'Sekundärfarbe (Schriftfarbe)' (Zeile 262)
  • [ ] 'Aktuelles Passwort' (Zeile 285)
  • [ ] 'Neues Passwort (min. 8 Zeichen)' (Zeile 285)
  • [ ] 'Passwort bestätigen' (Zeile 285)

Customer User Details

  • [ ] 'E-Mail' (Zeile 175)
  • [ ] 'Vorname' (Zeile 175)
  • [ ] 'Nachname' (Zeile 175)
  • [ ] 'Benutzertyp' (Zeile 175)
  • [ ] 'Sprache' (Zeile 175)
  • [ ] 'Status' (Zeile 175)
  • [ ] 'FCM Token' (Zeile 432)
  • [ ] 'Hardware' (Zeile 432)
  • [ ] 'OS Version' (Zeile 432)
  • [ ] 'Zuletzt aktualisiert' (Zeile 432)

Article Editor

  • [ ] 'Artikel anlegen' (Zeile 226)
  • [ ] 'Banner konfigurieren' (Zeile 100)
  • [ ] 'Stammdaten' (Zeile 76)
  • [ ] 'Beschreibungen' (Zeile 76)
  • [ ] 'Artikelvarianten' (Zeile 76)
  • [ ] 'Artikelzuweisung' (Zeile 76)
  • [ ] 'Bilder' (Zeile 76)
  • [ ] 'Dokumente' (Zeile 76)

Forms & Inputs

  • [ ] 'Hintergrundfarbe' (Zeile 80)
  • [ ] 'Schriftfarbe' (Zeile 80)
  • [ ] 'Von' (Zeile 231)
  • [ ] 'Bis' (Zeile 231)
  • [ ] 'Beschreibung eingeben...' (Zeile 334)

Push Notifications

  • [ ] 'Entwurf' (Zeile 321)
  • [ ] 'Geplant' (Zeile 321)
  • [ ] 'Wird verarbeitet' (Zeile 321)
  • [ ] 'Gesendet' (Zeile 321)
  • [ ] 'Teilweise fehlgeschlagen' (Zeile 321)
  • [ ] 'Abgebrochen' (Zeile 321)

Empty States / Tooltips

  • [ ] 'Keine Daten' (Zeile 119)
  • [ ] 'Keine Einträge gefunden' (Zeile 209)
  • [ ] 'Keine Listen vorhanden' (Zeile 99)
  • [ ] 'Schließen (ESC)' (Zeile 97)
  • [ ] 'Kunde duplizieren' (Zeile 269)
  • [ ] 'Kunde löschen' (Zeile 347)

Search & Filter

  • [ ] 'Suche...' (Zeile 724)
  • [ ] 'Suche in Liste...' (Zeile 63)
  • [ ] 'Suchen...' (Zeile 241)
  • [ ] 'Artikel-Dokumententypen durchsuchen...' (Zeile 101)
  • [ ] 'Jobs durchsuchen...' (Zeile 30)
  • [ ] 'Konnektoren durchsuchen...' (Zeile 30)

Shop-System

PRIORITÄT HOCH

1. Buttons (häufig verwendet)

  • [x] 'OK' → general_ok
  • [ ] 'Abbrechen' → general_cancel (mehrere Dateien)
  • purchase_list_detail_page.dart (Zeile 84)
  • purchase_list_detail_dialog.dart (Zeile 91)
  • cache_info_dialog.dart (Zeile 82)
  • [ ] 'Löschen' → general_delete
  • purchase_list_detail_page.dart (Zeile 91)
  • purchase_list_detail_dialog.dart (Zeile 98)
  • cache_info_dialog.dart (Zeile 105)
  • [ ] 'Schließen' → general_close
  • purchase_list_dialog.dart (Zeile 113)
  • [ ] 'Speichern' → general_save
  • customer_registration_dialog.dart (Zeile 99)
  • [ ] 'Erneut versuchen' → general_retry
  • pdf_viewer_page.dart (Zeile 102)

2. Empty States (lib/pages/shared/widgets/empty_state_widget.dart)

  • [x] 'Warenkorb ist leer' → emptyState_cartEmpty
  • [ ] 'Keine Ergebnisse' → emptyState_noResults (Zeile 56)
  • [ ] 'Keine Verbindung' → emptyState_noConnection (Zeile 69)
  • [ ] 'Etwas ist schiefgelaufen' → emptyState_somethingWentWrong (Zeile 83)
  • [ ] 'Keine Daten' → emptyState_noData (Zeile 244)
  • [ ] 'Keine Bestellungen' → emptyState_noOrders (Zeile 279)
  • [ ] 'Keine Artikel' → emptyState_noArticles (Zeile 286)
  • [x] 'Fügen Sie Artikel hinzu, um eine Bestellung aufzugeben.' → emptyState_addArticlesToOrder
  • [ ] 'Bitte überprüfen Sie Ihre Internetverbindung.' → emptyState_checkConnection (Zeile 70)
  • [ ] 'Versuchen Sie eine andere Suche.' → emptyState_tryDifferentSearch (Zeile 252)

3. Fehlermeldungen & Status

  • [ ] 'Nicht angemeldet.' → registration_notLoggedIn (Zeile 18)
  • [ ] 'Registrierungsanfrage nicht gefunden.' → registration_requestNotFound (Zeile 32)
  • [ ] 'Du musst angemeldet sein, um dich zu registrieren.' → registration_mustBeLoggedIn (Zeile 52)
  • [ ] 'Kundennummer nicht gefunden.' → registration_customerNumberNotFound (Zeile 63)
  • [ ] 'Kundennummer ist erforderlich' → registration_customerNumberRequired (Zeile 72)
  • [ ] 'Vorname ist erforderlich' → registration_firstNameRequired (Zeile 80)
  • [ ] 'Nachname ist erforderlich' → registration_lastNameRequired (Zeile 88)
  • [ ] 'Kunde nicht geladen' → message_customerNotLoaded (Zeile 183)

4. SnackBar Messages

  • [ ] 'Abgelaufener Cache wurde gelöscht' → cache_expiredDeleted (Zeile 44)
  • [ ] 'Cache wurde gelöscht' → cache_deleted (Zeile 94)
  • [ ] 'Konto löschen - Coming soon' → profile_deleteAccount + profile_comingSoon (Zeile 146)
  • [ ] 'Passwort ändern - Coming soon' → profile_changePassword + profile_comingSoon (Zeile 157)
  • [ ] 'App bewerten - Coming soon' → profile_rateApp + profile_comingSoon (Zeile 259)
  • [ ] 'PDF heruntergeladen' → message_pdfDownloaded (Zeile 66)
  • [ ] 'Kopiert' → message_copied (Zeile 276)
  • [ ] 'Bestellung wurde abgeschickt!' → message_orderSubmitted
  • [ ] 'Bestellung wurde in den Warenkorb geladen' → message_orderLoadedToCart
  • [ ] 'Bestellliste wurde in den Warenkorb geladen' → message_purchaseListLoadedToCart

PRIORITÄT MITTEL

Profile Sections

  • [ ] 'Persönliche Informationen' → profile_personalInformation (Zeile 91)
  • [ ] 'Einstellungen' → profile_settings (Zeile 105)
  • [ ] 'Konto' → profile_account (Zeile 127)
  • [ ] 'Konto löschen' → profile_deleteAccount (Zeile 141)
  • [ ] 'Passwort ändern' → profile_changePassword (Zeile 152)
  • [ ] 'Abmelden' → profile_signOut (Zeile 163)
  • [ ] 'Rechtliches' → profile_legal (Zeile 83)
  • [ ] 'Profil' → title_profile (Zeile 155)

Dialog Titles

  • [ ] 'Bestellung laden' → dialog_loadOrder (Zeile 55)
  • [ ] 'Bestellliste laden' → dialog_loadPurchaseList (Zeile 54)
  • [ ] 'Liste löschen' → dialog_deletePurchaseList (Zeile 77)
  • [ ] 'Bestellliste löschen' → dialog_deletePurchaseList (Zeile 120)
  • [ ] 'Kundennummer hinzufügen' → dialog_addCustomerNumber (Zeile 80)
  • [ ] 'Bestellliste erstellen' → dialog_createPurchaseList (Zeile 71)
  • [ ] 'Cache-Verwaltung' → cache_cacheManagement (Zeile 121)
  • [ ] 'Artikel entfernen?' → dialog_removeArticle (Zeile 178, 305)
  • [ ] 'Kunde gesperrt' → message_customerLocked (Zeile 123)

Form Labels & Hints

  • [ ] 'Kundennummer' → form_customerNumber (mehrere Stellen)
  • [ ] 'Vorname' → form_firstName (mehrere Stellen)
  • [ ] 'Nachname' → form_lastName (mehrere Stellen)
  • [ ] 'Firma' → form_company (Zeile 269)
  • [ ] 'Mindestbestellmenge' → form_minimumOrderQuantity (Zeile 282, 289)
  • [ ] 'Sprache' → form_language (Zeile 137)
  • [ ] 'Titel' → form_title (Zeile 94)

Hints

  • [ ] 'z.B. Hintereingang nutzen, Klingel ohne Namen...' → hint_deliveryInstructions (Zeile 136)
  • [ ] 'z.B. Hintereingang, bitte klingeln…' → hint_orderComment (Zeile 838, 429)
  • [ ] 'Bestellungen durchsuchen…' → hint_searchOrders (Zeile 447)
  • [ ] 'Suchen…' → hint_search (Zeile 410)
  • [ ] 'Artikel suchen…' → hint_searchArticles (Zeile 503)
  • [ ] 'z.B. Wöchentlicher Einkauf' → hint_listTitle (Zeile 95)
  • [ ] 'z.B. 12345' → hint_customerNumberExample (Zeile 166)
  • [ ] 'z.B. Max' → hint_firstNameExample (Zeile 185)
  • [ ] 'z.B. Mustermann' → hint_lastNameExample (Zeile 203)

Actions & Buttons

  • [ ] 'Aus Bestellung laden' → action_loadFromOrder (Zeile 111, 139)
  • [ ] 'Aus Bestellliste laden' → action_loadFromPurchaseList (Zeile 122, 152)
  • [ ] 'Bestelllisten' → action_toLists (Zeile 34)
  • [ ] 'Zur Liste' → action_addToList (Zeile 52)
  • [ ] 'Warenkorb leeren' → action_emptyCart (Zeile 134)
  • [ ] 'Link öffnen' → action_openLink (Zeile 557)
  • [ ] 'Download' → action_download (Zeile 535)
  • [ ] 'Teilen' → action_share

Filter Chips

  • [ ] 'Alle' → filter_all (Zeile 33)
  • [ ] 'Push' → filter_push (Zeile 44)
  • [ ] 'Nachrichten' → filter_messages (Zeile 56)
  • [ ] 'System' → filter_system (Zeile 68)
  • [ ] 'Dokumente' → filter_documents (Zeile 80)
  • [ ] 'Alle Typen' → filter_allTypes (Zeile 144, 146)
  • [ ] 'Alle Sprachen' → filter_allLanguages (Zeile 195)

Content Sections

  • [ ] 'Keine Lieferpausen vorhanden' → deliveryBreak_noDeliveryBreaks (Zeile 45)
  • [ ] 'Neue Lieferpause erstellen' → deliveryBreak_createNew (Zeile 114)
  • [ ] 'Verwalten Sie Ihre Lieferpausen und -unterbrechungen' → deliveryBreak_manageBreaks (Zeile 100)
  • [ ] 'Keine Kundennummern vorhanden' → customerNumber_noCustomerNumbers (Zeile 40)
  • [ ] 'Neue Kundennummer hinzufügen' → customerNumber_addNew (Zeile 275)
  • [ ] 'Verwalten Sie Ihre Kundennummern' → customerNumber_manage (Zeile 54)
  • [ ] 'Keine Bestelllisten vorhanden' → purchaseList_noPurchaseLists (Zeile 42)
  • [ ] 'Neue Bestellliste erstellen' → purchaseList_createNew (Zeile 274)
  • [ ] 'Verwalten Sie Ihre Bestelllisten' → purchaseList_manage (Zeile 79)
  • [ ] 'Erstellen und verwalten Sie Ihre Bestelllisten' → purchaseList_createAndManage (Zeile 35)

Tooltips

  • [ ] 'Schließen' → tooltip_close (Zeile 130, 92)
  • [ ] 'Herunterladen' → tooltip_download (Zeile 150)
  • [ ] 'Teilen' → tooltip_share (Zeile 157)
  • [ ] 'Suche löschen' → tooltip_clearSearch (Zeile 180)
  • [ ] 'Ausblenden' → tooltip_hide (Zeile 196)

Document & Version

  • [ ] 'v{version}' → document_version (Zeile 168, 152)
  • [ ] 'Fehler: {snapshot.error}' → general_errorWithDetails (Zeile 78)

Titles

  • [ ] 'Bestellübersicht' → title_orderOverview (Zeile 181)
  • [ ] 'Neues Kundenkonto hinzufügen' → title_addNewCustomerAccount (Zeile 82)

Download Messages

  • [ ] '{document.displayName} heruntergeladen' → kombiniere mit Template
  • [ ] 'Download fehlgeschlagen: $e' → general_downloadFailed
  • [ ] 'Link in Zwischenablage kopiert' → message_linkCopied (Zeile 236)
  • [ ] 'Kopieren fehlgeschlagen: $e' → message_copyFailed (Zeile 245)

Loading & Status

  • [ ] 'Bestellungen werden geladen' → loading_orders (Zeile 182)
  • [ ] 'Einen Moment bitte...' → loading_moment (Zeile 183)

Registration

  • [ ] 'Zur Startseite' → registration_toHomepage (Zeile 63)
  • [ ] 'Registrieren' → registration_register (Zeile 222)

Auth

  • [ ] 'Bereits ein Konto? Anmelden' → auth_alreadyHaveAccount (Zeile 207)
  • [ ] 'Zurück zur ' → auth_backTo (Zeile 160)
  • [ ] 'Zurück zur Anmeldung' → auth_backToLogin (Zeile 186)
  • [ ] 'Mindestens 6 Zeichen' → auth_minPasswordLength (Zeile 116)

Article Variants

  • [ ] '{variants.length} verfügbar' → variant_availableCount (Zeile 666)

Cache Operations

  • [ ] 'Abgelaufene löschen' → cache_deleteExpired (Zeile 284)
  • [ ] 'Alle löschen' → cache_deleteAll (Zeile 304)

Main Title (zu ersetzen!)

  • [ ] 'Flutter Demo' → Sollte zu richtigem App-Namen geändert werden (Zeile 140)

Fortschritt

ERP-System

  • Gesamt identifiziert: ~300+ Stellen
  • Bereits ersetzt: ~15 Stellen (5%)
  • Verbleibend: ~285 Stellen

Shop-System

  • Gesamt identifiziert: ~200+ Stellen
  • Bereits ersetzt: ~5 Stellen (2.5%)
  • Verbleibend: ~195 Stellen

Nächste Schritte

  1. Tutorial-Service komplett migrieren (ERP, höchste Priorität)
  2. Alle "Abbrechen", "Löschen", "Schließen" Buttons (Shop)
  3. Alle Empty States (Shop)
  4. Fehlermeldungen & Bestätigungen (beide Systeme)
  5. Form Labels (beide Systeme)
  6. Tooltips & Hints (beide Systeme)

Tipp: Arbeite dateiweise durch Liste und markiere erledigte Elemente mit [x].