DSGVO-konformes Unternehmen
ISO-27001-zertifiziertes Unternehmen
SOC-II-konformes Unternehmen
Flutter-Lokalisierung: ARB-Dateien, intl und gen-l10n erklärt
Die Flutter-Lokalisierung passt die Meldungen und die Oberfläche einer Anwendung an verschiedene Gebietsschemas an. Im integrierten Workflow unterstützt flutter_localizations lokalisierte Framework-Widgets, während ARB-Ressourcen und gen-l10n die AppLocalizations-API der Anwendung erzeugen und intl sprachabhängige Meldungen und Formatierungen unterstützt.

Mehr als 80 der weltweit größten Unternehmen haben sich für Smartcat entschieden
flutter_localizations und gen-l10n einrichten
Dieser Leitfaden richtet ein kleines Beispiel auf Englisch und Spanisch ein, erklärt Meldungsmetadaten und vergleicht gängige Paketansätze. Außerdem zeigt er, was Sie validieren sollten, bevor Sie eine Übersetzungsplattform mit einem Flutter-Projekt verbinden.
Verwenden Sie einen einzigen Lokalisierungsgenerator und legen Sie dessen Ein- und Ausgabeorte explizit fest. Das folgende Beispiel setzt eine bestehende Flutter-Anwendung mit eigenen SDK-Einschränkungen und normaler Projektkonfiguration voraus.
Übernehmen Sie die relevanten Einträge in pubspec.yaml; duplizieren Sie nicht die Abschnitte dependencies oder flutter:
dependencies:
flutter:
sdk: flutter
flutter_localizations:
sdk: flutter
intl: any
flutter:
generate: trueLösen Sie die Abhängigkeiten mit flutter pub get auf. Der Eintrag intl: any folgt dem offiziellen Einrichtungsmuster, sodass die Abhängigkeitsauflösung die mit dem Flutter SDK kompatible Version wählen kann; behalten Sie die Lockfile der Anwendung und den üblichen Prüfprozess für Abhängigkeiten bei.
Erstellen Sie l10n.yaml im Stammverzeichnis des Projekts:
arb-dir: lib/l10n
template-arb-file: app_en.arb
output-localization-file: app_localizations.dartNutzen Sie den aktuellen Flutter-Leitfaden zur Internationalisierung für die SDK-spezifische Einrichtung. Generierte Lokalisierungsdateien gehören im modernen Workflow in den Quellbaum der Anwendung. Das Beispiel importiert aus lib/l10n; übernehmen Sie keinen alten synthetischen Import von package:flutter_gen in eine neue Einrichtung. Siehe den Migrationshinweis zu generiertem Quellcode.
ARB-Dateien mit Kontext und typisierten Platzhaltern schreiben
Eine ARB-Datei ist ein JSON-basiertes Ressourcenpaket mit Meldungen und optionalen Metadaten. Halten Sie Meldungsschlüssel stabil, schreiben Sie vollständige Meldungen und nutzen Sie Metadaten, um zu erklären, wie der Text verwendet wird.
Erstellen Sie lib/l10n/app_en.arb:
{
"@@locale": "en",
"appTitle": "Reading room",
"@appTitle": {
"description": "Title of the sample reading application"
},
"welcomeName": "Welcome, {name}",
"@welcomeName": {
"description": "Greeting on the home screen",
"placeholders": {
"name": {"type": "String", "example": "Sam"}
}
},
"savedBooks": "{count, plural, =0{No saved books} one{1 saved book} other{{count} saved books}}",
"@savedBooks": {
"description": "Number of books saved to the user's library",
"placeholders": {
"count": {"type": "int"}
}
},
"readingState": "{state, select, active{Reading now} paused{Reading paused} other{Ready to read}}",
"@readingState": {
"description": "Reading status; state is active, paused or another value",
"placeholders": {
"state": {"type": "String"}
}
}
}Erstellen Sie lib/l10n/app_es.arb:
{
"@@locale": "es",
"appTitle": "Sala de lectura",
"welcomeName": "Te damos la bienvenida, {name}",
"savedBooks": "{count, plural, =0{No hay libros guardados} one{1 libro guardado} other{{count} libros guardados}}",
"readingState": "{state, select, active{Leyendo ahora} paused{Lectura en pausa} other{Todo listo para leer}}"
}Die Vorlage enthält die vom Generator verwendeten Platzhalter-Metadaten. Die lokalisierte Datei behält Meldungsschlüssel, Platzhalternamen und Select-Bezeichner bei und ändert nur die nutzersichtbare Formulierung. Diese spanischen Beispiele veranschaulichen die Mechanik; produktive Texte sollten im tatsächlichen Produktkontext muttersprachlich geprüft werden.
Führen Sie flutter gen-l10n aus, nachdem Sie Ressourcen hinzugefügt oder geändert haben. Behandeln Sie Generatorfehler als konkrete Ressourcenprobleme und beheben Sie sie, bevor Sie die Dateien in ein Release übernehmen.
Generierte Meldungen mit MaterialApp verbinden
Registrieren Sie die generierten Delegates und unterstützten Gebietsschemas und lesen Sie lokalisierte Meldungen dann aus einem Kontext unterhalb des Anwendungs-Widgets.
Das folgende Beispiel gehört nach der Generierung in lib/main.dart:
import 'package:flutter/material.dart';
import 'l10n/app_localizations.dart';
void main() => runApp(const ReadingApp());
class ReadingApp extends StatelessWidget {
const ReadingApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
localizationsDelegates: AppLocalizations.localizationsDelegates,
supportedLocales: AppLocalizations.supportedLocales,
home: const ReadingHome(),
);
}
}
class ReadingHome extends StatelessWidget {
const ReadingHome({super.key});
@override
Widget build(BuildContext context) {
final messages = AppLocalizations.of(context)!;
return Scaffold(
appBar: AppBar(title: Text(messages.appTitle)),
body: Padding(
padding: const EdgeInsetsDirectional.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(messages.welcomeName('Sam')),
Text(messages.savedBooks(3)),
Text(messages.readingState('active')),
],
),
),
);
}
}ReadingHome hat Zugriff auf die Lokalisierungen, die bereitgestellt werden von MaterialApp. Eine Abfrage von AppLocalizations aus dem Kontext des äußeren Widgets würde oberhalb des Providers suchen, den dieses Widget erstellt. Die Dokumentation zur Localizations-API erklärt, wie lokalisierte Ressourcen untergeordneten Widgets zur Verfügung gestellt werden.Die generierte API macht den Unterschied zwischen einer einfachen Meldung und einer Meldung mit Argumenten im Code sichtbar. Auf appTitle wird als Wert zugegriffen; welcomeName, savedBooks und readingState erhalten die Werte, die zum Aufbau ihrer Meldungen nötig sind.
Plural- und Select-Meldungen bewusst behandeln
Pluralmeldungen wählen die Formulierung abhängig von einer Menge und der Grammatik des Zielgebietsschemas. Select-Meldungen wählen einen Zweig anhand eines von der Anwendung gelieferten Bezeichners. Bewahren Sie Syntax und Bezeichner und übersetzen Sie nur den Text, den jeder Zweig anzeigt.
Pluralformen
Im Beispiel liefert =0 einen expliziten Satz für den leeren Zustand. Die Zweige one und other decken die Formen der Beispielsprachen ab; sie sind keine universelle Vorlage für jedes Zielgebietsschema. Geben Sie dem Prüfer genug Kontext, um die Formen zu liefern, die die Sprache und die von Ihrer App erzeugten Werte erfordern.
Select-Meldungen
Werte wie active und paused sind Programmbezeichner. Würden diese Bezeichner übersetzt, wäre die Ressource vom Code getrennt, der sie liefert. Der Zweig other bietet der Meldung einen Fallback für Werte, die keinem benannten Zweig entsprechen.
Vollständige Meldungen
Vermeiden Sie es, Fragmente wie ein übersetztes Verb, eine Zahl und ein übersetztes Substantiv aneinanderzuhängen. Eine vollständige Meldung lässt der Zielsprache die Kontrolle über die Wortstellung. Erläutern Sie im Briefing die Werte, erwarteten Bereiche und den Bildschirmkontext, damit Prüfer den Satz so beurteilen können, wie Nutzer ihn sehen.
Flutter-Lokalisierungspakete im Vergleich
Wählen Sie ein Paket nach Ressourcenformat, Anwendungsarchitektur und Wartungsbedarf. Die folgenden Pakete folgen unterschiedlichen Konventionen; mehr als einen Generator für dieselben Meldungen einzusetzen, schafft unnötige Unklarheit.
| Ansatz | Typische Ressourcen | Codegenerierung | Umgang mit Pluralformen | Sinnvoll, wenn |
|---|---|---|---|---|
| Integriertes gen-l10n | ARB | Erzeugt typisierte Dart-Zugriffsmethoden | Meldungssyntax im ICU-Stil | Sie den offiziellen Ressourcen-Workflow von Flutter nutzen möchten |
| easy_localization | Standardmäßig JSON, weitere Loader verfügbar | Optionale Generierungswerkzeuge | Plural-APIs des Pakets und gebietsschemaabhängige Regeln | Sie dessen Konventionen für das Laden von Assets und die Gebietsschemaverwaltung bevorzugen |
| GetX-Übersetzungen | Nach Gebietsschema verschlüsselte Maps im dokumentierten Basis-Workflow | Für die einfache Map-API nicht erforderlich | trPlural nutzt Singular- und Pluralschlüssel; komplexere Grammatik separat bewerten | Ihre Anwendung bereits GetX nutzt und dessen Übersetzungsmodell den Anforderungen genügt |
Lesen Sie vor der Entscheidung die aktuelle Dokumentation zu easy_localization und die GetX-Dokumentation. Testen Sie Fallback-Verhalten, Parameter, Pluralkategorien und Extraktions-Workflows mit Ihren echten Meldungen. Eine bequeme API für englische Strings beweist nicht, dass jede Sprache abgedeckt ist, die Sie ausliefern möchten.
intl ist keine konkurrierende Plattform für Übersetzungsmanagement. Es liefert Internationalisierungswerkzeuge, die Lokalisierungs-Workflows nutzen. gen-l10n erzeugt aus ARB-Ressourcen Zugriffsmethoden für die Anwendung. Das separate Paket intl_utils erzeugt ebenfalls Lokalisierungscode, doch seine Paketseite war bei der Prüfung am 30. Oktober 2026 als eingestellt markiert. Prüfen Sie den Wartungsstatus, bevor Sie es in einem neuen Projekt einsetzen.
Gebietsschemawechsel, RTL und Textausdehnung testen
Testen Sie sowohl die Korrektheit der Ressourcen als auch das Verhalten des übersetzten Texts in der Oberfläche. Ein erfolgreiches JSON-Parsing oder eine erfolgreiche Codegenerierung belegt nicht, dass ein Bildschirm verständlich und nutzbar ist.
Gebietsschemawechsel
Für eine gezielte Entwicklungsprüfung setzen Sie MaterialApp.locale auf einen unterstützten Wert wie const Locale('es'). Für eine produktive Sprachauswahl speichern Sie das gewählte Gebietsschema im Anwendungszustand, sichern die Präferenz entsprechend Ihren Produktanforderungen und bieten eine Option, der Systemsprache zu folgen. Validieren Sie eine gespeicherte Präferenz gegen die Gebietsschemas, die die aktuelle App-Version tatsächlich unterstützt.
Rechts-nach-links-Layouts
Verwenden Sie richtungsabhängige Layout-APIs für Elemente, die der Leserichtung folgen sollen. Prüfen Sie Abstände, Ausrichtung, Navigationselemente und Inhalte mit gemischter Schreibrichtung in einem echten Rechts-nach-links-Gebietsschema. Gehen Sie nicht davon aus, dass jedes Symbol gespiegelt werden muss: Ein Navigationspfeil und ein Markensymbol haben unterschiedliche Bedeutungen.
Textausdehnung
Testen Sie lange Übersetzungen und größere Schriftgrößen. Prüfen Sie Schaltflächen, Tabs, Dialoge, leere Zustände, Fehlermeldungen und schmale Layouts. Beziehen Sie dynamische Werte wie lange Namen und Zahlen ein, damit das Layout mit der Meldung geprüft wird, die Nutzer tatsächlich erhalten.
Verwenden Sie eine praxisnahe Testmatrix:
| Prüfung | Beispiel |
|---|---|
| Ressourcenabdeckung | Jeder erforderliche Vorlagenschlüssel hat einen bewusst gesetzten lokalisierten Wert oder Fallback |
| Meldungsargumente | Platzhalternamen und -typen bleiben mit den generierten Methoden kompatibel |
| Mengenverhalten | Null, eins und Werte, die die zusätzlichen Formen der Zielsprache auslösen |
| Select-Verhalten | Bekannte Zustände plus ein unerwarteter Wert, der other erreicht |
| Gebietsschemaverhalten | Systemsprache, explizite Auswahl, Neustart und nicht unterstützte Präferenz |
| Layout | Längerer Text, große Schrifteinstellungen und Rechts-nach-links-Inhalte |
| Bedeutung | Muttersprachliche Prüfung wichtiger Nutzerreisen |
Für die sprachliche Seite des Prozesses nutzen Sie den Workflow für Lokalisierungstests. Halten Sie sprachliche Freigabe und Ergebnisse funktionaler Tests als getrennte Release-Nachweise sichtbar.
Flutter-Web-Lokalisierung und Auffindbarkeit separat planen
Flutter Web kann lokalisierte Anwendungsressourcen nutzen, doch eine lokalisierte Oberfläche ergibt nicht automatisch eine SEO-fähige mehrsprachige Website. Sprachauswahl, Routing, Metadaten und die Auffindbarkeit von Inhalten bleiben Architekturentscheidungen.
Die Web-FAQ von Flutter beschreibt den Fokus auf Anwendungserlebnisse und empfiehlt für statische, textreiche Webinhalte einen dokumentorientierten Ansatz. Erwägen Sie separate HTML-basierte Marketing-, Hilfe- und Redaktionsseiten, wenn diese in der organischen Suche gut abschneiden sollen.
Halten Sie die Terminologie zwischen App und diesen öffentlichen Seiten einheitlich. Ein Besucher aus der Suche sollte den Funktionsnamen wiedererkennen, wenn er von der lokalisierten Landingpage in die Anwendung wechselt, auch wenn beide Oberflächen unterschiedliche Rendering-Systeme nutzen.
ARB-Übersetzungsprozess vor dem Skalieren validieren
Behandeln Sie ARB als strukturierte Anwendungsressource, nicht bloß als Datei mit Textwerten. Eine Übersetzungsübergabe muss Schlüssel, Metadaten, Platzhalter und Meldungssyntax bewahren und dann Dateien zurückliefern, die Generierung und App-Tests bestehen.
Zu den dokumentierten Softwareprojektformaten von Smartcat gehören JSON, YAML, Android-XML, iOS-.strings und LocJSON-Importe. Die für diesen Leitfaden geprüfte Dokumentation belegt weder native ARB-Unterstützung noch einen getesteten ARB-zu-JSON-Konvertierungsprozess. Gehen Sie nicht davon aus, dass eine geänderte Dateierweiterung Kompatibilität beweist. Siehe die Dokumentation zu Softwareprojekten.
Nutzen Sie Folgendes als vorgeschlagenes Validierungsverfahren mit Ihrem Implementierungsteam, nicht als bereits getestetes Connector-Rezept:
Repräsentative Stichprobe wählen
Wählen Sie ein kleines ARB-Beispiel mit einfachen Strings, Metadaten, typisierten Platzhaltern, Plural- und Select-Meldungen.
Import und Export bestätigen
Klären Sie mit dem Produktteam die unterstützte Import- und Exportmethode, einschließlich der Behandlung von
@-Metadaten und ICU-Meldungen.Sprachressourcen und Kontext bereitstellen
Stellen Sie ein Glossar, gegebenenfalls Translation Memory und klaren Kontext für jede Meldung bereit.
Übersetzen und Struktur schützen
Übersetzen und prüfen Sie den nutzersichtbaren Text und schützen Sie dabei Programmbezeichner und Struktur.
Vergleichen und zurückspielen
Vergleichen Sie die zurückgelieferten Ressourcen mit dem Quellvertrag und legen Sie sie wieder in den erwarteten Projektpfaden ab.
Generieren und testen
Führen Sie
flutter gen-l10n, statische Analyse und relevante Tests in der festgelegten SDK-Umgebung des Projekts aus.Prüfen und dokumentieren
Prüfen Sie die lokalisierte Oberfläche und dokumentieren Sie die freigegebene Quellversion.
Automatisieren Sie die Repository-Synchronisierung erst, wenn dieser Rundlauf funktioniert. Legen Sie fest, wer Quelländerungen bearbeitet, wie der Prüfstatus ungültig wird und wie generierte Artefakte verwaltet werden. Behalten Sie ARB-Ressourcen unter Versionskontrolle als maßgebliche Quelle für den Anwendungs-Workflow.
Flutter-Übersetzungsprozess prüfen lassen
Häufige Fehler und was Sie zuerst prüfen sollten
| Symptom | Zuerst prüfen |
|---|---|
| Generierter Import wird nicht gefunden | Die Generierung lief erfolgreich und der Import entspricht dem konfigurierten Ausgabepfad |
AppLocalizations.of(context) ist nicht verfügbar | Der Kontext liegt unterhalb des Lokalisierungs-Providers der Anwendung |
| Eine Meldungsmethode hat unerwartete Argumente | Platzhalter-Metadaten der Vorlage und die generierte API |
| Eine Select-Meldung zeigt immer den Fallback | Der Anwendungsbezeichner entspricht exakt dem Ressourcenzweig |
| Ein Gebietsschema fehlt | Ressourcendateien, unterstützte Gebietsschemas und Konfiguration der Gebietsschemaauflösung |
| Übersetzung funktioniert nach dem Export nicht mehr | Schlüssel, JSON-Gültigkeit, Metadaten und ICU-Syntax haben den Rundlauf überstanden |
Beheben Sie den frühesten fehlerhaften Vertrag, statt generierten Dart-Code von Hand zu bearbeiten. Generierter Code kann neu erzeugt werden; eine manuelle Korrektur dort verschwindet wahrscheinlich bei der nächsten Ressourcenänderung.
Häufig gestellte Fragen
Was ist eine ARB-Datei in Flutter?
Ein Application Resource Bundle ist eine JSON-basierte Datei mit lokalisierten Meldungen und optionalen Metadaten. Der gen-l10n-Workflow von Flutter nutzt ARB-Ressourcen, um eine Dart-Lokalisierungs-API zu erzeugen. Metadaten können die Meldung und ihre Platzhalter beschreiben und geben Entwicklern und Übersetzern so einen klareren Vertrag für jeden Schlüssel.
Was ist der Unterschied zwischen gen-l10n und intl_utils?
Beide erzeugen Lokalisierungscode aus ARB-Ressourcen, sind aber separate Werkzeuge mit unterschiedlichen Konfigurations- und Ausgabekonventionen. gen-l10n ist Teil des integrierten Flutter-Workflows. Die Paketseite von intl_utils war bei der Prüfung für diesen Leitfaden als eingestellt markiert; prüfen Sie daher den Wartungsstatus, bevor Sie es für eine neue Implementierung wählen.
Wie sollte ich ARB-Dateien übersetzen?
Übersetzen Sie die nutzersichtbaren Meldungen und bewahren Sie dabei stabile Schlüssel, Platzhalterbezeichner, Metadaten und die erforderliche Meldungsstruktur. Nutzen Sie einen Prozess, der diese Anforderungen unterstützt, und führen Sie dann Generierung und App-Tests mit den zurückgelieferten Dateien aus. Die muttersprachliche Prüfung sollte neben der strukturellen Gültigkeit auch Bedeutung und Kontext bewerten.
Unterstützt Smartcat ARB-Platzhalter und Pluralformen?
Die hier geprüfte Dokumentation zu Softwareprojekten belegt weder native ARB-Unterstützung noch einen getesteten Konvertierungsweg, der alle ARB-Funktionen bewahrt. Klären Sie die Import- und Exportmethode mit dem Produktteam und validieren Sie vor der Einführung einen repräsentativen Rundlauf. Allgemeine JSON-Unterstützung allein beweist keine ARB-Kompatibilität.
Funktioniert die Flutter-Lokalisierung im Web?
Flutter-Webanwendungen können lokalisierte Ressourcen und eine Gebietsschemaauswahl nutzen. Die Auffindbarkeit in Suchmaschinen ist ein separates Thema: Öffentliche Marketing- und Hilfeinhalte können von einer HTML-basierten Architektur profitieren. Testen Sie Routing, Sprachauswahl und Metadaten für Ihr konkretes Weberlebnis, statt anzunehmen, dass die mobile Lokalisierung das Web-SEO gleich mit erledigt.
Keine Antwort gefunden? Sprechen Sie mit einem Lokalisierungsexperten
Machen Sie Ihre Übersetzungsübergabe so zuverlässig wie Ihren Ressourcenvertrag
Bringen Sie ein kleines ARB-Beispiel und die für Ihren Build nötigen Prüfungen mit. Prüfen Sie den Prozess, bevor Sie ihn auf alle Sprachen und Releases ausweiten.