项目基于UE4.27.2版本Unlua开发,展示下基于国际化的一些操作和遇到的一些问题
一、基础操作
基本概念和操作大部分都来自官方文档,写的确实蛮详细,开发前建议先看看官方说明
本地化 | 虚幻引擎文档 (unrealengine.com)
文字提取、测试、应用到游戏具体可以参考这个博客,也比较详细,基本可以熟悉大部分流程
UE4 自带多语言切换---国际化和本地化语言的转化_Yuulily的博客-CSDN博客_ue4 csv 国际化
需要注意的是,测试语言切换一定要 先ComplieText,然后用独立进程窗口运行游戏
编辑切换为居中
添加图片注释,不超过 140 字(可选)
二、Lua或项目配置(比如csv文件,或者其他lua配置等)中的中文
UMG、C++中的中文都比较好处理直接用UE自带的工具提取即可
对于lua中的中文需要我们自己提取出来,导出成UE可以识别的文件,就可以利用Localization Dashboard相关的功能
保存成带有UE的FText的资产可以,不过我们可以用更基础的UStringTable来处理
UStringTable包含一个FStringTable可以以Key、Value的形式保存字符串
编辑切换为居中
添加图片注释,不超过 140 字(可选)
这样就可以导出让Localization Dashboard识别到的资源
FString packageName = TEXT("/Game/Editor/ExportLuaCN");
UPackage package = CreatePackage(*packageName);
package->FullyLoad(0);
UStringTable CNStringTable = NewObject<UStringTable>(package,TEXT("ExportLuaCN"),RF_Public|RF_Standalone);
FAssetRegistryModule::AssetCreated(package);
//添加相应的key、value
CNStringTable->GetMutableStringTable()->SetSourceString("your key","your value");
UEditorAssetLibrary::SaveLoadedAsset(CNStringTable,true);
UStringTable也可在运行时使用,不过要注意先把资产加载进内存,当然也可以直接给UMG使用
编辑切换为居中
添加图片注释,不超过 140 字(可选)
切换语言后显示内容就是StringTable Key对应的翻译后的内容
三、将UE翻译内容导出为Lua或项目配置
可以运行时使用FText:: FindText动态获取
可能需要导出一份翻译表给服务器用。
开始我的想法也是使用FText:: FindText获取到翻译内容导出到服务器,但是这个方法基于当前Culture,每次切换消耗比较大,而且在编辑器下是不会生效的。
这里看源码了解到,可以参考FTranslationDataManager::Initialize()内的实现,拿到具体的UTranslationUnit来导出我们想要的翻译表
如果想更彻底些,在"编译文本"后导出我们的内容,可以在引擎翻译工具处加上我们自己想要的回调来触发
引擎翻译工具执行接口都在这里:
编辑切换为居中
添加图片注释,不超过 140 字(可选)
四、手机包无法加载当前使用文化的资产
首先确定L10N目录下,放好了同名目录的资源,独立进程游戏测试没问题
确保文化资产已经打到包内:
可以用这个工具看到包内的内容 UnrealPakViewer可视化Pak分析工具 - 知乎 (zhihu.com)
编辑切换为居中
添加图片注释,不超过 140 字(可选)
这个地方去掉UE_EDITOR宏,重编引擎后生效,我用的是4.27.2版本,估计UE5已经改了实现方式,不确定还有没有打包后无法加载的问题,看了UE5的代码确实改动挺多的。