zoukankan      html  css  js  c++  java
  • C# 多语言国际化问题中的 CultureInfo

        距离上次发随笔已经过去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,之后,无论你手机系统切换成什么语言环境,奇怪的多语言问题都迎刃而解了。

  • 相关阅读:
    ubuntu 安装mysql和redis 开放远程连接
    linux时间不对,执行ntpdate时间同步始终不对。
    Web漏洞
    生产者消费者模型
    多进程抢票问题
    socket通讯-----UDP
    python3读写csv文件
    # 把csv转xls
    python os模块 用资源管理器显示文件,pyinstall打包命令
    创建一个最简单的pyqt5窗口
  • 原文地址:https://www.cnblogs.com/pengsy/p/13502993.html
Copyright © 2011-2022 走看看