关于安卓切换语言这件事

33 阅读1分钟

该说不说res下对应语言的文件要先准备好,然后才开始到正题。

android13及以上,api33+

首先在res/xml下添加locales_config.xml,将涉及到的tag加入

<?xml version="1.0" encoding="utf-8"?>
<locale-config xmlns:android="http://schemas.android.com/apk/res/android">
    <locale android:name="cs"/>
    <locale android:name="da"/>
    <locale android:name="de"/>
    <locale android:name="es"/>
    <locale android:name="fr"/>
    <locale android:name="it"/>
    <locale android:name="ko"/>
    <locale android:name="nl"/>
    <locale android:name="pl"/>
    <locale android:name="pt-PT"/>
    <locale android:name="ru"/>
    <locale android:name="th"/>
    <locale android:name="uk"/>
    <locale android:name="vi"/>
    <locale android:name="zh-Hans"/>
</locale-config>

接着在minifest.xml中应用该文件,可能会出现33+才能使用的提示,可以不管

<application
    android:localeConfig="@xml/locales_config"
/>

然后调用LocaleManager进行切换,这边需要传入对应tag

 ContextCompat.getSystemService<LocaleManager>(
            context, LocaleManager::class.java
        )?.let {
            it.applicationLocales = LocaleList.forLanguageTags(languageTag)
        }

android 12 及以下

导入谷歌appcompact的依赖。

implementation 'androidx.appcompat:appcompat:1.7.1'

调用AppCompatDelegate的方法即可

AppCompatDelegate.setApplicationLocales(LocaleListCompat.forLanguageTags(languageTag));

总结

public static void changeLanguage(String languageTag) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
        LocaleManager localeManager = ContextCompat.getSystemService(MyApp.getInstance(), LocaleManager.class);
        if (localeManager != null) {
            localeManager.setApplicationLocales(LocaleList.forLanguageTags(languageTag));
        }
    } else {
        AppCompatDelegate.setApplicationLocales(LocaleListCompat.forLanguageTags(languageTag));
    }
}