using HarmonyLib; using OWML.Common; using OWML.ModHelper; using UnityEngine; namespace SlovakTranslation { /// /// Registers Slovenčina as a selectable language via xen-42's Localization /// Utility (xen.LocalizationUtility). All the heavy lifting lives in the /// utility; this mod just points it at our translated strings and patches the /// few menu/HUD fonts that were never baked with Slovak glyphs (see /// ). /// public class SlovakTranslation : ModBehaviour { public static SlovakTranslation Instance; /// Name the language is registered (and displayed) under. public const string LanguageName = "Slovenčina"; /// Path (relative to the mod folder) to the translated strings. public static string translationFile = "assets/Translation.xml"; /// The Localization Utility's API, kept for reflection in . internal static ILocalizationAPI LocalizationApi; private void Start() { Instance = this; LocalizationApi = ModHelper.Interaction.TryGetModApi("xen.LocalizationUtility"); if (LocalizationApi == null) { ModHelper.Console.WriteLine( "Could not find xen.LocalizationUtility — is Interplanetary Polyglot installed?", MessageType.Error); return; } LocalizationApi.RegisterLanguage(this, LanguageName, translationFile); ModHelper.Console.WriteLine("Registered language: " + LanguageName, MessageType.Success); // Deliberately *not* AddLanguageFont: that would make IsLanguageLatin false // and pull dialogue, the translator and the ship log off their correct // vanilla fonts. We only patch the fonts that can't draw Slovak. SlovakFont.Load(this); if (SlovakFont.Loaded) { new Harmony("Homer.SlovakTranslation").PatchAll(); UnityEngine.SceneManagement.SceneManager.sceneLoaded += (scene, mode) => SlovakFont.ApplyToAll(); ModHelper.Console.WriteLine("Slovak menu/HUD font (Cabin) loaded and patched in.", MessageType.Success); } } /// /// preferGameTypeface — when on, a menu font that can't draw Slovak is /// replaced by the game's own dynamic cut of the same typeface where one exists, /// so the menu keeps its vanilla look. Turn it off to use the bundled Cabin /// everywhere instead. /// public override void Configure(IModConfig config) { SlovakFont.PreferGameTypeface = config.GetSettingsValue("preferGameTypeface"); if (!SlovakFont.Loaded) return; SlovakFont.ForgetChoices(); SlovakFont.ApplyToAll(); } /// Labels can be built long after a scene loads, so keep sweeping. private float _nextSweep; private void Update() { if (!SlovakFont.Loaded || Time.unscaledTime < _nextSweep) return; _nextSweep = Time.unscaledTime + 2f; SlovakFont.ApplyToAll(); } } }