如何通过编程获取locales_config.xml中的语言列表?Android多语言适配疑问
获取locales_config.xml中的语言列表并实现语言选择功能
1. 规范获取可用语言列表
Android 13+ 版本
直接通过系统API获取应用配置的所有支持语言(对应locales_config.xml中的设置):
LocaleManager localeManager = getSystemService(LocaleManager.class); LocaleListCompat supportedLocales = LocaleListCompat.wrap(localeManager.getSupportedLocales());
Android 12及以下版本
低版本系统无法直接读取locales_config.xml,但可以通过AssetManager获取应用资源中已存在的语言文件夹对应的Locale,这通常和locales_config.xml的配置一致:
AssetManager assetManager = getResources().getAssets(); String[] localeCodes = assetManager.getLocales(); LocaleListCompat supportedLocales = LocaleListCompat.forLanguageTags(String.join(",", localeCodes));
如果你的locales_config.xml包含无对应资源文件夹的语言,可以将这些语言的tag预先定义在字符串数组资源中(比如res/values/arrays.xml),再通过LocaleListCompat.forLanguageTags()构建列表:
<string-array name="supported_locale_tags"> <item>zh-CN</item> <item>en-US</item> <item>ja-JP</item> </string-array>
String[] tags = getResources().getStringArray(R.array.supported_locale_tags); LocaleListCompat supportedLocales = LocaleListCompat.forLanguageTags(String.join(",", tags));
2. 实现语言名称的本地化显示
要让语言名称以用户熟悉的语言展示(比如中文环境下显示“简体中文”,英文环境下显示“English”),使用Locale.getDisplayName()方法:
// 用当前系统Locale显示语言名称 String localizedName = locale.getDisplayName(getResources().getConfiguration().getLocales().get(0)); // 用语言自身的Locale显示(如英文显示"English",日文显示"日本語") String selfLocalizedName = locale.getDisplayName(locale);
3. 构建语言选择UI并应用设置
将supportedLocales转换为列表数据源,在Spinner或RecyclerView中展示选项。用户选择后,通过以下代码全局设置应用语言(兼容所有版本):
// selectedLocale为用户选中的Locale对象 LocaleListCompat newLocaleList = LocaleListCompat.create(selectedLocale); AppCompatDelegate.setApplicationLocales(newLocaleList);
注意:需要确保依赖的androidx.appcompat:appcompat版本在1.6.0及以上,该方法才会生效。
内容的提问来源于stack exchange,提问作者casolorz
相关产品推荐
相关产品推荐

