Unity MyFramework 用法说明(十八):使用 LocalizationManager 统一管理多语言文本与图片
游戏接入多语言后不能只在切换语言时重新打开所有界面。已经显示的文本、动态数量提示和本地化图片都应该立即刷新。MyFramework 使用LocalizationManager保存当前语言数据并统一管理已经注册的 UI 对象。项目地址https://github.com/ZHOURUIH/MyFramework一、LocalizationManager 负责什么框架中的本地化流程可以概括为外部读取语言表 ↓ 填充当前语言字典 ↓ UI 注册中文原文或文本ID ↓ 切换语言 ↓ 所有已注册文本和图片自动刷新LocalizationManager不限制语言数据来自哪里可以使用Excel JSON SQLite 服务器配置它主要负责保存当前语言 查询翻译文本 刷新已注册的UI 处理带参数文本 切换本地化图片二、为框架提供语言数据首先设置语言数据刷新回调using System.Collections.Generic; using static FrameBaseDefine; using static FrameBaseHotFix; public static class GameLocalization { public static void init() { mLocalizationManager.setReloadLanguageCallback( reloadLanguage); mLocalizationManager.setCurrentLanguage( LANGUAGE_CHINESE); } private static void reloadLanguage( string language, Dictionarystring, string textList, Dictionaryint, string idList) { if (language LANGUAGE_ENGLISH) { textList[开始游戏] Start Game; textList[退出游戏] Exit Game; textList[获得{0}个{1}] Received {0} {1}; textList[金币] Gold; idList[1001] Start Game; idList[1002] Exit Game; } else { textList[开始游戏] 开始游戏; textList[退出游戏] 退出游戏; textList[获得{0}个{1}] 获得{0}个{1}; textList[金币] 金币; idList[1001] 开始游戏; idList[1002] 退出游戏; } } }实际项目中不需要手动填写这些内容只要在reloadLanguage()中读取对应语言的表格即可。框架支持两种查询方式以中文原文为Key 以整数ID为Key中文原文更直观整数 ID 更适合由配置表统一管理。三、切换当前语言切换为英文mLocalizationManager.setCurrentLanguage( LANGUAGE_ENGLISH);切换为简体中文mLocalizationManager.setCurrentLanguage( LANGUAGE_CHINESE);调用setCurrentLanguage()后框架会依次完成清空旧语言数据 调用外部回调加载新语言 记录当前语言 刷新所有语言切换回调 刷新已注册文本 刷新已注册图片查询当前语言string language mLocalizationManager.getCurrentLanguage();查询当前 Localestring locale mLocalizationManager.getCurrentLocale();框架默认提供的对应关系包括Chinese zh_CN ChineseTraditional zh_TW English en-US四、静态文本使用 LocalizationText有些文本只负责显示不会在代码中修改例如开始游戏 设置 退出游戏 角色信息这类节点可以直接挂Text LocalizationText在Text中填写中文原文开始游戏运行后LocalizationText会自动保存中文原文 注册语言切换回调 根据当前语言设置文本 对象销毁时注销回调切换语言时不需要业务代码重新寻找这些节点。LocalizationText还可以为不同语言配置不同字体大小避免英文或繁体文本显示不完整。五、动态文本通过代码注册需要在代码中访问和修改的文本不应该挂LocalizationText而是通过myUGUIText.setText()注册。例如主菜单public class UIMain : LayoutScript { protected myUGUIText mStartText; protected myUGUIText mExitText; public override void assignWindow() { newObject(out mStartText, StartButton/Text); newObject(out mExitText, ExitButton/Text); } public override void onGameState() { base.onGameState(); mStartText.setText(开始游戏, this); mExitText.setText(退出游戏, this); } }这里的this是当前LayoutScript用于收集本界面注册的本地化对象。界面隐藏时LayoutScript会自动注销这些对象界面显示 ↓ onGameState 注册本地化文本 ↓ 语言切换时自动刷新 ↓ 界面隐藏 ↓ 自动注销本地化对象所以动态文本通常应在onGameState()中注册而不是只在init()中注册一次。六、使用带参数文本数量、名称等动态内容可以使用占位符mRewardText.setText( 获得{0}个{1}, rewardCount.IToS(), 金币, this);英文语言表中配置textList[获得{0}个{1}] Received {0} {1}; textList[金币] Gold;最终显示结果中文获得10个金币 英文Received 10 Gold框架不仅会翻译主文本也会尝试翻译传入的字符串参数。因此参数既可以是普通数值也可以是另一个需要翻译的文本。七、使用文本 ID通过文本 ID 注册mStartText.setText(1001, this); mExitText.setText(1002, this);直接获取翻译结果string text mLocalizationManager.getLocalize(1001);找不到指定 ID 时框架会返回Localization:1001这样可以比较直观地发现缺失的语言配置。中文原文和整数 ID 可以同时使用但同一类文本最好保持统一规则避免语言表难以维护。八、动态文本的字体适配代码中动态访问的文本不要再挂LocalizationText。需要根据语言调整字号时可以挂LocalizationRuntimeText它不会负责翻译文本只负责记录不同语言的字号 监听语言切换 调整当前Text字号 协助编辑器检查动态文本同一个节点不能同时挂LocalizationText LocalizationRuntimeText框架检测到后会直接输出错误。九、本地化图片某些图片中直接包含文字例如开始按钮 活动标题 新手引导提示 排行榜标签可以准备同一套命名StartButton_Chinese StartButton_English StartButton_ChineseTraditional动态访问的图片通过代码注册mStartButton.setLocalizationImage( StartButton_Chinese, this);框架会去掉末尾的语言名称再拼接当前语言StartButton_ English ↓ StartButton_English切换语言后已经注册的图片会自动调用setSpriteName()更新。这些图片应放在同一个图集中并保持除语言后缀外的名称完全一致。十、直接获取翻译文本并不是所有翻译内容都用于 UI。普通业务代码也可以直接查询string startText mLocalizationManager.getLocalize(开始游戏); string exitText mLocalizationManager.getLocalize(1002);带参数查询string rewardText mLocalizationManager.getLocalize( 获得{0}个{1}, rewardCount.IToS(), 金币);适合用于系统提示 聊天文本 日志显示 通知内容 动态拼接描述十一、总结MyFramework 的多语言使用流程主要分为四步1. 设置 setReloadLanguageCallback 2. 调用 setCurrentLanguage 加载当前语言 3. 静态文本挂 LocalizationText 4. 动态文本使用 setText(..., this) 注册动态图片使用setLocalizationImage( StartButton_Chinese, this);LocalizationManager的核心作用是让 UI 只关心自己的中文原文或文本 ID而不用分别处理每一种语言语言数据由外部提供 LocalizationManager 统一查询 UI 注册需要显示的内容 语言切换后自动刷新这样新增语言时主要工作集中在翻译数据和图片资源中不需要逐个修改界面的业务逻辑。

相关新闻

Linux内核崩溃分析利器:kdump原理与实战配置

Linux内核崩溃分析利器:kdump原理与实战配置

1. 初识kdump:Linux内核的"黑匣子"当服务器突然崩溃时,最让运维人员头疼的莫过于找不到崩溃原因。这就好比飞机失事后找不到黑匣子——我们无法得知系统在崩溃前究竟发生了什么。而kdump正是Linux内核提供的"黑匣子"机制&#xff0c…

2026/10/20 9:48:47 阅读更多 →
Unity MyFramework 塔防实战(二十三):手牌拖拽如何创建并提交一座防御塔

Unity MyFramework 塔防实战(二十三):手牌拖拽如何创建并提交一座防御塔

上一篇分析的是场上已有防御塔的位置交换,这一篇继续看“从手牌建造新塔”。两种操作都会经过格子校验和 CmdGlobalPutTowerRogue,但新建流程还要创建预览对象、检查建造点、记录真实投入、加入场上塔列表,并设置建造冷却和建造状态。 MyFramework:GitHub - ZHOURUIH/MyFr…

2026/10/17 5:41:00 阅读更多 →
PBR3DGen:从单张照片生成PBR材质的自动化方案

PBR3DGen:从单张照片生成PBR材质的自动化方案

1. 项目背景与核心价值去年在为一个独立游戏项目制作环境资产时,我深刻体会到了传统3D建模流程的痛点——为了制作一个带PBR材质的废弃油桶模型,团队花了整整三天时间进行拍照采样、Substance Painter手工绘制和八猴渲染测试。这种低效的工作方式直接促使…

2026/10/19 1:30:23 阅读更多 →

最新新闻

基于SSM的Java演唱会订票系统:从需求到部署全解析

基于SSM的Java演唱会订票系统:从需求到部署全解析

先说结论:这套基于Java的演唱会订票系统,放在毕业设计里属于典型的“麻雀虽小五脏俱全”全栈项目。前端有页面展示和交互,后端有SSM框架整合、登录鉴权、订单事务处理,数据库有完整的关系模型设计,而且拿到就能跑&…

2026/10/20 18:28:16 阅读更多 →
Android抓包太干了?四层断点与实战破局指南

Android抓包太干了?四层断点与实战破局指南

1. 为什么“太干了”成了Android抓包圈的通用吐槽?“太干了”这三个字,最近在Android开发和测试圈子的交流里出现频率高得反常。它不是形容天气,也不是抱怨咖啡浓度,而是直指一个让无数人深夜挠头、反复重装工具、怀疑自己网络基础…

2026/10/20 18:28:16 阅读更多 →
基于ESP32的DIY智能家居安防系统:从传感器到状态机与MQTT推送

基于ESP32的DIY智能家居安防系统:从传感器到状态机与MQTT推送

去年夏天某天上午十点,我在公司连续收到三条报警推送,内容是家里门窗磁触发。赶回去一看,只是强风把阳台窗户撞了一下,虚惊一场。这类误报,几乎所有成品安防设备都解决不了——它们只会告诉你“门窗开了”,…

2026/10/20 18:28:16 阅读更多 →
从二分查找到复杂度分析:理解算法基本模型的实战指南

从二分查找到复杂度分析:理解算法基本模型的实战指南

如果你问一个刷过很多算法题的人,“基本算法模型”是什么,他大概会愣一下。但如果问他说,二分查找为什么会写错、大O复杂度是怎么算出来的、为什么递归一深就爆栈,他可能有一肚子踩坑记录。这就是《算法(第4版&#xf…

2026/10/20 18:28:16 阅读更多 →
C++数据工具箱:从容器选型到序列化与性能优化的实战指南

C++数据工具箱:从容器选型到序列化与性能优化的实战指南

干我们这一行的多半都有这种感觉:写 C 处理数据,真正的门槛不在语法,而在“选择”。一个字段到底该放 vector 还是 map?几百万行记录读进内存,怎么稳住不崩?写完一个数据文件,换台机器为什么就读…

2026/10/20 18:28:16 阅读更多 →
生成式AI重塑内容平台:AI头像、大模型与分发机制的三重变革

生成式AI重塑内容平台:AI头像、大模型与分发机制的三重变革

最近几天,科技行业的信息量突然大了起来。国内某头部短视频社区被曝正在内测新功能,海外最热门的短视频平台被传出正在开发AI头像,全球软件巨头之一则公布了接入GPT-4之后的第一份成绩单。三条消息看起来属于不同赛道,但放在一起&…

2026/10/20 18:27:10 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →