From 0a4a3bfc4786982bf6deb634a5d155a971de78f8 Mon Sep 17 00:00:00 2001 From: cKey <35512826+colinin@users.noreply.github.com> Date: Fri, 11 Mar 2022 16:29:30 +0800 Subject: [PATCH] feat(saas): add localized text. --- .../Abp/Saas/AbpSaasDomainSharedModule.cs | 4 +++ .../LINGYUN/Abp/Saas/AbpSaasErrorCodes.cs | 3 ++ .../Abp/Saas/Localization/Resources/en.json | 30 ++++++++++++++++++- .../Saas/Localization/Resources/zh-Hans.json | 30 ++++++++++++++++++- .../Abp/Saas/Editions/EditionManager.cs | 2 +- .../LINGYUN/Abp/Saas/Tenants/TenantManager.cs | 3 +- 6 files changed, 68 insertions(+), 4 deletions(-) diff --git a/aspnet-core/modules/saas/LINGYUN.Abp.Saas.Domain.Shared/LINGYUN/Abp/Saas/AbpSaasDomainSharedModule.cs b/aspnet-core/modules/saas/LINGYUN.Abp.Saas.Domain.Shared/LINGYUN/Abp/Saas/AbpSaasDomainSharedModule.cs index 86b555f4c..5eb90db36 100644 --- a/aspnet-core/modules/saas/LINGYUN.Abp.Saas.Domain.Shared/LINGYUN/Abp/Saas/AbpSaasDomainSharedModule.cs +++ b/aspnet-core/modules/saas/LINGYUN.Abp.Saas.Domain.Shared/LINGYUN/Abp/Saas/AbpSaasDomainSharedModule.cs @@ -27,6 +27,10 @@ public class AbpSaasDomainSharedModule : AbpModule Configure(options => { options.MapCodeNamespace(AbpSaasErrorCodes.Namespace, typeof(AbpSaasResource)); + // 见租户管理模块 + options.MapCodeNamespace("Volo.AbpIo.MultiTenancy", typeof(AbpSaasResource)); + // 版本模块引用 + options.MapCodeNamespace("LINGYUN.Abp.MultiTenancy.Editions", typeof(AbpSaasResource)); }); } } diff --git a/aspnet-core/modules/saas/LINGYUN.Abp.Saas.Domain.Shared/LINGYUN/Abp/Saas/AbpSaasErrorCodes.cs b/aspnet-core/modules/saas/LINGYUN.Abp.Saas.Domain.Shared/LINGYUN/Abp/Saas/AbpSaasErrorCodes.cs index 62ebf0f83..cf89a3ecf 100644 --- a/aspnet-core/modules/saas/LINGYUN.Abp.Saas.Domain.Shared/LINGYUN/Abp/Saas/AbpSaasErrorCodes.cs +++ b/aspnet-core/modules/saas/LINGYUN.Abp.Saas.Domain.Shared/LINGYUN/Abp/Saas/AbpSaasErrorCodes.cs @@ -3,4 +3,7 @@ public static class AbpSaasErrorCodes { public const string Namespace = "Saas"; + + public const string DuplicateEditionDisplayName = Namespace + ":010001"; + public const string DuplicateTenantName = Namespace + ":020001"; } diff --git a/aspnet-core/modules/saas/LINGYUN.Abp.Saas.Domain.Shared/LINGYUN/Abp/Saas/Localization/Resources/en.json b/aspnet-core/modules/saas/LINGYUN.Abp.Saas.Domain.Shared/LINGYUN/Abp/Saas/Localization/Resources/en.json index 6bc282ef2..2ef8c2bb4 100644 --- a/aspnet-core/modules/saas/LINGYUN.Abp.Saas.Domain.Shared/LINGYUN/Abp/Saas/Localization/Resources/en.json +++ b/aspnet-core/modules/saas/LINGYUN.Abp.Saas.Domain.Shared/LINGYUN/Abp/Saas/Localization/Resources/en.json @@ -1,6 +1,34 @@ { "culture": "en", "texts": { - "LINGYUN.Edition:010001": "Cannot create versions with more than one name {DisplayName}!" + "Saas:010001": "Unable to create duplicate editions {DisplayName}!", + "Saas:020001": "Unable to create duplicate tenants {Name}!", + "Volo.AbpIo.MultiTenancy:010001": "The tenant is unavailable or restricted!", + "Volo.AbpIo.MultiTenancy:010002": "Tenant unavailable!", + "LINGYUN.Abp.MultiTenancy.Editions:010001": "Version unavailable or restricted!", + "Menu:Saas": "Saas", + "Editions": "Editions", + "NewEdition": "New edition", + "EditionName": "Edition name", + "DisplayName:EditionName": "Edition name", + "EditionDeletionConfirmationMessage": "Edition '{0}' will be deleted. Do you confirm that?", + "Tenants": "Tenants", + "NewTenant": "New tenant", + "TenantName": "Tenant name", + "DisplayName:TenantName": "Tenant name", + "TenantDeletionConfirmationMessage": "Tenant '{0}' will be deleted. Do you confirm that?", + "ConnectionStrings": "Connection Strings", + "DisplayName:DefaultConnectionString": "Default Connection String", + "DisplayName:UseSharedDatabase": "Use the Shared Database", + "ManageHostFeatures": "Manage Host features", + "Permission:EditionManagement": "Edition management", + "Permission:TenantManagement": "Tenant management", + "Permission:Create": "Create", + "Permission:Edit": "Edit", + "Permission:Delete": "Delete", + "Permission:ManageConnectionStrings": "Manage connection strings", + "Permission:ManageFeatures": "Manage features", + "DisplayName:AdminEmailAddress": "Admin Email Address", + "DisplayName:AdminPassword": "Admin Password" } } \ No newline at end of file diff --git a/aspnet-core/modules/saas/LINGYUN.Abp.Saas.Domain.Shared/LINGYUN/Abp/Saas/Localization/Resources/zh-Hans.json b/aspnet-core/modules/saas/LINGYUN.Abp.Saas.Domain.Shared/LINGYUN/Abp/Saas/Localization/Resources/zh-Hans.json index 40cd6583e..d91ea3408 100644 --- a/aspnet-core/modules/saas/LINGYUN.Abp.Saas.Domain.Shared/LINGYUN/Abp/Saas/Localization/Resources/zh-Hans.json +++ b/aspnet-core/modules/saas/LINGYUN.Abp.Saas.Domain.Shared/LINGYUN/Abp/Saas/Localization/Resources/zh-Hans.json @@ -1,6 +1,34 @@ { "culture": "zh-Hans", "texts": { - "LINGYUN.Edition:010001": "无法创建具有多个名称为 {DisplayName} 的版本!" + "Saas:010001": "已经存在名为 {DisplayName} 的版本!", + "Saas:020001": "已经存在名为 {Name} 的租户!", + "Volo.AbpIo.MultiTenancy:010001": "租户不可用或受限制!", + "Volo.AbpIo.MultiTenancy:010002": "租户不可用!", + "LINGYUN.Abp.MultiTenancy.Editions:010001": "版本不可用或受限制!", + "Menu:Saas": "Saas", + "Editions": "版本", + "NewEdition": "新版本", + "EditionName": "版本名称", + "DisplayName:EditionName": "版本名称", + "EditionDeletionConfirmationMessage": "版本 '{0}' 将被删除. 你确定吗?", + "Tenants": "租户", + "NewTenant": "新租户", + "TenantName": "租户名称", + "DisplayName:TenantName": "租户名称", + "TenantDeletionConfirmationMessage": "租户 '{0}' 将被删除. 你确定吗?", + "ConnectionStrings": "连接字符串", + "DisplayName:DefaultConnectionString": "默认连接字符串", + "DisplayName:UseSharedDatabase": "使用共享数据库", + "ManageHostFeatures": "管理Host特性", + "Permission:EditionManagement": "版本管理", + "Permission:TenantManagement": "租户管理", + "Permission:Create": "创建", + "Permission:Edit": "编辑", + "Permission:Delete": "删除", + "Permission:ManageConnectionStrings": "管理连接字符串", + "Permission:ManageFeatures": "管理功能", + "DisplayName:AdminEmailAddress": "管理员电子邮件地址", + "DisplayName:AdminPassword": "管理员密码" } } \ No newline at end of file diff --git a/aspnet-core/modules/saas/LINGYUN.Abp.Saas.Domain/LINGYUN/Abp/Saas/Editions/EditionManager.cs b/aspnet-core/modules/saas/LINGYUN.Abp.Saas.Domain/LINGYUN/Abp/Saas/Editions/EditionManager.cs index ab94f88a0..29fc974e2 100644 --- a/aspnet-core/modules/saas/LINGYUN.Abp.Saas.Domain/LINGYUN/Abp/Saas/Editions/EditionManager.cs +++ b/aspnet-core/modules/saas/LINGYUN.Abp.Saas.Domain/LINGYUN/Abp/Saas/Editions/EditionManager.cs @@ -38,7 +38,7 @@ public class EditionManager : DomainService var edition = await EditionRepository.FindByDisplayNameAsync(displayName); if (edition != null && edition.Id != expectedId) { - throw new BusinessException("LINGYUN.Edition:010001") + throw new BusinessException(AbpSaasErrorCodes.DuplicateEditionDisplayName) .WithData(nameof(Edition.DisplayName), displayName); } } diff --git a/aspnet-core/modules/saas/LINGYUN.Abp.Saas.Domain/LINGYUN/Abp/Saas/Tenants/TenantManager.cs b/aspnet-core/modules/saas/LINGYUN.Abp.Saas.Domain/LINGYUN/Abp/Saas/Tenants/TenantManager.cs index 994623d7d..194a599d4 100644 --- a/aspnet-core/modules/saas/LINGYUN.Abp.Saas.Domain/LINGYUN/Abp/Saas/Tenants/TenantManager.cs +++ b/aspnet-core/modules/saas/LINGYUN.Abp.Saas.Domain/LINGYUN/Abp/Saas/Tenants/TenantManager.cs @@ -37,7 +37,8 @@ public class TenantManager : DomainService, ITenantManager var tenant = await TenantRepository.FindByNameAsync(name); if (tenant != null && tenant.Id != expectedId) { - throw new UserFriendlyException("Duplicate tenancy name: " + name); //TODO: A domain exception would be better..? + throw new BusinessException(AbpSaasErrorCodes.DuplicateTenantName) + .WithData(nameof(Tenant.Name), name); } } }