zoukankan      html  css  js  c++  java
  • 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中的代码如下:

    1 <?xml version="1.0" encoding="utf-8"?>
    2 <resources>
    3 
    4     <string name="app_name">" Android_i18n"</string>
    5     <string name="hello_world">Hello world!</string>
    6     <string name="action_settings">Settings</string>
    7 
    8 </resources>

    不做任何修改,直接在手机上运行程序,默认的效果如下:

    声明:我的手机默认的语言是设置为中文的:

    其实无论手机设置成什么语言,运行的效果都是一样的,因为我们还没有进行国际化设置嘛。那现在开始来设置吧。

    现在来加一个中文简体的国际化:在res/目录下新建一个文件夹代表中文简体:values-zh-rCN目录结构如下图所示:

    注:如果想再加一个英语的国际化,新建的文件夹为values-en即可。

    修改res/values-zh-rCN/strings.xml的代码,如下:

    1 <?xml version="1.0" encoding="utf-8"?>
    2 <resources>
    3 
    4     <string name="app_name">" 安卓国际化"</string>
    5     <string name="hello_world">你好,世界</string>
    6     <string name="action_settings">设置</string>
    7 
    8 </resources>

    此时运行程序,效果如下:

    因为手机设置的是中文语言,此时加载的字符串是res/values-zh-rCN/目录下的资源。

    大功告成。

    问题一:

    现在我并没有添加繁体中文的对应的资源,如果我将手机的语言设置为繁体中文,运行程序会是什么现象呢?

    答案:此时,如果没有定义繁体中文的资源,那默认加载的就是res/values/目录下的资源

    问题二:

    现在定义一个符串,只在res/values-zh-rCN/下定义,而不在res/values/定义,运行程序会是什么现象呢?

    答案:

    现在我们在activity_main.xml中添加一个按钮:

    1     <Button 
    2         android:layout_width="match_parent"
    3         android:layout_height="wrap_content"
    4         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行代码)

    1 <?xml version="1.0" encoding="utf-8"?>
    2 <resources>
    3 
    4     <string name="app_name">" 安卓国际化"</string>
    5     <string name="hello_world">你好,世界</string>
    6     <string name="action_settings">设置</string>
    7     <string name="login_button">登陆按钮</string>
    8 
    9 </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

    我的公众号

    下图是我的微信公众号(千古壹号),欢迎有心人关注。博客园分享技术,公众号分享心智

    我会很感激第一批关注我的人。此时,年轻的我和你,一无所有;而后,富裕的你和我,满载而归。

  • 相关阅读:
    【java虚拟机】垃圾回收机制详解
    【java虚拟机】分代垃圾回收策略的基础概念
    【java虚拟机】内存分配与回收策略
    【java虚拟机】jvm内存模型
    【转】新说Mysql事务隔离级别
    【转】互联网项目中mysql应该选什么事务隔离级别
    有关PHP的字符串知识
    php的查询数据
    php练习题:投票
    php的数据访问
  • 原文地址:https://www.cnblogs.com/qianguyihao/p/4149592.html
Copyright © 2011-2022 走看看