美文网首页Android开发知识分享
Android国际化之多语言(配置及应用内设置)✈️

Android国际化之多语言(配置及应用内设置)✈️

作者: PlainDev | 来源:发表于2019-07-27 16:59 被阅读0次

    🐟 多语言文件的配置

    Android系统通过判断当前系统的Local配置,来使用对应的strings.xml文件

    • 建立不同语言的strings.xml文件,新建Resource File,选择Local,点击>>,选择需要的语言
    image
    • 多语言文件如图所示
    image
    • strings.xml文件中分别定义了对应的文本,如图所示

    values-->strings.xml默认语言(简体中文)

    <resources>
        <string name="app_name">我的安卓案例</string>
        <string name="label_home_title">小小的Demo👿</string>
        <string name="multi_language_setting">多语言设置</string>
        <string name="exit">退出❌</string>
        <string name="tv_current_language">🐟 当前语言为:%1$s</string>
        <string name="tv_language_setting_title">语言设置</string>
        <string name="confirm">确认✔️</string>
        <string name="cancel">取消❎</string>
        <string name="language_alert_dialog_title">语言更改⚠️</string>
        <string name="language_alert_dialog_content">此操作将修改应用语言并进行重启,是否进行️🙀</string>
    </resources>
    

    values-zh-rHK-->strings.xml繁体中文

    <resources>
        <string name="app_name">我的安卓案例</string>
        <string name="label_home_title">小小的Demo👿</string>
        <string name="multi_language_setting">多語言設置</string>
        <string name="exit">退出❌</string>
        <string name="tv_current_language">🐟 當前語言為:%1$s</string>
        <string name="tv_language_setting_title">語言設置 ✈️</string>
        <string name="confirm">確認✔️</string>
        <string name="cancel">取消❎</string>
        <string name="language_alert_dialog_title">語言更改⚠️</string>
        <string name="language_alert_dialog_content">此操作將修改應用程式語言並重啟,是否進行️🙀</string>
    </resources>
    

    values-en-->strings.xml英语

    <resources>
        <string name="app_name">MyAndroidExercise</string>
        <string name="label_home_title">This is Demo 👿</string>
        <string name="multi_language_setting">MultiLanguageSetting</string>
        <string name="exit">Exit❌</string>
        <string name="tv_current_language">🐟 Current language is %1$s</string>
        <string name="tv_language_setting_title">Language Setting ✈️</string>
        <string name="confirm">Confirm✔️</string>
        <string name="cancel">Cancel❎</string>
        <string name="language_alert_dialog_title">Language changes⚠️</string>
        <string name="language_alert_dialog_content">This action modifies the application language and restarts, whether to proceed or not️🙀</string>
    </resources>
    

    通过上面的设置,当我们切换系统语言时,程序会自动对应相应的strings.xml文件,前提是由对应的语言

    🔧 应用内语言切换

    通过上面的设置还只能依靠系统的语言变更来改变语言,我们最常见的还是在应用中设置需要的语言,因此系统也提供了对应的方法来更改。

    在Android系统中,系统的配置大都通过Configuration来管理,包括strings等等。

    多语言设置案例 📚

    • 1、在BaseActivity中,通过EventBus监听是否切换语言

    onCreate()中注册

    EventBus.getDefault().register(this);
    

    onDestroy()中取消注册

     EventBus.getDefault().unregister(this);
    
    • 2、监听是否触发更改操作 ⌨️
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onEvent(String str) {
        if (str.equals("change")) {
            setLanguage();更改语言
            recreate();//刷新页面
        }
    }
    

    setLanguage()方法

    private void setLanguage() {
        ACache aCache = ACache.get(this);//使用ACache保存配置的语言
        //如果系统当前默认的语言不等于当前ACache中保存的语言,就更改
        if (Locale.getDefault() != Utils.getLanguageLocal(aCache.getAsString(Content.currentLanguage))){
            DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
            Configuration configuration = getResources().getConfiguration();
            Locale locale = Utils.getLanguageLocal(aCache.getAsString(Content.currentLanguage));//获取到ACache中保存的语言
            configuration.setLocale(locale);//设置语言
            getResources().updateConfiguration(configuration, displayMetrics);//更新系统配置文件
        }
    }
    
    • 3、在触发修改的地方进行消息发送和保存语言到ACache中
    aCache.put(Content.currentLanguage, languageType);
    EventBus.getDefault().post("change");
    

    通过上面的设置,可以实现不重启APP修改语言的效果

    📒 总结

    以上只是对Android多语言设置的一些小小的总结,可能有理解不周的情况,欢迎给我留言指出😄

    相关文章

      网友评论

        本文标题:Android国际化之多语言(配置及应用内设置)✈️

        本文链接:https://www.haomeiwen.com/subject/mcdntxtx.html