多语言逻辑

This commit is contained in:
bob
2025-06-13 17:35:29 +08:00
parent f862c7514c
commit e060f9eb02
18 changed files with 561 additions and 221 deletions

View File

@@ -7,6 +7,7 @@ namespace NBF
public class TabItemData
{
public string Name;
public string Key;
public string Icon;
}

View File

@@ -15,28 +15,33 @@ namespace NBC
public const string LanguageSaveKey = "LanguageSaveKey";
//简体中文、繁体中文、英语、日语、韩语、泰语、越南语、法语、德语、葡萄牙与、西班牙语、俄语、波兰语、荷兰语、
//土耳其语、意大利语、印度尼西亚语
//简体中文、繁体中文、英语、日语、德语、俄语、法语、西班牙语、韩语、葡萄牙
//土耳其语、意大利语、印度尼西亚语,阿拉伯语,泰语、越南语、波兰语、荷兰语
public static readonly List<LanguageInfo> LanguageList = new List<LanguageInfo>()
{
new LanguageInfo() { Language = SystemLanguage.English, Name = "English", Code = "en" },
new LanguageInfo() { Language = SystemLanguage.ChineseSimplified, Name = "简体中文", Code = "zh-CN" },
// new LanguageInfo() { Language = SystemLanguage.ChineseTraditional, Name = "繁體中文", Code = "zh-TW" },
new LanguageInfo() { Language = SystemLanguage.ChineseTraditional, Name = "繁體中文", Code = "zh-TW" },
// new LanguageInfo() { Language = SystemLanguage.Japanese, Name = "日本語", Code = "ja" },
// new LanguageInfo() { Language = SystemLanguage.Korean, Name = "한국어", Code = "ko" },
// new LanguageInfo() { Language = SystemLanguage.Thai, Name = "ไทย", Code = "th" },
// new LanguageInfo() { Language = SystemLanguage.Vietnamese, Name = "Tiếng Việt", Code = "vi" },
// new LanguageInfo() { Language = SystemLanguage.German, Name = "Deutsch", Code = "de" },
// new LanguageInfo() { Language = SystemLanguage.French, Name = "Français", Code = "fr" },
// new LanguageInfo() { Language = SystemLanguage.German, Name = "Deutsch", Code = "de" },
// new LanguageInfo() { Language = SystemLanguage.Korean, Name = "한국어", Code = "ko" },
// new LanguageInfo() { Language = SystemLanguage.Russian, Name = "Русский", Code = "ru" },
// new LanguageInfo() { Language = SystemLanguage.Spanish, Name = "Español", Code = "es" },
// new LanguageInfo() { Language = SystemLanguage.Portuguese, Name = "Português", Code = "pt" },
// new LanguageInfo() { Language = SystemLanguage.Polish, Name = "Polski", Code = "pl" },
// new LanguageInfo() { Language = SystemLanguage.Dutch, Name = "Nederlands", Code = "nl" },
// new LanguageInfo() { Language = SystemLanguage.Turkish, Name = "Türkçe", Code = "tr" },
// new LanguageInfo() { Language = SystemLanguage.Italian, Name = "Italiano", Code = "it" },
// new LanguageInfo() { Language = SystemLanguage.Arabic, Name = "العربية", Code = "ar" }
// new LanguageInfo() { Language = SystemLanguage.Vietnamese, Name = "Tiếng Việt", Code = "vi" },
// new LanguageInfo() { Language = SystemLanguage.Thai, Name = "ไทย", Code = "th" },
// new LanguageInfo() { Language = SystemLanguage.Indonesian, Name = "Bahasa Indonesia", Code = "id" },
// new LanguageInfo() { Language = SystemLanguage.Italian, Name = "Italiano", Code = "it" }
};
/// <summary>

View File

@@ -1,6 +1,9 @@
namespace NBC
using System.Collections.Generic;
using FairyGUI;
namespace NBC
{
public class Lan
public static class Lan
{
private static LanguageManager _inst;
@@ -19,18 +22,59 @@
public static ILanguage Text => Inst.GetLanguageModule((int)LanguageModuleType.Text);
public static string Get(string key)
public static void SetLanguage(this GObject child, string key, params object[] args)
{
if(Text == null) return key;
return Text.Get(key);
if (Text == null) return;
child.lang = key;
var value = Text.Get(key);
if (args != null && args.Length > 0)
{
value = string.Format(value, args);
child.langArgs = args;
}
else
{
child.langArgs = null;
}
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;
}
}
public static string Get(string key, params object[] args)
public static void SetLanguageImage(this GObject obj, string key)
{
var format = string.Format(Text.Get(key), args);
return format;
}
// public static string Get(string key)
// {
// if(Text == null) return key;
// return Text.Get(key);
// }
//
// public static string Get(string key, params object[] args)
// {
// var format = string.Format(Text.Get(key), args);
// return format;
// }
public static string GetLanImagePath(string key)
{
return Inst.GetLanguageModule((int)LanguageModuleType.Image).Get(key);

View File

@@ -39,7 +39,6 @@ namespace NBC
{
DynamicFont font = new DynamicFont();
font.name = config.Name;
var nmsl = Resources.Load<Font>(fontLocation + config.RelativePath);
font.nativeFont = Resources.Load<Font>(fontLocation + config.RelativePath);
FontManager.RegisterFont(font);
}

View File

@@ -157,8 +157,8 @@ namespace NBC
var result2 = new LanguageFontConfig()
{
Type = strs[0],
Name = strs[1],
RelativePath = strs[2],
Name = key,
RelativePath = strs[1],
};
dic[key] = result2;
}

View File

@@ -62,37 +62,41 @@ namespace NBC
if (componentLangeage.TryGetValue(id, out var key))
{
if (child is GLoader gLoader)
gLoader.icon = Lan.GetLanImagePath(key);
{
gLoader.SetLanguageImage(key);
}
else
SetChildLanguage(child, Lan.Get(key));
{
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;
}
}
// 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)
{

View File

@@ -47,7 +47,15 @@ namespace NBF
{
var tabData = tabList[i];
var tabItem = List.AddItemFromPool().asButton;
tabItem.title = Lan.Get(tabData.Name);
if (!string.IsNullOrEmpty(tabData.Key))
{
tabItem.SetLanguage(tabData.Key);
}
else
{
tabItem.SetLanguage(tabData.Name);
}
listWidth += tabItem.width;
if (i > 0)
{

View File

@@ -47,7 +47,7 @@ namespace NBF
{
var tabData = subItems[i];
var tabItem = List.AddItemFromPool().asButton;
tabItem.title = Lan.Get(tabData.Name);
tabItem.SetLanguage(tabData.Name);
width += tabItem.width;
if (i > 0)
{

View File

@@ -25,17 +25,17 @@ namespace NBF
{
if (string.IsNullOrEmpty(title))
{
title = Lan.Get("TEXT_NOTE");
title = "TEXT_NOTE";
}
if (string.IsNullOrEmpty(confirm))
{
confirm = Lan.Get("TEXT_CONFIRM");
confirm = "TEXT_CONFIRM";
}
if (string.IsNullOrEmpty(cancel))
{
cancel = Lan.Get("TEXT_CANCEL");
cancel = "TEXT_CANCEL";
}
_confirmText = confirm;
@@ -59,10 +59,10 @@ namespace NBF
protected override void OnShow()
{
TextTitle.text = _title;
BtnConfirm.title = _confirmText;
BtnCancel.title = _cancelText;
TextContent.text = _content;
TextTitle.SetLanguage(_title);
BtnConfirm.SetLanguage(_confirmText);
BtnCancel.SetLanguage(_cancelText);
TextContent.SetLanguage(_content);
MessageStyle.selectedIndex = _style;
}

View File

@@ -34,7 +34,7 @@ namespace NBF
Slider.wholeNumbers = true;
}
TextName.text = Lan.Get(Option.Name);
TextName.SetLanguage(Option.Name);
SetShow();
}

View File

@@ -31,7 +31,8 @@ namespace NBF
{
var tab = new TabListData
{
Name = group
Name = group,
Key = $"TEXT_SETTINGS_{group}"
};
tabList.Add(tab);
}
@@ -85,7 +86,7 @@ namespace NBF
var value = groupOptions[key];
if (List.AddItemFromPool(url) is GLabel label)
{
label.title = Lan.Get(key);
label.SetLanguage(key);
}
foreach (var option in value)
@@ -199,8 +200,8 @@ namespace NBF
var settingItem = List.GetChildAt(index);
if (settingItem is SettingItem item)
{
Introduce.TextName.text = Lan.Get(item.Option.Name);
Introduce.TextIntroduce.text = Lan.Get(item.Option.Name);
Introduce.TextName.SetLanguage(item.Option.Name);
Introduce.TextIntroduce.SetLanguage(item.Option.Name);
// Introduce.
}
}