Browse Source

Enable nullable annotations for Volo.Abp.MultiLingualObject

pull/17020/head
liangshiwei 3 years ago
parent
commit
3ff5553a9d
  1. 2
      framework/src/Volo.Abp.MultiLingualObjects/Volo.Abp.MultiLingualObjects.csproj
  2. 188
      framework/src/Volo.Abp.MultiLingualObjects/Volo/Abp/MultiLingualObjects/MultiLingualObjectManager.cs

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

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

188
framework/src/Volo.Abp.MultiLingualObjects/Volo/Abp/MultiLingualObjects/MultiLingualObjectManager.cs

@ -1,97 +1,97 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Globalization; using System.Globalization;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
using Volo.Abp.Localization; using Volo.Abp.Localization;
using Volo.Abp.Settings; using Volo.Abp.Settings;
namespace Volo.Abp.MultiLingualObjects; namespace Volo.Abp.MultiLingualObjects;
public class MultiLingualObjectManager : IMultiLingualObjectManager, ITransientDependency public class MultiLingualObjectManager : IMultiLingualObjectManager, ITransientDependency
{ {
protected ISettingProvider SettingProvider { get; } protected ISettingProvider SettingProvider { get; }
protected const int MaxCultureFallbackDepth = 5; protected const int MaxCultureFallbackDepth = 5;
public MultiLingualObjectManager(ISettingProvider settingProvider) public MultiLingualObjectManager(ISettingProvider settingProvider)
{ {
SettingProvider = settingProvider; SettingProvider = settingProvider;
} }
public virtual async Task<TTranslation?> GetTranslationAsync<TTranslation>( public virtual async Task<TTranslation?> GetTranslationAsync<TTranslation>(
IEnumerable<TTranslation> translations, IEnumerable<TTranslation>? translations,
string? culture, string? culture,
bool fallbackToParentCultures) bool fallbackToParentCultures)
where TTranslation : class, IObjectTranslation where TTranslation : class, IObjectTranslation
{ {
culture ??= CultureInfo.CurrentUICulture.Name; culture ??= CultureInfo.CurrentUICulture.Name;
if (translations == null || !translations.Any()) if (translations == null || !translations.Any())
{ {
return null; return null;
} }
var translation = translations.FirstOrDefault(pt => pt.Language == culture); var translation = translations.FirstOrDefault(pt => pt.Language == culture);
if (translation != null) if (translation != null)
{ {
return translation; return translation;
} }
if (fallbackToParentCultures) if (fallbackToParentCultures)
{ {
translation = GetTranslationBasedOnCulturalRecursive( translation = GetTranslationBasedOnCulturalRecursive(
CultureInfo.CurrentUICulture.Parent, CultureInfo.CurrentUICulture.Parent,
translations, translations,
0 0
); );
if (translation != null) if (translation != null)
{ {
return translation; return translation;
} }
} }
var defaultLanguage = await SettingProvider.GetOrNullAsync(LocalizationSettingNames.DefaultLanguage); var defaultLanguage = await SettingProvider.GetOrNullAsync(LocalizationSettingNames.DefaultLanguage);
translation = translations.FirstOrDefault(pt => pt.Language == defaultLanguage); translation = translations.FirstOrDefault(pt => pt.Language == defaultLanguage);
if (translation != null) if (translation != null)
{ {
return translation; return translation;
} }
translation = translations.FirstOrDefault(); translation = translations.FirstOrDefault();
return translation; return translation;
} }
public virtual Task<TTranslation?> GetTranslationAsync<TMultiLingual, TTranslation>( public virtual Task<TTranslation?> GetTranslationAsync<TMultiLingual, TTranslation>(
TMultiLingual multiLingual, TMultiLingual multiLingual,
string? culture = null, string? culture = null,
bool fallbackToParentCultures = true) bool fallbackToParentCultures = true)
where TMultiLingual : IMultiLingualObject<TTranslation> where TMultiLingual : IMultiLingualObject<TTranslation>
where TTranslation : class, IObjectTranslation where TTranslation : class, IObjectTranslation
{ {
return GetTranslationAsync(multiLingual.Translations, culture: culture, fallbackToParentCultures: fallbackToParentCultures); return GetTranslationAsync(multiLingual.Translations, culture: culture, fallbackToParentCultures: fallbackToParentCultures);
} }
protected virtual TTranslation? GetTranslationBasedOnCulturalRecursive<TTranslation>( protected virtual TTranslation? GetTranslationBasedOnCulturalRecursive<TTranslation>(
CultureInfo culture, IEnumerable<TTranslation> translations, int currentDepth) CultureInfo? culture, IEnumerable<TTranslation>? translations, int currentDepth)
where TTranslation : class, IObjectTranslation where TTranslation : class, IObjectTranslation
{ {
if (culture == null || if (culture == null ||
culture.Name.IsNullOrWhiteSpace() || culture.Name.IsNullOrWhiteSpace() ||
translations == null || !translations.Any() || translations == null || !translations.Any() ||
currentDepth > MaxCultureFallbackDepth) currentDepth > MaxCultureFallbackDepth)
{ {
return null; return null;
} }
var translation = translations.FirstOrDefault(pt => pt.Language.Equals(culture.Name, StringComparison.OrdinalIgnoreCase)); var translation = translations.FirstOrDefault(pt => pt.Language.Equals(culture.Name, StringComparison.OrdinalIgnoreCase));
return translation ?? GetTranslationBasedOnCulturalRecursive(culture.Parent, translations, currentDepth + 1); return translation ?? GetTranslationBasedOnCulturalRecursive(culture.Parent, translations, currentDepth + 1);
} }
public virtual async Task<List<TTranslation?>> GetBulkTranslationsAsync<TTranslation>(IEnumerable<IEnumerable<TTranslation>> translationsCombined, string? culture, bool fallbackToParentCultures) public virtual async Task<List<TTranslation?>> GetBulkTranslationsAsync<TTranslation>(IEnumerable<IEnumerable<TTranslation>>? translationsCombined, string? culture, bool fallbackToParentCultures)
where TTranslation : class, IObjectTranslation where TTranslation : class, IObjectTranslation
{ {
culture ??= CultureInfo.CurrentUICulture.Name; culture ??= CultureInfo.CurrentUICulture.Name;
@ -180,7 +180,7 @@ public class MultiLingualObjectManager : IMultiLingualObjectManager, ITransientD
} }
public virtual async Task<List<(TMultiLingual entity, TTranslation? translation)>> GetBulkTranslationsAsync<TMultiLingual, TTranslation>(IEnumerable<TMultiLingual> multiLinguals, string? culture, bool fallbackToParentCultures) public virtual async Task<List<(TMultiLingual entity, TTranslation? translation)>> GetBulkTranslationsAsync<TMultiLingual, TTranslation>(IEnumerable<TMultiLingual> multiLinguals, string? culture, bool fallbackToParentCultures)
where TMultiLingual : IMultiLingualObject<TTranslation> where TMultiLingual : IMultiLingualObject<TTranslation>
where TTranslation : class, IObjectTranslation where TTranslation : class, IObjectTranslation
{ {
var resInitial = await GetBulkTranslationsAsync(multiLinguals.Select(x => x.Translations), culture, fallbackToParentCultures); var resInitial = await GetBulkTranslationsAsync(multiLinguals.Select(x => x.Translations), culture, fallbackToParentCultures);
@ -193,4 +193,4 @@ public class MultiLingualObjectManager : IMultiLingualObjectManager, ITransientD
} }
return res; return res;
} }
} }

Loading…
Cancel
Save