7 Mart 2017 Salı

Android Localization Activity

Merhabalar,



Çoğumuz projelerimizde birden fazla dil desteği sağlıyoruz. Bunun için herkes kendisine göre bir yöntem geliştirmiş bulunmakta. Ben genelde Amerikayı yeniden keşfetme taraftarı değilim eğer kütüphane gerçekten istendiği gibi iş yapıyorsa :)

Sizelere bahsedeceğim kütüphane "Android-LocalizationActivity" projenizde istediğiniz kadar dil desteği vermenizi sağlamaktadır.

Ben kendimde nasıl kullanmışsam size öyle bir BaseActivity hazırladım ve aşağıdaki koddan BaseActivitye erişebilirsiniz.

Fakat öncelikle main/res içerisinde hangi dili kullanmak istiyorsanız ona uygun klasörü oluşturmanız gerekmektedir.

Klasör oluştururken kullandığımız isimleri aşağıdaki linkten seçebilirsiniz. Ben bu listedekileri kullanmaktayım.
https://github.com/barisatalay/AndroidLocalizationExample/blob/master/tools/LanguageSource.json

Örneğin almanca için bir dil klasörü oluşturacaksak adı "values-de" olmalıdır ve klasörün içerisinde "strings.xml" dosyası olmalıdır.

Projeyi Github içerisinede yüklüyorum isteyenler Google Play üzerinden uygulamanın demosuna bakabilirler ve githubdan örnek projeyi inceleyebilirler.

Demo: https://play.google.com/store/apps/details?id=com.atalay.androidlocalizationexample
Github: https://github.com/barisatalay/AndroidLocalizationExample

İyi çalışmalar dilerim.


Gradle eklenmesi gereken: compile 'com.akexorcist:localizationactivity:1.1.2'


public class BaseActivity extends AppCompatActivity {
    private LocalizationDelegate localizationDelegate = new LocalizationDelegate(this);
    private String activeLangCode = "";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        localizationDelegate.onCreate(savedInstanceState);
        super.onCreate(savedInstanceState);

        //Aktif olan dil kodunu alıyoruz.
        activeLangCode = (PreferenceManager.getDefaultSharedPreferences(this.getApplicationContext())).getString(getString(R.string.pref_general_language),"en");

        setLanguage(activeLangCode);
    }

    @Override
    public void onResume() {
        super.onResume();
        localizationDelegate.onResume();
    }

    /*
    * Kütüphaneye aktif olan dil kodunu gönderiyoruz ve
    * kütüphane uygulamamızın aktif olan Activitysini yeniden oluşturuyor
    * bu sayede string resourceler gerekli dilden çekiliyor.
    */
    public final void setLanguage(String language) {
        localizationDelegate.setLanguage(language);
    }

    public final void setLanguage(Locale locale) {
        localizationDelegate.setLanguage(locale);
    }

    public final void setDefaultLanguage(String language) {
        localizationDelegate.setDefaultLanguage(language);
    }

    public final void setDefaultLanguage(Locale locale) {
        localizationDelegate.setDefaultLanguage(locale);
    }

    public final String getLanguage() {
        return localizationDelegate.getLanguage();
    }

    public final Locale getLocale() {
        return localizationDelegate.getLocale();
    }

}