diff --git a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonLocalizationDictionaryBuilder.cs b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonLocalizationDictionaryBuilder.cs index abbfb9b9c6..28ff6bb9b7 100644 --- a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonLocalizationDictionaryBuilder.cs +++ b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonLocalizationDictionaryBuilder.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.IO; using System.Text.Json; +using JetBrains.Annotations; using Microsoft.Extensions.Localization; namespace Volo.Abp.Localization.Json; @@ -12,6 +13,7 @@ public static class JsonLocalizationDictionaryBuilder /// Builds an from given file. /// /// Path of the file + [CanBeNull] public static ILocalizationDictionary BuildFromFile(string filePath) { try @@ -36,24 +38,26 @@ public static class JsonLocalizationDictionaryBuilder /// Builds an from given json string. /// /// Json string + [CanBeNull] public static ILocalizationDictionary BuildFromJsonString(string jsonString) { JsonLocalizationFile jsonFile; + string cultureCode; try { jsonFile = JsonSerializer.Deserialize(jsonString, DeserializeOptions); + cultureCode = jsonFile.Culture; + + if (string.IsNullOrEmpty(cultureCode)) + { + return null; + } } catch (JsonException ex) { throw new AbpException("Can not parse json string. " + ex.Message); } - var cultureCode = jsonFile.Culture; - if (string.IsNullOrEmpty(cultureCode)) - { - throw new AbpException("Culture is empty in language json file."); - } - var dictionary = new Dictionary(); var dublicateNames = new List(); foreach (var item in jsonFile.Texts) diff --git a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/VirtualFiles/VirtualFileLocalizationResourceContributorBase.cs b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/VirtualFiles/VirtualFileLocalizationResourceContributorBase.cs index 1713adc473..40bb9de7c5 100644 --- a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/VirtualFiles/VirtualFileLocalizationResourceContributorBase.cs +++ b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/VirtualFiles/VirtualFileLocalizationResourceContributorBase.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Threading.Tasks; +using JetBrains.Annotations; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.FileProviders; using Microsoft.Extensions.Localization; @@ -98,6 +99,12 @@ public abstract class VirtualFileLocalizationResourceContributorBase : ILocaliza } var dictionary = CreateDictionaryFromFile(file); + + if (dictionary == null) + { + continue; + } + if (dictionaries.ContainsKey(dictionary.CultureName)) { throw new AbpException($"{file.GetVirtualOrPhysicalPathOrNull()} dictionary has a culture name '{dictionary.CultureName}' which is already defined! Localization resource: {_resource.ResourceName}"); @@ -111,6 +118,7 @@ public abstract class VirtualFileLocalizationResourceContributorBase : ILocaliza protected abstract bool CanParseFile(IFileInfo file); + [CanBeNull] protected virtual ILocalizationDictionary CreateDictionaryFromFile(IFileInfo file) { using (var stream = file.CreateReadStream()) @@ -119,5 +127,6 @@ public abstract class VirtualFileLocalizationResourceContributorBase : ILocaliza } } + [CanBeNull] protected abstract ILocalizationDictionary CreateDictionaryFromFileContent(string fileContent); }