android 指定语言的资源,Android国际化多语言切换

最近工作中突然要求要项目进行国际化,之前没遇到过。但是也很简单呀,只需要把添加一个相应语言的的strings.xml的资源文件就好了,不是吗?这样只要切换系统语言就能切换app的文字语言了。

但是由此引发了一个稍微深入一点的问题,那就是如果要实现在app中不跟随系统切换语言,可以直接切换语言哪又要怎么做呢?这种功能是支付宝/微信都有的,功能如下图:

612bd913483b

多语言切换.gif

于是努力的研究了一下子,发现实现这个功能也不难,主要涉及到Configuration和Locale这两个类,其中Configuration是设置app配置的,Locale则是表示地理信息等东西,更多详细内容需要大家自己去了解。

基本的大家已经了解了,那么要如何实现它呢?

首先我们要能切换不同的语言,那么必然需要不同的资源包,所以第一步是建立中文和英文两个不同的strings.xml。

然后就使用Configuration和Locale配置语言了,关键代码如下:

/**

* 切换语言

*

* @param language

*/

private void switchLanguage(String language) {

//设置应用语言类型

Resources resources = getResources();

Configuration config = resources.getConfiguration();

DisplayMetrics dm = resources.getDisplayMetrics();

if (language.equals("zh_simple")) {

config.locale = Locale.SIMPLIFIED_CHINESE;

} else if (language.equals("en")) {

config.locale = Locale.ENGLISH;

} else {

config.locale = Locale.getDefault();

}

resources.updateConfiguration(config, dm);

//更新语言后,destroy当前页面,重新绘制

finish();

Intent it = new Intent(MainActivity.this, MainActivity.class);

//清空任务栈确保当前打开activit为前台任务栈栈顶

it.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);

startActivity(it);

}

通过使用这个方法,传入zh_simple或者en两个string类型,就能选择想要的语言了。

值得注意的是假如你的 App 存在某个 activity 和当前设置页 activity 不在一个 task 栈内的话(比如你从某个通知页用 FLAG_ACTIVITY_NEW_TASK 启动的一个 activity),就不会应用语言设置。因此可以直接杀掉当前 App 的进程,保证是“整个”重启了。所以最好就是清除所有任务栈和进程。

重启app之后使用之前设置好的语言

这个问题挺傻的,但是有时候就是拐不过弯来。

事实上我们只需要在设置语言的时候,把当前设置好的语言保存在sharedpreference中就可以了。然后设置一个application的类,在其中的时候读取配置信息就可以了。

图片国际化与尺寸国际化

既然语言可以国际化,那么图片或者尺寸dimens可不可以国际化呢?

其实这也是可以得,只要在相应的目录下建立不同语言的资源包便可以实现,效果如下:

612bd913483b

GIF.gif

方法如下:

612bd913483b

图片国际化.PNG

612bd913483b

尺寸国际化.PNG

在这里,我设置了两种图片,中国地图和美国地图,将美国地图房子drawable-en-hdpi的目录中,然后选择语言就会出现不同的图片。

然后再values-en目录中建立了新的dimens.xml文件,如下:

100dp

100dp

而在values目录的dimens.xml则设置为300dp,这时两种语言切换后,显示的大小就不同了。

其他资源国际化

在往外延伸一点,既然图片和尺寸都能国际化,那么res资源文件夹下的其他东西是不是也可以国际化呢?答案是可以的。

尝试在res文件夹下创建raw文件夹,放置了音频,然后又创建了raw-en的目录,放置另一个音频,切换语言后,两者也是不同的。

因此可以判断,只要是res资源文件夹下的资源,都是可以进行国际化操作的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/505664.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

plotwidget横坐标日期_plotly详解(标签)x轴日期标签、y轴百分比标签设置

在作图中,我们需要根据自己的业务来更改x轴y轴的标签。注意,坐标轴的修改已经不算做画图了,因为他不是图上的线条或轨迹(trace)了,所以用layout来设置。1>显示或者不显示坐标轴标签。fig.update_layout(xaxis dict(visible Fa…

Android 抖音爱心动画,Android实现抖音心形函数

刷抖音的时候,无意间刷到 心形函数的动画,觉得很有意思, 就简单的用Android的方式实现了一下.心形函数公式公式 :心形公式X的取值范围:[-1.81,1.81],该取值范围是保证正弦函数有效取值范围。我们可以通过参数 a 的取值, 来形成不同的心形轮廓, 进而形成动…

bch纠错码 码长8_密码学BCH纠错编码算法

1日止实验目的:通过实验熟练掌握BCH纠错编码算法,学会BCH纠错编码算法程序设计,提高C程序设计能力。实验要求:开发环境要求:软件环境:windows98/windowsXP/windows2000,C环境硬件环境:计算机(C, 512MRAM&am…

android属性动画缩放和平移同时,Android 实现属性动画平移,旋转,缩放,渐变 《H》...

以下代码直接使用点击事件调用即可平移ObjectAnimator translationX new ObjectAnimator().ofFloat(myyuan,"translationX",0,600f);ObjectAnimator translationY new ObjectAnimator().ofFloat(myyuan,"translationY",0,0);AnimatorSet animatorSet ne…

pytorch默认初始化_PyTorch的初始化

背景在使用PyTorch深度学习框架的时候,不管是训练还是测试,代码中引入PyTorch的第一句总是:import torch在Gemfield前述专栏文章里,我们已经得知,torch/csrc/stub.cpp链接libshm.so、libtorch_python.so、libcaffe2_gp…

android与web服务器建立连接失败,Android websocket连接失败

我正在开发一个简单的应用程序,它只是应该连接到websocket服务器并发送简单的文本消息。我使用nv-websocket-client作为websocket的库。我似乎无法连接到服务器。我使用wireshark来确定设备没有收到数据,也没有数据通过我使用过的任何端口进入&#xff0…

python安装imageio失败_pip install imgaug安装失败解决办法

(tensorflow-gpu) E:\学习\深度学习\Mask_RCNN-master>pip install imgaugCollecting imgaugUsing cached https://files.pythonhosted.org/packages/17/a9/36de8c0e1ffb2d86f871cac60e5caa910cbbdb5f4741df5ef856c47f4445/imgaug-0.2.9-py2.py3-none-any.whlCollecting sci…

android点击通知栏之后消失,为什么noftifications出现在android通知栏中一段时间​​然后消失...

我正在使用BroadCastReceiver,其中接收BOOT_COMPLETED操作.收到此广播后,会设置AlarmManager,此AlarmManager会触发通知:广播接收器的代码:package pit.opensource.events;import java.util.Calendar;import android.app.AlarmManager;import android.ap…

一键装机linux_(推荐)linux用一键安装包

linux一键安装包内置了XXD、apache, php, mysql这些应用程序,不需要再单独安装部署。从7.3版本开始,linux一键安装包分为32位和64位两个包,请大家根据操作系统的情况下载相应的包。一、安装1、将安装包直接解压到/opt目录下特别说明&#xff…

ios重签名shell脚本_iOS逆向——shell重签名及代码注入

感谢hank老师上一章我们讲了应用签名原理和重签名原理,不再赘述,没有看过的同学可以点这里——这章概述shell脚本重签名。可能有的同学认为有很多工具都能快速的帮助我们重签名实现需求,但我更希望在这里与大家沟通原理性的东西,而…

android微信支付服务端,Android 微信支付返回-1

本地服务端测试是可以拉起微信支付的,但是项目移到服务器上就不行呢?开放平台的app签名已经改了发布版的(签名是通过微信官方给的Gen_Signature_Android.apk获取的),appid没换、APP_SECRET 也没换、商户密钥key也没换,证书更没换哈…

android手机解除root,手机显示被root什么意思(手机root怎么解除)

手机root后有什么坏处?如何一键获取手机ROOT权限?在信息时代的大环境下,“黑科技”夺走了大部分的眼球,获取手机root属于所有安卓手机的最大黑科技,也是最基础的搞机技能,本篇就给大家讲解下手机root权限获…

sip 时序图_SPI总线协议及SPI时序图详解

一、SPI总线介绍SPI,是英语Serial Peripheral Interface的缩写,顾名思义就是串行外围设备接口。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚&…

Android11MIUI12,安卓11版MIUI12来了,3款已适配

原标题:安卓11版MIUI12来了,3款已适配现在安卓11系统第二个测试版升级更新都已经推送了,不知道各位有没有升级更新到安卓11系统体验一下新系统。不知道你的手机能不能升级安卓11系统,厂商有没有为你的手机适配安卓11系统&#xff…

简述ipython的特点 app_介绍、基本语法、流程控制

编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快;而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的.这是因为计算机不能直接认识并…

grasp设计模式应用场景_grasp设计模式笔记回顾

根据讲师所讲做了一下笔记以便自己能方便学习:------------------------------------------grasp设计模式;grasp(general responsibility assignment software patterns:通用职责分配软件模式)模式相对于gof23模式更加抽象,它的核心思想&…

html修改details范围,HTML details 标签

HTML 标签标签用于创建一个可展开折叠的元件,用户可以从中检索其他附加的信息。实例使用 元素:Copyright 1999-2011.- by Refsnes Data. All Rights Reserved.All content and graphics on this web site are the property of the company Refsnes Data.…

c# 计算圆锥的体积_用C#如何编写程序计算球,圆柱和圆锥的表面积和体积? 用C#编写方法并通过方法...

//球体表面积A4π*R^2,体积V4/3π*R^3Console.WriteLine("请输入圆的半径R");double RConvert.ToInt32(Console.ReadLine());double round 4 * Math.PI * R * R;double volume 4 * Math.PI * R * R * R / 3;Console.WriteLine("圆的的表面积是{0};…

html中如何设计对话框,用纯css3和html制作泡沫对话框实现代码

现在,泡沫对话框是一种比较流行的趋势,一般都是用html和javascript,和或者图片来实现,今天用纯css3和html来实现一些基本的简单的泡沫对话框html代码如下:复制代码代码如下:The basic bubble variantsThis only needs …

clickhouse建库_专访ClickHouse创始人:数据库竞争依旧火热,技术整合势在必行

加入「公开课」交流群,获取更多学习资料、课程及热招岗位等信息翻译|郑天祺 (Amos Bird) 中科院计算所博士整理 | 夕颜2000 年以来,随着自互联网和云计算技术变革,数据库技术从底层计算系统开始发生一次蜕变,进入了以开…