安卓app中国际化任何资源的方法
先说下国际化的问题。首先,一般认为所谓的国际化不包含逻辑的国际化,那么国际化涉及到的内容就是与广义上的用户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中国际化任何资源的方法相关推荐
- 安卓app中把数据存在数据库中如何查看(Sqlite安装)
安卓app中把数据存在数据库中如何查看 可通过Sqlite查看(电脑中如未安装数据库,请按照下方步骤安装) 在data下方寻找你的应用包名 然后右键(导出的数据库文件) 导出即可(save as... ...
- android 中打电话,Android 在 APP 中实现拨打电话的方法
Android 在 APP 中实现拨打电话的方法 2020-12-20 09:17:08 方法一: 首先添加拨打电话的权限: /** * 拨打电话(直接拨打电话) * @param phoneNum ...
- 通过 UserAgent 判断是否在我们自己的安卓APP中
之前 写过一篇 根据 UserAgent 判断网页是在浏览器.或在微信.或在APP中 (http://www.miaoqiyuan.cn/p/useragent-in-where),那篇文章能通过 U ...
- android viewpager 详解,详解Android App中ViewPager使用PagerAdapter的方法
PageAdapter是一个抽象类,直接继承于Object,导入包android.support.v4.view.PagerAdapter即可使用. 要使用PagerAdapter, 首先要继承Pag ...
- 安卓APP中启动微信小程序,闪一下无法打开问题
原因是:调用了其他微信依赖包中的内容.下边是在下项目中的详解. APP调用小程序的代码是: String appId = ".....自己的APPid....."; // 填应用A ...
- 安卓开发中发送短信的方法 APP内单发短信 群发短信 APP跳转到短信页 单条短信 多条短信Intent跳转
1.APP内部直接发送短息 包括发送单条短信 发送多条短信 APP内部发送短信首先要获取一个发送短信的权限 <uses-permission android:name="android ...
- 如何在安卓APP中添加分享按钮?
最近想给一个APP添加分享屏幕截图的功能,就尝试找了一圈相关的Package,最后找倒是没找到,倒是在StackOverflow找到了一个解决方法. 布局及相关权限 AndroidManifest.x ...
- 安卓app中跳转到天猫手机app首页
Intent intent2 = new Intent(); intent2 = getPackageManager().getLaunchIntentForPackage("com.tma ...
- 转:设置允许用户利用itunes同步一些资源到我们的App中
简单的解释一下,允许用户利用itunes同步一些资源到我们的App中,其实就是如一些地图等软件一样,就拿地图软件来说吧,如果开发者在制作的时候将每个地区的离线地图包全部放置在一个ipa中,那么不仅造成 ...
最新文章
- Mac Book 问题汇集
- 使用 GraalVM 将基本的 Java 项目打包成 EXE
- HDFS、MR、Kafka、Storm、Spark、Hbase、Redis原理图
- 【斗医】【11】Web应用开发20天
- 对象的单数组表示(用单数组实现链表-不一样的链表实现)
- mysql1033错误存储引擎_MySQL Innodb存储引擎因为缓存配置出现的错误
- Fixed Function Shader
- Win10 Explorer v1.3 有趣创意WordPress主题
- 【老生谈算法】matlab实现Retinex算法视频增强——Retinex算法
- Padavan老毛子固件玩法入门
- clip-summary
- 前端 - 屏幕尺寸,分辨率,像素,PPI 解析汇总
- 前端过程性考核,肝了一宿终于肝出来了!!!
- 通俗地解释下密码学中的归约证明
- python派森知多少_派森吧 - pythonpub.com | 享受python带来的便利以及快乐
- 计算机病毒是在哪里产生的,计算机病毒如何产生
- Python—基于Flask框架调用百度接口实现语音识别功能
- the way of DPL
- 材料科学与工程跟计算机,材料科学与工程中的计算机应用
- hp电脑 linux 出错,HP笔记本AMT报错修复