User Tools

Site Tools


Sidebar

Setup

Basics

Items and Item Groups

Blocks and Block Entities

Entities

World Generation

Miscellaneous

Advanced

Documentation

Examples


Fabric Сontributors

If you'd like to contribute to Fabric, you might be interested in these links:


Extremely Strange People


Wiki Meta

  • Wiki Meta - Starting point for contributing to the wiki
  • Wiki Agenda - See what is on the current agenda, and what other contributors are currently working on.
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 TranslatableText). 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 LiteralText(), 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 TranslatableText() 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) {
    tooltip.add(new TranslatableText("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;
tooltip.add(new TranslatableText("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 TranslatableText parts individually:

tooltip.add(new TranslatableText("item.tutorial.fabric_item.tooltip_1"));
tooltip.add(new TranslatableText("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>.<modid>.<registry-id>
Object Type Format Example
Block
block.<modid>.<registry-id>
"block.tutorial.example_block": "Example Block"  
Item
 item.<modid>.<registry-id> 
 "item.tutorial.my_item": "My Item"
ItemGroup
 itemGroup.<modid>.<registry-id>
 "itemGroup.tutorial.my_group": "My Group"
Fluid
 fluid.<modid>.<registry-id> 
SoundEvent
 sound_event.<modid>.<registry-id> 
StatusEffect
 mob_effect.<modid>.<registry-id> 
Enchantment
 enchantment.<modid>.<registry-id> 
EntityType
 entity_type.<modid>.<registry-id> 
Potion
 potion.<modid>.<registry-id> 
Biome
 biome.<modid>.<registry-id> 

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

tutorial/lang.txt · Last modified: 2019/07/24 17:13 by fudge