unity超简单多语言管理类

embedded/2024/10/15 22:29:59/

自用记录贴,针对小体量工程写的一个最简单的多语言管理脚本。

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.Networking;/// <summary>
/// 多语言管理类
/// 语言表使用csv存储,每行为一个单词,每行用逗号分割多国语言
/// csv内容: 第一行  测试1,test1
///          第二行  测试2,test2
/// </summary>
public class LanguageManager
{public static LanguageType languageType;/// <summary>/// 解析语言文件结束后的回调,使用协程读取,会导致读取比awake慢/// </summary>public static event UnityAction analysisDoneCall;/// <summary>/// 储存多语言内容的字典类/// </summary>private static Dictionary<int, List<string>> languageDic = new Dictionary<int, List<string>>();/// <summary>/// 在工程初始化处调用此方法/// 使用协程读取语言文件,webgl和安卓端只能使用协程读取文件/// </summary>/// <param name="monoIE"></param>public static void ReadLanguageFileByIE(MonoBehaviour monoIE){monoIE.StartCoroutine(IEReadFile(GetLanguageFilePath(), OnReadConfigCall));}/// <summary>/// 在需要使用文字的位置调用此方法/// 显示层调用,获取对应csv中的编号,从1开始的内容/// </summary>/// <param name="index"></param>/// <returns></returns>public static string GetLanguageContent(int index){index--;if (languageDic.ContainsKey(index)){int typeIndex = (int)languageType;if (typeIndex >= languageDic[index].Count){Debug.LogErrorFormat("索引={0},没有{1}类型对应的内容", index, languageType.ToString());return "";}return languageDic[index][typeIndex];}else{Debug.LogError("没有对应索引的多语言内容 index=" + index);return "";}}private static void AddLanguageDic(int key, string[] text){if (languageDic.ContainsKey(key)){languageDic[key].AddRange(text);}else{List<string> list = new List<string>(text);languageDic.Add(key, list);}}/// <summary>/// 保存语言文件的路径/// </summary>/// <returns></returns>public static string GetLanguageFilePath(){return Application.streamingAssetsPath + "/Language.csv";}/// <summary>/// 解析文件内容/// </summary>/// <param name="readText"></param>public static void OnReadConfigCall(string readText){languageDic.Clear();string[] content = readText.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);for (int i = 0; i < content.Length; i++){AddLanguageDic(i, content[i].Split(','));}analysisDoneCall?.Invoke();analysisDoneCall = null;}public static IEnumerator IEReadFile(string path, UnityAction<string> call){using (UnityWebRequest uwr = UnityWebRequest.Get(path)){yield return uwr.SendWebRequest();if (uwr.isDone && uwr.error == null){if (call != null){call(uwr.downloadHandler.text);}Debug.LogFormat("读取文件路径={0},content={1}", path, uwr.downloadHandler.text);}}}}
public enum LanguageType
{Chinese=0,English=1,
}

http://www.ppmy.cn/embedded/102726.html

相关文章

【netty系列-08】深入Netty组件底层原理和基本实现

Netty系列整体栏目 内容链接地址【一】深入理解网络通信基本原理和tcp/ip协议https://zhenghuisheng.blog.csdn.net/article/details/136359640【二】深入理解Socket本质和BIOhttps://zhenghuisheng.blog.csdn.net/article/details/136549478【三】深入理解NIO的基本原理和底层…

算法练习题02:ISBN码

问题描述&#xff1a; 每本正式出版的图书都有一个对应的 ISBN 码。ISBN 包含九位数字、一位校验码和三个分隔符&#xff0c;其格式规定为 x-xxx-xxxxx-x&#xff0c;其中分隔符为键盘上的减号 -&#xff0c;最后一位为校验码。 例如&#xff0c;0 代表英语&#xff0c;紧跟着…

MSSQL 工具注入(第一关)

简介 SQL注入是一种安全漏洞&#xff0c;通过它可以执行意外的SQL命令或访问数据库中的信息。MSSQL注入通常发生在应用程序将用户输入作为SQL查询的一部分执行时&#xff0c;而没有对输入进行适当的验证或清理。 以下是MSSQL手工注入的流程&#xff1a; 一、打开靶场选择第一关…

灵神算法题单——定长滑动窗口(进阶)

2134. 最少交换次数来组合所有的 1 II 断环成链滑动窗口 思路先算出数组中1有多少&#xff0c;然后看这么长的窗口里0最少是多少&#xff0c;此时即为最少交换次数。 首先遍历算出1的数量k&#xff0c;然后用Insert拼接数组&#xff0c;从而实现循环。 然后双指针遍历数组&…

【计算机网络】计算机网络的概念

什么是计算机网络&#xff1f; 计算机网络&#xff08;Computer networking&#xff09;是一个将众多分散的、自治的计算机系统&#xff0c;通过通信设备与线路连接起来&#xff0c;由功能完善的软件实现资源共享和信息传递的系统。 计算机网络、互连网、互联网的区别 计算机…

Python算法工程师面试整理-线性代数

1. 向量和矩阵 ● 向量:表示一个n维空间中的点,通常以列向量或行向量表示。 ○ 向量运算:加法、标量乘法、点积(内积)、叉积(外积)。 ● 矩阵:由行和列组成的二维数组。 ○ 矩

电商人必看:1个工具,5倍效率,批量处理图片就是这么简单

作为电商运营者或经常处理图片的你&#xff0c;是否厌倦了繁琐的图片编辑工作&#xff1f;今天&#xff0c;我要分享一个实用的解决方案——图片批量处理工具。 神器介绍&#x1f447; 千鹿设计助手&#xff0c;是一款轻量级、功能非常丰富的设计插件工具合集软件。 拥有多款…

CSS动画魔法:用@keyframes点亮你的网页

标题&#xff1a;“CSS动画魔法&#xff1a;用keyframes点亮你的网页” 在网页设计中&#xff0c;动画是一种吸引用户注意力、增强用户体验的有力工具。CSS3的keyframes规则为开发者提供了一种简单而强大的方法来创建动画效果。本文将深入探讨如何使用keyframes来定义动画&…