Не применять изменения во всех действиях в многоязычном приложении, используя локализацию в Android Kotlin - PullRequest
0 голосов
/ 13 июня 2018

Я написал приложение для Android на Kotlin, которое должно поддерживать несколько языков.Это работает один конкретный вид деятельности, но я хочу, чтобы он работал во всем приложении.Например, если я пишу код локализации в Настройке активности для изменения языка, он работает только в Настройке активности, а не в других.Помогите мне, чтобы все действия изменили язык.

1) Мой диалог выбора языка:

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 ():

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()
}
...