using System; using System.Linq; using System.IO; using System.Collections.Generic; using Newtonsoft.Json.Linq; using UnityEngine; namespace COM3D2.MeidoPhotoStudio.Plugin { public static class Translation { public static Dictionary> Translations; public static string CurrentLanguage { get; private set; } public static event EventHandler ReloadTranslationEvent; public static void Initialize(string language) { CurrentLanguage = language; string translationFile = $"translations.{language}.json"; string translationPath = Path.Combine(Constants.configPath, translationFile); string translationJson = File.ReadAllText(translationPath); JObject translation = JObject.Parse(translationJson); Translations = new Dictionary>( StringComparer.InvariantCultureIgnoreCase ); foreach (JProperty translationProp in translation.AsJEnumerable()) { JToken token = translationProp.Value; Translations[translationProp.Path] = token.ToObject>(); } } public static void SetLanguage(string language) { Initialize(language); OnReloadTranslation(); } public static void ReloadTranslation() { Initialize(CurrentLanguage); OnReloadTranslation(); } public static void OnReloadTranslation() { ReloadTranslationEvent?.Invoke(null, EventArgs.Empty); } public static string Get(string category, string text) { if (!Translations.ContainsKey(category)) { Debug.LogWarning($"Could not find category '{category}'"); return text; } if (!Translations[category].ContainsKey(text)) { Debug.LogWarning($"Could not find translation for '{text}' in '{category}'"); return text; } return Translations[category][text]; } public static string[] GetArray(string category, IEnumerable list) { return GetList(category, list).ToArray(); } public static IEnumerable GetList(string category, IEnumerable list) { return list.Select(uiName => { return Get(category, uiName); }); } public static string[] GetList(string category, IEnumerable> list) { return list.Select(kvp => { return Get(category, kvp.Key); }).ToArray(); } } }