From 937a8518ad31c37a3402375ebd60ae4b39631000 Mon Sep 17 00:00:00 2001 From: Qstick Date: Mon, 29 May 2023 23:34:55 -0500 Subject: [PATCH] Fix Localization Serialization --- .../EditImportListModalContent.css.d.ts | 1 + frontend/src/Utilities/String/translate.js | 9 ++++--- .../Localization/LocalizationController.cs | 10 ++----- .../Localization/LocalizationResource.cs | 26 +++++++++++++++++++ 4 files changed, 34 insertions(+), 12 deletions(-) diff --git a/frontend/src/Settings/ImportLists/ImportLists/EditImportListModalContent.css.d.ts b/frontend/src/Settings/ImportLists/ImportLists/EditImportListModalContent.css.d.ts index 995399ce7..408cea659 100644 --- a/frontend/src/Settings/ImportLists/ImportLists/EditImportListModalContent.css.d.ts +++ b/frontend/src/Settings/ImportLists/ImportLists/EditImportListModalContent.css.d.ts @@ -4,6 +4,7 @@ interface CssExports { 'deleteButton': string; 'hideMetadataProfile': string; 'labelIcon': string; + 'message': string; } export const cssExports: CssExports; export default cssExports; diff --git a/frontend/src/Utilities/String/translate.js b/frontend/src/Utilities/String/translate.js index 2858014d0..74325defb 100644 --- a/frontend/src/Utilities/String/translate.js +++ b/frontend/src/Utilities/String/translate.js @@ -7,7 +7,7 @@ function getTranslations() { dataType: 'json', url: '/localization', success: function(data) { - localization = data.Strings; + localization = data.strings; } }; @@ -19,12 +19,13 @@ function getTranslations() { const translations = getTranslations(); export default function translate(key, args = '') { + const translation = translations[key] || key; + if (args) { - const translatedKey = translate(key); - return translatedKey.replace(/\{(\d+)\}/g, (match, index) => { + return translation.replace(/\{(\d+)\}/g, (match, index) => { return args[index]; }); } - return translations[key] || key; + return translation; } diff --git a/src/Lidarr.Api.V1/Localization/LocalizationController.cs b/src/Lidarr.Api.V1/Localization/LocalizationController.cs index 5fa6caa18..b7cc8632f 100644 --- a/src/Lidarr.Api.V1/Localization/LocalizationController.cs +++ b/src/Lidarr.Api.V1/Localization/LocalizationController.cs @@ -1,7 +1,5 @@ -using System.Text.Json; using Lidarr.Http; using Microsoft.AspNetCore.Mvc; -using NzbDrone.Common.Serializer; using NzbDrone.Core.Localization; namespace Lidarr.Api.V1.Localization @@ -10,21 +8,17 @@ namespace Lidarr.Api.V1.Localization public class LocalizationController : Controller { private readonly ILocalizationService _localizationService; - private readonly JsonSerializerOptions _serializerSettings; public LocalizationController(ILocalizationService localizationService) { _localizationService = localizationService; - _serializerSettings = STJson.GetSerializerSettings(); - _serializerSettings.DictionaryKeyPolicy = null; - _serializerSettings.PropertyNamingPolicy = null; } [HttpGet] [Produces("application/json")] - public string GetLocalizationDictionary() + public LocalizationResource GetLocalizationDictionary() { - return JsonSerializer.Serialize(_localizationService.GetLocalizationDictionary().ToResource(), _serializerSettings); + return _localizationService.GetLocalizationDictionary().ToResource(); } } } diff --git a/src/Lidarr.Api.V1/Localization/LocalizationResource.cs b/src/Lidarr.Api.V1/Localization/LocalizationResource.cs index e5c2d9844..a432b0591 100644 --- a/src/Lidarr.Api.V1/Localization/LocalizationResource.cs +++ b/src/Lidarr.Api.V1/Localization/LocalizationResource.cs @@ -1,10 +1,36 @@ +using System; using System.Collections.Generic; +using System.Text.Json; +using System.Text.Json.Serialization; using Lidarr.Http.REST; namespace Lidarr.Api.V1.Localization { + public class LocalizationResourceSerializer : JsonConverter> + { + public override Dictionary Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + throw new NotImplementedException(); + } + + public override void Write(Utf8JsonWriter writer, Dictionary dictionary, JsonSerializerOptions options) + { + writer.WriteStartObject(); + + foreach (var (key, value) in dictionary) + { + var propertyName = key; + writer.WritePropertyName(propertyName); + writer.WriteStringValue(value); + } + + writer.WriteEndObject(); + } + } + public class LocalizationResource : RestResource { + [JsonConverter(typeof(LocalizationResourceSerializer))] public Dictionary Strings { get; set; } }