@@ -244,6 +234,7 @@ See [CONTRIBUTING](CONTRIBUTING.md)
## 🌞 Friend's Links
+* **```HertzBeat```** An open-source, real-time monitoring system with custom-monitor and agentLess: [Github](https://github.com/dromara/hertzbeat)
* **```JustAuth```** A Java library of third-party authorized login: [Github](https://github.com/justauth/JustAuth)
* **```MaxKey```** Leading-Edge Enterprise-Class open source IAM Identity and Access management product: [Github](https://github.com/dromara/MaxKey)
* **```PhalApi```** PHP Api Framework: [Website](https://www.phalapi.net/)
diff --git a/README_CN.md b/README_CN.md
index 17caea5915610587ff20e9e9524e1fd17874860f..04065348a1958f5558ab79e4ff58954fb6bd4d9d 100644
--- a/README_CN.md
+++ b/README_CN.md
@@ -1,12 +1,3 @@
-自荐下我们新的全职开源项目 **[HertzBeat赫兹节拍](https://gitee.com/dromara/hertzbeat)** - 易用友好的高性能监控告警系统。
-网站监测,PING连通性,端口可用性,数据库监控,API监控,自定义监控,阈值告警,告警通知。
-
-**代码仓库: [GITHUB](https://github.com/dromara/hertzbeat) | [GITEE](https://gitee.com/dromara/hertzbeat)**
-**官网: [hertzbeat.com](https://hertzbeat.com) | [tancloud.cn](https://tancloud.cn)**
-**[在线使用](https://console.tancloud.cn)** https://console.tancloud.cn
-
-欢迎使用,点赞,推荐,灰常感谢🙏。
-
@@ -262,6 +253,7 @@ Sureness提供了下面这些常用接口作为扩展点:
## 🌞 开源推荐
+* **```HertzBeat```** 易用友好的实时监控系统,无需Agent,强大自定义监控能力: [Github](https://github.com/dromara/hertzbeat)
* **```JustAuth```** 小而全而美的第三方登录开源组件: [Gitee](https://gitee.com/yadong.zhang/JustAuth)
* **```MaxKey```** 业界领先的企业级开源IAM身份管理和身份认证产品: [Gitee](https://gitee.com/dromara/MaxKey)
* **```PhalApi```** 一个轻量级PHP开源接口框架: [官网](https://www.phalapi.net/)
diff --git a/home/i18n/en/code.json b/home/i18n/en/code.json
new file mode 100644
index 0000000000000000000000000000000000000000..618b1e7680ebd77da03fcecdebb842b26c7b66e5
--- /dev/null
+++ b/home/i18n/en/code.json
@@ -0,0 +1,484 @@
+{
+ "Extendable": {
+ "message": "Extendable"
+ },
+ "Focus on the protection of {restApi}. Based on {rbac}.{br}Provides {authentication} and {authorization}, etc.{br}Extension custom interface is {simple} and really {useful}.": {
+ "message": "Focus on the protection of {restApi}. Based on {rbac}.{br}Provides {authentication} and {authorization}, etc.{br}Extension custom interface is {simple} and really {useful}."
+ },
+ "Compatible": {
+ "message": "Compatible"
+ },
+ "Support {WebSockets}, HTTP containers ({Servlet} and {JaxRs}).{br}No framework dependency.{native} supports {SpringBoot}, {SpringWebFlux}, {Javalin}, {Quarkus},{Ktor}, {Solon}, {Jfinal}, {Micronaut} etc.": {
+ "message": "Support {WebSockets}, HTTP containers ({Servlet} and {JaxRs}).{br}No framework dependency.{native} supports {SpringBoot}, {SpringWebFlux}, {Javalin}, {Quarkus},{Ktor}, {Solon}, {Jfinal}, {Micronaut} etc."
+ },
+ "Multi And Fast": {
+ "message": "Multi And Fast"
+ },
+ "Supports {jwt}, {basic}, {digest} etc.{br}{dynamic} modification of {perm}.{br}{high} with {tree}.": {
+ "message": "Supports {jwt}, {basic}, {digest} etc.{br}{dynamic} modification of {perm}.{br}{high} with {tree}."
+ },
+ "Focus on Protection of API": {
+ "message": "Focus on Protection of API"
+ },
+ "Get Started": {
+ "message": "Get Started"
+ },
+ "Support for Jvm Modern Frameworks": {
+ "message": "Support for Jvm Modern Frameworks"
+ },
+ "Sureness allows you to security any server written with jvm modern frameworks such as {Spring}, {SpringBoot}, {SpringWebFlux}, {Javalin}, {Quarkus}, {Micronaut}, {Solon}, {Jfinal} or {Ktor} as well as frameworks for Kotlin.": {
+ "message": "Sureness allows you to security any server written with jvm modern frameworks such as {Spring}, {SpringBoot}, {SpringWebFlux}, {Javalin}, {Quarkus}, {Micronaut}, {Solon}, {Jfinal} or {Ktor} as well as frameworks for Kotlin."
+ },
+ "The essence of Sureness is to use {interceptor}(like servlet filter or Spring interceptor) to intercept all rest requests for authenticating and authorizing.{br}So no matter any framework, as long as it has a interceptor, it can integrate with sureness. Sureness uses {handling}, {checkIn} will return {SubjectSum}(user information) when auth success, or throw different types of auth exceptions when auth error.": {
+ "message": "The essence of Sureness is to use {interceptor}(like servlet filter or Spring interceptor) to intercept all rest requests for authenticating and authorizing.{br}So no matter any framework, as long as it has a interceptor, it can integrate with sureness. Sureness uses {handling}, {checkIn} will return {SubjectSum}(user information) when auth success, or throw different types of auth exceptions when auth error."
+ },
+ "Multi Support Samples": {
+ "message": "Multi Support Samples"
+ },
+ "Benchmark Compare": {
+ "message": "Benchmark Compare"
+ },
+ "{Benchmark} test shows Sureness to lose 0.026ms performance compared to frameless application, Shiro lose 0.088ms, Spring Security lose 0.116ms.{br}In contrast, Sureness basically does not consume performance, and the performance (TPS loss) is {times3} that of Shiro and {times4} that of Spring Security.{br}{increases}.": {
+ "message": "{Benchmark} test shows Sureness to lose 0.026ms performance compared to frameless application, Shiro lose 0.088ms, Spring Security lose 0.116ms.{br}In contrast, Sureness basically does not consume performance, and the performance (TPS loss) is {times3} that of Shiro and {times4} that of Spring Security.{br}{increases}."
+ },
+ "Why Is High Performance": {
+ "message": "Why Is High Performance"
+ },
+ "In a large number of requests, we found that the {linear} of the {filter} is a performance bottleneck. {br}So we used a {tree} instead of {ant}.{br}Practice has proved that it is very {effective}.": {
+ "message": "In a large number of requests, we found that the {linear} of the {filter} is a performance bottleneck. {br}So we used a {tree} instead of {ant}.{br}Practice has proved that it is very {effective}."
+ },
+ "Get Started With Sureness within Minutes": {
+ "message": "Get Started With Sureness within Minutes"
+ },
+ "We provide many tutorials and samples, you can refer to them to builda complete permission project within 10 minutes.{br}Have Fun!": {
+ "message": "We provide many tutorials and samples, you can refer to them to builda complete permission project within 10 minutes.{br}Have Fun!"
+ },
+ "sponsor": {
+ "message": "sponsor"
+ },
+ "Friend Links": {
+ "message": "Friend Links"
+ },
+ "theme.ErrorPageContent.title": {
+ "message": "This page crashed.",
+ "description": "The title of the fallback page when the page crashed"
+ },
+ "theme.ErrorPageContent.tryAgain": {
+ "message": "Try again",
+ "description": "The label of the button to try again when the page crashed"
+ },
+ "theme.NotFound.title": {
+ "message": "Page Not Found",
+ "description": "The title of the 404 page"
+ },
+ "theme.NotFound.p1": {
+ "message": "We could not find what you were looking for.",
+ "description": "The first paragraph of the 404 page"
+ },
+ "theme.NotFound.p2": {
+ "message": "Please contact the owner of the site that linked you to the original URL and let them know their link is broken.",
+ "description": "The 2nd paragraph of the 404 page"
+ },
+ "theme.admonition.note": {
+ "message": "note",
+ "description": "The default label used for the Note admonition (:::note)"
+ },
+ "theme.admonition.tip": {
+ "message": "tip",
+ "description": "The default label used for the Tip admonition (:::tip)"
+ },
+ "theme.admonition.danger": {
+ "message": "danger",
+ "description": "The default label used for the Danger admonition (:::danger)"
+ },
+ "theme.admonition.info": {
+ "message": "info",
+ "description": "The default label used for the Info admonition (:::info)"
+ },
+ "theme.admonition.caution": {
+ "message": "caution",
+ "description": "The default label used for the Caution admonition (:::caution)"
+ },
+ "theme.AnnouncementBar.closeButtonAriaLabel": {
+ "message": "Close",
+ "description": "The ARIA label for close button of announcement bar"
+ },
+ "theme.BackToTopButton.buttonAriaLabel": {
+ "message": "Scroll back to top",
+ "description": "The ARIA label for the back to top button"
+ },
+ "theme.blog.archive.title": {
+ "message": "Archive",
+ "description": "The page & hero title of the blog archive page"
+ },
+ "theme.blog.archive.description": {
+ "message": "Archive",
+ "description": "The page & hero description of the blog archive page"
+ },
+ "theme.blog.paginator.navAriaLabel": {
+ "message": "Blog list page navigation",
+ "description": "The ARIA label for the blog pagination"
+ },
+ "theme.blog.paginator.newerEntries": {
+ "message": "Newer Entries",
+ "description": "The label used to navigate to the newer blog posts page (previous page)"
+ },
+ "theme.blog.paginator.olderEntries": {
+ "message": "Older Entries",
+ "description": "The label used to navigate to the older blog posts page (next page)"
+ },
+ "theme.blog.post.paginator.navAriaLabel": {
+ "message": "Blog post page navigation",
+ "description": "The ARIA label for the blog posts pagination"
+ },
+ "theme.blog.post.paginator.newerPost": {
+ "message": "Newer Post",
+ "description": "The blog post button label to navigate to the newer/previous post"
+ },
+ "theme.blog.post.paginator.olderPost": {
+ "message": "Older Post",
+ "description": "The blog post button label to navigate to the older/next post"
+ },
+ "theme.blog.post.plurals": {
+ "message": "One post|{count} posts",
+ "description": "Pluralized label for \"{count} posts\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)"
+ },
+ "theme.blog.tagTitle": {
+ "message": "{nPosts} tagged with \"{tagName}\"",
+ "description": "The title of the page for a blog tag"
+ },
+ "theme.tags.tagsPageLink": {
+ "message": "View All Tags",
+ "description": "The label of the link targeting the tag list page"
+ },
+ "theme.colorToggle.ariaLabel": {
+ "message": "Switch between dark and light mode (currently {mode})",
+ "description": "The ARIA label for the navbar color mode toggle"
+ },
+ "theme.colorToggle.ariaLabel.mode.dark": {
+ "message": "dark mode",
+ "description": "The name for the dark color mode"
+ },
+ "theme.colorToggle.ariaLabel.mode.light": {
+ "message": "light mode",
+ "description": "The name for the light color mode"
+ },
+ "theme.docs.breadcrumbs.home": {
+ "message": "Home page",
+ "description": "The ARIA label for the home page in the breadcrumbs"
+ },
+ "theme.docs.breadcrumbs.navAriaLabel": {
+ "message": "Breadcrumbs",
+ "description": "The ARIA label for the breadcrumbs"
+ },
+ "theme.docs.DocCard.categoryDescription": {
+ "message": "{count} items",
+ "description": "The default description for a category card in the generated index about how many items this category includes"
+ },
+ "theme.docs.paginator.navAriaLabel": {
+ "message": "Docs pages navigation",
+ "description": "The ARIA label for the docs pagination"
+ },
+ "theme.docs.paginator.previous": {
+ "message": "Previous",
+ "description": "The label used to navigate to the previous doc"
+ },
+ "theme.docs.paginator.next": {
+ "message": "Next",
+ "description": "The label used to navigate to the next doc"
+ },
+ "theme.docs.tagDocListPageTitle.nDocsTagged": {
+ "message": "One doc tagged|{count} docs tagged",
+ "description": "Pluralized label for \"{count} docs tagged\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)"
+ },
+ "theme.docs.tagDocListPageTitle": {
+ "message": "{nDocsTagged} with \"{tagName}\"",
+ "description": "The title of the page for a docs tag"
+ },
+ "theme.docs.versionBadge.label": {
+ "message": "Version: {versionLabel}"
+ },
+ "theme.docs.versions.unreleasedVersionLabel": {
+ "message": "This is unreleased documentation for {siteTitle} {versionLabel} version.",
+ "description": "The label used to tell the user that he's browsing an unreleased doc version"
+ },
+ "theme.docs.versions.unmaintainedVersionLabel": {
+ "message": "This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.",
+ "description": "The label used to tell the user that he's browsing an unmaintained doc version"
+ },
+ "theme.docs.versions.latestVersionSuggestionLabel": {
+ "message": "For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).",
+ "description": "The label used to tell the user to check the latest version"
+ },
+ "theme.docs.versions.latestVersionLinkLabel": {
+ "message": "latest version",
+ "description": "The label used for the latest version suggestion link label"
+ },
+ "theme.common.editThisPage": {
+ "message": "Edit this page",
+ "description": "The link label to edit the current page"
+ },
+ "theme.common.headingLinkTitle": {
+ "message": "Direct link to heading",
+ "description": "Title for link to heading"
+ },
+ "theme.lastUpdated.atDate": {
+ "message": " on {date}",
+ "description": "The words used to describe on which date a page has been last updated"
+ },
+ "theme.lastUpdated.byUser": {
+ "message": " by {user}",
+ "description": "The words used to describe by who the page has been last updated"
+ },
+ "theme.lastUpdated.lastUpdatedAtBy": {
+ "message": "Last updated{atDate}{byUser}",
+ "description": "The sentence used to display when a page has been last updated, and by who"
+ },
+ "theme.navbar.mobileVersionsDropdown.label": {
+ "message": "Versions",
+ "description": "The label for the navbar versions dropdown on mobile view"
+ },
+ "theme.common.skipToMainContent": {
+ "message": "Skip to main content",
+ "description": "The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation"
+ },
+ "theme.tags.tagsListLabel": {
+ "message": "Tags:",
+ "description": "The label alongside a tag list"
+ },
+ "theme.blog.sidebar.navAriaLabel": {
+ "message": "Blog recent posts navigation",
+ "description": "The ARIA label for recent posts in the blog sidebar"
+ },
+ "theme.CodeBlock.copied": {
+ "message": "Copied",
+ "description": "The copied button label on code blocks"
+ },
+ "theme.CodeBlock.copyButtonAriaLabel": {
+ "message": "Copy code to clipboard",
+ "description": "The ARIA label for copy code blocks button"
+ },
+ "theme.CodeBlock.copy": {
+ "message": "Copy",
+ "description": "The copy button label on code blocks"
+ },
+ "theme.CodeBlock.wordWrapToggle": {
+ "message": "Toggle word wrap",
+ "description": "The title attribute for toggle word wrapping button of code block lines"
+ },
+ "theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel": {
+ "message": "Toggle the collapsible sidebar category '{label}'",
+ "description": "The ARIA label to toggle the collapsible sidebar category"
+ },
+ "theme.navbar.mobileLanguageDropdown.label": {
+ "message": "Languages",
+ "description": "The label for the mobile language switcher dropdown"
+ },
+ "theme.TOCCollapsible.toggleButtonLabel": {
+ "message": "On this page",
+ "description": "The label used by the button on the collapsible TOC component"
+ },
+ "theme.blog.post.readMore": {
+ "message": "Read More",
+ "description": "The label used in blog post item excerpts to link to full blog posts"
+ },
+ "theme.blog.post.readMoreLabel": {
+ "message": "Read more about {title}",
+ "description": "The ARIA label for the link to full blog posts from excerpts"
+ },
+ "theme.blog.post.readingTime.plurals": {
+ "message": "One min read|{readingTime} min read",
+ "description": "Pluralized label for \"{readingTime} min read\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)"
+ },
+ "theme.docs.sidebar.collapseButtonTitle": {
+ "message": "Collapse sidebar",
+ "description": "The title attribute for collapse button of doc sidebar"
+ },
+ "theme.docs.sidebar.collapseButtonAriaLabel": {
+ "message": "Collapse sidebar",
+ "description": "The title attribute for collapse button of doc sidebar"
+ },
+ "theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel": {
+ "message": "← Back to main menu",
+ "description": "The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"
+ },
+ "theme.docs.sidebar.expandButtonTitle": {
+ "message": "Expand sidebar",
+ "description": "The ARIA label and title attribute for expand button of doc sidebar"
+ },
+ "theme.docs.sidebar.expandButtonAriaLabel": {
+ "message": "Expand sidebar",
+ "description": "The ARIA label and title attribute for expand button of doc sidebar"
+ },
+ "theme.SearchBar.label": {
+ "message": "Search",
+ "description": "The ARIA label and placeholder for search button"
+ },
+ "theme.SearchModal.searchBox.resetButtonTitle": {
+ "message": "Clear the query",
+ "description": "The label and ARIA label for search box reset button"
+ },
+ "theme.SearchModal.searchBox.cancelButtonText": {
+ "message": "Cancel",
+ "description": "The label and ARIA label for search box cancel button"
+ },
+ "theme.SearchModal.startScreen.recentSearchesTitle": {
+ "message": "Recent",
+ "description": "The title for recent searches"
+ },
+ "theme.SearchModal.startScreen.noRecentSearchesText": {
+ "message": "No recent searches",
+ "description": "The text when no recent searches"
+ },
+ "theme.SearchModal.startScreen.saveRecentSearchButtonTitle": {
+ "message": "Save this search",
+ "description": "The label for save recent search button"
+ },
+ "theme.SearchModal.startScreen.removeRecentSearchButtonTitle": {
+ "message": "Remove this search from history",
+ "description": "The label for remove recent search button"
+ },
+ "theme.SearchModal.startScreen.favoriteSearchesTitle": {
+ "message": "Favorite",
+ "description": "The title for favorite searches"
+ },
+ "theme.SearchModal.startScreen.removeFavoriteSearchButtonTitle": {
+ "message": "Remove this search from favorites",
+ "description": "The label for remove favorite search button"
+ },
+ "theme.SearchModal.errorScreen.titleText": {
+ "message": "Unable to fetch results",
+ "description": "The title for error screen of search modal"
+ },
+ "theme.SearchModal.errorScreen.helpText": {
+ "message": "You might want to check your network connection.",
+ "description": "The help text for error screen of search modal"
+ },
+ "theme.SearchModal.footer.selectText": {
+ "message": "to select",
+ "description": "The explanatory text of the action for the enter key"
+ },
+ "theme.SearchModal.footer.selectKeyAriaLabel": {
+ "message": "Enter key",
+ "description": "The ARIA label for the Enter key button that makes the selection"
+ },
+ "theme.SearchModal.footer.navigateText": {
+ "message": "to navigate",
+ "description": "The explanatory text of the action for the Arrow up and Arrow down key"
+ },
+ "theme.SearchModal.footer.navigateUpKeyAriaLabel": {
+ "message": "Arrow up",
+ "description": "The ARIA label for the Arrow up key button that makes the navigation"
+ },
+ "theme.SearchModal.footer.navigateDownKeyAriaLabel": {
+ "message": "Arrow down",
+ "description": "The ARIA label for the Arrow down key button that makes the navigation"
+ },
+ "theme.SearchModal.footer.closeText": {
+ "message": "to close",
+ "description": "The explanatory text of the action for Escape key"
+ },
+ "theme.SearchModal.footer.closeKeyAriaLabel": {
+ "message": "Escape key",
+ "description": "The ARIA label for the Escape key button that close the modal"
+ },
+ "theme.SearchModal.footer.searchByText": {
+ "message": "Search by",
+ "description": "The text explain that the search is making by Algolia"
+ },
+ "theme.SearchModal.noResultsScreen.noResultsText": {
+ "message": "No results for",
+ "description": "The text explains that there are no results for the following search"
+ },
+ "theme.SearchModal.noResultsScreen.suggestedQueryText": {
+ "message": "Try searching for",
+ "description": "The text for the suggested query when no results are found for the following search"
+ },
+ "theme.SearchModal.noResultsScreen.reportMissingResultsText": {
+ "message": "Believe this query should return results?",
+ "description": "The text for the question where the user thinks there are missing results"
+ },
+ "theme.SearchModal.noResultsScreen.reportMissingResultsLinkText": {
+ "message": "Let us know.",
+ "description": "The text for the link to report missing results"
+ },
+ "theme.SearchModal.placeholder": {
+ "message": "Search docs",
+ "description": "The placeholder of the input of the DocSearch pop-up modal"
+ },
+ "theme.SearchBar.seeAll": {
+ "message": "See all {count} results"
+ },
+ "theme.SearchPage.documentsFound.plurals": {
+ "message": "One document found|{count} documents found",
+ "description": "Pluralized label for \"{count} documents found\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)"
+ },
+ "theme.SearchPage.existingResultsTitle": {
+ "message": "Search results for \"{query}\"",
+ "description": "The search page title for non-empty query"
+ },
+ "theme.SearchPage.emptyResultsTitle": {
+ "message": "Search the documentation",
+ "description": "The search page title for empty query"
+ },
+ "theme.SearchPage.inputPlaceholder": {
+ "message": "Type your search here",
+ "description": "The placeholder for search page input"
+ },
+ "theme.SearchPage.inputLabel": {
+ "message": "Search",
+ "description": "The ARIA label for search page input"
+ },
+ "theme.SearchPage.algoliaLabel": {
+ "message": "Search by Algolia",
+ "description": "The ARIA label for Algolia mention"
+ },
+ "theme.SearchPage.noResultsText": {
+ "message": "No results were found",
+ "description": "The paragraph for empty search result"
+ },
+ "theme.SearchPage.fetchingNewResults": {
+ "message": "Fetching new results...",
+ "description": "The paragraph for fetching new search results"
+ },
+ "theme.IdealImageMessage.loading": {
+ "message": "Loading...",
+ "description": "When the full-scale image is loading"
+ },
+ "theme.IdealImageMessage.load": {
+ "message": "Click to load{sizeMessage}",
+ "description": "To prompt users to load the full image. sizeMessage is a parenthesized size figure."
+ },
+ "theme.IdealImageMessage.offline": {
+ "message": "Your browser is offline. Image not loaded",
+ "description": "When the user is viewing an offline document"
+ },
+ "theme.IdealImageMessage.404error": {
+ "message": "404. Image not found",
+ "description": "When the image is not found"
+ },
+ "theme.IdealImageMessage.error": {
+ "message": "Error. Click to reload",
+ "description": "When the image fails to load for unknown error"
+ },
+ "theme.PwaReloadPopup.info": {
+ "message": "New version available",
+ "description": "The text for PWA reload popup"
+ },
+ "theme.PwaReloadPopup.refreshButtonText": {
+ "message": "Refresh",
+ "description": "The text for PWA reload button"
+ },
+ "theme.PwaReloadPopup.closeButtonAriaLabel": {
+ "message": "Close",
+ "description": "The ARIA label for close button of PWA reload popup"
+ },
+ "theme.Playground.result": {
+ "message": "Result",
+ "description": "The result label of the live codeblocks"
+ },
+ "theme.Playground.liveEditor": {
+ "message": "Live Editor",
+ "description": "The live editor label of the live codeblocks"
+ }
+}
diff --git a/home/i18n/en/docusaurus-plugin-content-blog/options.json b/home/i18n/en/docusaurus-plugin-content-blog/options.json
new file mode 100644
index 0000000000000000000000000000000000000000..9239ff706c28811b3931968257fffe5465d4cb0e
--- /dev/null
+++ b/home/i18n/en/docusaurus-plugin-content-blog/options.json
@@ -0,0 +1,14 @@
+{
+ "title": {
+ "message": "Blog",
+ "description": "The title for the blog used in SEO"
+ },
+ "description": {
+ "message": "Blog",
+ "description": "The description for the blog used in SEO"
+ },
+ "sidebar.title": {
+ "message": "Recent posts",
+ "description": "The label for the left sidebar"
+ }
+}
diff --git a/home/i18n/en/docusaurus-plugin-content-docs/current.json b/home/i18n/en/docusaurus-plugin-content-docs/current.json
new file mode 100644
index 0000000000000000000000000000000000000000..ae155ff993d7afad9d5f7b4dd3e47970d9e3c960
--- /dev/null
+++ b/home/i18n/en/docusaurus-plugin-content-docs/current.json
@@ -0,0 +1,22 @@
+{
+ "version.label": {
+ "message": "Next",
+ "description": "The label for version current"
+ },
+ "sidebar.docs.category.Guides": {
+ "message": "Guides",
+ "description": "The label for category Guides in sidebar docs"
+ },
+ "sidebar.docs.category.Advanced": {
+ "message": "Advanced",
+ "description": "The label for category Advanced in sidebar docs"
+ },
+ "sidebar.docs.category.Integrate": {
+ "message": "Integrate",
+ "description": "The label for category Integrate in sidebar docs"
+ },
+ "sidebar.docs.category.Others": {
+ "message": "Others",
+ "description": "The label for category Others in sidebar docs"
+ }
+}
diff --git a/home/i18n/en/docusaurus-theme-classic/footer.json b/home/i18n/en/docusaurus-theme-classic/footer.json
new file mode 100644
index 0000000000000000000000000000000000000000..f41d701c31a5e424eab79c2896a12baf53a249d1
--- /dev/null
+++ b/home/i18n/en/docusaurus-theme-classic/footer.json
@@ -0,0 +1,62 @@
+{
+ "link.title.About Sureness": {
+ "message": "About Sureness",
+ "description": "The title of the footer links column with title=About Sureness in the footer"
+ },
+ "link.title.Community": {
+ "message": "Community",
+ "description": "The title of the footer links column with title=Community in the footer"
+ },
+ "link.title.More": {
+ "message": "More",
+ "description": "The title of the footer links column with title=More in the footer"
+ },
+ "link.item.label.Github": {
+ "message": "Github",
+ "description": "The label of footer link with label=Github linking to https://github.com/dromara/sureness"
+ },
+ "link.item.label.Gitee": {
+ "message": "Gitee",
+ "description": "The label of footer link with label=Gitee linking to https://gitee.com/dromara/sureness"
+ },
+ "link.item.label.High Performance": {
+ "message": "High Performance",
+ "description": "The label of footer link with label=High Performance linking to https://github.com/tomsun28/sureness-shiro-spring-security-benchmark"
+ },
+ "link.item.label.Dashboard": {
+ "message": "Dashboard",
+ "description": "The label of footer link with label=Dashboard linking to https://github.com/dromara/sureness/projects/1"
+ },
+ "link.item.label.Dromara": {
+ "message": "Dromara",
+ "description": "The label of footer link with label=Dromara linking to https://dromara.org"
+ },
+ "link.item.label.Github Discussion": {
+ "message": "Github Discussion",
+ "description": "The label of footer link with label=Github Discussion linking to https://github.com/dromara/sureness/discussions"
+ },
+ "link.item.label.Gitter Channel": {
+ "message": "Gitter Channel",
+ "description": "The label of footer link with label=Gitter Channel linking to https://gitter.im/usthe/sureness"
+ },
+ "link.item.label.QQ Group - 390083213": {
+ "message": "QQ Group - 390083213",
+ "description": "The label of footer link with label=QQ Group - 390083213 linking to https://qm.qq.com/cgi-bin/qm/qr?k=3IpzQjFOztJe464_eMBmDHfT0YTWK5Qa&jump_from=webapi"
+ },
+ "link.item.label.Tom Blog": {
+ "message": "Tom Blog",
+ "description": "The label of footer link with label=Tom Blog linking to https://blog.usthe.com"
+ },
+ "link.item.label.USTHE": {
+ "message": "USTHE",
+ "description": "The label of footer link with label=USTHE linking to https://github.com/usthe"
+ },
+ "link.item.label.Tom": {
+ "message": "Tom",
+ "description": "The label of footer link with label=Tom linking to https://github.com/tomsun28"
+ },
+ "copyright": {
+ "message": "Apache License 2.0 | Copyright © 2022",
+ "description": "The footer copyright"
+ }
+}
diff --git a/home/i18n/en/docusaurus-theme-classic/navbar.json b/home/i18n/en/docusaurus-theme-classic/navbar.json
new file mode 100644
index 0000000000000000000000000000000000000000..b6bef2a377a04fff0b053825d95f1a1463d5fe15
--- /dev/null
+++ b/home/i18n/en/docusaurus-theme-classic/navbar.json
@@ -0,0 +1,54 @@
+{
+ "title": {
+ "message": " ",
+ "description": "The title in the navbar"
+ },
+ "item.label.Document": {
+ "message": "Document",
+ "description": "Navbar item with label Document"
+ },
+ "item.label.Blog": {
+ "message": "Blog",
+ "description": "Navbar item with label Blog"
+ },
+ "item.label.Dashboard": {
+ "message": "Dashboard",
+ "description": "Navbar item with label Dashboard"
+ },
+ "item.label.High Performance": {
+ "message": "High Performance",
+ "description": "Navbar item with label High Performance"
+ },
+ "item.label.Discuss": {
+ "message": "Discuss",
+ "description": "Navbar item with label Discuss"
+ },
+ "item.label.Other": {
+ "message": "Other",
+ "description": "Navbar item with label Other"
+ },
+ "item.label.Github Discussion": {
+ "message": "Github Discussion",
+ "description": "Navbar item with label Github Discussion"
+ },
+ "item.label.Gitter Channel": {
+ "message": "Gitter Channel",
+ "description": "Navbar item with label Gitter Channel"
+ },
+ "item.label.QQ Group - 390083213": {
+ "message": "QQ Group - 390083213",
+ "description": "Navbar item with label QQ Group - 390083213"
+ },
+ "item.label.Design": {
+ "message": "Design",
+ "description": "Navbar item with label Design"
+ },
+ "item.label.Contributing": {
+ "message": "Contributing",
+ "description": "Navbar item with label Contributing"
+ },
+ "item.label.Sponsor": {
+ "message": "Sponsor",
+ "description": "Navbar item with label Sponsor"
+ }
+}
diff --git a/home/i18n/zh-cn/code.json b/home/i18n/zh-cn/code.json
index e8df934a7ea71a5058fe54233c5047a2492d33f2..d8f109e2960806e8a677acdb372693fa7a5ae1f8 100644
--- a/home/i18n/zh-cn/code.json
+++ b/home/i18n/zh-cn/code.json
@@ -125,7 +125,7 @@
},
"theme.docs.versions.latestVersionSuggestionLabel": {
"message": "For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).",
- "description": "The label userd to tell the user that he's browsing an unmaintained doc version"
+ "description": "The label used to tell the user to check the latest version"
},
"theme.docs.versions.latestVersionLinkLabel": {
"message": "latest version",
@@ -270,5 +270,230 @@
},
"Media Partners": {
"message": "合作媒体"
+ },
+ "sponsor": {
+ "message": "特别赞助"
+ },
+ "theme.ErrorPageContent.title": {
+ "message": "页面已崩溃。",
+ "description": "The title of the fallback page when the page crashed"
+ },
+ "theme.ErrorPageContent.tryAgain": {
+ "message": "重试",
+ "description": "The label of the button to try again when the page crashed"
+ },
+ "theme.admonition.note": {
+ "message": "备注",
+ "description": "The default label used for the Note admonition (:::note)"
+ },
+ "theme.admonition.tip": {
+ "message": "提示",
+ "description": "The default label used for the Tip admonition (:::tip)"
+ },
+ "theme.admonition.danger": {
+ "message": "危险",
+ "description": "The default label used for the Danger admonition (:::danger)"
+ },
+ "theme.admonition.info": {
+ "message": "信息",
+ "description": "The default label used for the Info admonition (:::info)"
+ },
+ "theme.admonition.caution": {
+ "message": "警告",
+ "description": "The default label used for the Caution admonition (:::caution)"
+ },
+ "theme.BackToTopButton.buttonAriaLabel": {
+ "message": "回到顶部",
+ "description": "The ARIA label for the back to top button"
+ },
+ "theme.blog.archive.title": {
+ "message": "历史博文",
+ "description": "The page & hero title of the blog archive page"
+ },
+ "theme.blog.archive.description": {
+ "message": "历史博文",
+ "description": "The page & hero description of the blog archive page"
+ },
+ "theme.colorToggle.ariaLabel": {
+ "message": "切换浅色/暗黑模式(当前为{mode})",
+ "description": "The ARIA label for the navbar color mode toggle"
+ },
+ "theme.colorToggle.ariaLabel.mode.dark": {
+ "message": "暗黑模式",
+ "description": "The name for the dark color mode"
+ },
+ "theme.colorToggle.ariaLabel.mode.light": {
+ "message": "浅色模式",
+ "description": "The name for the light color mode"
+ },
+ "theme.docs.breadcrumbs.home": {
+ "message": "主页面",
+ "description": "The ARIA label for the home page in the breadcrumbs"
+ },
+ "theme.docs.breadcrumbs.navAriaLabel": {
+ "message": "页面路径",
+ "description": "The ARIA label for the breadcrumbs"
+ },
+ "theme.docs.DocCard.categoryDescription": {
+ "message": "{count} 个项目",
+ "description": "The default description for a category card in the generated index about how many items this category includes"
+ },
+ "theme.docs.tagDocListPageTitle.nDocsTagged": {
+ "message": "{count} 篇文档带有标签",
+ "description": "Pluralized label for \"{count} docs tagged\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)"
+ },
+ "theme.docs.tagDocListPageTitle": {
+ "message": "{nDocsTagged}「{tagName}」",
+ "description": "The title of the page for a docs tag"
+ },
+ "theme.docs.versionBadge.label": {
+ "message": "版本:{versionLabel}"
+ },
+ "theme.navbar.mobileVersionsDropdown.label": {
+ "message": "选择版本",
+ "description": "The label for the navbar versions dropdown on mobile view"
+ },
+ "theme.blog.sidebar.navAriaLabel": {
+ "message": "最近博文导航",
+ "description": "The ARIA label for recent posts in the blog sidebar"
+ },
+ "theme.CodeBlock.wordWrapToggle": {
+ "message": "切换自动换行",
+ "description": "The title attribute for toggle word wrapping button of code block lines"
+ },
+ "theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel": {
+ "message": "打开/收起侧边栏菜单「{label}」",
+ "description": "The ARIA label to toggle the collapsible sidebar category"
+ },
+ "theme.navbar.mobileLanguageDropdown.label": {
+ "message": "选择语言",
+ "description": "The label for the mobile language switcher dropdown"
+ },
+ "theme.TOCCollapsible.toggleButtonLabel": {
+ "message": "本页总览",
+ "description": "The label used by the button on the collapsible TOC component"
+ },
+ "theme.blog.post.readMoreLabel": {
+ "message": "阅读 {title} 的全文",
+ "description": "The ARIA label for the link to full blog posts from excerpts"
+ },
+ "theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel": {
+ "message": "← 回到主菜单",
+ "description": "The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"
+ },
+ "theme.SearchBar.seeAll": {
+ "message": "查看全部 {count} 个结果"
+ },
+ "theme.SearchModal.searchBox.resetButtonTitle": {
+ "message": "清除查询",
+ "description": "The label and ARIA label for search box reset button"
+ },
+ "theme.SearchModal.searchBox.cancelButtonText": {
+ "message": "取消",
+ "description": "The label and ARIA label for search box cancel button"
+ },
+ "theme.SearchModal.startScreen.recentSearchesTitle": {
+ "message": "最近搜索",
+ "description": "The title for recent searches"
+ },
+ "theme.SearchModal.startScreen.noRecentSearchesText": {
+ "message": "没有最近搜索",
+ "description": "The text when no recent searches"
+ },
+ "theme.SearchModal.startScreen.saveRecentSearchButtonTitle": {
+ "message": "保存这个搜索",
+ "description": "The label for save recent search button"
+ },
+ "theme.SearchModal.startScreen.removeRecentSearchButtonTitle": {
+ "message": "从历史记录中删除这个搜索",
+ "description": "The label for remove recent search button"
+ },
+ "theme.SearchModal.startScreen.favoriteSearchesTitle": {
+ "message": "收藏",
+ "description": "The title for favorite searches"
+ },
+ "theme.SearchModal.startScreen.removeFavoriteSearchButtonTitle": {
+ "message": "从收藏列表中删除这个搜索",
+ "description": "The label for remove favorite search button"
+ },
+ "theme.SearchModal.errorScreen.titleText": {
+ "message": "无法获取结果",
+ "description": "The title for error screen of search modal"
+ },
+ "theme.SearchModal.errorScreen.helpText": {
+ "message": "你可能需要检查网络连接。",
+ "description": "The help text for error screen of search modal"
+ },
+ "theme.SearchModal.footer.selectText": {
+ "message": "选中",
+ "description": "The explanatory text of the action for the enter key"
+ },
+ "theme.SearchModal.footer.selectKeyAriaLabel": {
+ "message": "Enter 键",
+ "description": "The ARIA label for the Enter key button that makes the selection"
+ },
+ "theme.SearchModal.footer.navigateText": {
+ "message": "导航",
+ "description": "The explanatory text of the action for the Arrow up and Arrow down key"
+ },
+ "theme.SearchModal.footer.navigateUpKeyAriaLabel": {
+ "message": "向上键",
+ "description": "The ARIA label for the Arrow up key button that makes the navigation"
+ },
+ "theme.SearchModal.footer.navigateDownKeyAriaLabel": {
+ "message": "向下键",
+ "description": "The ARIA label for the Arrow down key button that makes the navigation"
+ },
+ "theme.SearchModal.footer.closeText": {
+ "message": "关闭",
+ "description": "The explanatory text of the action for Escape key"
+ },
+ "theme.SearchModal.footer.closeKeyAriaLabel": {
+ "message": "Esc 键",
+ "description": "The ARIA label for the Escape key button that close the modal"
+ },
+ "theme.SearchModal.footer.searchByText": {
+ "message": "搜索提供",
+ "description": "The text explain that the search is making by Algolia"
+ },
+ "theme.SearchModal.noResultsScreen.noResultsText": {
+ "message": "没有结果:",
+ "description": "The text explains that there are no results for the following search"
+ },
+ "theme.SearchModal.noResultsScreen.suggestedQueryText": {
+ "message": "试试搜索",
+ "description": "The text for the suggested query when no results are found for the following search"
+ },
+ "theme.SearchModal.noResultsScreen.reportMissingResultsText": {
+ "message": "认为这个查询应该有结果?",
+ "description": "The text for the question where the user thinks there are missing results"
+ },
+ "theme.SearchModal.noResultsScreen.reportMissingResultsLinkText": {
+ "message": "请告知我们。",
+ "description": "The text for the link to report missing results"
+ },
+ "theme.SearchModal.placeholder": {
+ "message": "搜索文档",
+ "description": "The placeholder of the input of the DocSearch pop-up modal"
+ },
+ "theme.IdealImageMessage.loading": {
+ "message": "加载中……",
+ "description": "When the full-scale image is loading"
+ },
+ "theme.IdealImageMessage.load": {
+ "message": "点击加载图片{sizeMessage}",
+ "description": "To prompt users to load the full image. sizeMessage is a parenthesized size figure."
+ },
+ "theme.IdealImageMessage.offline": {
+ "message": "你的浏览器处于离线状态。图片未加载",
+ "description": "When the user is viewing an offline document"
+ },
+ "theme.IdealImageMessage.404error": {
+ "message": "未找到图片",
+ "description": "When the image is not found"
+ },
+ "theme.IdealImageMessage.error": {
+ "message": "出现错误,点击重试",
+ "description": "When the image fails to load for unknown error"
}
-}
\ No newline at end of file
+}
diff --git a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current.json b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current.json
index 1219707ea2a252ed9eaa1f6910e995cc160e22e3..946b18023982071e039b8c7663dbe02fcef1edcd 100644
--- a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current.json
+++ b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current.json
@@ -19,4 +19,4 @@
"message": "其它",
"description": "The label for category Others in sidebar docs"
}
-}
\ No newline at end of file
+}
diff --git a/home/i18n/zh-cn/docusaurus-theme-classic/footer.json b/home/i18n/zh-cn/docusaurus-theme-classic/footer.json
index 20f91fac2df706f8ef45cbd2bbb19452e5cd50c6..bb22193c1b910122e11b338122727e7fd1bae870 100644
--- a/home/i18n/zh-cn/docusaurus-theme-classic/footer.json
+++ b/home/i18n/zh-cn/docusaurus-theme-classic/footer.json
@@ -59,4 +59,4 @@
"message": "Tom",
"description": "The label of footer link with label=Tom linking to https://github.com/tomsun28"
}
-}
\ No newline at end of file
+}
diff --git a/home/i18n/zh-cn/docusaurus-theme-classic/navbar.json b/home/i18n/zh-cn/docusaurus-theme-classic/navbar.json
index a69ddd98a035db5011baaffbe86ab1255cd02a42..f83d92639963550012396e9f0210ec1b42f76198 100644
--- a/home/i18n/zh-cn/docusaurus-theme-classic/navbar.json
+++ b/home/i18n/zh-cn/docusaurus-theme-classic/navbar.json
@@ -51,4 +51,4 @@
"message": "赞助",
"description": "Navbar item with label Sponsor"
}
-}
\ No newline at end of file
+}
diff --git a/home/src/pages/components/Sponsor.js b/home/src/pages/components/Sponsor.js
new file mode 100644
index 0000000000000000000000000000000000000000..f51f1d662a614c96412e0538fa3b97db33b60fa0
--- /dev/null
+++ b/home/src/pages/components/Sponsor.js
@@ -0,0 +1,31 @@
+import React from 'react'
+import styles from './Sponsor.module.css'
+import "slick-carousel/slick/slick.css";
+import "slick-carousel/slick/slick-theme.css";
+
+const iconCommonUrl = '/img/icons/'
+
+export default class Sponsor extends React.Component {
+ constructor (props) {
+ super(props)
+ }
+
+ render () {
+ return (
+ <>
+
+
{this.props.headerTitle}
+
+
+ >
+ )
+ }
+}
diff --git a/home/src/pages/components/Sponsor.module.css b/home/src/pages/components/Sponsor.module.css
new file mode 100644
index 0000000000000000000000000000000000000000..892b66ed411b022ac4c4b4ed3d9eb37eb925400e
--- /dev/null
+++ b/home/src/pages/components/Sponsor.module.css
@@ -0,0 +1,68 @@
+.cardList {
+ margin: -0.35rem;
+ display: flex;
+ flex-wrap: wrap;
+ align-items: flex-start;
+ width: 100%;
+}
+
+.cardItem {
+ width: calc(33.33333% - .7rem);
+ margin: 0.35rem;
+ background: var(--bodyBg);
+ border-radius: 3px;
+ color: var(--textColor);
+ display: flex;
+ box-shadow: 1px 1px 2px 0 rgb(0 0 0 / 6%);
+ transition: all .4s;
+ background-color: var(--wdio-dark-section-background-color);
+}
+
+.cardItemTextBody {
+ flex: 1;
+ display: inline-block;
+ float: right;
+ padding: 1rem 0;
+}
+
+.cardItem:hover img {
+ box-shadow: 3px 2px 7px rgb(0 0 0 / 15%);
+}
+
+.name {
+ margin: 0.2rem 0 0.3rem;
+ padding: 0 1rem;
+ transition: text-shadow .4s;
+ text-align: center;
+ font-weight: bolder;
+}
+
+.desc {
+ font-size: .8rem;
+ line-height: 1.1rem;
+ opacity: .8;
+ margin-bottom: 0.2rem;
+ padding: 0 1rem;
+ transition: text-shadow .4s;
+ text-align: center;
+}
+
+.zoom {
+ width: 70px;
+ height: 70px;
+ border-radius: 50%;
+ border: 2px solid #fff;
+ margin: 1rem 0 1rem 1rem;
+ box-shadow: 3px 2px 5px rgb(0 0 0 / 8%);
+ transition: all .4s;
+}
+
+.companyUsage {
+ width: 100%;
+}
+
+.title {
+ font-size: large;
+ font-weight: bolder;
+ text-align: center;
+}
diff --git a/home/src/pages/index.js b/home/src/pages/index.js
index 3f1cfce569b4d34d80d4d37009ba87c3adccc671..300da0c27fc00548294b0efef2eea35253205ce3 100644
--- a/home/src/pages/index.js
+++ b/home/src/pages/index.js
@@ -15,6 +15,7 @@ import cdnTransfer from '../CdnTransfer'
import styles from './styles.module.css'
import { features, SetupExample, SurenessIntegration, friendLinks, mediaPartners } from '../constants'
+import Sponsor from "./components/Sponsor";
function Home() {
const context = useDocusaurusContext()
@@ -66,6 +67,9 @@ function Home() {
+
{features && features.length > 0 && (
{features.map((props, idx) => (
diff --git a/home/static/img/icons/eoapi_logo.jpg b/home/static/img/icons/eoapi_logo.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..75231f0e954aaa2492717769141b44acf0a0b296
Binary files /dev/null and b/home/static/img/icons/eoapi_logo.jpg differ
diff --git a/home/static/img/icons/postcat_logo.svg b/home/static/img/icons/postcat_logo.svg
new file mode 100644
index 0000000000000000000000000000000000000000..ba33c1679851ac7e5225429b04aa4a0dc16cffe5
--- /dev/null
+++ b/home/static/img/icons/postcat_logo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file