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

如何创建支持多方言的应用?设置语言代码遇过时Locale报错求助

解决“过时区域设置”错误,实现App多方言支持

嘿,我来帮你搞定这个问题!你遇到的config.locale = locale被标记为过时的情况,是因为从Android 7.0(API 24)开始,Google就弃用这个字段了,转而推荐用新的API来处理区域设置。咱们先把代码修复好,再一步步聊怎么实现多方言支持。

一、先修复过时的区域设置代码

我们需要做版本兼容处理,同时用上新的API替代弃用的方法,而且为了支持方言,还得扩展Locale的创建参数:

public static void setLanguage(Context context, String languageCode, String countryCode, String variant) {
    Locale locale;
    // 根据方言需求创建Locale,很多方言需要指定国家码或变体来区分
    if (TextUtils.isEmpty(countryCode) && TextUtils.isEmpty(variant)) {
        locale = new Locale(languageCode);
    } else if (TextUtils.isEmpty(variant)) {
        locale = new Locale(languageCode, countryCode);
    } else {
        locale = new Locale(languageCode, countryCode, variant);
    }

    Locale.setDefault(locale);
    Resources resources = context.getApplicationContext().getResources();
    Configuration config = resources.getConfiguration();
    DisplayMetrics metrics = resources.getDisplayMetrics();

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        // API 24及以上用新方法设置Locale
        config.setLocale(locale);
        // Android 12及以上还可以用setLocales,更灵活支持多Locale场景
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
            config.setLocales(new LocaleList(locale));
        }
    } else {
        // 兼容旧版本系统
        config.locale = locale;
    }
    resources.updateConfiguration(config, metrics);
}

代码小说明:

  • 扩展了参数,支持传入国家码和变体,这对区分方言特别重要——比如粤语可以用new Locale("zh", "HK"),台湾闽南语用new Locale("zh", "TW"),更细分的方言还能加变体(比如赣语用new Locale("zh", "CN", "GAN"))。
  • 做了版本分支,高版本用新API,旧版本保留兼容写法,避免警告和错误。

二、实现多方言支持的完整步骤

光改设置代码还不够,要让App真的能加载方言资源,还得做这几件事:

  • 给每个方言建资源目录:
    在res文件夹下创建对应方言的values目录,比如:

    • 简体中文:values-zh-rCN
    • 香港粤语:values-zh-rHK
    • 台湾闽南语:values-zh-rTW
    • 吴语:values-zh-rCN-wu
      每个目录里放strings.xml,把对应方言的翻译文本写进去就行。
  • 给用户提供方言选择入口:
    在App里加个设置页面,列出支持的方言选项,用户选择后,把对应的语言码、国家码、变体传给上面的setLanguage方法。比如选粤语就传"zh", "HK", ""。

  • 记住用户的选择:
    把用户选的方言信息存到SharedPreferences里,在App启动的时候(比如Application的onCreate或者主Activity的onCreate)调用setLanguage方法,自动恢复用户的方言设置。

三、额外小提示

如果你用的是AndroidX/Jetpack,推荐用AppCompatDelegate.setApplicationLocales()这个更现代的方法,它会自动处理配置变更、系统语言切换等场景,更省心:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
    // 传入方言对应的语言标签,比如粤语是"zh-HK"
    AppCompatDelegate.setApplicationLocales(LocaleList.forLanguageTags("zh-HK"));
} else {
    // 这里放旧版本的兼容处理逻辑
}

另外,切换方言后最好重启一下Activity或者App,确保所有资源都能正确加载生效。

内容的提问来源于stack exchange,提问作者Rasool Fazeli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:36:10