游戏发布,语言本地化需要繁体中文和简体中文

iOS8版本之前没问题,iOS9上无法正常识别这两种语言

原因是在iOS9上,Unity通过Application.systemLanguage返回的简体中文和繁体中文都是SystemLanguage.Chinese,真尼玛坑爹啊,摔手机砸电脑~

亲测Unity 5.2.1、Unity 5.3都有这个问题,Unity更新日志中都没有见这方面消息,不知是没人重视还是没人提~

原因分析:

语言            iOS返回语言            Application.systemLanguage

ios
简体中文 zh-Hans ChineseSimplified
繁体中文 zh-Hans ChineseSimplified ios 8.1
简体中文 zh-Hans ChineseSimplified
繁体中文(香港) zh-HK ChineseTraditional
繁体中文(台湾) zh-Hant ChineseTraditional ios 9.1
繁体中文 zh-Hant-CN Chinese
简体中文 zh-Hans-CN Chinese
繁体中文(香港) zh-HK ChineseTraditional
繁体中文(台湾) zh-TW Chinese

可见苹果在iOS9上都做了什么鬼处理......

解决方法:

如果Application.systemLanguage返回的是chinese,直接通过C#调用ObjC函数获得当前iOS系统语言进行纠正

 using UnityEngine;
using System.Collections;
using System.Runtime.InteropServices; public class ComManager
{
[DllImport("__Internal")]
// ios手机的当前语言 "en"、“zh"、“zh-Hans"、"zh-Hant"
private static extern string CurIOSLang(); /**
获得校正后的系统语言
因为ios9调整了系统语言,简体中文和繁体中文在ios9上Application.systemLanguage获取的值都是Chinese
无法区分简体中文和繁体中文 ios 7
简体 zh-Hans
繁体 zh-Hant ios 8.1
简体中文 zh-Hans ChineseSimplified
繁体中文(香港) zh-HK ChineseTraditional
繁体中文(台湾) zh-Hant ChineseTraditional ios 9.1
简体中文 zh-Hans-CN Chinese
繁体中文(香港) zh-HK ChineseTraditional
繁体中文(台湾) zh-TW Chinese
**/
public static SystemLanguage GetSystemLanguage()
{
SystemLanguage lang = Application.systemLanguage;
if (Application.platform == RuntimePlatform.IPhonePlayer)
{
if (lang == SystemLanguage.Chinese) {
string name = CurIOSLang();
if (name.StartsWith("zh-Hans")) {
return SystemLanguage.ChineseSimplified;
} return SystemLanguage.ChineseTraditional;
}
} return lang;
}
}

有朋友问上面生命的的CurIOSLang函数怎么来的,是在Objective-C中定义好的,C#中声明引用,具体可以看文章最后的Unity的C#和ObjC数据交互

定义一个.mm文件,内容如下:

 extern char* cStringCopy(const char* string);

 extern "C"
{
// ios手机的当前语言 "en"、“zh"、“zh-Hans"、"zh-Hant"
const char* CurIOSLang()
{
NSArray *languages = [NSLocale preferredLanguages];
NSString *currentLanguage = [languages objectAtIndex:];
return cStringCopy([currentLanguage UTF8String]);
}
}

【Unity3D游戏开发】Application.systemLanguage无法区分简体中文和繁体中文 (二六)的更多相关文章

  1. 【Unity3D游戏开发】基础知识之Tags和Layers (三二)[转]

    Tags和Layers分别表示是Unity引擎里面的标签和层,他们都是用来对GameObject进行标识的属性,Tags常用于单个GameObject,Layers常用于一组的GameObject.添 ...

  2. [Unity3D]Unity3D游戏开发之飞机大战项目解说

    大家好,我是秦元培,欢迎大家继续关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei. 首先感谢大家对我博客的关注,今天我想和大家分享的是一个飞机大战的项目.这是一个比較综合的 ...

  3. [Unity3D]Unity3D游戏开发之异步记载场景并实现进度条读取效果

    大家好,我是秦元培.欢迎大家关注我的博客,我的博客地址是:blog.csdn.net/qinyuanpei.终于在各种无语的论文作业中解脱了,所以立即抓紧时间来这里更新博客.博主本来计划在Unity3 ...

  4. Unity3D游戏开发初探—2.初步了解3D模型基础

    一.什么是3D模型? 1.1 3D模型概述 简而言之,3D模型就是三维的.立体的模型,D是英文Dimensions的缩写. 3D模型也可以说是用3Ds MAX建造的立体模型,包括各种建筑.人物.植被. ...

  5. 从一点儿不会开始——Unity3D游戏开发学习(一)

    一些废话 我是一个windows phone.windows 8的忠实粉丝,也是一个开发者,开发数个windows phone应用和两个windows 8应用.对开发游戏一直抱有强烈兴趣和愿望,但奈何 ...

  6. 从零开始Unity3D游戏开发【1 常用快捷键】

    Unity3D近两年起来的很快.自己对游戏一直很有兴趣,所以想找机会转游戏开发.目的之一是赚钱,目的之二是完成自己的小梦想. Unity3D的人才还是紧缺的,招聘网站上各个公司真敢拿着钱砸.让.NET ...

  7. Unity3D游戏开发之连续滚动背景

    Unity3D游戏开发之连续滚动背景 原文  http://blog.csdn.net/qinyuanpei/article/details/22983421 在诸如天天跑酷等2D游戏中,因为游戏须要 ...

  8. Unity3D游戏开发从零单排(四) - 制作一个iOS游戏

    提要 此篇是一个国外教程的翻译,尽管有点老,可是适合新手入门. 自己去写代码.debug,布置场景,能够收获到非常多.游戏邦上已经有前面两部分的译文,这里翻译的是游戏的最后一个部分. 欢迎回来 在第一 ...

  9. [Unity3D]Unity3D游戏开发《反对》说到游戏(上)——目标跟踪

    朋友,大家好.我是秦培,欢迎关注我的博客.我的博客地址blog.csdn.net/qinyuanpei. 首先博主要自我反省,过了这么久才来更新博客,这段时间主要是在忙着写期末的作业,所以博主基本上没 ...

随机推荐

  1. Hadoop实战3:MapReduce编程-WordCount统计单词个数-eclipse-java-ubuntu环境

    之前习惯用hadoop streaming环境编写python程序,下面总结编辑java的eclipse环境配置总结,及一个WordCount例子运行. 一 下载eclipse安装包及hadoop插件 ...

  2. 161012、JAVA读写文件,如何避免中文乱码

    1.JAVA读取文件,避免中文乱码. /** * 读取文件内容 * * @param filePathAndName * String 如 c:\\1.txt 绝对路径 * @return boole ...

  3. 160906、Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)

    互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,Dubbo是一个分布式服务框架,在这种情况下诞生的.现在核心业务抽取出来,作为独立的服务,使 ...

  4. $(document).ready vs $(window).load vs window.onload

    原文地址: $(document).ready vs $(window).load vs window.onload $(document).ready We execute our code whe ...

  5. Docker 端口映射问题解决

    在操作Docker容器时发现了其一个端口映射的BUG,具体表现为:开启容器时做了端口映射80:8080,即宿主机的80端口映射到容器内部的8080Jboss端口.一开始测试也没有什么问题,都可以联通, ...

  6. 自定义tableViewCell

    http://my.oschina.net/joanfen/blog/137601 效果如下图:可触发按钮事件 1.创建一个Empty Application 2.新建一个TableViewContr ...

  7. C#:反射

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  8. vim中设置自动匹配括号和引号

    vim ~/.vimrc 在.vimrc中添加一下几行 inoremap ( () <LEFT> inoremap { {} <LEFT> inoremap [ [] < ...

  9. gridview 经典

    一.gridview 中弹出超链接 <%--好方法:超链接列中可以直接从数据库获取完整字段,然后选择在当前窗口打开 Target="mainframe" --%> &l ...

  10. python怎么装模块

    windows下 最简单的方法: File---Settings--Project  ---Project Interpreter 下----点击 +号,输入你需要安装的模块名,点击Install P ...