using System; using System.Collections.Generic; using System.Globalization; using System.IO; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content; using MLEM.Startup; using Newtonsoft.Json; namespace TouchyTickets { public static class Localization { public static readonly List NumberFormat = LoadLocalized>("NumberFormat", "json5"); private static readonly Dictionary Strings = LoadLocalized>("Localization"); private static readonly Dictionary FallbackStrings = Load>("Localization"); private static readonly List News = LoadLocalized>("News"); private static readonly Random Random = new Random(); public static string Get(string key) { if (Strings.TryGetValue(key, out var val)) return val; if (FallbackStrings.TryGetValue(key, out var fallback)) return fallback; return $"?{key}?"; } public static string GetRandomNews() { return News[Random.Next(News.Count)]; } private static T LoadLocalized(string name, string extension = "json") { var culture = CultureInfo.CurrentCulture.TwoLetterISOLanguageName; foreach (var path in new[] {$"{name}.{culture}", name}) { try { return Load(path, extension); } catch (Exception) { // move on to the next path } } throw new ContentLoadException(); } private static T Load(string name, string extension = "json") { var path = $"{GameImpl.Instance.Content.RootDirectory}/Localization/{name}.{extension}"; using (var reader = new JsonTextReader(new StreamReader(TitleContainer.OpenStream(path)))) return SaveHandler.Serializer.Deserialize(reader); } } }