You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
137 lines
3.7 KiB
137 lines
3.7 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.Xml;
|
|
using UnityEngine;
|
|
|
|
public class LocalizationText
|
|
{
|
|
private static IDictionary<string, string> _content = new Dictionary<string, string>();
|
|
|
|
private static SystemLanguage _language = SystemLanguage.English;
|
|
public static SystemLanguage Language => _language;
|
|
|
|
private static string _languageTag = "EN";
|
|
public static string LanguageTag => _languageTag;
|
|
|
|
public static event Action OnLanguageChange;
|
|
|
|
public static string GetText(string key)
|
|
{
|
|
string result = "";
|
|
if (string.IsNullOrEmpty(key))
|
|
return result;
|
|
Content.TryGetValue(key, out result);
|
|
|
|
if (string.IsNullOrEmpty(result))
|
|
{
|
|
Logger.Log(key + "[" + Language + "]" + " No Text defined");
|
|
return key;
|
|
}
|
|
|
|
result = result.Replace("\\n", "\n");
|
|
return result;
|
|
}
|
|
|
|
public static void SetLanguage(SystemLanguage language)
|
|
{
|
|
if(_language == language) return;
|
|
|
|
_language = language;
|
|
|
|
switch (Language)
|
|
{
|
|
case SystemLanguage.Korean: _languageTag = "KO"; break;
|
|
case SystemLanguage.Japanese: _languageTag = "JA"; break;
|
|
default: _languageTag = "EN"; break;
|
|
}
|
|
|
|
CreateContent();
|
|
OnLanguageChange?.Invoke();
|
|
}
|
|
|
|
private static IDictionary<string, string> Content
|
|
{
|
|
get
|
|
{
|
|
if (_content == null || _content.Count == 0)
|
|
{
|
|
CreateContent();
|
|
}
|
|
|
|
return _content;
|
|
}
|
|
}
|
|
|
|
private static void AddContent(XmlNode xNode)
|
|
{
|
|
foreach (XmlNode node in xNode.ChildNodes)
|
|
{
|
|
if (node.LocalName != "TextKey")
|
|
{
|
|
continue;
|
|
}
|
|
string value = node.Attributes.GetNamedItem("name").Value;
|
|
string text = string.Empty;
|
|
foreach (XmlNode langNode in node)
|
|
{
|
|
if (langNode.LocalName != _languageTag)
|
|
{
|
|
continue;
|
|
}
|
|
text = langNode.InnerText;
|
|
if (_content.ContainsKey(value))
|
|
{
|
|
_content.Remove(value);
|
|
_content.Add(value, value + " has been found multiple times in the XML allowed only once!");
|
|
}
|
|
else
|
|
{
|
|
_content.Add(value, (!string.IsNullOrEmpty(text)) ? text : ("No Text for " + value + " found"));
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 로컬에 존재하는 xml 파일을 읽어서 텍스트를 생성한다.
|
|
/// </summary>
|
|
public static void CreateContent()
|
|
{
|
|
XmlDocument xmlDocument = new XmlDocument();
|
|
xmlDocument.LoadXml(Resources.Load("Localization").ToString());
|
|
|
|
if (xmlDocument == null)
|
|
{
|
|
System.Console.WriteLine("Couldnt Load Xml");
|
|
return;
|
|
}
|
|
if (_content != null)
|
|
{
|
|
_content.Clear();
|
|
}
|
|
|
|
XmlNode xNode = xmlDocument.ChildNodes.Item(1).ChildNodes.Item(0);
|
|
AddContent(xNode);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 서버에서 받은 xml 파일을 읽어서 텍스트를 생성한다.
|
|
/// </summary>
|
|
public static void CreateContent(string xml)
|
|
{
|
|
XmlDocument xmlDocument = new XmlDocument();
|
|
xmlDocument.LoadXml(xml);
|
|
if (xmlDocument == null)
|
|
{
|
|
System.Console.WriteLine("Couldnt Load Xml");
|
|
return;
|
|
}
|
|
if (_content != null)
|
|
{
|
|
_content.Clear();
|
|
}
|
|
XmlNode xNode = xmlDocument.ChildNodes.Item(1).ChildNodes.Item(0);
|
|
AddContent(xNode);
|
|
}
|
|
}
|