【unity】UGUI多語言工具

寫在前面

最近有一些時(shí)間了,想多跟進(jìn)一下博客。這個(gè)工具是談到海外游戲的時(shí)候想到需要這個(gè)工具。想著想著就寫了,寫的差不多的時(shí)候,順便查了一下,結(jié)果發(fā)現(xiàn)有好多這樣的工具,真是白造輪子了。


assets store

221個(gè)啊,還有很么多免費(fèi)的??吹竭@個(gè)就沒有太想寫了。

簡(jiǎn)單介紹一下

首先項(xiàng)目是基于我的另一個(gè)工具READ-EXCEL,一個(gè)很簡(jiǎn)單的轉(zhuǎn)表工具,這次寫這個(gè)工具,還有修改了幾個(gè)bug??。

基本功能:實(shí)時(shí)切換語言、Text組件自動(dòng)替換

基本原理:把每一個(gè)字符串設(shè)置一個(gè)key值,我們需要這個(gè)字符串的時(shí)候通過key來需要當(dāng)前語言這個(gè)key對(duì)于的字符串。換個(gè)說法就是把文字的key值和字符串用字典存起來,這就得到一個(gè)語言的所有字符串與key,然后再拿一個(gè)字典存語言key值與剛才得到的一個(gè)語言所有字符串的字典。

獲取文字有兩種方式:
1、直接獲?。?/p>

public string GetWordByDirect(int id)
{
    switch (curLanguage)
    {
        case SystemLanguage.ChineseSimplified:
            return Localization_ChineseSimplified.GetData(id).value;
        case SystemLanguage.English:
            return Localization_English.GetData(id).value;
        case SystemLanguage.Japanese:
            return Localization_Japanese.GetData(id).value;
        default:
            Debug.LogError("No This Language Data!");
            return "";
    }
}

優(yōu)勢(shì):速度快。劣勢(shì):每次需要重寫改這里,如果添加了語言。

2、反射獲得:

public string GetWordByReflection(int id)
{
    if (!HasThisLanguageConfig(curLanguage))
    {
        return "";
    }
    var scriptName = "Localization_" + Enum.Parse(typeof(SystemLanguage), curLanguage.ToString()).ToString();
    var method = Type.GetType(scriptName).GetMethod("GetData");
    var word = method.Invoke(null, new object[] { id });
    return word.GetType().GetField("value").GetValue(word).ToString();
}

優(yōu)勢(shì):添加語言不需要修改。劣勢(shì):速度慢。

差不多就這么多吧,沒啥難度的工具。具體的可以看看代碼。GIT。unity版本2017.3.1。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容