Android Language Localization

Büşra Önder
Finagotech
Published in
3 min readMay 9, 2022

Uygulamanızın dilini anlık olarak değiştirebileceğiniz bir uygulama ile karşınızdayım.

Bu uygulamamızda kullanıcıdan dil seçimi yapmasını isteyeceğiz ve uygulamayı tekrar açtığında ise daha önce seçtiği dil ile açmayı hedefleyeceğiz.

Burada karşımıza iki terim çıkıyor Locale ve SharedPreference.

Locale: Uygulamaların farklı ülke standartlarıyla çalışmak için bulanan bir sınıftır.

SharedPreference: Cihaz tabanlı bir veritabanı diyebiliriz.Yani uygulama kapanıp açılsa bile kaybetmek istediğimiz verileri sakladığımız yerdir.

Uygulamamıza ilk adımı atarken strings.xml dosyalarımızı oluşturalım. Şu an zaten base bir strings.xml dosyamız bulunmaktadır.Bu İngilizce dili için kullanabileceğimiz bir dosyadır.Şimdi türkçe için de bir strings.xml dosyası oluşturmalıyız.

Bunun için ;

res > değerler > yeni > Değerler Kaynak Dosyası

sFile name : strings.xml
Available qualifiers > Locale > Language > tr
seçimini yapıp bize yeni bir dosya oluşturulmasını istiyoruz.

iki string dosyasında da aynı isme sahip stringler oluşturuyoruz ve değerlerini dillerine göre değiştiriyoruz.

Daha sonra kullanmak istediğimiz buton ve textview nesnelerinin text kısmında istediğimiz değişkenleri yerleştiriyoruz.

Şimdi sıra LocaleChanger sınıfımızı oluşturmaya geldi. SharedPreference ve Locale sınıflarını burada kullanacağız.

createLocaleFromSavedLanguage -> SharedPreference içerisinde “Language” tagıyla kayıtlı olan değişkenimizi çağırıyoruz eğer içinde bir şey yoksa da default olarak “en” gelmesini istiyoruz. Bu gelen değerimizi de Locale olarak işleyip döndürüyoruz

wrapContext -> Uygulama ilk açılığında SharedPreference içerisinde bulunan değeri işleyerek bize bir context nesnesi döndürüyor yani uygulamamızın kimliğini dil değişkenimize göre tekrar oluşturuyor ve biz bunu MainActivity de bulunan attachBaseContext fonksiyonumuzda super methodu içerisinde çağırarak uygulama başladığında oluşturulan contextimiz ile uygulamayı düzenlemesini bekliyoruz.

overrideLocale -> Dil değişimi yapıldığı durumlarda ise bu fonksiyonumuzu çağırıyoruz. Burada bize yeni bir dil veriliyor ve biz bunu unutmamak için SharedPreference’a kaydediyoruz ve Locale ayarlamalarımızı yapıyoruz.

context.resources.updateConfiguration ile contextimizi güncelleyebiliyoruz ama bu bazı gecikmelere neden olabiliyor.

Bu yüzden if içerisindeki
context.applicationContext.resources.run {
updateConfiguration(
newConfig,
displayMetrics
)}

ile anlık olarak müdahale edip güncellememizi yapabiliyoruz

Burada bir diğer önemli nokta recreate() fonksiyonu. Bu fonksiyon uygulamamızı tekrar oluşturarak Locale ile ayarladığımız özelliklerin işlenmesine olanak sağlıyor.

Uygulamamız bu şekilde. Ek bilgi olarak string.xml dosyalarınızın içeriğini kendiniz manuel olarak doldurabilirsiniz. Ama bu biraz hamallık olacaktır en azından basit uygulamar için. Size tavsiye olarak güzel bir plugin bulmanız ve sadece bir string.xml dosyasını doldurarak diğer bütün string.xml dosyalarınıza otomatik çeviri yapabilirsiniz.

Projenin GitHub linki :

Okuduğunuz için teşekkür ederim :)

--

--