zoukankan      html  css  js  c++  java
  • Unity3D实现多语言切换

    项目现在需要做多语言切换部分,下面是一个基本多语言切换实现

    1.

    首先建立一个类来存放字符,其中包括一个静态方法来根据Key和语言类型获取对应字符

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public static class multiLangConst {
    
        static Dictionary<string, string> LangMap_en = new Dictionary<string, string>{
            {"txt_name", "Name"},
        };
    
        static Dictionary<string, string> LangMap_cn = new Dictionary<string, string>{
            {"txt_name", "名字"},
        };
    
        public static string GetValue(string languageType, string key) {
            if (languageType == "en") {
                return LangMap_en[key];
            } else if (languageType == "cn") {
                return LangMap_cn[key];
            }
            return "N/A";
        }
    }

    2.

    然后建立一个全局的委托

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using System;
    
    public class GameManager : MonoBehaviour {
    
        public delegate void OnLanguageChanged(string type);
        public static OnLanguageChanged onLanguageChanged = null;
        public void SetupLanguage(string type) {
            if (onLanguageChanged != null) {
                onLanguageChanged(type);
            }
        }
    }

    3.

    最后是一个Handler,挂在有Text组件的对象上

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.UI;
    
    public class multiLangHandler : MonoBehaviour {
    
        [SerializeField, Header("Langkey")]
        private string LangKey = "";
    
        void Awake() {
            GameManager.onLanguageChanged += onLanguageChanged;
        }
    
        private void OnDestroy() {
            GameManager.onLanguageChanged -= onLanguageChanged;
        }
    
        void onLanguageChanged(string languageType) {
            Text text = this.gameObject.GetComponent<Text>();
            if (text != null) {
                var value = multiLangConst.GetValue(languageType, LangKey);
                text.text = value;
                return;
            }
        }
    }

    最后通过按钮来调用GameManager下面的SetupLanguage方法来进行语言切换。

  • 相关阅读:
    OC学习 Extension
    OC习题 切分字符串 处理色值和名称 (知识点: 字典,枚举,数组,字符串)
    OC学习 Protocol delegate
    epoll反应堆模型
    socket IPC(本地套接字 domain)
    UDP协议简单的CS模型实现
    linux系统编程统计一个目录下的普通文件个数
    Vs2003多窗口下的复杂数据传递
    NET下XML的访问
    OWC中双刻度图表的实现
  • 原文地址:https://www.cnblogs.com/Mr147/p/9876185.html
Copyright © 2011-2022 走看看