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.

Demo planlayın

Demo planlayın

Küçük bir ARB örneği ve derlemenizin gerektirdiği kontrollerle gelin

Ücretsiz denemeyi başlat

Ücretsiz denemeyi başlat

15 gün ücretsiz, kredi kartı gerekmez

Çeviri ilerlemesini hedef dile göre gösteren Smartcat yazılım yerelleştirme projesi

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: true

Bağı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.dart

SDK’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şımTipik kaynaklarKod oluşturmaÇoğul yaklaşımıNe zaman uygun
Yerleşik gen-l10nARBTürü belirtilmiş Dart erişimcileri oluştururICU tarzı mesaj söz dizimiResmi Flutter kaynak sürecini istiyorsanız
easy_localizationVarsayı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ı kurallarVarlık yükleme ve yerel ayar yönetimi kurallarını tercih ediyorsanız
GetX çevirileriBelgelenmiş temel süreçte yerel ayar anahtarlı eşlemelerTemel eşleme API’si için gerekli değiltrPlural tekil/çoğul anahtarlar kullanır; daha zengin dilbilgisini ayrıca değerlendirinUygulamanı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şkenleriYer 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üzenGeniş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:

  1. 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.

  2. İç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.

  3. 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.

  4. Ç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.

  5. 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.

  6. Oluşturun ve test edin

    Projenin sabitlenmiş SDK ortamında flutter gen-l10n, statik analiz ve ilgili testleri çalıştırın.

  7. 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ıyorOluş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ıyorBağ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österiyorUygulama tanımlayıcısı kaynak dalıyla tam olarak eşleşiyor
Bir yerel ayar eksikKaynak dosyaları, desteklenen yerel ayarlar ve yerel ayar çözümleme yapılandırması
Çeviri dışa aktarmadan sonra bozuluyorAnahtarlar, 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.