Table of Contents

Traductions

Avez-vous remarqué que le nom de votre objet (item) suit la forme item.tutoriel.mon_objet ? C'est parce que le nom de votre objet (item) n'a pas de traduction dans la langue choisie en jeu. Les traductions sont un moyen de supporter différents langages pour un seul texte.

Créer un fichier lang

Vous pouvez utiliser les fichier lang pour permettre au jeu de traduire du texte. Pour cela vous aurez besoin de créer un fichier approprié pour votre langage– pour trouver l'identifiant de votre langage, visitez ce lien. L'identifiant du français étant fr_fr. Une fois que vous avez l'identifiant de votre langage, créez un fichier JSON dans le dossier resources/assets/modid/lang/; Un exemple complet pour un fichier de traduction en français serait resources/assets/tutorial/lang/fr_fr.json.

Ajouter une traduction

Une fois votre fichier lang créé, vous pouvez utiliser ce template pour ajouter des traductions :

resources/assets/tutoriel/lang/fr_fr.json
{
  "item.tutoriel.mon_objet": "Mon Objet",
  "item.tutoriel.mon_super_objet": "Mon Super Objet",
  [...]
}

où la première chaîne de caractères correspond à n'importe quel texte traduisible (comme le nom d'un item ou la classe TranslatableTextContent). Si vous suivez ce tutoriel en temps réel, n'oubliez pas de changer modid par `tutoriel`, ou l'identifiant de votre mod.

Ajouter du texte traduisible customisé

Dès lors qu'une fonction accepte une classe Text, vous avez l'option de lui donner un new LiteralTextContent(), ce qui signifie que Minecraft va utiliser cette chaîne de caractères telle qu'est est donné dans l'argument du constructeur. Cependant, ce n'est pas une méthode recommandée car il sera difficile de le traduire dans un autre langage, si vous désirez le faire. C'est pour cela que vous pouvez alors donner un new TranslatableTextContent() avec une clé de traduction comme paramètre, pour ensuite l'utiliser dans votre fichier lang pour le traduire. Par exemple, pour ajouter une description à votre objet (item), il faut faire :

@Override
public void appendTooltip(ItemStack itemStack, World world, List<Text> tooltip, TooltipContext tooltipContext) {
    tooltip.add(new TranslatableTextContent("item.tutoriel.mon_objet.description"));
}

Puis dans le fichier de traduction :

resources/assets/tutoriel/lang/fr_fr.json
{
  "item.tutoriel.mon_objet.description": "Description de mon objet"
}

Ainsi la description de l'objet (item) affichera : “Description de mon objet” !

Ajouter des valeurs dynamiques à votre texte

Disons que vous voulez que votre texte change en fonction d'une variable, comme par exemple le jour et le mois actuel. Pour un nombre dynamique, on utilise %d à l'endroit où on veut qu'un nombre soit visible dans l'entrée du fichier lang, comme par exemple :

resources/assets/tutoriel/lang/fr_fr.json
{
  "item.tutoriel.mon_objet.description": "Ma description montre le jour %d, et le mois %d" 
}

Et maintenant, on donne ces valeurs à notre texte pour qu'il puisse apparaître dans le texte. En premier le jour, puis le mois :

int jour = 4;
int mois = 7;
tooltip.add(new TranslatableTextContent("item.tutoriel.mon_objet.description", jour, mois));

La description va maintenant afficher “Ma description montre le jour 4, et le mois 7”. Pour donner une chaîne de caractères, il suffit de mettre %s au lieu de %d. Si vous voulez littéralement afficher %, il suffit d'utiliser %%. Pour plus d'informations, vous pouvez vous référer avec Java String.format (qui fonctionne de la même manière).

Ajouter une nouvelle ligne

Utiliser \n était bien trop difficile pour Mojang, alors pour avoir plusieurs ligne dans une chaîne de caractères vous devez séparer la clé de traduction en plusieurs clés :

resources/assets/tutoriel/lang/fr_fr.json
{
  "item.tutoriel.mon_objet.description_1": "Ligne 1 de ma description", 
  "item.tutoriel.mon_objet.description_2": "Ligne 2 de ma description" 
}

Et maintenant vous pouvez ajouter les parties TranslatableTextContent individuellement :

tooltip.add(new new TranslatableTextContent("item.tutoriel.mon_objet.description_1"));
tooltip.add(new new TranslatableTextContent("item.tutoriel.mon_objet.description_2"));
La description va maintenant afficher :

Ligne 1 de ma description
Ligne 2 de ma description

Formattage des clés de traduction

Les clés de traduction sont enregistrés sous la forme <type-objet>.<namespace>.<chemin> (Le namespace et le chemin doivent être définis par un Identifier enregistré).

Type d'objet Format Exemple
Block block.<namespace>.<chemin> “block.tutoriel.mon_bloc”: “Mon Bloc”
Item item.<namespace>.<chemin> “item.tutoriel.mon_objet”: “Mon Objet”
ItemGroup itemGroup.<namespace>.<chemin> “itemGroup.tutoriel.mon_groupe”: “Mon Groupe”
Fluid fluid.<namespace>.<chemin>
SoundEvent sound_event.<namespace>.<chemin>
StatusEffect effect.<namespace>.<chemin>
Enchantment enchantment.<namespace>.<chemin>
EntityType entity.<namespace>.<chemin>
Biome biome.<namespace>.<chemin>
Stat stat.<namespace>.<chemin>

Pour les types non présents dans cette liste, voir net.minecraft.registry.Registry.