Issue
I was trying the below piece of code to change the app language using Kotlin but this code is not working. Can anyone please suggest where I am doing wrong?
BaseFragment.kt
open fun setLocale(lang: String, redirectActivity: Boolean, activity: Activity?){
if(activity != null) {
val configuration = resources.configuration
val locale = Locale(lang)
configuration.setLocale(locale)
configuration.setLayoutDirection(locale)
activity.createConfigurationContext(configuration)
val sharedPref: SharedPreferences =
activity.getSharedPreferences(getString(R.string.app_name), 0)
val editor = sharedPref.edit()
editor.putString("lang", lang)
editor.apply()
activity.finish()
startActivity(activity.intent.putExtra("redirectActivity", redirectActivity))
}
}
LanguageFragment.kt
BaseFragment.setLocale(newLang, true, activity)
Solution
The default Locale needs to be set & then resources need to be updated for recreating the view. Additionally, for build version lower than Android N, you need to update the configuration of the resources too, like the following:
val locale = Locale(language)
Locale.setDefault(locale)
val resources = context.resources
val configuration = resources.configuration
configuration.locale = locale
configuration.setLayoutDirection(locale)
resources.updateConfiguration(configuration, resources.displayMetrics)
Here's a demo working version with one button to save the language in shared preference (as the given code snippet does) and recreate with the updated Local. Feel free to use the LocaleHelper utility class and call it like showed in its MainActivity, if it helps:
LocaleHelper().setLocale(this@MainActivity, "en")
recreate()
Answered By - SaadAAkash
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.