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

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. [php] 判断当前运行模式

    //判断是否cgi模式 define('IS_CGI',substr(PHP_SAPI, 0,3)=='cgi' ? 1 : 0 ); //判断操作系统是否为windows define('IS_WI ...

  2. UBoot讲解和实践-----------讲解(一)

    Boot Loader之ARM Uboot移植 阶段一 理论篇 1.boot loader需要完成的任务:               1>设计程序的入口地址               2&g ...

  3. 视频处理控件TVideoGrabber中如何混合多个视频源(1)

    其实一个或是几个作为普通的视频源使用的TVideoGrabber组件,可以进行混合来作为一个TVideoGrabber组件使用,这些普通的组件可以是视频捕捉设备或是视频剪辑等.同时这个混合的组件独立于 ...

  4. RAII惯用法详解

    [1]什么是RAII惯用法? RAII是Resource Acquisition Is Initialization的缩写,意为“资源获取即初始化”. 它是C++之父Bjarne Stroustrup ...

  5. selenium 右键另存为操作

    from selenium import webdriverfrom selenium.webdriver.common.action_chains import ActionChainsbrowse ...

  6. sql数据库(资料库)的基本操作

    1 Character Set与Collation 任何资讯技术在处理资料的时候,如果只是单纯的数值和运算,那就不会有太复杂的问题:如果处理的资料是文字的话,就会面临世界上各种不同语言的问题.以资料库 ...

  7. 161110、彻底征服 Spring AOP 之 实战篇

    Spring AOP 实战 看了上面这么多的理论知识, 不知道大家有没有觉得枯燥哈. 不过不要急, 俗话说理论是实践的基础, 对 Spring AOP 有了基本的理论认识后, 我们来看一下下面几个具体 ...

  8. 给MD5加上salt随机盐值加密算法实现密码安全的php实现

    给MD5加上salt随机盐值加密算法实现密码安全的php实现 如果直接对密码进行散列,那么黑客可以对通过获得这个密码散列值,然后通过查散列值字典(例如MD5密码破解网站),得到某用户的密码.加上sal ...

  9. jsp数据库连接出现乱码

    只要涉及中文的地方全部是乱码,解决办法:在数据库的数据库URL中加上 useUnicode=true&characterEncoding=GBK 就OK了. 之前所写,迁移至此 原文链接:ht ...

  10. DataGuard主备归档存在gap的处理办法

    DataGuard主备之间可能由于网络等原因,造成备库和主库之间的归档日志不一致,这样就产生了gap. 解决gap的步骤: 1.在备库获得gap的详细信息 2.将需要的归档日志从主库拷贝到备库 3.备 ...