Ön Hazırlık ve Gereksinimler
Uygulamanızda çok dilli destek (i18n - Internationalization) kurmadan önce, geliştirme ortamınızın güncel olduğundan emin olmalısınız. Flutter 3.x ve üzeri sürümler, yerelleştirme konusunda oldukça gelişmiş araçlar sunar.
- Flutter SDK 3.24 veya daha yeni bir sürüm.
- IDE olarak VS Code veya Android Studio.
flutter_localizationsveintlpaketlerine bağımlılık.
Öncelikle, projenizin pubspec.yaml dosyasına gerekli paketleri ekleyerek işe başlayalım. Bu paketler, tarih, sayı ve metin formatlarının yerel ayarlara göre düzenlenmesini sağlar.
dependencies:
flutter:
sdk: flutter
flutter_localizations:
sdk: flutter
intl: ^0.19.0
Bu paketleri ekledikten sonra terminalinizde flutter pub get komutunu çalıştırarak bağımlılıkları projenize dahil edin.
Adım Adım Yerelleştirme Yapılandırması
Flutter projenizde yerelleştirmeyi aktif etmek için uygulamanın kök dizininde bir yapılandırma dosyası oluşturmanız gerekir. l10n.yaml dosyası, çeviri dosyalarınızın nerede olduğunu ve hangi dillerin desteklendiğini belirler.
arb-dir: lib/l10n
template-arb-file: app_en.arb
output-localization-file: app_localizations.dart
Bu dosya, Flutter'ın otomatik olarak yerelleştirme kodlarını oluşturmasına yardımcı olur. lib/l10n klasörü altında app_en.arb (İngilizce) ve app_tr.arb (Türkçe) dosyalarınızı oluşturun.
ARB Dosyaları ile Metin Yönetimi
ARB (Application Resource Bundle), JSON tabanlı bir dosya formatıdır. Metinlerinizi anahtar-değer çiftleri şeklinde burada tutarsınız. Bu yöntem, kodunuzu metinlerden ayırarak temiz bir mimari sunar.
// lib/l10n/app_en.arb
{
"helloWorld": "Hello World!",
"welcomeMessage": "Welcome to our app, {name}!"
}
// lib/l10n/app_tr.arb
{
"helloWorld": "Merhaba Dünya!",
"welcomeMessage": "Uygulamamıza hoş geldin, {name}!"
}
Yukarıdaki örnekte yer alan {name} ifadesi, çalışma zamanında dinamik veri aktarabileceğiniz bir parametredir. Bu, kullanıcı adını veya herhangi bir değişkeni çeviriye dahil etmenizi sağlar.
MaterialApp'e Yerelleştirme Desteği Ekleme
Uygulamanızın ana giriş noktasında, localizationsDelegates ve supportedLocales parametrelerini tanımlamanız gerekir. Bu, uygulamanın hangi dilleri desteklediğini ve çevirileri nereden çekeceğini belirler.
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
MaterialApp(
localizationsDelegates: AppLocalizations.localizationsDelegates,
supportedLocales: AppLocalizations.supportedLocales,
home: HomePage(),
);
Bu yapılandırma, uygulamanızın cihazın dil ayarlarını otomatik algılamasını sağlar. Eğer cihazın dili Türkçe ise, uygulama otomatik olarak app_tr.arb dosyasındaki metinleri yükleyecektir.
Dinamik Metin Kullanımı ve Debug İpuçları
Metinleri arayüzde kullanırken AppLocalizations.of(context)! yapısını kullanırız. Bu, güvenli bir şekilde çevrilmiş metne erişmenizi sağlar. Eğer bir anahtar bulunamazsa uygulama hata verebilir, bu yüzden her zaman null-safety kontrollerine dikkat edin.
Text(AppLocalizations.of(context)!.helloWorld);
// Parametreli kullanım
Text(AppLocalizations.of(context)!.welcomeMessage("Ahmet"));
Hata Ayıklama İpucu: Eğer çevirileriniz görünmüyorsa, flutter gen-l10n komutunu çalıştırarak dosyaların yeniden oluşturulmasını sağlayın. Genellikle unutulan bir l10n.yaml yapılandırması veya eksik bir ARB anahtarı bu soruna yol açar.
Kritik Güvenlik Uyarısı: Yerelleştirme dosyalarına asla API anahtarları, şifreler veya hassas veriler eklemeyin. ARB dosyaları uygulama paketi içinde açık metin olarak saklanır ve tersine mühendislik ile kolayca okunabilir.
Yerelleştirme Yöntemleri Karşılaştırma Tablosu
| Yöntem | Avantaj | Dezavantaj |
|---|---|---|
| ARB Dosyaları (Yerel) | Hızlı, çevrimdışı çalışır, güvenli. | Güncelleme için yeni sürüm gerekir. |
| API Tabanlı (Bulut) | Uygulamayı güncellemeden metin değişimi. | İnternet bağımlılığı, karmaşık yapı. |
Sıkça Sorulan Sorular
Uygulama içinde dil değiştirme nasıl yapılır?
Flutter'da dil değiştirme işlemi için Locale değerini güncelleyen bir StateManagement (Provider, Riverpod vb.) yapısı kurmanız gerekir. MaterialApp'in locale parametresini bu state'e bağlayarak anlık dil değişimi sağlayabilirsiniz.
Çoğul (Plural) ifadeleri nasıl yönetirim?
ARB dosyalarında {count, plural, =0{Yok} =1{Bir} other{{count} tane}} sözdizimini kullanarak sayıya göre metin değişimi yapabilirsiniz.
Sağdan sola (RTL) dilleri nasıl desteklerim?
Flutter, MaterialApp içinde yerelleştirme yapılandırmasını kurduğunuzda Arapça veya İbranice gibi diller için otomatik olarak RTL desteği sağlar.
Yeni bir dil eklemek ne kadar sürer?
Sadece app_xx.arb dosyasını oluşturup çevirileri eklemeniz ve l10n.yaml dosyasında belirtmeniz yeterlidir. Flutter CLI, gerekli kodları otomatik üretir.
Performans kaybı yaşar mıyım?
Hayır, flutter_localizations paketi oldukça optimize edilmiştir. Metinler derleme zamanında projenize dahil edilir, bu yüzden çalışma zamanında ek bir yük oluşturmaz.
İleri Düzey Yerelleştirme Stratejileri ve LQA Süreçleri
Uygulamanızın yerelleştirme sürecini bir üst seviyeye taşımak için sadece metinleri çevirmek yeterli değildir. Kullanıcı deneyimini (UX) korumak adına, metin uzunluklarının farklı dillerde (örneğin Almanca'nın İngilizce'ye göre daha uzun olması) arayüzü bozup bozmadığını kontrol etmelisiniz. Bu sürece Yerelleştirme Kalite Güvencesi (LQA) denir.
Metin Uzunluğu ve Arayüz Esnekliği (UI Layout Adaptation)
Farklı dillerde metinler beklenenden daha uzun olabilir. Sabit genişlikli Container veya SizedBox kullanmak yerine, FittedBox veya Flexible widget'larını tercih ederek metinlerin taşmasını engelleyebilirsiniz.
// Metin taşmalarını önlemek için esnek yapı kullanımı
ListTile(
title: Text(
AppLocalizations.of(context)!.welcomeMessage,
overflow: TextOverflow.ellipsis,
maxLines: 1,
),
trailing: FittedBox(
fit: BoxFit.scaleDown,
child: Text(AppLocalizations.of(context)!.priceLabel),
),
)
Yerelleştirme Testleri ve Otomasyon
Uygulamanızın her dil için doğru göründüğünden emin olmak adına "Screenshot Testing" yöntemini kullanabilirsiniz. Flutter'ın golden_toolkit paketi, farklı dillerdeki ekran görüntülerini otomatik olarak alıp referans görsellerle karşılaştırmanıza olanak tanır.
Alternatif Yaklaşım: Easy Localization Kütüphanesi
Eğer flutter_localizations paketinin sunduğu standart yapı size karmaşık geliyorsa veya JSON dosyalarıyla çalışmayı tercih ediyorsanız, easy_localization kütüphanesi oldukça popüler ve pratik bir alternatiftir. Bu kütüphane, uygulama içinde dil değiştirmeyi tek satır kodla yapmanıza olanak tanır.
Easy Localization ile Hızlı Kurulum
Öncelikle pubspec.yaml dosyanıza easy_localization ekleyin. Ardından main.dart içerisinde şu yapılandırmayı uygulayın:
import 'package:easy_localization/easy_localization.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await EasyLocalization.ensureInitialized();
runApp(
EasyLocalization(
supportedLocales: [Locale('en', 'US'), Locale('tr', 'TR')],
path: 'assets/translations',
fallbackLocale: Locale('en', 'US'),
child: MyApp(),
),
);
}
// Kullanım örneği
Text('hello_world'.tr());
Bu kütüphanenin en büyük avantajı, context.setLocale(Locale('tr', 'TR')) komutu ile uygulamanın dilini uygulama yeniden başlatılmadan anlık olarak güncelleyebilmesidir. Ancak büyük ölçekli ve tip güvenli (type-safe) projelerde, ARB tabanlı standart Flutter yerelleştirmesi, derleme zamanında hataları yakaladığı için daha güvenli kabul edilir.
Sonuç
Flutter & Mobil ile çok dilli dil desteği yönetimi, uygulamanızın profesyonellik seviyesini artıran en önemli unsurlardan biridir. Bu rehberde öğrendiğiniz ARB yönetimi ve yerelleştirme yapılandırması, 2026 standartlarında ölçeklenebilir bir uygulama geliştirmenize olanak tanır. Bir sonraki adım olarak, uygulamanızda dinamik dil değiştirme özelliği eklemek için Provider veya Riverpod gibi bir durum yönetimi kütüphanesi ile entegrasyon yapmayı deneyebilirsiniz.
Sorumluluk Reddi: Bu makalede paylaşılan kod örnekleri eğitim amaçlıdır. Üretim ortamına almadan önce, metinlerin doğruluğunu (LQA - Localization Quality Assurance) kontrol edin ve güvenlik uyarılarını dikkate alarak hassas verileri uygulama kaynak kodunda barındırmayın.


Yorumlar (0)
Yorum Yaz