【问题标题】:BiometricPrompt hints are not localizedBiometricPrompt 提示未本地化
【发布时间】:2019-05-08 18:17:17
【问题描述】:

问题

我们正在更改应用程序内的区域设置,除了指纹对话框中的提示外,一切正常。无论我们设置什么语言,我们总是有英文提示:

  • 触摸指纹传感器
  • 无法识别
  • 等等……

环境

  • 使用的组件:androidx.biometric.BiometricPrompt
  • 使用的版本:1.0.0.0-alpha04
  • 设备/Android 版本复制于:emulator 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
        }

    }
}

【问题讨论】:

    标签: android translation android-biometric-prompt


    【解决方案1】:

    除了指纹对话框中的提示外,一切正常

    所有系统对话框都将使用用户为设备设置的语言。这包括生物识别系统对话框。

    【讨论】:

    • 感谢您的回答。话虽如此,这是否意味着应用内语言选择无法更改这些对话框使用的系统语言?唯一的方法是让用户在系统设置中更改语言?
    • @AnisCAMPOS:“这是否意味着应用内语言选择无法更改这些对话框使用的系统语言?” - 正确的。最多,您的Locale 代码会影响您当前的进程,仅此而已。 “唯一的办法是让用户在系统设置中更改语言?” -- 正确。
    • 这不是真的。如果您有日期选择器并设置了区域设置,它将显示在该区域设置中。我还希望生物识别对话框的行为相同。我有一种情况,我需要在应用程序中显示语言 X,用户在设置中设置了英语还是 X。我认为仅依赖系统设置(完全)是错误/错过行为/错误/缺少功能。
    • @ramden:“这不是真的”——是的,是的。 “如果您有日期选择器并设置了区域设置,它将显示在该区域设置中”——日期选择器 UI 是您流程的一部分。生物识别 UI 不是。 “我有一种情况,我需要在应用程序中显示语言 X,用户在设置中设置了英语还是 X”——然后不要显示在您的进程之外呈现的任何 UI。除其他外,您不能请求运行时权限,也不能使用生物识别 API。
    • @CommonsWare (例如)日期选择器的默认设置是尊重语言设置。但是您可以通过手动设置语言环境来覆盖它。在生物识别提示上,您不能。我唯一的说法是,应该有一种方法可以在应用程序中设置或覆盖这些翻译。否则对话不可行。例如,我不得不使用 FingerprintManager,因为至少我可以控制这些元素
    【解决方案2】:

    我刚刚实现了 BiometricManager androidx.biometric:biometric:1.0.1,并且能够更改和本地化提示文本以及使用错误指纹时的文本。

    您只需要在您的 strings.xml 中定义这些字符串来覆盖 API 上的那些:

    fingerprint_not_recognized 在使用错误指纹时更改错误消息。这是在FingerprintHelperFragment.java中定义的

    fingerprint_dialog_touch_sensor 更改提示。这是在FingerprintDialogFragment.java

    中定义的

    【讨论】:

    • 它对我不起作用。有代码sn-p看看我是不是做错了吗?
    【解决方案3】:

    它已在 BiometricPrompt 版本 androidx.biometric:biometric:1.0.0-alpha04 中修复。 您只需更改您的手机区域设置即可反映更改。

    如果你有兴趣,这里是commit

    【讨论】:

    • 嗨@ahsan-zaheer,我不确定你所引用的“变化”。您链接中的提交似乎没有任何相关的行为更改,它只是在翻译文件中添加了一些行。我的问题是无法从我的应用程序中更改提示使用的语言。唯一的方法是更改​​整个语言系统,如接受的答案中所述
    • 是的,它使用系统语言。即使您更改应用程序中的语言,“提示”也是系统 UI 的一部分。我在链接提交之前遇到了问题,即使您更改了系统语言,它仍然以英语显示提示。
    【解决方案4】:

    implementation 'androidx.biometric:biometric:1.0.1@aar' 我也遇到了这种情况。我将系统语言更改为英语以外的其他语言,但它仍然显示“触摸指纹传感器”。有没有人对此有解决方案或解释?

    looks 好像 Android 生物识别库已经支持所有语言,但它似乎不起作用。我什至可以在 Android 构建文件夹中看到生成的 merger.xml 中的翻译。

    在装有 Android 9/Oxygen 9.0.10 的 OnePlus 5T 上测试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-07
      • 2015-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多