diff --git a/Assets/Scripts/NBC/Language/Runtime/LanguageConcrete/LanguageFont.cs b/Assets/Scripts/NBC/Language/Runtime/LanguageConcrete/LanguageFont.cs index 870f0653b..33365241b 100644 --- a/Assets/Scripts/NBC/Language/Runtime/LanguageConcrete/LanguageFont.cs +++ b/Assets/Scripts/NBC/Language/Runtime/LanguageConcrete/LanguageFont.cs @@ -1,4 +1,6 @@ using System.Collections.Generic; +using FairyGUI; +using TMPro; using UnityEngine; namespace NBC @@ -28,40 +30,40 @@ namespace NBC public void AddLanguage(SystemLanguage language) { - // var configDic = GameConfig.Inst.GetLanguageFontConfig(LanguageConst.languageMap[language]); - // string fontLocation = "Assets/ResRaw/Fonts/"; - // //字体使用前需要先注册 - // foreach (var config in configDic.Values) - // { - // if (config.type == "1") - // { - // DynamicFont font = new DynamicFont(); - // font.name = config.name; - // font.nativeFont = Assets.LoadAsset(fontLocation + config.relativePath).Asset as Font; - // FontManager.RegisterFont(font); - // } - // else if (config.type == "2") - // { - // TMP_FontAsset fontAsset = - // Assets.LoadAsset(fontLocation + config.relativePath).Asset as TMP_FontAsset; - // TMPFont font = new TMPFont(); - // font.name = config.name; //这个名字要和编辑器里字体资源的名字一致 - // font.fontAsset = fontAsset; - // FontManager.RegisterFont(font); - // } - // } - // - // var font2KeyDic = GameConfig.Inst.GetFont2KeyDic(); - // Dictionary keys = new Dictionary(); - // foreach (var pair in font2KeyDic) - // { - // keys.Add(pair.Key, configDic[pair.Value].name); - // } - // - // if (keys != null) - // { - // _languages[language] = keys; - // } + var configDic = Lan.Inst.GetLanguageFontConfig(LanguageConst.languageMap[language]); + string fontLocation = "Assets/Resources/Fonts/"; + //字体使用前需要先注册 + foreach (var config in configDic.Values) + { + if (config.Type == "1") + { + DynamicFont font = new DynamicFont(); + font.name = config.Name; + font.nativeFont = Resources.Load(fontLocation + config.RelativePath); + FontManager.RegisterFont(font); + } + else if (config.Type == "2") + { + TMP_FontAsset fontAsset = + Resources.Load(fontLocation + config.RelativePath) as TMP_FontAsset; + TMPFont font = new TMPFont(); + font.name = config.Name; //这个名字要和编辑器里字体资源的名字一致 + font.fontAsset = fontAsset; + FontManager.RegisterFont(font); + } + } + + var font2KeyDic = Lan.Inst.GetFont2KeyDic(); + Dictionary keys = new Dictionary(); + foreach (var pair in font2KeyDic) + { + keys.Add(pair.Key, configDic[pair.Value].Name); + } + + if (keys != null) + { + _languages[language] = keys; + } } public bool UseLanguage(SystemLanguage language) diff --git a/Assets/Scripts/NBC/Language/Runtime/LanguageConcrete/LanguageImage.cs b/Assets/Scripts/NBC/Language/Runtime/LanguageConcrete/LanguageImage.cs index 73015d979..eba904823 100644 --- a/Assets/Scripts/NBC/Language/Runtime/LanguageConcrete/LanguageImage.cs +++ b/Assets/Scripts/NBC/Language/Runtime/LanguageConcrete/LanguageImage.cs @@ -33,15 +33,15 @@ namespace NBC public void AddLanguage(SystemLanguage language) { - // var keys = GameConfig.Inst.GetLanguageImageConfig(LanguageConst.languageMap[language]); - // if (keys != null) - // { - // _languages[language] = keys; - // } - // else - // { - // _languages[language] = new Dictionary(); - // } + var keys = Lan.Inst.GetLanguageImageConfig(LanguageConst.languageMap[language]); + if (keys != null) + { + _languages[language] = keys; + } + else + { + _languages[language] = new Dictionary(); + } } public bool UseLanguage(SystemLanguage language) diff --git a/Assets/Scripts/NBC/Language/Runtime/LanguageConcrete/LanguageText.cs b/Assets/Scripts/NBC/Language/Runtime/LanguageConcrete/LanguageText.cs index 5d6dd9341..8ed9ec7cc 100644 --- a/Assets/Scripts/NBC/Language/Runtime/LanguageConcrete/LanguageText.cs +++ b/Assets/Scripts/NBC/Language/Runtime/LanguageConcrete/LanguageText.cs @@ -28,22 +28,22 @@ namespace NBC public void AddLanguage(SystemLanguage language) { - // var keys = GameConfig.Inst.GetLanguageConfig(LanguageConst.languageMap[language]); - // if (keys != null) - // { - // _languages[language] = keys; - // } - // else - // { - // _languages[language] = new Dictionary(); - // } + var keys = Lan.Inst.GetLanguageConfig(LanguageConst.languageMap[language]); + if (keys != null) + { + _languages[language] = keys; + } + else + { + _languages[language] = new Dictionary(); + } } public bool UseLanguage(SystemLanguage language) { - if (_languages.ContainsKey(language)) + if (_languages.TryGetValue(language, out var language1)) { - _currentLanguageDictionary = _languages[language]; + _currentLanguageDictionary = language1; return true; } diff --git a/Assets/Scripts/NBC/Language/Runtime/LanguageConfig.cs b/Assets/Scripts/NBC/Language/Runtime/LanguageConfig.cs new file mode 100644 index 000000000..74a64221f --- /dev/null +++ b/Assets/Scripts/NBC/Language/Runtime/LanguageConfig.cs @@ -0,0 +1,34 @@ +using System.Collections.Generic; +using Newtonsoft.Json.Linq; + +namespace NBC +{ + public struct LanguageFontConfig + { + public string Type; + public string Name; + public string RelativePath; + } + + public class LanguageConfig + { + public string Key; + private readonly Dictionary _languages = new Dictionary(); + + public string this[string key] => _languages.GetValueOrDefault(key, key); + + public Dictionary.KeyCollection Keys => _languages.Keys; + + public void Parse(JToken row) + { + Key = row["key"].ToString(); + var children = row.Children(); + foreach (var child in children) + { + if (child is not JProperty property) continue; + if (property.Name == "key") continue; + _languages[property.Name] = property.Value.ToString(); + } + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/NBC/Language/Runtime/LanguageConfig.cs.meta b/Assets/Scripts/NBC/Language/Runtime/LanguageConfig.cs.meta new file mode 100644 index 000000000..6b6de5b3e --- /dev/null +++ b/Assets/Scripts/NBC/Language/Runtime/LanguageConfig.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: dd21030efb0f447988cd659f8a754506 +timeCreated: 1749112259 \ No newline at end of file diff --git a/Assets/Scripts/NBC/Language/Runtime/LanguageManager.cs b/Assets/Scripts/NBC/Language/Runtime/LanguageManager.cs index 89fef6079..81d46cb78 100644 --- a/Assets/Scripts/NBC/Language/Runtime/LanguageManager.cs +++ b/Assets/Scripts/NBC/Language/Runtime/LanguageManager.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using Newtonsoft.Json.Linq; using UnityEngine; namespace NBC @@ -17,6 +18,11 @@ namespace NBC /// private Action _changeAction; + public LanguageManager() + { + LoadLanguageConfig(); + } + public void AddLanguageModule(int type, ILanguage languageModule) { _lanModuleDic.Add(type, languageModule); @@ -97,5 +103,124 @@ namespace NBC { _changeAction -= callback; } + + #region config + + private readonly Dictionary _languageConfigs = new Dictionary(); + private readonly Dictionary _font2Key = new Dictionary(); + + private readonly Dictionary _languageFontConfigs = + new Dictionary(); + + private readonly Dictionary _languageImagesConfigs = + new Dictionary(); + + public Dictionary GetLanguageConfig(LanguageInfo languageInfo) + { + Dictionary dic = new Dictionary(); + foreach (var key in _languageConfigs.Keys) + { + var value = _languageConfigs[key]; + dic[key] = value[languageInfo.Code]; + } + + return dic; + } + + public Dictionary GetLanguageFontConfig(LanguageInfo languageInfo) + { + if (_font2Key.Count != _languageFontConfigs.Count) + { + foreach (var fKey in _languageFontConfigs.Keys) + { + var config = _languageFontConfigs[fKey]; + foreach (var key in config.Keys) + { + var result = config[key]; + if (result != null) + { + string[] strs = result.Split(","); + _font2Key[strs[1]] = fKey; + } + } + } + } + + Dictionary dic = new Dictionary(); + foreach (var key in _languageFontConfigs.Keys) + { + var config = _languageFontConfigs[key]; + string result = config[languageInfo.Code]; + if (result != null) + { + string[] strs = result.Split(","); + var result2 = new LanguageFontConfig() + { + Type = strs[0], + Name = strs[1], + RelativePath = strs[2], + }; + dic[key] = result2; + } + } + + return dic; + } + + + public Dictionary GetLanguageImageConfig(LanguageInfo languageInfo) + { + Dictionary dic = new Dictionary(); + foreach (var key in _languageImagesConfigs.Keys) + { + var value = _languageImagesConfigs[key]; + dic[key] = value[languageInfo.Code]; + } + + return dic; + } + + public Dictionary GetFont2KeyDic() + { + return _font2Key; + } + + private void LoadLanguageConfig() + { + _languageConfigs.Clear(); + var textAsset = Resources.Load("config/language"); + if (textAsset) + { + var jToken = JObject.Parse(textAsset.text); + foreach (var obj in jToken) + { + switch (obj.Key) + { + case "language": + LoadLanguageConfig(obj.Value, _languageConfigs); + break; + case "languageFont": + LoadLanguageConfig(obj.Value, _languageFontConfigs); + break; + case "languageImage": + LoadLanguageConfig(obj.Value, _languageImagesConfigs); + break; + } + } + } + } + + private void LoadLanguageConfig(JToken token, Dictionary dictionary) + { + if (token is not JArray jArray) return; + foreach (var j in jArray) + { + var config = new LanguageConfig(); + config.Parse(j); + dictionary[config.Key] = config; + } + } + + #endregion } } \ No newline at end of file diff --git a/Assets/Scripts/NBC/Language/Runtime/NBC.Lan.asmdef b/Assets/Scripts/NBC/Language/Runtime/NBC.Lan.asmdef index c34a71dcb..db5503832 100644 --- a/Assets/Scripts/NBC/Language/Runtime/NBC.Lan.asmdef +++ b/Assets/Scripts/NBC/Language/Runtime/NBC.Lan.asmdef @@ -1,3 +1,17 @@ { - "name": "NBC.Lan" -} + "name": "NBC.Lan", + "rootNamespace": "", + "references": [ + "GUID:8c8f9d96103e94a7da84b012fd7e9f13", + "GUID:6055be8ebefd69e48b49212b09b47b2f" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Assets/Scripts/NBC/UI/Runtime/NBC.UI.asmdef b/Assets/Scripts/NBC/UI/Runtime/NBC.UI.asmdef index 9514cbc3e..b321dcd07 100644 --- a/Assets/Scripts/NBC/UI/Runtime/NBC.UI.asmdef +++ b/Assets/Scripts/NBC/UI/Runtime/NBC.UI.asmdef @@ -3,9 +3,9 @@ "rootNamespace": "", "references": [ "GUID:b3c9c3fa0cbae6e438ac062aa5d78b76", - "GUID:8beb767f9f7a66f4e87dd9db57cdd64e", "GUID:8c8f9d96103e94a7da84b012fd7e9f13", - "GUID:3f4a88279c0696a488a2e08f8bccf903" + "GUID:3f4a88279c0696a488a2e08f8bccf903", + "GUID:8beb767f9f7a66f4e87dd9db57cdd64e" ], "includePlatforms": [], "excludePlatforms": [], diff --git a/Assets/Scripts/Startup/App.cs b/Assets/Scripts/Startup/App.cs index dfdc7bfdd..126c71351 100644 --- a/Assets/Scripts/Startup/App.cs +++ b/Assets/Scripts/Startup/App.cs @@ -79,6 +79,7 @@ namespace NBF } UI.Inst.SetUILanguage(); + Lan.Inst.AutoUseLanguage(); } #endregion diff --git a/Config/language/LanguageFont.xlsx b/Config/language/LanguageFont.xlsx index 95dedc7d0..2c6b904de 100644 Binary files a/Config/language/LanguageFont.xlsx and b/Config/language/LanguageFont.xlsx differ