Unity实现多语言切换

多语言切换

unity实现多语言切换就需要有类似与语言包一样的东西,这里我将语言包整成Txt文本的形式存放,大家也可以转换成其他形式存储。

在脚本中有个Init方法是用于初始化语言包信息的只有调用了Init方法调用程序中的其他方法才有效。
init方法可重复调用。
调用Init方法时需要传递参数Language结构的内容。

Language结构
Language结构中的m_Type为语言类型为必须传递的参数。
Language结构中的语言文本有三种,只需传递一种就可以。

语言文本中形成 Text Key = [Value] 格式为有效的文本格式且文本格式必须在同一行内方为有效.
格式中的Key值只能由《 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_ 》组成且Key中不能由空格存在。
格式中的Value值得存在必须写在中括号里面

public struct Language
{
   
   
    /// <summary>
    /// 语言类型
    /// </summary>
    public LanguageType m_Type;
    /// <summary>
    /// 语言文本
    /// </summary>
    public TextAsset m_Txt;
    /// <summary>
    /// 语言文本
    /// </summary>
    public byte[] bytes;
    /// <summary>
    /// 语言文本
    /// </summary>
    public string text;
}

Demo
下面是写在Chinese.txt中得内容

Text Home_Title_00 = [首页]
Text Home_Title_01 = [登陆]
Text Home_Title_02 = [退出]

下面是写在English.txt中得内容

Text Home_Title_00 = [Home]
Text Home_Title_01 = [Login]
Text Home_Title_02 = [Exit]

在两个文本中写有相同得key组成得语言库就可在实现语言切换
将需要实现语言切换得方法添加进切换语言回调中即可
调用Add方法即可添加语言切换回调。
调用Setting_LanguageType方法即可切换当前语言形式,切换成功会调用已添加回调。
在回调中重新调用GetValueToKey方法即可实现语言切换。
完整代码中的 ValueToKey 由样式

下面为初始化语言的Demo

TextAsset chinese;		//中文语言上文中的chinese.txt
TextAsset english;		//英文语言上文中的english.txt

 private void Awake()
{
   
   
    //初始化语言包
    LanguageManager.GetManager.Init(new Language{
   
   
        m_Type = LanguageType.Chinese,
        m_Txt = chinese,
    },
    new Language{
   
   
        m_Type = LanguageType.English,
        m_Txt = english,
    }
    );
}


完整的代码
ValueToKey获取语言得帮助脚本将其挂载在Text或TextMesh上,然后填写Key得值即可配合LanguageManager一起使用。

[AddComponentMenu("UI/TextValue")]
public class ValueToKey : MonoBehaviour
{
   
   
    [SerializeField]
    private string Key;

    public string GetKey {
   
    get {
   
    return Key; } }
    /// <summary>
    /// 
    /// </summary>
    public Text m_Content;
    public TextMesh m_Content_3D;

    private void Awake()
    {
   
   
        LanguageManager.GetManager.Add(GetValueToKey);
        if (m_Content_3D == null)
        	m_Content_3D = this.transform.GetComponent<TextMesh>();
        if (m_Content == null)
        	m_Content = this.transform.GetComponent<Text>();
        GetValueToKey();
    }
    /// <summary>
    /// 设置Key值并更新Value
    /// </summary>
    /// <param name="varKey"></param>
    public void SettingKey(string varKey)
    {
   
   
        Key = varKey;
        GetValueToKey();
    }
    private void OnEnable()
    {
   
   
        if (!string.IsNullOrEmpty(Key))
        {
   
   
            GetValueToKey();
        }
    }
    private void GetValueToKey()
    {
   
   
        string Value = LanguageManager.GetManager.GetValueToKey(
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值