UE4中的本地化文本Localization Dashboard(多语言版本匹配)
前言
UE提供了一套非常赞的本地化解决方案,为游戏开发中的多语言版本匹配提供了便利。我们只需要简单的操作和配置即可完成翻译工作,在UE的最新版本中(4.19)依旧还是试验功能,您可以在菜单的Edit–Edit Preferences–Experimental–Tools–Localization Dashboard(勾选)找到此功能。开启后可以在Window菜单中打开本地化面板。
本篇文章将展示如何将源文件中的文本进行本地化操作,和如何将资产中的文本进行本地化(UMG),我们将简单的为大家进行展示操作。
注意:如果希望在CPP中输出中文,官方要求文档格式必须是UTF格式
源文件中本地化
在源文件中(CPP文档中),我们的本地化操作需要借助FText(FText本身就是为了解决显示信息的本地化而构建)进行操作,FText的创建方式有两种
01.声明文本空间宏方式构建
//引号内容可以随意 注意:放置在源文件顶端
#define LOCTEXT_NAMESPACE "UECppTest"
//放到同文件CPP的底端 注意:放置在源文件顶端
#undef LOCTEXT_NAMESPACE
对于文本空间声明完毕后即可使用宏LOCTEXT进行FText构建。
FText t1 = LOCTEXT("UECppGMB_T1", "Hello");//此代码需要在编写在上面代码的包裹中
02.直接使用宏NSLOCTEXT构建
FText t1 = NSLOCTEXT("UECppTest", "UECppGMB_T1", "Hello");
第二种方法较第一种可以省去空间声明,但是并没有丢弃空间标记,只是在声明时需要额外多提供一个空间名称作为参数传递给宏
资产中的文本信息
对于资产中的文本,UE给出的方案是所有UI文本信息均可被收集。在资源管理器中创建控件User Widget,双击打开资源,在编辑窗口中拖入控件Text。在Text空间细节面板中找到Content–Text,参照图一,所有默认的UI面板文本都会被分配信息,你也可以手动调整,或是不调整。建议尽量不要自己调整。
完毕后保存你的文档,你需要做的是加入UI显示逻辑,加入源文件中FText显示信息,建议输出到屏幕上,不要输出到控制台
收集文本信息
打开本地化面板,在Window菜单项下(Localization Dashboard)
01.开启搜集选项
注意:
- 勾选选项,红框内两个收集内容需要勾选,第一项收集文档源文件,第二项收集游戏资源
- 第一项中添加包含目录,选择到源文件目录
- 第二项中添加包含目录,选择到内容目录
02.添加平台语言
参照图三完成平台语言添加
点击Add New Culture选择需要拓展的平台语言(我添加的是Chinese)
03.收集工程内待翻译的文本
参照图三,点击Gather Text。弹出收集窗口,等待收集结束,点击OK,如果能看到图三中橙色部分有显示数字(上图是4个),说明收集完成。
04.进行翻译
English属于当前语言环境无需翻译(软件默认语言无需翻译)(可以点选前面的白点进行切换,切换后重新收集),我们只需要翻译其他版本,例如Chinese,点击图三中①的按钮(注意点击Chinese后面的)。参照图四进行翻译操作。
待翻译内容将在标签Untranslated中,将需要翻译的内容进行翻译,目前编辑器在填入翻译内容后自动会将信息保存。下面红框展示了文本的KEY和所在文件。
05.编译文本
点击图三中的Count Words,等待计算翻译内容,完毕后点击OK,你讲看到Chinese中的翻译进度条完成到100%,最后点击Compile Text,完成文本编译工作。
06.测试
如果您的电脑是中文环境,先在当前窗口中进行测试,您将发现UMG中显示英文信息,CPP中输出内容显示英文信息。
如果您使用独立敞口启动,则会发现,UMG中显示翻译信息,CPP中输出的内容显示中文信息
至此本地化工作完成了。
07.设置启动本地化语言
当然您可以设置启动时候的语言环境,操作参照下图开启启动高级项
在开启后的窗口中加入独立窗口启动参数
-culture=”语言版本名称”
例如:-culture=”zh”
启动参数一般是隐藏的,需要显示高级内容方可显示
语言版本名称标记可以在本地化面板中加入翻译完成后,到内容浏览器目录中找到,参照路径如下:
..\Content\Localization\Game
Game是我的Target名称,在Game下您将找到语言版本简称,例如中文zh,英文en
UE版本4.19.2
祝大家玩得愉快~
请问为什么我的ui上添加内容不能正常显示?
注意下
1.空间名称不能和源码中空间名称相同
2.键值需要唯一
3.收集时是否能正常收集,翻译后记得编译
强哥现在我要整理本地化,项目Text收集后有几千个,需要导出po给翻译,其中有重复的词条、或是没用的不需要翻译的Text,要求整理,得去UMG里一个个找,把不用的本地化改成No,重复的键值改成一样的,有啥快的方法吗或是有啥工具能搞
单纯从描述来看,应该是前期设计本地化时没有提前设计规则导致后期重复工作,工具还真没有,只能逐个标记了,如果你有更好的方案,可以留言讲下~