User Tools

Site Tools


tutorial:lang

This is an old revision of the document!


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. 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.1563986898.txt.gz · Last modified: 2019/07/24 16:48 by fudge