diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index ec3341c623..efca73a484 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -376,10 +376,6 @@ "text": "Entities & Aggregate Roots", "path": "Entities.md" }, - { - "text": "Multi-Lingual-Entities", - "path": "Multi-Lingual-Entities.md" - }, { "text": "Value Objects", "path": "Value-Objects.md" diff --git a/docs/zh-Hans/Multi-Lingual-Entities.md b/docs/zh-Hans/Multi-Lingual-Entities.md deleted file mode 100644 index 2deff4e38f..0000000000 --- a/docs/zh-Hans/Multi-Lingual-Entities.md +++ /dev/null @@ -1,100 +0,0 @@ -# 多语言实体 - -ABP框架为多语言实体定义了两个基本接口用于翻译实体的标准模型. - -## IHasMultiLingual - -`IHasMultiLingual` 接口用于标记多语言实体. 通过 `IHasMultiLingual` 接口被标记为多语言的实体定义与语言无关的信息. 多语言实体包含翻译集合,其中包含与语言有关的信息. - -示例: - -```csharp -public class Product : Entity, IMultiLingualEntity -{ - public decimal Price { get; set; } - - public ICollection Translations { get; set; } -} -``` - -## IMultiLingualTranslation - -`IMultiLingualTranslation` 接口用于标记多语言实体的翻译. 通过 `IHasMultiLingual` 接口被标记为的翻译实体定义与语言有关的信息. 翻译实体包含 `Language` 字段,用于翻译的语言代码. - -示例: - -```csharp -public class ProductTranslation : Entity, IMultiLingualTranslation -{ - public string Name { get; set; } - - public string Language { get; set; } -} -``` - -## 映射为DTO对象 - -ABP提供了[对象到对象的映射](Object-To-Object-Mapping.md)系统,你可以通过实现 `IObjectMapper` 接口将多语言实体映射为DTO. - -示例: - -```csharp -public class MultiLingualProductObjectMapper : IObjectMapper, ITransientDependency -{ - private readonly IMultiLingualObjectManager _multiLingualObjectManager; - - public MultiLingualProductObjectMapper(IMultiLingualObjectManager multiLingualObjectManager) - { - _multiLingualObjectManager = multiLingualObjectManager; - } - - public ProductDto Map(Product source) - { - var translation = _multiLingualObjectManager.GetTranslation(source); - - return new ProductDto - { - Price = source.Price, - Id = source.Id, - Name = translation?.Name - }; - } - - public ProductDto Map(Product source, ProductDto destination) - { - return default; - } -} - -``` - -### AutoMapper集成 - -ABP提供了 `CreateMultiLingualMap` 扩展方法用于将多语言实体映射为DTO. - -示例: - -```csharp -public class ProductProfile : Profile -{ - public ProductProfile() - { - var mapResult = this.CreateMultiLingualMap(); - } -} -``` - -`CreateMultiLingualMap` 扩展方法返回了一个类型为 `CreateMultiLingualMapResult` 的对象,它包含 `EntityMap` 和 `TranslationMap` 字段. 这些字段可以用于自定义多语言映射. - -示例: - -```csharp -this.CreateMultiLingualMap(context) - .EntityMap.ForMember(dest => dest.ProductCount, opt => opt.MapFrom(src => src.Products.Count)); -``` - -## IMultiLingualObjectManager - -`IMultiLingualObjectManager` 接口定义了 `GetTranslation` 和 `GetTranslationAsync` 方法用于获取实体当前的翻译对象. - -`IMultiLingualObjectManager` 的默认实现首先使用当前的UI语言寻找翻译, 如果当前的UI语言没有对应的翻译, 那么会搜索默认语言设置(参阅[设置](Settings.md))用于寻找翻译. 如果默认语言没有对应的翻译, 那么它会返回已存在翻译集合中的第一个翻译对象. diff --git a/docs/zh-Hans/docs-nav.json b/docs/zh-Hans/docs-nav.json index 241633caf5..4f47dd2760 100644 --- a/docs/zh-Hans/docs-nav.json +++ b/docs/zh-Hans/docs-nav.json @@ -354,10 +354,6 @@ "text": "实体&聚合根", "path": "Entities.md" }, - { - "text": "多语言实体", - "path": "Multi-Lingual-Entities.md" - }, { "text": "值对象" }, diff --git a/framework/Volo.Abp.sln b/framework/Volo.Abp.sln index fb631f3ee5..67d2fa2573 100644 --- a/framework/Volo.Abp.sln +++ b/framework/Volo.Abp.sln @@ -331,9 +331,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.GlobalFeatures", " EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.GlobalFeatures.Tests", "test\Volo.Abp.GlobalFeatures.Tests\Volo.Abp.GlobalFeatures.Tests.csproj", "{231F1581-AA21-44C3-BF27-51EB3AD5355C}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.MultiLingualObject", "src\Volo.Abp.MultiLingualObject\Volo.Abp.MultiLingualObject.csproj", "{C9142DED-1F6C-4385-A37D-81E46B233306}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.MultiLingualObjects", "src\Volo.Abp.MultiLingualObjects\Volo.Abp.MultiLingualObjects.csproj", "{C9142DED-1F6C-4385-A37D-81E46B233306}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.MultiLingualObject.Tests", "test\Volo.Abp.MultiLingualObject.Tests\Volo.Abp.MultiLingualObject.Tests.csproj", "{A30D63B0-E952-4052-BAEE-38B8BF924093}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.MultiLingualObjects.Tests", "test\Volo.Abp.MultiLingualObjects.Tests\Volo.Abp.MultiLingualObjects.Tests.csproj", "{A30D63B0-E952-4052-BAEE-38B8BF924093}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.Http.Client.IdentityModel.WebAssembly", "src\Volo.Abp.Http.Client.IdentityModel.WebAssembly\Volo.Abp.Http.Client.IdentityModel.WebAssembly.csproj", "{3D35A1E0-A9A1-404F-9B55-5F1A7EB6D5B8}" EndProject diff --git a/framework/src/Volo.Abp.AutoMapper/AutoMapper/AbpAutoMapperMultiLingualDtoExtensions.cs b/framework/src/Volo.Abp.AutoMapper/AutoMapper/AbpAutoMapperMultiLingualDtoExtensions.cs deleted file mode 100644 index 83cb2b35b9..0000000000 --- a/framework/src/Volo.Abp.AutoMapper/AutoMapper/AbpAutoMapperMultiLingualDtoExtensions.cs +++ /dev/null @@ -1,54 +0,0 @@ -using Volo.Abp.MultiLingualObject; -using Volo.Abp.Threading; - -namespace AutoMapper -{ - public static class AbpAutoMapperMultiLingualDtoExtensions - { - public static CreateMultiLingualMapResult CreateMultiLingualMap(this Profile profile) - where TTranslation : class, IMultiLingualTranslation - where TSource : IHasMultiLingual - { - - return new( - profile.CreateMap().BeforeMap>(), - profile.CreateMap()); - } - } - - public class AbpMultiLingualMapperAction : IMappingAction - where TTranslation : class, IMultiLingualTranslation - where TSource : IHasMultiLingual - { - private readonly IMultiLingualObjectManager _multiLingualObjectManager; - - public AbpMultiLingualMapperAction(IMultiLingualObjectManager multiLingualObjectManager) - { - _multiLingualObjectManager = multiLingualObjectManager; - } - - public void Process(TSource source, TDestination destination, ResolutionContext context) - { - var translation = AsyncHelper.RunSync(() => _multiLingualObjectManager.GetTranslationAsync(source)); - if (translation != null) - { - context.Mapper.Map(translation, destination); - } - } - } - - public class CreateMultiLingualMapResult - { - public IMappingExpression EntityMap { get; } - - public IMappingExpression TranslateMap { get; } - - public CreateMultiLingualMapResult( - IMappingExpression entityMap, - IMappingExpression translateMap) - { - EntityMap = entityMap; - TranslateMap = translateMap; - } - } -} diff --git a/framework/src/Volo.Abp.AutoMapper/Volo.Abp.AutoMapper.csproj b/framework/src/Volo.Abp.AutoMapper/Volo.Abp.AutoMapper.csproj index 4a5f44f937..9f028d31ee 100644 --- a/framework/src/Volo.Abp.AutoMapper/Volo.Abp.AutoMapper.csproj +++ b/framework/src/Volo.Abp.AutoMapper/Volo.Abp.AutoMapper.csproj @@ -16,7 +16,6 @@ - diff --git a/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapperModule.cs b/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapperModule.cs index 3969a04a1a..cb576ba1de 100644 --- a/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapperModule.cs +++ b/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapperModule.cs @@ -27,8 +27,6 @@ namespace Volo.Abp.AutoMapper context.Services.AddSingleton(CreateMappings); context.Services.AddSingleton(provider => provider.GetRequiredService()); - - context.Services.AddTransient(typeof(AbpMultiLingualMapperAction<,,>)); } private MapperAccessor CreateMappings(IServiceProvider serviceProvider) diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo.Abp.Ddd.Domain.csproj b/framework/src/Volo.Abp.Ddd.Domain/Volo.Abp.Ddd.Domain.csproj index e676f24313..87879334af 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo.Abp.Ddd.Domain.csproj +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo.Abp.Ddd.Domain.csproj @@ -20,7 +20,6 @@ - diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/AbpDddDomainModule.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/AbpDddDomainModule.cs index 0ebbe859bd..523a6ee4f2 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/AbpDddDomainModule.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/AbpDddDomainModule.cs @@ -6,7 +6,6 @@ using Volo.Abp.EventBus; using Volo.Abp.ExceptionHandling; using Volo.Abp.Guids; using Volo.Abp.Modularity; -using Volo.Abp.MultiLingualObject; using Volo.Abp.MultiTenancy; using Volo.Abp.ObjectMapping; using Volo.Abp.Specifications; @@ -26,7 +25,6 @@ namespace Volo.Abp.Domain typeof(AbpTimingModule), typeof(AbpUnitOfWorkModule), typeof(AbpObjectMappingModule), - typeof(AbpMultiLingualObjectModule), typeof(AbpExceptionHandlingModule), typeof(AbpSpecificationsModule) )] diff --git a/framework/src/Volo.Abp.MultiLingualObject/Volo/Abp/MultiLingualObject/IHasMultiLingual.cs b/framework/src/Volo.Abp.MultiLingualObject/Volo/Abp/MultiLingualObject/IHasMultiLingual.cs deleted file mode 100644 index 8ea05ecabd..0000000000 --- a/framework/src/Volo.Abp.MultiLingualObject/Volo/Abp/MultiLingualObject/IHasMultiLingual.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System.Collections.Generic; - -namespace Volo.Abp.MultiLingualObject -{ - public interface IHasMultiLingual - where TTranslation : class, IMultiLingualTranslation - { - ICollection Translations { get; set; } - } -} diff --git a/framework/src/Volo.Abp.MultiLingualObject/Volo/Abp/MultiLingualObject/IMultiLingualObjectManager.cs b/framework/src/Volo.Abp.MultiLingualObject/Volo/Abp/MultiLingualObject/IMultiLingualObjectManager.cs deleted file mode 100644 index e6ddc840e5..0000000000 --- a/framework/src/Volo.Abp.MultiLingualObject/Volo/Abp/MultiLingualObject/IMultiLingualObjectManager.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System.Threading.Tasks; - -namespace Volo.Abp.MultiLingualObject -{ - public interface IMultiLingualObjectManager - { - TTranslation GetTranslation( - TMultiLingual multiLingual, - bool fallbackToParentCultures = true, - string culture = null) - where TMultiLingual : IHasMultiLingual - where TTranslation : class, IMultiLingualTranslation; - - Task GetTranslationAsync( - TMultiLingual multiLingual, - bool fallbackToParentCultures = true, - string culture = null) - where TMultiLingual : IHasMultiLingual - where TTranslation : class, IMultiLingualTranslation; - } -} diff --git a/framework/src/Volo.Abp.MultiLingualObject/Volo/Abp/MultiLingualObject/IMultiLingualTranslation.cs b/framework/src/Volo.Abp.MultiLingualObject/Volo/Abp/MultiLingualObject/IMultiLingualTranslation.cs deleted file mode 100644 index 3676e08b44..0000000000 --- a/framework/src/Volo.Abp.MultiLingualObject/Volo/Abp/MultiLingualObject/IMultiLingualTranslation.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Volo.Abp.MultiLingualObject -{ - public interface IMultiLingualTranslation - { - string Language { get; set; } - } -} diff --git a/framework/src/Volo.Abp.MultiLingualObject/FodyWeavers.xml b/framework/src/Volo.Abp.MultiLingualObjects/FodyWeavers.xml similarity index 100% rename from framework/src/Volo.Abp.MultiLingualObject/FodyWeavers.xml rename to framework/src/Volo.Abp.MultiLingualObjects/FodyWeavers.xml diff --git a/framework/src/Volo.Abp.MultiLingualObject/FodyWeavers.xsd b/framework/src/Volo.Abp.MultiLingualObjects/FodyWeavers.xsd similarity index 100% rename from framework/src/Volo.Abp.MultiLingualObject/FodyWeavers.xsd rename to framework/src/Volo.Abp.MultiLingualObjects/FodyWeavers.xsd diff --git a/framework/src/Volo.Abp.MultiLingualObject/Volo.Abp.MultiLingualObject.csproj b/framework/src/Volo.Abp.MultiLingualObjects/Volo.Abp.MultiLingualObjects.csproj similarity index 92% rename from framework/src/Volo.Abp.MultiLingualObject/Volo.Abp.MultiLingualObject.csproj rename to framework/src/Volo.Abp.MultiLingualObjects/Volo.Abp.MultiLingualObjects.csproj index d6df31e1ed..da83bc80f4 100644 --- a/framework/src/Volo.Abp.MultiLingualObject/Volo.Abp.MultiLingualObject.csproj +++ b/framework/src/Volo.Abp.MultiLingualObjects/Volo.Abp.MultiLingualObjects.csproj @@ -5,7 +5,6 @@ netstandard2.0 - Volo.Abp.MultiLingualObject Volo.Abp.MultiLingualObject $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; false diff --git a/framework/src/Volo.Abp.MultiLingualObject/Volo/Abp/MultiLingualObject/AbpMultiLingualObjectModule.cs b/framework/src/Volo.Abp.MultiLingualObjects/Volo/Abp/MultiLingualObjects/AbpMultiLingualObjectsModule.cs similarity index 57% rename from framework/src/Volo.Abp.MultiLingualObject/Volo/Abp/MultiLingualObject/AbpMultiLingualObjectModule.cs rename to framework/src/Volo.Abp.MultiLingualObjects/Volo/Abp/MultiLingualObjects/AbpMultiLingualObjectsModule.cs index 120cf7bac1..248a0eff75 100644 --- a/framework/src/Volo.Abp.MultiLingualObject/Volo/Abp/MultiLingualObject/AbpMultiLingualObjectModule.cs +++ b/framework/src/Volo.Abp.MultiLingualObjects/Volo/Abp/MultiLingualObjects/AbpMultiLingualObjectsModule.cs @@ -1,11 +1,11 @@ using Volo.Abp.Localization; using Volo.Abp.Modularity; -namespace Volo.Abp.MultiLingualObject +namespace Volo.Abp.MultiLingualObjects { [DependsOn( typeof(AbpLocalizationModule))] - public class AbpMultiLingualObjectModule : AbpModule + public class AbpMultiLingualObjectsModule : AbpModule { } } diff --git a/framework/src/Volo.Abp.MultiLingualObjects/Volo/Abp/MultiLingualObjects/IMultiLingualObject.cs b/framework/src/Volo.Abp.MultiLingualObjects/Volo/Abp/MultiLingualObjects/IMultiLingualObject.cs new file mode 100644 index 0000000000..31a82f1b06 --- /dev/null +++ b/framework/src/Volo.Abp.MultiLingualObjects/Volo/Abp/MultiLingualObjects/IMultiLingualObject.cs @@ -0,0 +1,10 @@ +using System.Collections.Generic; + +namespace Volo.Abp.MultiLingualObjects +{ + public interface IMultiLingualObject + where TTranslation : class, IObjectTranslation + { + ICollection Translations { get; set; } + } +} diff --git a/framework/src/Volo.Abp.MultiLingualObjects/Volo/Abp/MultiLingualObjects/IMultiLingualObjectManager.cs b/framework/src/Volo.Abp.MultiLingualObjects/Volo/Abp/MultiLingualObjects/IMultiLingualObjectManager.cs new file mode 100644 index 0000000000..8a649cd51a --- /dev/null +++ b/framework/src/Volo.Abp.MultiLingualObjects/Volo/Abp/MultiLingualObjects/IMultiLingualObjectManager.cs @@ -0,0 +1,14 @@ +using System.Threading.Tasks; + +namespace Volo.Abp.MultiLingualObjects +{ + public interface IMultiLingualObjectManager + { + Task GetTranslationAsync( + TMultiLingual multiLingual, + string culture = null, + bool fallbackToParentCultures = true) + where TMultiLingual : IMultiLingualObject + where TTranslation : class, IObjectTranslation; + } +} diff --git a/framework/src/Volo.Abp.MultiLingualObjects/Volo/Abp/MultiLingualObjects/IObjectTranslation.cs b/framework/src/Volo.Abp.MultiLingualObjects/Volo/Abp/MultiLingualObjects/IObjectTranslation.cs new file mode 100644 index 0000000000..c1a8caa492 --- /dev/null +++ b/framework/src/Volo.Abp.MultiLingualObjects/Volo/Abp/MultiLingualObjects/IObjectTranslation.cs @@ -0,0 +1,7 @@ +namespace Volo.Abp.MultiLingualObjects +{ + public interface IObjectTranslation + { + string Language { get; set; } + } +} diff --git a/framework/src/Volo.Abp.MultiLingualObject/Volo/Abp/MultiLingualObject/MultiLingualObjectManager.cs b/framework/src/Volo.Abp.MultiLingualObjects/Volo/Abp/MultiLingualObjects/MultiLingualObjectManager.cs similarity index 56% rename from framework/src/Volo.Abp.MultiLingualObject/Volo/Abp/MultiLingualObject/MultiLingualObjectManager.cs rename to framework/src/Volo.Abp.MultiLingualObjects/Volo/Abp/MultiLingualObjects/MultiLingualObjectManager.cs index db2b373d70..e7185ec0c4 100644 --- a/framework/src/Volo.Abp.MultiLingualObject/Volo/Abp/MultiLingualObject/MultiLingualObjectManager.cs +++ b/framework/src/Volo.Abp.MultiLingualObjects/Volo/Abp/MultiLingualObjects/MultiLingualObjectManager.cs @@ -6,9 +6,8 @@ using System.Threading.Tasks; using Volo.Abp.DependencyInjection; using Volo.Abp.Localization; using Volo.Abp.Settings; -using Volo.Abp.Threading; -namespace Volo.Abp.MultiLingualObject +namespace Volo.Abp.MultiLingualObjects { public class MultiLingualObjectManager : IMultiLingualObjectManager, ITransientDependency { @@ -21,27 +20,16 @@ namespace Volo.Abp.MultiLingualObject SettingProvider = settingProvider; } - public TTranslation GetTranslation( - TMultiLingual multiLingual, - bool fallbackToParentCultures = true, - string culture = null) - where TMultiLingual : IHasMultiLingual - where TTranslation : class, IMultiLingualTranslation - { - return AsyncHelper.RunSync(() => - GetTranslationAsync(multiLingual, fallbackToParentCultures, culture)); - } - public virtual async Task GetTranslationAsync( TMultiLingual multiLingual, - bool fallbackToParentCultures = true, - string culture = null) - where TMultiLingual : IHasMultiLingual - where TTranslation : class, IMultiLingualTranslation + string culture = null, + bool fallbackToParentCultures = true) + where TMultiLingual : IMultiLingualObject + where TTranslation : class, IObjectTranslation { culture ??= CultureInfo.CurrentUICulture.Name; - if (multiLingual.Translations == null || !multiLingual.Translations.Any()) + if (multiLingual.Translations.IsNullOrEmpty()) { return null; } @@ -54,9 +42,12 @@ namespace Volo.Abp.MultiLingualObject if (fallbackToParentCultures) { - translation = - GetTranslationBasedOnCulturalRecursive( - CultureInfo.CurrentUICulture.Parent, multiLingual.Translations, 0); + translation = GetTranslationBasedOnCulturalRecursive( + CultureInfo.CurrentUICulture.Parent, + multiLingual.Translations, + 0 + ); + if (translation != null) { return translation; @@ -77,19 +68,18 @@ namespace Volo.Abp.MultiLingualObject protected virtual TTranslation GetTranslationBasedOnCulturalRecursive( CultureInfo culture, ICollection translations, int currentDepth) - where TTranslation : class, IMultiLingualTranslation + where TTranslation : class, IObjectTranslation { - if (culture == null || culture.Name.IsNullOrWhiteSpace() || translations.IsNullOrEmpty() || + if (culture == null || + culture.Name.IsNullOrWhiteSpace() || + translations.IsNullOrEmpty() || currentDepth > MaxCultureFallbackDepth) { return null; } - var translation = translations.FirstOrDefault(pt => - pt.Language.Equals(culture.Name, StringComparison.OrdinalIgnoreCase)); - return translation ?? - GetTranslationBasedOnCulturalRecursive(culture.Parent, - translations, currentDepth + 1); + var translation = translations.FirstOrDefault(pt => pt.Language.Equals(culture.Name, StringComparison.OrdinalIgnoreCase)); + return translation ?? GetTranslationBasedOnCulturalRecursive(culture.Parent, translations, currentDepth + 1); } } } diff --git a/framework/test/Volo.Abp.AutoMapper.Tests/AutoMapper/AbpAutoMapperMultiLingualDto_Tests.cs b/framework/test/Volo.Abp.AutoMapper.Tests/AutoMapper/AbpAutoMapperMultiLingualDto_Tests.cs deleted file mode 100644 index 0efb72625b..0000000000 --- a/framework/test/Volo.Abp.AutoMapper.Tests/AutoMapper/AbpAutoMapperMultiLingualDto_Tests.cs +++ /dev/null @@ -1,114 +0,0 @@ -using System; -using System.Collections.Generic; -using Microsoft.Extensions.DependencyInjection; -using Shouldly; -using Volo.Abp; -using Volo.Abp.AutoMapper; -using Volo.Abp.Localization; -using Volo.Abp.MultiLingualObject.TestObjects; -using Volo.Abp.Testing; -using Xunit; - -namespace AutoMapper -{ - public class AbpAutoMapperMultiLingualDto_Tests : AbpIntegratedTest - { - private readonly Volo.Abp.ObjectMapping.IObjectMapper _objectMapper; - private readonly MultiLingualBook _book; - - public AbpAutoMapperMultiLingualDto_Tests() - { - _objectMapper = ServiceProvider.GetRequiredService(); - - var id = Guid.NewGuid(); - _book = new MultiLingualBook(id, 100) - { - Translations = new List() - }; - - var en = new MultiLingualBookTranslation - { - Language = "en", - Name = "C# in Depth", - }; - var zh = new MultiLingualBookTranslation - { - Language = "zh-Hans", - Name = "深入理解C#", - }; - - _book.Translations.Add(en); - _book.Translations.Add(zh); - } - - protected override void SetAbpApplicationCreationOptions(AbpApplicationCreationOptions options) - { - options.UseAutofac(); - } - - [Fact] - public void Should_Map_Current_UI_Culture() - { - using (CultureHelper.Use("zh-Hans")) - { - var bookDto = _objectMapper.Map(_book); - - bookDto.Name.ShouldBe("深入理解C#"); - bookDto.Price.ShouldBe(_book.Price); - bookDto.Id.ShouldBe(_book.Id); - } - } - - [Fact] - public void Should_Map_Fallback_UI_Culture() - { - using (CultureHelper.Use("en-us")) - { - var bookDto = _objectMapper.Map(_book); - - bookDto.Name.ShouldBe("C# in Depth"); - bookDto.Price.ShouldBe(_book.Price); - bookDto.Id.ShouldBe(_book.Id); - } - } - - [Fact] - public void Should_Map_Default_Language() - { - using (CultureHelper.Use("tr")) - { - var bookDto = _objectMapper.Map(_book); - - bookDto.Name.ShouldBe("C# in Depth"); - bookDto.Price.ShouldBe(_book.Price); - bookDto.Id.ShouldBe(_book.Id); - } - } - - [Fact] - public void NoTranslations_ShouldStillMapObject() - { - _book.Translations.Clear(); - - using (CultureHelper.Use("tr")) - { - var bookDto = _objectMapper.Map(_book); - - bookDto.Name.ShouldBeNull(); - bookDto.Price.ShouldBe(_book.Price); - bookDto.Id.ShouldBe(_book.Id); - } - } - } - - public class BookProfile : Profile - { - public BookProfile() - { - var mapResult = this.CreateMultiLingualMap(); - - mapResult.EntityMap.ValidateMemberList(MemberList.None); - mapResult.TranslateMap.ValidateMemberList(MemberList.None); - } - } -} diff --git a/framework/test/Volo.Abp.AutoMapper.Tests/Volo.Abp.AutoMapper.Tests.csproj b/framework/test/Volo.Abp.AutoMapper.Tests/Volo.Abp.AutoMapper.Tests.csproj index 37ffca1657..2bedb82ed5 100644 --- a/framework/test/Volo.Abp.AutoMapper.Tests/Volo.Abp.AutoMapper.Tests.csproj +++ b/framework/test/Volo.Abp.AutoMapper.Tests/Volo.Abp.AutoMapper.Tests.csproj @@ -13,7 +13,7 @@ - + diff --git a/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapperTestModule.cs b/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapperTestModule.cs index 6e9fb10bf2..fcc9918dd4 100644 --- a/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapperTestModule.cs +++ b/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapperTestModule.cs @@ -1,13 +1,11 @@ using Volo.Abp.Modularity; -using Volo.Abp.MultiLingualObject; using Volo.Abp.ObjectExtending; namespace Volo.Abp.AutoMapper { [DependsOn( typeof(AbpAutoMapperModule), - typeof(AbpObjectExtendingTestModule), - typeof(AbpMultiLingualObjectModule) + typeof(AbpObjectExtendingTestModule) )] public class AutoMapperTestModule : AbpModule { diff --git a/framework/test/Volo.Abp.MultiLingualObject.Tests/Volo/Abp/MultiLingualObject/MultiLingualObject_Tests.cs b/framework/test/Volo.Abp.MultiLingualObject.Tests/Volo/Abp/MultiLingualObject/MultiLingualObject_Tests.cs deleted file mode 100644 index 917a11a2a8..0000000000 --- a/framework/test/Volo.Abp.MultiLingualObject.Tests/Volo/Abp/MultiLingualObject/MultiLingualObject_Tests.cs +++ /dev/null @@ -1,132 +0,0 @@ -using System; -using System.Collections.Generic; -using Microsoft.Extensions.DependencyInjection; -using Shouldly; -using Volo.Abp.DependencyInjection; -using Volo.Abp.Localization; -using Volo.Abp.MultiLingualObject.TestObjects; -using Volo.Abp.ObjectMapping; -using Volo.Abp.Testing; -using Xunit; - -namespace Volo.Abp.MultiLingualObject -{ - public class MultiLingualObject_Tests : AbpIntegratedTest - { - private readonly IObjectMapper _objectMapper; - private readonly MultiLingualBook _book; - - public MultiLingualObject_Tests() - { - _objectMapper = ServiceProvider.GetRequiredService(); - - var id = Guid.NewGuid(); - _book = new MultiLingualBook(id, 100) - { - Translations = new List() - }; - - var en = new MultiLingualBookTranslation - { - Language = "en", - Name = "C# in Depth", - }; - var zh = new MultiLingualBookTranslation - { - Language = "zh-Hans", - Name = "深入理解C#", - }; - - _book.Translations.Add(en); - _book.Translations.Add(zh); - } - - protected override void SetAbpApplicationCreationOptions(AbpApplicationCreationOptions options) - { - options.UseAutofac(); - } - - [Fact] - public void Should_Map_Current_UI_Culture() - { - using (CultureHelper.Use("zh-Hans")) - { - var bookDto = _objectMapper.Map(_book); - - bookDto.Name.ShouldBe("深入理解C#"); - bookDto.Price.ShouldBe(_book.Price); - bookDto.Id.ShouldBe(_book.Id); - } - } - - [Fact] - public void Should_Map_Fallback_UI_Culture() - { - using (CultureHelper.Use("en-us")) - { - var bookDto = _objectMapper.Map(_book); - - bookDto.Name.ShouldBe("C# in Depth"); - bookDto.Price.ShouldBe(_book.Price); - bookDto.Id.ShouldBe(_book.Id); - } - } - - [Fact] - public void Should_Map_Default_Language() - { - using (CultureHelper.Use("tr")) - { - var bookDto = _objectMapper.Map(_book); - - bookDto.Name.ShouldBe("C# in Depth"); - bookDto.Price.ShouldBe(_book.Price); - bookDto.Id.ShouldBe(_book.Id); - } - } - - [Fact] - public void NoTranslations_ShouldStillMapObject() - { - _book.Translations.Clear(); - - using (CultureHelper.Use("tr")) - { - var bookDto = _objectMapper.Map(_book); - - bookDto.Name.ShouldBeNull(); - bookDto.Price.ShouldBe(_book.Price); - bookDto.Id.ShouldBe(_book.Id); - } - } - } - - public class MultiLingualBookObjectMapper : IObjectMapper, - ITransientDependency - { - private readonly IMultiLingualObjectManager _multiLingualObjectManager; - - public MultiLingualBookObjectMapper(IMultiLingualObjectManager multiLingualObjectManager) - { - _multiLingualObjectManager = multiLingualObjectManager; - } - - public MultiLingualBookDto Map(MultiLingualBook source) - { - var translation = - _multiLingualObjectManager.GetTranslation(source); - - return new MultiLingualBookDto - { - Price = source.Price, - Id = source.Id, - Name = translation?.Name - }; - } - - public MultiLingualBookDto Map(MultiLingualBook source, MultiLingualBookDto destination) - { - return default; - } - } -} diff --git a/framework/test/Volo.Abp.MultiLingualObject.Tests/Volo/Abp/MultiLingualObject/TestObjects/MultiLingualBookTranslation.cs b/framework/test/Volo.Abp.MultiLingualObject.Tests/Volo/Abp/MultiLingualObject/TestObjects/MultiLingualBookTranslation.cs deleted file mode 100644 index 5f35554078..0000000000 --- a/framework/test/Volo.Abp.MultiLingualObject.Tests/Volo/Abp/MultiLingualObject/TestObjects/MultiLingualBookTranslation.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System; - -namespace Volo.Abp.MultiLingualObject.TestObjects -{ - public class MultiLingualBookTranslation : IMultiLingualTranslation - { - public string Name { get; set; } - - public string Language { get; set; } - } -} diff --git a/framework/test/Volo.Abp.MultiLingualObject.Tests/Volo.Abp.MultiLingualObject.Tests.csproj b/framework/test/Volo.Abp.MultiLingualObjects.Tests/Volo.Abp.MultiLingualObjects.Tests.csproj similarity index 93% rename from framework/test/Volo.Abp.MultiLingualObject.Tests/Volo.Abp.MultiLingualObject.Tests.csproj rename to framework/test/Volo.Abp.MultiLingualObjects.Tests/Volo.Abp.MultiLingualObjects.Tests.csproj index 52d2f7ac2f..164a5da272 100644 --- a/framework/test/Volo.Abp.MultiLingualObject.Tests/Volo.Abp.MultiLingualObject.Tests.csproj +++ b/framework/test/Volo.Abp.MultiLingualObjects.Tests/Volo.Abp.MultiLingualObjects.Tests.csproj @@ -9,7 +9,7 @@ - + diff --git a/framework/test/Volo.Abp.MultiLingualObject.Tests/Volo/Abp/MultiLingualObject/AbpMultiLingualObjectTestModule.cs b/framework/test/Volo.Abp.MultiLingualObjects.Tests/Volo/Abp/MultiLingualObjects/AbpMultiLingualObjectsTestModule.cs similarity index 60% rename from framework/test/Volo.Abp.MultiLingualObject.Tests/Volo/Abp/MultiLingualObject/AbpMultiLingualObjectTestModule.cs rename to framework/test/Volo.Abp.MultiLingualObjects.Tests/Volo/Abp/MultiLingualObjects/AbpMultiLingualObjectsTestModule.cs index f8f79a3065..d563a6aab3 100644 --- a/framework/test/Volo.Abp.MultiLingualObject.Tests/Volo/Abp/MultiLingualObject/AbpMultiLingualObjectTestModule.cs +++ b/framework/test/Volo.Abp.MultiLingualObjects.Tests/Volo/Abp/MultiLingualObjects/AbpMultiLingualObjectsTestModule.cs @@ -1,21 +1,20 @@ -using Autofac.Extensions.DependencyInjection; -using Volo.Abp.Autofac; +using Volo.Abp.Autofac; using Volo.Abp.Localization; using Volo.Abp.Modularity; using Volo.Abp.ObjectMapping; using Volo.Abp.Settings; -namespace Volo.Abp.MultiLingualObject +namespace Volo.Abp.MultiLingualObjects { [DependsOn( typeof(AbpAutofacModule), typeof(AbpLocalizationModule), typeof(AbpSettingsModule), typeof(AbpObjectMappingModule), - typeof(AbpMultiLingualObjectModule), + typeof(AbpMultiLingualObjectsModule), typeof(AbpTestBaseModule) )] - public class AbpMultiLingualObjectTestModule : AbpModule + public class AbpMultiLingualObjectsTestModule : AbpModule { } } diff --git a/framework/test/Volo.Abp.MultiLingualObject.Tests/Volo/Abp/MultiLingualObject/MultiLingualObjectManager_Tests.cs b/framework/test/Volo.Abp.MultiLingualObjects.Tests/Volo/Abp/MultiLingualObjects/MultiLingualObjectManager_Tests.cs similarity index 80% rename from framework/test/Volo.Abp.MultiLingualObject.Tests/Volo/Abp/MultiLingualObject/MultiLingualObjectManager_Tests.cs rename to framework/test/Volo.Abp.MultiLingualObjects.Tests/Volo/Abp/MultiLingualObjects/MultiLingualObjectManager_Tests.cs index 269bf91b54..d3d5ae3617 100644 --- a/framework/test/Volo.Abp.MultiLingualObject.Tests/Volo/Abp/MultiLingualObject/MultiLingualObjectManager_Tests.cs +++ b/framework/test/Volo.Abp.MultiLingualObjects.Tests/Volo/Abp/MultiLingualObjects/MultiLingualObjectManager_Tests.cs @@ -4,13 +4,13 @@ using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using Shouldly; using Volo.Abp.Localization; -using Volo.Abp.MultiLingualObject.TestObjects; +using Volo.Abp.MultiLingualObjects.TestObjects; using Volo.Abp.Testing; using Xunit; -namespace Volo.Abp.MultiLingualObject +namespace Volo.Abp.MultiLingualObjects { - public class MultiLingualObjectManager_Tests : AbpIntegratedTest + public class MultiLingualObjectManager_Tests : AbpIntegratedTest { private readonly IMultiLingualObjectManager _multiLingualObjectManager; private readonly MultiLingualBook _book; @@ -40,17 +40,6 @@ namespace Volo.Abp.MultiLingualObject _book.Translations.Add(zh); } - [Fact] - public void GetTranslation() - { - using (CultureHelper.Use("en-us")) - { - var translation = _multiLingualObjectManager.GetTranslation(_book); - - translation.Name.ShouldBe("C# in Depth"); - } - } - [Fact] public async Task GetTranslationAsync() { diff --git a/framework/test/Volo.Abp.MultiLingualObject.Tests/Volo/Abp/MultiLingualObject/TestObjects/MultiLingualBook.cs b/framework/test/Volo.Abp.MultiLingualObjects.Tests/Volo/Abp/MultiLingualObjects/TestObjects/MultiLingualBook.cs similarity index 72% rename from framework/test/Volo.Abp.MultiLingualObject.Tests/Volo/Abp/MultiLingualObject/TestObjects/MultiLingualBook.cs rename to framework/test/Volo.Abp.MultiLingualObjects.Tests/Volo/Abp/MultiLingualObjects/TestObjects/MultiLingualBook.cs index d12022a44b..2dcae93b73 100644 --- a/framework/test/Volo.Abp.MultiLingualObject.Tests/Volo/Abp/MultiLingualObject/TestObjects/MultiLingualBook.cs +++ b/framework/test/Volo.Abp.MultiLingualObjects.Tests/Volo/Abp/MultiLingualObjects/TestObjects/MultiLingualBook.cs @@ -1,9 +1,9 @@ using System; using System.Collections.Generic; -namespace Volo.Abp.MultiLingualObject.TestObjects +namespace Volo.Abp.MultiLingualObjects.TestObjects { - public class MultiLingualBook : IHasMultiLingual + public class MultiLingualBook : IMultiLingualObject { public MultiLingualBook(Guid id, decimal price) { diff --git a/framework/test/Volo.Abp.MultiLingualObject.Tests/Volo/Abp/MultiLingualObject/TestObjects/MultiLingualBookDto.cs b/framework/test/Volo.Abp.MultiLingualObjects.Tests/Volo/Abp/MultiLingualObjects/TestObjects/MultiLingualBookDto.cs similarity index 79% rename from framework/test/Volo.Abp.MultiLingualObject.Tests/Volo/Abp/MultiLingualObject/TestObjects/MultiLingualBookDto.cs rename to framework/test/Volo.Abp.MultiLingualObjects.Tests/Volo/Abp/MultiLingualObjects/TestObjects/MultiLingualBookDto.cs index 8814f9a855..fe5868074f 100644 --- a/framework/test/Volo.Abp.MultiLingualObject.Tests/Volo/Abp/MultiLingualObject/TestObjects/MultiLingualBookDto.cs +++ b/framework/test/Volo.Abp.MultiLingualObjects.Tests/Volo/Abp/MultiLingualObjects/TestObjects/MultiLingualBookDto.cs @@ -1,6 +1,6 @@ using System; -namespace Volo.Abp.MultiLingualObject.TestObjects +namespace Volo.Abp.MultiLingualObjects.TestObjects { public class MultiLingualBookDto { diff --git a/framework/test/Volo.Abp.MultiLingualObjects.Tests/Volo/Abp/MultiLingualObjects/TestObjects/MultiLingualBookTranslation.cs b/framework/test/Volo.Abp.MultiLingualObjects.Tests/Volo/Abp/MultiLingualObjects/TestObjects/MultiLingualBookTranslation.cs new file mode 100644 index 0000000000..e1b85df173 --- /dev/null +++ b/framework/test/Volo.Abp.MultiLingualObjects.Tests/Volo/Abp/MultiLingualObjects/TestObjects/MultiLingualBookTranslation.cs @@ -0,0 +1,9 @@ +namespace Volo.Abp.MultiLingualObjects.TestObjects +{ + public class MultiLingualBookTranslation : IObjectTranslation + { + public string Name { get; set; } + + public string Language { get; set; } + } +} diff --git a/nupkg/common.ps1 b/nupkg/common.ps1 index cea7664613..9fd545dc35 100644 --- a/nupkg/common.ps1 +++ b/nupkg/common.ps1 @@ -147,7 +147,6 @@ $projects = ( "framework/src/Volo.Abp.Validation", "framework/src/Volo.Abp.VirtualFileSystem", "framework/src/Volo.Abp.Kafka", - "framework/src/Volo.Abp.MultiLingualObject", "framework/src/Volo.Abp.Swashbuckle", # modules/account