using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text;
using Netch.Properties;
using Newtonsoft.Json;
namespace Netch.Utils
{
public static class i18N
{
///
/// 数据
///
public static Hashtable Data = new Hashtable();
public static string LangCode { get; private set; }
///
/// 加载
///
/// 语言代码
public static void Load(string langCode)
{
LangCode = langCode;
var text = "";
if (langCode.Equals("System"))
{
// 加载系统语言
langCode = CultureInfo.CurrentCulture.Name;
}
if (langCode == "zh-CN")
{
// 尝试加载内置中文语言
text = Encoding.UTF8.GetString(Resources.zh_CN);
}
else if (langCode.Equals("en-US"))
{
// 清除得到英文
Data.Clear();
return;
}
else if (File.Exists($"i18n\\{langCode}"))
{
// 从外置文件中加载语言
text = File.ReadAllText($"i18n\\{langCode}");
}
var data = JsonConvert.DeserializeObject>(text);
if (data == null) return;
Data = new Hashtable();
foreach (var v in data)
{
Data.Add(v.Key, v.Value);
}
}
///
/// 翻译
///
/// 需要翻译的文本
/// 翻译完毕的文本
public static string Translate(params object[] text)
{
var a = new StringBuilder();
foreach (var t in text)
if (t is string)
a.Append(Data.Contains(t) ? Data[t].ToString() : t);
else
a.Append(t);
return a.ToString();
}
public static string TranslateFormat(string format, params object[] args)
{
for (var i = 0; i < args.Length; i++)
{
if (args[i] is string)
{
args[i] = Translate((string) args[i]);
}
}
return string.Format(Translate(format), args);
}
public static List GetTranslateList()
{
var translateFile = new List {"System", "zh-CN", "en-US"};
if (!Directory.Exists("i18n")) return translateFile;
translateFile.AddRange(Directory.GetFiles("i18n", "*").Select(fileName => fileName.Substring(5)));
return translateFile;
}
}
}