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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/229542.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

线下渠道应该如何控价

品牌渠道中的问题&#xff0c;大多跟价格有关&#xff0c;比如低价、窜货、假货&#xff0c;治理好这些价格问题&#xff0c;也就是在解决渠道中的低价问题&#xff0c;所以要先了解价格&#xff0c;再进行治理&#xff0c;这样的流程化操作&#xff0c;可以使品牌管控好渠道价…

【Python】数据分析案例:世界杯数据可视化 | 文末送书

文章目录 前期数据准备导入数据 分析&#xff1a;世界杯中各队赢得的比赛数分析&#xff1a;先打或后打的比赛获胜次数分析&#xff1a;世界杯中的抛硬币决策分析&#xff1a;2022年T20世界杯的最高得分者分析&#xff1a;世界杯比赛最佳球员奖分析&#xff1a;最适合先击球或追…

使用React+SpringBoot开发一个协同编辑的表格文档

本文由葡萄城技术团队发布。转载请注明出处&#xff1a;葡萄城官网&#xff0c;葡萄城为开发者提供专业的开发工具、解决方案和服务&#xff0c;赋能开发者。 前言 随着云计算和团队协作的兴起&#xff0c;协同编辑成为了许多企业和组织中必不可少的需求。通过协同编辑&#x…

重温 re:Invent,分享十年成长:我和 re:Invent的故事

文章目录 前言背景我和re:Invent的交际历届峰会主题2012 突破技术垄断2013 革新数据服务2014 更好用的云服务2015 打通最后一-公里2016 迈向云上数据湖时代2017 重构云计算基础2018 云能力的再进化2019 赋能企业云架构服务2020 推动行业数据库服务的演进2021 无可比拟的云架构2…

Ultipa参加国际科学会议KGSWC2023

近日&#xff0c;领先的国际科学会议 KGSWC 2023&#xff0c;在西班牙萨拉戈萨大学召开&#xff0c;Ultipa Graph参加。 KGSWC2023是第五届伊比利亚-美洲会议和第四届印度-美洲知识图谱与语义网大会的联合论坛。自2019年成立以来&#xff0c;KGSWC一直是一个重要的学术活动&am…

FL Studio水果软件21.1新版!新增Hyper Chorus插件及自动更新功能

我们很高兴地宣布在去年12月发布重大版本更新后&#xff0c;FL Studio在2023年8月正式更新到21.1版。本次更新虽然只是维护性质&#xff0c;但我们还是为大家带来了一些全新的功能&#xff0c;包括通过钢琴卷中的音阶捕捉和自定义音符工具&#xff0c;引入更快、更有创意的音符…

HassOS使用nmcli设置静态IPv4地址及网关、DNS

目录 显示hass在使用的默认连接显示此连接的所有配置编辑hass默认连接添加静态IP地址添加DNS和网关删除DNS查看IPv4属性保存配置并退出nmcli重载配置 首先控制台登陆Home Assistant OS Welcome to Home Assistant homeassistant login:使用root用户登录&#xff08;无需密码&a…

JavaScript基础—for语句、循环嵌套、、数组、操作数组、综合案例—根据数据生成柱形图、冒泡排序

版本说明 当前版本号[20231129]。 版本修改说明20231126初版20231129完善部分内容 目录 文章目录 版本说明目录JavaScript 基础第三天笔记for 语句for语句的基本使用循环嵌套倒三角九九乘法表 数组数组是什么&#xff1f;数组的基本使用定义数组和数组单元访问数组和数组索引…

使用vue-admin-template时,需要注意的问题,包括一定要去除mock.js注释

在使用vue-admin-template等前端框架时&#xff0c;如果你没有打算用他们的mock数据&#xff0c;在生产环境下一定要注释mock引用的代码&#xff0c;虽然它没有被调用&#xff0c;但是如果你不注释&#xff0c;就会被打包进去。 找到main.js&#xff0c;看如下代码&#xff1a…

Python内置类属性`__name__`属性的使用教程

更多Python学习内容&#xff1a;ipengtao.com Python中的__name__是一种内置的特殊属性&#xff0c;通常用于判断模块是作为主程序运行还是作为模块被导入。本文将深入讲解__name__属性的用法&#xff0c;通过丰富的示例代码展示其在不同情景下的应用。 模块作为主程序运行 当一…

vscode 里怎么自动提示 webpack 配置项?

webpack 的配置项非常多&#xff0c;容易忘记&#xff0c;能自动提示很有用&#xff0c;就是在配置文件里面添加下面代码 // 下面这行用于 vscode 中智能化自动提示 webpack 配置项 /** type {import(webpack).Configuration} */

AI旅游:旅游行业的人工智能成熟艺术适应从实践到表现报告

今天分享的是AI系列深度研究报告&#xff1a;《AI旅游&#xff1a;旅游行业的人工智能成熟艺术适应从实践到表现报告》。 &#xff08;报告出品方&#xff1a;accenture&#xff09; 报告共计&#xff1a;25页 旅行还没有充分利用AI所能做的一 而旅游业比两年前强多了。公司…