diff --git a/Nebula.Launcher/App.axaml.cs b/Nebula.Launcher/App.axaml.cs index ef122a8..16577eb 100644 --- a/Nebula.Launcher/App.axaml.cs +++ b/Nebula.Launcher/App.axaml.cs @@ -1,4 +1,5 @@ using System; +using System.Globalization; using System.Linq; using Avalonia; using Avalonia.Controls; diff --git a/Nebula.Launcher/Assets/lang/en-US.ftl b/Nebula.Launcher/Assets/lang/en-US.ftl new file mode 100644 index 0000000..e69de29 diff --git a/Nebula.Launcher/Assets/lang/ru-RU.ftl b/Nebula.Launcher/Assets/lang/ru-RU.ftl new file mode 100644 index 0000000..e69de29 diff --git a/Nebula.Launcher/LauncherConVar.cs b/Nebula.Launcher/LauncherConVar.cs index cd13180..079d935 100644 --- a/Nebula.Launcher/LauncherConVar.cs +++ b/Nebula.Launcher/LauncherConVar.cs @@ -17,4 +17,6 @@ public static class LauncherConVar public static readonly ConVar AuthServers = ConVarBuilder.Build("launcher.authServers", [ "https://auth.spacestation14.com/" ]); + + public static readonly ConVar CurrentLang = ConVarBuilder.Build("launcher.language", "en-US"); } \ No newline at end of file diff --git a/Nebula.Launcher/Nebula.Launcher.csproj b/Nebula.Launcher/Nebula.Launcher.csproj index b442ed9..a6b1539 100644 --- a/Nebula.Launcher/Nebula.Launcher.csproj +++ b/Nebula.Launcher/Nebula.Launcher.csproj @@ -26,6 +26,7 @@ All + diff --git a/Nebula.Launcher/Services/LocalisationService.cs b/Nebula.Launcher/Services/LocalisationService.cs new file mode 100644 index 0000000..bf2976a --- /dev/null +++ b/Nebula.Launcher/Services/LocalisationService.cs @@ -0,0 +1,45 @@ +using System; +using System.Globalization; +using System.IO; +using Avalonia.Platform; +using Fluent.Net; +using Nebula.Shared; +using Nebula.Shared.Services; + +namespace Nebula.Launcher.Services; + +[ConstructGenerator, ServiceRegister] +public partial class LocalisationService +{ + [GenerateProperty] private ConfigurationService ConfigurationService { get; } + + private CultureInfo _currentCultureInfo = CultureInfo.CurrentCulture; + private MessageContext _currentMessageContext; + + private void Initialise() + { + // LoadLanguage(CultureInfo.GetCultureInfo(ConfigurationService.GetConfigValue(LauncherConVar.CurrentLang)!)); + } + + public void LoadLanguage(CultureInfo cultureInfo) + { + _currentCultureInfo = cultureInfo; + using var fs = AssetLoader.Open(new Uri($@"Assets/lang/{_currentCultureInfo.EnglishName}.ftl")); + using var sr = new StreamReader(fs); + + var options = new MessageContextOptions { UseIsolating = false }; + var mc = new MessageContext(cultureInfo.EnglishName, options); + var errors = mc.AddMessages(sr); + foreach (var error in errors) + { + Console.WriteLine(error); + } + + _currentMessageContext = mc; + } + + private void InitialiseInDesignMode() + { + Initialise(); + } +} \ No newline at end of file