现在的位置: 首页 > 综合 > 正文

Android开发应用内多国语言切换

2016年12月10日 ⁄ 综合 ⁄ 共 1733字 ⁄ 字号 评论关闭

看到微信可以切换语言,切换语言也就是app国际化问题。我们也都会想到通过改变系统的语言,让app是自己跟随系统走,但是每一台手机系统设置中支持选择的语言,就比较少,比如小米2a:就只有 简体中文,繁体中文,English三种语言,肯定满足不了需求,api中提供了locale 类,实现本地化。下面我们来做个例子:对一个简单的setting界面进行语言切换,切换的语言选择有跟随系统走,中文,英文,阿拉伯文。如下图


 1.先去查看下
       各国语言缩写-各国语言简称,世界各国域名缩写
       
2.在工程res文件下添加对应语种的values文件,ar:阿拉伯语,
en:英语    zh_rCN: 简体中文

       截图如下:

              
      
在strings.xml和arrays.xml需要国际化的字符串进行相应得翻译

      
3.在功能清单文件中对要进行切换acitivity 进行配置
          添加

1 android:configChanges="locale"

4.对语言选择的处理

    
语言选择对话框如下图:


5.
切换语言的关键代码:

//应用内配置语言
Resources resources =getResources();//获得res资源对象  
Configuration config = resources.getConfiguration();//获得设置对象  
DisplayMetrics dm = resources.getDisplayMetrics();//获得屏幕参数:主要是分辨率,像素等。
config.locale = Locale.SIMPLIFIED_CHINESE; //简体中文
resources.updateConfiguration(config, dm);

    刚开始的时候,我在在保存后,就进行语言切换,没有效果,原因是界面资源没有重新加载,参考了微信的方法,就是干掉MainActivity,在重启MainActivity,那就这样干吧! 测试下,还真有效果!
   上述代码有一定缺陷,没法对阿拉伯语(相对不常用的语种)就  行不通,Local没有提供相应的常量,问了度娘,也没答案,在网络上看到android2.3以上都支持了阿拉伯语,那就怪啦,最后竟然没有Locale.ar常量,那就new一个呗

config.locale =new Locale("ar");

测试了下,也行! 
      切换成阿拉伯语效果截图:



6.关键代码:

/**
	 * 切换语言
	 * @param i
	 */
	public void ChangeLanguage(int i) {
		// 应用内配置语言
		Resources resources = getResources();                    // 获得res资源对象
		Configuration config = resources.getConfiguration();     // 获得设置对象
		DisplayMetrics dm = resources.getDisplayMetrics();       // 获得屏幕参数:主要是分辨率,像素等。
		switch (i) {
		case 0:
		 // config.locale = Locale.;            // 阿拉伯语
			config.locale = new Locale("ar");  
			break;
		case 1:
			config.locale = Locale.ENGLISH;     // 英文
			break;
		case 2:
			config.locale = Locale.SIMPLIFIED_CHINESE;   // 简体中文
			break;
		case 3:
			config.locale = Locale.getDefault();         // 系统默认语言
			break;
		default:
			break;
		}
		// 更新配置后重启 Activiy
		resources.updateConfiguration(config, dm);
		((Activity) context).finish();
		Intent intent = new Intent();
		intent.setClass(context, MainActivity.class);
		context.startActivity(intent);
	}

原文连接地址:http://bbs.51cto.com/thread-1075165-1-1.html


抱歉!评论已关闭.