unity的多语言配置工具

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);
      });
   }
   
}

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值