1. 在开发工具中创建一个新的多语言项目。
2. 添加您需要支持的语言,例如英语、中文、法语等。
3. 在项目中添加多语言支持的代码和资源文件。
4. 为每个语言创建一个翻译文件,将程序中的文本翻译成对应的语言。
5. 编译程序,生成多语言版的exe文件。
需要注意的是,为了使exe文件支持多语言,您需要在程序中使用资源文件和代码,以便根据用户的语言环境选择正确的文本和界面元素。此外,您还需要考虑字符编码、文本方向等问题,以确保程序在不同语言环境下的运行效果。
网上有很多安卓内多语言切换的文章,我也看了一些,很多都千篇一律,而且还是有问题,我就自己重新改了一下。整好分享给各位同学,废话不多说,我们正式开始
我们在点击切换语言的按钮时候d窗dialog 然后用户可以选择 简体中文 英文 繁体中文 跟随系统 四种选项 ,这是我们基本的需求
首先我们要在资源文件res目录下面创建多语言的目录文件夹 values values-en values-zh-rTW values-TW 如图所示:
我们适配多语言的只需要在 values values-en values-zh-rTW 这个三个目录下面的string.xml文件里面写入对应的引用的文本即可
我们只需要这样配置就然后在布局的xml文件里面引用可以达到适配多语言的效果 :
具体引用:
切换的dialog实现这个我用原生的AlertDialog 你们自己可以自定义继承系统的Dialog来实现
这里的语言种类获取到的sta是重SharedPreferences 缓存里面获取到的因为需要
SharedPreferences 工具类:
我们在dialog点击事件里发送一个广播通知 用来触发刷新
然我们在baseActivity里面接收广播重启activity 来刷新多语言切换
关于Locale
实现多语言切换用到了Locale。Locale里很多常见国家和地区以及语言,如果我们做常见的语言,可以直接调用系统的,比如Locale.CHINESE。但是这次做的繁体中文的适配,略我坑一下。
繁体中文我们直接在Locale 属性里面传入 zh-rTW 但是切换没有生效 我翻了下源码只有TW的属性配置我就要修改了
问题是,我最开始直接这样写的:
到此我们说明下开头提到到为什么多出了 values-TW目录 是因为我发现在多语言切换更新 Configuration 中的 locale 属性 的时候翻开源码看到繁体中文(泛指港澳台并没有看到zh-rTW的属性配置)
所以目前的解决方案就是用values-TW来替代:
我这边目前是这样处理来兼容繁体中文切换不生效的做法 ,如果你有更好的方案 麻烦留言大家一起探讨。
Android 内多语言的切换网上的文章也挺多的,基本都千篇一律 很多有纰漏 ,这边也是翻了一下源码勉强能够兼容繁体中文, 项目地址
我在我的项目中是这样做的,给你做个参考吧。这个重写的方法你可以直接定义在当前页面的cs文件中。不过我是定义在页面基类中了。网站所有页面继承页面基类,就可以实现统一的多语言控制了。protected override void InitializeCulture()
{
string strCurrentCulture = Request.QueryString["CurrentCulture"]//获取当前语言参数,你也可以从Session、Cookie、全局变量或是控件获取
if (!String.IsNullOrEmpty(strCurrentCulture))
{
try
{
Thread.CurrentThread.CurrentUICulture = new CultureInfo(strCurrentCulture)
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(strCurrentCulture)
UserStaticValue.CurrentCulture = strCurrentCulture
}
catch//如果当前语言参数不合法则默认显示中文
{
strCurrentCulture = "zh-cn"
//UICulture - 决定了采用哪一种本地化资源,也就是使用哪种语言
//Culture - 决定各种数据类型是如何组织,如数字与日期
Thread.CurrentThread.CurrentUICulture = new CultureInfo(strCurrentCulture)
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(strCurrentCulture)
}
}
else
{
strCurrentCulture = "zh-cn"
//UICulture - 决定了采用哪一种本地化资源,也就是使用哪种语言
//Culture - 决定各种数据类型是如何组织,如数字与日期
Thread.CurrentThread.CurrentUICulture = new CultureInfo(strCurrentCulture)
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(strCurrentCulture)
}
}
希望可以帮到你!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)