新网创想网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
android多语言实现必须是将strings.xml放在不同的文件夹目录下,由安卓系统自动去加载文字资源。
目前创新互联公司已为上千的企业提供了网站建设、域名、虚拟空间、成都网站托管、企业网站设计、顺德网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
1.Android
中要实现国际化比较简单,字符串国际化:只要在
res
文件夹下新建对应语言的
values
文件夹就好了。
例如:
英语环境下的,文件夹命名为:values-en
美国英文环境:values-en-rUS
中文环境为:values-zh
大陆地区中文环境: values-zh-cn
2.eclipse
下新建
Android
项目时,会在
res
目录下自动创建一个默认语言环境的文件夹
:
values
。
3.当某一个资源没有在语言环境的对应的资源集合中找到时,就会使用
values
下的资源。 若某一个语言环境没有在项目中定义语言环境,那么也会使用
values
下的资源。
这篇文章只针对后台返回的数据, 本地数据除外
我们发送网络请求的时候, 带一个语言类型参数, 例如 map.put("language", "ZH"), 我们需要什么语言就传什么语言类型, 正常接收返回值就可以了.
这样做的好处:
①. 对于android端, 新增、修改、删除语言 时也只需改变一个字段的值即可, 这个字段可以使用接口来控制值, App完全可以不用任何修改, 灵活性较高.
②. 对于整个项目而言: 前端("android", "IOS", "小程序", "公众号") 等多个端, 完全无需做任何判断, 只需后台处理好即可, 总体可以节约不少时间.
后台把所有的语言数据一起返回 , 可能出现如下格式:
同行的人看到了肯定会说: 叫后台改成第一种方式啊.
如果是项目刚刚开始开发, 可能比较好改.
我碰到的情况是: 一开始项目没有做android端, 后台和web端已经上线了不知道多少个版本了, 反正就是后台架构已经确定了, 这个时候改成本会比较大. 只能自己处理了.
这个时候处理方式:
① 如果按照原来的方式: GsonFormat.如下图:
这样是可以解析出来的, 看起来项目也能正常运行, 但是每个接口都这么做的话, 维护起来难度太大了, 项目越大越难维护 , 例如:新增一种语言, 竟然要全局大改. 有100个接口就要改100个实体类, 等等.
②. 特殊处理
思考: 有什么办法可以和第一种方式一样, 修改一个参数就可以全局改变语言?
观察: 共同点: 多语言的实体类里面都会有 变量名为"ZH" "EN" 的对象 , 对象不确定类型, 这个时候想到用泛型. 于是有下面的写法:
我们的实体类都有这个特性, 所以直接继承即可.
解析
解析数据类型2
特殊处理步骤:
①. 封装好多语言基类LanguageBeanT
②. 多语言实体类继承LanguageBeanT
③. 获取多语言实体数据时, 要用bean.get()获取对象.
好处
①. 增删改语言, 只需在基类LanguageBeanT修改即可, 其它地方完全不需要修改.
②. 切换语言时: 只需赋值给languageType即可.
③.可切换回方式1 (网络请求的时候, 带一个语言类型参数) , 只需languageType = "" 即可.
封装好以后, 即使后台要重构, 使用方式1处理多语言, 我们也只需修改一个字段即可.
Android系统通过判断当前系统的Local配置,来使用对应的strings.xml文件
values--strings.xml 默认语言(简体中文)
values-zh-rHK--strings.xml 繁体中文
values-en--strings.xml 英语
在Android系统中,系统的配置大都通过 Configuration 来管理,包括strings等等。
onCreate() 中注册
onDestroy() 中取消注册
setLanguage() 方法
通过上面的设置,可以实现不重启APP修改语言的效果
以上只是对Android多语言设置的一些小小的总结,可能有理解不周的情况,欢迎给我留言指出????