BiometricPrompt подсказки не локализованы

вопрос

Мы меняем язык внутри приложения, все работает, кроме подсказок в диалоге отпечатков пальцев. Какой бы язык мы ни установили, у нас всегда есть подсказки на английском:

  • Коснитесь датчика отпечатков пальцев
  • Не опознано
  • так далее...

Среда

  • Используемый компонент: androidx.biometric.BiometricPrompt
  • Используемая версия: 1.0.0.0-alpha04
  • Версии устройств /Android, воспроизводимые на: API эмулятора 28

Как устанавливается локаль:

    private fun setNewLocaleAndRestart(language: String) {
        LocaleManager(this).setNewLocale(language)

        //restarting app
        val i = Intent(this, SplashScreenActivity::class.java)
        startActivity(i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK))
        finish()
        System.exit(0)
    }

class LocaleManager(val context: Context) {

    val sharedPreferenceManager = createSharedPreferenceManager(context)

    fun setLocale(): Context = updateResources()

    fun setNewLocale(language: String): Context {
        return updateResources(language)
    }


    private fun updateResources(l: String? = null): Context {

        val language = l ?: sharedPreferenceManager.language

        if (language.isBlank()) return context

        val locale = Locale(language)

        Locale.setDefault(locale)

        val res = context.resources
        val config = Configuration(res.configuration)
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            config.setLocale(locale)
            return context.createConfigurationContext(config)
        } else @Suppress("DEPRECATION") {
            config.locale = locale
            res.updateConfiguration(config, res.displayMetrics)
            return context
        }

    }
}

1 ответ

Решение

все работает, кроме подсказок в диалоге отпечатков пальцев

Все системные диалоги будут использовать язык, который пользователь установил для устройства. Это включает в себя системные диалоги для биометрии.

Я только что реализовал BiometricManager androidx.biometric:biometric:1.0.1 и смог изменить и локализовать текст для подсказки и для случая использования неправильного отпечатка пальца.

Вам просто нужно определить эти строки в вашем strings.xml, чтобы переопределить те, которые есть в API:

fingerprint_not_recognizedдля изменения сообщения об ошибке при использовании неправильного отпечатка пальца. Это определено в FingerprintHelperFragment.java.

fingerprint_dialog_touch_sensorчтобы изменить подсказку. Это определено в FingerprintDialogFragment.java.

Исправлено в версии BiometricPrompt. androidx.biometric:biometric:1.0.0-alpha04. Вам просто нужно изменить язык телефона, чтобы изменения отразились.

вот коммит для этого, если вам интересно

Я тоже испытываю это с implementation 'androidx.biometric:biometric:1.0.1@aar'. Я меняю системный язык на какой-то другой, кроме английского, но он по-прежнему говорит: "Прикоснись к датчику отпечатков пальцев". Есть ли у кого-нибудь решение или объяснение этому?

Это выглядит, как если Android биометрическая библиотека уже поставляется с поддержкой всех языков, но это не похоже на работу. Я даже могу видеть переводы в сгенерированномmerger.xml в папке сборки Android.

Проверено на моем OnePlus 5T с Android 9/Oxygen 9.0.10.

Другие вопросы по тегам