Skip to content

Commit 489e32e

Browse files
feat(i18n): add locale-aware infrastructure for per-player translations
Add I18n.lore/dialogueLines locale overloads, HypixelPlayer.sendTranslated(), TranslatableItemStackCreator, ViewConfiguration.translatable(), and locale-aware HypixelNPC.DialogueSet.ofTranslation overloads.
1 parent facc29b commit 489e32e

5 files changed

Lines changed: 104 additions & 0 deletions

File tree

type.generic/src/main/java/net/swofty/type/generic/entity/npc/HypixelNPC.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,12 @@
1818
import net.swofty.type.generic.event.custom.NPCInteractEvent;
1919
import net.swofty.type.generic.i18n.I18n;
2020
import net.swofty.type.generic.user.HypixelPlayer;
21+
import org.jetbrains.annotations.Nullable;
2122
import org.tinylog.Logger;
2223

2324
import java.util.ArrayList;
2425
import java.util.List;
26+
import java.util.Locale;
2527
import java.util.Map;
2628
import java.util.Random;
2729
import java.util.UUID;
@@ -285,5 +287,25 @@ public static DialogueSet ofTranslation(String key, String translationKey, Map<S
285287
public static DialogueSet ofTranslation(String key, String translationKey, Map<String, String> placeholders, Sound sound) {
286288
return new DialogueSet(key, I18n.dialogueLines(translationKey, placeholders), sound);
287289
}
290+
291+
public static DialogueSet ofTranslation(String key, String translationKey, @Nullable HypixelPlayer player) {
292+
Locale locale = player != null ? player.getLocale() : Locale.US;
293+
return new DialogueSet(key, I18n.dialogueLines(translationKey, locale), null);
294+
}
295+
296+
public static DialogueSet ofTranslation(String key, String translationKey, @Nullable HypixelPlayer player, Sound sound) {
297+
Locale locale = player != null ? player.getLocale() : Locale.US;
298+
return new DialogueSet(key, I18n.dialogueLines(translationKey, locale), sound);
299+
}
300+
301+
public static DialogueSet ofTranslation(String key, String translationKey, @Nullable HypixelPlayer player, Map<String, String> placeholders) {
302+
Locale locale = player != null ? player.getLocale() : Locale.US;
303+
return new DialogueSet(key, I18n.dialogueLines(translationKey, locale, placeholders), null);
304+
}
305+
306+
public static DialogueSet ofTranslation(String key, String translationKey, @Nullable HypixelPlayer player, Map<String, String> placeholders, Sound sound) {
307+
Locale locale = player != null ? player.getLocale() : Locale.US;
308+
return new DialogueSet(key, I18n.dialogueLines(translationKey, locale, placeholders), sound);
309+
}
288310
}
289311
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package net.swofty.type.generic.gui.inventory;
2+
3+
import net.minestom.server.entity.PlayerSkin;
4+
import net.minestom.server.item.ItemStack;
5+
import net.minestom.server.item.Material;
6+
import net.swofty.type.generic.i18n.I18n;
7+
import net.swofty.type.generic.user.HypixelPlayer;
8+
9+
import java.util.List;
10+
import java.util.Locale;
11+
import java.util.Map;
12+
13+
public class TranslatableItemStackCreator {
14+
15+
public static ItemStack.Builder getStack(HypixelPlayer p, String nameKey, Material mat, int amt, String loreKey) {
16+
Locale l = p.getLocale();
17+
return ItemStackCreator.getStack(I18n.string(nameKey, l), mat, amt, I18n.lore(loreKey, l));
18+
}
19+
20+
public static ItemStack.Builder getStack(HypixelPlayer p, String nameKey, Material mat, int amt, String loreKey, Map<String, String> ph) {
21+
Locale l = p.getLocale();
22+
return ItemStackCreator.getStack(I18n.string(nameKey, l), mat, amt, I18n.lore(loreKey, l, ph));
23+
}
24+
25+
public static ItemStack.Builder getStack(HypixelPlayer p, String nameKey, Material mat, int amt, List<String> lore) {
26+
Locale l = p.getLocale();
27+
return ItemStackCreator.getStack(I18n.string(nameKey, l), mat, amt, lore);
28+
}
29+
30+
public static ItemStack.Builder getStack(HypixelPlayer p, String nameKey, Material mat, int amt) {
31+
Locale l = p.getLocale();
32+
return ItemStackCreator.getStack(I18n.string(nameKey, l), mat, amt);
33+
}
34+
35+
public static ItemStack.Builder getStackHead(HypixelPlayer p, String nameKey, String texture, int amt, String loreKey) {
36+
Locale l = p.getLocale();
37+
return ItemStackCreator.getStackHead(I18n.string(nameKey, l), texture, amt, I18n.lore(loreKey, l));
38+
}
39+
40+
public static ItemStack.Builder getStackHead(HypixelPlayer p, String nameKey, String texture, int amt, String loreKey, Map<String, String> ph) {
41+
Locale l = p.getLocale();
42+
return ItemStackCreator.getStackHead(I18n.string(nameKey, l), texture, amt, I18n.lore(loreKey, l, ph));
43+
}
44+
45+
public static ItemStack.Builder getStackHead(HypixelPlayer p, String nameKey, String texture, int amt, List<String> lore) {
46+
Locale l = p.getLocale();
47+
return ItemStackCreator.getStackHead(I18n.string(nameKey, l), texture, amt, lore);
48+
}
49+
50+
public static ItemStack.Builder getStackHead(HypixelPlayer p, String nameKey, PlayerSkin skin, int amt, List<String> lore) {
51+
Locale l = p.getLocale();
52+
return ItemStackCreator.getStackHead(I18n.string(nameKey, l), skin, amt, lore);
53+
}
54+
}

type.generic/src/main/java/net/swofty/type/generic/gui/v2/ViewConfiguration.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import net.kyori.adventure.text.Component;
55
import net.minestom.server.inventory.InventoryType;
66
import net.swofty.type.generic.gui.v2.context.ViewContext;
7+
import net.swofty.type.generic.i18n.I18n;
78

89
import java.util.function.BiFunction;
910

@@ -41,6 +42,10 @@ public static <S> ViewConfiguration<S> withString(StringTitle<S> title, Inventor
4142
return new ViewConfiguration<>(title, type);
4243
}
4344

45+
public static <S> ViewConfiguration<S> translatable(String titleKey, InventoryType type) {
46+
return new ViewConfiguration<>((StringTitle<S>) (s, ctx) -> I18n.string(titleKey, ctx.player().getLocale()), type);
47+
}
48+
4449
@FunctionalInterface
4550
public interface Title<S> {
4651
Component getTitle(S state, ViewContext ctx);

type.generic/src/main/java/net/swofty/type/generic/i18n/I18n.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,18 @@ public static List<String> lore(String key) {
6868
return List.of(string(key).split("\n"));
6969
}
7070

71+
public static List<String> lore(String key, Locale locale) {
72+
return List.of(string(key, locale).split("\n"));
73+
}
74+
7175
public static List<String> lore(String key, Map<String, String> placeholders) {
7276
return List.of(string(key, placeholders).split("\n"));
7377
}
7478

79+
public static List<String> lore(String key, Locale locale, Map<String, String> placeholders) {
80+
return List.of(string(key, locale, placeholders).split("\n"));
81+
}
82+
7583
public static String[] dialogueLines(String key) {
7684
return dialogueLines(key, HypixelTranslator.defaultLocale);
7785
}
@@ -85,4 +93,9 @@ public static String[] dialogueLines(String key, Map<String, String> placeholder
8593
String resolved = string(key, placeholders);
8694
return resolved.split(DIALOGUE_SEPARATOR);
8795
}
96+
97+
public static String[] dialogueLines(String key, Locale locale, Map<String, String> placeholders) {
98+
String resolved = string(key, locale, placeholders);
99+
return resolved.split(DIALOGUE_SEPARATOR);
100+
}
88101
}

type.generic/src/main/java/net/swofty/type/generic/user/HypixelPlayer.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,13 @@
2020
import net.swofty.type.generic.achievement.PlayerAchievementHandler;
2121
import net.swofty.type.generic.experience.PlayerExperienceHandler;
2222
import net.swofty.type.generic.gui.v2.*;
23+
import net.swofty.type.generic.i18n.I18n;
2324
import net.swofty.type.generic.quest.PlayerQuestHandler;
2425
import net.swofty.type.generic.user.categories.Rank;
2526
import org.jetbrains.annotations.NotNull;
2627

2728
import java.util.HashMap;
29+
import java.util.Map;
2830
import java.util.Objects;
2931
import java.util.UUID;
3032

@@ -141,6 +143,14 @@ public PlayerQuestHandler getQuestHandler() {
141143
return new PlayerQuestHandler(this);
142144
}
143145

146+
public void sendTranslated(String key) {
147+
sendMessage(Component.text(I18n.string(key, getLocale())));
148+
}
149+
150+
public void sendTranslated(String key, Map<String, String> placeholders) {
151+
sendMessage(Component.text(I18n.string(key, getLocale(), placeholders)));
152+
}
153+
144154
public PlayerSkin getPlayerSkin() {
145155
String texture = getDataHandler().get(HypixelDataHandler.Data.SKIN_TEXTURE, DatapointString.class).getValue();
146156
String signature = getDataHandler().get(HypixelDataHandler.Data.SKIN_SIGNATURE, DatapointString.class).getValue();

0 commit comments

Comments
 (0)