Android Multi Language ( Çoklu Dil )

Uygulama Helper Kullanaılarak Yapılmısdır.
 LoceleHelper.java
import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Build;
import android.preference.PreferenceManager;
import android.util.Log;
import android.widget.Toast;

import java.util.Locale;

/**
* Helper Sınıfları Yardımcı Sınıflardı</br>
* Default Locale :Locale.getDefault().getLanguage()
*/
public class LocaleHelper {
private static final String SELECTED_LANGUAGE = "Locale.Helper.Selected.Language";
static SharedPreferencesManager sharedPreferencesManager;
static Context context;

/**
* LocaleHelper Constructor
* @param context
*/
public LocaleHelper(Context context) {
sharedPreferencesManager=new SharedPreferencesManager(context);
}

/**
* LocaleHelper Context Oluşturma
* @apiNote Bu Method İle MainActivity de override attachBaseContext Kullanarak Bşlangiçda Calısmasını sağlıyoruz
* @param con
* @return
*/
public static Context onAttach(Context con) {
context=con;
sharedPreferencesManager=new SharedPreferencesManager(context);
return getLocale();
}

/**
* LocaleHelper Context Oluşturma
* @apiNote Bu Method İle MainActivity de override attachBaseContext Kullanarak Bşlangiçda Calısmasını sağlıyoruz</br>
* Aynı zamanda defaultLanguage Yeni Dili Seçmek İçin Kullanılıyor
* @param con
* @param defaultLanguage
* @return
*/
public Context onAttach(Context con, String defaultLanguage) {
context=con;
setLocale(defaultLanguage);
return getLocale();
}

/**
* Dil Geri Dönüşü
* @return
*/
public static String getLanguage() {
return sharedPreferencesManager.getLanguage();
}
// Çalışma zamanında dili ayarlama yöntemi

/**
* Yeni Dil Ayarlama
* @param language
*/
public void setLocale(String language) {
sharedPreferencesManager.setLanguage(language);
}

/**
* Dil Ayarını Geri Dönüşle Getiriyor
* @return Context
*/
public static Context getLocale() {
String language=getLanguage();
// Android Nougat'ın üstündeki cihazlar için dilin güncellenmesi
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
return updateResources(language);
// Eski Sürümler İcin Kullanılıyor
return updateResourcesLegacy( language);
}

/**
* Uygulamanın dilini, yerleşik Locale sınıfının bir nesnesini oluşturarak ve </br>
* ona dil argümanını geçirerek güncelleme yöntemi
* @param language
* @return
*/
private static Context updateResources( String language) {
Locale locale = new Locale(language);
Locale.setDefault(locale);

Configuration configuration = context.getResources().getConfiguration();
configuration.setLocale(locale);
configuration.setLayoutDirection(locale);
context.getResources();
return context.createConfigurationContext(configuration);
}

/**
* @deprecated Kullanımdan Kaldırıldı
* Uygulamanın dilini, yerleşik Locale sınıfının bir nesnesini oluşturarak ve </br>
* ona dil argümanını geçirerek güncelleme yöntemi
* @param language
* @return
*/
@SuppressWarnings("deprecation")
private static Context updateResourcesLegacy(String language) {
Locale locale = new Locale(language);
Locale.setDefault(locale);
Resources resources = context.getResources();
Configuration configuration = resources.getConfiguration();
// configuration.locale = locale; Daha Eski Bir Şekilde Kullanılıyor
configuration.setLocale(locale);
configuration.setLayoutDirection(locale);
resources.updateConfiguration(configuration, resources.getDisplayMetrics());

return context;
}
}

// SharedPreferencesManager.java

import android.content.Context;
import android.content.SharedPreferences;


public class SharedPreferencesManager {
// Bunun Yerine context.getPackageName() Kullanabiliriz
private final String LOCALE_PREF = "Locale Preference";
SharedPreferences sharedPref;
SharedPreferences.Editor editor;
Context context;

// Language : Dil Ayarı
String language;
// darkMode : Karanlık Mode Ayarı (System)
boolean systemDarkMode;
// darkMode : Karanlık Mode Ayarı
boolean darkMode;
public SharedPreferencesManager(Context context)
{
this.context= context;
/*
MODE_PRIVATE: Dosya oluşturma modu: varsayılan mod, oluşturulan dosyaya yalnızca çağıran uygulama
(veya aynı kullanıcı kimliğini paylaşan tüm uygulamalar) tarafından erişilebilir.
MODE_WORLD_READABLE: Dosya oluşturma modu: diğer tüm uygulamaların oluşturulan dosyaya okuma
erişimi olmasına izin ver.
MODE_WORLD_WRITEABLE : Dosya oluşturma modu: diğer tüm uygulamaların oluşturulan dosyaya yazma
erişimi olmasına izin ver.
*/
/*
getSharedPreferences(String name, int mode)
name = İstenilen tercihler dosyası.
Kullanılabilir :
context.getPackageName() Package İsmine Denk Geliyor com.example.mysetting
*/
String packageName=context.getPackageName();
sharedPref= context.getSharedPreferences(packageName,Context.MODE_PRIVATE);
editor = sharedPref.edit();
}

public String getLanguage() {
language = sharedPref.getString("language","tr");
return language;
}

public void setLanguage(String language) {
editor.putString("language",language);
// editor.commit();
editor.apply();
this.language = language;
}

}

// .xml Eklenen Spinner
<Spinner
android:id="@+id/spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:entries="@array/reply_entries" />
// Control Sınıfından
Spinner custom_spinner=v.findViewById(R.id.custom_spinner);
SpinnerAdapter adapter= new MySpinnerAdapter(getContext(),  settingManager.getLanguageList());
custom_spinner.setAdapter(adapter);

custom_spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {

if(i>0) GetSelectedLanguage(adapterView,i,l);
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
// TODO Auto-generated method stub
// GetSelectedLanguage(adapterView,0,0);
}
});
// LanguageSpinnerModel Adapter de Kullanıldığı icin 
// code Değeri Alınıyor "en,tr,..."Gibi Kodelar
SharedPreferencesManager sharedPreferencesManager = new SharedPreferencesManager(context);
void GetSelectedLanguage(AdapterView<?> adapterView,int i,long l){
LanguageSpinnerModel model= (LanguageSpinnerModel) adapterView.getItemAtPosition(i);
 sharedPreferencesManager.setLanguage(model.getCode());
// Sonra Uygulama Yeniden Başlıyor  
   Intent intent = new Intent(getContext(), MainActivity.class);
startActivity(intent);

}

MainActivty.java
// En Basından Language Almamız Lazım 
// Helper sınıfından Doğrudan Başlatması İçin Kullanıyoruz ilk Çalısan Kod
// Bu Kod İle Uygulama Yükler Yüklemez Dil Ayarlaması Yapıyor 
// Burda base Context Olduğundan En Basda Resources Ayarlamıs Olur
// Uygulama Her Başladığında Kontrol Sağlarız
@Override
public void attachBaseContext(Context base) {

super.attachBaseContext( LocaleHelper.onAttach(base));

}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context=getBaseContext();
// Mainde Kullanıldığında Resources'leri Burdan Devam Etmeli
res=context.getResources();
// Actionbar Title Değişim için Kullanılıyor
setTitle(res.getString(R.string.app_name));
}


Yorumlar

Bu blogdaki popüler yayınlar

Java Swing JTextField Karakter Sınırlandırma

Google Console Admob app-ads Ekleme