Browse Source

Merge branch 'rel-6.0' of https://github.com/abpframework/abp into rel-6.0

pull/13423/head 6.0.0-rc.1
Volosoft Agent 4 years ago
parent
commit
97278177a1
  1. 2
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionFilter.cs
  2. 2
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionPageFilter.cs
  3. 9
      framework/src/Volo.Abp.MultiLingualObjects/Volo/Abp/MultiLingualObjects/IMultiLingualObjectManager.cs
  4. 31
      framework/src/Volo.Abp.MultiLingualObjects/Volo/Abp/MultiLingualObjects/MultiLingualObjectManager.cs
  5. 11
      framework/test/Volo.Abp.MultiLingualObjects.Tests/Volo/Abp/MultiLingualObjects/MultiLingualObjectManager_Tests.cs

2
framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionFilter.cs

@ -20,7 +20,7 @@ namespace Volo.Abp.AspNetCore.Mvc.ExceptionHandling;
public class AbpExceptionFilter : IAsyncExceptionFilter, ITransientDependency public class AbpExceptionFilter : IAsyncExceptionFilter, ITransientDependency
{ {
public async Task OnExceptionAsync(ExceptionContext context) public virtual async Task OnExceptionAsync(ExceptionContext context)
{ {
if (!ShouldHandleException(context)) if (!ShouldHandleException(context))
{ {

2
framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionPageFilter.cs

@ -25,7 +25,7 @@ public class AbpExceptionPageFilter : IAsyncPageFilter, ITransientDependency
return Task.CompletedTask; return Task.CompletedTask;
} }
public async Task OnPageHandlerExecutionAsync(PageHandlerExecutingContext context, PageHandlerExecutionDelegate next) public virtual async Task OnPageHandlerExecutionAsync(PageHandlerExecutingContext context, PageHandlerExecutionDelegate next)
{ {
if (context.HandlerMethod == null || !ShouldHandleException(context)) if (context.HandlerMethod == null || !ShouldHandleException(context))
{ {

9
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; namespace Volo.Abp.MultiLingualObjects;
@ -10,4 +11,10 @@ public interface IMultiLingualObjectManager
bool fallbackToParentCultures = true) bool fallbackToParentCultures = true)
where TMultiLingual : IMultiLingualObject<TTranslation> where TMultiLingual : IMultiLingualObject<TTranslation>
where TTranslation : class, IObjectTranslation; where TTranslation : class, IObjectTranslation;
Task<TTranslation> GetTranslationAsync<TTranslation>(
ICollection<TTranslation> translations,
string culture = null,
bool fallbackToParentCultures = true)
where TTranslation : class, IObjectTranslation;
} }

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

@ -19,22 +19,21 @@ public class MultiLingualObjectManager : IMultiLingualObjectManager, ITransientD
{ {
SettingProvider = settingProvider; SettingProvider = settingProvider;
} }
public virtual async Task<TTranslation> GetTranslationAsync<TTranslation>(
public virtual async Task<TTranslation> GetTranslationAsync<TMultiLingual, TTranslation>( ICollection<TTranslation> translations,
TMultiLingual multiLingual, string culture,
string culture = null, bool fallbackToParentCultures)
bool fallbackToParentCultures = true)
where TMultiLingual : IMultiLingualObject<TTranslation>
where TTranslation : class, IObjectTranslation where TTranslation : class, IObjectTranslation
{ {
culture ??= CultureInfo.CurrentUICulture.Name; culture ??= CultureInfo.CurrentUICulture.Name;
if (multiLingual.Translations.IsNullOrEmpty()) if (translations.IsNullOrEmpty())
{ {
return null; return null;
} }
var translation = multiLingual.Translations.FirstOrDefault(pt => pt.Language == culture); var translation = translations.FirstOrDefault(pt => pt.Language == culture);
if (translation != null) if (translation != null)
{ {
return translation; return translation;
@ -44,7 +43,7 @@ public class MultiLingualObjectManager : IMultiLingualObjectManager, ITransientD
{ {
translation = GetTranslationBasedOnCulturalRecursive( translation = GetTranslationBasedOnCulturalRecursive(
CultureInfo.CurrentUICulture.Parent, CultureInfo.CurrentUICulture.Parent,
multiLingual.Translations, translations,
0 0
); );
@ -56,16 +55,26 @@ public class MultiLingualObjectManager : IMultiLingualObjectManager, ITransientD
var defaultLanguage = await SettingProvider.GetOrNullAsync(LocalizationSettingNames.DefaultLanguage); 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) if (translation != null)
{ {
return translation; return translation;
} }
translation = multiLingual.Translations.FirstOrDefault(); translation = translations.FirstOrDefault();
return translation; return translation;
} }
public virtual Task<TTranslation> GetTranslationAsync<TMultiLingual, TTranslation>(
TMultiLingual multiLingual,
string culture = null,
bool fallbackToParentCultures = true)
where TMultiLingual : IMultiLingualObject<TTranslation>
where TTranslation : class, IObjectTranslation
{
return GetTranslationAsync(multiLingual.Translations, culture: culture, fallbackToParentCultures: fallbackToParentCultures);
}
protected virtual TTranslation GetTranslationBasedOnCulturalRecursive<TTranslation>( protected virtual TTranslation GetTranslationBasedOnCulturalRecursive<TTranslation>(
CultureInfo culture, ICollection<TTranslation> translations, int currentDepth) CultureInfo culture, ICollection<TTranslation> translations, int currentDepth)
where TTranslation : class, IObjectTranslation where TTranslation : class, IObjectTranslation

11
framework/test/Volo.Abp.MultiLingualObjects.Tests/Volo/Abp/MultiLingualObjects/MultiLingualObjectManager_Tests.cs

@ -51,6 +51,17 @@ public class MultiLingualObjectManager_Tests : AbpIntegratedTest<AbpMultiLingual
} }
} }
[Fact]
public async Task GetTranslationFromListAsync()
{
using (CultureHelper.Use("en-us"))
{
var translation = await _multiLingualObjectManager.GetTranslationAsync(_book.Translations);
translation.Name.ShouldBe("C# in Depth");
}
}
[Fact] [Fact]
public async Task Should_Get_Specified_Language() public async Task Should_Get_Specified_Language()
{ {

Loading…
Cancel
Save