55import net .fabricmc .fabric .api .datagen .v1 .provider .FabricLanguageProvider ;
66import net .minecraft .util .Identifier ;
77
8- import java .io .IOException ;
9- import java .nio .file .Files ;
10- import java .nio .file .Path ;
11- import java .nio .file .StandardOpenOption ;
12- import java .util .*;
13-
14- import com .google .gson .*;
8+ import java .util .HashSet ;
9+ import java .util .Set ;
1510
1611public class LangProvider extends FabricLanguageProvider {
1712
1813 private final Set <String > existingKeys = new HashSet <>();
19- private final Path manualLangFile ;
2014
2115 public LangProvider (FabricDataOutput dataOutput ) {
2216 super (dataOutput );
23- this .manualLangFile = dataOutput .getModContainer ().findPath ("assets/ukrainian_delight/lang/en_us.json" )
24- .orElseThrow (() -> new RuntimeException ("Manual lang file not found" ));
2517 }
2618
2719 @ Override
2820 public void generateTranslations (TranslationBuilder translationBuilder ) {
29- Map <String , String > manualTranslations = loadManualTranslations ();
30-
31- // Add manual translations first
32- manualTranslations .forEach ((key , value ) -> addTranslation (translationBuilder , key , value ));
33-
34- // Separate categories in output
35- addTranslation (translationBuilder , "" , "" ); // Empty line as a separator
36- addTranslation (translationBuilder , "# Items" , "" ); // Fake comment separator (only visual)
3721
3822 // Add item translations
3923 ItemsRegistry .KRASHANKY_ITEMS .forEach (item -> {
@@ -46,35 +30,92 @@ public void generateTranslations(TranslationBuilder translationBuilder) {
4630 addTranslation (translationBuilder , key , value );
4731 });
4832
49- addTranslation (translationBuilder , "" , "" ); // Another separator
50- addTranslation (translationBuilder , "# Blocks" , "" ); // Block separator
51-
52- // Add block translations (Example, replace with actual block logic)
53- // BlocksRegistry.BLOCKS.forEach(block -> {
54- // addTranslation(translationBuilder, block.getTranslationKey(), generateBlockName(block));
55- // });
33+ addTranslation (translationBuilder , "itemgroup.meals_ukrainian_delight" , "UD Meals" );
34+ addTranslation (translationBuilder , "itemgroup.ingredients_ukrainian_delight" , "UD Ingredients" );
35+ addTranslation (translationBuilder , "itemgroup.jars_ukrainian_delight" , "UD Jars" );
36+ addTranslation (translationBuilder , "itemgroup.krashanky_ukrainian_delight" , "UD Krashanky" );
37+ addTranslation (translationBuilder , "rei.ukrainian_delight" , "Ukrainian Delight" );
38+
39+ addItemTranslation (translationBuilder , "horseradish" );
40+ addItemTranslation (translationBuilder , "salt" );
41+ addItemTranslation (translationBuilder , "cucumber" );
42+ addItemTranslation (translationBuilder , "cutted_cucumber" );
43+ addItemTranslation (translationBuilder , "apple_slice" );
44+ addItemTranslation (translationBuilder , "dried_apple_slice" );
45+ addItemTranslation (translationBuilder , "cherry_berry" );
46+ addItemTranslation (translationBuilder , "cottage_cheese" );
47+ addItemTranslation (translationBuilder , "salo" );
48+ addItemTranslation (translationBuilder , "yeast" );
49+
50+ // Add block translations
51+ addBlockTranslation (translationBuilder , "cucumber_crate" );
52+ addBlockTranslation (translationBuilder , "jar" );
53+ addBlockTranslation (translationBuilder , "apple_jam" );
54+ addBlockTranslation (translationBuilder , "jarred_tomatoes" );
55+ addBlockTranslation (translationBuilder , "jarred_cabbage" );
56+ addBlockTranslation (translationBuilder , "jarred_beetroot" );
57+ addBlockTranslation (translationBuilder , "jarred_carrot" );
58+ addBlockTranslation (translationBuilder , "jarred_onion" );
59+ addBlockTranslation (translationBuilder , "jarred_borscht" );
60+ addBlockTranslation (translationBuilder , "wine_bottle" );
61+ addBlockTranslation (translationBuilder , "brewing_keg" );
62+ addBlockTranslation (translationBuilder , "salt_block" );
63+ addBlockTranslation (translationBuilder , "salt_bag" );
64+
65+ addTranslation (translationBuilder , "ukrainian_delight.advancement.root" , "Ukrainian Delight" );
66+ addTranslation (translationBuilder , "ukrainian_delight.advancement.root.desc" , "The power of Ukrainian delicacies!" );
67+
68+ addTranslation (translationBuilder , "ukrainian_delight.advancement.borscht" , "Where to find red water!" );
69+ addTranslation (translationBuilder , "ukrainian_delight.advancement.borscht.desc" , "Cook borscht" );
70+ addTranslation (translationBuilder , "ukrainian_delight.advancement.lean_borscht" , "The same, but with mushrooms!" );
71+ addTranslation (translationBuilder , "ukrainian_delight.advancement.lean_borscht.desc" , "Cook lean borscht" );
72+
73+ addTranslation (translationBuilder , "gui.ukrainian_delight.brewing_keg" , "Brewing Keg" );
74+ addTranslation (translationBuilder , "death.attack.glass_damage" , "%s was not careful with glass" );
75+ addTranslation (translationBuilder , "tooltip.ukrainian_delight.no_effects" , "No effects" );
76+ addTranslation (translationBuilder , "biome.ukrainian_delight.salt_caves" , "Salt Caves" );
77+
78+ // Item and tank tooltips
79+ addTranslation (translationBuilder , "ukrainian_delight.tooltip.tank_amount_with_capacity" , "%d / %d mB" );
80+ addTranslation (translationBuilder , "ukrainian_delight.tooltip.tank_amount" , "%d mB" );
81+ addTranslation (translationBuilder , "ukrainian_delight.tooltip.tank_empty" , "Empty" );
82+
83+ addTranslation (translationBuilder , "ukrainian_delight.tooltip.poured" , "Poured into %s" );
84+
85+ addTranslation (translationBuilder , "ukrainian_delight.tooltip.item_amout_with_capacity" , "[%s] %d / %d mB" );
86+ addTranslation (translationBuilder , "ukrainian_delight.tooltip.item_tank_amount" , "[%s] %d mB" );
87+ addTranslation (translationBuilder , "ukrainian_delight.tooltip.empty" , "Empty" );
88+ addTranslation (translationBuilder , "ukrainian_delight.tooltip.single_serving" , "Holds 1 drink of:" );
89+ addTranslation (translationBuilder , "ukrainian_delight.tooltip.many_servings" , "Holds %s drinks of:" );
90+
91+ addTranslation (translationBuilder , "ukrainian_delight.tooltip.light_drink" , "Light Drink" );
92+ addTranslation (translationBuilder , "ukrainian_delight.tooltip.mid_drink" , "Medium Drink" );
93+ addTranslation (translationBuilder , "ukrainian_delight.tooltip.strong_drink" , "Strong Drink" );
94+
95+ // Config GUI
96+ addTranslation (translationBuilder , "ukrainian_delight.title.config" , "Ukrainian Delight Configuration" );
97+ addTranslation (translationBuilder , "ukrainian_delight.category.general" , "General Settings" );
98+ addTranslation (translationBuilder , "ukrainian_delight.option.brewing_keg_capacity" , "Brewing Keg Capacity" );
99+ addTranslation (translationBuilder , "tooltip.ukrainian_delight.brewing_keg_capacity" , "%s" );
100+ addTranslation (translationBuilder , "tooltip.ukrainian_delight.brewing_keg_amount" , "%s" );
101+
102+ // Patchouli guide
103+ addTranslation (translationBuilder , "patchouli.ukrainian_delight.guide_name" , "Mum's recipes" );
104+ addTranslation (translationBuilder , "patchouli.ukrainian_delight.landing_text" , "Welcome to the Ukrainian Delight Mod Guide!" );
105+ addTranslation (translationBuilder , "patchouli.ukrainian_delight.tooltip.tank_amount" , "%s mB of water" );
56106
57- addTranslation (translationBuilder , "" , "" ); // Final separator
58107 }
59108
109+ private void addItemTranslation (TranslationBuilder translationBuilder , String value ) {
110+ String key = "item.ukrainian_delight." + value .toLowerCase ().replace (" " , "_" );
111+ String formattedValue = capitalize (value .replace ("_" , " " ));
112+ addTranslation (translationBuilder , key , formattedValue );
113+ }
60114
61- // Load manually written translations from en_us.json
62- private Map <String , String > loadManualTranslations () {
63- Map <String , String > translations = new HashMap <>();
64- if (!Files .exists (manualLangFile )) {
65- return translations ;
66- }
67-
68- try {
69- String jsonContent = Files .readString (manualLangFile );
70- JsonObject json = JsonParser .parseString (jsonContent ).getAsJsonObject ();
71- for (Map .Entry <String , JsonElement > entry : json .entrySet ()) {
72- translations .put (entry .getKey (), entry .getValue ().getAsString ());
73- }
74- } catch (IOException e ) {
75- throw new RuntimeException ("Failed to read manual lang file" , e );
76- }
77- return translations ;
115+ private void addBlockTranslation (TranslationBuilder translationBuilder , String value ) {
116+ String key = "block.ukrainian_delight." + value .toLowerCase ().replace (" " , "_" );
117+ String formattedValue = capitalize (value .replace ("_" , " " ));
118+ addTranslation (translationBuilder , key , formattedValue );
78119 }
79120
80121 // Avoid duplicate translations
0 commit comments