diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization.sln b/abp_io/AbpIoLocalization/AbpIoLocalization.sln
new file mode 100644
index 0000000000..87b9fecdd5
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.29009.5
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AbpIoLocalization", "AbpIoLocalization\AbpIoLocalization.csproj", "{35D94BAB-22DF-47E0-AB4A-99CB6495CF50}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {35D94BAB-22DF-47E0-AB4A-99CB6495CF50}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {35D94BAB-22DF-47E0-AB4A-99CB6495CF50}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {35D94BAB-22DF-47E0-AB4A-99CB6495CF50}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {35D94BAB-22DF-47E0-AB4A-99CB6495CF50}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {2CF52C6D-D914-44A3-8F02-7E7BEA0644C5}
+ EndGlobalSection
+EndGlobal
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/AbpIoLocalization.csproj b/abp_io/AbpIoLocalization/AbpIoLocalization/AbpIoLocalization.csproj
new file mode 100644
index 0000000000..7c8af93c47
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/AbpIoLocalization.csproj
@@ -0,0 +1,16 @@
+
+
+
+ netstandard2.0
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/AbpIoLocalizationModule.cs b/abp_io/AbpIoLocalization/AbpIoLocalization/AbpIoLocalizationModule.cs
new file mode 100644
index 0000000000..8a6ca5dfdc
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/AbpIoLocalizationModule.cs
@@ -0,0 +1,79 @@
+using AbpIoLocalization.Account.Localization;
+using AbpIoLocalization.Admin.Localization;
+using AbpIoLocalization.Base.Localization;
+using AbpIoLocalization.Blog.Localization;
+using AbpIoLocalization.Commercial.Localization;
+using AbpIoLocalization.Docs.Localization;
+using AbpIoLocalization.Support.Localization;
+using AbpIoLocalization.Www;
+using Volo.Abp.Localization;
+using Volo.Abp.Localization.ExceptionHandling;
+using Volo.Abp.Localization.Resources.AbpValidation;
+using Volo.Abp.Modularity;
+using Volo.Abp.VirtualFileSystem;
+
+namespace AbpIoLocalization
+{
+ [DependsOn(typeof(AbpLocalizationModule))]
+ public class AbpIoLocalizationModule : AbpModule
+ {
+ public override void ConfigureServices(ServiceConfigurationContext context)
+ {
+ Configure(options =>
+ {
+ options.FileSets.AddEmbedded("AbpIoLocalization");
+ });
+
+ Configure(options =>
+ {
+ options.MapCodeNamespace("Volo.AbpIo.Commercial", typeof(AbpIoCommercialResource));
+ options.MapCodeNamespace("Volo.AbpIo.Domain", typeof(AbpIoBaseResource));
+ });
+
+ Configure(options =>
+ {
+ options.Resources
+ .Add("en")
+ .AddBaseTypes(
+ typeof(AbpValidationResource)
+ )
+ .AddVirtualJson("/Base/Localization/Resources");
+
+ options.Resources
+ .Add("en")
+ .AddVirtualJson("/Account/Localization/Resources")
+ .AddBaseTypes(typeof(AbpIoBaseResource));
+
+ options.Resources
+ .Add("en")
+ .AddVirtualJson("/Admin/Localization/Resources")
+ .AddBaseTypes(typeof(AbpIoBaseResource));
+
+ options.Resources
+ .Add("en")
+ .AddVirtualJson("/Blog/Localization/Resources")
+ .AddBaseTypes(typeof(AbpIoBaseResource));
+
+ options.Resources
+ .Add("en")
+ .AddVirtualJson("/Commercial/Localization/Resources")
+ .AddBaseTypes(typeof(AbpIoBaseResource));
+
+ options.Resources
+ .Add("en")
+ .AddVirtualJson("/Docs/Localization/Resources")
+ .AddBaseTypes(typeof(AbpIoBaseResource));
+
+ options.Resources
+ .Add("en")
+ .AddVirtualJson("/Support/Localization/Resources")
+ .AddBaseTypes(typeof(AbpIoBaseResource));
+
+ options.Resources
+ .Add("en")
+ .AddVirtualJson("/Www/Localization/Resources")
+ .AddBaseTypes(typeof(AbpIoBaseResource));
+ });
+ }
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/AbpIoAccountResource.cs b/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/AbpIoAccountResource.cs
new file mode 100644
index 0000000000..adf66d9ab9
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/AbpIoAccountResource.cs
@@ -0,0 +1,7 @@
+namespace AbpIoLocalization.Account.Localization
+{
+ public class AbpIoAccountResource
+ {
+
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/en.json
new file mode 100644
index 0000000000..189662ee7c
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/en.json
@@ -0,0 +1,5 @@
+{
+ "culture": "en",
+ "texts": {
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/tr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/tr.json
new file mode 100644
index 0000000000..5af6a13c50
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/tr.json
@@ -0,0 +1,5 @@
+{
+ "culture": "tr",
+ "texts": {
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/zh-Hans.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/zh-Hans.json
new file mode 100644
index 0000000000..df772fa60b
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/zh-Hans.json
@@ -0,0 +1,5 @@
+{
+ "culture": "zh-Hans",
+ "texts": {
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/AbpIoAdminResource.cs b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/AbpIoAdminResource.cs
new file mode 100644
index 0000000000..ff0a5786c4
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/AbpIoAdminResource.cs
@@ -0,0 +1,10 @@
+using Volo.Abp.Localization;
+
+namespace AbpIoLocalization.Admin.Localization
+{
+ [LocalizationResourceName("AbpIoAdmin")]
+ public class AbpIoAdminResource
+ {
+
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json
new file mode 100644
index 0000000000..7ce192c3ca
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json
@@ -0,0 +1,60 @@
+{
+ "culture": "en",
+ "texts": {
+ "Permission:NpmPackages": "NPM Packages",
+ "Permission:NugetPackages": "Nuget Packages",
+ "Permission:Maintenance": "Maintenance",
+ "Permission:Maintain": "Maintain",
+ "Permission:ClearCaches": "Clear caches",
+ "Permission:Modules": "Modules",
+ "Permission:Packages": "Packages",
+ "Permission:Edit": "Edit",
+ "Permission:Delete": "Delete",
+ "Permission:Create": "Create",
+ "Menu:Packages": "Packages",
+ "NpmPackageDeletionWarningMessage": "This NPM Package will be deleted. Do you confirm that?",
+ "NugetPackageDeletionWarningMessage": "This Nuget Package will be deleted. Do you confirm that?",
+ "ModuleDeletionWarningMessage": "This Module will be deleted. Do you confirm that?",
+ "Name": "Name",
+ "DisplayName": "Display name",
+ "ShortDescription": "Short description",
+ "NameFilter": "Name",
+ "CreationTime": "Creation time",
+ "IsPro": "Is pro",
+ "EfCoreConfigureMethodName": "Configure method name",
+ "IsProFilter": "Is pro",
+ "ApplicationType": "Application type",
+ "Target": "Target",
+ "TargetFilter": "Target",
+ "ModuleClass": "Module class",
+ "NugetPackageTarget.DomainShared": "Domain Shared",
+ "NugetPackageTarget.Domain": "Domain",
+ "NugetPackageTarget.Application": "Application",
+ "NugetPackageTarget.ApplicationContracts": "Application Contracts",
+ "NugetPackageTarget.HttpApi": "Http Api",
+ "NugetPackageTarget.HttpApiClient": "Http Api Client",
+ "NugetPackageTarget.Web": "Web",
+ "NugetPackageTarget.EntityFrameworkCore": "EntityFramework Core",
+ "NugetPackageTarget.MongoDB": "MongoDB",
+ "Edit": "Edit",
+ "Delete": "Delete",
+ "Refresh": "Refresh",
+ "NpmPackages": "NPM Packages",
+ "NugetPackages": "Nuget Packages",
+ "NpmPackageCount": "NPM Package Count",
+ "NugetPackageCount": "Nuget Package Count",
+ "Module": "Modules",
+ "ModuleInfo": "Module info",
+ "CreateANpmPackage": "Create a NPM package",
+ "CreateAModule": "Create a module",
+ "CreateANugetPackage": "Create a Nuget package",
+ "AddNew": "Add new",
+ "PackageAlreadyExist{0}": "\"{0}\" package is already added.",
+ "ClearCache": "Clear cache",
+ "SuccessfullyCleared": "Successfully cleared",
+ "Menu:NpmPackages": "NPM Packages",
+ "Menu:Modules": "Modules",
+ "Menu:Maintenance": "Maintenance",
+ "Menu:NugetPackages": "Nuget Packages"
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/tr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/tr.json
new file mode 100644
index 0000000000..5af6a13c50
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/tr.json
@@ -0,0 +1,5 @@
+{
+ "culture": "tr",
+ "texts": {
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/zh-Hans.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/zh-Hans.json
new file mode 100644
index 0000000000..df772fa60b
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/zh-Hans.json
@@ -0,0 +1,5 @@
+{
+ "culture": "zh-Hans",
+ "texts": {
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/AbpIoBaseResource.cs b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/AbpIoBaseResource.cs
new file mode 100644
index 0000000000..27e3c407b7
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/AbpIoBaseResource.cs
@@ -0,0 +1,10 @@
+using Volo.Abp.Localization;
+
+namespace AbpIoLocalization.Base.Localization
+{
+ [LocalizationResourceName("AbpIoBase")]
+ public class AbpIoBaseResource
+ {
+
+ }
+}
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json
new file mode 100644
index 0000000000..0f67280c77
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json
@@ -0,0 +1,16 @@
+{
+ "culture": "en",
+ "texts": {
+ "Volo.AbpIo.Domain:010004": "Maximum member count reached!",
+ "Volo.AbpIo.Domain:010005": "Maximum owner count reached!",
+ "Volo.AbpIo.Domain:010006": "This user is already an owner in this organization!",
+ "Volo.AbpIo.Domain:010007": "This user is already a developer in this organization!",
+ "Volo.AbpIo.Domain:010008": "Allowed Developer Count can not be less then current developer count!",
+ "Volo.AbpIo.Domain:010009": "Allowed Developer Count can not be less then 0!",
+ "Volo.AbpIo.Domain:010010": "Maximum mac address count is exceeded!",
+ "Volo.AbpIo.Domain:020001": "Could not delete this NPM Package because \"{NugetPackages}\" Nuget Packages are dependent to this package.",
+ "Volo.AbpIo.Domain:020002": "Could not delete this NPM Package because \"{Modules}\" Modules are using this package.",
+ "Volo.AbpIo.Domain:020003": "Could not delete this NPM Package because \"{Modules}\" Modules are using this package and \"{NugetPackages}\" Nuget Packages are dependent to this package.",
+ "Volo.AbpIo.Domain:020004": "Could not delete this Nuget Package because \"{Modules}\" Modules are using this package."
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/tr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/tr.json
new file mode 100644
index 0000000000..a5be03fe3e
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/tr.json
@@ -0,0 +1,12 @@
+{
+ "culture": "tr",
+ "texts": {
+ "Volo.AbpIo.Domain:010004": "Maksimum üye sayısı aşıldı!",
+ "Volo.AbpIo.Domain:010005": "Maksimum yetkili sayısı aşıldı!",
+ "Volo.AbpIo.Domain:010006": "Bu kullanıcı zaten bu organizasyonda yetkili olarak var!",
+ "Volo.AbpIo.Domain:010007": "Bu kullanıcı zaten bu organizasyonda yazılımcı olarak var!",
+ "Volo.AbpIo.Domain:010008": "Maksimum izin verilen kullanıcı sayısı mevcut kullanıcı sayısından az olamaz!",
+ "Volo.AbpIo.Domain:010009": "Maksimum izin verilen kullanıcı sayısı sıfırdan az olamaz!",
+ "Volo.AbpIo.Domain:010010": "Maksimum mac adresi sayısı geçildi!"
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/zh-Hans.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/zh-Hans.json
new file mode 100644
index 0000000000..5b6552ca28
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/zh-Hans.json
@@ -0,0 +1,12 @@
+{
+ "culture": "zh-Hans",
+ "texts": {
+ "Volo.AbpIo.Domain:010004": "超过最大成员数!",
+ "Volo.AbpIo.Domain:010005": "超过最大所有者数!",
+ "Volo.AbpIo.Domain:010006": "T用户已经是该组织的所有者!",
+ "Volo.AbpIo.Domain:010007": "该用户已经是该组织的开发者!",
+ "Volo.AbpIo.Domain:010008": "允许的开发者数量不能低于当前开发者数量!",
+ "Volo.AbpIo.Domain:010009": "允许的开发者数量不能小于零!",
+ "Volo.AbpIo.Domain:010010": "超出了最大mac地址数!"
+ }
+}
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Blog/Localization/AbpIoBlogResource.cs b/abp_io/AbpIoLocalization/AbpIoLocalization/Blog/Localization/AbpIoBlogResource.cs
new file mode 100644
index 0000000000..8f3917a3a8
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Blog/Localization/AbpIoBlogResource.cs
@@ -0,0 +1,7 @@
+namespace AbpIoLocalization.Blog.Localization
+{
+ public class AbpIoBlogResource
+ {
+
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Blog/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Blog/Localization/Resources/en.json
new file mode 100644
index 0000000000..189662ee7c
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Blog/Localization/Resources/en.json
@@ -0,0 +1,5 @@
+{
+ "culture": "en",
+ "texts": {
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Blog/Localization/Resources/tr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Blog/Localization/Resources/tr.json
new file mode 100644
index 0000000000..5af6a13c50
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Blog/Localization/Resources/tr.json
@@ -0,0 +1,5 @@
+{
+ "culture": "tr",
+ "texts": {
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Blog/Localization/Resources/zh-Hans.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Blog/Localization/Resources/zh-Hans.json
new file mode 100644
index 0000000000..df772fa60b
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Blog/Localization/Resources/zh-Hans.json
@@ -0,0 +1,5 @@
+{
+ "culture": "zh-Hans",
+ "texts": {
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/AbpIoCommercialResource.cs b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/AbpIoCommercialResource.cs
new file mode 100644
index 0000000000..76eb74933d
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/AbpIoCommercialResource.cs
@@ -0,0 +1,10 @@
+using Volo.Abp.Localization;
+
+namespace AbpIoLocalization.Commercial.Localization
+{
+ [LocalizationResourceName("AbpIoCommercial")]
+ public class AbpIoCommercialResource
+ {
+
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json
new file mode 100644
index 0000000000..0a9dedc788
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json
@@ -0,0 +1,23 @@
+{
+ "culture": "en",
+ "texts": {
+ "OrganizationManagement": "Organization Management",
+ "OrganizationList": "Organization list",
+ "Volo.AbpIo.Commercial:010003": "You are not owner of this organization!",
+ "OrganizationNotFoundMessage": "No organization found!",
+ "DeveloperCount": "Developer count",
+ "Owners": "Owners",
+ "AddMember": "Add member",
+ "AddOwner": "Add owner",
+ "AddDeveloper": "Add developer",
+ "UserName": "Username",
+ "Name": "Name",
+ "EmailAddress": "Email address",
+ "Developers": "Developers",
+ "LicenseType": "License type",
+ "Manage": "Manage",
+ "StartDate": "Start date",
+ "EndDate": "End date",
+ "Modules": "Modules"
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json
new file mode 100644
index 0000000000..fd25239044
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json
@@ -0,0 +1,23 @@
+{
+ "culture": "tr",
+ "texts": {
+ "OrganizationManagement": "Organizasyon yönetimi",
+ "OrganizationList": "Organizasyon listesi",
+ "Volo.AbpIo.Commercial:010003": "Bu organizasyonda yetkili değilsiniz!",
+ "OrganizationNotFoundMessage": "Organizasyon bulunamadı!",
+ "DeveloperCount": "Yazılımcı sayısı",
+ "Owners": "Yetkili sayısı",
+ "AddMember": "Üye ekle",
+ "AddOwner": "Yetkili ekle",
+ "AddDeveloper": "Yazılımcı ekle",
+ "UserName": "Kullanıcı adı",
+ "Name": "İsim",
+ "EmailAddress": "Email adresi",
+ "Developers": "Yazılımcılar",
+ "LicenseType": "lisans türü",
+ "Manage": "Yönet",
+ "StartDate": "Başlangıç tarihi",
+ "EndDate": "bitiş tarihi",
+ "Modules": "Modüller"
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json
new file mode 100644
index 0000000000..3347e5ad67
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json
@@ -0,0 +1,23 @@
+{
+ "culture": "zh-Hans",
+ "texts": {
+ "OrganizationManagement": "组织管理",
+ "OrganizationList": "组织列表",
+ "Volo.AbpIo.Commercial:010003": "你不是该组织的所有者!",
+ "OrganizationNotFoundMessage": "找不到任何组织!",
+ "DeveloperCount": "开发者数量",
+ "Owners": "所有者",
+ "AddMember": "添加成员",
+ "AddOwner": "添加所有者",
+ "AddDeveloper": "添加开发者",
+ "UserName": "用户名",
+ "Name": "名称",
+ "EmailAddress": "电子邮件地址",
+ "Developers": "开发者",
+ "LicenseType": "许可证类型",
+ "Manage": "管理",
+ "StartDate": "开始日期",
+ "EndDate": "结束日期",
+ "Modules": "模块"
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/AbpIoDocsResource.cs b/abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/AbpIoDocsResource.cs
new file mode 100644
index 0000000000..bd155f768d
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/AbpIoDocsResource.cs
@@ -0,0 +1,7 @@
+namespace AbpIoLocalization.Docs.Localization
+{
+ public class AbpIoDocsResource
+ {
+
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/Resources/en.json
new file mode 100644
index 0000000000..189662ee7c
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/Resources/en.json
@@ -0,0 +1,5 @@
+{
+ "culture": "en",
+ "texts": {
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/Resources/tr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/Resources/tr.json
new file mode 100644
index 0000000000..5af6a13c50
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/Resources/tr.json
@@ -0,0 +1,5 @@
+{
+ "culture": "tr",
+ "texts": {
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/Resources/zh-Hans.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/Resources/zh-Hans.json
new file mode 100644
index 0000000000..df772fa60b
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/Resources/zh-Hans.json
@@ -0,0 +1,5 @@
+{
+ "culture": "zh-Hans",
+ "texts": {
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Support/Localization/AbpIoSupportResource.cs b/abp_io/AbpIoLocalization/AbpIoLocalization/Support/Localization/AbpIoSupportResource.cs
new file mode 100644
index 0000000000..94be66272a
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Support/Localization/AbpIoSupportResource.cs
@@ -0,0 +1,7 @@
+namespace AbpIoLocalization.Support.Localization
+{
+ public class AbpIoSupportResource
+ {
+
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Support/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Support/Localization/Resources/en.json
new file mode 100644
index 0000000000..189662ee7c
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Support/Localization/Resources/en.json
@@ -0,0 +1,5 @@
+{
+ "culture": "en",
+ "texts": {
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Support/Localization/Resources/tr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Support/Localization/Resources/tr.json
new file mode 100644
index 0000000000..5af6a13c50
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Support/Localization/Resources/tr.json
@@ -0,0 +1,5 @@
+{
+ "culture": "tr",
+ "texts": {
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Support/Localization/Resources/zh-Hans.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Support/Localization/Resources/zh-Hans.json
new file mode 100644
index 0000000000..df772fa60b
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Support/Localization/Resources/zh-Hans.json
@@ -0,0 +1,5 @@
+{
+ "culture": "zh-Hans",
+ "texts": {
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/AbpIoWwwResource.cs b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/AbpIoWwwResource.cs
new file mode 100644
index 0000000000..552b5949e1
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/AbpIoWwwResource.cs
@@ -0,0 +1,7 @@
+namespace AbpIoLocalization.Www
+{
+ public class AbpIoWwwResource
+ {
+
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json
new file mode 100644
index 0000000000..88c4a7dd45
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json
@@ -0,0 +1,18 @@
+{
+ "culture": "en",
+ "texts": {
+ "GetStarted": "Get Started",
+ "Create": "Create",
+ "NewProject": "New Project",
+ "DirectDownload": "Direct Download",
+ "ProjectName": "Project name",
+ "ProjectType": "Project type",
+ "DatabaseProvider": "Database provider",
+ "NTier": "N-Tier",
+ "IncludeUserInterface": "Include user interface",
+ "CreateNow": "Create now",
+ "TheStartupProject": "The startup project",
+ "Tutorial": "Tutorial",
+ "UsingCLI": "Using CLI"
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/tr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/tr.json
new file mode 100644
index 0000000000..5af6a13c50
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/tr.json
@@ -0,0 +1,5 @@
+{
+ "culture": "tr",
+ "texts": {
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hans.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hans.json
new file mode 100644
index 0000000000..df772fa60b
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hans.json
@@ -0,0 +1,5 @@
+{
+ "culture": "zh-Hans",
+ "texts": {
+ }
+}
\ No newline at end of file
diff --git a/abp_io/README.md b/abp_io/README.md
new file mode 100644
index 0000000000..8819a4fb73
--- /dev/null
+++ b/abp_io/README.md
@@ -0,0 +1,11 @@
+## Abp.io platform localization
+
+This project is all localized resources of the abp.io platform.
+
+If you like, you can contribute to the localization resources in this project.
+
+For example: `AbpIoLocalization\AbpIoLocalization\Www\Localization\Resources\zh-Hans.json`
+If the file is missing some translations or the translation is wrong, you can add it.
+If the language file is missing (eg `kr.json`), you can also add it.
+
+Please refer to the [Contribution Guide](https://github.com/abpframework/abp/blob/dev/docs/en/Contribution/Index.md) for details.
\ No newline at end of file