一、本地化介绍
概述:本地化为了应对游戏发布到不同地区不同国家,对界面相关内容进行修改(中文版、英文版)
实现思路:本地化只是对一些文字进行提取,生成一个文本文件,中文版本(chinese.txt),英文版本(English.txt),这两个文本文件中的内容都是对相同ui文字的操作,一个键对应一个值。(一个国家一个文本文件,根据发布的版本修改显示)
效果展示
二、demo实现
- 创建两个版本的文本文件
- Assert 目录下创建一个文件夹 Resources,方便加载。
- Resources下创建一个文件夹 Locallization,在此统一存放不同语言版本的文本。
- 创建两个版本的 .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);
}
}