Ice_Box_Studio_GK2-GK2LocalizationAPI icon

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-5.4.2305 icon
BepInEx-BepInExPack

BepInEx pack for Mono Unity games. Preconfigured and ready to use.

Preferred version: 5.4.2305

README

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].


If you enjoy my mods, feel free to support me! / 如果你喜欢我的模组,请支持我一下吧!

Ko-fi   爱发电

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] 联系我。