GDPR uyumlu kuruluş
ISO 27001 sertifikalı kuruluş
SOC II uyumlu kuruluş
Flutter Yerelleştirmesi: ARB Dosyaları, intl ve gen-l10n Açıklaması
Flutter yerelleştirmesi, bir uygulamanın mesajlarını ve arayüzünü farklı yerel ayarlara uyarlar. Yerleşik süreçte flutter_localizations yerelleştirilmiş çerçeve bileşenlerini desteklerken ARB kaynakları ve gen-l10n uygulamanın AppLocalizations API’sini üretir; intl ise dile duyarlı mesajları ve biçimlendirmeyi destekler.

Dünyanın en büyük şirketlerinden 80'den fazlası Smartcat'i seçti
flutter_localizations ve gen-l10n kurulumu
Bu kılavuz küçük bir İngilizce ve İspanyolca örnek kurar, mesaj meta verilerini açıklar ve yaygın paket yaklaşımlarını karşılaştırır. Ayrıca bir çeviri platformunu Flutter projesine bağlamadan önce neyin doğrulanması gerektiğini gösterir.
Tek bir yerelleştirme oluşturucu kullanın ve giriş ile çıkış konumlarını açıkça belirtin. Aşağıdaki örnek, kendi SDK kısıtlamalarına ve olağan proje yapılandırmasına sahip mevcut bir Flutter uygulamasını varsayar.
İlgili girdileri pubspec.yaml dosyasına birleştirin; dependencies veya flutter bölümlerini çoğaltmayın:
dependencies:
flutter:
sdk: flutter
flutter_localizations:
sdk: flutter
intl: any
flutter:
generate: trueBağımlılıkları flutter pub get ile çözümleyin. intl: any girdisi resmi kurulum modelini izler ve bağımlılık çözümlemesinin Flutter SDK ile uyumlu sürümü seçmesine olanak tanır; uygulamanın kilit dosyasını ve olağan bağımlılık inceleme sürecini koruyun.
Proje kök dizininde l10n.yaml oluşturun:
arb-dir: lib/l10n
template-arb-file: app_en.arb
output-localization-file: app_localizations.dartSDK’ya özgü kurulum için güncel Flutter uluslararasılaştırma kılavuzunu kullanın. Modern süreçte oluşturulan yerelleştirme dosyaları uygulamanın kaynak ağacında yer alır. Örnek, lib/l10n konumundan içe aktarır; yeni bir kuruluma eski sentetik package:flutter_gen içe aktarımını kopyalamaktan kaçının. Oluşturulan kaynak geçiş notuna bakın.
Bağlam ve türü belirtilmiş yer tutucularla ARB dosyaları yazın
ARB dosyası, mesajları ve isteğe bağlı meta verileri içeren JSON tabanlı bir kaynak paketidir. Mesaj anahtarlarını sabit tutun, mesajları eksiksiz yazın ve metnin nasıl kullanıldığını açıklamak için meta verilerden yararlanın.
lib/l10n/app_en.arb dosyasını oluşturun:
{
"@@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"}
}
}
}lib/l10n/app_es.arb dosyasını oluşturun:
{
"@@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}}"
}Şablon, oluşturucunun kullandığı yer tutucu meta verilerini içerir. Yerelleştirilmiş dosya, kullanıcıya yönelik ifadeleri değiştirirken mesaj anahtarlarını, yer tutucu adlarını ve select tanımlayıcılarını korur. Bu İspanyolca örnekler mekanizmayı göstermek içindir; üretimdeki dil, gerçek ürün bağlamında anadili konuşan uzmanlarca gözden geçirilmelidir.
Kaynak ekledikten veya değiştirdikten sonra flutter gen-l10n komutunu çalıştırın. Oluşturucu hatalarını çözülmesi gereken kaynak sorunları olarak ele alın ve dosyaları bir sürüme entegre etmeden önce giderin.
Oluşturulan mesajları MaterialApp’e bağlayın
Oluşturulan delegeleri ve desteklenen yerel ayarları kaydedin, ardından yerelleştirilmiş mesajları uygulama bileşeninin altındaki bir bağlamdan okuyun.
Aşağıdaki örnek, oluşturma işleminden sonra lib/main.dart dosyasına eklenir:
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 bileşeni, MaterialApptarafından sağlanan yerelleştirmelere erişebilir. Dış bileşenin bağlamından AppLocalizations istemek ise o bileşenin oluşturduğu sağlayıcının üst kısmına bakar. Localizations API belgeleri , yerelleştirilmiş kaynakların alt bileşenlere nasıl sunulduğunu açıklar.Oluşturulan API, düz bir mesaj ile bağımsız değişken alan bir mesaj arasındaki farkı kodda görünür kılar. appTitle bir değer olarak erişilir; welcomeName, savedBooks ve readingState ise mesajlarını oluşturmak için gereken değerleri alır.
Çoğul ve select mesajlarını bilinçli şekilde ele alın
Çoğul mesajlar, ifadeyi bir miktara ve hedef yerel ayarın dilbilgisine göre seçer. Select mesajları, uygulamanın sağladığı bir tanımlayıcıya göre bir dal seçer. Her dalın gösterdiği metni çevirirken söz dizimini ve tanımlayıcıları koruyun.
Çoğullar
Örnekte =0, boş durum için açık bir cümle sağlar. one ve other dalları örnek dillerin kullandığı biçimleri kapsar; her hedef yerel ayar için evrensel bir şablon değildir. Gözden geçirene, dilin gerektirdiği biçimleri ve uygulamanızın üretebileceği değerleri sağlayabilmesi için yeterli bağlam verin.
Select mesajları
active ve paused gibi değerler program tanımlayıcılarıdır. Bu tanımlayıcıları çevirmek, kaynağın onları sağlayan kodla bağlantısını koparır. other dalı, adlandırılmış bir dalla eşleşmeyen bir değer için mesaja yedek sağlar.
Eksiksiz mesajlar
Çevrilmiş bir fiil, bir sayı ve çevrilmiş bir isim gibi parçaları birleştirmekten kaçının. Eksiksiz bir mesaj, sözcük sırasının kontrolünü hedef dile bırakır. Gözden geçirenlerin cümleyi kullanıcıların göreceği şekilde değerlendirebilmesi için değerleri, beklenen aralıkları ve ekran bağlamını brifte açıklayın.
Flutter yerelleştirme paketlerini karşılaştırın
Paketi kaynak biçimine, uygulama mimarisine ve bakım ihtiyaçlarına göre seçin. Aşağıdaki paketler farklı kurallar sunar; aynı mesajlar için birden fazla oluşturucu benimsemek gereksiz belirsizlik yaratır.
| Yaklaşım | Tipik kaynaklar | Kod oluşturma | Çoğul yaklaşımı | Ne zaman uygun |
|---|---|---|---|---|
| Yerleşik gen-l10n | ARB | Türü belirtilmiş Dart erişimcileri oluşturur | ICU tarzı mesaj söz dizimi | Resmi Flutter kaynak sürecini istiyorsanız |
| easy_localization | Varsayılan olarak JSON, ek yükleyiciler de mevcut | İsteğe bağlı oluşturma araçları | Paketin çoğul API’leri ve yerel ayara duyarlı kurallar | Varlık yükleme ve yerel ayar yönetimi kurallarını tercih ediyorsanız |
| GetX çevirileri | Belgelenmiş temel süreçte yerel ayar anahtarlı eşlemeler | Temel eşleme API’si için gerekli değil | trPlural tekil/çoğul anahtarlar kullanır; daha zengin dilbilgisini ayrıca değerlendirin | Uygulamanız zaten GetX kullanıyorsa ve çeviri modeli gereksinimlere uyuyorsa |
Seçim yapmadan önce güncel easy_localization belgelerini ve GetX belgelerini inceleyin. Yedek davranışını, parametreleri, çoğul kategorilerini ve ayıklama süreçlerini gerçek mesajlarınızla test edin. İngilizce dizeler için kullanışlı bir API, sunmayı planladığınız her dil için kapsam sağladığını kanıtlamaz.
intl, rakip bir çeviri yönetim platformu değildir. Yerelleştirme süreçlerinde kullanılan uluslararasılaştırma yardımcı araçlarını sağlar. gen-l10n, ARB kaynaklarından uygulama erişimcileri oluşturur. Ayrı intl_utils paketi de yerelleştirme kodu oluşturur, ancak paket sayfası 30 Ekim 2026’da kontrol edildiğinde geliştirilmesi durdurulmuş olarak işaretlenmişti. Yeni bir projede benimsemeden önce bakım durumunu kontrol edin.
Yerel ayar değiştirmeyi, RTL’yi ve metin genişlemesini test edin
Hem kaynak doğruluğunu hem de çevrilmiş metnin arayüzde nasıl davrandığını test edin. Başarılı bir JSON ayrıştırması veya kod oluşturma adımı, bir ekranın anlaşılır ve kullanılabilir olduğunu kanıtlamaz.
Yerel ayar değiştirme
Odaklı bir geliştirme kontrolü için MaterialApp.locale değerini const Locale('es') gibi desteklenen bir değere ayarlayın. Üretimdeki bir dil seçici için seçilen yerel ayarı uygulama durumunda tutun, tercihi ürün gereksinimlerinize göre kalıcı hâle getirin ve sistem dilini izleme seçeneği sunun. Kayıtlı bir tercihi, mevcut uygulama sürümünün gerçekten desteklediği yerel ayarlara göre doğrulayın.
Sağdan sola düzenler
Okuma yönünü izlemesi gereken öğeler için yöne duyarlı düzen API’lerini kullanın. Dolguyu, hizalamayı, gezinme öğelerini ve karışık yönlü içeriği gerçek bir sağdan sola yerel ayarda kontrol edin. Her simgenin yansıtılması gerektiğini varsaymayın: yönlü bir gezinme oku ile bir marka simgesinin anlamı farklıdır.
Metin genişlemesi
Uzun çevirileri ve daha büyük metin boyutlarını test edin. Düğmeleri, sekmeleri, iletişim kutularını, boş durumları, hataları ve dar düzenleri inceleyin. Düzenin kullanıcıların gerçekten göreceği mesajla kontrol edilmesi için uzun adlar ve sayılar gibi dinamik değerleri dahil edin.
Pratik bir test matrisi kullanın:
| Kontrol | Örnek |
|---|---|
| Kaynak kapsamı | Gerekli her şablon anahtarının bilinçli olarak belirlenmiş yerelleştirilmiş bir değeri veya yedeği vardır |
| Mesaj bağımsız değişkenleri | Yer tutucu adları ve türleri oluşturulan yöntemlerle uyumlu kalır |
| Miktar davranışı | Sıfır, bir ve hedef dilin ek biçimlerini sınayan değerler |
| Select davranışı | Bilinen durumlar ve other dalına düşen beklenmedik bir değer |
| Yerel ayar davranışı | Sistem dili, açık seçim, yeniden başlatma ve desteklenmeyen tercih |
| Düzen | Genişlemiş metin, büyük yazı tipi ayarları ve sağdan sola içerik |
| Anlam | Önemli kullanıcı yolculuklarının anadili konuşan uzmanlarca gözden geçirilmesi |
Sürecin dil tarafı için yerelleştirme testi sürecini kullanın. Dilsel onayı ve işlevsel test sonuçlarını, sürüme ait ayrı kanıtlar olarak görünür tutun.
Flutter web yerelleştirmesini ve keşfedilebilirliği ayrı planlayın
Flutter web yerelleştirilmiş uygulama kaynaklarını kullanabilir, ancak arayüzü yerelleştirmek otomatik olarak SEO’ya hazır çok dilli bir web sitesi oluşturmaz. Dil seçimi, yönlendirme, meta veriler ve içeriğin keşfedilebilirliği mimari kararlar olarak kalır.
Flutter’ın web SSS sayfası, odağının uygulama deneyimleri olduğunu belirtir ve statik, metin ağırlıklı web içeriği için belge odaklı bir yaklaşım önerir. Pazarlama, yardım ve editoryal sayfaların organik aramada başarılı olması gerekiyorsa bunlar için ayrı HTML tabanlı sayfalar düşünün.
Uygulama ile bu herkese açık sayfalar arasında terminolojiyi uyumlu tutun. Arama yoluyla gelen bir ziyaretçi, iki yüzey farklı oluşturma sistemleri kullansa bile yerelleştirilmiş açılış sayfasından uygulamaya geçtiğinde özellik adını tanıyabilmelidir.
Bir ARB çeviri sürecini ölçeklendirmeden önce doğrulayın
ARB’yi yalnızca metin değerlerinden oluşan bir dosya olarak değil, yapılandırılmış bir uygulama kaynağı olarak ele alın. Bir çeviri teslimi anahtarları, meta verileri, yer tutucuları ve mesaj söz dizimini korumalı, ardından oluşturma ve uygulama testlerinden geçen dosyalar döndürmelidir.
Smartcat’in belgelenmiş yazılım projesi biçimleri arasında JSON, YAML, Android XML, iOS .strings ve LocJSON içe aktarımları bulunur. Bu kılavuz için incelenen belgeler, yerel ARB desteğini veya test edilmiş bir ARB’den JSON’a dönüştürme sürecini doğrulamamaktadır. Dosya uzantısını değiştirmenin uyumluluğu kanıtladığını varsaymayın. Yazılım projesi belgelerine bakın.
Aşağıdakini, önceden test edilmiş bir bağlayıcı tarifi olarak değil, uygulama ekibinizle birlikte önerilen bir doğrulama prosedürü olarak kullanın:
Temsili bir örnek seçin
Düz dizeler, meta veriler, türü belirtilmiş yer tutucular, çoğullar ve select mesajları içeren küçük bir ARB örneği seçin.
İçe ve dışa aktarmayı doğrulayın
@meta verilerinin ve ICU mesajlarının nasıl işlendiği dahil olmak üzere desteklenen içe/dışa aktarma yöntemini ürün ekibiyle doğrulayın.Dil varlıklarını ve bağlamı sağlayın
Bir sözlük, uygun olduğu yerlerde çeviri belleği ve her mesaj için net bağlam sağlayın.
Çevirin ve yapıyı koruyun
Program tanımlayıcılarını ve yapıyı korurken kullanıcıya yönelik metni çevirin ve gözden geçirin.
Karşılaştırın ve geri yerleştirin
Geri dönen kaynakları kaynak sözleşmesiyle karşılaştırın ve beklenen proje yollarına geri yerleştirin.
Oluşturun ve test edin
Projenin sabitlenmiş SDK ortamında
flutter gen-l10n, statik analiz ve ilgili testleri çalıştırın.Gözden geçirin ve kaydedin
Yerelleştirilmiş arayüzü gözden geçirin ve onaylanan kaynak sürümünü kaydedin.
Depo senkronizasyonunu ancak bu gidiş-dönüş başarılı olduktan sonra otomatikleştirin. Kaynak değişikliklerini kimin ele alacağını, gözden geçirme durumunun nasıl geçersiz kılınacağını ve oluşturulan yapıtların nasıl yönetileceğini tanımlayın. ARB kaynaklarını, uygulama sürecinin tek doğru kaynağı olarak sürüm kontrolü altında tutun.
Flutter çeviri sürecinizi gözden geçirin
Yaygın hatalar ve önce neyin kontrol edilmesi gerektiği
| Belirti | İlk kontrol |
|---|---|
| Oluşturulan içe aktarma bulunamıyor | Oluşturma başarıyla çalıştı ve içe aktarma, yapılandırılmış kaynak çıktı yoluyla eşleşiyor |
AppLocalizations.of(context) kullanılamıyor | Bağlam, uygulamanın yerelleştirme sağlayıcısının altında yer alıyor |
| Bir mesaj yöntemi beklenmedik bağımsız değişkenler alıyor | Şablon yer tutucu meta verileri ve oluşturulan API |
| Bir select her zaman yedeği gösteriyor | Uygulama tanımlayıcısı kaynak dalıyla tam olarak eşleşiyor |
| Bir yerel ayar eksik | Kaynak dosyaları, desteklenen yerel ayarlar ve yerel ayar çözümleme yapılandırması |
| Çeviri dışa aktarmadan sonra bozuluyor | Anahtarlar, JSON geçerliliği, meta veriler ve ICU söz dizimi gidiş-dönüşte korundu |
Oluşturulan Dart kodunu elle düzenlemek yerine bozulan ilk sözleşmeyi düzeltin. Oluşturulan kod yeniden oluşturulabilir; orada yapılan elle onarım, kaynaklar bir sonraki değiştiğinde muhtemelen kaybolur.
Sıkça sorulan sorular
Flutter’da ARB dosyası nedir?
Application Resource Bundle, yerelleştirilmiş mesajlar ve isteğe bağlı meta veriler içeren JSON tabanlı bir dosyadır. Flutter’ın gen-l10n süreci, Dart yerelleştirme API’si oluşturmak için ARB kaynaklarını kullanır. Meta veriler mesajı ve yer tutucularını tanımlayabilir; böylece geliştiricilere ve çevirmenlere her anahtar için daha net bir sözleşme sunar.
gen-l10n ile intl_utils arasındaki fark nedir?
Her ikisi de ARB kaynaklarından yerelleştirme kodu oluşturur, ancak farklı yapılandırma ve çıktı kurallarına sahip ayrı araçlardır. gen-l10n, Flutter’ın yerleşik sürecinin bir parçasıdır. intl_utils paket sayfası bu kılavuz için kontrol edildiğinde geliştirilmesi durdurulmuş olarak işaretlenmişti; bu nedenle yeni bir uygulama için seçmeden önce bakım durumunu doğrulayın.
ARB dosyalarını nasıl çevirmeliyim?
Sabit anahtarları, yer tutucu tanımlayıcılarını, meta verileri ve gerekli mesaj yapısını koruyarak kullanıcıya yönelik mesajları çevirin. Bu gereksinimleri destekleyen bir süreç kullanın, ardından geri dönen dosyalarda oluşturma ve uygulama testlerini çalıştırın. Anadili konuşan uzmanların gözden geçirmesi, yapısal geçerliliğin yanı sıra anlamı ve bağlamı da değerlendirmelidir.
Smartcat ARB yer tutucularını ve çoğulları destekliyor mu?
Burada incelenen yazılım projesi belgeleri, yerel ARB desteğini veya tüm ARB özelliklerini koruyan test edilmiş bir dönüştürme yolunu doğrulamamaktadır. Benimsemeden önce içe/dışa aktarma yöntemini ürün ekibiyle teyit edin ve temsili bir gidiş-dönüşü doğrulayın. Genel JSON desteği tek başına ARB uyumluluğunu kanıtlamaz.
Flutter yerelleştirmesi web’de çalışır mı?
Flutter web uygulamaları yerelleştirilmiş kaynakları ve yerel ayar seçimini kullanabilir. Aramada keşfedilebilirlik ayrı bir konudur: herkese açık pazarlama ve yardım içeriği HTML tabanlı bir mimariden fayda sağlayabilir. Mobil yerelleştirme kurulumunun web SEO’sunu tamamladığını varsaymak yerine, kendi web deneyiminiz için yönlendirmeyi, dil seçimini ve meta verileri test edin.
Aradığınız yanıtı bulamadınız mı? Bir yerelleştirme uzmanıyla görüşün
Çeviri teslim sürecinizi kaynak sözleşmeniz kadar güvenilir hâle getirin
Küçük bir ARB örneği ve derlemenizin gerektirdiği kontrollerle gelin. Süreci her dile ve sürüme ölçeklendirmeden önce birlikte inceleyelim.