多语言切换
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(