Files
Fishing2/Assets/Scripts/NBC/UI/Runtime/UILanguage/UIComponentLanguagePack.cs
2026-02-02 17:58:39 +08:00

153 lines
4.6 KiB
C#

using System.Collections.Generic;
using FairyGUI;
namespace NBC
{
public class UIComponentLanguage : Dictionary<string, string>
{
}
public abstract class UIComponentLanguagePack : Dictionary<string, UIComponentLanguage>
{
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);
}
/// <summary>
/// 设置Panel时不判断配置中是否有数据
/// </summary>
/// <param name="component"></param>
public void TrySetPanelLanguage(GComponent component)
{
SetComponentFont(component);
SetComponentLanguage(component);
}
/// <summary>
/// 设置组件多语言
/// </summary>
/// <param name="component"></param>
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.SetLanguageImage(key);
}
else
{
child.SetLanguage(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) return;
var textFormat = curField.textFormat;
Log.Info($"font={textFormat.font}");
var fontName = textFormat.font;
if (string.IsNullOrEmpty(fontName))
{
fontName = UIConfig.defaultFont;
}
var font = Lan.GetLanFontByCurFont(fontName);
if (font == null) return;
textFormat.font = font;
curField.textFormat = textFormat;
}
}
}