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/7/27 2:58:33 阅读更多 →
Unity MyFramework 塔防实战(二十三):手牌拖拽如何创建并提交一座防御塔

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

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

2026/7/27 2:58:33 阅读更多 →
PBR3DGen:从单张照片生成PBR材质的自动化方案

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

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

2026/7/27 2:58:33 阅读更多 →

最新新闻

Elasticsearch 9.x中文命名实体识别(NER)实战指南

Elasticsearch 9.x中文命名实体识别(NER)实战指南

1. 项目背景与核心价值Elasticsearch 9.x 中文命名实体识别(NER)推理API与管道配置方案,是当前企业级搜索应用中解决中文文本智能处理的关键技术组合。我在实际项目中发现,传统的中文分词方案往往无法准确识别文本中的专有名词&am…

2026/7/27 3:13:37 阅读更多 →
科学语言模型训练实战:低成本构建领域专用AI

科学语言模型训练实战:低成本构建领域专用AI

1. 项目概述作为一名长期从事AI研究的独立开发者,我深知训练专业领域语言模型的痛点。科学语言模型(Scientific Language Model)作为自然语言处理中的细分方向,在学术文献分析、科研助手、知识问答等场景具有独特价值。不同于通用…

2026/7/27 3:13:37 阅读更多 →
16GB内存运行110B大模型:GLM-4.5-Air量化部署实战指南

16GB内存运行110B大模型:GLM-4.5-Air量化部署实战指南

在16GB内存消费级机器上运行GLM-4.5-Air(110B)的完整实战指南最近大语言模型的应用越来越广泛,但像GLM-4.5-Air这样的110B参数大模型通常需要数百GB显存,让很多开发者望而却步。本文将分享一套在普通16GB内存消费级机器上运行110B参数大模型的完整方案&a…

2026/7/27 3:13:37 阅读更多 →
Linux线程编程:从基础概念到高级实践

Linux线程编程:从基础概念到高级实践

1. 线程基础概念解析线程作为现代操作系统中最核心的进程管理单元,在UNIX/Linux系统中扮演着举足轻重的角色。与传统的进程相比,线程更像是"轻量级进程"——它们共享相同的地址空间和系统资源,但拥有独立的执行流和栈空间。这种特性…

2026/7/27 3:13:37 阅读更多 →
ChatGPT桌面版语音控制AI智能体:语音交互与桌面集成实践

ChatGPT桌面版语音控制AI智能体:语音交互与桌面集成实践

这次我们来看一个结合了语音控制、桌面集成和AI智能体能力的ChatGPT桌面版项目。这个工具的核心价值在于将ChatGPT的对话能力与本地桌面环境深度整合,通过语音指令实现智能任务执行,让AI助手真正成为工作流的一部分。从功能定位来看,这个桌面…

2026/7/27 3:13:37 阅读更多 →
提示词方案评估进入深水区:从人工打分到自动化评估平台搭建(含开源工具链实测)

提示词方案评估进入深水区:从人工打分到自动化评估平台搭建(含开源工具链实测)

更多请点击: https://kaifayun.com 第一章:提示词方案评估进入深水区:从人工打分到自动化评估平台搭建(含开源工具链实测) 当提示词工程从实验性探索迈向规模化落地,人工打分已暴露出一致性差、成本高、难…

2026/7/27 3:12:37 阅读更多 →

日新闻

【JAVA毕设源码分享】基于SpringBoot的社区智能垃圾管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于SpringBoot的社区智能垃圾管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/27 0:00:54 阅读更多 →
SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

1. 项目概述:从寄存器手册到实战指南 如果你手头有一份类似德州仪器(TI)TMS320x240xA系列DSP的SPI模块技术手册,看着里面密密麻麻的寄存器位定义、时序图和公式,是不是感觉头大?这份资料虽然权威&#xff0…

2026/7/27 0:00:54 阅读更多 →
【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/27 0:00:54 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/26 0:00:31 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/26 0:00:31 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/26 0:00:31 阅读更多 →

月新闻