You are viewing a potentially older version of this package. View all versions.
Faeryn-LocalizationExtension-1.1.1 icon

LocalizationExtension

Allows modders to provide localization for their mods using the game's localization system, and also to localize other mods without changing them.

Date uploaded 12 months ago
Version 1.1.1
Download link Faeryn-LocalizationExtension-1.1.1.zip
Downloads 886
Dependency string Faeryn-LocalizationExtension-1.1.1

This mod requires the following mods to function

BepInEx-BepInExPack_Outward-5.4.18 icon
BepInEx-BepInExPack_Outward

BepInEx pack for Outward.

Preferred version: 5.4.18

README

LocalizationExtension

Allows modders to provide localization for their mods using the game's localization system.

If you are not a mod developer, you can most likely ignore this mod.
The only exception is if you are manually installing mods (instead of using the Thunderstore mod manager) in which case download this mod and put it into your BepInEx plugins folder.

SideLoader compatibility

SideLoader already has its own localization table patcher, and it does not support different languages. My current workaround to that is not perfect, you may have to restart the game after changing language.

Usage

General usage

Add this mod as dependency to your mod's Thunderstore manifest.
Example:

"dependencies": [
    "BepInEx-BepInExPack_Outward-5.4.18",
    "Faeryn-LocalizationExtension-1.1.1"
]

Add one or more language files to your mod's lang folder (you will have to create it).
The files should be in the following format: languagekey.ext, where

  • languagekey is one of the game's supported languages: English, French, German, Italian, Spanish, zeChinese, zeJapanese, zeKorean, zePolish, zePortuguese, zeRussian, zeTurkish
  • ext is the extension, currently only cfg is supported.

Example:

MyMod.zip
|- plugins
|  |- MyMod.dll
|  -- lang
|     |- English.cfg
|     |- Spanish.cfg
|     -- French.cfg
|- icon.png
|- manifest.json
-- README.md

The contents of a cfg file is a list of key-value pairs separated by =. Keys are WITHOUT your mod's GUID. For example:

some.key=Some Value
some.key.with_parameter=Some Key With {1} Parameter {2}

Empty lines and lines starting with # or ; are ignored so you can also add comments.

*Note: Parameter numbering starts from 1, not 0. *

Then you can use the game's localization manager for texts in your mod, like so:

LocalizationManager.Instance.GetLoc($"{YourMod.GUID}.some.key");

Or with parameters:

LocalizationManager.Instance.GetLoc($"{YourMod.GUID}.some.key.with_parameter", "param1", "param2");

In case you don't provide a language file for each language, you should also add a file named default.txt into the lang folder containing the name of your fallback language (which will be used for unsupported languages). Default is English if the file is missing.

Items and skills

For item and skill localization, the key should be in the following format:

/item/[itemID]/name
/item/[itemID]/description

Where [itemID] is the ID of the item or skill in question. Note that this will override the name and description specified in the SideLoader item definition.
Example:

/item/-1234567/name=Example Item
/item/-1234567/description=An item that serves as a good example

Enchantments

Enchantments added by SideLoader require the following key format:

/Enchantment_[enchantmentID]
/DESC_Enchantment_[enchantmentID]

Where [enchantmentID] is the ID of the enchantment in question. Note that this will override the name and description specified in the SideLoader enchantment definition.

Example:

/Enchantment_-1234567=Example Enchantment
/DESC_Enchantment_-1234567=This is an example enchantment

Status effects

Status effects added by SideLoader require the following key format:

/NAME_[StatusIdentifier]
/DESC_[StatusIdentifier]

Where [StatusIdentifier] is the StatusIdentifier of the status effect in question (defined in the TargetStatusIdentifier field). Note that this will override the name and description specified in the SideLoader status effect definition.

Example:

/NAME_ExampleStatusEffect=Example Status Effect
/DESC_ExampleStatusEffect=A good example

Overriding built-in localization entries

By default, general localization entries are prefixed by mod GUID. If you, for some reason, need to override existing entries, then the / prefix can be used. For example:

/examplekey

This will override the general localization entry examplekey.
Note: Currently this works reliably only for vanilla Outward entries, unless noted. Overriding other mods' entries may or may not work.

Localization of other mods

It is possible to localize other SideLoader mods that do not use LocalizationExtension. Only items and enchantments can be localized this way, using the aforementioned override mechanism.
If the target mod uses LocalizationExtension, then the additional languages will be added seamlessly. Trying to override existing languages (for example the original mod has German language support, and you are also adding a German language file) may or may not work.

Simply create a mod, as described in the General usage section while excluding the mod dll (or any SideLoader resource):

ModName_Localization.zip
|- plugins
|  -- lang
|     |- English.cfg
|     |- Spanish.cfg
|     -- French.cfg
|- icon.png
|- manifest.json
-- README.md

In the manifest file include the original mod too, as dependency:

"dependencies": [
    "BepInEx-BepInExPack_Outward-5.4.18",
    "Faeryn-LocalizationExtension-1.1.1",
    "OtheMod-OtherAuthor-1.0.0"
]

This way your mod will be compatible with the original mod even as new versions are released, since you are only patching the localization tables.

Note: It's a good idea to distinguish your localization mod from the original, for example by adding your language suffix to the name "OtherMod_SP", and making sure the description is clear about the fact that this is only a localization patch, NOT the full mod.

Planned features

  • Support for Dialog localization
  • Support for json and xml language file formats
  • Ability to localize mods by direct text matching

Changelog

1.1.1

  • Fix for vanilla overrides

1.1.0

  • Item localization
  • Enchantment localization
  • Support for SideLoader mods
  • Allow comments in cfg (# or ;)
  • Ability to override vanilla Outward entries (/ prefix)

1.0.0

  • Initial release