Browse Source

Localization: Skip virtual json files without culture code

pull/15976/head
Yunus Emre Kalkan 4 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.Collections.Generic;
using System.IO; using System.IO;
using System.Text.Json; using System.Text.Json;
using JetBrains.Annotations;
using Microsoft.Extensions.Localization; using Microsoft.Extensions.Localization;
namespace Volo.Abp.Localization.Json; namespace Volo.Abp.Localization.Json;
@ -12,6 +13,7 @@ public static class JsonLocalizationDictionaryBuilder
/// Builds an <see cref="JsonLocalizationDictionaryBuilder" /> from given file. /// Builds an <see cref="JsonLocalizationDictionaryBuilder" /> from given file.
/// </summary> /// </summary>
/// <param name="filePath">Path of the file</param> /// <param name="filePath">Path of the file</param>
[CanBeNull]
public static ILocalizationDictionary BuildFromFile(string filePath) public static ILocalizationDictionary BuildFromFile(string filePath)
{ {
try try
@ -36,24 +38,26 @@ public static class JsonLocalizationDictionaryBuilder
/// Builds an <see cref="JsonLocalizationDictionaryBuilder" /> from given json string. /// Builds an <see cref="JsonLocalizationDictionaryBuilder" /> from given json string.
/// </summary> /// </summary>
/// <param name="jsonString">Json string</param> /// <param name="jsonString">Json string</param>
[CanBeNull]
public static ILocalizationDictionary BuildFromJsonString(string jsonString) public static ILocalizationDictionary BuildFromJsonString(string jsonString)
{ {
JsonLocalizationFile jsonFile; JsonLocalizationFile jsonFile;
string cultureCode;
try try
{ {
jsonFile = JsonSerializer.Deserialize<JsonLocalizationFile>(jsonString, DeserializeOptions); jsonFile = JsonSerializer.Deserialize<JsonLocalizationFile>(jsonString, DeserializeOptions);
cultureCode = jsonFile.Culture;
if (string.IsNullOrEmpty(cultureCode))
{
return null;
}
} }
catch (JsonException ex) catch (JsonException ex)
{ {
throw new AbpException("Can not parse json string. " + ex.Message); 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 dictionary = new Dictionary<string, LocalizedString>();
var dublicateNames = new List<string>(); var dublicateNames = new List<string>();
foreach (var item in jsonFile.Texts) 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;
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading.Tasks; using System.Threading.Tasks;
using JetBrains.Annotations;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.FileProviders; using Microsoft.Extensions.FileProviders;
using Microsoft.Extensions.Localization; using Microsoft.Extensions.Localization;
@ -98,6 +99,12 @@ public abstract class VirtualFileLocalizationResourceContributorBase : ILocaliza
} }
var dictionary = CreateDictionaryFromFile(file); var dictionary = CreateDictionaryFromFile(file);
if (dictionary == null)
{
continue;
}
if (dictionaries.ContainsKey(dictionary.CultureName)) 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}"); 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); protected abstract bool CanParseFile(IFileInfo file);
[CanBeNull]
protected virtual ILocalizationDictionary CreateDictionaryFromFile(IFileInfo file) protected virtual ILocalizationDictionary CreateDictionaryFromFile(IFileInfo file)
{ {
using (var stream = file.CreateReadStream()) using (var stream = file.CreateReadStream())
@ -119,5 +127,6 @@ public abstract class VirtualFileLocalizationResourceContributorBase : ILocaliza
} }
} }
[CanBeNull]
protected abstract ILocalizationDictionary CreateDictionaryFromFileContent(string fileContent); protected abstract ILocalizationDictionary CreateDictionaryFromFileContent(string fileContent);
} }

Loading…
Cancel
Save