Android学习----自适应国际化语言
【前言】
自适应的知识与编程无关,关键在于配置文件的修改。自适应的内容包括:语言、屏幕、平台。今天就来说一下如何自适应国际化言。
internationalization (国际化)简称:i18n,因为在i和n之间还有18个字符。同理,localization(本地化 ),简称L10n。
一般用语言_地区的形式表示一种语言,如:zh_CN表示简体中文。
操作方法:
为了支持国际化语言,我们只要在res/目录下在重新新建文件夹为:values-语言代号-地区代号。如values-zh-rCN表示简体中文,values-zh-rTW表示繁体,values-jp表示日语等。
注:配置选项包括语言代号和地区代号。表示中文和中国的配置选项是 zh-rCN(zh表示中文,CN表示中国和 en 表示中文和英文)。 表示英文和美国的配置选项是en-rUS(en表示英文,US表示美国)。前面的r是必须的。
举例:支持中文简体的国际化
操作如下:
现在新建一个Android工程Android_i18n,默认在res/values/strings.xml中的代码如下:
<?xml version="1.0" encoding="utf-8"?>
<resources> <string name="app_name">" Android_i18n"</string>
<string name="hello_world">Hello world!</string>
<string name="action_settings">Settings</string> </resources>
不做任何修改,直接在手机上运行程序,默认的效果如下:
声明:我的手机默认的语言是设置为中文的:
其实无论手机设置成什么语言,运行的效果都是一样的,因为我们还没有进行国际化设置嘛。那现在开始来设置吧。
现在来加一个中文简体的国际化:在res/目录下新建一个文件夹代表中文简体:values-zh-rCN,目录结构如下图所示:
注:如果想再加一个英语的国际化,新建的文件夹为values-en即可。
修改res/values-zh-rCN/strings.xml的代码,如下:
<?xml version="1.0" encoding="utf-8"?>
<resources> <string name="app_name">" 安卓国际化"</string>
<string name="hello_world">你好,世界</string>
<string name="action_settings">设置</string> </resources>
此时运行程序,效果如下:
因为手机设置的是中文语言,此时加载的字符串是res/values-zh-rCN/目录下的资源。
大功告成。
问题一:
现在我并没有添加繁体中文的对应的资源,如果我将手机的语言设置为繁体中文,运行程序会是什么现象呢?
答案:此时,如果没有定义繁体中文的资源,那默认加载的就是res/values/目录下的资源。
问题二:
现在定义一个字符串,只在res/values-zh-rCN/下定义,而不在res/values/定义,运行程序会是什么现象呢?
答案:
现在我们在activity_main.xml中添加一个按钮:
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/login_button"/>
第04行代码:按钮显示的名字引用了字符串login_button
此时,让res/values/strings.xml的代码保持不变:
<?xml version="1.0" encoding="utf-8"?>
<resources> <string name="app_name">" Android_i18n"</string>
<string name="hello_world">Hello world!</string>
<string name="action_settings">Settings</string> </resources>
在res/values-zh-rCN/strings.xml中加一行login_button的声明:(第07行代码)
<?xml version="1.0" encoding="utf-8"?>
<resources> <string name="app_name">" 安卓国际化"</string>
<string name="hello_world">你好,世界</string>
<string name="action_settings">设置</string>
<string name="login_button">登陆按钮</string> </resources>
效果:
activity_main.xml的视图如下:
运行程序,如果手机的语言设置为英文,效果如下:(非正常显示)
如果手机的语言设置为中文,效果如下:(能正常显示)
图片资源的国际化:
另外,我们不仅可以做字符资源的国际化,我们同样可以做图片资源的国际化。操作如下:
(1)在res/目录下新建一个文件夹代表中文简体的图片资源:drawable-zh-rCN。同理,在res/目录下新建一个文件夹代表日本的图片资源:drawable-jp。然后在这两个文件夹中放入不同的图片,但是要保证图片的文件名是一样的。
(2)于是,当我们在布局文件中通过R.drawable.ResId来引用图片的时候,就可以保证在不同的语言环境下,加载不同国家的图片。
其实,国际化并不难,但是如果想支持更多国家的语言,工作量会很大的。
最后附上用于平时用于查阅的东西:
国家_地区的语言缩写代码:(查询备用)
附上国际化资源的常用链接:
各国语言缩写:http://www.loc.gov/standards/iso639-2/php/code_list.php
国家和地区简写:http://www.iso.org/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html
国家_地区语言速查表:http://www.cnblogs.com/Mien/archive/2008/08/22/1273950.html
我的公众号
下图是我的微信公众号(千古壹号),欢迎有心人关注。博客园分享技术,公众号分享心智。
我会很感激第一批关注我的人。此时,年轻的我和你,一无所有;而后,富裕的你和我,满载而归。
Android学习----自适应国际化语言的更多相关文章
- Android旋转屏幕后国际化语言失效的解决的方法
本文已同步至个人博客:liyuyu.cn 近期在项目中使用到了国际化多语言(英文+中文),但在使用时发现了一个问题.当屏幕旋转后.APP语言(中文)自己主动转换为了系统语言(英文).设置了Activi ...
- 学Android开发,入门语言java知识点
学Android开发,入门语言java知识点 Android是一种以Linux为基础的开源码操作系统,主要使用于便携设备,而linux是用c语言和少量汇编语言写成的,如果你想研究Android,就去学 ...
- android学习日记03--常用控件button/imagebutton
常用控件 控件是对数据和方法的封装.控件可以有自己的属性和方法.属性是控件数据的简单访问者.方法则是控件的一些简单而可见的功能.所有控件都是继承View类 介绍android原生提供几种常用的控件bu ...
- Android知识补充(Android学习笔记)
Android知识补充 ●国际化 所谓的国际化,就是指软件在开发时就应该具备支持多种语言和地区的功能,也就是说开发的软件能同时应对不同国家和地区的用户访问,并针对不同国家和地区的用户,提供相应的.符合 ...
- Android学习路线总结,绝对干货
title: Android学习路线总结,绝对干货 tags: Android学习路线,Android学习资料,怎么学习android grammar_cjkRuby: true --- 一.前言 不 ...
- Android 学习资料收集
收集整理这份资料灵感来自于 trip_to_iOS, 征得同意引用了该资料的开头描述 收集整理这份资料主要帮助初学者学习 Android 开发, 希望能快速帮助到他们快速入门, 找到适合自己学习资料, ...
- 八、Android学习第七天——XML文件解析方法(转)
(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 八.Android学习第七天——XML文件解析方法 XML文件:exten ...
- [转]Android 学习资料分享(2015 版)
转 Android 学习资料分享(2015 版) 原文地址:http://www.jianshu.com/p/874ff12a4c01 目录[-] 我是如何自学Android,资料分享(2015 版) ...
- 值得学习的C语言开源项目
值得学习的C语言开源项目 - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工 ...
随机推荐
- Python关键字参数
关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict.请看示例: #!/usr/bin/env python # -*- coding: utf-8 -*- ...
- java分派
变量被声明时的类型叫做变量的静态类型(Static Type) 又叫明显类型(Apparent Type).变量所引用的对象的真实类型又叫做变量的实际类型(Actual Type). 根据对象的类型而 ...
- js中创建对象的几种方式
创建对象指创建一个object并给这个对象添加属性和方法,有以下几个方式: 最基本的: var Person={}; Person.name='tom'; Person.age='20'; Perso ...
- CentOS6.5上编译OpenJDK7源码
本文地址:http://www.cnblogs.com/wuyudong/p/build-openjdk7.html,转载请注明源地址. 采用开源的OpenJDK版本,获取其源码的方式有两种: 通Me ...
- 自定义控件--CircleImageView(类似于QQ、微信圆形头像自定义控件)
现在基本上所有的需要用户注册的APP都有一个需要用户上传头像的需求,上传的头像基本都是类似于QQ.微信等社交应用圆形头像.最近,正在做的一个社交应用多处需要用到这种圆形头像的处理,总不能每次都对图片做 ...
- ShareSDK短信验证码集成详细步骤
1.这里使用的是ShareSDK网的短信验证码SDK 官网 http://www.mob.com 先去http://www.mob.com/#/reg 注册成为开发者 填写相应的信息,邮箱账号,然后 ...
- Android线程池(二)
本篇主要介绍Android自带的线程池的管理. 包含开始任务.重新加载.添加删除任务等,示例代码如下: package com.jiao.threadpooltest; import java.uti ...
- iOS开发之网络编程--使用NSURLConnection实现大文件断点续传下载+使用输出流代替文件句柄
前言:本篇讲解,在前篇iOS开发之网络编程--使用NSURLConnection实现大文件断点续传下载的基础上,使用输出流代替文件句柄实现大文件断点续传. 在实际开发中,输入输出流用的比较少,但 ...
- UNIX/Linux下C语言的学习路线
一.工具篇 “公欲善其事,必先利其器”.编程是一门实践性很强的工作,在你以后的学习或工作中,你将常常会与以下工具打交道, 下面列出学习C语言编程常常用到的软件和工具. 1.操作系统 在UNIX或 ...
- 大家一起和snailren学java-(四)初始化与清理
初始化和清理,是一个生命周期的起始.在java中,对象的初始化和对象的回收是怎样的呢? 在开发c++的时候,有构造器的概念.即对象的创建,首先默认调用构造器进行初始化.在java中也有“构造器”.ja ...