Browse Source

Enable nullable annotations for Volo.Abp.Localization

pull/17020/head
liangshiwei 3 years ago
parent
commit
f3292d63b2
  1. 2
      framework/src/Volo.Abp.Localization/Volo.Abp.Localization.csproj
  2. 8
      framework/src/Volo.Abp.Localization/Volo/Abp/Localization/AbpDictionaryBasedStringLocalizer.cs
  3. 8
      framework/src/Volo.Abp.Localization/Volo/Abp/Localization/AbpEnumLocalizer.cs
  4. 2
      framework/src/Volo.Abp.Localization/Volo/Abp/Localization/AbpLocalizationOptions.cs
  5. 2
      framework/src/Volo.Abp.Localization/Volo/Abp/Localization/AbpStringLocalizerExtensions.cs
  6. 16
      framework/src/Volo.Abp.Localization/Volo/Abp/Localization/AbpStringLocalizerFactory.cs
  7. 6
      framework/src/Volo.Abp.Localization/Volo/Abp/Localization/External/IExternalLocalizationStore.cs
  8. 6
      framework/src/Volo.Abp.Localization/Volo/Abp/Localization/External/NullExternalLocalizationStore.cs
  9. 2
      framework/src/Volo.Abp.Localization/Volo/Abp/Localization/ILanguageInfo.cs
  10. 2
      framework/src/Volo.Abp.Localization/Volo/Abp/Localization/ILocalizableStringSerializer.cs
  11. 2
      framework/src/Volo.Abp.Localization/Volo/Abp/Localization/ILocalizationDictionary.cs
  12. 2
      framework/src/Volo.Abp.Localization/Volo/Abp/Localization/ILocalizationResourceContributor.cs
  13. 14
      framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonLocalizationDictionaryBuilder.cs
  14. 2
      framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonLocalizationFile.cs
  15. 29
      framework/src/Volo.Abp.Localization/Volo/Abp/Localization/LanguageInfo.cs
  16. 4
      framework/src/Volo.Abp.Localization/Volo/Abp/Localization/LanguageInfoExtensions.cs
  17. 2
      framework/src/Volo.Abp.Localization/Volo/Abp/Localization/LocalizableStringSerializer.cs
  18. 4
      framework/src/Volo.Abp.Localization/Volo/Abp/Localization/LocalizationResource.cs
  19. 7
      framework/src/Volo.Abp.Localization/Volo/Abp/Localization/LocalizationResourceBase.cs
  20. 2
      framework/src/Volo.Abp.Localization/Volo/Abp/Localization/LocalizationResourceContributorList.cs
  21. 8
      framework/src/Volo.Abp.Localization/Volo/Abp/Localization/LocalizationResourceDictionary.cs
  22. 4
      framework/src/Volo.Abp.Localization/Volo/Abp/Localization/NonTypedLocalizationResource.cs
  23. 2
      framework/src/Volo.Abp.Localization/Volo/Abp/Localization/StaticLocalizationDictionary.cs
  24. 2
      framework/src/Volo.Abp.Localization/Volo/Abp/Localization/VirtualFiles/Json/JsonVirtualFileLocalizationResourceContributor.cs
  25. 14
      framework/src/Volo.Abp.Localization/Volo/Abp/Localization/VirtualFiles/VirtualFileLocalizationResourceContributorBase.cs

2
framework/src/Volo.Abp.Localization/Volo.Abp.Localization.csproj

@ -5,6 +5,8 @@
<PropertyGroup>
<TargetFrameworks>netstandard2.0;netstandard2.1;net7.0</TargetFrameworks>
<Nullable>enable</Nullable>
<WarningsAsErrors>Nullable</WarningsAsErrors>
<AssemblyName>Volo.Abp.Localization</AssemblyName>
<PackageId>Volo.Abp.Localization</PackageId>
<AssetTargetFallback>$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;</AssetTargetFallback>

8
framework/src/Volo.Abp.Localization/Volo/Abp/Localization/AbpDictionaryBasedStringLocalizer.cs

@ -118,7 +118,7 @@ public class AbpDictionaryBasedStringLocalizer : IAbpStringLocalizer
return value;
}
protected virtual LocalizedString GetLocalizedStringOrNull(
protected virtual LocalizedString? GetLocalizedStringOrNull(
string name,
string cultureName,
bool tryDefaults = true)
@ -153,7 +153,7 @@ public class AbpDictionaryBasedStringLocalizer : IAbpStringLocalizer
//Try to get from default language
if (!Resource.DefaultCultureName.IsNullOrEmpty())
{
var strDefault = Resource.Contributors.GetOrNull(Resource.DefaultCultureName, name);
var strDefault = Resource.Contributors.GetOrNull(Resource.DefaultCultureName!, name);
if (strDefault != null)
{
return strDefault;
@ -208,7 +208,7 @@ public class AbpDictionaryBasedStringLocalizer : IAbpStringLocalizer
//Fill all strings from default culture
if (!Resource.DefaultCultureName.IsNullOrEmpty())
{
Resource.Contributors.Fill(Resource.DefaultCultureName, allStrings, includeDynamicContributors);
Resource.Contributors.Fill(Resource.DefaultCultureName!, allStrings, includeDynamicContributors);
}
//Overwrite all strings from the language based on country culture
@ -268,7 +268,7 @@ public class AbpDictionaryBasedStringLocalizer : IAbpStringLocalizer
if (!Resource.DefaultCultureName.IsNullOrEmpty())
{
await Resource.Contributors.FillAsync(
Resource.DefaultCultureName,
Resource.DefaultCultureName!,
allStrings,
includeDynamicContributors
);

8
framework/src/Volo.Abp.Localization/Volo/Abp/Localization/AbpEnumLocalizer.cs

@ -19,14 +19,14 @@ public class AbpEnumLocalizer : IAbpEnumLocalizer, ITransientDependency
return GetStringInternal(enumType, enumValue, StringLocalizerFactory.CreateDefaultOrNull());
}
public virtual string GetString(Type enumType, object enumValue, params IStringLocalizer[] specifyLocalizers)
public virtual string GetString(Type enumType, object enumValue, params IStringLocalizer?[] specifyLocalizers)
{
return GetStringInternal(enumType, enumValue, specifyLocalizers);
}
protected virtual string GetStringInternal(Type enumType, object enumValue, params IStringLocalizer[] specifyLocalizers)
protected virtual string GetStringInternal(Type enumType, object enumValue, params IStringLocalizer?[] specifyLocalizers)
{
var memberName = enumType.GetEnumName(enumValue);
var memberName = enumType.GetEnumName(enumValue)!;
var localizedString = GetStringOrNull(
specifyLocalizers,
new[]
@ -42,7 +42,7 @@ public class AbpEnumLocalizer : IAbpEnumLocalizer, ITransientDependency
return localizedString ?? memberName;
}
protected virtual string GetStringOrNull(IStringLocalizer[] localizers, IEnumerable<string> keys)
protected virtual string? GetStringOrNull(IStringLocalizer?[] localizers, IEnumerable<string> keys)
{
foreach (var key in keys)
{

2
framework/src/Volo.Abp.Localization/Volo/Abp/Localization/AbpLocalizationOptions.cs

@ -11,7 +11,7 @@ public class AbpLocalizationOptions
/// <summary>
/// Used as the default resource when resource was not specified on a localization operation.
/// </summary>
public Type DefaultResourceType { get; set; }
public Type? DefaultResourceType { get; set; }
public ITypeList<ILocalizationResourceContributor> GlobalContributors { get; }

2
framework/src/Volo.Abp.Localization/Volo/Abp/Localization/AbpStringLocalizerExtensions.cs

@ -35,7 +35,7 @@ public static class AbpStringLocalizerExtensions
throw new AbpException($"Could not find the _localizer field inside the {typeof(StringLocalizer<>).FullName} class. Probably its name has changed. Please report this issue to the ABP framework.");
}
return localizerField.GetValue(stringLocalizer) as IStringLocalizer;
return (localizerField.GetValue(stringLocalizer) as IStringLocalizer)!;
}
public static IEnumerable<LocalizedString> GetAllStrings(

16
framework/src/Volo.Abp.Localization/Volo/Abp/Localization/AbpStringLocalizerFactory.cs

@ -52,12 +52,12 @@ public class AbpStringLocalizerFactory : IStringLocalizerFactory, IAbpStringLoca
return CreateInternal(resource.ResourceName, resource, lockCache);
}
public IStringLocalizer CreateByResourceNameOrNull(string resourceName)
public IStringLocalizer? CreateByResourceNameOrNull(string resourceName)
{
return CreateByResourceNameOrNullInternal(resourceName, lockCache: true);
}
private IStringLocalizer CreateByResourceNameOrNullInternal(
private IStringLocalizer? CreateByResourceNameOrNullInternal(
string resourceName,
bool lockCache)
{
@ -74,12 +74,12 @@ public class AbpStringLocalizerFactory : IStringLocalizerFactory, IAbpStringLoca
return CreateInternal(resourceName, resource, lockCache);
}
public Task<IStringLocalizer> CreateByResourceNameOrNullAsync(string resourceName)
public Task<IStringLocalizer?> CreateByResourceNameOrNullAsync(string resourceName)
{
return CreateByResourceNameOrNullInternalAsync(resourceName, lockCache: true);
}
private async Task<IStringLocalizer> CreateByResourceNameOrNullInternalAsync(
private async Task<IStringLocalizer?> CreateByResourceNameOrNullInternalAsync(
string resourceName,
bool lockCache)
{
@ -175,7 +175,7 @@ public class AbpStringLocalizerFactory : IStringLocalizerFactory, IAbpStringLoca
{
resource.Contributors.Add(
Activator
.CreateInstance(globalContributorType)
.CreateInstance(globalContributorType)!
.As<ILocalizationResourceContributor>()
);
}
@ -194,7 +194,7 @@ public class AbpStringLocalizerFactory : IStringLocalizerFactory, IAbpStringLoca
.BaseResourceNames
.Select(x => CreateByResourceNameOrNullInternal(x, lockCache: false))
.Where(x => x != null)
.ToList(),
.ToList()!,
AbpLocalizationOptions
)
);
@ -206,7 +206,7 @@ public class AbpStringLocalizerFactory : IStringLocalizerFactory, IAbpStringLoca
{
resource.Contributors.Add(
Activator
.CreateInstance(globalContributorType)
.CreateInstance(globalContributorType)!
.As<ILocalizationResourceContributor>()
);
}
@ -259,7 +259,7 @@ public class AbpStringLocalizerFactory : IStringLocalizerFactory, IAbpStringLoca
}
}
public IStringLocalizer CreateDefaultOrNull()
public IStringLocalizer? CreateDefaultOrNull()
{
if (AbpLocalizationOptions.DefaultResourceType == null)
{

6
framework/src/Volo.Abp.Localization/Volo/Abp/Localization/External/IExternalLocalizationStore.cs

@ -5,11 +5,9 @@ namespace Volo.Abp.Localization.External;
public interface IExternalLocalizationStore
{
[CanBeNull]
LocalizationResourceBase GetResourceOrNull([NotNull] string resourceName);
LocalizationResourceBase? GetResourceOrNull([NotNull] string resourceName);
[ItemCanBeNull]
Task<LocalizationResourceBase> GetResourceOrNullAsync([NotNull] string resourceName);
Task<LocalizationResourceBase?> GetResourceOrNullAsync([NotNull] string resourceName);
Task<string[]> GetResourceNamesAsync();

6
framework/src/Volo.Abp.Localization/Volo/Abp/Localization/External/NullExternalLocalizationStore.cs

@ -6,14 +6,14 @@ namespace Volo.Abp.Localization.External;
public class NullExternalLocalizationStore : IExternalLocalizationStore, ISingletonDependency
{
public LocalizationResourceBase GetResourceOrNull(string resourceName)
public LocalizationResourceBase? GetResourceOrNull(string resourceName)
{
return null;
}
public Task<LocalizationResourceBase> GetResourceOrNullAsync(string resourceName)
public Task<LocalizationResourceBase?> GetResourceOrNullAsync(string resourceName)
{
return Task.FromResult<LocalizationResourceBase>(null);
return Task.FromResult<LocalizationResourceBase?>(null);
}
public Task<string[]> GetResourceNamesAsync()

2
framework/src/Volo.Abp.Localization/Volo/Abp/Localization/ILanguageInfo.cs

@ -8,5 +8,5 @@ public interface ILanguageInfo
string DisplayName { get; }
string FlagIcon { get; }
string? FlagIcon { get; }
}

2
framework/src/Volo.Abp.Localization/Volo/Abp/Localization/ILocalizableStringSerializer.cs

@ -2,7 +2,7 @@
public interface ILocalizableStringSerializer
{
string Serialize(ILocalizableString localizableString);
string? Serialize(ILocalizableString localizableString);
ILocalizableString Deserialize(string value);
}

2
framework/src/Volo.Abp.Localization/Volo/Abp/Localization/ILocalizationDictionary.cs

@ -10,7 +10,7 @@ public interface ILocalizationDictionary
{
string CultureName { get; }
LocalizedString GetOrNull(string name);
LocalizedString? GetOrNull(string name);
void Fill(Dictionary<string, LocalizedString> dictionary);
}

2
framework/src/Volo.Abp.Localization/Volo/Abp/Localization/ILocalizationResourceContributor.cs

@ -10,7 +10,7 @@ public interface ILocalizationResourceContributor
void Initialize(LocalizationResourceInitializationContext context);
LocalizedString GetOrNull(string cultureName, string name);
LocalizedString? GetOrNull(string cultureName, string name);
void Fill(string cultureName, Dictionary<string, LocalizedString> dictionary);

14
framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonLocalizationDictionaryBuilder.cs

@ -2,7 +2,6 @@ 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;
@ -13,8 +12,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)
public static ILocalizationDictionary? BuildFromFile(string filePath)
{
try
{
@ -38,10 +36,9 @@ 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)
public static ILocalizationDictionary? BuildFromJsonString(string jsonString)
{
JsonLocalizationFile jsonFile;
JsonLocalizationFile? jsonFile;
try
{
jsonFile = JsonSerializer.Deserialize<JsonLocalizationFile>(jsonString, DeserializeOptions);
@ -50,6 +47,11 @@ public static class JsonLocalizationDictionaryBuilder
{
throw new AbpException("Can not parse json string. " + ex.Message);
}
if (jsonFile == null)
{
return null;
}
var cultureCode = jsonFile.Culture;
if (string.IsNullOrEmpty(cultureCode))

2
framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonLocalizationFile.cs

@ -7,7 +7,7 @@ public class JsonLocalizationFile
/// <summary>
/// Culture name; eg : en , en-us, zh-CN
/// </summary>
public string Culture { get; set; }
public string Culture { get; set; } = default!;
public Dictionary<string, string> Texts { get; set; }

29
framework/src/Volo.Abp.Localization/Volo/Abp/Localization/LanguageInfo.cs

@ -8,19 +8,18 @@ namespace Volo.Abp.Localization;
public class LanguageInfo : ILanguageInfo
{
[NotNull]
public virtual string CultureName { get; protected set; }
public virtual string CultureName { get; protected set; } = default!;
[NotNull]
public virtual string UiCultureName { get; protected set; }
public virtual string UiCultureName { get; protected set; } = default!;
[NotNull]
public virtual string DisplayName { get; protected set; }
public virtual string DisplayName { get; protected set; } = default!;
[NotNull]
public virtual string TwoLetterISOLanguageName { get; protected set; }
public virtual string TwoLetterISOLanguageName { get; protected set; } = default!;
[CanBeNull]
public virtual string FlagIcon { get; set; }
public virtual string? FlagIcon { get; set; }
protected LanguageInfo()
@ -30,30 +29,30 @@ public class LanguageInfo : ILanguageInfo
public LanguageInfo(
string cultureName,
string uiCultureName = null,
string displayName = null,
string flagIcon = null)
string? uiCultureName = null,
string? displayName = null,
string? flagIcon = null)
{
ChangeCultureInternal(cultureName, uiCultureName, displayName);
FlagIcon = flagIcon;
}
public virtual void ChangeCulture(string cultureName, string uiCultureName = null, string displayName = null)
public virtual void ChangeCulture(string cultureName, string? uiCultureName = null, string? displayName = null)
{
ChangeCultureInternal(cultureName, uiCultureName, displayName);
}
private void ChangeCultureInternal(string cultureName, string uiCultureName, string displayName)
private void ChangeCultureInternal(string cultureName, string? uiCultureName, string? displayName)
{
CultureName = Check.NotNullOrWhiteSpace(cultureName, nameof(cultureName));
UiCultureName = !uiCultureName.IsNullOrWhiteSpace()
UiCultureName = (!uiCultureName.IsNullOrWhiteSpace()
? uiCultureName
: cultureName;
: cultureName)!;
DisplayName = !displayName.IsNullOrWhiteSpace()
DisplayName = (!displayName.IsNullOrWhiteSpace()
? displayName
: cultureName;
: cultureName)!;
TwoLetterISOLanguageName = new CultureInfo(cultureName)
.TwoLetterISOLanguageName;

4
framework/src/Volo.Abp.Localization/Volo/Abp/Localization/LanguageInfoExtensions.cs

@ -6,10 +6,10 @@ namespace Volo.Abp.Localization;
public static class LanguageInfoExtensions
{
public static T FindByCulture<T>(
public static T? FindByCulture<T>(
[NotNull] this IEnumerable<T> languages,
[NotNull] string cultureName,
[CanBeNull] string uiCultureName = null)
string? uiCultureName = null)
where T : class, ILanguageInfo
{
if (uiCultureName == null)

2
framework/src/Volo.Abp.Localization/Volo/Abp/Localization/LocalizableStringSerializer.cs

@ -13,7 +13,7 @@ public class LocalizableStringSerializer : ILocalizableStringSerializer, ITransi
LocalizationOptions = localizationOptions.Value;
}
public virtual string Serialize(ILocalizableString localizableString)
public virtual string? Serialize(ILocalizableString? localizableString)
{
if (localizableString == null)
{

4
framework/src/Volo.Abp.Localization/Volo/Abp/Localization/LocalizationResource.cs

@ -12,8 +12,8 @@ public class LocalizationResource : LocalizationResourceBase
public LocalizationResource(
[NotNull] Type resourceType,
[CanBeNull] string defaultCultureName = null,
[CanBeNull] ILocalizationResourceContributor initialContributor = null)
string? defaultCultureName = null,
ILocalizationResourceContributor? initialContributor = null)
: base(
LocalizationResourceNameAttribute.GetName(resourceType),
defaultCultureName,

7
framework/src/Volo.Abp.Localization/Volo/Abp/Localization/LocalizationResourceBase.cs

@ -10,16 +10,15 @@ public abstract class LocalizationResourceBase
public List<string> BaseResourceNames { get; }
[CanBeNull]
public string DefaultCultureName { get; set; }
public string? DefaultCultureName { get; set; }
[NotNull]
public LocalizationResourceContributorList Contributors { get; }
public LocalizationResourceBase(
[NotNull] string resourceName,
[CanBeNull] string defaultCultureName = null,
[CanBeNull] ILocalizationResourceContributor initialContributor = null)
string? defaultCultureName = null,
ILocalizationResourceContributor? initialContributor = null)
{
ResourceName = Check.NotNullOrWhiteSpace(resourceName, nameof(resourceName));
DefaultCultureName = defaultCultureName;

2
framework/src/Volo.Abp.Localization/Volo/Abp/Localization/LocalizationResourceContributorList.cs

@ -7,7 +7,7 @@ namespace Volo.Abp.Localization;
public class LocalizationResourceContributorList : List<ILocalizationResourceContributor>
{
public LocalizedString GetOrNull(
public LocalizedString? GetOrNull(
string cultureName,
string name,
bool includeDynamicContributors = true)

8
framework/src/Volo.Abp.Localization/Volo/Abp/Localization/LocalizationResourceDictionary.cs

@ -8,12 +8,12 @@ public class LocalizationResourceDictionary : Dictionary<string, LocalizationRes
{
private readonly Dictionary<Type, LocalizationResourceBase> _resourcesByTypes = new();
public LocalizationResource Add<TResouce>([CanBeNull] string defaultCultureName = null)
public LocalizationResource Add<TResouce>(string? defaultCultureName = null)
{
return Add(typeof(TResouce), defaultCultureName);
}
public LocalizationResource Add(Type resourceType, [CanBeNull] string defaultCultureName = null)
public LocalizationResource Add(Type resourceType, string? defaultCultureName = null)
{
var resourceName = LocalizationResourceNameAttribute.GetName(resourceType);
if (ContainsKey(resourceName))
@ -29,7 +29,7 @@ public class LocalizationResourceDictionary : Dictionary<string, LocalizationRes
return resource;
}
public NonTypedLocalizationResource Add([NotNull] string resourceName, [CanBeNull] string defaultCultureName = null)
public NonTypedLocalizationResource Add([NotNull] string resourceName, string? defaultCultureName = null)
{
Check.NotNullOrWhiteSpace(resourceName, nameof(resourceName));
@ -80,7 +80,7 @@ public class LocalizationResourceDictionary : Dictionary<string, LocalizationRes
return resource;
}
public LocalizationResourceBase GetOrNull(Type resourceType)
public LocalizationResourceBase? GetOrNull(Type resourceType)
{
return _resourcesByTypes.GetOrDefault(resourceType);
}

4
framework/src/Volo.Abp.Localization/Volo/Abp/Localization/NonTypedLocalizationResource.cs

@ -6,8 +6,8 @@ public class NonTypedLocalizationResource : LocalizationResourceBase
{
public NonTypedLocalizationResource(
[NotNull] string resourceName,
[CanBeNull] string defaultCultureName = null,
[CanBeNull] ILocalizationResourceContributor initialContributor = null
string? defaultCultureName = null,
ILocalizationResourceContributor? initialContributor = null
) : base(
resourceName,
defaultCultureName,

2
framework/src/Volo.Abp.Localization/Volo/Abp/Localization/StaticLocalizationDictionary.cs

@ -25,7 +25,7 @@ public class StaticLocalizationDictionary : ILocalizationDictionary
}
/// <inheritdoc/>
public virtual LocalizedString GetOrNull(string name)
public virtual LocalizedString? GetOrNull(string name)
{
return Dictionary.GetOrDefault(name);
}

2
framework/src/Volo.Abp.Localization/Volo/Abp/Localization/VirtualFiles/Json/JsonVirtualFileLocalizationResourceContributor.cs

@ -19,7 +19,7 @@ public class JsonVirtualFileLocalizationResourceContributor : VirtualFileLocaliz
return file.Name.EndsWith(".json", StringComparison.OrdinalIgnoreCase);
}
protected override ILocalizationDictionary CreateDictionaryFromFileContent(string jsonString)
protected override ILocalizationDictionary? CreateDictionaryFromFileContent(string jsonString)
{
return JsonLocalizationDictionaryBuilder.BuildFromJsonString(jsonString);
}

14
framework/src/Volo.Abp.Localization/Volo/Abp/Localization/VirtualFiles/VirtualFileLocalizationResourceContributorBase.cs

@ -16,11 +16,11 @@ public abstract class VirtualFileLocalizationResourceContributorBase : ILocaliza
public bool IsDynamic => false;
private readonly string _virtualPath;
private IVirtualFileProvider _virtualFileProvider;
private Dictionary<string, ILocalizationDictionary> _dictionaries;
private IVirtualFileProvider _virtualFileProvider = default!;
private Dictionary<string, ILocalizationDictionary>? _dictionaries;
private bool _subscribedForChanges;
private readonly object _syncObj = new object();
private LocalizationResourceBase _resource;
private LocalizationResourceBase _resource = default!;
protected VirtualFileLocalizationResourceContributorBase(string virtualPath)
{
@ -33,7 +33,7 @@ public abstract class VirtualFileLocalizationResourceContributorBase : ILocaliza
_virtualFileProvider = context.ServiceProvider.GetRequiredService<IVirtualFileProvider>();
}
public virtual LocalizedString GetOrNull(string cultureName, string name)
public virtual LocalizedString? GetOrNull(string cultureName, string name)
{
return GetDictionaries().GetOrDefault(cultureName)?.GetOrNull(name);
}
@ -118,8 +118,7 @@ public abstract class VirtualFileLocalizationResourceContributorBase : ILocaliza
protected abstract bool CanParseFile(IFileInfo file);
[CanBeNull]
protected virtual ILocalizationDictionary CreateDictionaryFromFile(IFileInfo file)
protected virtual ILocalizationDictionary? CreateDictionaryFromFile(IFileInfo file)
{
using (var stream = file.CreateReadStream())
{
@ -127,6 +126,5 @@ public abstract class VirtualFileLocalizationResourceContributorBase : ILocaliza
}
}
[CanBeNull]
protected abstract ILocalizationDictionary CreateDictionaryFromFileContent(string fileContent);
protected abstract ILocalizationDictionary? CreateDictionaryFromFileContent(string fileContent);
}

Loading…
Cancel
Save