using System; using System.Collections.Generic; using Thousandto.Core.Base; using UnityEngine; using PathUtils = UnityEngine.Gonbest.MagicCube.PathUtils; using FFileReader = UnityEngine.Gonbest.MagicCube.FFileReader; namespace Thousandto.Code.Logic { /// /// 首领功能数据类 /// public class LanguageConvertSystem { private bool _inited = false; private Dictionary _dict; public string ConvertLan(string lanKey) { if (string.IsNullOrEmpty(lanKey)) return string.Empty; if (!_inited) Initialize(); string sep = "2&_"; //存在多个的情况要遍历下 string[] lanKeys = lanKey.Split(new string[] { sep }, StringSplitOptions.None); //最终找到的翻译结果 string translateVal = ""; for (int i = 0; i < lanKeys.Length; i++) { string tempKey = lanKeys[i]; if (lanKeys[i].IndexOf(sep) == 0) { tempKey = lanKeys[i].Replace(sep, ""); } if (_dict != null) { string key = lanKeys[i].Trim(); if (_dict.ContainsKey(key)) { tempKey = _dict[key]; } else { if (_dict.ContainsKey(tempKey)) tempKey = _dict[tempKey]; } } translateVal += tempKey; } return translateVal; } public void Initialize() { string lan = UnityEngine.Gonbest.MagicCube.FLanguage.Default; string fileName = string.Format("Lan_{0}.bytes", string.IsNullOrEmpty(lan)?"CH":lan); var fullPath = PathUtils.GetConfigFilePath(fileName); FFileReader.ReadBytesAsync(fullPath, bytes => { if (bytes != null) _dict = ReadLanConfig(bytes); }); _inited = true; } public static Dictionary ReadLanConfig(byte[] bytes) { int readLen = 0; int dataLen = bytes.Length; //先读取总数量 int allCount = BitConverter.ToInt32(bytes, readLen); readLen += 4; Dictionary result = new Dictionary(allCount); while (readLen < dataLen) { string key = ParseString(bytes, ref readLen); string value = ParseString(bytes, ref readLen); if (!result.ContainsKey(key)) result.Add(key, value); else if(!string.IsNullOrEmpty(value.Trim())) result[key] = value; } return result; } private static string ParseString(byte[] bytes, ref int readLen) { var len = BitConverter.ToInt32(bytes, readLen); readLen += 4; string value = System.Text.Encoding.Unicode.GetString(bytes, readLen, len); readLen += len; return value; } } }