55

当我需要从应用程序本身更改应用程序区域设置时(即在应用程序内部进行语言更改设置),我遇到了 AAB 的问题,问题是 AAB 只为我提供了我的设备语言资源,例如:

我的设备安装了英语和法语,所以 AAb 只给我英语和法语的资源,

但是从应用程序本身可以选择在英语、法语和印度尼西亚语之间切换语言,

在这种情况下,将语言更改为英语或法语时一切正常,但将其更改为印度尼西亚语时,应用程序只是进入崩溃循环,因为它一直在寻找印度尼西亚语但找不到。

这里的问题是即使我重新启动了应用程序,由于应用程序仍在寻找丢失的语言资源,它再次进入崩溃循环,而这里唯一的解决方案是清除现金或重新安装,这是普通用户赢得的解决方案不通过。


顺便提一下,这就是我通过应用程序更改语言环境的方式:

    // get resources
    Resources res = context.getResources();
    // create the corresponding locale
    Locale locale = new Locale(language); // for example "en"
    // Change locale settings in the app.
    android.content.res.Configuration conf = res.getConfiguration();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
        conf.setLocale(locale);
        conf.setLayoutDirection(locale);
    } else {
        conf.locale = locale;
    }
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        context.getApplicationContext().createConfigurationContext(conf);
    }
    res.updateConfiguration(conf, null);

PS 该应用程序在构建为 APK 时运行良好。

4

3 回答 3

82

编辑:

PlayCore API现在支持按需下载另一种语言的字符串: https ://developer.android.com/guide/playcore/feature-delivery/on-demand#lang_resources

替代解决方案(不鼓励):

您可以通过在 build.gradle 中添加以下配置来禁用按语言拆分

android {
    bundle {
        language {
            // Specifies that the app bundle should not support
            // configuration APKs for language resources. These
            // resources are instead packaged with each base and
            // dynamic feature APK.
            enableSplit = false
        }
    }
}

后一种解决方案将增加应用程序的大小。

于 2018-10-10T06:11:32.113 回答
4

这对于应用程序包是不可能的:Google Play 仅在设备选择的语言发生更改时才下载资源。

如果您想拥有应用内语言选择器,则必须使用 APK。

于 2018-10-10T02:27:05.410 回答
4

可在此处找到按需下载语言的详细信息

https://android-developers.googleblog.com/2019/03/the-latest-android-app-bundle-updates.html

在您的应用build.gradle文件中:

dependencies {
    // This dependency is downloaded from the Google’s Maven repository.
    // So, make sure you also include that repository in your project's build.gradle file.
    implementation 'com.google.android.play:core:1.10.0'

    // For Kotlin users also add the Kotlin extensions library for Play Core:
    implementation 'com.google.android.play:core-ktx:1.8.1'
    ...
}

获取已安装语言的列表

val splitInstallManager = SplitInstallManagerFactory.create(context)
val langs: Set<String> = splitInstallManager.installedLanguages

请求其他语言

val installRequestBuilder = SplitInstallRequest.newBuilder()
installRequestBuilder.addLanguage(Locale.forLanguageTag("pl"))
splitInstallManager.startInstall(installRequestBuilder.build())

检查上面的链接以获取完整的详细信息

于 2021-07-14T07:17:21.033 回答