Unity implementa localização multilíngue UGUI multilíngue

1. Primeiro crie dois arquivos txt em Recursos. Eu os nomeei en.txt e zh.txt aqui, um em inglês e outro em chinês

Não precisa ser colocado em Recursos, para comodidade de carregar aqui, também pode ser colocado em outros locais que podem ser carregados.

O conteúdo do arquivo txt é mostrado na figura,  observe que o formato de codificação deve ser UTF-8, caso contrário, pode haver problemas de exibição em chinês na unidade.

2. O gerente carrega a configuração e muda o idioma

Uma classe singleton é herdada aqui e LanguageMgr.Instance.OnInit() pode ser chamado diretamente; para inicializar o idioma, depois de trocar de idioma, escrevi um evento de envio de notificação aqui

using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;

public enum EnLanguageType { 
    English,
    Chinese,
    None,
}
// 多语言
public class LanguageMgr : TSingleton<LanguageMgr>
{
    private readonly string[] m_languageNames = {"en", "zh"};

    //选择自已需要的本地语言  
    private EnLanguageType m_language = EnLanguageType.None;

    private Dictionary<EnLanguageType, Dictionary<string, string>> m_dic = new  Dictionary<EnLanguageType, Dictionary<string, string>>();
    /// <summary>  
    /// 读取配置文件,将文件信息保存到字典里  
    /// </summary>  
    public LanguageMgr()
    {
        // 加载多语言配置
        for (int i = 0; i < m_languageNames.Length; i++)
        {
            if (!m_dic.ContainsKey((EnLanguageType)i))
            {
                m_dic[(EnLanguageType)i] = new Dictionary<string, string>();
            }
            TextAsset ta = Resources.Load<TextAsset>("LanguageTxt/" + m_languageNames[i]);
            string text = ta.text;

            string[] lines = text.Split('\n');
            foreach (string line in lines)
            {
                if (line == null)
                {
                    continue;
                }
                string[] keyAndValue = line.Split('=');
                m_dic[(EnLanguageType)i].Add(keyAndValue[0], keyAndValue[1]);
            }
        }
    }
    public void OnInit()
    {
        ChangeLanguage(EnLanguageType.English);
    }
    /// <summary>  
    /// 获取value  
    /// </summary>  
    /// <param name="key"></param>  
    /// <returns></returns>  
    public string GetValue(string key)
    {
        if (m_dic.ContainsKey(m_language) == false)
        {
            return null;// 不包含语言库
        }
        if (!m_dic[m_language].ContainsKey(key)) return null;// 不包含key
        string value = null;
        m_dic[m_language].TryGetValue(key, out value);
        return value;
    }
    // 格式化 多参数
    public string LanguageFormat(string key,params string[] par)
    {
        var text = GetValue(key);
        if (text == null) return null;
        return string.Format(text, par);
    }
    // 切换语言
    public void ChangeLanguage(EnLanguageType lang)
    {
        if (m_language == lang) return;
        m_language = lang;
        // 更新所有;Text
        EventManager.Instance.DispatchEvent(EventType.UPDATELANGUAGESHOW);
        
    }
}




3. Crie um script LanguageText para pendurar no objeto UI com o componente Text e vincule a chave multilíngue correspondente

Inicialize o evento de escuta aqui e atualize o texto após receber a atualização do idioma

using System;
using UnityEngine;
using UnityEngine.UI;

/// <summary>
/// text多语言绑定
/// </summary>

public class LanguageText : MonoBehaviour
{
    public string key = " ";
    void Start()
    {
        EventManager.Instance.AddListener((int)EventType.UPDATELANGUAGESHOW, UpdateText);
        this.UpdateText(null);
    }
    // 
    public void UpdateText(Message ms)
    {
        if (!gameObject) return;
        GetComponent<Text>().text = LanguageMgr.Instance.GetValue(key);
    }
    private void OnDestroy()
    {
        EventManager.Instance.RemoveListener((int)EventType.UPDATELANGUAGESHOW, UpdateText);
    }
}

 Você pode chamar  LanguageMgr.Instance.LanguageFormat("abc","hahaha","20") para obter o parâmetro de formato multilíngue

Acho que você gosta

Origin blog.csdn.net/github_38633141/article/details/123133363
Recomendado
Clasificación