Server-Side Translations
Server-Side Translations (SST) allow for dynamic text resolution with full MiniMessage support. This differs from standard Resource Pack-based translations, which are primarily suited for static client-side text like simple item names.
Preparing a localization file
To start, you need to create a localization file. This can be placed anywhere, such as within your plugin's resources folder or directly on the file system. Translation files require a .properties extension and must use standard Minecraft locale naming conventions (e.g., en_us.properties).
Using a translation key
You can resolve and use a translation key via one of two methods:
Through code: Using
Component.translatable("some.lang.key")Nested within properties: Embedding it inside another key:
some.other.key=Test <lang:some.lang.key>
Example: Creating a Join Message
For this example, we will create a dynamic join message that parses the joining player's name.
First, add the formatted string to your .properties file:
Next, intercept the PlayerJoinEvent and use Component.translatable to apply the key. [Refer to Events]
When you start the server and a player joins, the translated and formatted string will broadcast in chat.

Translation Providers
Translation Providers allow you to dynamically evaluate and resolve a translation key based on specific context, such as the player involved or the item being held. AbyssalLib provides two main types:
GlobalTranslationProviderItemTranslationProvider
Using a GlobalTranslationProvider
Global providers evaluate keys server-wide. To create one, implement the interface and define your resolution logic.
Once your class is set up, register it on startup: ServerTranslator.registerGlobalProvider(new ExampleProvider());
Using an ItemTranslationProvider
Item Translation Providers work similarly but are evaluated contextually based on an ItemStack. While you can register these globally, you can also define "local" Translation Providers directly inside your custom Item classes.
For this example, we will add a dynamic lore line to the FireSword and HitCounter components created in Custom Item Interactions and Custom Data Components respectively.
Now, load into the game and hit an entity. The tooltip will dynamically update its hit count using the provider.