Browse Source

Localization: Skip virtual json files without culture code

pull/15976/head
Yunus Emre Kalkan 3 years ago
parent
commit
99d8a902f7
  1. 16
      framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonLocalizationDictionaryBuilder.cs
  2. 9
      framework/src/Volo.Abp.Localization/Volo/Abp/Localization/VirtualFiles/VirtualFileLocalizationResourceContributorBase.cs

16
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 <see cref="JsonLocalizationDictionaryBuilder" /> from given file.
/// </summary>
/// <param name="filePath">Path of the file</param>
[CanBeNull]
public static ILocalizationDictionary BuildFromFile(string filePath)
{
try
@ -36,24 +38,26 @@ public static class JsonLocalizationDictionaryBuilder
/// Builds an <see cref="JsonLocalizationDictionaryBuilder" /> from given json string.
/// </summary>
/// <param name="jsonString">Json string</param>
[CanBeNull]
public static ILocalizationDictionary BuildFromJsonString(string jsonString)
{
JsonLocalizationFile jsonFile;
string cultureCode;
try
{
jsonFile = JsonSerializer.Deserialize<JsonLocalizationFile>(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<string, LocalizedString>();
var dublicateNames = new List<string>();
foreach (var item in jsonFile.Texts)

9
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);
}

Loading…
Cancel
Save