本地化是指在游戏内窗口实际呈现给玩家的文本,如事件、菜单、武器、故事等。本地化文件以.yml的格式保存在localisation/folder路径底下,且以UTF-8-BOM的格式编码。.yml文件的命名惯例是<文件名>_l_<语言名>.yml,其中<文件名>为这组本地化的名字,而<语言名>为本地化的目标语言。目前支持的语言有葡萄牙语(braz_por),英语(english),法语(french),德语(german),波兰语(polish),俄语(russian),西班牙语(spanish),以及简体中文(simp_chinese)。
实用指令:
reload text – 重新加载本地化目录。 switchlanguage l_english – 切换语言并重新加载本地化目录。
创建本地化文件
- 在模组的根文件夹(注意不在common里)创建一个名为“localisation”的文件夹。注意,在某些别的paradox游戏里用的可能是美式拼写、带有z的“localization”。
- (可选)在“localisation”文件夹中创建对应语言的子文件夹。这有助于管理,但不是必需的。
- 群星的本地化文件是用UTF-8-BOM编码的。UTF-8-BOM是唯一可用的编码方式,就算用UTF-8编码也会导致群星无法解析从而不能使用。
- 正确编码的最简单做法是复制一个现成的群星.yml文件,再直接对其进行编辑。
- 作为替代,你也可以创建一个标准的空白文本文档,再以UTF-8-BOM编码保存它。类似Notepad++和Visual Studio Code这样的文本编辑器能让你手动将文件保存为UTF-8-BOM编码格式。
- 文件名必须以“_l_<语言名>”结尾,否则无法被读取。
- 任何本地化文件的第一行都必须是
l_<language>:
,否则无法被读取。 - 范例文件名:
mod_buildings_l_english.yml
将YML文件命名为与一个原版YML文件相同会导致原版被覆盖。这么做并不推荐, 除非你打算改写文件内(几乎)所有的条目。本地化条目可以通过保存到“Replace”文件夹以单独进行覆盖,详见覆盖原版文本。
遗憾的是,游戏并没有适配模组的语言回滚功能。这意味着当本地化键值缺失时,键值会直接以文本形式呈现。因此,对应的做法是先直接把英语文件复制到其他所有语言里(改成合适的标题)。
文件编码
- 使用一个文本编辑器打开YML文件。推荐使用类似Notepad++和Visual Studio Code 这样的编辑器,如果上述软件不可用的话,普通的记事本也行。
- 将文件转码成UTF-8-BOM的格式。
- 使用Notepad++时,前往菜单栏,打开编码 界面。
- 使用Visual Studio Code时,前往右下角并点击编码(默认为
UTF-8
),再点击保存编码。作为替代,也可以通过改变设置来让VSC默认以UTF-8-BOM 格式生成YML文件。 - 使用记事本时,前往另存为...,改变编码并保存文件。
- 如果列出来的选项中同时有UTF-8 和UTF-8 with BOM(或相似的名称),选用UTF-8-BOM。
- 如果列出来的选项中同时有UTF-8 和UTF-8 without BOM(或相似的名称),选用UTF-8。【译注:即一定要带BOM】
本地化键值
l_<语言名>: localisation_key_1: "文本1" localisation_key_2: "文本2"
每个单独的本地化条目被称为“键值”,位于冒号的左侧,是指向本地化文本的实际代码。而游戏内显示的文本则位于冒号的右侧,包夹在双引号("")里。冒号是分隔符。
- 原版文件中紧接在冒号后面的数字可以被忽略,那是Paradox内部用于跟踪翻译用的。[1]
- 在出现任何本地化键值之前,文件必须先包含
l_english:
(或其他语言的相等形式)。 l_english:
(或相等)之后的所有条目必须以空格开始(空格或tab都行)。- 所有要在游戏内显示的文本都被双引号所包裹。想在游戏内显示双引号的话,请在双引号前面加上反斜杠(例如:
text \"name\"
)。 - 注意以下这些unicode字符在本地化文件中是不可用的,会生成一个“?”:
„ “ ‚ ‘ – ” ’ … —
覆盖原版文本
想要覆盖原版本地化键值(或其他模组的键值)时,在你的“localisation”文件夹底下创建一个名为“replace”的文件夹。该文件夹中的本地化文件的读取比其他所有本地化文件都晚,能覆盖掉任何重复的键值。这样做可以避免覆盖所有本地化文件,每个键值条目会单独被最后加载的文件所覆盖。不通过“replace”文件夹来覆盖本地化是可行的,但并不可靠。
方括号指令
方括号指令(范围本地化声明) 用方括号([ ]
)包裹,以一个主作用域为开头,一段检索用文本为结尾。中间可以包含一个或数个次作用域。目标之间用小数点号(.)分隔。文本检索可以提前定义(参考下方的例子),可以引用作用域中声明的变量,也可以是段scripted_loc【即带脚本的语言文件】(参考common/scripted_loc底下的文件)。在写“scripted_loc”条目时,要注意这些条目本身不能用方括号指令(例如:一段带有[Root.GetName]
的scripted_loc会直接原封不动地显示[Root.GetName]
)。
注意:如果你想在脚本效果或触发器中使用例如 log = [This.GetName]
这样的本地化指令,你得把它写成\\[This.GetName]
,不然就会出错(至少会在效果中第二次使用时出现)。
大多数情况下可以通过'[Scope.my_variable]'
来获取变量的赋值,以及通过'[Scope.my_date_flag]'
来获取保存的日期。(从3.1起)
两个连续的左方括号 '[['
会跳过指令,使一个单独的方括号呈现在文本里。例如文件中的'[[范例]'
会在游戏中显示为'[范例]'。
有几条指令是无范围的:GetDate, GetMidGameDate, GetLateGameDate, GetYear, LastKilledCountryName
。
下方表格只记录了一部分的硬编码范围本地化指令(也没有涉及任何脚本语言文件)。一份更详尽的代码名单可以在Stellaris\logs\script_documentation\localizations.log
里找到。
主作用域
指令 | 使用范例 | 注释 |
---|---|---|
Root | [Root.GetName] | 事件的根作用域 |
This | [This.GetName] | 当前作用域 |
From | [From.From.GetName] | 调用事件的作用域。对于调用栈中更早位置的事件,From也可以充当次作用域 |
Prev | [Prev.From.GetName] | 上一个目标。我不清楚Prev.From指向的是什么,不过有些项目的描述中有用到。 |
<event target tag> | [mytarget.GetName] | 事件目标(Event target)标签要在本地化文件中声明event_target: 后才能使用。
|
外交活动 | ||
Actor | [Actor.GetAllianceName] | 用于外交回应消息,发起行动的一方 |
Recipient | [Recipient.GetName] | 用于外交回应消息,作为行动目标的一方 |
Third_party | [Third_party.GetName] | 用于外交回应消息,行动中牵涉到的第三方 |
次作用域
指令 | 使用范例 | 注释 |
---|---|---|
国家活动:首都/统治者/继承人/物种/联邦 | ||
Capital | [Root.Capital.GetName] | 当前国家或星区的首都 |
Leader | [Root.Leader.GetName] | 当前作用域的领导人(舰队、国家、联邦、人口派系、第一次接触、情报行动、间谍网、星区) |
战争活动 | ||
MainAttacker | [This.MainAttacker.GetAllianceName] | 当前作用域的主进攻者(作用域必须是战争),在战争名称样式中使用。 |
MainDefender | [This.MainDefender.GetSpeciesName] | 当前作用域的主防御者(作用域必须是战争),在战争名称样式中使用。 |
星球活动:拥有者/所在星系/卫星/星区 | ||
Owner | [Root.Owner.GetName] | 当前作用域的拥有者 |
System | [Root.System.GetName] | 主作用域所在的星系 |
Planet | [Root.Planet.GetName] | 当前作用域所处的星球(人口、陆军、考古遗址、资源点、巨构建筑) |
检索用文本
指令 | 使用范例 | 注释 |
---|---|---|
GetAdj | [Root.GetAdj] | 当前作用域所关联的形容词 |
GetAdjective | [Root.GetAdjective] | 当前作用域所关联的形容词 |
GetAllianceName | [This.MainAttacker.GetAllianceName] | 当前作用域所属的军事同盟的名称 |
GetControllerName | [Root.GetControllerName] | 当前控制者的名称(已知能对星球生效) |
GetClassName | [Root.GetClassName] | 当前星球种类的名称 |
GetFleetName | [Root.GetFleetName] | 与当前作用域关联的舰队名称 |
GetHeirName | [Root.GetHeirName] | 当前继承人的名字 |
GetHeirTitle | [Root.GetHeirTitle] | 当前继承人的头衔 |
GetHomeWorldName | [Root.GetHomeWorldName] | 当前作用域的母星名称 |
GetLeaderName | [Root.GetLeaderName] | 与当前作用域关联的领袖名称 |
GetName | [Root.GetName] | 与当前作用域关联的名称 |
GetFirstName | [Root.GetFirstName] | 与当前作用域领袖关联的第一个名称 |
GetSecondName | [Root.GetSecondName] | 与当前作用域领袖关联的第二个名称 |
GetAge | [Root.GetAge] | 作用域领袖的年龄 |
GetNamePlural | [Root.GetNamePlural] | 与当前作用域关联的复数称谓(必须是一个物种) |
GetNebula | [Root.GetNebula] | (未知) |
GetOwnerName | [Root.GetOwnerName] | 当前所有者的名称 |
GetPersonalityName | [Root.GetPersonalityName] | 当前AI性格的名称 |
GetPlanetMoon | [Root.GetPlanetMoon] | 返回“星球”或者“卫星”,取决于当前作用域是哪一种 |
GetPlanetMoonCap | [Root.GetPlanetMoonCap] | 返回“星球”或者“卫星”,取决于当前作用域是哪一种【与上条区别在于英文首字母大写】 |
GetPopFactionName | [Root.GetPopFactionName] | 当前作用域的人口派系的名称 |
GetRandomSpeciesSound | [Root.GetRandomSpeciesSound] | 从当前作用域物种相关联的声音列表里随机选一个进行播放 |
GetRegnalName | [Root.GetRegnalName] | 当前作用域的尊称 |
GetRulerName | [Root.GetRulerName] | 当前作用域关联的统治者名称 |
GetRulerTitle | [Root.GetRulerTitle] | 当前作用域关联的统治者头衔 |
GetSpeciesAdj | [Root.GetSpeciesAdj] | 当前作用域的物种的形容词形式 |
GetSpeciesClass | [Root.GetSpeciesClass] | 当前作用域的物种所属类别 |
GetSpeciesClassPlural | [Root.GetSpeciesClassPlural] | 当前作用域的物种所属类别的复数形式 |
GetSpeciesMouthName | [Root.GetSpeciesMouthName] | 当前作用域的物种所属类别的嘴巴的名称 |
GetSpeciesName | [Root.GetSpeciesName] | 当前作用域的物种名称 |
GetSpeciesNameCompliment | [From.GetSpeciesNameCompliment] | 用当前作用域物种的名字发出一条赞美 |
GetSpeciesNameInsult | [From.From.GetSpeciesNameInsult] | 用当前作用域物种的名字发出一条侮辱 |
GetSpeciesNamePlural | [This.GetSpeciesNamePlural] | 当前作用域物种名称的复数形式 |
GetSpeciesNamePluralCompliment | [Root.SpeciesNamePluralCompliment] | 用当前作用域物种的复数称谓发出一条赞美 |
GetSpeciesNamePluralInsult | [From.SpeciesNamePluralInsult] | 用当前作用域物种的复数称谓发出一条侮辱 |
GetSpeciesHandName | [From.GetSpeciesHandName] | 描述当前作用域物种的手的词 |
GetSpeciesMouthName | [From.GetSpeciesMouthName] | 描述当前作用域物种的嘴的词 |
GetSpeciesOrganName | [From.GetSpeciesOrganName] | 描述当前作用域物种的内部器官的词 |
GetSpeciesSpawnName | [Root.GetSpeciesSpawnName | 描述当前作用域物种的小孩的词 |
GetSpeciesSpawnNamePlural | [Root.GetSpeciesSpawnNamePlural | 当前作用域物种的小孩的复数称谓 |
GetStarName | [Root.Capital.GetStarName] | 当前作用域所在的恒星的名字 |
GetHerHim | [admiral.GetHerHim] | 按角色的性别输出“他”或“她” |
GetSheHe | [abducted_leader.GetSheHe] | 按角色的性别输出“他”或“她” |
GetSheHeCap | [abducted_leader.GetSheHeCap] | 按角色的性别输出“他”或“她”【与上条区别在于英文首字母大写】 |
GetHomeWorldName | [Root.GetHomeWorldName] | 选中国家的母星名称 |
GetHerHis | [admiral.GetHerHis] | 按角色的性别输出“他的”或“她的” |
GetHerHisCap | [admiral.GetHerHisCap] | 按角色的性别输出“他的”或“她的”【与上条区别在于英文首字母大写】 |
LastKilledCountryName | [LastKilledCountryName] | 输出上一个所灭亡的国家名称 |
- 补丁3.1新增的本地化指令
GetSpeciesFossilName GetSpeciesFossilNamePlural GetSpeciesRemnantName GetSpeciesRemnantNamePlural Species GetFossilName GetFossilNamePlural GetRemnantName GetRemnantNamePlural
颜色代码
颜色代码以§
作开头(Windows快捷键:ALT+0167),后面跟着一个单一字母来指定所用的颜色,直到检测到另一个颜色代码,或以§!
结尾为止。指令$
代表着当前显示的变量的颜色(不是字符串定义,详见代码$ ),也能通过用|
以及颜色代码字母来隔开一对闭合的$
以指定颜色,如:$AGE|Y$
你也可以通过在颜色代码字母中加入一个DC1 UTF-8字符来改变游戏中的文本颜色。请注意这样做后如果没有把颜色改回默认,你可能会不小心使所有后续文本着色。
§RR§Sa§Hi§Yn§Gb§Bo§Mw§!
会被显示成:Rainbow
代码 | 颜色 | 原版用法 |
---|---|---|
W | 白色 | 外交态度 |
T | 浅灰色 | 所有文本的标准颜色 |
L | 棕色 | 传说、背景故事、角色扮演元素 |
P | 淡红色 | 在描述和事件文本中高亮显示充满敌意的文本 |
R | 红色 | 负面修正 |
S | 暗橙色 | 含蓄的高亮文本 |
H | 橙色 | 高亮文本 |
Y | 黄色 | 欠佳或中性的修正 |
G | 绿色 | 正面修正 |
E | 青色 | 大块文本 |
B | 蓝色 | 影响人口的事件效果 |
M | 紫色 | 稀有科技 |
! | 默认 | 回到上一次颜色变化之前的颜色 |
代码$
$ 用于圈定在别处定义的字符串(或变量),将其拓展到当前字符串中,或GUI元素的系统统计数据里。
数字格式
| 字符也能被用于调整数字的格式。$VALUE|*x$
会将VALUE
的小数点限定到x
位。
# 范例 = 100 "$范例|*0$" # 100 "$范例|*1$" # 100.0
代码£
代码£用于各种系统图标的名称,包括能量币、矿物、影响力,和三种研究类型(工程学、物理学、社会学)。还有更多没有列在此处,比如£ship_stats_hitpoints\armor\shield£
、£fleet_template_size£
以及£trigger_yes\no£
与其他种种。可以用类似于Notepad++的在文件中查找功能来搜索‘£’字符,以找到特定的某样东西。记住代码£必须包围着你所感兴趣的标签,例如£energy£
。(没有英镑符号的Windows用户可以在键盘上按Alt + 0163
)
其同时也支持多框架(如果子来源有的话),例如:£leader_skill|3£
会渲染一个指定技能等级的图标。
£自定义图标
你可以创建在游戏内与上方图标表现一样的文本图标,通过把图标保存在<游戏根目录>/gfx/interface/icons/text_icons 里。标准的文本图标是尺寸为16x16像素点大小的.dds文件。为了在文本中引用你的图标,你需要像定义事件图片一样定义它。将以下文本文档以.gfx的格式保存到<游戏根目录>/interface/ 里可以定义如下方所示的任何自定义修正:
spriteTypes = { spriteType = { name = "GFX_text_worker_produces_mult" texturefile = "gfx/interface/icons/text_icons/mod_planet_jobs_worker_produces_mult.dds" }
你可以通过多写几个spriteType =
区块来关联更多的图标。这些全部都应该处在spriteTypes =
(多了一个s)的区块中。
其名称必须以GFX_text_
为前缀。不过,如果是为了在本地化文件中引用它,用£worker_produces_mult£
(没有前缀)就行,它会照常在游戏文本中出现。
基于斜杠的代码
两种可用的斜杠代码分别是\n
和\t
。
\n
等价于按下回车键并换行,除非它在上述代码的内部。
\t
生成一个制表符。
斜杠同时也能用做将特殊字符还原为文本字符,比如\"
会让字符串带上一个双引号,而不是结束字符串。
格式指导
原版活动、修正和所有其他类型的本地化都遵循一套标点符号与大小写的规范。下方表格标出了原版英文本地化中用到的一些规则,使玩家自订的内容能更好地融入其中。表格并不完善,但可用作大多数常用文本的快捷备忘单。给出的字符数量限制并不是硬性要求,不过视位置而定超出限制可能导致文本被截断,破坏UI布局,或单单溢出框外显得难看。
位置 | 大小写 | 标点符号 | 字数限制 | 范例 |
---|---|---|---|---|
事件名称 | 每个单词首字母大写 | 无 | 50 | "Exotic Woodwind" |
事件描述 | 句首字母大写 | 标准 | 2000 | "Music has taken many forms among the beings we have encountered since leaving [Root.GetHomeWorldName], and the methods and preferences continue to baffle us. Sometimes alien […] Whatever this instrument is, it’s unlike any of our own." |
事件选项 | 句首字母大写 | 句尾终止式 | 70 | "An excellent time to learn more about their culture.", "Let us be careful and study this instrument.", "The colony is part of our future. It stays." |
特质/修正/建筑/思潮等名称 | 每个单词首字母大写 | 无 | 30 | "Building Cost", "Massive Crater", "Very Strong" |
特质/修正/建筑/思潮等描述 | 句首字母大写 | 标准 | 200 | "The impact site of the meteorite which brought Lithoids to this planet.", "Members of this species possess a strength that almost defies the laws of physics." |
UI按钮 | 两者兼有 | 无 | 取决于UI | "Withdraw" |
UI通知 | 每个单词首字母大写 | 无 | 取决于UI | "Relic Activation Available" |
参考
帝国 | 帝国 • 思潮 • 政府 • 国民理念 • 起源 • 承诺 • 议程 • 传统 • 飞升天赋 • 法令 • 政策 • 遗珍 • 科技 • 自定义帝国 |
人口 | 岗位 • 派系 |
领袖 | 领袖 • 领袖特质 |
物种 | 物种 • 物种特质 |
行星 | 行星 • 行星特征 • 轨道矿藏 • 建筑 • 区划 • 行星决议 |
星系 | 星系 • 恒星基地 • 巨型结构 • 虫洞 • 星门 • 地图 |
舰队 | 舰队 • 舰船 • 部件 |
地面战 | 陆军 • 轰炸姿态 |
外交 | 外交 • 联邦 • 星海共同体 • 评价修正 • 宣战理由 • 战争目标 |
事件 | 事件 • 异常现象 • 特殊项目 • 考古遗址 |
游玩 | 游玩 • 定义 • 研究 • 经济 • 游戏开局 |
动态修改 | 动态 • 指令效果 • 触发条件 • 作用域 • 修正 • 变量 • AI |
媒体/本地化 | Maya 导出器 • 图形 • 肖像 • 旗帜 • 事件图片 • 界面 • 图标 • 音乐 • 本地化 |
Other | 控制台命令 • 存档编辑 • Steam 创意工坊 • 模组制作教程 |