当我需要从应用程序内部更改应用程序语言环境时(即在应用程序内部进行语言更改设置),我遇到了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);
P.S。将该应用程序构建为APK时,可以完美运行。
答案 0 :(得分:16)
编辑:
PlayCore API 现在支持按需下载另一种语言的字符串: https://developer.android.com/guide/app-bundle/playcore#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
}
}
}
后一种解决方案将增加应用程序的大小。
答案 1 :(得分:3)
这对于应用程序捆绑包是不可能的:只有在设备的所选语言发生更改时,Google Play才会下载资源。
如果要使用应用内语言选择器,则必须使用APK。
答案 2 :(得分:1)
可以在此处找到按需下载语言的详细信息
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())
查看上面的链接以了解详细信息