前言
在 Unity API 中有 Application.systemLanguage 可以取得系統語言。可是 Unity 5.3 用於 iOS 上,只要是裝置為中文語系一律回傳 SystemLanguage.Chinese,無法判別簡 / 繁語系,因此才研究怎麼取得 Windows、Android、iOS 原生語系。
Windows Platform
利用 GetSystemDefaultLCID 取得本機端語系,再利用 CultureInfo.GetCultureInfo 轉化為本機端語系文化。
[DllImport("kernel32.dll")]
Android Platform
直接呼叫原生系統 API 取得。
private static string CurrentAndroidLanguage()
{
string result = "";
using (AndroidJavaClass cls = new AndroidJavaClass("java.util.Locale"))
{
if (cls != null)
{
using (AndroidJavaObject locale = cls.CallStatic("getDefault"))
{
if (locale != null)
{
result = locale.Call("getLanguage") + "_" + locale.Call("getDefault");
Debug.Log("Android lang: " + result);
}
else
{
Debug.Log("locale null");
}
}
}
else
{
Debug.Log("cls null");
}
}
return result;
}
iOS Platfrom
製作一個 .mm 文件,內容如下
char* cStringCopy(const char* string)
{
if(string == NULL){
return NULL;
}
char* newString = (char*)malloc(strlen(string) + 1);
strcpy(newString, string);
return newString;
}
extern "C"
{
const char* CurIOSLang ()
{
NSArray *languages = [NSLocale preferredLanguages];
NSString *CurrentLanguage = [languages objectAtIndex:0];
return cStringCopy([CurrentLanguage UTF8String]);
}
}
在 C# 寫出 CurIOSLang 的接口
[DllImport("__Internal")]
private static extern string CurIOSLang();
這樣就可以在 Unity 直接呼叫 CurIOSLan 取得 iOS 語系了。