User Tools

Site Tools


Sidebar

← Go back to the homepage

Fabric Tutorials

Setup

Basics

These pages are essential must-reads when modding with Fabric, and modding Minecraft in general, if you are new to modding, it is recommended you read the following.

Items

Blocks and Block Entities

Data Generation

World Generation

Commands

These pages will guide you through Mojang's Brigadier library which allows you to create commands with complex arguments and actions.

Events

These pages will guide you through using the many events included in Fabric API, and how to create your own events for you or other mods to use.

Entities

Fluids

Mixins & ASM

These pages will guide you through the usage of SpongePowered's Mixin library, which is a highly complex topic. We recommend you read these pages thoroughly.

Miscellaneous

Yarn

Contribute to Fabric

tutorial:lang

Name translations

Notice how your item has a weird display name, such as item.tutorial.my_item? This is because your item's name doesn't have a translation in your game's selected language. Translations are used to support multiple different languages for a single string.

Creating a lang file

You can use lang files to provide translations for translatable strings in-game. You'll need to create a file with an appropriate file name for your language– to find your languages' code, visit this link. English is en_us. Once you have your language code, create a JSON file at resources/assets/modid/lang/; a full example for an English translation file would be resources/assets/tutorial/lang/en_us.json.

Adding a translation

After you've created the lang file, you can use this basic template to add translations:

resources/assets/tutorial/lang/en_us.json
{
  "item.tutorial.my_item": "My Item",
  "item.tutorial.my_awesome.item": "My Awesome Item",
  [...]
}

where the first string is any translatable string (such as an item name, or TranslatableTextContent). If you're following along in the wiki tutorial, remember to change modid to `tutorial`, or whatever modid you've chosen.

Using custom translatable text

Whenever a function accepts Text, you have the option of giving it a new LiteralTextContent() or Text.literal() (for versions since 1.19), which means minecraft will use the string in the constructor argument as-is. However, this is not advisable because that would make it difficult to translate that text to another language, should you wish to do that. This is why whenever a Text object is needed, you should give it a new TranslatableTextContent() or Text.translatable with a translation key, and then translate the key in the lang file. For example, when adding a tooltip, do:

@Override
public void appendTooltip(ItemStack itemStack, World world, List<Text> tooltip, TooltipContext tooltipContext) {
    // 1.18.2 and before
    tooltip.add(new TranslatableTextContent("item.tutorial.fabric_item.tooltip"));
 
    // 1.19 and later
    tooltip.add(Text.translatable("item.tutorial.fabric_item.tooltip"));
}

And then add in the lang file:

resources/assets/tutorial/lang/en_us.json
{
  "item.tutorial.fabric_item.tooltip": "My Tooltip"
}

And the tooltip will be displayed as “My Tooltip”!

Adding dynamic values to translatable text

Say you want the text to change based on some variable, like the current day and month. For a dynamic number, we put a %d where you want the number to show in the lang entry value, for example:

resources/assets/tutorial/lang/en_us.json
{
  "item.tutorial.fabric_item.tooltip": "My Tooltip in day %d, and month %d" 
}

Then we pass the variables we use in our string by the order it appears in the text. First the day, then the month:

int currentDay = 4;
int currentMonth = 7;
 
// 1.18.2 and before:
tooltip.add(new TranslatableTextContent("item.tutorial.fabric_item.tooltip", currentDay, currentMonth));
 
// 1.19 and later:
tooltip.add(Text.translatable("item.tutorial.fabric_item.tooltip", currentDay, currentMonth));

And the tooltip will be displayed as “My Tooltip in day 4, and month 7”. In order to pass a string, we use %s instead of %d. If you want for it to literally show %, use %%. For more information, see Java String.format (it works the same way).

Adding a new line

Making \n work was far too difficult for Mojang, so in order to have a string with multiple lines you must split the translation key into multiple keys:

resources/assets/tutorial/lang/en_us.json
{
  "item.tutorial.fabric_item.tooltip_1": "Line 1 of my tooltip", 
  "item.tutorial.fabric_item.tooltip_2": "Line 2 of my tooltip" 
}

Then add the TranslatableTextContent parts individually:

// 1.18.2 and below:
tooltip.add(new TranslatableTextContent("item.tutorial.fabric_item.tooltip_1"));
tooltip.add(new TranslatableTextContent("item.tutorial.fabric_item.tooltip_2"));
 
// 1.19 and later
tooltip.add(Text.translatable("item.tutorial.fabric_item.tooltip_1"));
tooltip.add(Text.translatable("item.tutorial.fabric_item.tooltip_2"));
And the tooltip will be displayed as:

Line 1 of my tooltip
Line 2 of my tooltip

Translation format

The translation key for objects you have registered is in the form <object-type>.<namespace>.<path> (namespace and path as defined by the registered Identifier).

Object Type Format Example
Block block.<namespace>.<path> “block.tutorial.example_block”: “Example Block”
Item item.<namespace>.<path> “item.tutorial.my_item”: “My Item”
ItemGroup itemGroup.<namespace>.<path> “itemGroup.tutorial.my_group”: “My Group”
Fluid fluid.<namespace>.<path>
SoundEvent sound_event.<namespace>.<path>
StatusEffect effect.<namespace>.<path>
Enchantment enchantment.<namespace>.<path>
EntityType entity.<namespace>.<path>
Biome biome.<namespace>.<path>
Stat stat.<namespace>.<path>

For types not in this list, see net.minecraft.registry.Registry.

tutorial/lang.txt · Last modified: 2022/05/27 15:55 (external edit)