前言

在 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 語系了。

參考文章


Github repo