ARB Dosyaları ve gen_l10n Yerelleştirme İş Akışı
Türü belirli çeviriler üretmek için flutter_localizations ve gen_l10n iş akışını kurun.
ARB Dosyaları ve gen_l10n Yerelleştirme İş Akışı, CoddyKit'te ücretsiz bir Flutter Mobile Development dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Flutter Mobile Development öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Flutter Mobile Development kursu toplamda 4 dersten oluşur.
Bu dersin bazı bölümleri henüz çevrilmemiş olup İngilizce olarak gösterilmektedir.
Step 1: Why gen_l10n + dependencies
Hard-coding strings like Text('Welcome') makes an app impossible to translate. Flutter's official solution is gen_l10n: you write translations in ARB (Application Resource Bundle, a JSON format) files, and the build tool generates a typed Dart class so typos become compile-time errors.
Two pieces are required in pubspec.yaml. The flutter_localizations SDK package supplies Material/Cupertino/Widgets translations, and the generate: true flag turns on the gen_l10n build step.
intlis pulled in because generated code uses it for plurals and dates.- After editing, run
flutter pub get.
dependencies:
flutter:
sdk: flutter
flutter_localizations:
sdk: flutter
intl: any
flutter:
generate: trueStep 2: l10n.yaml config
Create an l10n.yaml file at the project root. It tells gen_l10n where your ARB files live and what to name the generated class.
arb-dir— folder holding the.arbfiles.template-arb-file— the source-of-truth locale that defines keys and metadata.output-localization-file— name of the generated Dart file.output-class— the class name you import in code.
# l10n.yaml
arb-dir: lib/l10n
template-arb-file: app_en.arb
output-localization-file: app_localizations.dart
output-class: AppLocalizationsStep 3: The template ARB file
The template locale (here app_en.arb) defines every key. Each key maps to a translated value. Keys starting with @ are metadata: they describe the entry but produce no string.
@@localedeclares which locale this file is.@welcomecan carry adescriptionto help translators.
The filename pattern is app_<localeCode>.arb.
{
"@@locale": "en",
"welcome": "Welcome",
"@welcome": {
"description": "Greeting shown on the home screen"
},
"settings": "Settings"
}Step 4: A translated ARB file
For each additional language, add a sibling file with the same keys but translated values. Metadata (the @ keys) is only required in the template; translations may omit it.
- Here
app_tr.arbprovides Turkish strings. - Missing keys fall back to the template locale, so keep the template complete.
{
"@@locale": "tr",
"welcome": "Hoş geldiniz",
"settings": "Ayarlar"
}Step 5: Generate the code
Code generation runs automatically during flutter run or flutter build when generate: true is set. You can also force it with flutter gen-l10n.
- Output lands in
.dart_tool/flutter_gen/gen_l10n/by default. - The generated
AppLocalizationsclass exposes one getter per key. - Add the generated path to your IDE's import suggestions; do not commit generated files.
Step 6: Wire into MaterialApp
Register the generated delegates and supported locales on MaterialApp. AppLocalizations.localizationsDelegates bundles your delegate plus the Material/Widgets/Cupertino ones, and supportedLocales lists what you ship.
- Flutter picks the best match between the device locale and
supportedLocales. - If none match, the first entry in
supportedLocalesis used.
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
localizationsDelegates: AppLocalizations.localizationsDelegates,
supportedLocales: AppLocalizations.supportedLocales,
home: const HomeScreen(),
);
}
}Step 7: Read a string
Inside a widget you fetch the localized instance with AppLocalizations.of(context) and read a getter. The call is null only if the delegates are missing, so the common idiom uses !.
- Each key from the ARB becomes a strongly-typed getter.
- Rename a key in the ARB and every wrong usage fails to compile.
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
class HomeScreen extends StatelessWidget {
const HomeScreen({super.key});
@override
Widget build(BuildContext context) {
final l10n = AppLocalizations.of(context)!;
return Scaffold(
appBar: AppBar(title: Text(l10n.settings)),
body: Center(child: Text(l10n.welcome)),
);
}
}Step 8: Placeholders
To inject values, declare placeholders in the template metadata. The value uses {name} syntax, and gen_l10n turns the getter into a method.
- Each placeholder needs a
type(e.g.String,int,DateTime). - The generated method signature follows the placeholder order.
{
"@@locale": "en",
"greeting": "Hello, {name}!",
"@greeting": {
"description": "Personalized greeting",
"placeholders": {
"name": { "type": "String" }
}
}
}Step 9: Call a placeholder method
Because greeting takes an argument, the generated member is a method, not a getter. You pass the value at the call site.
l10n.greeting('Ada')returns "Hello, Ada!".- Types are enforced: passing an
intwhere aStringis expected fails to compile.
Widget buildGreeting(BuildContext context, String userName) {
final l10n = AppLocalizations.of(context)!;
return Text(l10n.greeting(userName));
}Step 10: Plurals with ICU
ARB supports ICU message syntax for plurals. A {count, plural, ...} block selects the right wording per language. Declare the placeholder as num (or int).
=0,one, andotherare common categories.#is replaced by the formatted number.- Different locales have different plural rules — ICU handles them automatically.
{
"itemCount": "{count, plural, =0{No items} one{1 item} other{{count} items}}",
"@itemCount": {
"placeholders": {
"count": { "type": "int" }
}
}
}Step 11: A plain-Dart formatter
The selection logic ICU performs is just rules over a number. Here is a tiny standalone Dart program that mimics English plural selection — useful for understanding what gen_l10n generates under the hood.
- Real apps use the generated method; this is only for intuition.
String itemCount(int count) {
if (count == 0) return 'No items';
if (count == 1) return '1 item';
return '$count items';
}
void main() {
for (final n in [0, 1, 5]) {
print(itemCount(n));
}
}Quick Check
You added a new key logout only to app_en.arb but forgot it in app_tr.arb. A Turkish-locale user opens the screen. What happens?
Recap
You built the full Flutter localization pipeline:
- Added
flutter_localizations+intland setgenerate: true. - Configured
l10n.yaml(arb-dir, template, output class). - Wrote a template ARB plus per-locale translations.
- Let gen_l10n create the typed
AppLocalizationsclass. - Registered
localizationsDelegatesandsupportedLocales, then read strings viaAppLocalizations.of(context)!. - Used placeholders for dynamic values and ICU plurals for count-aware text.
The payoff: translations are type-checked, missing template keys are caught early, and translators work in a clean JSON format.
Sıkça Sorulan Sorular
“ARB Dosyaları ve gen_l10n Yerelleştirme İş Akışı” dersi ücretsiz mi?
Evet — “ARB Dosyaları ve gen_l10n Yerelleştirme İş Akışı” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Flutter Mobile Development kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Flutter Mobile Development kursu toplamda 4 dersten oluşur.
“ARB Dosyaları ve gen_l10n Yerelleştirme İş Akışı” dersinde ne öğreneceğim?
Türü belirli çeviriler üretmek için flutter_localizations ve gen_l10n iş akışını kurun. Flutter Mobile Development ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Flutter Mobile Development öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Flutter Mobile Development, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“ARB Dosyaları ve gen_l10n Yerelleştirme İş Akışı” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Flutter Mobile Development dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Flutter Mobile Development dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- ARB Dosyaları ve gen_l10n Yerelleştirme İş Akışı
- Çoğullaştırma, Cinsiyet ve ICU İleti Biçimlendirme
- RTL Düzenleri ve Yönlülük Yönetimi
- Anlamsal Bilgiler, Ekran Okuyucular ve Erişilebilir Bileşenler