From 3ff5553a9d55b99b6596679bfa212aaf960ef570 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Tue, 4 Jul 2023 16:34:57 +0800 Subject: [PATCH] Enable nullable annotations for Volo.Abp.MultiLingualObject --- .../Volo.Abp.MultiLingualObjects.csproj | 2 + .../MultiLingualObjectManager.cs | 188 +++++++++--------- 2 files changed, 96 insertions(+), 94 deletions(-) diff --git a/framework/src/Volo.Abp.MultiLingualObjects/Volo.Abp.MultiLingualObjects.csproj b/framework/src/Volo.Abp.MultiLingualObjects/Volo.Abp.MultiLingualObjects.csproj index 54c8469153..5b45ea638f 100644 --- a/framework/src/Volo.Abp.MultiLingualObjects/Volo.Abp.MultiLingualObjects.csproj +++ b/framework/src/Volo.Abp.MultiLingualObjects/Volo.Abp.MultiLingualObjects.csproj @@ -5,6 +5,8 @@ netstandard2.0;netstandard2.1;net7.0 + enable + Nullable Volo.Abp.MultiLingualObject $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; false diff --git a/framework/src/Volo.Abp.MultiLingualObjects/Volo/Abp/MultiLingualObjects/MultiLingualObjectManager.cs b/framework/src/Volo.Abp.MultiLingualObjects/Volo/Abp/MultiLingualObjects/MultiLingualObjectManager.cs index 908431e997..c41605ad0e 100644 --- a/framework/src/Volo.Abp.MultiLingualObjects/Volo/Abp/MultiLingualObjects/MultiLingualObjectManager.cs +++ b/framework/src/Volo.Abp.MultiLingualObjects/Volo/Abp/MultiLingualObjects/MultiLingualObjectManager.cs @@ -1,97 +1,97 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; -using Volo.Abp.Localization; -using Volo.Abp.Settings; - -namespace Volo.Abp.MultiLingualObjects; - -public class MultiLingualObjectManager : IMultiLingualObjectManager, ITransientDependency -{ - protected ISettingProvider SettingProvider { get; } - - protected const int MaxCultureFallbackDepth = 5; - - public MultiLingualObjectManager(ISettingProvider settingProvider) - { - SettingProvider = settingProvider; - } - public virtual async Task GetTranslationAsync( - IEnumerable translations, - string? culture, - bool fallbackToParentCultures) - where TTranslation : class, IObjectTranslation - - { - culture ??= CultureInfo.CurrentUICulture.Name; - - if (translations == null || !translations.Any()) - { - return null; - } - - var translation = translations.FirstOrDefault(pt => pt.Language == culture); - if (translation != null) - { - return translation; - } - - if (fallbackToParentCultures) - { - translation = GetTranslationBasedOnCulturalRecursive( - CultureInfo.CurrentUICulture.Parent, - translations, - 0 - ); - - if (translation != null) - { - return translation; - } - } - - var defaultLanguage = await SettingProvider.GetOrNullAsync(LocalizationSettingNames.DefaultLanguage); - - translation = translations.FirstOrDefault(pt => pt.Language == defaultLanguage); - if (translation != null) - { - return translation; - } - - translation = translations.FirstOrDefault(); - return translation; - } - - public virtual Task GetTranslationAsync( - TMultiLingual multiLingual, - string? culture = null, - bool fallbackToParentCultures = true) - where TMultiLingual : IMultiLingualObject - where TTranslation : class, IObjectTranslation - { - return GetTranslationAsync(multiLingual.Translations, culture: culture, fallbackToParentCultures: fallbackToParentCultures); - } - - protected virtual TTranslation? GetTranslationBasedOnCulturalRecursive( - CultureInfo culture, IEnumerable translations, int currentDepth) - where TTranslation : class, IObjectTranslation - { - if (culture == null || - culture.Name.IsNullOrWhiteSpace() || - translations == null || !translations.Any() || - currentDepth > MaxCultureFallbackDepth) - { - return null; - } - - var translation = translations.FirstOrDefault(pt => pt.Language.Equals(culture.Name, StringComparison.OrdinalIgnoreCase)); - return translation ?? GetTranslationBasedOnCulturalRecursive(culture.Parent, translations, currentDepth + 1); +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Localization; +using Volo.Abp.Settings; + +namespace Volo.Abp.MultiLingualObjects; + +public class MultiLingualObjectManager : IMultiLingualObjectManager, ITransientDependency +{ + protected ISettingProvider SettingProvider { get; } + + protected const int MaxCultureFallbackDepth = 5; + + public MultiLingualObjectManager(ISettingProvider settingProvider) + { + SettingProvider = settingProvider; + } + public virtual async Task GetTranslationAsync( + IEnumerable? translations, + string? culture, + bool fallbackToParentCultures) + where TTranslation : class, IObjectTranslation + + { + culture ??= CultureInfo.CurrentUICulture.Name; + + if (translations == null || !translations.Any()) + { + return null; + } + + var translation = translations.FirstOrDefault(pt => pt.Language == culture); + if (translation != null) + { + return translation; + } + + if (fallbackToParentCultures) + { + translation = GetTranslationBasedOnCulturalRecursive( + CultureInfo.CurrentUICulture.Parent, + translations, + 0 + ); + + if (translation != null) + { + return translation; + } + } + + var defaultLanguage = await SettingProvider.GetOrNullAsync(LocalizationSettingNames.DefaultLanguage); + + translation = translations.FirstOrDefault(pt => pt.Language == defaultLanguage); + if (translation != null) + { + return translation; + } + + translation = translations.FirstOrDefault(); + return translation; + } + + public virtual Task GetTranslationAsync( + TMultiLingual multiLingual, + string? culture = null, + bool fallbackToParentCultures = true) + where TMultiLingual : IMultiLingualObject + where TTranslation : class, IObjectTranslation + { + return GetTranslationAsync(multiLingual.Translations, culture: culture, fallbackToParentCultures: fallbackToParentCultures); + } + + protected virtual TTranslation? GetTranslationBasedOnCulturalRecursive( + CultureInfo? culture, IEnumerable? translations, int currentDepth) + where TTranslation : class, IObjectTranslation + { + if (culture == null || + culture.Name.IsNullOrWhiteSpace() || + translations == null || !translations.Any() || + currentDepth > MaxCultureFallbackDepth) + { + return null; + } + + var translation = translations.FirstOrDefault(pt => pt.Language.Equals(culture.Name, StringComparison.OrdinalIgnoreCase)); + return translation ?? GetTranslationBasedOnCulturalRecursive(culture.Parent, translations, currentDepth + 1); } - public virtual async Task> GetBulkTranslationsAsync(IEnumerable> translationsCombined, string? culture, bool fallbackToParentCultures) + public virtual async Task> GetBulkTranslationsAsync(IEnumerable>? translationsCombined, string? culture, bool fallbackToParentCultures) where TTranslation : class, IObjectTranslation { culture ??= CultureInfo.CurrentUICulture.Name; @@ -180,7 +180,7 @@ public class MultiLingualObjectManager : IMultiLingualObjectManager, ITransientD } public virtual async Task> GetBulkTranslationsAsync(IEnumerable multiLinguals, string? culture, bool fallbackToParentCultures) - where TMultiLingual : IMultiLingualObject + where TMultiLingual : IMultiLingualObject where TTranslation : class, IObjectTranslation { var resInitial = await GetBulkTranslationsAsync(multiLinguals.Select(x => x.Translations), culture, fallbackToParentCultures); @@ -193,4 +193,4 @@ public class MultiLingualObjectManager : IMultiLingualObjectManager, ITransientD } return res; } -} +}