Androd 多语言国际化设置

本文介绍了如何在Android应用中实现多语言国际化,特别是针对法语的设置。通过特定的代码调用,可以在主界面动态更改应用显示的语言。如果初次设置不生效,可能需要获取当前系统语言并重新启动App来确保语言更新成功。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用于控制当前 App 显示的不同语言(我这里是适配的法语):

Resources resources = getContext().getResources();
DisplayMetrics dm = resources.getDisplayMetrics();
Configuration config = resources.getConfiguration();
String curLanguage = null;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
    curLanguage = config.getLocales().get(0).getCountry();
} else {
    curLanguage = config.locale.getCountry();
}
LvLog.i("change Language before: " + curLanguage);
if (curLanguage.equals("CN")) {
//                    // 应用用户选择语言
    config.locale = Locale.FRENCH;
} else {
    config.locale = Locale.SIMPLIFIED_CHINESE;
}
LvLog.i("change Language after: " + config.locale.getLanguage());
resources.updateConfiguration(config, dm);
Intent intent = new Intent(getActivity(), MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);

因为我是在主界面使用的,所以这里进行调用之后,就直接改变成功。网上也有其他说法,也就是修改完之后必须要杀掉当前应用(不知道是不是我的写法有问题,那种操作并没有成功)
如果以上操作没有成功,可尝试再后面加上以下代码:

// 杀掉进程
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(0);

更新

  • 获取当前系统语言:
 /**
     * 获取系统语言
     * 简体中文 - zh
     *  等同于 {@link #getSystemLanguageResource()}
     */
    fun getSystemLanguage(): String {
        return Locale.getDefault().language ?: ""
    }

/**
* Locale 中,language = zh / en (语种) , region = CN / US (地区)
**/
    fun getSystemLanguageResource(): String {
        val local: Locale
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            local = App.mContext.resources.configuration.locales.get(0)
        } else {
            local = App.mContext.resources.configuration.locale
        }
        return local.language
    }
  • 更新 App 使用语言
// 可以自己根据条件生成 Locale 对象,比如:
 val locale: Locale
 when (selId) {
     ID_CHINESE -> {
         locale = Locale("zh", "CN")
     }
     else -> {
         locale = Locale("en")
     }
 }
 // 然后调用下面 updateAppConfiguration , 如有需要,可本地保存 Locale 对象,在 Application 中进行获取,然后设置 App 语言
fun updateAppConfiguration(locale: Locale) {
        val resources = App.mContext.resources
        val configuration = resources.configuration
        configuration.locale = locale
        resources.updateConfiguration(configuration, resources.displayMetrics)//更新配置
    }
  • 重启 App
fun resetAppToUpdateConfiguration() {
        val curActivity = AppManager.getAppManager().currentActivity()
        val intent = Intent(curActivity, MainActivity::class.java)
        intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK
        curActivity.startActivity(intent)
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值