GK2LocalizationAPI
Graveyard Keeper 2 Localization API is a shared localization library for Graveyard Keeper 2 mods, making it easier for mod authors to add multilingual support to their mods.
| Last updated | 5 hours ago |
| Total downloads | 13 |
| Total rating | 0 |
| Categories | Mods Libraries |
| Dependency string | Ice_Box_Studio_GK2-GK2LocalizationAPI-1.0.0 |
| Dependants | 1 other package depends on this package |
This mod requires the following mods to function
BepInEx-BepInExPack
BepInEx pack for Mono Unity games. Preconfigured and ready to use.
Preferred version: 5.4.2305README
Note: This description is bilingual. The Chinese section is provided below the English section.
说明:本描述为中英双语版本,中文内容位于英文内容下方。
Graveyard Keeper 2 Localization API (English)
Graveyard Keeper 2 Localization API is a shared localization library for Graveyard Keeper 2 mods, making it easier for mod authors to add multilingual support to their mods.
What This Mod Does
- Lets compatible mods load their own external JSON language files.
- Uses Graveyard Keeper 2's active language and refreshes registered mod text after a language change.
- Supports localized config sections, setting names, descriptions, dropdown values, ordering, and slider steps.
For Players
This mod is an API/dependency. It does not add gameplay features by itself.
Install it only when another mod lists Graveyard Keeper 2 Localization API as a requirement.
For Mod Authors
Example mods for reference: Graveyard Keeper 2 example mods
Reference GraveyardKeeper2LocalizationAPI.dll and add a hard BepInEx dependency:
using BepInEx;
using BepInEx.Configuration;
using GraveyardKeeper2LocalizationAPI.Api;
[BepInDependency(GraveyardKeeper2LocalizationAPI.PluginInfo.PLUGIN_GUID)]
public sealed class MyPlugin : BaseUnityPlugin
{
private void Awake()
{
Config.Bind("General", "Enabled", true, I18n.Localizer.Config("config.enabled", 10, "General", "config.general", 10));
LocalizationApi.LanguageChanged += OnLanguageChanged;
}
private static void OnLanguageChanged(string language)
{
// Refresh this mod's existing UI text here.
}
}
Load the JSON file from the directory containing your mod DLL. This also works with generated r2modman and mod-manager folder names:
using System.IO;
using System.Reflection;
using GraveyardKeeper2LocalizationAPI.Api;
internal static class I18n
{
private const string FileName = "MyMod.Localization.json";
private static readonly ModLocalizer _localizer = Load();
internal static ModLocalizer Localizer
{
get { return _localizer; }
}
internal static string Text(string key, params object[] args)
{
return _localizer.GetLocalizedText(key, args);
}
private static ModLocalizer Load()
{
string directory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
ModLocalizer localizer = LocalizationApi.For(PluginInfo.PLUGIN_GUID);
localizer.RegisterJson(Path.Combine(directory, FileName));
return localizer;
}
}
The Config call uses <key>.name and <key>.description. Enum and acceptable-list values use a normalized lowercase suffix, so SafeMode resolves to <key>.safe_mode automatically:
Config.Bind("General", "Mode", MyMode.SafeMode, I18n.Localizer.Config("config.mode", 20, "General", "config.general", 10));
Pass an AcceptableValueRange and sliderStep to declare a custom range-slider step in the same call:
Config.Bind("Display", "Scale", 100, I18n.Localizer.Config("config.scale", 10, "Display", "config.display", 20, new AcceptableValueRange<int>(50, 200), sliderStep: 5d));
Single JSON file example:
{
"en": {
"config.general": "General",
"config.enabled.name": "Enabled",
"config.enabled.description": "Enable this mod.",
"config.mode.name": "Mode",
"config.mode.description": "Select the operating mode.",
"config.mode.safe_mode": "Safe"
},
"zh_cn": {
"config.general": "常规",
"config.enabled.name": "启用",
"config.enabled.description": "启用此模组。",
"config.mode.name": "模式",
"config.mode.description": "选择运行模式。",
"config.mode.safe_mode": "安全"
}
}
Every localization file must contain an en object. If the current language or requested key is missing, the API tries en; if the key is still missing, it returns the key itself.
Supported Locale Codes
- English:
en - Chinese (Simplified):
zh_cn - French:
fr - German:
de - Portuguese (Brazil):
pt-br - Japanese:
ja - Korean:
ko - Polish:
pl - Russian:
ru - Spanish:
es - Turkish:
tr
Compatibility
- Game: Graveyard Keeper 2 (Unity Mono)
Bug Reports & Feature Suggestions
If you have any questions or feature suggestions, please submit them through GitHub Issues, contact me on Discord at iceboxcool, or email me at [email protected] or [email protected].
Graveyard Keeper 2 Localization API (中文)
守墓人2本地化 API 是一个面向守墓人2模组的共享本地化库,可帮助模组作者更轻松地为其模组添加多语言支持。
主要功能
- 让兼容模组加载各自独立的外置 JSON 语言文件。
- 读取守墓人 2 当前语言,并在语言切换后刷新已注册的模组文本。
- 支持配置分类、配置名称、说明、下拉选项值、排序和滑条步进。
给玩家
这是一个 API/依赖模组,本身不会添加玩法内容。
只有其他模组要求安装 Graveyard Keeper 2 Localization API 时才需要安装它。
给模组作者
参考例子模组:Graveyard Keeper 2 例子模组
在项目中引用 GraveyardKeeper2LocalizationAPI.dll,并添加 BepInEx 硬依赖:
using BepInEx;
using BepInEx.Configuration;
using GraveyardKeeper2LocalizationAPI.Api;
[BepInDependency(GraveyardKeeper2LocalizationAPI.PluginInfo.PLUGIN_GUID)]
public sealed class MyPlugin : BaseUnityPlugin
{
private void Awake()
{
Config.Bind("General", "Enabled", true, I18n.Localizer.Config("config.enabled", 10, "General", "config.general", 10));
LocalizationApi.LanguageChanged += OnLanguageChanged;
}
private static void OnLanguageChanged(string language)
{
// 在这里刷新模组已经创建的 UI 文本。
}
}
从模组 DLL 自己所在的目录加载 JSON。这样即使 r2modman 或其他模组管理器生成了不同的插件文件夹名,也能正确找到语言文件:
using System.IO;
using System.Reflection;
using GraveyardKeeper2LocalizationAPI.Api;
internal static class I18n
{
private const string FileName = "MyMod.Localization.json";
private static readonly ModLocalizer _localizer = Load();
internal static ModLocalizer Localizer
{
get { return _localizer; }
}
internal static string Text(string key, params object[] args)
{
return _localizer.GetLocalizedText(key, args);
}
private static ModLocalizer Load()
{
string directory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
ModLocalizer localizer = LocalizationApi.For(PluginInfo.PLUGIN_GUID);
localizer.RegisterJson(Path.Combine(directory, FileName));
return localizer;
}
}
Config 会读取 <key>.name 和 <key>.description。枚举和可接受值列表会自动把值转成小写下划线后缀,例如 SafeMode 会读取 <key>.safe_mode:
Config.Bind("General", "Mode", MyMode.SafeMode, I18n.Localizer.Config("config.mode", 20, "General", "config.general", 10));
传入 AcceptableValueRange 和 sliderStep,即可在同一行声明自定义范围滑条步进:
Config.Bind("Display", "Scale", 100, I18n.Localizer.Config("config.scale", 10, "Display", "config.display", 20, new AcceptableValueRange<int>(50, 200), sliderStep: 5d));
单 JSON 文件示例:
{
"en": {
"config.general": "General",
"config.enabled.name": "Enabled",
"config.enabled.description": "Enable this mod.",
"config.mode.name": "Mode",
"config.mode.description": "Select the operating mode.",
"config.mode.safe_mode": "Safe"
},
"zh_cn": {
"config.general": "常规",
"config.enabled.name": "启用",
"config.enabled.description": "启用此模组。",
"config.mode.name": "模式",
"config.mode.description": "选择运行模式。",
"config.mode.safe_mode": "安全"
}
}
每个语言文件都必须包含 en 对象。当前语言或目标 key 缺失时,API 会尝试 en;如果英语中仍缺少该 key,则直接返回 key 本身。
支持的语言代码
- 英语:
en - 简体中文:
zh_cn - 法语:
fr - 德语:
de - 葡萄牙语(巴西):
pt-br - 日语:
ja - 韩语:
ko - 波兰语:
pl - 俄语:
ru - 西班牙语:
es - 土耳其语:
tr
兼容性
- 游戏:守墓人 2(Unity Mono)
Bug 提交 & 新功能建议
如果你有任何问题或新功能建议,请通过 GitHub Issues 提交,也可以通过 Discord:iceboxcool,或邮箱 [email protected]、[email protected] 联系我。