Android 多语言的实现

 

 

//语言管理类

public class LanguageManager {
 
  public LanguageManager (LANGUAGE langType, Context context){
    
    Resources resources=context.getResources();

   Configuration configuration=resources.getConfiguration();//获取系统的配置
    
    DisplayMetrics dm=resources.getDisplayMetrics();
    
    switch (langType) {
    case CHINESE:
     configuration.locale=Locale.SIMPLIFIED_CHINESE;//将语言更改为简体中文 
     break;

    case ENGLISH:
     configuration.locale=Locale.ENGLISH;
     
     break;
    }
    resources.updateConfiguration(configuration, dm);//更新配置  

  }
}


 
 
在JDK 1.5中添加了一个很有用的特性,即enum关键字。它使得我们在需要群组并使用枚举类型集的时候,可以很方便的处理。在此之前,你需要创建一个整型常量集。而使用enum,我们能很方便的把一组 具名的值创建为一种新的类型。这实在是一种很方便的功能。

枚举是一种我们用的很多,但是其实对它并不是很理解的一个关键字。就如string,大家都在用,可还是很多同学不知道,string并不是基本类型,而只是一个类。而且string不能被继承。因为string是一个final类。枚举其实也是一样的。enum也是一个类。代码里的enum定义:

//语言枚举类

 public enum LANGUAGE{
  CHINESE,ENGLISH
 }



要使用多语言,首先肯定要有为不同语言准备的资源。

只需要按照Android提供的规范,对不同语言下的资源文件夹进行对应的命名即可。

比如我们知道valus是Android的默认简单资源(字符串、数值、颜色等)的文件夹,那么对不同语言下提供的values文件夹命名方式就形如:

/values-zh
/values-zh-rCN
/values-zh-rTW

  • 其中values保持不变;
  • 后缀的zh表示语言;
  • 后缀的rCN、rTW其中‘r’是一个标记,表示后面跟着的CN、TW是国家或地区标志。
所以以上三个资源文件夹表示所对应的语言环境分别为:

中文
中文-中国 (即中文简体)
中文-台湾 (即中文繁体)

默认情况下,Android会根据系统的语言地区设置,自动选择对应的资源。

会首先尝试语言地区全匹配,如果没有权匹配的资源包,则会尝试匹配语言,最后则会取默认的。
比如如果Android系统的语言地区是中文简体,则首先会尝试从/values-zh-rCN中获取资源,如果没有此文件夹或者文件夹中没有响应的资源,则会尝试/values-zh,都获取不到的情况下即从/values中获取。
(/values是必须存在的,否则不能通过编译)

代码中实现:

new LanguageManager(LANGUAGE.ENGLISH, MainActivity.this);
    mTextView.setText(getResources().getText(R.string.hello_world));

 

不同的手机支持的多国家语言是不同的(根据手机厂商对手机的修改程度)。

附:各国语言缩写:http://www.loc.gov/standards/iso639-2/php/code_list.php

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值