Android:如何程序化获取generateLocaleConfig生成的应用可用语言列表?
如何获取generateLocaleConfig生成的应用可用语言列表?
核心思路
当你在Gradle中开启generateLocaleConfig = true后,构建系统会自动在res/xml/目录下生成locale_config.xml文件,里面包含了应用所有支持的语言区域信息。直接解析这个本地XML文件是最通用的方案——无需依赖高版本系统API,也不用手动维护语言列表。
步骤与代码示例
- 确保Gradle配置已生效:
android { androidResources { generateLocaleConfig = true } }
构建项目后,可检查app/build/intermediates/res/merged/[variant]/xml/locale_config.xml,确认文件已生成。
- 解析XML获取语言列表(兼容所有Android版本):
import android.content.Context import android.util.Xml import java.util.Locale import org.xmlpull.v1.XmlPullParser fun getSupportedLocales(context: Context): List<Locale> { val locales = mutableListOf<Locale>() runCatching { val xmlParser = context.resources.getXml(R.xml.locale_config) var eventType = xmlParser.eventType while (eventType != XmlPullParser.END_DOCUMENT) { if (eventType == XmlPullParser.START_TAG && xmlParser.name == "locale") { xmlParser.getAttributeValue(null, "name")?.let { localeTag -> locales.add(Locale.forLanguageTag(localeTag)) } } eventType = xmlParser.next() } }.onFailure { it.printStackTrace() } return locales }
关于你之前的LocaleManager代码问题
你之前调用localeManager.overrideLocaleConfig返回空是正常的——overrideLocaleConfig是用于应用手动设置自定义语言配置的对象,默认情况下为空。如果要在Android 13+上通过系统API获取generateLocaleConfig生成的列表,应该调用applicationLocaleConfig:
import android.os.Build import android.app.LocaleManager if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { val localeManager = context.getSystemService(LocaleManager::class.java) localeManager.applicationLocaleConfig.supportedLocales?.let { localeList -> // 处理获取到的LocaleList } }
不过这个方法仅支持Android 13及以上版本,通用性不如解析XML的方案。
内容的提问来源于stack exchange,提问作者user924
相关产品推荐
相关产品推荐

