Unity3d进阶学习(9)-- 本地化Localization

一、本地化介绍

概述:本地化为了应对游戏发布到不同地区不同国家,对界面相关内容进行修改(中文版、英文版)

实现思路:本地化只是对一些文字进行提取,生成一个文本文件,中文版本(chinese.txt),英文版本(English.txt),这两个文本文件中的内容都是对相同ui文字的操作,一个键对应一个值。(一个国家一个文本文件,根据发布的版本修改显示)

效果展示
这里写图片描述
这里写图片描述

二、demo实现

  • 创建两个版本的文本文件
    1. Assert 目录下创建一个文件夹 Resources,方便加载。
    2. Resources下创建一个文件夹 Locallization,在此统一存放不同语言版本的文本。
    3. 创建两个版本的 .txt 文件内容如下

chinese.txt

start=开始
exit=退出

English.txt

start=Start
exit=Exit

  • 创建 LocalizationManager 解析本地化文件
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;

public class LocalizationManager  {

    private static LocalizationManager m_instance = null;
    public static LocalizationManager Instance
    {
        get
        {
            if(m_instance == null)
            {
                m_instance = new LocalizationManager();
            }
            return m_instance;
        }
    }

    private const string chinese = "Locallization/Chinese";
    private const string english = "Locallization/English";
    private const string languageFile = english;
    private Dictionary<string, string> m_languageDic = new Dictionary<string, string>();

    public LocalizationManager()
    {
        TextAsset file = Resources.Load<TextAsset>(languageFile);
        string[] lines = file.text.Split('\n');
        foreach(string line in lines)
        {
            if (string.IsNullOrEmpty(line)) continue;//防止文件有空行或者null
            string[] keyValues = line.Split('=');
            m_languageDic.Add(keyValues[0], keyValues[1]);
        }
    }

    public void Init()
    {

    }

    //key不存在返回NULL
    public string GetValue(string key)
    {
        string value;
        m_languageDic.TryGetValue(key, out value);
        Debug.Log("value = " + value);
        return value;
    }
}
  • 创建 LocalizationText 本地化界面文本 —– 将脚本挂在对应的文本上即可
public class LocalizationText : MonoBehaviour {

    private string m_textName;

    private void Awake()
    {
        m_textName = gameObject.name;
    }
    //对象名作为key值,来获取文本
    private void Start()
    {
        GetComponent<Text>().text = LocalizationManager.Instance.GetValue(m_textName);
    }
}

猜你喜欢

转载自blog.csdn.net/zwg739424406/article/details/79655468