70 lines
2.1 KiB
C#
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);
|
|
}
|
|
}
|
|
} |