(原创)Android多语言适配_app内修改语言

大家在进行android开发时,有时候需要进行多语言的适配

比如一个app需要兼容英文或者中文等多种语言

基本的实现方式

就是放置多套资源,并且给每套资源进行命名

比如drawable-zh-rCN-hdpi

这个文件夹就是放置中文的图片资源的

values-en-rUS文件夹自然是放置英文的相关values资源

这些都是最基本的

在用户进入app之前就会判断系统的语言

从而选择对应的文件夹内容

那么如果要在app内部修改语言呢?

也就是自己的app用自己的语言版本。

哪怕系统的语言是简体中文

但是这个app却可以独立地使用自己想使用的语言版本

比如英文、法语等

这里就要用到一个Local类了

首先我们需要知道,

app的语言对应的都是有相关代码的

我们可以去网络上查找

也可以用这个方法打印出来

Locale[] ls = Locale.getAvailableLocales();
for (Locale locale:ls) {
    Log.d("print", "onCreate: "+locale);
}
如果我们要手动地修改这个app的适配语言

需要以下步骤

private Resources resources;//资源对象
private Configuration config;//设置对象
private DisplayMetrics dm;//屏幕参数

然后实例化对象

//获得res资源对象
resources = getResources();
//获得设置对象
config = resources.getConfiguration();
dm = resources.getDisplayMetrics();//获得屏幕参数:主要是分辨率,像素等。
最后修改语言

config.locale = Locale.CANADA; //简体英文
resources.updateConfiguration(config, dm);
同时需要注意的是,必须要重新进入app才有效

但我们可以使用

Activity自带的recreate()方法重新创建activity

这样就完成了修改app内的默认语言

进入子页面也是默认这个语言了

app会自动搜索资源文件夹去匹配相关的资源了

这时候可以用共享参数将语言版本保存起来

还有一点要注意

Locale.CANADA

代表的是加拿大语

这是系统自己有的静态变量

但是并不是所有国家的语言都有对应的静态变量

这就需要我们自己去定义Local了。

方法也很简单

Locale mylocale = new Locale("en", "US");

这里面的参数怎么来呢?

其实就是一开始这个数组打印出来的参数了

去网上百度到相关的国家所代表的代码即可

这里提供一个查询的网站吧

https://www.cnblogs.com/linlf03/p/3680454.html

Locale[] ls = Locale.getAvailableLocales();
for (Locale locale:ls) {
    Log.d("print", "onCreate: "+locale);
}

最后,想获取默认的Local只需要调用下面的方法即可

Locale.getDefault();

本篇博客参考了以下博客

http://blog.csdn.net/u013310119/article/details/64127771

你可能感兴趣的:(Android开发)