0

I wrote an Android app in Kotlin that should support multiple languages. It works one specific Activity but I want it to work app-wide. For example if I write localization code in Setting Activity to change the language, it only works in the Setting Activity not in others. Please help me make all Activities change language.

1) My Change Language Dialog:

fun showChangeLangDialog() {

    val factory = LayoutInflater.from(this)
    val langDialog = factory.inflate(R.layout.select_lang_dialog, null)
    selectedLanguage = SettingsHandler(this).getSettings("display_lang")

    val langList = resources.getStringArray(R.array.languages)
    langList.forEach {
        val obj = JSONObject(it)
        val rdbtnLang = RadioButton(this)
        rdbtnLang.id = obj.getInt("id")
        rdbtnLang.text = obj.getString("lang")
        rdbtnLang.textSize = resources.getDimension(R.dimen.radio_text_size)
        rdbtnLang.setPadding(20, 30, 30, 30)
        langDialog.selectLangList.addView(rdbtnLang)
    }

    AlertDialog.Builder(this)
            .setTitle("Select LanguageGlobal")
            .setPositiveButton("Ok") { dialog, i ->
                if (langDialog.selectLangList.checkedRadioButtonId > 0) {
                    settingHandler.updateSettingsViaKey("display_lang", langDialog.selectLangList.checkedRadioButtonId.toString())
                }

                langList.forEach {
                    val obj = JSONObject(it)
                    if (langDialog.selectLangList.checkedRadioButtonId == obj.getInt("id")) {
                        setLocale(obj.getString("code"))
                        recreate()
                    }
                }
                dialog.dismiss()
            }
            .setNegativeButton("Cancel") { dialog, whichButton ->
                dialog.dismiss()
            }
            .setView(langDialog)
            .create()
            .show()
}

2) setLocate() function:

fun setLocale(lang: String) {
    val locale = Locale(lang)
    selectedLanguage = SettingsHandler(applicationContext).getSettings("display_lang")
    Locale.setDefault(locale)
    val config = Configuration()
    config.locale = locale
    baseContext.resources.updateConfiguration(config, baseContext.resources.displayMetrics)
    val editor = getSharedPreferences("settings", Context.MODE_PRIVATE).edit()
    editor.putString("My_Lang", lang)
    editor.apply()
}
  • Possible duplicate of [Change app language programmatically in Android](https://stackoverflow.com/questions/2900023/change-app-language-programmatically-in-android) – Juan Jun 13 '18 at 13:22
  • no its not duplicate question watch my question first then comment it @Juan de Bruin –  Jun 14 '18 at 05:22

0 Answers0