2015年10月28日 星期三

【Unity】偵測系統語系並使用JSON檔修改程式文字

這次來談談系統語系的偵測和修改文字,會使用android系統的手機來測試,在Unity的環境下讀取系統語系只需要一行Application.systemLanguage,把它轉成字串印出來在PC平台上看看:
using UnityEngine;
using System.Collections;
public class SettingLanguage : MonoBehaviour {
    void Start () {
        string systemLanguage = Application.systemLanguage.ToString();
        Debug.Log(systemLanguage);
    }
}
顯示Chinese,的確我的電腦系統語系是中文。
systemLanguage

知道可以偵測到系統語系後,接著就是修改文字,這裡我拿之前使用讀JSON檔的方法:
Unity - JSON檔資料讀取

物件鍵值使用Unity系統有的語系,可以參考:
SystemLanguage

這是要修改的文字,三個UI元件的Text,要轉換的語言是中文、日文、英文和韓文。
systemLanguage

JSON檔是這個樣子:
{
 "Chinese" : ["中文", "測試", "你好世界"]
 ,"ChineseTraditional" : ["中文", "測試", "你好世界"]
 ,"English" : ["English", "test", "HelloWorld"]
 ,"Japanese" : ["日本語", "テスト", "こんにちは世界"]
 ,"Korean" : ["한국의", "테스트", "프로그램"]
}
JSON檔案準備好後,接著就可以做轉換的動作:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using LitJson;
public class SettingLanguage : MonoBehaviour {
    public Text language;
    public Text test;
    public Text helloworld;
    void Start () {
        JsonData jsonData;
        TextAsset textAsset = Resources.Load<TextAsset>("SystemLanguage");//(1)
        jsonData = JsonMapper.ToObject(textAsset.text);
        string systemLanguage = Application.systemLanguage.ToString();//(2)
        if (((IDictionary)jsonData).Contains(systemLanguage)){//(3)
            language.text = jsonData[systemLanguage][0].ToString();//(4)
            test.text = jsonData[systemLanguage][1].ToString();
            helloworld.text = jsonData[systemLanguage][2].ToString();
        }
    }
}
(1)這次使用TextAsset來讀Resources資料夾下的JSON檔。
(2)將抓到系統文字轉換成字串。
(3)寫文寫到一半查到的方法,可以查詢有檔案內有無相同字串。
(4)使用系統文字的字串查詢要轉換的字串。
以下是測試影片:

從影片看的出來是成功的,影片中忘記測試沒對應鍵值的狀況,依條件式來看就是不修改text顯示預設文字,這次就到這裡。

沒有留言:

張貼留言

【自製小遊戲】水平思考猜謎(海龜湯)

遊戲連結 海龜湯的玩法是由出題者提出一個難以理解的事件,參與猜題者可以提出任何問題以試圖縮小範圍並找出事件背後真正的原因。但出題者僅能以「是」、「不是」或「沒有關係」來回答問題。 本遊戲蒐集各種論壇、平台的42個題目,提供給想玩海龜湯卻愁找不到題目的你們。 ...