From 995d6268838d4a56928791d2c85fa28327a2256a Mon Sep 17 00:00:00 2001 From: Salih Date: Wed, 15 May 2024 10:08:22 +0300 Subject: [PATCH] add single language mode --- .../app/VoloDocs.Web/Pages/Index.cshtml.cs | 19 ++++++++-------- .../app/VoloDocs.Web/VoloDocsWebModule.cs | 1 + .../docs/src/Volo.Docs.Web/DocsUiOptions.cs | 2 ++ .../docs/src/Volo.Docs.Web/DocsWebModule.cs | 22 +++++++++++++------ .../MarkdownDocumentToHtmlConverter.cs | 2 +- .../Pages/Documents/Project/Index.cshtml | 2 +- .../Pages/Documents/Project/Index.cshtml.cs | 15 +++++++++---- 7 files changed, 41 insertions(+), 22 deletions(-) diff --git a/modules/docs/app/VoloDocs.Web/Pages/Index.cshtml.cs b/modules/docs/app/VoloDocs.Web/Pages/Index.cshtml.cs index 14a5f60c49..c335612ec4 100644 --- a/modules/docs/app/VoloDocs.Web/Pages/Index.cshtml.cs +++ b/modules/docs/app/VoloDocs.Web/Pages/Index.cshtml.cs @@ -27,10 +27,7 @@ namespace VoloDocs.Web.Pages { if (_urlUiOptions.SingleProjectMode.Enable) { - return RedirectToPage("/Documents/Project/Index", new Dictionary { - { nameof(Volo.Docs.Pages.Documents.Project.IndexModel.LanguageCode), "en" }, - { nameof(Volo.Docs.Pages.Documents.Project.IndexModel.Version), DocsAppConsts.Latest } - }); + return Redirect(GetUrlForProject()); } var projects = await _projectAppService.GetListAsync(); @@ -53,18 +50,22 @@ namespace VoloDocs.Web.Pages } //Eg: "/en/abp/latest" - public string GetUrlForProject(ProjectDto project, string language = "en", string version = null) + public string GetUrlForProject(ProjectDto project = null, string language = "en", string version = null) { var routeValues = new Dictionary { - { nameof(Volo.Docs.Pages.Documents.Project.IndexModel.LanguageCode), language }, - { nameof(Volo.Docs.Pages.Documents.Project.IndexModel.Version), version ?? DocsAppConsts.Latest }, - { nameof(Volo.Docs.Pages.Documents.Project.IndexModel.ProjectName), project.ShortName } + { nameof(Volo.Docs.Pages.Documents.Project.IndexModel.Version), version ?? DocsAppConsts.Latest } }; if (!_urlUiOptions.SingleProjectMode.Enable) { - routeValues.Add(nameof(Volo.Docs.Pages.Documents.Project.IndexModel.ProjectName), project.ShortName); + routeValues.Add(nameof(Volo.Docs.Pages.Documents.Project.IndexModel.ProjectName), project?.ShortName); } + + if(_urlUiOptions.MultiLanguageMode) + { + routeValues.Add(nameof(Volo.Docs.Pages.Documents.Project.IndexModel.LanguageCode), language); + } + return Url.Page("/Documents/Project/Index", routeValues); } } diff --git a/modules/docs/app/VoloDocs.Web/VoloDocsWebModule.cs b/modules/docs/app/VoloDocs.Web/VoloDocsWebModule.cs index b218819b94..4307725f63 100644 --- a/modules/docs/app/VoloDocs.Web/VoloDocsWebModule.cs +++ b/modules/docs/app/VoloDocs.Web/VoloDocsWebModule.cs @@ -80,6 +80,7 @@ namespace VoloDocs.Web options.RoutePrefix = null; options.SingleProjectMode.Enable = true; options.SingleProjectMode.ProjectName = "abp"; + options.MultiLanguageMode = false; }); Configure(options => diff --git a/modules/docs/src/Volo.Docs.Web/DocsUiOptions.cs b/modules/docs/src/Volo.Docs.Web/DocsUiOptions.cs index 816c51528d..1d9013cee8 100644 --- a/modules/docs/src/Volo.Docs.Web/DocsUiOptions.cs +++ b/modules/docs/src/Volo.Docs.Web/DocsUiOptions.cs @@ -33,6 +33,8 @@ namespace Volo.Docs /// public bool SectionRendering = true; + public bool MultiLanguageMode { get; set; } = true; + public SingleProjectModeOptions SingleProjectMode { get; } = new (); public Func UrlNormalizer { get; set; } diff --git a/modules/docs/src/Volo.Docs.Web/DocsWebModule.cs b/modules/docs/src/Volo.Docs.Web/DocsWebModule.cs index 3fd89255cf..dc9993dea6 100644 --- a/modules/docs/src/Volo.Docs.Web/DocsWebModule.cs +++ b/modules/docs/src/Volo.Docs.Web/DocsWebModule.cs @@ -60,6 +60,8 @@ namespace Volo.Docs .Value.Value; var routePrefix = docsOptions.RoutePrefix; + + var languageCode = docsOptions.MultiLanguageMode ? "{languageCode}/" : string.Empty; if (docsOptions.SingleProjectMode.Enable) { @@ -67,16 +69,22 @@ namespace Volo.Docs { options.Conventions.AddPageRoute("/Documents/Project/Index", routePrefix); } - options.Conventions.AddPageRoute("/Documents/Project/Index", routePrefix + "{languageCode}"); - options.Conventions.AddPageRoute("/Documents/Project/Index", routePrefix + "{languageCode}/{version}/{*documentName}"); - options.Conventions.AddPageRoute("/Documents/Search", routePrefix + "search/{languageCode}/{version}"); + if(routePrefix + languageCode != "/") + { + options.Conventions.AddPageRoute("/Documents/Project/Index", routePrefix + languageCode); + } + options.Conventions.AddPageRoute("/Documents/Project/Index", routePrefix + languageCode + "{version}/{*documentName}"); + options.Conventions.AddPageRoute("/Documents/Search", routePrefix + "search/" + languageCode + "{version}"); } else { - options.Conventions.AddPageRoute("/Documents/Project/Index", routePrefix + "{projectName}"); - options.Conventions.AddPageRoute("/Documents/Project/Index", routePrefix + "{languageCode}/{projectName}"); - options.Conventions.AddPageRoute("/Documents/Project/Index", routePrefix + "{languageCode}/{projectName}/{version}/{*documentName}"); - options.Conventions.AddPageRoute("/Documents/Search", routePrefix + "search/{languageCode}/{projectName}/{version}"); + if(routePrefix + languageCode != "/") + { + options.Conventions.AddPageRoute("/Documents/Project/Index", routePrefix + "{projectName}"); + } + options.Conventions.AddPageRoute("/Documents/Project/Index", routePrefix + languageCode + "{projectName}"); + options.Conventions.AddPageRoute("/Documents/Project/Index", routePrefix + languageCode + "{projectName}/{version}/{*documentName}"); + options.Conventions.AddPageRoute("/Documents/Search", routePrefix + "search/" + languageCode + "{projectName}/{version}"); } }); diff --git a/modules/docs/src/Volo.Docs.Web/Markdown/MarkdownDocumentToHtmlConverter.cs b/modules/docs/src/Volo.Docs.Web/Markdown/MarkdownDocumentToHtmlConverter.cs index 2758ea1a30..04049ea058 100644 --- a/modules/docs/src/Volo.Docs.Web/Markdown/MarkdownDocumentToHtmlConverter.cs +++ b/modules/docs/src/Volo.Docs.Web/Markdown/MarkdownDocumentToHtmlConverter.cs @@ -51,7 +51,7 @@ namespace Volo.Docs.Markdown _uiOptions.SingleProjectMode.Enable ? projectShortName : projectShortName ?? project.ShortName, version, document.LocalDirectory, - languageCode + !_uiOptions.MultiLanguageMode ? languageCode : languageCode ?? document.LanguageCode ); var html = _markdownConverter.ConvertToHtml(content); diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml index 68e93c1d61..d0d8d250d2 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml @@ -384,7 +384,7 @@
- @if (Model.DocumentLanguageCode != Model.LanguageCode) + @if (Model.LanguageCode != null && Model.DocumentLanguageCode != Model.LanguageCode) { @L["DocumentNotFoundInSelectedLanguage"] diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs index d19fc46d33..3d5dc7a3a4 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs @@ -165,13 +165,15 @@ namespace Volo.Docs.Pages.Documents.Project { return RedirectToDefaultDocument(); } + + var usingSingleLanguageMode = !_uiOptions.MultiLanguageMode && LanguageCode.IsNullOrWhiteSpace(); - if (!CheckLanguage()) + if (!usingSingleLanguageMode && !CheckLanguage()) { return RedirectToDefaultLanguage(); } - if (IsDocumentCultureDifferentThanCurrent()) + if (!usingSingleLanguageMode && IsDocumentCultureDifferentThanCurrent()) { return ReloadPageWithCulture(); } @@ -445,7 +447,7 @@ namespace Volo.Docs.Pages.Documents.Project new GetNavigationDocumentInput { ProjectId = Project.Id, - LanguageCode = LanguageCode, + LanguageCode = DocumentLanguageCode, Version = Version } ); @@ -488,7 +490,7 @@ namespace Volo.Docs.Pages.Documents.Project } var documentNames = new[] { DocumentName, documentPath.EnsureEndsWith('/') + "Index", documentPath.EnsureEndsWith('/') + "index" }.Distinct().ToArray(); - var languages = new[] { LanguageCode, DefaultLanguageCode }.Distinct().ToArray(); + var languages = new[] { LanguageCode, DefaultLanguageCode }.Where(x => !x.IsNullOrWhiteSpace()).Distinct().ToArray(); var sb = new StringBuilder(); foreach (var documentName in documentNames) { @@ -517,6 +519,11 @@ namespace Volo.Docs.Pages.Documents.Project { LanguageSelectListItems = new List(); + if (!_uiOptions.MultiLanguageMode) + { + return; + } + foreach (var language in LanguageConfig.Languages) { LanguageSelectListItems.Add(