

A Resonite mod that Loads locale files for Plugins.
ResoniteModding-BepisLocaleLoader-1.0.0.zip) from the Releases page.plugins folder to your BepInEx folder in your Resonite installation directory:
C:\Program Files (x86)\Steam\steamapps\common\Resonite\BepInEx\You can add locale to a config entry by adding a ConfigLocale in your ConfigDescription like this:
private static ConfigEntry<bool> exampleConfigItem;
public override void Load()
{
exampleConfigItem = Config.Bind("General", "exampleConfigItem", false, new ConfigDescription("exampleConfigItem Description", null, new ConfigLocale("Settings.dev.author.myPlugin.General.exampleConfigItem", "Settings.dev.author.myPlugin.General.exampleConfigItem.Description")));
}
Or you can use the ConfigLocaleHelper class which provides the BindLocalized extension method like this:
private static ConfigEntry<bool> exampleConfigItem;
public override void Load()
{
// Generates the following locale keys:
// Name: "Settings.dev.author.myPlugin.General.exampleConfigItem"
// Description: "Settings.dev.author.myPlugin.General.exampleConfigItem.Description"
exampleConfigItem = Config.BindLocalized("dev.author.myPlugin", "General", "exampleConfigItem", false, "exampleConfigItem Description");
// NOTE: If you are using the ResoniteModding plugin template you can use `PluginMetadata.GUID` instead of `"dev.author.myPlugin"`
}
When defining config entries with locale, it's still recommended to provide the entry's english description ("exampleConfigItem Description" in this case), as this will be visible when editing the config file manually or via mod managers.
You can register a single localized string in code with:
LocaleLoader.AddLocaleString(
"Settings.BepInEx.Core.Config",
"Reset Configuration",
force: true,
authors: "YourName"
);
rawString → The key used to look up the string.localeString → The localized text to display.force → If true, always overwrites existing entries.authors → Optional, comma-separated string of authors. Defaults to plugin authors or "BepInEx".Place a Locale folder next to your plugin DLL (e.g. MyPlugin/Locale/en.json).
Files should follow the LocaleData JSON structure:
{
"localeCode": "en-US",
"authors": ["MyName"],
"messages": {
"Settings.dev.author.myPlugin": "My Plugin",
"Settings.dev.author.myPlugin.Breadcrumb": "My Plugin Settings Breadcrumb Title",
"Settings.dev.author.myPlugin.config.Key": "Example Config Key",
"Settings.dev.author.myPlugin.config.Description": "Example Config Description."
}
}
.T()To make localization calls cleaner, LocaleLoader defines extension methods .T() that wrap AsLocaleKey and LocaleString.
Examples:
// Basic key lookup
"Settings.MyPlugin.Option".T();
// Key with formatting arguments
"Settings.MyPlugin.Welcome".T("Hello {name}!", "name", userName);
// Multiple arguments
"Settings.MyPlugin.Stats".T(
("kills", killCount),
("deaths", deathCount)
);
// With format string
"Settings.MyPlugin.Formatted".T("{kills}/{deaths}",
("kills", killCount),
("deaths", deathCount)
);
// Continuous locale updates (useful for dynamic UI)
"Settings.MyPlugin.Timer".T(
continuous: true,
arguments: new Dictionary<string, object> { { "time", elapsedTime } }
);
force: trueforce: false (default) when you want to avoid overwriting existing locales (safe for mods adding only new keys).force: true when your plugin should override existing translations (e.g. testing, fixes, or ensuring your text is applied).LocaleLoader.PluginsWithLocales.