using System.Collections.Generic; using FairyGUI; namespace NBC { public class UIComponentLanguage : Dictionary { } public abstract class UIComponentLanguagePack : Dictionary { public bool Has(string url) { return ContainsKey(url); } public void TrySetComponentLanguage(GComponent component) { if (component.packageItem == null) return; SetComponentFont(component); if (!Has(component.resourceURL)) return; SetComponentLanguage(component); } /// /// 设置Panel时不判断配置中是否有数据 /// /// public void TrySetPanelLanguage(GComponent component) { SetComponentFont(component); SetComponentLanguage(component); } /// /// 设置组件多语言 /// /// public void SetComponentLanguage(GComponent component) { bool comHasLanConfig = false; UIComponentLanguage componentLangeage = null; if (component.packageItem != null && TryGetValue(component.resourceURL, out componentLangeage)) comHasLanConfig = true; var count = component.numChildren; for (var i = 0; i < count; i++) { var child = component.GetChildAt(i); if (child.packageItem != null && child is GComponent childCom) { SetComponentLanguage(childCom); } else if (child is GList list) { SetComponentLanguage(list); } if (comHasLanConfig) { var id = child.id; if (componentLangeage.TryGetValue(id, out var key)) { if (child is GLoader gLoader) gLoader.icon = Lan.GetLanImagePath(key); else SetChildLanguage(child, Lan.Get(key)); } } } } private void SetChildLanguage(object child, string value) { if (child is TextField textField) { textField.text = value; } else if (child is GRichTextField richTextField) { richTextField.text = value; } else if (child is GButton button) { button.title = value; } else if (child is GLabel label) { label.title = value; } else if (child is GTextField gtextField) { gtextField.text = value; } } void SetComponentFont(GComponent component) { var count = component.numChildren; for (var i = 0; i < count; i++) { var child = component.GetChildAt(i); if (child is GComponent childCom) { SetComponentFont(childCom); } else { SetChildFont(child); } } } void SetChildFont(GObject child) { GTextField curField = null; if (child is GRichTextField richTextField) { curField = richTextField; } else if (child is GButton button) { curField = button.GetTextField(); } else if (child is GLabel label) { curField = label.GetTextField(); } else if (child is GTextField gtextField) { curField = gtextField; } if (curField != null) { // var textFormat = curField.textFormat; // textFormat.font = Lan.GetLanFontByCurFont(textFormat.font); // curField.textFormat = textFormat; } } } }