demo下载:https://github.com/JSumC/LanguageExcel
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using OfficeOpenXml;
using UnityEngine;
using UnityEngine.UI;
namespace LanguageExcel
{public class LETool : MonoBehaviour{public static language Language=language.CN; [Header("表格文件夹")]public static string URL = Application.streamingAssetsPath;public static string ExcelName = "LE";private static bool m_loaded;public static event Action OnLangaugeChanged ;public class plot{public string IN,CN,EN,JP,FR,DE,ID,TH,TW;}public enum language{IN, CN,EN,JP,FR,DE,ID,TH,TW}public static List<plot> S_Plots= new List<plot>();public virtual void OnEnable(){initialization();}public void initialization(){if (!m_loaded){LoadExcel();m_loaded = true;} }void LoadExcel(){foreach (var VARIABLE in ReadFile()){FileInfo fileInfo = new FileInfo(VARIABLE);if (VARIABLE.Contains(ExcelName)){using (ExcelPackage excelPackage = new ExcelPackage(fileInfo)){ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets[1];for (int Left = 2; Left < worksheet.Dimension.End.Row + 1; Left++) //根据行数遍历{if (worksheet.Cells[Left, 1].Value.ToString().Length>0){plot Plot = new plot();Plot.IN= worksheet.Cells[Left, 1]?.Value?.ToString();Plot.CN= worksheet.Cells[Left, 2]?.Value?.ToString();Plot.EN= worksheet.Cells[Left, 3]?.Value?.ToString();Plot.JP= worksheet.Cells[Left, 4]?.Value?.ToString();Plot.FR= worksheet.Cells[Left, 5]?.Value?.ToString();Plot.DE = worksheet.Cells[Left, 6]?.Value?.ToString();Plot.ID = worksheet.Cells[Left, 7]?.Value?.ToString();Plot.TH = worksheet.Cells[Left, 8]?.Value?.ToString();Plot.TW = worksheet.Cells[Left, 9]?.Value?.ToString();S_Plots.Add(Plot);}}}}}}static List<string> ReadFile(){List<string> files = GetFiles(URL, "*.xlsx");List<string> GetFiles(string directory, string pattern){List<string> files = new List<string>();foreach (var item in Directory.GetFiles(directory, pattern)){files.Add(item);}foreach (var item in Directory.GetDirectories(directory)){files.AddRange(GetFiles(item, pattern));}return files;}return files;}public static string Get(string t){plot selectedPlot = S_Plots.FirstOrDefault(p => p.IN == t);string languageField = Language.ToString(); string plotString = (string)selectedPlot.GetType().GetField(languageField).GetValue(selectedPlot);return plotString;}/// <summary>/// 切换到指定语言/// </summary>/// <param name="t"></param>public static void SetLanguage(language t){if (t!=Language){Language = t;OnLangaugeChanged?.Invoke();}}
/// <summary>
/// 切换到下个语言
/// </summary>public static void SetLanguage(){int currentLanguageIndex = (int)Language;int totalLanguages = Enum.GetValues(typeof(language)).Length;int nextLanguageIndex = (currentLanguageIndex + 1) % totalLanguages;Language = (language)nextLanguageIndex;OnLangaugeChanged?.Invoke();}public static void SetText(Text t, string str)
{t.text = Get(str);
}}
}
效果图:
测试用代码:
using System;
using System.Collections;
using System.Collections.Generic;
using LanguageExcel;
using UnityEngine;
using UnityEngine.UI;public class Demo : MonoBehaviour
{public Button ChangeLanguageBTN;public Button ChangeStringBTN;public Text ShowText;public static string Targetstr="你好";//目标字符串private void OnEnable(){LETool.SetText(ShowText, Targetstr);LETool.OnLangaugeChanged += ()=>LETool.SetText(ShowText, Targetstr);ChangeLanguageBTN.onClick.AddListener(() =>{LETool.SetLanguage();});ChangeStringBTN.onClick.AddListener(() =>{Targetstr = Targetstr == "你好" ? "再见" : "你好";LETool.SetText(ShowText, Targetstr);});}}