本地化

本地化文件将 eu4 文件中事物的内部代码名称与实际文本关联起来,并根据 eu4 所设置的语言使用不同的文本。

格式

EU4 使用的格式类似于 YAML,大致如下:

l_english:
 MENU_MESSAGES_DISABLE_ALL:0 "Disable all"
 FILTER:0 "Filter"
 TO_ME:0 "To me"
 FROM_ME:0 "From me"
 INTERESTING:0 "Interesting"
 OTHERS:0 "Others"
 hre_province_restored:0 "Territory restored to the Empire"
 DECAY:0 "Decay"

以下规则适用于所有本地化文件:

  • 本地化文件必须放在 "localisation" 文件夹中("localization" 无效)。
  • 要替换原版或其他模组中已有的本地化,请将编辑后的本地化文件放入 "localisation/replace"。
  • 文件名必须以 _l_english.yml 结尾,例如 mymod_l_english.yml。为英语以外的语言进行本地化时,请将 english 替换为对应的语言(french 等)。
  • 文件必须编码为 带字节顺序标记的 UTF-8(UTF-8-BOM)。如果本地化文件使用 ISO 8859-1 等单字节编码,游戏将无法读取该文件,而是直接显示本地化键名。为确保编码正确,可以复制一份原版本地化文件,或使用 Notepad++ 等高级编辑器,通过编码菜单中的 Convert to …(转换为……)选项进行设置。游戏的其他文本文件(.txt)应使用 CP-1252/ANSI 编码,且绝不能带有 BOM。
  • 文件的第一行必须是 l_english:(同样,将 "english" 替换为其他语言)。
  • 与其他文件一样,引号之外的 # 表示行注释——只要该行 # 之后不含双引号("),其后的所有内容都不会被 eu4 读取。你可以在引号内的文本中使用 #。
  • 空行会被忽略(包括仅含空白字符和注释的行)。
  • 其他所有行都必须符合以下格式:
  1. 恰好一个空格
  2. 本地化键,只能包含以下字符:A-Z、a-z、0-9、'_'、'.'、'-'。游戏通过该键来确定文本应当用于何处。在某些情况下(例如事件标题、描述、选项名称),键在其他游戏文件中指定;在另一些情况下,键由代码对象名称派生(例如,名为 test_decision 的决议会自动使用 test_decision_title 作为其标题的本地化键,使用 test_decision_desc 作为描述的本地化键)。
  3. 冒号(:)
  4. 可选:一个数字。没有实际含义,供 eu4 开发者记住该文本的“版本”。
  5. 恰好一个空格
  6. 一个双引号(")
  7. 本地化文本。它几乎可以使用任何 UTF8 字符,但只有 UI 元素所用字体中包含的字符才能正确显示。对于原版字体,即 CP-1252/ANSI 字符集。换行必须写作 \n,反斜杠必须写作 \\。文本中的双引号可以正常使用(旧版游戏要求将其写作 \")。反斜杠后跟任何其他字符都会破坏本地化。
  8. 一个双引号(")
  • 偏离此格式可能会破坏本地化文件,并导致其后所有行被忽略。
  • 任何本地化键都可以放在任何文件中,替换本地化时亦然;不过,最好将相近的键值对放在同一文件中(并使用与被替换文件相同的文件名),以便日后查找。

文本格式

本地化系统还支持在本地化字符串中(而非 C++ 代码中)格式化文本。要格式化某个变量,请输入 §,后接所需的格式规则,再以 §! 结束该表达式。

如果键盘上有数字小键盘,可以按住 左 Alt,在小键盘上输入 0167,然后松开 左 Alt,即可轻松输入 §。必须开启 NumLock 才有效。

或者,也可以尝试 Compose 键序列 S, !。

目前实现了以下格式规则:

代码 效果 用法 示例
W,B,G,R,b,g,Y,
M,T,O,l,J,P,V
为文字着色
  •      W = 白色
  •      B = 蓝色
  •      G = 绿色
  •      R = 红色
  •      b = 黑色
  •      g = 灰色
  •      Y = 黄色
  •      M = 海蓝色
  •      T = 青色
  •      O = 橙色
  •      l = 青柠色
  •      J = 翡翠色
  •      P = 紫色
  •      V = 紫罗兰色
§<COLOR_CODE>彩色文字§!
"This is regular text, §Rand this text is red§!"
将显示为 This is regular text, and this text is red。彩色部分可以嵌套:
"Regular text, §Rred text, §Bblue§! and back to red§!, and black"
将显示为 Regular text, red text, blue and back to red, and black。
以下条目可以组合使用,以产生所需的结果
% 将数值转换为百分比
$VAL|%$!
0.5 -> 50%
* 将数值转换为 SI 单位
$VAL|*$!
1000 -> 1K
1000000 -> 1M
= 若数值为正则在前面加上 '+',为负则加上 '-'
$VAL|=$!
10 -> +10
-10 -> -10
0..9 小数位数
$VAL|<1..9>$!
$VAL|3$!
10 -> 10.000
10.12345 -> 10.123
+ 数值为正时显示为绿色,为零时显示为黄色,为负时显示为红色
$VAL|+$!
10 -> 10
0 -> 0
-10 -> -10
- 数值为正时显示为红色,为零时显示为黄色,为负时显示为绿色
$VAL|-$!
10 -> 10
0 -> 0
-10 -> -10

例如,若要将一个定点数值转换为百分比并保留一位小数,且在其为正时显示为绿色,现在可以写作 $VAL|%2+$!。若要将一个数值显示为黄色、保留 3 位小数,并在其为正时加上 '+' 号,则可以写作 §=Y3$VAL$§! 等。

变量

我们可以通过几种方式来显示动态的本地化信息(例如省份的宗教)。

方括号命令

这是调用数据并在本地化中显示的更简洁、更新、更灵活的方式。它使用类似于事件修改中 作用域 的系统,不过请注意,它使用的是下文所列的一套独有的作用域。任何做过面向对象编程的人都会对它感到熟悉。

下面是一些示例——请注意游戏是如何从事件的 Root/From 出发,通过各级作用域,直至找到我们所需的信息的。

[Root.GetAdjective]

我们可以使用额外的作用域:

[FRA.Monarch.GetTitle]

与常规代码中的 FROM 不同,本地化命令允许叠加 From 作用域,以访问事件链中更早的部分:

[From.From.From.Owner.Monarch.GetHerHim]

作用域(区分大小写)

起始作用域 运算符 目标作用域 描述
- <国家标签> 国家 直接将作用域切换到某个国家(例如 FRA)
- <省份 ID> 省份 直接将作用域切换到某个省份(例如 1865)
- <事件目标> 国家、省份、单位 将作用域切换到被调用的事件目标(名称必须全部小写)
- Player 国家 本地玩家的国家作用域
- This 任意 THIS 作用域,通常与 Root 相同,但在例如 log 和 custom_tooltip 效果中很有用
- Root 任意 ROOT 作用域,即当前代码所在的位置
- From 任意 FROM 作用域,即调用当前代码的位置,或交互中的“另一方”。在链式调用可定制的本地化时,ROOT 将被 FROM 覆盖。
- FromFrom 任意
- Prev 任意 PREV 作用域,通常与 Root 相同,但在例如 log 和 custom_tooltip 效果中很有用
- Emperor 国家 (事件目标)切换到当前的神圣罗马帝国皇帝
- EmperorOfChina 国家 (事件目标)切换到当前的中国皇帝
国家 Monarch 角色 Ruler
国家 Heir 角色 Heir
国家 Consort 角色 Consort
国家 Adm_Advisor 角色 行政顾问
国家 Dip_Advisor 角色 外交顾问
国家 Mil_Advisor 角色 军事顾问
国家 Capital 省份 首都省份
国家 文化 文化 文化
国家 宗教 宗教 宗教
国家 ColonialParent 国家 殖民领的宗主国
国家 SecondaryReligion 宗教 宗教
国家 Overlord 国家 附属国的宗主国
省份 Owner 国家 省份的所有者
省份 文化 文化 文化
省份 NativeCulture 文化
省份 宗教 宗教 宗教
省份 OriginalReligion 宗教
省份 TradeCompany 贸易公司 贸易公司附属国
角色 王朝 王朝 统治者所属的王室
角色 文化 文化 文化
单位 Leader 角色
单位 Location 省份 单位当前所在的位置(移动中的单位视为位于出发省份)
- 触发条件 <触发条件名称> 进入一个特殊的触发条件作用域
触发条件 <触发条件名称> <触发条件值> 输出指定触发条件的目标值(位于自定义触发条件提示框内)

没有起点的作用域(如 Root)可用于开始本地化命令。

命令(区分大小写)

作用域 命令 描述 示例
- GetDateText 无需作用域,返回当前日期,格式为 dd <月份>(m) yyyy [GetDateText]
- GetDate 无需作用域,返回当前日期,格式为 yyyy.mm.dd [GetDate]
- GetYear 无需作用域,返回当前年份 [GetYear]
- GetMonth 无需作用域,返回当前月份 [GetMonth]
国家 GetTag 返回所在作用域的国家的 TAG(可与 @ 配合使用以显示国旗) @[Root.GetTag]
国家 GetName 国家名称 [ENG.GetName]
国家 GetAdjective

GetAdjectiveCap

国家形容词,例如 Spanish [SPA.GetName]
国家 GovernmentName 获取国家的政府名称(例如 Kingdom) [Root.GovernmentName]
国家 GetParliamentName 议会名称
国家 GetCult 当前生效的崇拜
国家 GetReligiousSchool 宗教学派
国家 GetReligiousSchoolCountryModifiers 输出该宗教学派的本地化修正
国家 GetRandomShipName 随机舰船名称
国家 GetFlagshipName 国家的旗舰名称 [Root.GetFlagshipName]
国家 GetLostFlagshipName
国家 Get<Estate>Name 获取当前国家及指定作用域下阶层的本地化名称。

使用阶层的本地化名称。(estate_church > 教士阶层)

[This.GetClergyName]

[This.GetNobilityName]

国家 GetCachedAgendasFlavorText [Root.GetCachedAgendasFlavorText]
国家 GetXEDip 仅限法语 :Permet d'accorder féminin ou masculin(用于配合阴性或阳性) excellent[Root.GetXEDip]
国家 GetErEreDip 仅限法语 :Permet d'accorder le mot 'conseiller'(用于配合“conseiller”一词) conseill[Root.GetErEreDip]
省份 GetName 省份名称 [This.GetName]
省份 GetCapitalName 获取省份的城市名称(例如 Paris) [From.Capital.GetCapitalName]
省份 GetAreaName 省份所属的区域 [This.GetAreaName]
省份 GetTradeGoodsName 省份所产 商品 的名称 [This.GetTradeGoodsName]
省份 GetRegionName 省份所属的地区 [This.GetRegionName]
省份 GetSuperRegionName 省份所属超级地区的名称 [Root.Capital.GetSuperRegionName]
省份 GetContinentName 省份所属的大陆 [Root.Capital.GetContinentName]
省份 GetColonialRegionName 省份所属的殖民地区 [22.GetColonialRegionName]
省份 GetTradeNodeName 省份所属的贸易节点 [Root.Capital.GetTradeNodeName]
省份 GetAdjective 省份形容词 [This.GetAdjective]
角色 GetName 角色名称
角色 GetTitle 例如 King、President(国王、总统)
角色 GetSheHe

GetSheHeCap

"he"/"she"(他/她)

"He"/"She"(首字母大写)

角色 GetHerHim

GetHerHimCap

"her"/"him"(她/他,宾格)

"Her"/"Him"(首字母大写)

角色 GetHerHis

GetHerHisCap

"her"/"his"(她的/他的)

"Her"/"His"(首字母大写)

角色 GetHersHis

GetHersHisCap

"hers"/"his"(她的/他的,名词性物主代词)

"Hers"/"His"(首字母大写)

角色 GetHerselfHimself

GetHerselfHimselfCap

"herself"/"himself"(她自己/他自己)

"Herself"/"Himself"(首字母大写)

角色 GetWomanMan "man"/"woman"(男人/女人)
角色 GetMotherFather "mother"/"father"(母亲/父亲)
角色 GetWifeHusband "wife"/"husband"(妻子/丈夫)
角色 GetDaughterSon "daughter"/"son"(女儿/儿子)
角色 GetSisterBrother "sister"/"brother"(姐妹/兄弟)
角色 GetStats 以 (adm/dip/mil) 格式输出君主能力值
角色 GetAdm

GetDip GetMil

行政能力

外交能力 军事能力

王朝 GetName 王朝名称
单位 GetName 单位名称
文化 GetName 文化名称,例如 English
文化 GetGroupName 文化组,例如 British
宗教 GetName 宗教名称,例如 Catholic
宗教 GetGroupName 宗教组,例如 Christian
宗教 GetCountryModifiers 输出该宗教的国家修正
宗教 GetProvinceModifiers 输出该宗教的省份修正
贸易公司 GetName 贸易公司名称
贸易公司 GetRegion 贸易公司所在地区
变量 GetName 输出变量名称
变量 GetValue 输出变量的值(若该作用域中未设置此变量,将产生错误)
事件作用域值 GetName 输出存储事件作用域值的变量名称
事件作用域值 GetCultureName 所存储文化的名称
事件作用域值 GetCultureGroupName 所存储文化所属组的名称
事件作用域值 GetReligionName 所存储宗教的名称
事件作用域值 GetReligionGroupName 所存储宗教所属组的名称

@TAG

@TAG(例如 @HAB)会显示该标签对应的国旗,可与 @[Root.GetTag] 及类似的本地化作用域配合使用。

键

游戏现有的本地化文件中出现了许多标量标识符。它们不太灵活,也不太美观,但只要作用域正确,我们就可以使用它们。

其中一些可能无法用于事件、任务等,因为它们需要通过游戏代码获得其他数据。

键 作用域 描述 示例值
$ADM$
$ARMY_REFORMER$ 顾问姓名
$ARMY_ORGANISER$ 顾问姓名
$ARTIST$ 顾问姓名
$BASE$
$CAPITAL$ 国家 显示 root 国家的首都省份 Île-de-France
$CAPITAL_CITY$ 国家 显示 root 国家的首都城市 Paris
$COLONIAL_GOVERNOR$ 顾问姓名
$COMMANDANT$ 顾问姓名
$CONTINENT$
$CONTROLLERNAME$ 省份 显示 root 省份的控制者(围城的胜利者) England
$COUNTRY$ 国家 显示 root 国家的名称 France
$COUNTRY_ADJ$ 国家 显示 root 国家的形容词 French
$COUNTRY_RELIGION$ 国家 显示 root 国家的宗教 Catholic
$CULTGROUP$ 文化组。不确定能否用于事件中
$CULTURE$ 国家 显示 root 国家的 primary_culture Francien
$DATE$
$DIPLOMAT$ 顾问姓名
$DYNASTY$ 国家 显示 root 国家统治者的王朝 Tudor
$EFFECTS$
$EMPERORNAME$ 显示中华帝国统治者的姓名
$FIRST$ 用于战争名称,显示 root 国家的名称
$FORTIFICATION_EXPERT$
$FROM$
$FROMCOUNTRY$
$FROM_COUNTRY$
$GRAND_CAPTAIN$ 顾问姓名
$HEIR$ Henry Tudor
$HEIR_ADJ$ 继承人的所有格形容词 his/her
$HEIR_CAP_ADJ$ 首字母大写的继承人所有格形容词 His/Her
$HEIR_DYNASTY
$HEIR_O_PRONOUN$ 继承人的宾格代词 him/her
$HEIR_CAP_O_PRONOUN$ 首字母大写的继承人宾格代词 Him/Her
$HEIR_S_PRONOUN$ 继承人的主格代词 he/she
$HEIR_CAP_S_PRONOUN$ 首字母大写的继承人主格代词 He/She
$INQUISITOR$ 顾问姓名
$KEY$
$LIKELYREBELS$ 省份
$LOCATION$
$LOYALNAMES$
$MASTER_OF_MINT$ 顾问姓名
$MESSENGER$
$MONARCH$ 国家 显示 root 国家统治者的姓名 Henry VIII
$MONARCHTITLE$ 国家 显示 root 国家统治者的头衔 King
$NAME$
$NAVY_REFORMER$ 顾问姓名
$NATION$
$NATURAL_SCIENTIST$ 顾问姓名
$NAVIGATOR$ 顾问姓名
$NCARDINALS$ 枢机的整数数量
$NUM$
$ORDER$ 用于战争名称,显示 1st、2nd、3rd 等序数 1st
$OVERLORD$ 国家 附属国的宗主之名
$OWNERNAME$
$PERYEAR$ 每年分离主义的减少量
$PLAYER$
$PRICE$
$PROV$
$PROVINCE$
$PROVINCECAPITAL$ 省份 显示 root 省份的首府城市 Paris
$PROVINCENAME$
$PROVINCECULTURE$ 省份 显示 root 省份的文化
$QUARTERMASTER$ 顾问姓名
$RANDOM_OLD_MONARCH$
$REBELNAME$
$RELIGION$
$RECRUITMASTER$ 顾问姓名
$RULER_ADJ$$
$SECOND$ 用于战争名称,显示目标国家的名称
$SPYMASTER$ 顾问姓名
$STATESMAN$ 顾问姓名
$THEOLOGIAN$ 顾问姓名
$TRADER$ 顾问姓名
$TREASURER$ 顾问姓名
$TYPE$
$UNIT$
$UNTIL$ 分离主义结束的年份
$VAL$
$WHO$
$YEAR$ 国家 显示当前年份 1444

替换本地化键

要替换原版本地化,请在 localisation 文件夹内创建一个名为 replace 的文件夹,并将包含你想替换的原版本地化键的本地化文件放入其中。你也可以像对待其他内容一样,通过 模组 来修改本地化。计算 校验和 时会忽略本地化。

文化省份名称

如果开启了“使用动态省份名称”,省份名称会根据当前所有者的文化,从 localisation 文件夹中的取值发生变化。这些名称列在 common/province_names 之下,每个标签、文化或文化组可以对应一个文件。每个文件包含一个列表,每一项由省份编号、等号以及 1 至 2 个带引号的名称构成。一个带引号的名称将替换省份名称;两个带引号的名称(以花括号括起)则以第一个作为省份名称,第二个作为省份首府名称。例如,来自 british.txt 的内容:

873 = "Astoria"
893 = { "New Orleans" "New Orleans" }
894 = "Ecore Fabre"
896 = "Grand River"
897 = { "Little Rock" "Little Rock" }
899 = { "Ozarks" "Springfield" }
908 = { "Minnesota" "St. Paul" }
910 = "Red Lake"
911 = { "Upper Peninsula" "Escanaba" }

将使用可用的最具体的名称。例如,编号为 282 的省份通常名为 Yedisan,1444 年由克里米亚拥有;如果被某个突厥国家拥有,它就叫 Hocabey;但如果被奥斯曼拥有,则叫 Özü,即使奥斯曼同样是突厥国家。

图标

图形图标通常通过用井号(£)包围文本键来插入,但也有一些例外(例如杜卡特图标)。

文本键指的是某个 .gfx 文件中定义的 spriteType 名称。

你应当可以使用任何 spriteType,但要注意你打算使用的图像尺寸应适合用于行内文本。

默认图标可在 interface/texticons.gfx 中找到

常用图标
类别 描述 键 图标
通用 “是”指示符 £yes£ Yes
“否”指示符 £no£ No
君主点数 行政点数 £adm£ Administrative power.png
外交点数 £dip£ Diplomatic power.png
军事点数 £mil£ Military power.png
资源
杜卡特 ¤ Gold Icon.png
人力 £icon_manpower£ Manpower Icon.png
水手 £icon_sailors£ Sailors.png
舰船 重型船只 £big_ship_icon_small£ Heavy ship.png
轻型船只 £light_ship_icon_small£ Light ship.png
桨帆船 £galley_icon_small£ Galley.png
运输船 £transport_icon_small£ Transport.png
陆军单位 步兵 £infantry_icon_small£ Infantry.png
骑兵 £cavalry_icon_small£ Cavalry.png
炮兵 £artillery_icon_small£ Artillery.png

导入/导出文本以进行翻译

要导出,请创建游戏 exe 的快捷方式。右键点击并选择属性,然后在目标末尾输入

-export_loc

。这将在游戏文件夹中创建一个名为 "customizable_localization" 的文件夹。现在可以打开并翻译这些文件。请将你的译文放入对应的语言列中。如果没有你所用的语言,可以重命名其他列之一。

如果你使用 Steam,则无需创建快捷方式,而是在 Steam 中右键点击 EU4 并选择属性。在“常规”选项卡上,点击“设置启动选项...”并输入上述内容。请记得之后将其移除,因为游戏在使用此选项时并不会真正启动。

要导入,请在刚刚创建的文件夹旁新建一个名为 localization_translated 的文件夹,并将你的文件放入其中。文件名开头必须带有 l_language(语言名称),并通过以下这行导入:

-import_loc

随后,你会在文档文件夹中得到一批文件,位于一个新建的名为

localization_import

的文件夹中。需要将这些文件复制并粘贴到游戏的 localization 文件夹中。当导出和导入都完成后,结构大致如下:

Modding localisation files.jpg

总而言之,如果你是将例如我们的英文文本翻译成另一种语言,就不必太在意格式,只需模仿我们所写的即可。如果你是在为自己的模组添加文本,则可能需要对前两个标题多加留意。

文档 效果 • 触发条件 • 修正列表 • 作用域 • 变量 • 本地化 • 可自定义本地化 • 运行文件 • 事件图片列表
脚本 脚本函数 • 顾问 • 时代 • 开局设定 • 建筑 • 宣战理由 • 殖民区域 • 国家创建 • 文化 • 决议 • Defines • 外交行动 • 灾难 • 中华帝国 • 阶层 • 事件 • 派系 • 政府 • 政府互动 • 伟大工程 • 历史 • 神圣罗马帝国 • 理念组 • 思潮 • 佣兵 • 任务树 • 修正 • On Actions • 议会 • 和约 • 君主性格 • 政策 • 叛军类型 • 宗教 • 附属国类型 • 科技 • 贸易公司 • 商品 • 单位
地图 地图 • 地图修改速查 • 随机新世界 • 贸易节点
图形 3D模型 • 界面 • 贴图库 • 字体 • 单位模型
音频 音乐 • 音效
其他 控制台命令 • 校验和 • 模组结构 • 故障排查 • 运行文件
工具 克劳塞维茨开局编辑器 • EU4模组编辑工具 • JoroDox模组制作工具 • The Validator
指南 省份 • 地图修改速查 • 存档编辑 • 脚本教程