距离上次发随笔已经过去4年多了,笔者从校园走向社会也已3年,目前作为一名游戏开发人员开发维护一些出海游戏。出海避免不了国际化多语言,而其中遇到的问题在此表述一下,分享给大家。
我们使用C#获取时间时,C#经常会携带CultureInfo信息,导致格式化的数据会针对不同的国家显示不同的格式:浮点数,德国的浮点数不是用小数点,而是用逗号来分隔的;再例如有些国家的时分秒,使用点号分隔的,而不是用冒号分隔的。
如果不处理的话,上传的数据格式将会给日志处理人员造成很大压力,他们要兼容N个情况,所以在游戏启动时,最好设置一下,使用一个统一的文化。
思路有了,就落地该思路,然而Unity的C#并没有提供设置CultureInfo的接口,经过查询,在博客https://blog.csdn.net/snakorse/article/details/47681019中找到解决方案,可以通过反射的方式设置CultureInfo,那么就可以这么写代码:
public static void LoadSetting() { //设置语言文化为统一不变的文化 SetDefaultCulture(CultureInfo.InvariantCulture); } static void SetDefaultCulture(CultureInfo culture) { Type type = typeof(CultureInfo); try { type.InvokeMember("s_userDefaultCulture", BindingFlags.SetField | BindingFlags.NonPublic | BindingFlags.Static, null, culture, new object[] { culture }); type.InvokeMember("s_userDefaultUICulture", BindingFlags.SetField | BindingFlags.NonPublic | BindingFlags.Static, null, culture, new object[] { culture }); } catch { } try { type.InvokeMember("m_userDefaultCulture", BindingFlags.SetField | BindingFlags.NonPublic | BindingFlags.Static, null, culture, new object[] { culture }); type.InvokeMember("m_userDefaultUICulture", BindingFlags.SetField | BindingFlags.NonPublic | BindingFlags.Static, null, culture, new object[] { culture }); } catch { } }
在游戏一开始启动的时候调用 LoadSetting,之后,无论你手机系统切换成什么语言环境,奇怪的多语言问题都迎刃而解了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?