多语言设置界面逻辑
This commit is contained in:
@@ -53,12 +53,11 @@ namespace NBF.Setting
|
||||
public ISettings Root { get; private set; }
|
||||
|
||||
|
||||
|
||||
public void Initialize(ISettings root)
|
||||
{
|
||||
Root = root;
|
||||
OnInitialize();
|
||||
Load();
|
||||
OnInitialize();
|
||||
Apply();
|
||||
}
|
||||
|
||||
|
||||
@@ -3,21 +3,10 @@ using UnityEngine;
|
||||
|
||||
namespace NBF.Setting
|
||||
{
|
||||
public enum SettingLanguage
|
||||
{
|
||||
English = 10,
|
||||
French = 14,
|
||||
Japanese = 22,
|
||||
Korean = 23,
|
||||
Russian = 30,
|
||||
ChineseSimplified = 40,
|
||||
ChineseTraditional = 41,
|
||||
}
|
||||
|
||||
[Sort(100)]
|
||||
public class LanguageSetting : MultiOption<SettingLanguage>
|
||||
public class LanguageSetting : MultiOption<int>
|
||||
{
|
||||
private SettingLanguage _defaultLanguage;
|
||||
private int _defaultLanguage;
|
||||
public override string Name => "Language";
|
||||
public override string Group => SettingsDef.Group.Language;
|
||||
|
||||
@@ -27,11 +16,38 @@ namespace NBF.Setting
|
||||
|
||||
protected override void OnInitialize()
|
||||
{
|
||||
_defaultLanguage = (SettingLanguage)Application.systemLanguage;
|
||||
var list = LanguageConst.LanguageList;
|
||||
var systemLanguage = Application.systemLanguage;
|
||||
var systemIndex = list.FindIndex(t => t.Language == systemLanguage);
|
||||
if (systemIndex < 0)
|
||||
{
|
||||
systemIndex = 0;
|
||||
}
|
||||
|
||||
_defaultLanguage = (int)Lan.Inst.GetCurrentLanguage();
|
||||
for (int i = 0; i < list.Count; i++)
|
||||
{
|
||||
var lang = list[i];
|
||||
AddOption(lang.Name, i);
|
||||
}
|
||||
|
||||
_defaultLanguage = systemIndex;
|
||||
var current = GetValue();
|
||||
if (current < 0 || current >= LanguageConst.LanguageList.Count)
|
||||
{
|
||||
SetValue(_defaultLanguage);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnApply()
|
||||
{
|
||||
var lang = LanguageConst.LanguageList[GetValue()];
|
||||
Lan.Inst.UseLanguage(lang.Language);
|
||||
}
|
||||
|
||||
// public override string GetDisplayString()
|
||||
// {
|
||||
// return ((SystemLanguage)GetValue()).ToString();
|
||||
// }
|
||||
}
|
||||
}
|
||||
@@ -16,83 +16,42 @@ namespace NBC
|
||||
|
||||
//简体中文、繁体中文、英语、日语、韩语、泰语、越南语、法语、德语、葡萄牙与、西班牙语、俄语、波兰语、荷兰语、
|
||||
|
||||
|
||||
//土耳其语、意大利语、印度尼西亚语
|
||||
|
||||
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.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.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.Indonesian, Name = "Bahasa Indonesia", Code = "id" },
|
||||
// new LanguageInfo() { Language = SystemLanguage.Italian, Name = "Italiano", Code = "it" }
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// 自定义语言和名字映射关系
|
||||
/// </summary>
|
||||
public static readonly Dictionary<SystemLanguage, LanguageInfo> languageMap =
|
||||
new Dictionary<SystemLanguage, LanguageInfo>()
|
||||
new Dictionary<SystemLanguage, LanguageInfo>();
|
||||
|
||||
static LanguageConst()
|
||||
{
|
||||
languageMap.Clear();
|
||||
foreach (var languageInfo in LanguageList)
|
||||
{
|
||||
{
|
||||
SystemLanguage.English,
|
||||
new LanguageInfo() { Language = SystemLanguage.English, Name = "English", Code = "en" }
|
||||
},
|
||||
{
|
||||
SystemLanguage.ChineseSimplified,
|
||||
new LanguageInfo() { Language = SystemLanguage.ChineseSimplified, Name = "简体中文", Code = "zh-CN" }
|
||||
},
|
||||
// {
|
||||
// SystemLanguage.ChineseTraditional,
|
||||
// new LanguageInfo() { Language = SystemLanguage.ChineseTraditional, Name = "繁體中文", Code = "zh-TW" }
|
||||
// },
|
||||
// {
|
||||
// SystemLanguage.Japanese,
|
||||
// new LanguageInfo() { Language = SystemLanguage.Japanese, Name = "日本語", Code = "ja" }
|
||||
// },
|
||||
// {
|
||||
// SystemLanguage.Korean,
|
||||
// new LanguageInfo() { Language = SystemLanguage.Korean, Name = "한국어", Code = "ko" }
|
||||
// },
|
||||
// {
|
||||
// SystemLanguage.Thai,
|
||||
// new LanguageInfo() { Language = SystemLanguage.Thai, Name = "ไทย", Code = "th" }
|
||||
// },
|
||||
// {
|
||||
// SystemLanguage.Vietnamese,
|
||||
// new LanguageInfo() { Language = SystemLanguage.Vietnamese, Name = "Tiếng Việt", Code = "vi" }
|
||||
// },
|
||||
// {
|
||||
// SystemLanguage.German,
|
||||
// new LanguageInfo() { Language = SystemLanguage.German, Name = "Deutsch", Code = "de" }
|
||||
// },
|
||||
// {
|
||||
// SystemLanguage.French,
|
||||
// new LanguageInfo() { Language = SystemLanguage.French, Name = "Français", Code = "fr" }
|
||||
// },
|
||||
// {
|
||||
// SystemLanguage.Russian,
|
||||
// new LanguageInfo() { Language = SystemLanguage.Russian, Name = "Русский", Code = "ru" }
|
||||
// },
|
||||
// {
|
||||
// SystemLanguage.Spanish,
|
||||
// new LanguageInfo() { Language = SystemLanguage.Spanish, Name = "Español", Code = "es" }
|
||||
// },
|
||||
// {
|
||||
// SystemLanguage.Portuguese,
|
||||
// new LanguageInfo() { Language = SystemLanguage.Portuguese, Name = "Português", Code = "pt" }
|
||||
// },
|
||||
// {
|
||||
// SystemLanguage.Polish,
|
||||
// new LanguageInfo() { Language = SystemLanguage.Polish, Name = "Polski", Code = "pl" }
|
||||
// },
|
||||
// {
|
||||
// SystemLanguage.Dutch,
|
||||
// new LanguageInfo() { Language = SystemLanguage.Dutch, Name = "Nederlands", Code = "nl" }
|
||||
// },
|
||||
// {
|
||||
// SystemLanguage.Turkish,
|
||||
// new LanguageInfo() { Language = SystemLanguage.Turkish, Name = "Türkçe", Code = "tr" }
|
||||
// },
|
||||
// {
|
||||
// SystemLanguage.Indonesian,
|
||||
// new LanguageInfo() { Language = SystemLanguage.Indonesian, Name = "Bahasa Indonesia", Code = "id" }
|
||||
// },
|
||||
// {
|
||||
// SystemLanguage.Italian,
|
||||
// new LanguageInfo() { Language = SystemLanguage.Italian, Name = "Italiano", Code = "it" }
|
||||
// },
|
||||
};
|
||||
languageMap.Add(languageInfo.Language, languageInfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -61,8 +61,8 @@ namespace NBF
|
||||
|
||||
private void Init()
|
||||
{
|
||||
InitService();
|
||||
InitLanguage();
|
||||
InitService();
|
||||
InitUI();
|
||||
}
|
||||
|
||||
@@ -70,6 +70,7 @@ namespace NBF
|
||||
|
||||
private void InitLanguage()
|
||||
{
|
||||
// var map = LanguageConst.languageMap;
|
||||
Lan.Inst.AddLanguageModule((int)LanguageModuleType.Text, new LanguageText());
|
||||
Lan.Inst.AddLanguageModule((int)LanguageModuleType.Image, new LanguageImage());
|
||||
Lan.Inst.AddLanguageModule((int)LanguageModuleType.Font, new LanguageFont());
|
||||
@@ -80,7 +81,7 @@ namespace NBF
|
||||
}
|
||||
|
||||
UI.Inst.SetUILanguage<UILangeageConfig>();
|
||||
Lan.Inst.AutoUseLanguage();
|
||||
// Lan.Inst.AutoUseLanguage();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -8,6 +8,7 @@ namespace NBF
|
||||
{
|
||||
public static void BindAll()
|
||||
{
|
||||
UIObjectFactory.SetPackageItemExtension(SelectPages.URL, typeof(SelectPages));
|
||||
UIObjectFactory.SetPackageItemExtension(BottomMenu.URL, typeof(BottomMenu));
|
||||
UIObjectFactory.SetPackageItemExtension(ClassifyList.URL, typeof(ClassifyList));
|
||||
UIObjectFactory.SetPackageItemExtension(CommonMenu.URL, typeof(CommonMenu));
|
||||
|
||||
25
Assets/Scripts/UI/Common/SelectPages.Designer.cs
generated
Normal file
25
Assets/Scripts/UI/Common/SelectPages.Designer.cs
generated
Normal file
@@ -0,0 +1,25 @@
|
||||
/**本脚本为自动生成,每次生成会覆盖!请勿手动修改,生成插件文档及项目地址:https://git.whoot.com/whoot-games/whoot.fguieditorplugin**/
|
||||
|
||||
|
||||
using FairyGUI;
|
||||
using FairyGUI.Utils;
|
||||
using NBC;
|
||||
|
||||
namespace NBF
|
||||
{
|
||||
public partial class SelectPages
|
||||
{
|
||||
public const string URL = "ui://6hgkvlau5dtx1a";
|
||||
|
||||
public GList List;
|
||||
|
||||
public override void ConstructFromXML(XML xml)
|
||||
{
|
||||
base.ConstructFromXML(xml);
|
||||
|
||||
List = (GList)GetChild("List");
|
||||
OnInited();
|
||||
UILanguage.TrySetComponentLanguage(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
2
Assets/Scripts/UI/Common/SelectPages.Designer.cs.meta
Normal file
2
Assets/Scripts/UI/Common/SelectPages.Designer.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8e05d47a4fe9d174db57d8e523b1d53b
|
||||
36
Assets/Scripts/UI/Common/SelectPages.cs
Normal file
36
Assets/Scripts/UI/Common/SelectPages.cs
Normal file
@@ -0,0 +1,36 @@
|
||||
// 本脚本只在不存在时会生成一次。组件逻辑写在当前脚本内。已存在不会再次生成覆盖
|
||||
|
||||
using UnityEngine;
|
||||
using FairyGUI;
|
||||
using NBC;
|
||||
|
||||
namespace NBF
|
||||
{
|
||||
public partial class SelectPages : GComponent
|
||||
{
|
||||
public int TotalPages { get; private set; }
|
||||
|
||||
public int CurrentPage { get; private set; }
|
||||
|
||||
private void OnInited()
|
||||
{
|
||||
}
|
||||
|
||||
public void SetTotal(int totalPage)
|
||||
{
|
||||
TotalPages = totalPage;
|
||||
List.RemoveChildrenToPool();
|
||||
for (var i = 0; i < totalPage; i++)
|
||||
{
|
||||
List.AddItemFromPool();
|
||||
}
|
||||
}
|
||||
|
||||
public void SetCurrent(int currentPage)
|
||||
{
|
||||
if (currentPage < 0 || currentPage >= TotalPages) return;
|
||||
CurrentPage = currentPage;
|
||||
List.selectedIndex = CurrentPage;
|
||||
}
|
||||
}
|
||||
}
|
||||
2
Assets/Scripts/UI/Common/SelectPages.cs.meta
Normal file
2
Assets/Scripts/UI/Common/SelectPages.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 405973384bfed8e409a629849e3cef2e
|
||||
@@ -19,6 +19,7 @@ namespace NBF
|
||||
public BtnInputControl BtnPrev;
|
||||
public BtnInputControl BtnNext;
|
||||
public GTextField TextSliderValue;
|
||||
public SelectPages Pages;
|
||||
|
||||
public override void ConstructFromXML(XML xml)
|
||||
{
|
||||
@@ -32,6 +33,7 @@ namespace NBF
|
||||
BtnPrev = (BtnInputControl)GetChild("BtnPrev");
|
||||
BtnNext = (BtnInputControl)GetChild("BtnNext");
|
||||
TextSliderValue = (GTextField)GetChild("TextSliderValue");
|
||||
Pages = (SelectPages)GetChild("Pages");
|
||||
OnInited();
|
||||
UILanguage.TrySetComponentLanguage(this);
|
||||
}
|
||||
|
||||
@@ -135,6 +135,7 @@ namespace NBF
|
||||
|
||||
private void UpdateValueText()
|
||||
{
|
||||
Pages.visible = false;
|
||||
if (Option is RangeOption range)
|
||||
{
|
||||
Slider.value = range.GetValue();
|
||||
@@ -143,6 +144,14 @@ namespace NBF
|
||||
else if (Option is IMultiOption multiOption)
|
||||
{
|
||||
TextInfo.text = multiOption.GetDisplayString();
|
||||
Pages.visible = true;
|
||||
var count = multiOption.GetOptionNames().Count;
|
||||
if (Pages.TotalPages != count)
|
||||
{
|
||||
Pages.SetTotal(count);
|
||||
}
|
||||
|
||||
Pages.SetCurrent(multiOption.GetValue());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,8 @@ namespace NBF
|
||||
|
||||
private readonly List<TabListData> tabList = new List<TabListData>();
|
||||
private string _currentTab = "";
|
||||
private List<int> _canSelectIndex = new List<int>();
|
||||
private int _nowSelectIndex = -1;
|
||||
|
||||
protected override void OnInit()
|
||||
{
|
||||
@@ -60,7 +62,7 @@ namespace NBF
|
||||
private void ResetSettingList()
|
||||
{
|
||||
// TextTitle.text = Lan.Get(_currentGroup);
|
||||
|
||||
_nowSelectIndex = -1;
|
||||
List.RemoveChildrenToPool();
|
||||
if (string.IsNullOrEmpty(_currentTab)) return;
|
||||
var options = Settings.Instance.GetOptionsByTab(_currentTab);
|
||||
@@ -76,6 +78,7 @@ namespace NBF
|
||||
list.Add(option);
|
||||
}
|
||||
|
||||
_canSelectIndex.Clear();
|
||||
var url = UIPackage.GetItemURL(UIPackName, "SettingSubTitleItem");
|
||||
foreach (var key in groupOptions.Keys)
|
||||
{
|
||||
@@ -90,6 +93,8 @@ namespace NBF
|
||||
if (List.AddItemFromPool() is SettingItem item)
|
||||
{
|
||||
item.SetData(option);
|
||||
var index = List.GetChildIndex(item);
|
||||
_canSelectIndex.Add(index);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -138,18 +143,11 @@ namespace NBF
|
||||
}
|
||||
else if (action == InputDef.UI.Up)
|
||||
{
|
||||
SetListSelected(List.selectedIndex - 1);
|
||||
ChangeListSelected();
|
||||
}
|
||||
else if (action == InputDef.UI.Down)
|
||||
{
|
||||
if (List.selectedIndex < 0)
|
||||
{
|
||||
SetListSelected(0);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetListSelected(List.selectedIndex + 1);
|
||||
}
|
||||
ChangeListSelected(false);
|
||||
}
|
||||
else if (action == InputDef.UI.Back)
|
||||
{
|
||||
@@ -161,6 +159,24 @@ namespace NBF
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void ChangeListSelected(bool up = true)
|
||||
{
|
||||
if (!up)
|
||||
{
|
||||
_nowSelectIndex++;
|
||||
}
|
||||
else
|
||||
{
|
||||
_nowSelectIndex--;
|
||||
}
|
||||
|
||||
if (_nowSelectIndex < 0) _nowSelectIndex = 0;
|
||||
else if (_nowSelectIndex >= _canSelectIndex.Count) _nowSelectIndex = _canSelectIndex.Count - 1;
|
||||
var targetIndex = _canSelectIndex[_nowSelectIndex];
|
||||
SetListSelected(targetIndex);
|
||||
}
|
||||
|
||||
private void SetListSelected(int selectedIndex)
|
||||
{
|
||||
if (selectedIndex >= 0 && selectedIndex < List.numItems)
|
||||
|
||||
Reference in New Issue
Block a user