本文转载于:http://blog.csdn.net/teng_ontheway/article/details/50277169
游戏发布,语言本地化需要繁体中文和简体中文
iOS8版本之前没问题,iOS9上无法正常识别这两种语言
原因是在iOS9上,Unity通过Application.systemLanguage返回的简体中文和繁体中文都是SystemLanguage.Chinese,真尼玛坑爹啊,摔手机砸电脑~
亲测Unity 5.2.1、Unity 5.3都有这个问题,Unity更新日志中都没有见这方面消息,不知是没人重视还是没人提~
原因分析:
- 语言 iOS返回语言 Application.systemLanguage
-
- ios 7
- 简体中文 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")]
-
- private static extern string CurIOSLang();
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 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"
- {
-
- const char* CurIOSLang()
- {
- NSArray *languages = [NSLocale preferredLanguages];
- NSString *currentLanguage = [languages objectAtIndex:0];
- return cStringCopy([currentLanguage UTF8String]);
- }
- }
相关资料:
Unity的C#和ObjC数据交互 http://blog.csdn.net/teng_ontheway/article/details/50182217
iOS获得当前系统语言 http://blog.csdn.net/teng_ontheway/article/details/50276987
【Unity语言国际化】多语言缩写对应表 http://blog.csdn.net/teng_ontheway/article/details/48293617