Kotlin中弃用的updateConfiguration()是否危险?

时间:2020-08-21 12:08:12

标签: android kotlin locale

我在我的应用程序中进行翻译,为此我做了一个LocaleHelper。在使用updateConffiguration()时,一切都很好,也很轻松,但是它说,自Jelly Beans API以来已弃用。它在API 24和API 27设备上运行良好。我想知道我是否必须将其更改为createConfigurationContext()并以这种方式(看到一些方法并且并不真的喜欢它)进行操作,或者是否可能将其保留为那样?

这是我到目前为止所做的

object LocaleHelper {

    private const val SELECTED_LANGUAGE = "Locale.Helper.Selected.Language"

    fun persistData(context: Context, language: String) {
        val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context)
        val editor = sharedPreferences.edit()
        editor.putString(SELECTED_LANGUAGE, language)
        editor.apply()
    }

    fun getPersistedData(context: Context) {
        val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context)
        sharedPreferences.apply {
            val language = getString(SELECTED_LANGUAGE, Locale.getDefault().language)
            setAppLocale(context, convertToLocaleCode(language!!))
        }
    }

    fun checkSharedPreferences(context: Context): Boolean {
        val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context)
        if(sharedPreferences.contains(SELECTED_LANGUAGE))
            return true
        return false
    }

    private fun setAppLocale(context: Context, localeCode: String) {
        val resources = context.resources
        val displayMetrics = resources.displayMetrics
        val configuration = resources.configuration
        configuration.setLocale(Locale(localeCode.toLowerCase(Locale.ROOT)))
        resources.updateConfiguration(configuration, displayMetrics)
    }

    private fun convertToLocaleCode(language: String): String {
        when(language) {
            "Polski" -> {
                return "pl"
            }
            "English" -> {
                return "en"
            }
            "Français" -> {
                return "fr"
            }
            "Deutsch" -> {
                return "de"
            }
            "Українська" -> {
                return "uk"
            }
        }
        return "en"
    }
}

0 个答案:

没有答案