c969-project/C969Project/Localization.cs
2025-06-10 22:32:10 -05:00

70 lines
2.1 KiB
C#

using System.Globalization;
using Newtonsoft.Json;
namespace C969Project;
public static class Localization
{
public static Dictionary<string, Dictionary<string, string>> Localizations = new();
public static string CurrentLanguage { get; set; } = "en-US";
public static void Initialize()
{
LoadLocalizations();
DetermineLocale();
}
public static string GetLocalization(string lang, string id)
{
return Localizations[lang][id] ?? "Couldn't find localization";
}
public static string GetLocalization(string id) => GetLocalization(CurrentLanguage, id);
private static void DetermineLocale()
{
try
{
RegionInfo region = RegionInfo.CurrentRegion;
string code = region.TwoLetterISORegionName;
if (code.Equals("IS", StringComparison.OrdinalIgnoreCase))
{
CurrentLanguage = "is-IS";
}
else
{
CurrentLanguage = "en-US";
}
}
catch (Exception e)
{
Console.WriteLine($@"Localization Error: {e.Message}, defaulting to en-US");
CurrentLanguage = "en-US";
}
}
private static void LoadLocalizations()
{
if (Directory.Exists($"{AppDomain.CurrentDomain.BaseDirectory}/locale"))
{
var dir = new DirectoryInfo($"{AppDomain.CurrentDomain.BaseDirectory}/locale");
foreach (var file in dir.GetFiles("*.json"))
{
using (StreamReader r = new StreamReader(file.FullName))
{
var json = JsonConvert.DeserializeObject<Dictionary<string, string>>(r.ReadToEnd());
if (json != null) Localizations.Add(file.Name.Replace(".json", ""), json);
}
}
}
}
private static void AddLocalization(string language, Dictionary<string, string> dictionary)
{
if (!Localizations.ContainsKey(language))
{
Localizations.Add(language, dictionary);
}
}
}