Android 实现资源国际化(多语言)

这篇具有很好参考价值的文章主要介绍了Android 实现资源国际化(多语言)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、介绍

二、字符串资源

三、图片资源

四、日期和时间格式

五、其他

六、应用内切换语言

七、资源文件命名规则


一、介绍

        Android国际化(多语言)是一种开发技术,旨在使Android应用程序能够在「不同语言和文化环境」下运行,并为用户提供本地化的体验。这是为了确保应用程序在全球范围内都能够被理解和使用,而不仅仅局限于特定地区或语言的用户。通过遵循一下命名规则,Android系统能够在用户更改语言和地区设置时「自动选择正确的资源文件」,以提供本地化的用户体验。

二、字符串资源

        将应用中的文本内容(如标签、按钮文本、提示信息等)提取为字符串资源,并将这些字符串放入XML文件中,而不是直接硬编码到代码中。这样,可以为不同的语言和地区创建不同的字符串资源文件,以便本地化。

android 国际化,Android 基础梳理,android

android 国际化,Android 基础梳理,android

三、图片资源

        提供不同语言/分辨率设置图片资源,以适应不同设备和地区的要求。例如图片上包含艺术字,这样的话就需要根据不同地区和语言来分别加在。

android 国际化,Android 基础梳理,android

四、日期和时间格式

        在应用程序中使用本地化的日期和时间格式,以便根据用户的区域设置显示正确的日期和时间。

    //传入不同格式,根据当前语言显示对应格式
    private static SimpleDateFormat getFormat(String enFormat,String zhFormat){
        SimpleDateFormat dateFormat;
        if (LangSPUtils.isEn(MyApplication.getContext())) {
            dateFormat = new SimpleDateFormat(enFormat, Locale.ENGLISH);
        }else {
            dateFormat = new SimpleDateFormat(zhFormat,Locale.SIMPLIFIED_CHINESE);
        }
        return dateFormat;
    }
    
    public static final String EN_YYYY_MMM_DD = "yyyy.MMM.dd";
    public static final String ZH_YYYY_MM_DD = "yyyy年MM月dd日";
    
    public static String getNowDateString(Date date) {
        return getFormat(EN_YYYY_MMM_DD,ZH_YYYY_MM_DD).format(date);
    }

五、其他

如果在细致一些可以在以下方面着手

  • 5.1 「支持多屏幕尺寸和分辨率」:确保应用程序的布局和资源适应不同的屏幕尺寸和分辨率,以便在各种设备上正确显示。

  • 5.2 「支持多方向」:为应用程序的布局和资源提供横向和纵向两种方向的支持,以适应设备的旋转。

  • 5.3 「货币和数字格式」:根据用户的区域设置来显示货币符号、千位分隔符和小数点等数字格式。

  • 5.4 「文字顺序」:有些地区文字是从右至左显示,而非从左往后。

  • 5.5 「版本」:res中的资源不只可以根据方向/语言来设置,也可以根据系统版本来进行设置。

六、应用内切换语言

        Application中读取用户语言设置,如果没读取到用户设置语言,则使用系统默认语言。

    public static void setLanguage(Context context, String lang) {
        Locale sta = context.getResources().getConfiguration().locale;
        Resources resources = context.getResources();// 获得res资源对象
        Configuration config = resources.getConfiguration();// 获得设置对象
        DisplayMetrics dm = resources.getDisplayMetrics();// 获得屏幕参数:主要是分辨率,像素等。
        // 获取设置语言
        if (!MStringUtils.isNullOrEmpty(lang)) {
            if (LangSPUtils.zh_CN.equals(lang)) {
                config.locale = Locale.SIMPLIFIED_CHINESE;
                LangSPUtils.putString(LangSPUtils.KEY_LANG, LangSPUtils.zh_CN, context);
            } else if (LangSPUtils.zh_TW.equals(lang)) {
                config.locale = Locale.TRADITIONAL_CHINESE;
                LangSPUtils.putString(LangSPUtils.KEY_LANG, LangSPUtils.zh_TW, context);
            } else {
                config.locale = Locale.US; // 英文
                LangSPUtils.putString(LangSPUtils.KEY_LANG, LangSPUtils.en_US, context);
            }
        } else {
            // 第一次语言设置,取系统语言
            String languages = sta.getLanguage();
            String country = sta.getCountry();
            if (languages=="zh"){
                if (country.equals("CN")){
                    config.locale = Locale.SIMPLIFIED_CHINESE;
                    LangSPUtils.putString(LangSPUtils.KEY_LANG, LangSPUtils.zh_CN, context);
                }else{
                    //再细致一些可以分香港/澳门/台湾繁体
                    config.locale = Locale.TRADITIONAL_CHINESE;
                    LangSPUtils.putString(LangSPUtils.KEY_LANG, LangSPUtils.zh_TW, context);
                }
            }else {
                config.locale = Locale.US; // 英文
                LangSPUtils.putString(LangSPUtils.KEY_LANG, LangSPUtils.en_US, context);
            }
        }
    }

        Activity.attachBaseContext()中设置使用的语言资源。

public class LaunchActivity extends Activity {
    protected void attachBaseContext(Context newBase) {
        String lang = LangSPUtils.getString(LangSPUtils.KEY_LANG,this);
        if (!MStringUtils.isNullOrEmpty(lang)){
            Configuration configuration = newBase.getResources().getConfiguration();
            if (LangSPUtils.zh_CN.equals(lang)) {
                configuration.setLocale(Locale.SIMPLIFIED_CHINESE);
            } else if (LangSPUtils.zh_TW.equals(lang)) {
                configuration.setLocale(Locale.TRADITIONAL_CHINESE);
            } else {
                configuration.setLocale(Locale.US);
            }
            // 字体大小不跟随系统
            configuration.fontScale = 1;
            Context targetContext = newBase.createConfigurationContext(configuration);
            //兼容appcompat 1.2.0后切换语言失效问题
            final ContextThemeWrapper wrappedContext = new ContextThemeWrapper(targetContext,R.style.Base_Theme_AppCompat_Empty) {
                @Override
                public void applyOverrideConfiguration(Configuration overrideConfiguration) {
                    if (overrideConfiguration != null) {
                        overrideConfiguration.setTo(configuration);
                    }
                    super.applyOverrideConfiguration(overrideConfiguration);
                }
            };
            super.attachBaseContext(wrappedContext);
        }else {
            super.attachBaseContext(newBase);
        }
    }

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

}

注:如果设置的时候不重启Activity是不生效的。 如果设置完语言不重启应用(进程),Application的上下文获取的语言还是启动时的语言。

七、资源文件命名规则

  • values目录中的默认资源文件:values/strings.xml。这是应用的默认资源文件,用于包含默认语言的字符串资源。

  • 针对不同语言和地区的资源文件:「values-<语言代码>-r<地区代码>/strings.xml」,其中 <语言代码> 是语言的ISO 639-1代码,而 <地区代码> 是地区的ISO 3166-1 alpha-2代码。例如,values-es-rES/strings.xml表示西班牙语(Spanish,ISO 639-1代码为"es")的资源文件,地区为西班牙(ISO 3166-1 alpha-2代码为"ES")。

  • 针对不同语言的资源文件:「values-<语言代码>/strings.xml」。只要是英语,一律使用该资源文件下的资源。

  • 中文(中国):values-zh-rCN

  • 中文(中国台湾):values-zh-rTW

  • 中文(中国香港):values-zh-rHK

  • 英语(美国):values-en-rUS

  • 英语(英国):values-en-rGB

  • 英文(澳大利亚):values-en-rAU

  • 英文(加拿大):values-en-rCA

  • 英文(爱尔兰):values-en-rIE

  • 英文(印度):values-en-rIN

  • 英文(新西兰):values-en-rNZ

  • 英文(新加坡):values-en-rSG

  • 英文(南非):values-en-rZA

  • 俄文:values-ru-rRU

  • 日文:values-ja-rJP

  • 韩文:values-ko-rKR

  • 阿拉伯文(埃及):values-ar-rEG

  • 阿拉伯文(以色列):values-ar-rIL

  • 保加利亚文: values-bg-rBG

  • 加泰罗尼亚文:values-ca-rES

  • 捷克文:values-cs-rCZ

  • 丹麦文:values-da-rDK

  • 德文(奥地利):values-de-rAT

  • 德文(瑞士):values-de-rCH

  • 德文(德国):values-de-rDE

  • 德文(列支敦士登):values-de-rLI

  • 希腊文:values-el-rGR

  • 西班牙文(西班牙):values-es-rES

  • 西班牙文(美国):values-es-rUS

  • 芬兰文(芬兰):values-fi-rFI

  • 法文(比利时):values-fr-rBE

  • 法文(加拿大):values-fr-rCA

  • 法文(瑞士):values-fr-rCH

  • 法文(法国):values-fr-rFR

  • 希伯来文:values-iw-rIL

  • 印地文:values-hi-rIN

  • 克罗里亚文:values-hr-rHR

  • 匈牙利文:values-hu-rHU

  • 印度尼西亚文:values-in-rID

  • 意大利文(瑞士):values-it-rCH

  • 意大利文(意大利):values-it-rIT

  • 立陶宛文:valueslt-rLT

  • 拉脱维亚文:values-lv-rLV

  • 挪威博克马尔文:values-nb-rNO

  • 荷兰文(比利时):values-nl-BE

  • 荷兰文(荷兰):values-nl-rNL

  • 波兰文:values-pl-rPL

  • 葡萄牙文(巴西):values-pt-rBR

  • 葡萄牙文(葡萄牙):values-pt-rPT

  • 罗马尼亚文:values-ro-rRO

  • 斯洛伐克文:values-sk-rSK

  • 斯洛文尼亚文:values-sl-rSI

  • 塞尔维亚文:values-sr-rRS

  • 瑞典文:values-sv-rSE

  • 泰文:values-th-rTH

  • 塔加洛语:values-tl-rPH

  • 土耳其文:values--r-rTR

  • 乌克兰文:values-uk-rUA

  • 越南文:values-vi-rVN

  • 缅甸语 : values-my文章来源地址https://www.toymoban.com/news/detail-758937.html

到了这里,关于Android 实现资源国际化(多语言)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android国际化各国语言简写

    2024年02月16日
    浏览(38)
  • SpringBoot集成国际化多语言配置

    在当今全球化的环境下,为了更好地满足用户的多语言需求,越来越多的应用程序需要支持国际化多语言配置。Spring Boot作为一种快速开发框架,提供了方便的国际化支持,使得应用程序可以轻松地适应不同的语言环境。通过集成Spring Boot的国际化多语言配置,应用程序可以根

    2024年02月07日
    浏览(42)
  • Flutter之国际化(多语言处理)

    项目内最近加入国际化内容,那么我们需要转化对应语言内容,来展示UI App国际化开发主要包括: 文本国际化 Widget显示的国际化 某些文本在对应语言环境下应该显示为所选择语言内容; 目前我项目内使用的是: Flutter Intl 插件: 1.安装 Flutter Intl 插件 在Android studio内直接搜

    2024年02月14日
    浏览(37)
  • WPF本地化/国际化,多语言切换

    之前写过winformwinform使用本地化,中英文切换_winform 中英文切换_故里2130的博客-CSDN博客 基本的技术差不多,但是后来又发现了一个ResXManager工具,可以更好方便快捷的使用。 首先下载,网络不好的话,去官网下载,然后安装,重启vs即可 wpf做多语言切换 有很多种,可以使用

    2024年02月11日
    浏览(39)
  • 用i18n 实现vue2+element UI的国际化多语言切换详细步骤及代码

    这个地方要注意自己的vue版本和i1n8的匹配程度,如果是vue2点几,记得安装i18n的@8版本,不然会自动安装的最新版本,后面会报错哦,查询了下资料,好像最新版本是适配的vue3。 在src下面新建i18n文件夹,然后在里面新建index.js,里面的内容如下 新建i18n文件夹里面新建config文

    2024年02月14日
    浏览(38)
  • vue2+element-ui使用vue-i18n进行国际化的多语言/国际化

    注意:vue2.0要用8版本的,使用9版本的会报错 在src目录下,创建新的文件夹,命名为i18n zh.js en.js index.js main.js 使用方式一 效果图 使用方式二 效果图 使用方式三,在 效果图 ` 注意:这种方式存在更新this.$i18n.locale的值时无法自动切换的问题,需要刷新页面才能切换语言。解

    2024年02月07日
    浏览(55)
  • 【Unity Localization】基础教程-带你入门Unity官方国际化本地化多语言插件Localization 单独修改配置文件即可一体化控制全局文本实现多语言转换

    Unity Localization 基础教程 随着经济全球化的趋势,游戏也逐渐变的不分国界。在进行游戏内文本的国际化本土化多语言切换时往往是需要制作组耗费大量精力,那么今天要学习的这款Unity官方推出的国际化本地化插件 Localization 就可以进行多语言文本的全局管理达到快速切换文

    2024年02月03日
    浏览(48)
  • 【Unity编辑器扩展】语言国际化工具,生成多语言Excel自动翻译并导出多语言表

     多语言是个非常简单且常用的功能。但是重复工作量大,程序手动把多语言Key配置到多语言表经常会出现错漏,或者几经改版,有些Key已经不用却没有剔除,久而久之造成冗余。这中简单且重复的工作必须让工具来完成。 多语言通过Key,Value的形式保存,通过多语言API GF.

    2024年02月11日
    浏览(46)
  • Shell脚本中文英文多语言国际化和命令行批处理(bash sh cmd bat)中定义函数的简单写法

    有时候为了方便别人使用,我们会选择去编写各种各样的命令行脚本:给Windows用户编写 .bat cmd批处理脚本,给macOS、Linux用户编写 .sh bash shell脚本。 面向国内用户当然应当首选中文作为脚本的显示语言,如果还要支持海外用户使用,那么能提供国际化多语言( i18n )支持那是

    2024年02月08日
    浏览(43)
  • vue-i18n国际化多语言与多套UI组件库使用(Element Plus、Ant Design Vue、Naive UI)

    demo源码:Vue3 UI Lang 因调研需要,需在同一个项目中集成好几种UI组件库的多语言实现,查看各种组件库的表现情况,以便选定组件库。 注意:这只在调研过程中会如此,实际开发项目中极少存在一个项目中集成多个UI组件库的情况。 本demo实际试验阿拉伯语、法语、葡萄牙语

    2024年02月08日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包