UDN
Search public documentation:

LocalizationReferenceCH
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 > 本地化参考指南

本地化参考指南


概述


本文是虚幻引擎3本地化系统的参考指南。

本地化文本


本地化文本文件

请参照本地化文本文件页面获得关于文件格式及如何使用字符串和二进制数据的更多信息。

目录路径

引擎在可配置的路径中查找本地化文本文件(Core.System.LocalizationPaths, 默认为 "Engine\Localization")。当本地化一个资源时,它首先在当前设定的语言的本地化文件中查找。如果没有找到那个资源的本地化版本,那么再从国际的(英语)本地化文件(.INT)中查找。

导出

除了使用在UnrealEd中的 Full Loc Export(完全导出本地化文件)... 外,也可以使用命令开关 exportloc

exportloc 命令开关将把UnrealScript包中的本地化字符串导出为一个本地化文本文件:

gamename.exe exportloc

设置激活的语言

通过在您项目的Engine 配置文件中设置Language变量为和本地化文件目录相对应的特定语言可以改变所使用的语言。

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

[Engine.SeekFree]
...
Language=JPN
...

LocImage1.jpg

测试

要想测试本地化,创建一个假的称为XXX的语言。将所有的字符用字母X来替换。这将会很容易地发现丢失的本地化文本。

翻译过程

本地化人员处理的是本地化文件(文本)而不是内容(二进制)。请谨慎地接受外部团队重新保存的内容。谁也不知道这些内容包是否应用了其它的属性、黑客等等。

当创建了新的需要本地化的对象时,简单地在编辑器中执行 Full Loc Export(完全导出本地化文件)... 命令即可。这将不会破坏已存在的本地化数据,因为这些数据在导出时已经在内存中。

对于战争机器来说,我们的工作流程是提供每个国际通用的(英文)本地化文本(.INT)和针对该文更新差异(diff),从而可以向本地化的工作人员显示自从上一次更新后又创建(重新导入)了哪些新的本地化对象或对象属性;他们将负责把这些新的字符串更新到他们的文件的语言版本中。

可替换地,如果某人不太信任本地化团队处理更新差异(diffs)的能力,他可以通过在打开编辑器并导出前简单地设置引擎的语言为目标语言,从而为每种语言分别地重新导出本地化文本文件。

通过这种方式,您可以直接地仅发送INT文件给翻译人员。对于战争机器,我们为本地化团队提供了本地化文本及特定编译版本,以便在游戏中测试内容。由于上述原因,我们仅接受对本地化文件的改变。

我们没有进行额外的处理来把本地化文件放到更加方便编辑的软件中,比如Excel。我们让本地化团队将数据变成他们需要的任何内部格式。

本地化内容


贴图

注意:引擎在默认情况下是不支持动态载入本地化贴图的,因为到已烘焙的贴图文件的贴图偏移量存储在免寻道的包中。

音频

音频本地化文件需要一些设置。最简单的(推荐的)过程是分离所有的Sound cue,并把它们放入到'MyGame\Content\Sounds'内的包中,然后把所有的本地化音频波形文件放入到使用那三个代表语言编码的字母命名的子文件夹中。

这将产生类似于以下的内容 -

MyGame\
  Content\
    Sounds\
     MainCharacterVO_cue.upk
     EnemyVO_cue.upk
     INT\
       MainCharacterVO.upk
       EnemyVO.upk
     JPN\
       MainCharacterVO_JPN.upk
       EnemyVO_JPN.upk

当加载本地化声效时,它将加载针对选中语言的音效。这意味着只要编辑一次,就可以把任何生效改变统一地应用到所有语言上。

如果一个Sound cue引用的声音波形所在的子文件夹命名的三个字母和已知的语言编码匹配或者音效有字幕,那么就认为这个音效已经被本地化了。如果您使用上面的文件夹布局,那么一切都将会按照您期望的那样本地化。请参照以下的案例学习获得更加具体的示例。

视频

某些视频有对应的.txt文件,该文件包含了‘字幕‘本地化文本文件中的关键帧和它们出现的时间。.txt文件类似于对白字幕,它们和正在播放的音频没有任何关系。这信息必须在适当的时机手动地进行制作(第一行是每秒钟内更新的次数,其它行用于决定那行 开始/停止 次数)。

对于视频中的音频,制作一个 Bink 视频并把所有的语言混入到视频中作为一个声道集合。我们所做的是向本地化音频重新映射前左方、前中和前右方的音频,然后让所有语言具有相同的后方音频和超低音。

函数 FBinkMovieAudio::SetSoundTracks() 将返回和扬声器相对应的一系列通道,因此 -

  INT FRA ITA
Front Left(前左方) 0 6 9
Front Right(前右方) 1 7 10
Front Center(前中方) 2 8 11
Subwoofer(超低音) 3 3 3
Rear Left(后左方) 4 4 4
Rear Right(后右方) 5 5 5

本地化虚幻编辑器


关于本地化编辑器控制控件的信息,请查看 编辑器本地化页面。

案例学习: 战争机器的本地化


战争机器中,每个角色的音频被分为3类:

  1. Dialog(对话) -- 是在唯一的脚本情境中发出的多行对话的声音。
  2. Chatter -- 由玩家发出的作为非脚本化游戏性情境的结果的多行对话。比如,一次堵塞的射击带来的沮丧、当打倒一个敌人的胜利等。
  3. Efforts --不包含讲话的游戏性声音 --呼噜声、呼喊声、痛苦的呻吟声等等。

每个类别对应一个声效包。所以,战争机器的主要人物Marcus有3个包:Marcus_Dialog.upk, Marcus_Chatter.upk and Marcus_Efforts。仅dialog和chatter包需要进行本地化,因为efforts包没有包含任何语音讲话。某些不能表达可理解的对话的角色仅有一个efforts包,不必进行本地化。

UE3的声音系统在声源(一个.wav文件 – 即Unreal术语中的SoundNodeWave)和声效的应用(一个SoundCue)之间进行了区分。本地化存在于声音波形层次,所以声效的本地化数据由使用该波形的Sound cue所共享 。所以,我们进一步把本地化的声音包分为了一个声音波形包和一个Sound Cue(声效)包;前一个仅包含SoundNodeWave对象,后一个仅包含SoundCue对象。通过这样区分,我们可以在不影响 关卡/资源 中所引用的sounds cues的情况下交换不同语言的声音波形包。

所以,以战争机器的角色Marcus作为例,角色的完整包的划分如下所示:

Marcus_Dialog_Cue -- 仅包含针对Marcus对话语句的SoundCue对象的包。

Marcus_Dialog -- 仅包含关于Marcus的英语对话的SoundNodeWave 对象的包。

Marcus_Dialog_jpn --和上边类似,但是为日语。

.... .... --对于其它语言以此类推,等等。

Marcus_Chatter_Cue -- 关于Marcus的chatter (游戏性)的 SoundCue对象。

Marcus_Chatter -- Marcus的chatter的英文SoundNodeWaves。

Marcus_Chatter_jpn -- 和上边类似,但是为日语。

.....

Marcus_Efforts --包含着Marcus 的efforts(没有本地化)的SoundCues和SoundNodeWaves。

在底层,加载的代码将查看引擎的语言设置并在加载默认的英语语言版本之前尝试加载一个包的本地化的语言版本。期望的命名习惯是在一个包的本地化语言版本带有一个"_ext"的后缀,ext是由appGetLanguageExt函数返回的语言扩展名。如果没有本地化语言版本存在,或者如果引擎的语言设置为英语("int", or international),则会加载一个没有后缀版本的包。这考虑到了'partially-localized(部分本地化的)' 语言—即它的字幕语言存在(通过SoundNodeWave包的.ini文件的本地化导出)但是没有完全本地化的音频存在。

语言编码


请查看以下网站来获得用于代表语言名称的编码: http://www.loc.gov/standards/iso639-2/englangn.html

我们当前设置是-

INT 美国英语 (不是世界上其他地方的英语)
JPN 日语(没有TTS支持)
DEU 德语
FRA 欧洲法语(而不是加拿大法语)
ESM 拉丁美洲西班牙语(现代西班牙语?) (没有.NET、语音识别支持)
ESN 欧洲西班牙语 (伊比利亚西班牙语? 古代西班牙语? 传统西班牙语?)
ITA 意大利语
KOR 韩语(没有TTS支持)
CHT 繁体中文(没有语音识别或TTS支持)
RUS 俄语(没有语音识别或TTS支持)
POL 波兰语(没有语音识别或TTS支持)
HUN 匈牙利语(没有语音识别或TTS支持)
CZE 捷克语(没有语音识别或TTS支持)
SLO 斯洛伐克语(没有语音识别或TTS支持)