Merhaba arkadaşlar bu dersimizde android de çoklu dil yapısını anlatacağım. Günümüzde çoğu uygulama birden fazla dil seçeneği ile piyasaya çıkıyor. Bizde geliştireceğimiz uygulamalarımızda birden fazla dil seçeneği yapısına ihtiyaç duyabiliriz. Düşünüldüğü kadar zor bir iş değil aksine gayet kolay bir yapı.
Öncelikle nasıl yaptığımızı kısaca açıklayayım . Sonra kodları paylaşacağım.Bildiğiniz gibi strings.xml values klasörünün içinde bulunuyor.Bizde her dil için values klasörleri oluşturuyoruz. Mesala ingilizce için values-en,almanca için values-de şeklinde.
Her bir values klasörünün içinde strings.xml ler oluşturuyoruz.Burda dikkat etmemiz gereken values klasörlerinden biri ek almayacak yani values olarak kalacak.Bu default diliniz olsun. Bizim uygulamada default dil türkçe.Bu her hangi bir sorun durumunda default dilin yüklenmesi için gereklidir.
Sonra uygulama içindeki bütün string değerlerini strings.xml dosyasından çekiyoruz. Aslında mantık olarak hepsi bu kadar. Uygulamanın kaynak dosyasını indirip inceleyerek daha iyi bir şekilde anlayacaksınız.Uygulama üzerinde ufak açıklamalarda bulundum.
[wpdm_file id=8]import java.util.Locale; import android.os.Bundle; import android.view.View; import android.widget.ImageButton; import android.widget.Toast; import android.app.Activity; import android.content.res.Configuration; public class MainActivity extends Activity { ImageButton b1,b2,b3; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Locale locale = Locale.getDefault(); // Sayfayı yüklemeden önce default locale alıyoruz ve sayfayı ona göre yüklüyoruz. Locale.setDefault(locale); Configuration config = new Configuration(); config.locale = locale; getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); setContentView(R.layout.activity_main); b1 = (ImageButton) findViewById(R.id.imageButton1); //İngilizce Buton b2 = (ImageButton) findViewById(R.id.imageButton2); //Türkçe Buton b3 = (ImageButton) findViewById(R.id.imageButton3); //Almanca Buton b1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Locale locale = new Locale("en"); //locale en yaptık. Artık değişkenler values-en paketinden alınacak Locale.setDefault(locale); Configuration config = new Configuration(); config.locale = locale; getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); finish();//mevcut acivity i bitir. startActivity(getIntent());//activity i baştan yükle Toast.makeText(getApplicationContext(), R.string.dil_degistir, Toast.LENGTH_LONG).show(); } }); b2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Locale locale = new Locale(""); //locale i default locale yani türkçe yaptık. Artık değişkenler values paketinden alınacak Locale.setDefault(locale); Configuration config = new Configuration(); config.locale = locale; getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); finish();//mevcut acivity i bitir. startActivity(getIntent());//activity i baştan yükle Toast.makeText(getApplicationContext(), R.string.dil_degistir, Toast.LENGTH_LONG).show(); } }); b3.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Locale locale = new Locale("de"); //locale de yaptık. Artık değişkenler values-de paketinden alınacak Locale.setDefault(locale); Configuration config = new Configuration(); config.locale = locale; getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); finish();//mevcut acivity i bitir. startActivity(getIntent());//activity i baştan yükle Toast.makeText(getApplicationContext(), R.string.dil_degistir, Toast.LENGTH_LONG).show(); } }); } }
Bizim uygulamamızda ilk dili telefonun locale ayarına göre alıyoruz.Ben detaylı bir uygulama yazacak olsam kullanıcı bir defa dil seçtiğinde bunu database kaydeder ve uygulama açıldığında kullanıcının seçtiği dili yüklerdim . Bu uygulamada gerek duymadım.
Bu derste anlatacaklarım bu kadar. Aklınıza takılan her türlü soruyu sorabilirsiniz elimden geldiğince cevap vermeye çalışıyorum. Bir sonraki derste görüşmek dileğiyle kendinize iyi bakın.
15
Deneme
Üstad ellerin dert görmesin. Güzel ve basit anlatımlarının yanında “best practicles” tavsiyelerin için teşekkürler… 🙂
Güzel yorum için ben teşekkür ederim:) İşinize yaradıysa ne mutlu..
usta merhabalar. baya zaman geçmiş üzerinden ama belki yine de bakınırsınız. ben metin seslendirme üzerine bir mobil uygulama geliştiriyorum. metin bir edittexe girilecek ve burdan seslendirilecek. yalnız android studio da türkçe dil desteğini bir türlü sağlayamıyorum. bellli başlı diller var sadece. türkçe olmasını nasıl sağlayabilirim ? inşallah erken dönersiniz.
Android sağlamadığı için Türkçe dil desteğini siz böyle bir desteği sağlayamazsınız.
peki tek seferlik seçim işlemini nasıl yapabiliriz yani bir sonraki girişlerde ilk değeri hatırlama olayını.
SharedPreferences kullanarak seçtiği değeri tutabilirsin. Örnek ders için:
http://www.mobilhanem.com/android-sharedpreferences-kullanarak-login-ekran-yapimi/
inceleyebilirsin.
teşekkürler bu kadar hızlı yanıt almayı beklemiyordum iyi çalışıyorsunuz 🙂 İyi çalışmalar Başarılar.
Kardeşim eline sağlık çok yararlı oldu. Hazır bir uygulamaya ekeleyeceğim bunu ama acaba ilk girişte dil sormasını nasıl sağlayabilirim şimdiden teşekkürler.
Nasıl yani dili sen mi seçtireceksin ?
Dili uygulama seçtirecek başta. Bir daha sormayacak.
Tamam uygulama açılınca bir popup çıkarıp uygulamanın sunduğu dilleri listeletip kişinin istediğini seçtirebilirsin.
Custom popup için bu dersimi inceleyebilirsin.
http://www.mobilhanem.com/android-custom-dialog-alert-dialog-yapimi/
Sonra burdan aldığın değeri SharedPreference da tutacaksın ki her seferinde sormayasın.
SharedPreference kullanımı için bu dersimi inceleyebilirsin.
http://www.mobilhanem.com/android-sharedpreferences-kullanarak-login-ekran-yapimi/
Yıl 2018 Adamsın Adam
🙂 Teşekkürler.
merhaba kardeşim. Android studio programını türkçe yapamıyor muyuz?
Malesef hayır
Hocam anlamadığım birşey var. Benim strings.xml klasörümün içerisi boş. Yalnızca app_name mevcut. Onun dışında hiç bir değer yazmıyor. Activity_main.xml içerisindeki bilgileri (button textler v.b) nasıl strings.xml’ e çekebilirim?
Hocam merhaba. Gayet yararlı bir anlatım teşekkür ederiz. Ancak anlayamadığım birşey var. Benim strings.xml klasörümün içerisinde sadece app_name yazıyor. Onun dışında button text’ leri textview text’ leri v.b şeyler yok.
zaten onları senin eklemen gerekir.
Selamun aleykum hocam bends gionee s9 var ama sadece ingilizce ve since dil var baska yok turkcede yok bunu nasil turkceye ceviririm bans turkçe icin XML dosyasini yollarmisin be android 6.0 dir ama sistem res .klasurunde sadece image ve sound klasuru var baska klasur yok malesef cihaz rotludur bi Turlu yapamadim yardimci olsan sevinirim
Amacınız cihazınızı mı türkçeye çevirmek. Yoksa yazmak istediğiniz app’i mi türkçe yapmak istiyorsunuz?
Merhaba abi ben database dil value sakliorum uygulamam ilk acilanda database veriyi kullanmak istiyrum default nasil yapa bilirim?
Simdiden Tesekurler
Merhaba hocam ben yapamadım türkçe diline çevirmeyi yardımcı olur musun ?
Selam bu yararlı site için önceliklee herkese teşekkür ederim benim asıl merak ettiğim konu bir uygulamayı yüklüyorsun ve otomatik olarak telefonun dilini algılayarak o dilde program açılıyor bunu nasıl yapabiliriz bu konuda yardımcı olmanız mümkün mü?
Abi çok sağolasın bu yararlı bilgiler için.Ben de bir konu danışmak istiyorum.Türkçe için ayrıca açtığım dosya komple hata veriyor Türkçe karakterler yüzünden.Gradle dosyasına compileOptions.encoding = ‘windows-1254’
satırı ekledim.Yine aynı.Nasıl çözerim acaba.