From 87890aa4d2000961dc2861586ce5d9903448a15a Mon Sep 17 00:00:00 2001 From: liangshiw Date: Fri, 14 Feb 2020 15:04:53 +0800 Subject: [PATCH] Update chinese document --- docs/en/Blog-Posts/2019-02-22/Post.md | 4 +- docs/zh-Hans/Background-Jobs.md | 8 +- docs/zh-Hans/Blog-Posts/2019-02-22/Post.md | 12 +- docs/zh-Hans/Connection-Strings.md | 16 ++ .../Contribution/Localization-Text-Files.md | 29 ++-- docs/zh-Hans/Dependency-Injection.md | 2 +- docs/zh-Hans/Entity-Framework-Core.md | 2 +- ...Getting-Started-AspNetCore-MVC-Template.md | 2 +- docs/zh-Hans/Modules/Docs.md | 144 +++++++++++++++--- docs/zh-Hans/Modules/Index.md | 2 +- .../Tutorials/AspNetCore-Mvc/Part-I.md | 16 +- .../Tutorials/AspNetCore-Mvc/Part-III.md | 22 +-- .../images/auditlog-object-diagram.png | Bin 0 -> 29134 bytes docs/zh-Hans/images/docs-section-ui.png | Bin 0 -> 9624 bytes .../Localization/BookStore/zh-Hans.json | 2 +- .../Localization/BookStore/zh-Hans.json | 2 +- .../Localization/BookStore/zh-Hans.json | 2 +- .../Localization/DashboardDemo/zh-Hans.json | 2 +- .../Localization/MyProjectName/zh-Hans.json | 2 +- 19 files changed, 184 insertions(+), 85 deletions(-) create mode 100644 docs/zh-Hans/images/auditlog-object-diagram.png create mode 100644 docs/zh-Hans/images/docs-section-ui.png diff --git a/docs/en/Blog-Posts/2019-02-22/Post.md b/docs/en/Blog-Posts/2019-02-22/Post.md index 35f8219014..b27a50ec05 100644 --- a/docs/en/Blog-Posts/2019-02-22/Post.md +++ b/docs/en/Blog-Posts/2019-02-22/Post.md @@ -1,6 +1,6 @@ # Microservice Demo, Projects Status and Road Map -After [the first announcement](https://abp.io/blog/abp/Abp-vNext-Announcement) on the ABP vNext, we have a lot of improvements on the codebase (1100+ commits on the [GitHub repository](https://github.com/abpframework/abp)). We've created features, samples, documentation and much more. In this post, I want to inform you about some news and the status of the project. +After [the first announcement](https://blog.abp.io/Abp-vNext-Announcement) on the ABP vNext, we have a lot of improvements on the codebase (1100+ commits on the [GitHub repository](https://github.com/abpframework/abp)). We've created features, samples, documentation and much more. In this post, I want to inform you about some news and the status of the project. ## Microservice Demo Solution @@ -38,7 +38,7 @@ First release may not include a SPA template. However, we want to prepare a simp ## Chinese Web Site -There is a big ABP community in China. They have created a Chinese version of the abp.io web site: https://cn.abp.io/ They are keeping it up to date. Thanks to the Chinese developers and especially to [Liming Ma](https://github.com/maliming). +There is a big ABP community in China. They have created a Chinese version of the abp.io web site: https://abp.io/ They are keeping it up to date. Thanks to the Chinese developers and especially to [Liming Ma](https://github.com/maliming). ## NDC {London} 2019 diff --git a/docs/zh-Hans/Background-Jobs.md b/docs/zh-Hans/Background-Jobs.md index 30b6f0f1ad..7c2a694005 100644 --- a/docs/zh-Hans/Background-Jobs.md +++ b/docs/zh-Hans/Background-Jobs.md @@ -110,7 +110,7 @@ Enqueue方法接收一些可选参数用于控制后台作业: 你可能希望在你的应用程序中禁用后台作业执行. 如果你希望在另一个进程中执行后台作业并在当前进程中禁用它,通常可以使用以下命令. -使用 `BackgroundJobOptions` 配置作业执行: +使用 `AbpBackgroundJobOptions` 配置作业执行: ````csharp [DependsOn(typeof(AbpBackgroundJobsModule))] @@ -118,7 +118,7 @@ public class MyModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { - Configure(options => + Configure(options => { options.IsJobExecutionEnabled = false; //禁用作业执行 }); @@ -142,7 +142,7 @@ ABP framework 包含一个简单的 `IBackgroundJobManager` 实现; ### 配置 -在你的[模块类](Module-Development-Basics.md)中使用 `BackgroundJobWorkerOptions` 配置默认作业管理器. +在你的[模块类](Module-Development-Basics.md)中使用 `AbpBackgroundJobWorkerOptions` 配置默认作业管理器. 示例中更改后台作业的的超时时间: ````csharp @@ -151,7 +151,7 @@ public class MyModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { - Configure(options => + Configure(options => { options.DefaultTimeout = 864000; //10 days (as seconds) }); diff --git a/docs/zh-Hans/Blog-Posts/2019-02-22/Post.md b/docs/zh-Hans/Blog-Posts/2019-02-22/Post.md index 69a8603baf..30a5d691e9 100644 --- a/docs/zh-Hans/Blog-Posts/2019-02-22/Post.md +++ b/docs/zh-Hans/Blog-Posts/2019-02-22/Post.md @@ -1,12 +1,12 @@ # 微服务演示,项目状态和路线图 -在ABP vNext上的[第一个公告](https://cn.abp.io/blog/abp/Abp-vNext-Announcement)之后,我们对代码库进行了很多改进([GitHub存储库](https://github.com/abpframework/abp)上的1100多次提交).我们已经创建了功能,示例,文档等等.在这篇文章中,我想告诉你一些新闻和项目的状态. +在ABP vNext上的[第一个公告](https://abp.io/blog/abp/Abp-vNext-Announcement)之后,我们对代码库进行了很多改进([GitHub存储库](https://github.com/abpframework/abp)上的1100多次提交).我们已经创建了功能,示例,文档等等.在这篇文章中,我想告诉你一些新闻和项目的状态. ## 微服务演示解决方案 -ABP框架的主要目标之一是提供[创建微服务解决方案的便利基础设施](https://cn.abp.io/documents/abp/latest/Microservice-Architecture). +ABP框架的主要目标之一是提供[创建微服务解决方案的便利基础设施](https://abp.io/documents/abp/latest/Microservice-Architecture). -我们一直在努力开发微服务解决方案演示.初始版本已完成并[文档化](https://cn.abp.io/documents/abp/latest/Samples/Microservice-Demo).该示例解决方案旨在演示一个简单而完整的微服务解决方案; +我们一直在努力开发微服务解决方案演示.初始版本已完成并[文档化](https://abp.io/documents/abp/latest/Samples/Microservice-Demo).该示例解决方案旨在演示一个简单而完整的微服务解决方案; - 具有多个独立的,可自我部署的**微服务**. - 多个**Web应用程序**,每个都使用不同的API网关. @@ -20,7 +20,7 @@ ABP框架的主要目标之一是提供[创建微服务解决方案的便利基 - 使用[Docker](https://www.docker.com/)和[Kubernates](https://kubernetes.io/)**部署**并运行所有服务和应用程序. - 使用[Elasticsearch](https://www.elastic.co/products/elasticsearch)和[Kibana](https://www.elastic.co/products/kibana)存储和可视化日志(使用[Serilog](https://serilog.net/)编写). -有关解决方案的详细说明,请参阅[其文档](https://cn.abp.io/documents/abp/latest/Samples/Microservice-Demo). +有关解决方案的详细说明,请参阅[其文档](https://abp.io/documents/abp/latest/Samples/Microservice-Demo). ## 改进/功能 @@ -32,13 +32,13 @@ ABP框架的主要目标之一是提供[创建微服务解决方案的便利基 根据我们的估计,我们计划在2019年第二季度(可能在五月或六月)发布v1.0.所以,不用等待太长时间了.我们也对第一个稳定版本感到非常兴奋. -我们还将完善[文档](https://cn.abp.io/documents/abp/latest),因为它现在还远未完成. +我们还将完善[文档](https://abp.io/documents/abp/latest),因为它现在还远未完成. 第一个版本可能不包含SPA模板.但是,如果可能的话,我们想要准备一个简单些的.SPA框架还没有确定下来.备选有:**Angular,React和Blazor**.请将您的想法写为对此帖的评论. ## 中文网 -中国有一个大型的ABP社区.他们创建了一个中文版的abp.io网站:https://cn.abp.io/. 他们一直在保持更新.感谢中国的开发人员,特别是[Liming Ma](https://github.com/maliming). +中国有一个大型的ABP社区.他们创建了一个中文版的abp.io网站:https://abp.io/. 他们一直在保持更新.感谢中国的开发人员,特别是[Liming Ma](https://github.com/maliming). ## NDC {London} 2019 diff --git a/docs/zh-Hans/Connection-Strings.md b/docs/zh-Hans/Connection-Strings.md index 2df4137b2b..562ae700ce 100644 --- a/docs/zh-Hans/Connection-Strings.md +++ b/docs/zh-Hans/Connection-Strings.md @@ -35,6 +35,22 @@ ABP框架的设计是[模块化](Module-Development-Basics.md), [微服务兼容 [预构建的应用程序模块](Modules/Index.md) 为连接字符串名称定义常量. 例如IdentityServer模块在 `AbpIdentityServerDbProperties` 类(位于 `Volo.Abp.IdentityServer` 命名空间)定义了 `ConnectionStringName` 常量 . 其他的模块类似的定义常量,你可以查看连接字符串的名称. +### AbpDbConnectionOptions + +ABP实际上使用 `AbpDbConnectionOptions` 获取连接字符串. 如果如上所述设置了连接字符串, `AbpDbConnectionOptions` 会被自动填充. 但是你也可以使用[选项模式](Options.md)设置或覆盖连接字符串. 你可以在[模块](Module-Development-Basics.md)的 `ConfigureServices` 方法配置`AbpDbConnectionOptions`). +如下所示: + +````csharp +public override void ConfigureServices(ServiceConfigurationContext context) +{ + Configure(options => + { + options.ConnectionStrings.Default = "..."; + options.ConnectionStrings["AbpPermissionManagement"] = "..."; + }); +} +```` + ## 设置连接字符串名称 模块通常使用 `ConnectionStringName` attribute 为 `DbContext` 类关联一个唯一的连接字符串名称. 示例: diff --git a/docs/zh-Hans/Contribution/Localization-Text-Files.md b/docs/zh-Hans/Contribution/Localization-Text-Files.md index 36bae2890a..8055d9cae2 100644 --- a/docs/zh-Hans/Contribution/Localization-Text-Files.md +++ b/docs/zh-Hans/Contribution/Localization-Text-Files.md @@ -3,7 +3,7 @@ 这是一个来自框架的本地化文本文件列表, 任何人都可以做出贡献. 我们会将此列表保持最新: * https://github.com/abpframework/abp/tree/master/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/en.json -* https://github.com/abpframework/abp/tree/master/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpValidation/en.json +* https://github.com/abpframework/abp/blob/master/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/en.json * https://github.com/abpframework/abp/tree/master/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Localization/Resource/en.json * https://github.com/abpframework/abp/tree/master/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/en.json * https://github.com/abpframework/abp/tree/master/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/en.json @@ -12,29 +12,20 @@ * https://github.com/abpframework/abp/tree/master/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/en.json * https://github.com/abpframework/abp/tree/master/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/en.json * https://github.com/abpframework/abp/tree/master/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/en.json -* https://github.com/abpframework/abp/tree/master/modules/account/src/Volo.Abp.Account.Web/Localization/Resources/AbpAccount/Web/en.json +* https://github.com/abpframework/abp/blob/master/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/en.json * https://github.com/abpframework/abp/tree/master/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/en.json -* https://github.com/abpframework/abp/tree/master/modules/blogging/src/Volo.Blogging.Web/Localization/Resources/Blogging/Web/en.json +* https://github.com/abpframework/abp/tree/master/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/en.json * https://github.com/abpframework/abp/tree/master/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/en.json * https://github.com/abpframework/abp/tree/master/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/en.json -* https://github.com/abpframework/abp/tree/master/modules/docs/src/Volo.Docs.Admin.Web/Localization/Resources/Docs/Web/en.json * https://github.com/abpframework/abp/tree/master/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/en.json -* https://github.com/abpframework/abp/tree/master/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/Localization/ApplicationContracts/en.json -* https://github.com/abpframework/abp/tree/master/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/Localization/Domain/en.json -* https://github.com/abpframework/abp/tree/master/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Localization/Resources/FeatureManagement/en.json -* https://github.com/abpframework/abp/tree/master/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/Localization/ApplicationContracts/en.json -* https://github.com/abpframework/abp/tree/master/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/Localization/Domain/en.json -* https://github.com/abpframework/abp/tree/master/modules/identity/src/Volo.Abp.Identity.Web/Localization/Resources/AbpIdentity/en.json -* https://github.com/abpframework/abp/tree/master/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Localization/Resources/AbpPermissionManagement/en.json -* https://github.com/abpframework/abp/tree/master/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Localization/Resources/AbpSettingManagement/en.json -* https://github.com/abpframework/abp/tree/master/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/Localization/ApplicationContracts/en.json -* https://github.com/abpframework/abp/tree/master/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Localization/Resources/AbpTenantManagement/Web/en.json +* https://github.com/abpframework/abp/tree/master/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/en.json +* https://github.com/abpframework/abp/tree/master/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/en.json +* https://github.com/abpframework/abp/tree/master/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/en.json +* https://github.com/abpframework/abp/tree/master/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/en.json +* https://github.com/abpframework/abp/tree/master/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/en.json * https://github.com/abpframework/abp/tree/master/samples/BookStore/src/Acme.BookStore.Domain.Shared/Localization/BookStore/en.json -* https://github.com/abpframework/abp/tree/master/samples/DashboardDemo/src/DashboardDemo.Domain/Localization/DashboardDemo/en.json +* https://github.com/abpframework/abp/tree/master/samples/DashboardDemo/src/DashboardDemo.Domain.Shared/Localization/DashboardDemo/en.json * https://github.com/abpframework/abp/tree/master/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application.Contracts/ProductManagement/Localization/ApplicationContracts/en.json * https://github.com/abpframework/abp/tree/master/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain/ProductManagement/Localization/Domain/en.json * https://github.com/abpframework/abp/tree/master/samples/MicroserviceDemo/modules/product/src/ProductManagement.Web/Localization/Resources/ProductManagement/en.json -* https://github.com/abpframework/abp/tree/master/templates/mvc-module/src/MyCompanyName.MyProjectName.Application.Contracts/Localization/MyProjectName/ApplicationContracts/en.json -* https://github.com/abpframework/abp/tree/master/templates/mvc-module/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/DomainShared/en.json -* https://github.com/abpframework/abp/tree/master/templates/mvc-module/src/MyCompanyName.MyProjectName.Web/Localization/MyProjectName/Web/en.json -* https://github.com/abpframework/abp/tree/master/templates/mvc/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/en.json +* https://github.com/abpframework/abp/tree/master/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/en.json \ No newline at end of file diff --git a/docs/zh-Hans/Dependency-Injection.md b/docs/zh-Hans/Dependency-Injection.md index 381b77ec35..2264a12930 100644 --- a/docs/zh-Hans/Dependency-Injection.md +++ b/docs/zh-Hans/Dependency-Injection.md @@ -319,4 +319,4 @@ public class AppModule : AbpModule ### 请参阅 -* [ASP.NET Core依赖注入最佳实践,提示和技巧](https://cn.abp.io/blog/Abp/asp-net-core-dependency-injection-best-practices-tips-tricks) +* [ASP.NET Core依赖注入最佳实践,提示和技巧](https://blog.abp.io/asp-net-core-dependency-injection-best-practices-tips-tricks) diff --git a/docs/zh-Hans/Entity-Framework-Core.md b/docs/zh-Hans/Entity-Framework-Core.md index 328a4b74cc..b70630e38f 100644 --- a/docs/zh-Hans/Entity-Framework-Core.md +++ b/docs/zh-Hans/Entity-Framework-Core.md @@ -181,7 +181,7 @@ public interface IBookRepository : IRepository } ```` -你通常希望从IRepository派生以继承标准存储库方法. 然而,你没有必要这样做. 仓储接口在分层应用程序的领域层中定义,它在数据访问/基础设施层([启动模板](https://cn.abp.io/Templates)中的`EntityFrameworkCore`项目)中实现 +你通常希望从IRepository派生以继承标准存储库方法. 然而,你没有必要这样做. 仓储接口在分层应用程序的领域层中定义,它在数据访问/基础设施层([启动模板](https://abp.io/Templates)中的`EntityFrameworkCore`项目)中实现 IBookRepository接口的实现示例: diff --git a/docs/zh-Hans/Getting-Started-AspNetCore-MVC-Template.md b/docs/zh-Hans/Getting-Started-AspNetCore-MVC-Template.md index 4d6695c79b..d65573d9db 100644 --- a/docs/zh-Hans/Getting-Started-AspNetCore-MVC-Template.md +++ b/docs/zh-Hans/Getting-Started-AspNetCore-MVC-Template.md @@ -2,7 +2,7 @@ ### 创建新项目 -本教程使用 **ABP CLI** 创建一个新项目. 更多选项, 请参阅[入门](https://cn.abp.io/get-started)页面. +本教程使用 **ABP CLI** 创建一个新项目. 更多选项, 请参阅[入门](https://abp.io/get-started)页面. 如果你之前未安装,请使用命令行安装ABP CLI: diff --git a/docs/zh-Hans/Modules/Docs.md b/docs/zh-Hans/Modules/Docs.md index cfe287082b..3bd71d554f 100644 --- a/docs/zh-Hans/Modules/Docs.md +++ b/docs/zh-Hans/Modules/Docs.md @@ -14,21 +14,19 @@ ### 版本 -当你使用GitHub存储文档时,文档模块支持多版本. 如果你的文档具有多个版本, UI上有一个组合框,用于切换版本. 如果你选择使用文件系统存储文档, 那么它不支持多版本. +当你使用GitHub存储文档时,文档模块支持多版本. 如果你的文档具有多个版本, UI上有一个组合框,用于切换版本. 如果你选择使用文件系统存储文档, 那么它不支持多版本. -ABP框架的[文档](https://abp.io/documents/)也是使用的此模块. +ABP框架的[文档](docs.abp.io)也是使用的此模块. > 文档模块遵循 [模块化架构最佳实践](../Best-Practices/Module-Architecture.md) 指南. - - ## 安装 ### 1- 下载 -如果你没有现有的ABP项目, 这个步骤向你展示如何在[abp.io](https://cn.abp.io)创建一个新项目并添加文档模块. 如果你本地已经有了一个ABP项目, 那么你可以跳过这一步. +如果你没有现有的ABP项目, 这个步骤向你展示如何在[abp.io](https://abp.io)创建一个新项目并添加文档模块. 如果你本地已经有了一个ABP项目, 那么你可以跳过这一步. -打开 https://cn.abp.io/Templates. 输入项目名称为 `Acme.MyProject`, 选择 `ASP.NET Core Mvc Application` 和选择 `Entity Framework Core` 做为数据库提供者. +打开 https://abp.io/Templates. 输入项目名称为 `Acme.MyProject`, 选择 `ASP.NET Core Mvc Application` 和选择 `Entity Framework Core` 做为数据库提供者. 请注意,本文档包含了 `Entity Framework Core` 提供者 不过你也可以选择 `MongoDB` 做为数据库提供者. @@ -36,7 +34,7 @@ ABP框架的[文档](https://abp.io/documents/)也是使用的此模块. ### 2- 运行这个空项目 -下载项目后, 解压压缩文档并且打开 `Acme.MyProject.sln`. 你可以看到这个解决方案包含了 `Application`, `Domain `, `EntityFrameworkCore` 和 `Web` 项目. 右键选择 `Acme.MyProject.Web` 项目**设置为启动项目**. +下载项目后, 解压压缩文档并且打开 `Acme.MyProject.sln`. 你可以看到这个解决方案包含了 `Application`, `Domain`, `EntityFrameworkCore` 和 `Web` 项目. 右键选择 `Acme.MyProject.Web` 项目**设置为启动项目**. ![创建新项目](../images/docs-module_solution-explorer.png) @@ -67,31 +65,32 @@ ABP框架的[文档](https://abp.io/documents/)也是使用的此模块. ```csharp ``` + * [Volo.Docs.EntityFrameworkCore](https://www.nuget.org/packages/Volo.Docs.EntityFrameworkCore/) 需要安装到 `Acme.MyProject.EntityFrameworkCore` 项目. - - 修改 `Acme.MyProject.EntityFrameworkCore.csproj`文件并且添加以下行. 需要注意它要设置(v0.9.0)为Latest版本. + * 修改 `Acme.MyProject.EntityFrameworkCore.csproj` 文件并且添加以下行. 需要注意它要设置(v0.9.0)为Latest版本. ```csharp ``` + * [Volo.Docs.Application](https://www.nuget.org/packages/Volo.Docs.Application/) 需要安装到 `Acme.MyProject.Application` 项目. - * 修改 `Acme.MyProject.Application.csproj`文件并且添加以下行. 需要注意它要设置(v0.9.0)为Latest版本. + * 修改 `Acme.MyProject.Application.csproj` 文件并且添加以下行. 需要注意它要设置(v0.9.0)为Latest版本. ```csharp ``` -* [Volo.Docs.Web ](https://www.nuget.org/packages/Volo.Docs.Web/) 需要安装到 `Acme.MyProject.Web` 项目. - - 修改 `Acme.MyProject.Web.csproj`文件并且添加以下行. 需要注意它要设置(v0.9.0)为Latest版本. +* [Volo.Docs.Web](https://www.nuget.org/packages/Volo.Docs.Web/) 需要安装到 `Acme.MyProject.Web` 项目. + + * 修改 `Acme.MyProject.Web.csproj` 文件并且添加以下行. 需要注意它要设置(v0.9.0)为Latest版本. ```csharp ``` - - -### 3- 添加模块添加 +### 3- 添加模块依赖 一个ABP模块必须声明 `[DependsOn]` attribute 如果它依赖于另一个模块. 每个模块都必须在相关的项目的`[DependsOn]`Attribute 中添加. @@ -155,7 +154,6 @@ ABP框架的[文档](https://abp.io/documents/)也是使用的此模块. } ``` - * 打开 `MyProjectWebModule.cs`并且添加 `typeof(DocsWebModule)` 如下所示; ```csharp @@ -174,15 +172,13 @@ ABP框架的[文档](https://abp.io/documents/)也是使用的此模块. } ``` - - ### 4- 数据库集成 #### 4.1- Entity Framework 集成 如果你选择了Entity Framework 做为数据库供应者,你需要在DbContext中配置文档模块. 做以下操作; -- 打开 `MyProjectDbContext.cs` 并且添加 `modelBuilder.ConfigureDocs()` 到 `OnModelCreating()` 方法中 +* 打开 `MyProjectDbContext.cs` 并且添加 `modelBuilder.ConfigureDocs()` 到 `OnModelCreating()` 方法中 ```csharp [ConnectionStringName("Default")] @@ -195,7 +191,7 @@ ABP框架的[文档](https://abp.io/documents/)也是使用的此模块. } protected override void OnModelCreating(ModelBuilder modelBuilder) - { + { //... modelBuilder.ConfigureDocs(); } @@ -218,7 +214,6 @@ ABP框架的[文档](https://abp.io/documents/)也是使用的此模块. 最后你可以查看数据库中创建的新表,例如你可以看到 `DocsProjects` 表已经添加到数据库中. - ### 5- 链接文档模块 文档模块的默认路由是; @@ -262,7 +257,7 @@ ABP框架的[文档](https://abp.io/documents/)也是使用的此模块. "texts": { "Menu:Home": "首页", "Welcome": "欢迎", - "LongWelcomeMessage": "欢迎来到该应用程序. 这是一个基于ABP框架的启动项目. 有关更多信息, 请访问 cn.abp.io.", + "LongWelcomeMessage": "欢迎来到该应用程序. 这是一个基于ABP框架的启动项目. 有关更多信息, 请访问 abp.io.", "Menu:Docs": "文档" } } @@ -352,10 +347,10 @@ INSERT [dbo].[DocsProjects] ([Id], [Name], [ShortName], [Format], [DefaultDocume - ExtraProperties: ```json - {"Path":"C:\\Github\\abp\\docs\\zh-Hans"} + {"Path":"C:\\Github\\abp\\docs"} ``` - 请注意 `Path` 必须使用本地docs目录替换. 你可以从https://github.com/abpframework/abp/tree/master/docs/zh-hans获取ABP Framework的文档并且复制到该目录 `C:\\Github\\abp\\docs\\zh-Hans` 使其正常工作. + 请注意 `Path` 必须使用本地docs目录替换. 你可以从https://github.com/abpframework/abp/tree/master/docs获取ABP Framework的文档并且复制到该目录 `C:\\Github\\abp\\docs` 使其正常工作. - MainWebsiteUrl: `/` @@ -364,7 +359,7 @@ INSERT [dbo].[DocsProjects] ([Id], [Name], [ShortName], [Format], [DefaultDocume 对于 `SQL` 数据库,你可以使用下面的 `T-SQL` 命令将指定的示例插入到 `DocsProjects` 表中: ```mssql -INSERT [dbo].[DocsProjects] ([Id], [Name], [ShortName], [Format], [DefaultDocumentName], [NavigationDocumentName], [MinimumVersion], [DocumentStoreType], [ExtraProperties], [MainWebsiteUrl], [LatestVersionBranchName]) VALUES (N'12f21123-e08e-4f15-bedb-ae0b2d939659', N'ABP framework (FileSystem)', N'abp', N'md', N'Index', N'docs-nav.json', NULL, N'FileSystem', N'{"Path":"C:\\Github\\abp\\docs\\zh-Hans"}', N'/', NULL) +INSERT [dbo].[DocsProjects] ([Id], [Name], [ShortName], [Format], [DefaultDocumentName], [NavigationDocumentName], [MinimumVersion], [DocumentStoreType], [ExtraProperties], [MainWebsiteUrl], [LatestVersionBranchName]) VALUES (N'12f21123-e08e-4f15-bedb-ae0b2d939659', N'ABP framework (FileSystem)', N'abp', N'md', N'Index', N'docs-nav.json', NULL, N'FileSystem', N'{"Path":"C:\\Github\\abp\\docs"}', N'/', NULL) ``` 添加上面的一个示例项目后运行该应用程序. 在菜单中你会看到`文档` 链接,点击菜单链接打开文档页面. @@ -408,6 +403,101 @@ public class Person [https://github.com/abpframework/abp/blob/master/docs/zh-Hans/](https://github.com/abpframework/abp/blob/master/docs/zh-Hans/) +#### 有条件的部分功能(使用Scriban) + +文档模块使用[Scriban]()有条件的显示或隐藏文档的某些部分. 使用该功能你需要为每一种语言创建一个JSON文件做为**参数文档**. 它包含所有键值以及它们的显示名称. + +例如 [en/docs-params.json](https://github.com/abpio/abp-commercial-docs/blob/master/en/docs-params.json): + +```json +{ + "parameters": [{ + "name": "UI", + "displayName": "UI", + "values": { + "MVC": "MVC / Razor Pages", + "NG": "Angular" + } + }, + { + "name": "DB", + "displayName": "Database", + "values": { + "EF": "Entity Framework Core", + "Mongo": "MongoDB" + } + }, + { + "name": "Tiered", + "displayName": "Tiered", + "values": { + "No": "Not Tiered", + "Yes": "Tiered" + } + }] +} +``` + +因为并不是项目中的每个文档都有章节或者不需要所有的参数,你必须声明哪些参数将用于对文档进行分段,在文档的任何地方都可以使用JSON块. + +例如 [Getting-Started.md](https://github.com/abpio/abp-commercial-docs/blob/master/en/getting-started.md): + +``` +..... + +​````json +//[doc-params] +{ + "UI": ["MVC","NG"], + "DB": ["EF", "Mongo"], + "Tiered": ["Yes", "No"] +} +​```` + +........ +``` + +这个部分会在渲染时自动删除.前提是这些键值必须与**参数文档**中的键值匹配. + +![Interface](../images/docs-section-ui.png) + +现在你可以使用 **Scriban** 语法在文档中创建章节. + +示例 : + +```` +{{ if UI == "NG" }} + +* `-u` argument specifies the UI framework, `angular` in this case. + +{{ end }} + +{{ if DB == "Mongo" }} + +* `-d` argument specifies the database provider, `mongodb` in this case. + +{{ end }} + +{{ if Tiered == "Yes" }} + +* `--tiered` argument is used to create N-tiered solution where authentication server, UI and API layers are physically separated. + +{{ end }} + +```` + +还可以在文本中使用变量,在其键中添加 **_Value** 后缀: + +```` +This document assumes that you prefer to use **{{ UI_Value }}** as the UI framework and **{{ DB_Value }}** as the database provider. +```` + +如果你想要得到的当前文档的语言或版本,可以使用预定义的 **Document_Language_Code** 和 **DOCUMENT_VERSION** 键(这对于创建重定向到另一个地区中另一个文档系统的链接很有用). + +------ + +**重要提示**: Scriban 的语法是 "{{" and "}}". 如果要在文档(如Angular文档)中使用转义,则必须使用转义块. 参阅 [Scriban文档]( ) 了解更多信息. + ### 8- 创建文档导航 导航文档是文档页面的主菜单. 它位于页面的左侧,是一个`JSON` 文件. 请查看以下示例导航文档以了解结构. @@ -464,4 +554,8 @@ public class Person ![Navigation menu](../images/docs-module_download-sample-navigation-menu.png) -最后,为您的项目添加了一个新的Docs模块, 该模块由GitHub提供. \ No newline at end of file +最后,为您的项目添加了一个新的Docs模块, 该模块由GitHub提供. + +## 下一步 + +文档模块也可以做为独立的应用程序. 查看 [VoloDocs](../Apps/VoloDocs). \ No newline at end of file diff --git a/docs/zh-Hans/Modules/Index.md b/docs/zh-Hans/Modules/Index.md index 8e5edf35b6..e6f08d5451 100644 --- a/docs/zh-Hans/Modules/Index.md +++ b/docs/zh-Hans/Modules/Index.md @@ -14,7 +14,7 @@ ABP是一个 **模块化的应用程序框架** 由十多个 **nuget packages** * **Account**: 用于用户登录/注册应用程序. * **Audit Logging**: 用于将审计日志持久化到数据库. * **Background Jobs**: 用于在使用默认后台作业管理器时保存后台作业. -* **Blogging**: 用于创建精美的博客. ABP的[博客](https://abp.io/blog/abp/) 就使用了此模块. +* **Blogging**: 用于创建精美的博客. ABP的[博客](https://blog.abp.io/) 就使用了此模块. * [**Docs**](Docs.md): 用于创建技术文档页面. ABP的[文档](https://abp.io/documents/) 就使用了此模块. * **Identity**: 用于管理角色,用户和他们的权限. * **Identity Server**: 集成了IdentityServer4. diff --git a/docs/zh-Hans/Tutorials/AspNetCore-Mvc/Part-I.md b/docs/zh-Hans/Tutorials/AspNetCore-Mvc/Part-I.md index f9314e5030..5394890f8d 100644 --- a/docs/zh-Hans/Tutorials/AspNetCore-Mvc/Part-I.md +++ b/docs/zh-Hans/Tutorials/AspNetCore-Mvc/Part-I.md @@ -50,6 +50,18 @@ namespace Acme.BookStore public DateTime PublishDate { get; set; } public float Price { get; set; } + + protected Book() + { + } + public Book(Guid id, string name, BookType type, DateTime publishDate, float price) + :base(id) + { + Name = name; + Type = type; + PublishDate = publishDate; + Price = price; + } } } ```` @@ -349,7 +361,7 @@ successfully created the book with id: f3f03580-c1aa-d6a9-072d-39e75c69f5c7 ```` * 此代码更改了Razor View Page Model的默认继承,因此它从`BookStorePage`类(而不是`PageModel`)继承.启动模板附带的`BookStorePage`类,提供所有页面使用的一些共享属性/方法. -* 确保`IndexModel`(Index.cshtml.cs)具有`Acme.BookStore.Pages.Books`命名空间,或者在`Index.cshtml`中更新它. +* 确保`IndexModel`(Index.cshtml.cs)具有`Acme.BookStore.Web.Pages.Books`命名空间,或者在`Index.cshtml`中更新它. #### 将Books页面添加到主菜单 @@ -426,7 +438,7 @@ context.Menu.AddItem( ```` * `abp-script` [tag helper](https://docs.microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers/intro)用于将外部的 **脚本** 添加到页面中.它比标准的`script`标签多了很多额外的功能.它可以处理 **最小化**和 **版本**.查看[捆绑 & 压缩文档](../../AspNetCore/Bundling-Minification.md)获取更多信息. -* `abp-card` 和 `abp-table` 是为Twitter Bootstrap的[card component](http://getbootstrap.com/docs/4.1/components/card/)封装的 **tag helpers**.ABP中有很多tag helpers,可以很方便的使用大多数[bootstrap](https://getbootstrap.com/)组件.你也可以使用原生的HTML标签代替tag helpers.使用tag helper可以通过智能提示和编译时类型检查减少HTML代码并防止错误.查看[tag helpers 文档](../../AspNetCore/Tag-Helpers.md). +* `abp-card` 和 `abp-table` 是为Twitter Bootstrap的[card component](http://getbootstrap.com/docs/4.1/components/card/)封装的 **tag helpers**.ABP中有很多tag helpers,可以很方便的使用大多数[bootstrap](https://getbootstrap.com/)组件.你也可以使用原生的HTML标签代替tag helpers.使用tag helper可以通过智能提示和编译时类型检查减少HTML代码并防止错误.查看[tag helpers 文档](../../AspNetCore/Tag-Helpers/Index.md). * 你可以像上面本地化菜单一样 **本地化** 列名. #### 添加脚本文件 diff --git a/docs/zh-Hans/Tutorials/AspNetCore-Mvc/Part-III.md b/docs/zh-Hans/Tutorials/AspNetCore-Mvc/Part-III.md index 5bbe0e3424..e48cf6b710 100644 --- a/docs/zh-Hans/Tutorials/AspNetCore-Mvc/Part-III.md +++ b/docs/zh-Hans/Tutorials/AspNetCore-Mvc/Part-III.md @@ -56,26 +56,12 @@ namespace Acme.BookStore public async Task SeedAsync(DataSeedContext context) { await _bookRepository.InsertAsync( - new Book - { - Id = _guidGenerator.Create(), - Name = "Test book 1", - Type = BookType.Fantastic, - PublishDate = new DateTime(2015, 05, 24), - Price = 21 - } - ); + new Book(_guidGenerator.Create(), "Test book 1", + BookType.Fantastic, new DateTime(2015, 05, 24), 21)); await _bookRepository.InsertAsync( - new Book - { - Id = _guidGenerator.Create(), - Name = "Test book 2", - Type = BookType.Science, - PublishDate = new DateTime(2014, 02, 11), - Price = 15 - } - ); + new Book(_guidGenerator.Create(), "Test book 2", + BookType.Science, new DateTime(2014, 02, 11), 15)); } } } diff --git a/docs/zh-Hans/images/auditlog-object-diagram.png b/docs/zh-Hans/images/auditlog-object-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..a7e86a2bb214f27b93032292f78d8d24eedf2fca GIT binary patch literal 29134 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