Official Mod Translation Guide By Sheep Table of contents Installing mod translations​ 3 Creating mod translations​ 7 How to make your mod compatible with mod translations?​ 14 Installing mod translations Click the tongue button Then “Import translation files” Select the translation you want to load. Once you do you should see it here. It automatically goes to the right mod and knows what language it is. It should just work! If you want to delete it later click the tongue button and “Delete installed translation mod files” Now switch your game to the target language. In my case, Polish. If everything worked well your mod will look like this in the list: (This is in Polish of course, it says “Translated (Polish)”) And the mod will be properly translated:​ That’s it! Creating mod translations It’s very simple. The translations are simple text files you can easily edit. Start by clicking the tongue button. Generate translation file Choose the language you want and press “Continue” You might get an error like this. If you do, that means this mod cannot be translated without being fixed first. This shouldn’t happen for most mods. If it does, tell the moder who made it to read this document. Specifically: How to make your mod compatible with mod translations? Save the file somewhere, you will get something like this: (The icon might be different for you) Open the .json file You will be greeted by something like this. There are many tools and even websites you can use to help yourself with editing the text. The ones I’ve circled red are the danger zone. Don’t touch those. They will make the translation not work. The only one you might ever want to change is the “TargetModVersion”. This tells the game what version of the mod not the version of the game this translation was made for. In the green zone you have: ShortNotes => You can say who made the translation and it will show up in the game. TranslatedString => Put the translation of the above text there. Once you’re done it will look somewhat like this: Save the file and load it into the game. To learn how to load it into the game, go to Installing mod translations If you are already in the translation team: You can post the translated .json file in the mod’s thread. If you not in the translation team: Finished mod translations can be sent to “hmni_ic” on our discord.​ If approved they will be added to the mods thread! How to make your mod compatible with mod translations? Most things are automatically handled by the game. Items and dialogues will just automatically work. There is really one main thing to consider: Don’t ever use strings directly in dynamically called code. This means for example, the OnUse here will not be localized. itemprefab3 = ModUtilities.CreateItemPrefab() itemprefab3.Name = 'Cyber Sage Pills' itemprefab3.Description = 'Add a large amount of blue petals, bot no longer lewd.(Significant effect).' itemprefab3.Price = 25000 itemprefab3.IsStackable = true function OnUse(item) gv.lust = gv.lust - 1000.0 ​ UiOverlay.OkPopup("( ̄3 ̄)", "bot just wants to talk to you about life now. You have " .. (item.GetCount()-1) .. " of this item left!") ​ return true --we return true to remove the item on use end itemprefab3.OnUse = OnUse This code is bad, don’t do it like this! --Create the title localizable string local titlePopupString = ModUtilities.CreateLocalizableString(CurrentModGuid, "CyberSagePills_PopupTitle", "( ̄3 ̄)") --Create the text localizable string. Notice an additional “true“ passed after the text. That “true” means this is a smart string. Smart strings can contain arguments. --That’s the {0} in the text. If you use two arguments the second one would be {1} etc. Those can also use unity’s smart string. For example "{0:p:{} item|{} items}" would be a valid one. local textPopupString = ModUtilities.CreateLocalizableString(CurrentModGuid, "CyberSagePills_PopupText", "bot just wants to talk to you about life now. You have {0} of this item left!", true) itemprefab3 = ModUtilities.CreateItemPrefab() itemprefab3.Name = 'Cyber Sage Pills' itemprefab3.Description = 'Add a large amount of blue petals, bot no longer lewd.(Significant effect).' itemprefab3.Price = 25000 itemprefab3.IsStackable = true function OnUse(item) ​ gv.lust = gv.lust - 1000.0 ​ -- Now we use the previously created strings! ​ UiOverlay.OkPopup(titlePopupString.Get(), textPopupString.Get(item.GetCount()-1)) ​ --It’s also possible to do ModUtilities.GetLocalizableStringRaw(CurrentModGuid, “CyberSagePills_PopupTitle”) ​ --That ONLY works with non smart strings though. ​ return true --we return true to remove the item on use end itemprefab3.OnUse = OnUse This code is good! Do it like this! One more thing to add. Some old personality mods will break with this update and report “Exception”. The cause for that duplicated id’s. It looks like this: personality.PrepareContainer('Blowjob_EdgingAlmostCame').AddBranch(StoryBotDialogueBr anch.__new('Bot: Fufuf~ That was close.', CurrentModGuid, 26)) personality.PrepareContainer('Blowjob_EdgingHadToSlowdown').AddBranch(StoryBotDialogu eBranch.__new('Bot: If I went any faster you would\'ve cum!', CurrentModGuid, 26)) The above number NEEDS to be unique.