//语言管理类
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