From a37eb8a44a68147b7f77e77c0cf3f1c755238c61 Mon Sep 17 00:00:00 2001 From: hishamco Date: Thu, 3 Dec 2020 14:05:49 +0300 Subject: [PATCH] Introduce Culture model to avoid CultureInfo.DisplayName issue --- .../Interfaces/ILocalizationService.cs | 6 ++++-- Oqtane.Client/Services/LocalizationService.cs | 7 +++++-- .../Themes/Controls/LanguageSwitcher.razor | 7 ++++--- .../Controllers/LocalizationController.cs | 20 +++++++++++++++++-- Oqtane.Shared/Models/Culture.cs | 9 +++++++++ 5 files changed, 40 insertions(+), 9 deletions(-) create mode 100644 Oqtane.Shared/Models/Culture.cs diff --git a/Oqtane.Client/Services/Interfaces/ILocalizationService.cs b/Oqtane.Client/Services/Interfaces/ILocalizationService.cs index c025ee45..8a580cc6 100644 --- a/Oqtane.Client/Services/Interfaces/ILocalizationService.cs +++ b/Oqtane.Client/Services/Interfaces/ILocalizationService.cs @@ -1,11 +1,13 @@ +using System.Collections.Generic; using System.Threading.Tasks; +using Oqtane.Models; namespace Oqtane.Services { public interface ILocalizationService { - Task GetDefaultCulture(); + Task GetDefaultCulture(); - Task GetSupportedCultures(); + Task> GetSupportedCultures(); } } diff --git a/Oqtane.Client/Services/LocalizationService.cs b/Oqtane.Client/Services/LocalizationService.cs index 4c658c50..ea6e5fd8 100644 --- a/Oqtane.Client/Services/LocalizationService.cs +++ b/Oqtane.Client/Services/LocalizationService.cs @@ -1,5 +1,7 @@ +using System.Collections.Generic; using System.Net.Http; using System.Threading.Tasks; +using Oqtane.Models; using Oqtane.Shared; namespace Oqtane.Services @@ -15,8 +17,9 @@ namespace Oqtane.Services private string Apiurl => CreateApiUrl(_siteState.Alias, "Localization"); - public async Task GetDefaultCulture() => await GetJsonAsync($"{Apiurl}/getDefaultCulture"); + public async Task GetDefaultCulture() => await GetJsonAsync($"{Apiurl}/getDefaultCulture"); - public async Task GetSupportedCultures() => await GetJsonAsync($"{Apiurl}/getSupportedCultures"); + public async Task> GetSupportedCultures() + => await GetJsonAsync>($"{Apiurl}/getSupportedCultures"); } } diff --git a/Oqtane.Client/Themes/Controls/LanguageSwitcher.razor b/Oqtane.Client/Themes/Controls/LanguageSwitcher.razor index 4b0a3acd..7c3ca1d2 100644 --- a/Oqtane.Client/Themes/Controls/LanguageSwitcher.razor +++ b/Oqtane.Client/Themes/Controls/LanguageSwitcher.razor @@ -1,6 +1,7 @@ @namespace Oqtane.Themes.Controls @inherits ThemeControlBase -@using System.Globalization +@using System.Globalization +@using Oqtane.Models @inject ILocalizationService LocalizationService @inject NavigationManager NavigationManager @@ -13,7 +14,7 @@ @@ -21,7 +22,7 @@ @code{ private string _selectedCulture; - private string[] _supportedCultures; + private IEnumerable _supportedCultures; protected override async Task OnParametersSetAsync() { diff --git a/Oqtane.Server/Controllers/LocalizationController.cs b/Oqtane.Server/Controllers/LocalizationController.cs index f8b7433a..46e475ef 100644 --- a/Oqtane.Server/Controllers/LocalizationController.cs +++ b/Oqtane.Server/Controllers/LocalizationController.cs @@ -1,6 +1,9 @@ using System.Collections.Generic; +using System.Globalization; +using System.Linq; using Microsoft.AspNetCore.Mvc; using Oqtane.Infrastructure; +using Oqtane.Models; using Oqtane.Shared; namespace Oqtane.Controllers @@ -17,10 +20,23 @@ namespace Oqtane.Controllers // GET: api/localization/getSupportedCultures [HttpGet("getSupportedCultures")] - public IEnumerable GetSupportedCultures() => _localizationManager.GetSupportedCultures(); + public IEnumerable GetSupportedCultures() + => _localizationManager.GetSupportedCultures().Select(c => new Culture { + Name = CultureInfo.GetCultureInfo(c).Name, + DisplayName = CultureInfo.GetCultureInfo(c).DisplayName + }); // GET api/localization/getDefaultCulture [HttpGet("getDefaultCulture")] - public string GetDefaultCulture() => _localizationManager.GetDefaultCulture(); + public Culture GetDefaultCulture() + { + var culture = _localizationManager.GetDefaultCulture(); + + return new Culture + { + Name = CultureInfo.GetCultureInfo(culture).Name, + DisplayName = CultureInfo.GetCultureInfo(culture).DisplayName + }; + } } } diff --git a/Oqtane.Shared/Models/Culture.cs b/Oqtane.Shared/Models/Culture.cs new file mode 100644 index 00000000..78d249d6 --- /dev/null +++ b/Oqtane.Shared/Models/Culture.cs @@ -0,0 +1,9 @@ +namespace Oqtane.Models +{ + public class Culture + { + public string Name { get; set; } + + public string DisplayName { get; set; } + } +}