diff --git a/BTCPayServer/Controllers/InvoiceController.UI.cs b/BTCPayServer/Controllers/InvoiceController.UI.cs index d29269307..820bc115f 100644 --- a/BTCPayServer/Controllers/InvoiceController.UI.cs +++ b/BTCPayServer/Controllers/InvoiceController.UI.cs @@ -270,7 +270,7 @@ namespace BTCPayServer.Controllers ServerUrl = HttpContext.Request.GetAbsoluteRoot(), OrderId = invoice.OrderId, InvoiceId = invoice.Id, - DefaultLang = storeBlob.DefaultLang ?? "en-US", + DefaultLang = storeBlob.DefaultLang ?? "en", HtmlTitle = storeBlob.HtmlTitle ?? "BTCPay Invoice", CustomCSSLink = storeBlob.CustomCSS?.AbsoluteUri, CustomLogoLink = storeBlob.CustomLogo?.AbsoluteUri, diff --git a/BTCPayServer/Models/StoreViewModels/CheckoutExperienceViewModel.cs b/BTCPayServer/Models/StoreViewModels/CheckoutExperienceViewModel.cs index a77cccd0c..ba211cd07 100644 --- a/BTCPayServer/Models/StoreViewModels/CheckoutExperienceViewModel.cs +++ b/BTCPayServer/Models/StoreViewModels/CheckoutExperienceViewModel.cs @@ -58,7 +58,7 @@ namespace BTCPayServer.Models.StoreViewModels public void SetLanguages(LanguageService langService, string defaultLang) { - defaultLang = defaultLang ?? "en-US"; + defaultLang = defaultLang ?? "en"; var choices = langService.GetLanguages().Select(o => new Format() { Name = o.DisplayName, Value = o.Code }).ToArray(); var chosen = choices.FirstOrDefault(f => f.Value == defaultLang) ?? choices.FirstOrDefault(); Languages = new SelectList(choices, nameof(chosen.Value), nameof(chosen.Name), chosen); diff --git a/BTCPayServer/Services/LanguageService.cs b/BTCPayServer/Services/LanguageService.cs index b82872e7b..17dae1601 100644 --- a/BTCPayServer/Services/LanguageService.cs +++ b/BTCPayServer/Services/LanguageService.cs @@ -1,7 +1,11 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; +using System.IO; using System.Linq; -using System.Threading.Tasks; +using Microsoft.AspNetCore.Hosting.Internal; +using Microsoft.Extensions.Hosting; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using Newtonsoft.Json.Serialization; namespace BTCPayServer.Services { @@ -12,34 +16,53 @@ namespace BTCPayServer.Services DisplayName = displayName; Code = code; } + + [JsonProperty("code")] public string Code { get; set; } + [JsonProperty("currentLanguage")] public string DisplayName { get; set; } } + public class LanguageService { + private readonly Language[] _languages; + + public LanguageService(IHostingEnvironment environment) + { + var path = (environment as HostingEnvironment)?.WebRootPath; + if (string.IsNullOrEmpty(path)) + { + //test environment + path = Path.Combine(TryGetSolutionDirectoryInfo().FullName,"BTCPayServer", "wwwroot"); + } + path = Path.Combine(path, "locales"); + var files = Directory.GetFiles(path, "*.json"); + var result = new List(); + foreach (var file in files) + { + using (var stream = new StreamReader(file)) + { + var json = stream.ReadToEnd(); + result.Add(JObject.Parse(json).ToObject()); + } + } + + _languages = result.ToArray(); + } + + private static DirectoryInfo TryGetSolutionDirectoryInfo(string currentPath = null) + { + var directory = new DirectoryInfo( + currentPath ?? Directory.GetCurrentDirectory()); + while (directory != null && !directory.GetFiles("*.sln").Any()) + { + directory = directory.Parent; + } + return directory; + } public Language[] GetLanguages() { - return new[] - { - new Language("en-US", "English"), - new Language("de-DE", "Deutsch"), - new Language("ja-JP", "日本語"), - new Language("fr-FR", "Français"), - new Language("es-ES", "Spanish"), - new Language("pt-PT", "Portuguese"), - new Language("pt-BR", "Portuguese (Brazil)"), - new Language("nl-NL", "Dutch"), - new Language("np-NP", "नेपाली"), - new Language("cs-CZ", "Česky"), - new Language("is-IS", "Íslenska"), - new Language("hr-HR", "Croatian"), - new Language("it-IT", "Italiano"), - new Language("kk-KZ", "Қазақша"), - new Language("ru-RU", "русский"), - new Language("uk-UA", "Українська"), - new Language("vi-VN", "Tiếng Việt"), - new Language("zh-SP", "中文(简体)"), - }; + return _languages; } } } diff --git a/BTCPayServer/Views/Invoice/Checkout-Body.cshtml b/BTCPayServer/Views/Invoice/Checkout-Body.cshtml index 40bf5ab4b..03c2d2cf6 100644 --- a/BTCPayServer/Views/Invoice/Checkout-Body.cshtml +++ b/BTCPayServer/Views/Invoice/Checkout-Body.cshtml @@ -288,7 +288,7 @@ :disabled="isLoading" v-on:change="onCurrencyChange($event)" ref="changellyCurrenciesDropdown"> - +