diff --git a/framework/src/Volo.Abp.MultiLingualObjects/Volo/Abp/MultiLingualObjects/IMultiLingualObjectManager.cs b/framework/src/Volo.Abp.MultiLingualObjects/Volo/Abp/MultiLingualObjects/IMultiLingualObjectManager.cs index 81b7646a1c..904f3abd32 100644 --- a/framework/src/Volo.Abp.MultiLingualObjects/Volo/Abp/MultiLingualObjects/IMultiLingualObjectManager.cs +++ b/framework/src/Volo.Abp.MultiLingualObjects/Volo/Abp/MultiLingualObjects/IMultiLingualObjectManager.cs @@ -1,4 +1,5 @@ -using System.Threading.Tasks; +using System.Collections.Generic; +using System.Threading.Tasks; namespace Volo.Abp.MultiLingualObjects; @@ -10,4 +11,10 @@ public interface IMultiLingualObjectManager bool fallbackToParentCultures = true) where TMultiLingual : IMultiLingualObject where TTranslation : class, IObjectTranslation; + + Task GetTranslationAsync( + ICollection translations, + string culture = null, + bool fallbackToParentCultures = true) + where TTranslation : class, IObjectTranslation; } 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 b60e137e76..afb4509917 100644 --- a/framework/src/Volo.Abp.MultiLingualObjects/Volo/Abp/MultiLingualObjects/MultiLingualObjectManager.cs +++ b/framework/src/Volo.Abp.MultiLingualObjects/Volo/Abp/MultiLingualObjects/MultiLingualObjectManager.cs @@ -19,22 +19,21 @@ public class MultiLingualObjectManager : IMultiLingualObjectManager, ITransientD { SettingProvider = settingProvider; } - - public virtual async Task GetTranslationAsync( - TMultiLingual multiLingual, - string culture = null, - bool fallbackToParentCultures = true) - where TMultiLingual : IMultiLingualObject + public virtual async Task GetTranslationAsync( + ICollection translations, + string culture, + bool fallbackToParentCultures) where TTranslation : class, IObjectTranslation + { culture ??= CultureInfo.CurrentUICulture.Name; - if (multiLingual.Translations.IsNullOrEmpty()) + if (translations.IsNullOrEmpty()) { return null; } - var translation = multiLingual.Translations.FirstOrDefault(pt => pt.Language == culture); + var translation = translations.FirstOrDefault(pt => pt.Language == culture); if (translation != null) { return translation; @@ -44,7 +43,7 @@ public class MultiLingualObjectManager : IMultiLingualObjectManager, ITransientD { translation = GetTranslationBasedOnCulturalRecursive( CultureInfo.CurrentUICulture.Parent, - multiLingual.Translations, + translations, 0 ); @@ -56,16 +55,26 @@ public class MultiLingualObjectManager : IMultiLingualObjectManager, ITransientD var defaultLanguage = await SettingProvider.GetOrNullAsync(LocalizationSettingNames.DefaultLanguage); - translation = multiLingual.Translations.FirstOrDefault(pt => pt.Language == defaultLanguage); + translation = translations.FirstOrDefault(pt => pt.Language == defaultLanguage); if (translation != null) { return translation; } - translation = multiLingual.Translations.FirstOrDefault(); + 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, ICollection translations, int currentDepth) where TTranslation : class, IObjectTranslation diff --git a/framework/test/Volo.Abp.MultiLingualObjects.Tests/Volo/Abp/MultiLingualObjects/MultiLingualObjectManager_Tests.cs b/framework/test/Volo.Abp.MultiLingualObjects.Tests/Volo/Abp/MultiLingualObjects/MultiLingualObjectManager_Tests.cs index 1b26b06297..afe15bff99 100644 --- a/framework/test/Volo.Abp.MultiLingualObjects.Tests/Volo/Abp/MultiLingualObjects/MultiLingualObjectManager_Tests.cs +++ b/framework/test/Volo.Abp.MultiLingualObjects.Tests/Volo/Abp/MultiLingualObjects/MultiLingualObjectManager_Tests.cs @@ -51,6 +51,17 @@ public class MultiLingualObjectManager_Tests : AbpIntegratedTest