HOI4 uses the modified YAML localization system used by modern Paradox games.
Basics
The basic format is as follows:
l_<language>: <key>: "Text here"
Spaces can be omitted.
Typically you will want to use l_english. The key refers to the script name of the object you are localizing.
The advanced format is as follows:
l_<language>: <key>:<number> "Text here"
Here is an example of a localized equipment:
l_english: infantry_equipment: "Infantry Equipment" infantry_equipment_short: "Inf. Eq." infantry_equipment_desc: "This is infantry equipment"
You must follow the syntax exact when adding localization, otherwise the parser will break and you will have broken localization.
The .yml format is a simple text file, to save as it simply save as All types and type in the .yml suffix.
Make sure the .yml file is encoded as UTF-8-BOM. This is easy to check and to change in Notepad++ or other similar programs.
Special characters
Quote
Quote characters in text will be interpreted as part of the file if they are not escaped properly.
l_english: example_key: "This is "my quote" within a string."
This example would not be read correctly, as the parser would treat the second quote mark as the end of the string.
To avoid this, escape the quote mark with the \ character.
l_english: example_key: "This is \"my quote\" within a string."
In-game, the \ character will not be visible.
New line
You may want to force a string to display with a line break. To do this, include the \n character where you want the line break.
l_english: example_key: "This is line 1\nThis is line 2\nThis line 3."
Formatting characters
Various characters can be added to a string to alter its presentation ingame.
The following formatting characters are implemented:
| Code | Effect |
|---|---|
| §% | Converts following value to percent. |
| §* | Converts following value to SI units. |
| §= | Prefixes following value with + if the value is positive or - if it is negative. |
| §0..9 | Controls the number of decimals to display. |
| §W | Colors the text white. |
| §G | Colors the text green. |
| §R | Colors the text red. |
| §B | Colors the text blue. |
| §Y | Colors the text yellow. |
| §b | Colors the text black. |
| §C | Colors the text light blue (cyan). |
| §g | Colors the text gray. |
| §T | Colors the text turquoise. |
| §l | Colors the text lime green. |
| §H | Colors the text yellow (same as §Y). |
| §O | Colors the text orange. |
| §+ | Colors the following value green if positive, yellow if zero, red if negative. |
| §- | Colors the following value red if positive, yellow if zero, green if negative. |
| §! | Ends the current formatting rule. |
Here is an example of the color formatting:
l_english: example_key: "This is my text, §Bthis text is blue§!, and §Rthis text is red§!"
Formatting variables
When formatting variables instead of regular strings, the formatting character are added at the end after a | like so:
[?party_popularity@democracy|%G0]
The resulting localization depicts the current scope's democratic popularity as a percentage (%), in green (G), rounded to 0 (0)
Text icons
Icons can be displayed within strings using the £ notation.
l_english: example_key: "£army_experience"
Text icons are defined in the texticons.gfx file by default, although new ones can be added in any .gfx file.
Overwriting Strings
Sometimes you don't want to create new localisations, but rather overwrite the original ones in the base game. Creating a file in the localisation folder may not result in every string being overwritten, so instead you must create a subfolder in the localisation folder named "replace" (It MUST to be named replace, no other subfolders will be recognized). Inside this subfolder you can put the file with the strings you wish to rewrite. (E.G, if you want to rename the parties of a country, you would create a file named new_parties.yml and place it inside of the replace folder which is inside of the localisation folder)
Namespaces
In specific contexts, such as events, it is possible to use namespace localization. This operates using the scopes with special functions in an object-oriented manner.
l_english: example_key: "[Root.GetName]"
This would grab the name of the ROOT scope and display it as the string.
It is possible to string scopes together:
l_english: example_key: "[From.Owner.GetName]"
This would grab the name of the OWNER (country) scope of the FROM (province) scope for the current ROOT (country) scope, and display it as the string.
Another example would be getting the capital:
l_english: example_key: "[Root.Capital.GetName]"
You can use country tags:
l_english: example_key: "[HUN.GetRulingParty]"
You can use event targets:
l_english: example_key: "[was_attacked.GetName]"
Possible Scopes are:
- Owner
- Capital
- Root
- From
- Prev
Functions
- GetName
- GetNameDef
- GetAdjective
- GetAdjectiveCap
- GetLeader
- GetRulingParty
- GetRulingIdeology
- GetRulingIdeologyNoun
- GetPartySupport
- GetLastElection
- GetManpower
- GetFactionName
- GetFlag
- GetNameWithFlag
- GetCommunistParty
- GetDemocraticParty
- GetFascistParty
- GetNeutralParty
- GetDateText
- GetDateString
- GetDateStringShortMonth
- GetDateStringNoHour
- GetDateStringNoHourLong
- GetYear
- GetHerselfHimself
- GetHerHis
- GetSheHe
- GetSheHeCap
- GetRank
- GetManchuriaPuppet
- GetID
- GetTag
| 文件 | 效果 • 条件 • 定义 • 修正 • 修正列表 • 作用域 • 本地化 • on action • 数据结构 (标记, 临时标记, 国家别名, 变量, 数组) |
| 脚本 | 成就修改 • AI修改 • AI focuses • 自治领修改 • 权力平衡修改 • 剧本/标签 (游戏规则)• 建筑修改 • 人物修改 • 修饰性TAG修改 • 国家创建 • 军队修改 • 决议制作 • 装备修改 • 事件修改 • Idea修改 • 意识形态修改 • 军工商修改 • 国策制作 • 资源修改 • Scripted GUI • 科技制作 • 单位修改 |
| 地图 | 地图 • 省份 • 补给区域 • 战略区域 |
| 图形图像 | 界面 • 图形资产 • 实体模型 • 后期特效 • 粒子效果 • 字体 |
| 装饰性 | 肖像 • 命名列表 • 音乐包制作 • 音效 |
| 其他 | 控制台指令 • 故障排除 • 模组结构 • 成就代码分析 • Mod相关 • Nudger修改 |