You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过编程获取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 23:55:31