Flutter Easy Localization Kullanımı

Samet Karavaizoğlu
Berkut Teknoloji
Published in
3 min readDec 8, 2021

Herkese selamlar, umarım sağlığınız yerindedir. Bugün uygulamamıza birden fazla dil desteğini nasıl ekleyeceğimize ve nasıl kolayca yönetebileceğimizi göstereceğim. Hadi başlayalım.

Öncelikle oluşturduğumuz flutter projemizin pubspec.yaml dosyasına
easy_localization: ^3.0.0 paketimizi ekliyoruz.

Projenin ana dizininde assets/translations isminde iç içe iki klasör oluşturuyorum. Dil dosyalarımı translations içine ekleyeceğim.

Unutmadan uygulama assets/translations klasörümüzü tanısın diye pubspec.yaml dosyamıza bu yolu ekliyoruz.

Dil dosyalarımızı json formatında saklayacağız. Ben şimdilik tr ve en olmak üzere iki dil dosyası oluşturacağım. Dil dosyalarını isimlendirmede {ülkeKodu}-{dilKodu}.json şeklinde veya {dilKodu}.json şeklinde isimlendirmeye özen göstermeliyiz.

tr.json
en.json

olarak assets/translations içerisine ikine tane dosya oluşturuyorum.

Önemli not: Eğer iOS de çalışmaz ise info.plist dosyasına

<key>CFBundleLocalizations</key>
<array>
<string>en</string>
<string>tr</string>
</array>

eklemememiz gerekmekte.

Paketi kullanmak için gerekli işlemleri yaptık. Şimdi paketin kullanımına geçebiliriz. main.dart dosyamızdaki main fonksiyonumuzu bu şekilde güncelleyelim.

WidgetsFlutterBinding.ensureInitialized();
await EasyLocalization.ensureInitialized();

MyApp Widgetimizi EasyLocalization ile sarmaladık,
supportedLocales içine desteklediğimiz dilleri ekledik,
path: kısmına da dil dosyalarımızı bulunduğu yolu belirttik.

AssetLoader parametresine CodegenLoader() yazdım fakat şuan hata veriyor endişelenicek bir durum yok. Çünkü dil dosyalarım henüz oluşturulmadı.

en.json ve tr.json dosyalarıma örnek olması açısından ikişer tane key-value çifti ekleyeceğim.

Dikkat ederseniz değişen sadece value değerleri. Tüm dil dosyaları için bu şekilde dosyalarımızı oluşturduktan sonra

flutter pub run easy_localization:generate -S “assets/translations” -O “lib/translations”

ve

flutter pub run easy_localization:generate -S “assets/translations” -O “lib/translations” -o “locale_keys.g.dart” -f keys

komutlarını çalıştırıyoruz. Bu komutları sürekli yazmak zor olduğundan ana dizine scripts adında bir klasör oluşturup içine localization.sh adında bir dosya oluşturdum.

cd scripts/ && sh localization.sh

komutu ile aynı işlemi gerçekleştirdim. Artık projede lib/translations klasörü içerisinde codegen_loader.g.dart ve locale_keys.g.dart oluşturuldu.

Önemli not: Eğer json dosyalarında herhangi bir key yok ise hata verebilir. Sebebi json olarak görmemesi. json dosyası içeriğinde başında ve sonuda süslü parantez { } olmak zorundadır.

Bu adıma kadar geldiysek yüzdük yüzdük kuyruğuna geldik demektir. Şimdi uygulama içerisinde türkçe “Merhaba!” yazan bir text oluşturacağım. Ardından dili değiştirmek için bir buton oluşturacağım.

Dil dosyasına eklediğimiz value değerlerini uygulamada nasıl kullanacağız sorusunu sorduğunuzu duyar gibiyim. Hemen açıklıyorum.

{"hello":"Merhaba"} //tr.json
{"hello":"Hello"} //en.json

json dosyamızdaki key değerlerine aşağıdaki kod ile erişebiliyoruz.

LocaleKeys.hello.tr(),

Dili değiştirmek istersek ise;

EasyLocalization.of(context)!.setLocale(const Locale("tr"));

Değiştirmeyi tetikleyecek fonksiyonda komutunu çalıştırmamız yeterli olacaktır. Tabi Locale(“tr”) yerine değiştirmek istediğimiz dilin adını yazıyoruz.

Tüm işlemler bu kadar.

main.dart dosyamızın son hali;

Sonuç;

Sonuç;

Github repo linki;

https://github.com/sametkaravaizoglu/flutter_easy_localization

Herkese iyi çalışmalar, sağlıcakla kalın.

--

--