feat: Flutter client localisation (12 languages)
Add flutter_localizations + intl, 12 ARB files (en/ru/es/de/fr/it/pt/zh/ja/ko/ar/hi), replace all hardcoded Russian UI strings with AppLocalizations, detect system locale on first launch, localise bottom nav bar labels, document rule in CLAUDE.md. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
100
client/lib/l10n/app_de.arb
Normal file
100
client/lib/l10n/app_de.arb
Normal file
@@ -0,0 +1,100 @@
|
||||
{
|
||||
"@@locale": "de",
|
||||
"appTitle": "FoodAI",
|
||||
"greetingMorning": "Guten Morgen",
|
||||
"greetingAfternoon": "Guten Tag",
|
||||
"greetingEvening": "Guten Abend",
|
||||
"caloriesUnit": "kcal",
|
||||
"gramsUnit": "g",
|
||||
"goalLabel": "Ziel:",
|
||||
"consumed": "Verzehrt",
|
||||
"remaining": "Verbleibend",
|
||||
"exceeded": "Überschritten",
|
||||
"proteinLabel": "Protein",
|
||||
"fatLabel": "Fett",
|
||||
"carbsLabel": "Kohlenhydrate",
|
||||
"today": "Heute",
|
||||
"yesterday": "Gestern",
|
||||
"mealsSection": "Mahlzeiten",
|
||||
"addDish": "Gericht hinzufügen",
|
||||
"scanDish": "Scannen",
|
||||
"menu": "Menü",
|
||||
"dishHistory": "Gerichtverlauf",
|
||||
"recommendCook": "Wir empfehlen zu kochen",
|
||||
"camera": "Kamera",
|
||||
"gallery": "Galerie",
|
||||
"analyzingPhoto": "Foto wird analysiert...",
|
||||
"inQueue": "Sie sind in der Warteschlange",
|
||||
"queuePosition": "Position {position}",
|
||||
"@queuePosition": {
|
||||
"placeholders": {
|
||||
"position": { "type": "int" }
|
||||
}
|
||||
},
|
||||
"processing": "Verarbeitung...",
|
||||
"upgradePrompt": "Warteschlange überspringen? Upgrade →",
|
||||
"recognitionFailed": "Erkennung fehlgeschlagen. Erneut versuchen.",
|
||||
"dishRecognition": "Gerichterkennung",
|
||||
"all": "Alle",
|
||||
"dishRecognized": "Gericht erkannt",
|
||||
"recognizing": "Wird erkannt…",
|
||||
"recognitionError": "Erkennungsfehler",
|
||||
"dishResultTitle": "Gericht erkannt",
|
||||
"selectDish": "Gericht auswählen",
|
||||
"dishNotRecognized": "Gericht nicht erkannt",
|
||||
"tryAgain": "Erneut versuchen",
|
||||
"nutritionApproximate": "Nährwerte sind ungefähr — aus dem Foto geschätzt.",
|
||||
"portion": "Portion",
|
||||
"mealType": "Mahlzeittyp",
|
||||
"dateLabel": "Datum",
|
||||
"addToJournal": "Zum Tagebuch hinzufügen",
|
||||
"addFailed": "Hinzufügen fehlgeschlagen. Erneut versuchen.",
|
||||
"historyTitle": "Erkennungsverlauf",
|
||||
"historyLoadError": "Verlauf konnte nicht geladen werden",
|
||||
"retry": "Wiederholen",
|
||||
"noHistory": "Noch keine Erkennungen",
|
||||
"profileTitle": "Profil",
|
||||
"edit": "Bearbeiten",
|
||||
"bodyParams": "KÖRPERPARAMETER",
|
||||
"goalActivity": "ZIEL & AKTIVITÄT",
|
||||
"nutrition": "ERNÄHRUNG",
|
||||
"settings": "EINSTELLUNGEN",
|
||||
"height": "Größe",
|
||||
"weight": "Gewicht",
|
||||
"age": "Alter",
|
||||
"gender": "Geschlecht",
|
||||
"genderMale": "Männlich",
|
||||
"genderFemale": "Weiblich",
|
||||
"goalLoss": "Gewichtsverlust",
|
||||
"goalMaintain": "Gewicht halten",
|
||||
"goalGain": "Muskelaufbau",
|
||||
"activityLow": "Niedrig",
|
||||
"activityMedium": "Mittel",
|
||||
"activityHigh": "Hoch",
|
||||
"calorieGoal": "Kalorienziel",
|
||||
"mealTypes": "Mahlzeittypen",
|
||||
"formulaNote": "Berechnet mit der Mifflin-St Jeor Formel",
|
||||
"language": "Sprache",
|
||||
"notSet": "Nicht festgelegt",
|
||||
"calorieHint": "Körperparameter eingeben, um das Kalorienziel zu berechnen",
|
||||
"logout": "Abmelden",
|
||||
"editProfile": "Profil bearbeiten",
|
||||
"cancel": "Abbrechen",
|
||||
"save": "Speichern",
|
||||
"nameLabel": "Name",
|
||||
"heightCm": "Größe (cm)",
|
||||
"weightKg": "Gewicht (kg)",
|
||||
"birthDate": "Geburtsdatum",
|
||||
"nameRequired": "Name eingeben",
|
||||
"profileUpdated": "Profil aktualisiert",
|
||||
"profileSaveFailed": "Speichern fehlgeschlagen",
|
||||
"mealTypeBreakfast": "Frühstück",
|
||||
"mealTypeSecondBreakfast": "Zweites Frühstück",
|
||||
"mealTypeLunch": "Mittagessen",
|
||||
"mealTypeAfternoonSnack": "Nachmittagssnack",
|
||||
"mealTypeDinner": "Abendessen",
|
||||
"mealTypeSnack": "Snack",
|
||||
"navHome": "Startseite",
|
||||
"navProducts": "Produkte",
|
||||
"navRecipes": "Rezepte"
|
||||
}
|
||||
Reference in New Issue
Block a user