diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/ILanguageAppService.cs b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/ILanguageAppService.cs new file mode 100644 index 000000000..d816717dc --- /dev/null +++ b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/ILanguageAppService.cs @@ -0,0 +1,14 @@ +using System; +using System.Threading.Tasks; +using Volo.Abp.Application.Services; + +namespace LINGYUN.Abp.LocalizationManagement; + +public interface ILanguageAppService : IApplicationService +{ + Task CreateAsync(LanguageCreateDto input); + + Task UpdateAsync(string name, LanguageUpdateDto input); + + Task DeleteAsync(string name); +} diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/IResourceAppService.cs b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/IResourceAppService.cs new file mode 100644 index 000000000..cdfca38e4 --- /dev/null +++ b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/IResourceAppService.cs @@ -0,0 +1,13 @@ +using System.Threading.Tasks; +using Volo.Abp.Application.Services; + +namespace LINGYUN.Abp.LocalizationManagement; + +public interface IResourceAppService : IApplicationService +{ + Task CreateAsync(ResourceCreateDto input); + + Task UpdateAsync(string name, ResourceUpdateDto input); + + Task DeleteAsync(string name); +} diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/LanguageCreateDto.cs b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/LanguageCreateDto.cs new file mode 100644 index 000000000..fc9b6af58 --- /dev/null +++ b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/LanguageCreateDto.cs @@ -0,0 +1,14 @@ +using System.ComponentModel.DataAnnotations; +using Volo.Abp.Validation; + +namespace LINGYUN.Abp.LocalizationManagement; + +public class LanguageCreateDto : LanguageCreateOrUpdateDto +{ + [Required] + [DynamicStringLength(typeof(LanguageConsts), nameof(LanguageConsts.MaxCultureNameLength))] + public string CultureName { get; set; } + + [DynamicStringLength(typeof(LanguageConsts), nameof(LanguageConsts.MaxUiCultureNameLength))] + public string UiCultureName { get; set; } +} diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/LanguageCreateOrUpdateDto.cs b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/LanguageCreateOrUpdateDto.cs new file mode 100644 index 000000000..098bf6434 --- /dev/null +++ b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/LanguageCreateOrUpdateDto.cs @@ -0,0 +1,13 @@ +using System.ComponentModel.DataAnnotations; +using Volo.Abp.Validation; + +namespace LINGYUN.Abp.LocalizationManagement; +public abstract class LanguageCreateOrUpdateDto +{ + [Required] + [DynamicStringLength(typeof(LanguageConsts), nameof(LanguageConsts.MaxDisplayNameLength))] + public string DisplayName { get; set; } + + [DynamicStringLength(typeof(LanguageConsts), nameof(LanguageConsts.MaxFlagIconLength))] + public string FlagIcon { get; set; } +} diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/LanguageDto.cs b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/LanguageDto.cs new file mode 100644 index 000000000..bc49b926c --- /dev/null +++ b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/LanguageDto.cs @@ -0,0 +1,11 @@ +using System; +using Volo.Abp.Application.Dtos; + +namespace LINGYUN.Abp.LocalizationManagement; +public class LanguageDto : AuditedEntityDto +{ + public string CultureName { get; set; } + public string UiCultureName { get; set; } + public string DisplayName { get; set; } + public string FlagIcon { get; set; } +} diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/LanguageUpdateDto.cs b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/LanguageUpdateDto.cs new file mode 100644 index 000000000..83e790fab --- /dev/null +++ b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/LanguageUpdateDto.cs @@ -0,0 +1,4 @@ +namespace LINGYUN.Abp.LocalizationManagement; +public class LanguageUpdateDto : LanguageCreateOrUpdateDto +{ +} diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/ResourceCreateDto.cs b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/ResourceCreateDto.cs new file mode 100644 index 000000000..fcf7e30c2 --- /dev/null +++ b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/ResourceCreateDto.cs @@ -0,0 +1,10 @@ +using System.ComponentModel.DataAnnotations; +using Volo.Abp.Validation; + +namespace LINGYUN.Abp.LocalizationManagement; +public class ResourceCreateDto : ResourceCreateOrUpdateDto +{ + [Required] + [DynamicStringLength(typeof(ResourceConsts), nameof(ResourceConsts.MaxNameLength))] + public string Name { get; set; } +} diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/ResourceCreateOrUpdateDto.cs b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/ResourceCreateOrUpdateDto.cs new file mode 100644 index 000000000..115dd2462 --- /dev/null +++ b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/ResourceCreateOrUpdateDto.cs @@ -0,0 +1,17 @@ +using Volo.Abp.Validation; + +namespace LINGYUN.Abp.LocalizationManagement; + +public abstract class ResourceCreateOrUpdateDto +{ + public bool Enable { get; set; } = true; + + [DynamicStringLength(typeof(ResourceConsts), nameof(ResourceConsts.MaxNameLength))] + public string DisplayName { get; set; } + + [DynamicStringLength(typeof(ResourceConsts), nameof(ResourceConsts.MaxNameLength))] + public string Description { get; set; } + + [DynamicStringLength(typeof(ResourceConsts), nameof(ResourceConsts.MaxNameLength))] + public string DefaultCultureName { get; set; } +} diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/ResourceDto.cs b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/ResourceDto.cs new file mode 100644 index 000000000..c7dec462d --- /dev/null +++ b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/ResourceDto.cs @@ -0,0 +1,13 @@ +using System; +using Volo.Abp.Application.Dtos; + +namespace LINGYUN.Abp.LocalizationManagement; + +public class ResourceDto : AuditedEntityDto +{ + public bool Enable { get; set; } + public string Name { get; set; } + public string DisplayName { get; set; } + public string Description { get; set; } + public string DefaultCultureName { get; set; } +} diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/ResourceUpdateDto.cs b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/ResourceUpdateDto.cs new file mode 100644 index 000000000..2f9d1d6f2 --- /dev/null +++ b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/ResourceUpdateDto.cs @@ -0,0 +1,4 @@ +namespace LINGYUN.Abp.LocalizationManagement; +public class ResourceUpdateDto : ResourceCreateOrUpdateDto +{ +} diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application/LINGYUN/Abp/LocalizationManagement/LanguageAppService.cs b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application/LINGYUN/Abp/LocalizationManagement/LanguageAppService.cs new file mode 100644 index 000000000..1407e1008 --- /dev/null +++ b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application/LINGYUN/Abp/LocalizationManagement/LanguageAppService.cs @@ -0,0 +1,73 @@ +using LINGYUN.Abp.LocalizationManagement.Permissions; +using Microsoft.AspNetCore.Authorization; +using System.Threading.Tasks; +using Volo.Abp; + +namespace LINGYUN.Abp.LocalizationManagement; + +[Authorize(LocalizationManagementPermissions.Language.Default)] +public class LanguageAppService : LocalizationAppServiceBase, ILanguageAppService +{ + private readonly ILanguageRepository _repository; + + public LanguageAppService(ILanguageRepository repository) + { + _repository = repository; + } + + [Authorize(LocalizationManagementPermissions.Language.Create)] + public async virtual Task CreateAsync(LanguageCreateDto input) + { + if (_repository.FindByCultureNameAsync(input.CultureName) != null) + { + throw new BusinessException(LocalizationErrorCodes.Language.NameAlreadyExists) + .WithData(nameof(Language.CultureName), input.CultureName); + } + + var language = new Language( + GuidGenerator.Create(), + input.CultureName, + input.UiCultureName, + input.DisplayName, + input.FlagIcon); + + language = await _repository.InsertAsync(language); + + await CurrentUnitOfWork.SaveChangesAsync(); + + return ObjectMapper.Map(language); + } + + [Authorize(LocalizationManagementPermissions.Language.Delete)] + public async virtual Task DeleteAsync(string name) + { + var language = await GetByNameAsync(name); + + await _repository.DeleteAsync(language); + + await CurrentUnitOfWork.SaveChangesAsync(); + } + + [Authorize(LocalizationManagementPermissions.Language.Update)] + public async virtual Task UpdateAsync(string name, LanguageUpdateDto input) + { + var language = await GetByNameAsync(name); + + language.SetFlagIcon(input.FlagIcon); + language.SetDisplayName(input.DisplayName); + + await _repository.UpdateAsync(language); + + await CurrentUnitOfWork.SaveChangesAsync(); + + return ObjectMapper.Map(language); + } + + private async Task GetByNameAsync(string name) + { + var language = await _repository.FindByCultureNameAsync(name); + + return language ?? throw new BusinessException(LocalizationErrorCodes.Language.NameNotFoundOrStaticNotAllowed) + .WithData(nameof(Language.CultureName), name); + } +} diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application/LINGYUN/Abp/LocalizationManagement/LocalizationManagementApplicationMapperProfile.cs b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application/LINGYUN/Abp/LocalizationManagement/LocalizationManagementApplicationMapperProfile.cs index 6a85076fe..a3fb58b2f 100644 --- a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application/LINGYUN/Abp/LocalizationManagement/LocalizationManagementApplicationMapperProfile.cs +++ b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application/LINGYUN/Abp/LocalizationManagement/LocalizationManagementApplicationMapperProfile.cs @@ -6,6 +6,8 @@ namespace LINGYUN.Abp.LocalizationManagement { public LocalizationManagementApplicationMapperProfile() { + CreateMap(); + CreateMap(); } } } diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application/LINGYUN/Abp/LocalizationManagement/ResourceAppService.cs b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application/LINGYUN/Abp/LocalizationManagement/ResourceAppService.cs new file mode 100644 index 000000000..50206f337 --- /dev/null +++ b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application/LINGYUN/Abp/LocalizationManagement/ResourceAppService.cs @@ -0,0 +1,74 @@ +using LINGYUN.Abp.LocalizationManagement.Permissions; +using Microsoft.AspNetCore.Authorization; +using System.Threading.Tasks; +using Volo.Abp; + +namespace LINGYUN.Abp.LocalizationManagement; + +[Authorize(LocalizationManagementPermissions.Resource.Default)] +public class ResourceAppService : LocalizationAppServiceBase, IResourceAppService +{ + private readonly IResourceRepository _repository; + + public ResourceAppService(IResourceRepository repository) + { + _repository = repository; + } + + [Authorize(LocalizationManagementPermissions.Resource.Create)] + public async virtual Task CreateAsync(ResourceCreateDto input) + { + if (_repository.FindByNameAsync(input.Name) != null) + { + throw new BusinessException(LocalizationErrorCodes.Resource.NameAlreadyExists) + .WithData(nameof(Resource.Name), input.Name); + } + + var resource = new Resource( + GuidGenerator.Create(), + input.Name, + input.DisplayName, + input.Description, + input.DefaultCultureName); + + resource = await _repository.InsertAsync(resource); + + await CurrentUnitOfWork.SaveChangesAsync(); + + return ObjectMapper.Map(resource); + } + + [Authorize(LocalizationManagementPermissions.Resource.Delete)] + public async virtual Task DeleteAsync(string name) + { + var resource = await GetByNameAsync(name); + + await _repository.DeleteAsync(resource); + + await CurrentUnitOfWork.SaveChangesAsync(); + } + + [Authorize(LocalizationManagementPermissions.Resource.Update)] + public async virtual Task UpdateAsync(string name, ResourceUpdateDto input) + { + var resource = await GetByNameAsync(name); + + resource.SetDisplayName(input.DisplayName); + resource.SetDescription(input.Description); + resource.SetDefaultCultureName(input.DefaultCultureName); + + await _repository.UpdateAsync(resource); + + await CurrentUnitOfWork.SaveChangesAsync(); + + return ObjectMapper.Map(resource); + } + + private async Task GetByNameAsync(string name) + { + var resource = await _repository.FindByNameAsync(name); + + return resource ?? throw new BusinessException(LocalizationErrorCodes.Resource.NameNotFoundOrStaticNotAllowed) + .WithData(nameof(Resource.Name), name); + } +} diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Domain.Shared/LINGYUN/Abp/LocalizationManagement/LocalizationErrorCodes.cs b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Domain.Shared/LINGYUN/Abp/LocalizationManagement/LocalizationErrorCodes.cs new file mode 100644 index 000000000..381a84213 --- /dev/null +++ b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Domain.Shared/LINGYUN/Abp/LocalizationManagement/LocalizationErrorCodes.cs @@ -0,0 +1,37 @@ +namespace LINGYUN.Abp.LocalizationManagement; +public static class LocalizationErrorCodes +{ + public const string Namespace = "Localization"; + + /// + /// 语言代码002 + /// + public static class Language + { + public const string Prefix = Namespace + ":001"; + /// + /// 名称已经存在 + /// + public const string NameAlreadyExists = Prefix + "100"; + /// + /// 没有找到名为 {CultureName} 的语言名称或内置语言不允许操作! + /// + public const string NameNotFoundOrStaticNotAllowed = Prefix + "400"; + } + + /// + /// 资源代码002 + /// + public static class Resource + { + public const string Prefix = Namespace + ":002"; + /// + /// 名称已经存在 + /// + public const string NameAlreadyExists = Prefix + "100"; + /// + /// 没有找到名为 {Name} 的资源名称或内置资源不允许操作! + /// + public const string NameNotFoundOrStaticNotAllowed = Prefix + "400"; + } +} diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/Language.cs b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/Language.cs index 22982e9f4..ac2148e7e 100644 --- a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/Language.cs +++ b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/Language.cs @@ -3,7 +3,6 @@ using System; using Volo.Abp; using Volo.Abp.Domain.Entities.Auditing; using Volo.Abp.Localization; -using Volo.Abp.MultiTenancy; namespace LINGYUN.Abp.LocalizationManagement { @@ -16,10 +15,12 @@ namespace LINGYUN.Abp.LocalizationManagement public virtual string FlagIcon { get; set; } protected Language() { } public Language( + Guid id, [NotNull] string cultureName, [NotNull] string uiCultureName, [NotNull] string displayName, string flagIcon = null) + : base(id) { CultureName = Check.NotNullOrWhiteSpace(cultureName, nameof(cultureName), LanguageConsts.MaxCultureNameLength); UiCultureName = Check.NotNullOrWhiteSpace(uiCultureName, nameof(uiCultureName), LanguageConsts.MaxUiCultureNameLength); @@ -32,6 +33,16 @@ namespace LINGYUN.Abp.LocalizationManagement Enable = true; } + public virtual void SetDisplayName(string displayName) + { + DisplayName = Check.NotNullOrWhiteSpace(displayName, nameof(displayName), LanguageConsts.MaxDisplayNameLength); + } + + public virtual void SetFlagIcon(string flagIcon) + { + FlagIcon = Check.Length(flagIcon, nameof(flagIcon), LanguageConsts.MaxFlagIconLength); + } + public virtual void ChangeCulture(string cultureName, string uiCultureName = null, string displayName = null) { ChangeCultureInternal(cultureName, uiCultureName, displayName); diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/LanguageProvider.cs b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/LanguageProvider.cs new file mode 100644 index 000000000..601751fc8 --- /dev/null +++ b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/LanguageProvider.cs @@ -0,0 +1,37 @@ +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Linq; +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Localization; + +namespace LINGYUN.Abp.LocalizationManagement; + +[ExposeServices( + typeof(ILanguageProvider), + typeof(LanguageProvider))] +public class LanguageProvider : ILanguageProvider, ITransientDependency +{ + protected ILanguageRepository Repository { get; } + + public LanguageProvider(ILanguageRepository repository) + { + Repository = repository; + } + + public async virtual Task> GetLanguagesAsync() + { + var languages = await Repository.GetActivedListAsync(); + + return languages.Select(MapToLanguageInfo).ToImmutableList(); + } + + protected virtual LanguageInfo MapToLanguageInfo(Language language) + { + return new LanguageInfo( + language.CultureName, + language.UiCultureName, + language.DisplayName, + language.FlagIcon); + } +} diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/Resource.cs b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/Resource.cs index db763a96f..4967c50d9 100644 --- a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/Resource.cs +++ b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/Resource.cs @@ -14,10 +14,12 @@ namespace LINGYUN.Abp.LocalizationManagement public virtual string DefaultCultureName { get; set; } protected Resource() { } public Resource( + Guid id, [NotNull] string name, [CanBeNull] string displayName = null, [CanBeNull] string description = null, [CanBeNull] string defaultCultureName = null) + : base(id) { Name = Check.NotNullOrWhiteSpace(name, nameof(name), ResourceConsts.MaxNameLength); @@ -27,5 +29,20 @@ namespace LINGYUN.Abp.LocalizationManagement Enable = true; } + + public virtual void SetDisplayName(string displayName) + { + DisplayName = Check.Length(displayName, nameof(displayName), ResourceConsts.MaxDisplayNameLength); + } + + public virtual void SetDescription(string description) + { + Description = Check.Length(description, nameof(description), ResourceConsts.MaxDescriptionLength); + } + + public virtual void SetDefaultCultureName(string defaultCultureName) + { + DefaultCultureName = Check.Length(defaultCultureName, nameof(defaultCultureName), ResourceConsts.MaxDefaultCultureNameLength); + } } } diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/StaticLocalizationSaver.cs b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/StaticLocalizationSaver.cs index 9b6e46233..9ecb9acd6 100644 --- a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/StaticLocalizationSaver.cs +++ b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/StaticLocalizationSaver.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Volo.Abp.DependencyInjection; +using Volo.Abp.Guids; using Volo.Abp.Localization; using Volo.Abp.Uow; @@ -14,6 +15,7 @@ namespace LINGYUN.Abp.LocalizationManagement; [Dependency(ReplaceServices = true)] public class StaticLocalizationSaver : IStaticLocalizationSaver, ITransientDependency { + protected IGuidGenerator GuidGenerator { get; } protected ILanguageRepository LanguageRepository { get; } protected ITextRepository TextRepository { get; } protected IResourceRepository ResourceRepository { get; } @@ -23,6 +25,7 @@ public class StaticLocalizationSaver : IStaticLocalizationSaver, ITransientDepen protected AbpLocalizationPersistenceOptions LocalizationPersistenceOptions { get; } public StaticLocalizationSaver( + IGuidGenerator guidGenerator, IServiceProvider serviceProvider, ILanguageRepository languageRepository, ITextRepository textRepository, @@ -31,6 +34,7 @@ public class StaticLocalizationSaver : IStaticLocalizationSaver, ITransientDepen IOptions localizationOptions, IOptions localizationPersistenceOptions) { + GuidGenerator = guidGenerator; ServiceProvider = serviceProvider; LanguageRepository = languageRepository; TextRepository = textRepository; @@ -51,6 +55,7 @@ public class StaticLocalizationSaver : IStaticLocalizationSaver, ITransientDepen { await LanguageRepository.InsertAsync( new Language( + GuidGenerator.Create(), language.CultureName, language.UiCultureName, language.DisplayName, @@ -71,6 +76,7 @@ public class StaticLocalizationSaver : IStaticLocalizationSaver, ITransientDepen { await ResourceRepository.InsertAsync( new Resource( + GuidGenerator.Create(), localizationResource.ResourceName, localizationResource.ResourceName, localizationResource.ResourceName, diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.HttpApi/LINGYUN/Abp/LocalizationManagement/LanguageController.cs b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.HttpApi/LINGYUN/Abp/LocalizationManagement/LanguageController.cs new file mode 100644 index 000000000..0b563571f --- /dev/null +++ b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.HttpApi/LINGYUN/Abp/LocalizationManagement/LanguageController.cs @@ -0,0 +1,44 @@ +using LINGYUN.Abp.LocalizationManagement.Permissions; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.AspNetCore.Mvc; +namespace LINGYUN.Abp.LocalizationManagement; + +[Authorize(LocalizationManagementPermissions.Language.Default)] +[RemoteService(Name = LocalizationRemoteServiceConsts.RemoteServiceName)] +[Area("localization")] +[Route("api/localization/languages")] +public class LanguageController : AbpControllerBase, ILanguageAppService +{ + private readonly ILanguageAppService _service; + + public LanguageController(ILanguageAppService service) + { + _service = service; + } + + [HttpPost] + [Authorize(LocalizationManagementPermissions.Language.Create)] + public virtual Task CreateAsync(LanguageCreateDto input) + { + return _service.CreateAsync(input); + } + + [HttpDelete] + [Route("{name}")] + [Authorize(LocalizationManagementPermissions.Language.Delete)] + public virtual Task DeleteAsync(string name) + { + return _service.DeleteAsync(name); + } + + [HttpPut] + [Route("{name}")] + [Authorize(LocalizationManagementPermissions.Language.Update)] + public virtual Task UpdateAsync(string name, LanguageUpdateDto input) + { + return _service.UpdateAsync(name, input); + } +} diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.HttpApi/LINGYUN/Abp/LocalizationManagement/ResourceController.cs b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.HttpApi/LINGYUN/Abp/LocalizationManagement/ResourceController.cs new file mode 100644 index 000000000..ba838bd49 --- /dev/null +++ b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.HttpApi/LINGYUN/Abp/LocalizationManagement/ResourceController.cs @@ -0,0 +1,45 @@ +using LINGYUN.Abp.LocalizationManagement.Permissions; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.AspNetCore.Mvc; + +namespace LINGYUN.Abp.LocalizationManagement; + +[Authorize(LocalizationManagementPermissions.Resource.Default)] +[RemoteService(Name = LocalizationRemoteServiceConsts.RemoteServiceName)] +[Area("localization")] +[Route("api/localization/resources")] +public class ResourceController : AbpControllerBase, IResourceAppService +{ + private readonly IResourceAppService _service; + + public ResourceController(IResourceAppService service) + { + _service = service; + } + + [HttpPost] + [Authorize(LocalizationManagementPermissions.Resource.Create)] + public virtual Task CreateAsync(ResourceCreateDto input) + { + return _service.CreateAsync(input); + } + + [HttpDelete] + [Route("{name}")] + [Authorize(LocalizationManagementPermissions.Resource.Delete)] + public virtual Task DeleteAsync(string name) + { + return _service.DeleteAsync(name); + } + + [HttpPut] + [Route("{name}")] + [Authorize(LocalizationManagementPermissions.Resource.Update)] + public virtual Task UpdateAsync(string name, ResourceUpdateDto input) + { + return _service.UpdateAsync(name, input); + } +}