Merhaba Arkadaşlar,
Mobilhanem.com sitemiz üzerinden anlattığımız/yayınladığımız Android Eğitimleri yazı serimizde bu dersimizde Android Values Dosyaları -2 Çoklu Dil Desteği ile devam ediyoruz.
Uygulamalarımızda birden fazla dil desteği verme ihtiyacımız olabilir. Kendimden örnek verecek olursam 2017 yılında yazdığım bir uygulama, dünyanın 180 ülkesinde kullanılıyor ve 26 farklı dili destekliyordu. İşte bu yazımızda, birden fazla dil deteğini nasıl vereceğimizi anlatacağım.
Her dersimizde olduğu gibi Android Studio üzerinde yeni bir proje oluşturuyoruz. Projemizde values klasörü altında strings.xml dosyamız default olarak oluşturuluyor. Biz ekleyeceğimiz her bir dil desteği için yeni bir values klasörü oluşturacağız. Bunun için “res” klasörüne sağ tıklayarak New–>Android Resource Directory yolunu takip ediyoruz.
Açılan pencereden “Locale” başlığını seçip, eklemek istediğimiz dili seçiyoruz. Aşağıdaki örnekte English – Any Region seçtik. Eğer farklı lehçeler seçmek isterseydik “Specific Region Only” başlığı altındaki seçeneklerden birisini seçebilirdik.
Rusça için:
Arapça için:
Strings.xml Dosyalarının İçeriği
Burada önemli bir nokta, herhangi bir dil için ek almayan “values” folderımızdaki strings.xml dosyamız, uygulama tarafından default dil olarak seçilecektir. Bu durum her hangi bir sorun durumunda default dilin yüklenmesi için gereklidir.
Strings.xml dosyalarımızı oluşturduktan sonra sıra içeriklerini oluşturmaya geldi. Default strings.xml’de olan her bir string tanımı, mutlaka diğer dil dosyalarının da içerisinde bulunmalıdır. Çeviri işlemlerini yaparken bilmediğiniz diller için Google Translate‘den faydalanabilirsiniz. Çeviriler yapıldıktan sonra strings.xml dosyaları aşağıdaki gibi olmalıdır:
<resources> <string name="app_name">مثال متعدد اللغات</string> <string name="hello_world">مرحبا بالعالم</string> <string name="title">هذا هو تطبيق نموذج متعدد اللغات</string> <string name="selected_laguage">اللغة المختارة: العربية</string> </resources>
<resources> <string name="app_name">Multi Language Example</string> <string name="hello_world">Hello World</string> <string name="title">This is a Multi-Language Sample Application</string> <string name="selected_laguage">Selected Language: English</string> </resources>
<resources> <string name="app_name">Многоязычный пример</string> <string name="hello_world">Привет, мир</string> <string name="title">Это многоязычный пример приложения</string> <string name="selected_laguage">Выбранный язык: русский</string> </resources>
Önemli nokta: Bu işlemleri yaptıktan sonra, Arapça dilinin ters yazımının desteklenmesi için, manifest dosyamızda “application” tag’ı altına şu satırı ekliyoruz:
android:supportsRtl="true"
AndroidManifest dosyamızın son hali:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.mobilhanem.multilanguageexample"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivityJava"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <activity android:name=".MainActivityKotlin"> </activity> </application> </manifest>
Layout Oluşturulması
String’lerimizi oluşturduğumuza göre, layout dosyamızı düzenleyebiliriz. Dil seçimi için 4 adet buton, mesajları yazmak için de 3 tane textview’ımız olacak.
Layout kodlarımız aşağıdaki gibi:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:orientation="vertical" android:layout_width="match_parent" android:gravity="center" android:layout_height="match_parent"> <TextView android:text="@string/hello_world" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/textViewHelloWorld"/> <TextView android:text="@string/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/textViewTitle"/> <TextView android:text="@string/selected_laguage" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/textViewSelectedLaguage"/> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:text="Türkçe" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/buttonTurkce" android:layout_weight="1"/> <Button android:text="Englısh" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/buttonEnglish" android:layout_weight="1"/> <Button android:text="русский" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/buttonRussian" android:layout_weight="1"/> <Button android:text="الروسية" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/buttonArabic" android:layout_weight="1"/> </LinearLayout> </LinearLayout>
Java ve Kotlin’de Kodların Yazılması
Activity’lerimizi de daha önceki derslerimiz gibi java ve kotlin’de ayrı ayrı yazdım. Uygulamanın başlatılması için gerekli activity’i AndroidManifest dosyasından değiştirebilirsiniz.
package com.mobilhanem.multilanguageexample; import android.content.Context; import android.content.SharedPreferences; import android.content.res.Configuration; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.Toast; import java.util.Locale; public class MainActivityJava extends AppCompatActivity { Button buttonTurkce,buttonEnglish,buttonArabic,buttonRussian; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Locale locale = new Locale(getLocaleSharedPreferances());// shared preferances'a en son hangi dil değerini yazmışsak, uygulamayı o dilde açıyor, uygulama ilk defa açılıyorsa, default olan Türkçe ile açılıyor. Locale.setDefault(locale); Configuration config = new Configuration(); config.locale = locale; getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); setContentView(R.layout.activity_main); buttonTurkce= (Button)findViewById(R.id.buttonTurkce); buttonEnglish= (Button)findViewById(R.id.buttonEnglish); buttonArabic= (Button)findViewById(R.id.buttonArabic); buttonRussian=(Button)findViewById(R.id.buttonRussian); buttonEnglish.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub setLocale("en");//ingilizce dili için gerekli parametreyi gönderdik. } }); buttonTurkce.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { setLocale("");// default olan türkçe seçeneğini seçtik. } }); buttonArabic.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { setLocale("ar");//arapça dili için gerekli parametreyi gönderdik. } }); buttonRussian.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { setLocale("ru");//rusça dili için gerekli parametreyi gönderdik. } }); } public void setLocale(String selectedLocale) { Locale locale = new Locale(selectedLocale); //butonlar içerisinden fonksiyonumuz çağırılırken, gönderdiğimiz parametreye göre lokalimizi ayarladık. Locale.setDefault(locale); Configuration config = new Configuration(); config.locale = locale; getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); writeLocaleSharedPreferances(selectedLocale);//dil seçimini cihaza kaydedecek fonksiyonu çağırıyoruz. finish();//mevcut acivity i bitir. startActivity(getIntent());//activity i baştan yükle Toast.makeText(getApplicationContext(), R.string.selected_laguage, Toast.LENGTH_LONG).show(); } public void writeLocaleSharedPreferances(String selectedLocale) { SharedPreferences sharedPref = this.getPreferences(Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPref.edit(); editor.putString("selectedLocale", selectedLocale);// seçilen dili shared preferances'a yazıyoruz ki, uygulamamız sonraki açılışlarda en son seçilen dil ile açılsın. editor.commit(); } public String getLocaleSharedPreferances() { SharedPreferences sharedPref = this.getPreferences(Context.MODE_PRIVATE); String savedString = sharedPref.getString("selectedLocale","");//shared preferances'a yazılan dili getiriyor, eğer uygulama ilk defa açılmışsa, çift tırnak yani default dil değerini döndürüyor return savedString; } }
package com.mobilhanem.multilanguageexample import android.content.Context import android.content.res.Configuration import android.support.v7.app.AppCompatActivity import android.os.Bundle import android.widget.Button import android.widget.Toast import java.util.* class MainActivityKotlin : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val locale = Locale(getLocaleSharedPreferances())// shared preferances'a en son hangi dil değerini yazmışsak, uygulamayı o dilde açıyor, uygulama ilk defa açılıyorsa, default olan Türkçe ile açılıyor. Locale.setDefault(locale) val config = Configuration() config.locale = locale baseContext.resources.updateConfiguration(config,baseContext.resources.displayMetrics) setContentView(R.layout.activity_main) val buttonTurkce = findViewById<Button>(R.id.buttonTurkce) val buttonEnglish = findViewById<Button>(R.id.buttonEnglish) val buttonArabic = findViewById<Button>(R.id.buttonArabic) val buttonRussian = findViewById<Button>(R.id.buttonRussian) buttonTurkce.setOnClickListener{ //buton click listener, içerisinden dil değiştirecek fonksiyonumuzu parametre ile çağıracağız setLocale("") } buttonEnglish.setOnClickListener {//buton click listener, içerisinden dil değiştirecek fonksiyonumuzu parametre ile çağıracağız setLocale("en") } buttonArabic.setOnClickListener {//buton click listener, içerisinden dil değiştirecek fonksiyonumuzu parametre ile çağıracağız setLocale("ar") } buttonRussian.setOnClickListener {//buton click listener, içerisinden dil değiştirecek fonksiyonumuzu parametre ile çağıracağız setLocale("ru") } } fun setLocale(selectedLocale: String) { val locale = Locale(selectedLocale) //butonlar içerisinden fonksiyonumuz çağırılırken, gönderdiğimiz parametreye göre lokalimizi ayarladık. Locale.setDefault(locale) val config = Configuration() config.locale = locale baseContext.resources.updateConfiguration( config, baseContext.resources.displayMetrics ) writeLocaleSharedPreferances(selectedLocale)//dil seçimini cihaza kaydedecek fonksiyonu çağırıyoruz. finish()//mevcut acivity i bitir. startActivity(intent)//activity i baştan yükle Toast.makeText(applicationContext, R.string.selected_laguage, Toast.LENGTH_LONG).show() //seçilen dili toast mesaj olarak yaz } fun writeLocaleSharedPreferances(selectedLocale: String) { val sharedPref = this.getPreferences(Context.MODE_PRIVATE) val editor = sharedPref.edit() editor.putString("selectedLocale",selectedLocale)// seçilen dili shared preferances'a yazıyoruz ki, uygulamamız sonraki açılışlarda en son seçilen dil ile açılsın. editor.commit() } fun getLocaleSharedPreferances(): String? { val sharedPref = this.getPreferences(Context.MODE_PRIVATE) return sharedPref.getString("selectedLocale", "") } }
Evet arkadaşlar Android Çoklu Dil Desteği‘ni sizlere detaylıca anlatmaya çalıştım. Umarım hepiniz için faydalı olmuştur.
Sıfırdan android dersleri için tıklayınız.
Mobilhanem.com üzerinden anlattığımız android uygulama geliştirme derslerine devam edeceğiz. Konu hakkında sorunuzu yorum alanından sorabilirsiniz. Konu dışı sorularınızı ve tüm yazılımsal sorularınızı sorucevap.mobilhanem.com sitemizden de sorabilirsiniz.
Bir daha ki dersimizde görüşmek dileğiyle..
60