UDN
Search public documentation:

LocalizedTextFilesCH
English Translation
日本語訳
한국어

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3主页 > UnrealScript > 本地化虚幻引擎中的文本

本地化虚幻引擎中的文本


概述


虚幻引擎主要依赖本地化文本文件来显示特定语言的文字。

配置是由成对的键值来决定的,他们咱找部分排列。一个键可以和一个或多个值相关联。

通过设置您的游戏项目的Engine 配置文件中的Language变量可以修改显示的语言,该语言和某个本地化目录相关联。

比如,这是如何把引擎语言设为日语的过程:

[Engine.SeekFree]
...
Language=jpn
...

UnrealLoc


我们书写的UnrealLoc工具用于管理引擎中的本地化文本;它处理比较琐碎的任务。

使用本地化文本文件


UE3的中的本地化是由 \Localization目录及其子目录中的一系列本地化文本文件处理的。每种语言有它自己的三个字母代码(JPN=日语、KOR=韩语、CHT=翻译中文、DEU=德语等),它们分别对应着包含那种语言的文件的子目录。某些字母代码可能是不清楚的,尤其是ESM和ESN,它们分别指拉丁美洲西班牙语和欧洲西班牙语。即便是默认的英文版本也应该使用本地化文件,它使用的字母代码是INT(International的缩写)。(ENG也可以用于表示英语。)

文件格式

尽管本地化文本文件本身是简单的INI-格式的配置文件,但是必须把它们保存为Unicode (UTF-16小尾序格式),请不要继承它们的引擎相对应的部分所使用的格式。文件名称本身和本地化数据所在的包的名称是一样的;并且文件的扩展名和该文件所在的Localization目录中的子目录的名称一致。

部分 和 键-值对

一般的配置文件由成块的 键-值 对组成,如下所示:

[Section]
Key=Value

比如,如果您有一个称为MyGame.u的脚本包,那么应该有一个包含了 MyGame.u文件中的脚本类的所有默认本地化字符串的MyGame.int文件。所以,如果您有一个名称为MyHUD.uc的脚本类,具有本地化字符串属性 CheckpointReachedStringLoadingString ,那么MyGame.int中的其中一个部分应该如下所示:

[MyHUD]
CheckpointReachedString=Checkpoint Reached
LoadingString=Loading

需要记住的一个事情是您需要手动地创建部分。UnrealScript不允许您在UnrealScript类的 defaultproperties(默认属性) 部分指定可本地化属性的默认字符串。如果您尝试指出,那么脚本编译将会是失败。这实际上是个好事,因为它强制您意识到这些字符串是必须被翻译的,并且会尽快地把它们放到本地化文本文件中。

字符串数据

作为数据一部分的本地化字符串和地图包的工作方式类似,但是它们有很大的不同。尽管您可以手动地为这些包创建本地化文本文件,但通常最好使用通用浏览器的包的树结构中的包上运行 Full Loc Export(完全导出本地化文本)... 命令。这将会基于每个包自动地生成本地化文本文件,它里面包含了必要的文本。

注意: 任何您输入到属性窗口中的东西在您下次加载 包/地图 时都会被INT文件内容覆盖。在终止编辑器会话前,您需要重新导出本地化文件。

基于每个对象的字符串数据

上面的MyHUD示例假设尽管有多个类的实例存在,但仅有一个字符串用于 CheckpointReachedStringLoadingString 。如果您创建的一个类,该类需要让设计人员为每个实例指定不同的本地化文本,那么将会发生什么哪? 比如,如果您正在使用原型系统来构建武器,那么每个武器可能具有不同的本地化名称和描述。在这种情况下,需要把具有该本地化字符串属性的类在其声明中标记为 perobjectconfig 。通过这样做,当在包含那个类的对象的包上运行 Full Loc Export(导出所有本地化文本)... 命令时将会分别输出那个类的每个实例的字符串。所以,比如,如果您有包VO.upk ,它具有三个WAV文件(WAV1, WAV2, WAV3),每个文件都有个填充的SpokenText文本域,在该包上运行 Full Loc Export(导出所有本地化文本)... ,这样将会生成一个VO.int文件,它具有以下部分:

[WAV1 SoundNodeWave]
SpokenText="<WAV1 Text, whatever that may be>"

[WAV2 SoundNodeWave]
SpokenText="<WAV2 Text, whatever that may be>"

[WAV3 SoundNodeWave]
SpokenText="<WAV3 Text, whatever that may be>"

注意,每个部分的名称包含了资源名称和它的类。伴随着文件名称 VO.int,同时也应该在VO.upk中特别地指出所有的本地化字符串。

UIStrings中的自动换行和新建行

当手动地编辑器本地化文件时,您或许会遇到在UI字符串中的自动换行和另起一行的问题。

比如,如下所示:

[GenericStrings]
Output="Line 1/nLine2/nLine 3"

将会返回:

Line 1ine2ine3

在UI编辑器数仓据库浏览器?中预览字符串也会产生同样的效果。

但是,在UI编辑器数据仓库浏览器?中修改一个单独的本地化字符串并应用改变时,在受到影响的整个INT文件中的字符串周围的引号将会自动地被删除。这会使得escape(漏掉)的字符按照期望的方式工作。

解决方案: 如果您手动地使用文本编辑器把本地化字符串输入到INT文件中,请不要使用引号!

这里是正确的声明:

[GenericStrings]

Output=Line 1/nLine2/nLine 3

它将会产生以下输出:

Line 1
Line 2
Line 3

二进制数据

对于二进制数据来说,本地化所涉及的仅是使得具有附加扩展名的不同的包使用目标语言的三个字母代码作为附加扩展名即可。比如,如果您有一个包Art.upk,它内部包含了需要本地化的贴图,如果您当前运行的语言是日语(正如在您的Engine.ini文件中所指定的),引擎首先在从Art.upk查找该贴图之前将会自动地查找Art_jpn.upk 的包。对于游戏机平台的 烘焙过程来说,这意味着您需要对每种语言都进行一次烘焙,并把正确的本地化数据放到免于搜索的包中。

把本地化数据放到一个单独的文本文件中的好处是可以在没有保存数据的情况下快速地迭代数据并且在游戏中进行预览。这个好处对于游戏机平台来说是非常明显的,因为在游戏机平台上内容的改变需要一些 烘焙 数据的过程。

声明本地化文本文件数据

类声明描述了本地化文本文件的新的部分段的名称。任何包含 localized 关键字的字符串都可以被导出,并且会被放到相关的本地化文本文件中。

比如,以下示例类声明它的字符串将会被导出到MyGame.int本地化文本文件中:

class MyHUD extends HUD
   var localized string CheckpointReachedString;
   var localized string LoadingString;

请参照UnrealScript参考指南 获得关于本地化字符串的更多信息。

可用的本地化文本文件


本地化文本文件位于给定项目的 Localization 目录中的特定语言的子目录中。

这是使用虚幻引擎创建的游戏可以用的本地化文本文件列表。

  • .int (项目名称)
  • Editor.int (如果在您的项目中对编辑器进行了修改)
  • UI.int (用户界面)
  • Content.int (二进制内容)
  • Credits.int (感谢声明)
  • Subtitles.int (字幕)