先说下国际化的问题。首先,一般认为所谓的国际化不包含逻辑的国际化,那么国际化涉及到的内容就是与广义上的用户UI相关的,包括用户能看到、听到、摸到的东西。当然,摸到东西,一般在软件层面就不探讨了。所以,要国际化,那么就要处理用户能看到的和听到的东西,包括了图片、文字、音乐、音效。很多时候,这个范围会被缩小一些,以降低复杂度。当然,无论如何,国际化的首要问题是解决多语言的问题。

在android系统上,有完整的解决国际化的方法,基本思路是以资源文件的方式将需要国际化的内容隔离出来,而资源所处的文件夹的命名是和语言、国家/地区相关的。系统内部有一个对资源进行分层匹配的算法,以达成用户能够看到与他的语言、地区等最匹配的资源。

下面大概说下开发中对各种资源的处理方法:

文字:一般就是用string.xml文件了。为每一种语言创建一个values-**-r??文件夹,与此语言对应的string.xml放进去就行了。其中**是语言代码,??是国家/区域代码。有一个例外情况是美国英语,系统缺省提供了目录,但命名并未遵守这个规则,命名为en,而不是en-rUS。这些资源也是app可用的保底资源。

图片:处理方法与文字相同,但是目录用drawable-**-r??-%mdpi。其中%代表的是匹配分辨率

音乐、音效等其它资源:比如还会包括app使用的本地网页等。开发环境中并没有针对这些资源提供单独的国际化解决方案,但可以利用相同的思路来解决。一种方法是在assets目录下用不同的目录来保存这些资源。这些资源需要手动判断位置和装载。

语言、国家/地区的选择:多数情况下,采用默认的方法来处理,即app的语言/国家/区域跟随系统设置值。但如果应用提供了系统所不能选择的语言(比如,有些厂商的android手机只能选择有限的几种语言),这种方法就不奏效了。那么,必须在app内部能够选择语言。

举例:

对于一个支持3种语言:en-rUS(美国英语),zh-rCN(简体中文),de-rDE(德国德语)的app而言,目录结构可能是这样的:

文本资源放在res下的

values

values-de-rDE

values-zh-rCN

这三个目录中是与语言对应的string.xml文件

图片资源放在res的如下文件夹下:

drawable-hdpi

drawable-mdpi

drawable-xhdpi

drawable-xxhdpi

以上4个目录存放英语使用的资源。

简体中文使用的图片资源放进res下的四个目录:

drawable-zh-rCN-hdpi

drawable-zh-rCN-mdpi

drawable-zh-rCN-xhdpi

drawable-zh-rCN-xxhdpi

德文使用的图片资源放在rs下的这四个目录:

drawable-de-rDE-hdpi

drawable-de-rDE-mdpi

drawable-de-rDE-xhdpi

drawable-de-rDE-xxhdpi

上面涉及的是文字和图片资源,系统会自动根据语言/国家/地区进行处理。系统不能自动处理的资源用下面的方法来解决。

其它需要国际化的资源放在assets目录下,目录结构是这样的:

音乐文件放在以下3个目录:

assets/music/en

assets/music/zh-rCN

assets/music/de-rDE

音效文件、网页等等都可以按照同样的方法来处理。比如对于网页:

assets/page/en

assets/page/zh-rCN

assets/page/de-rDE

注意:目录命名时,同一种语言的资源,目录名要保持一致

最后一个问题是在app中如何引用这些系统不能自动处理的资源。方法很简单:

在每中语言的string.xml中增加一个语言标记 <string name="language">??</string>,对于三种语言,分别是:

<string name="language">en</string>

<string name="language">zh-rCN</string>

<string name="language">de-rDe</string>

在需要载入music资源时,首先,获取当前语言环境下的的语言标记,对于简体中文,就是zh-rCN,那么与中文相关的music资源就存储在 assets/music/zh-rCN下,直接读取文件就行了。

就这样的。

安卓app中国际化任何资源的方法相关推荐

  1. 安卓app中把数据存在数据库中如何查看(Sqlite安装)

    安卓app中把数据存在数据库中如何查看 可通过Sqlite查看(电脑中如未安装数据库,请按照下方步骤安装) 在data下方寻找你的应用包名 然后右键(导出的数据库文件) 导出即可(save as... ...

  2. android 中打电话,Android 在 APP 中实现拨打电话的方法

    Android 在 APP 中实现拨打电话的方法 2020-12-20 09:17:08 方法一: 首先添加拨打电话的权限: /** * 拨打电话(直接拨打电话) * @param phoneNum ...

  3. 通过 UserAgent 判断是否在我们自己的安卓APP中

    之前 写过一篇 根据 UserAgent 判断网页是在浏览器.或在微信.或在APP中 (http://www.miaoqiyuan.cn/p/useragent-in-where),那篇文章能通过 U ...

  4. android viewpager 详解,详解Android App中ViewPager使用PagerAdapter的方法

    PageAdapter是一个抽象类,直接继承于Object,导入包android.support.v4.view.PagerAdapter即可使用. 要使用PagerAdapter, 首先要继承Pag ...

  5. 安卓APP中启动微信小程序,闪一下无法打开问题

    原因是:调用了其他微信依赖包中的内容.下边是在下项目中的详解. APP调用小程序的代码是: String appId = ".....自己的APPid....."; // 填应用A ...

  6. 安卓开发中发送短信的方法 APP内单发短信 群发短信 APP跳转到短信页 单条短信 多条短信Intent跳转

    1.APP内部直接发送短息 包括发送单条短信 发送多条短信 APP内部发送短信首先要获取一个发送短信的权限 <uses-permission android:name="android ...

  7. 如何在安卓APP中添加分享按钮?

    最近想给一个APP添加分享屏幕截图的功能,就尝试找了一圈相关的Package,最后找倒是没找到,倒是在StackOverflow找到了一个解决方法. 布局及相关权限 AndroidManifest.x ...

  8. 安卓app中跳转到天猫手机app首页

    Intent intent2 = new Intent(); intent2 = getPackageManager().getLaunchIntentForPackage("com.tma ...

  9. 转:设置允许用户利用itunes同步一些资源到我们的App中

    简单的解释一下,允许用户利用itunes同步一些资源到我们的App中,其实就是如一些地图等软件一样,就拿地图软件来说吧,如果开发者在制作的时候将每个地区的离线地图包全部放置在一个ipa中,那么不仅造成 ...

最新文章

  1. Mac Book 问题汇集
  2. 使用 GraalVM 将基本的 Java 项目打包成 EXE
  3. HDFS、MR、Kafka、Storm、Spark、Hbase、Redis原理图
  4. 【斗医】【11】Web应用开发20天
  5. 对象的单数组表示(用单数组实现链表-不一样的链表实现)
  6. mysql1033错误存储引擎_MySQL Innodb存储引擎因为缓存配置出现的错误
  7. Fixed Function Shader
  8. Win10 Explorer v1.3 有趣创意WordPress主题
  9. 【老生谈算法】matlab实现Retinex算法视频增强——Retinex算法
  10. Padavan老毛子固件玩法入门
  11. clip-summary
  12. 前端 - 屏幕尺寸,分辨率,像素,PPI 解析汇总
  13. 前端过程性考核,肝了一宿终于肝出来了!!!
  14. 通俗地解释下密码学中的归约证明
  15. python派森知多少_派森吧 - pythonpub.com | 享受python带来的便利以及快乐
  16. 计算机病毒是在哪里产生的,计算机病毒如何产生
  17. Python—基于Flask框架调用百度接口实现语音识别功能
  18. the way of DPL
  19. 材料科学与工程跟计算机,材料科学与工程中的计算机应用
  20. hp电脑 linux 出错,HP笔记本AMT报错修复

热门文章

  1. 51nod-1366 贫富差距——并查集
  2. 【问题解决】如何将json字符串转为List
  3. linux awk 设置换行符,shell – awk / sed替换换行符
  4. Nginx 502 Bad Gateway
  5. 小学三年级上册计算机计划,2017小学信息技术三年级上册教学计划
  6. 劳特巴赫trace32使用介绍(二)
  7. 首次全面定义,《2022企业应用运维管理指标体系白皮书》发布
  8. 多项式加法运算(链表实现)
  9. 论「版本号」的正确使用方式
  10. Teacher Forcing技术