i18n: organize ids and update zh translations (#421)
* i18n: organize ids and update zh translations Signed-off-by: Yue Yang <g1enyy0ung@gmail.com> * chore: re-generate translations Signed-off-by: Yue Yang <g1enyy0ung@gmail.com> --------- Signed-off-by: Yue Yang <g1enyy0ung@gmail.com>
This commit is contained in:
parent
df16a2bdc5
commit
becdc5803e
|
@ -1,87 +1,254 @@
|
|||
{
|
||||
"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.ErrorPageContent.title": {
|
||||
"message": "页面已崩溃。",
|
||||
"description": "The title of the fallback page when the page crashed"
|
||||
},
|
||||
"theme.blog.archive.title": {
|
||||
"message": "Archive",
|
||||
"message": "历史博文",
|
||||
"description": "The page & hero title of the blog archive page"
|
||||
},
|
||||
"theme.blog.archive.description": {
|
||||
"message": "Archive",
|
||||
"message": "历史博文",
|
||||
"description": "The page & hero description of the blog archive page"
|
||||
},
|
||||
"theme.AnnouncementBar.closeButtonAriaLabel": {
|
||||
"message": "Close",
|
||||
"description": "The ARIA label for close button of announcement bar"
|
||||
"theme.BackToTopButton.buttonAriaLabel": {
|
||||
"message": "回到顶部",
|
||||
"description": "The ARIA label for the back to top button"
|
||||
},
|
||||
"theme.blog.paginator.navAriaLabel": {
|
||||
"message": "Blog list page navigation",
|
||||
"message": "博文列表分页导航",
|
||||
"description": "The ARIA label for the blog pagination"
|
||||
},
|
||||
"theme.blog.paginator.newerEntries": {
|
||||
"message": "Newer Entries",
|
||||
"message": "较新的博文",
|
||||
"description": "The label used to navigate to the newer blog posts page (previous page)"
|
||||
},
|
||||
"theme.blog.paginator.olderEntries": {
|
||||
"message": "Older Entries",
|
||||
"message": "较旧的博文",
|
||||
"description": "The label used to navigate to the older blog posts page (next page)"
|
||||
},
|
||||
"theme.blog.post.paginator.navAriaLabel": {
|
||||
"message": "博文分页导航",
|
||||
"description": "The ARIA label for the blog posts pagination"
|
||||
},
|
||||
"theme.blog.post.paginator.newerPost": {
|
||||
"message": "较新一篇",
|
||||
"description": "The blog post button label to navigate to the newer/previous post"
|
||||
},
|
||||
"theme.blog.post.paginator.olderPost": {
|
||||
"message": "较旧一篇",
|
||||
"description": "The blog post button label to navigate to the older/next post"
|
||||
},
|
||||
"theme.tags.tagsPageLink": {
|
||||
"message": "查看所有标签",
|
||||
"description": "The label of the link targeting the tag list 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.navAriaLabel": {
|
||||
"message": "页面路径",
|
||||
"description": "The ARIA label for the breadcrumbs"
|
||||
},
|
||||
"theme.docs.DocCard.categoryDescription.plurals": {
|
||||
"message": "{count} 个项目",
|
||||
"description": "The default description for a category card in the generated index about how many items this category includes"
|
||||
},
|
||||
"theme.docs.paginator.navAriaLabel": {
|
||||
"message": "文件选项卡",
|
||||
"description": "The ARIA label for the docs pagination"
|
||||
},
|
||||
"theme.docs.paginator.previous": {
|
||||
"message": "上一页",
|
||||
"description": "The label used to navigate to the previous doc"
|
||||
},
|
||||
"theme.docs.paginator.next": {
|
||||
"message": "下一页",
|
||||
"description": "The label used to navigate to the next doc"
|
||||
},
|
||||
"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.versions.unreleasedVersionLabel": {
|
||||
"message": "此为 {siteTitle} {versionLabel} 版尚未发行的文档。",
|
||||
"description": "The label used to tell the user that he's browsing an unreleased doc version"
|
||||
},
|
||||
"theme.docs.versions.unmaintainedVersionLabel": {
|
||||
"message": "此为 {siteTitle} {versionLabel} 版的文档,现已不再积极维护。",
|
||||
"description": "The label used to tell the user that he's browsing an unmaintained doc version"
|
||||
},
|
||||
"theme.docs.versions.latestVersionSuggestionLabel": {
|
||||
"message": "最新的文档请参阅 {latestVersionLink} ({versionLabel})。",
|
||||
"description": "The label used to tell the user to check the latest version"
|
||||
},
|
||||
"theme.docs.versions.latestVersionLinkLabel": {
|
||||
"message": "最新版本",
|
||||
"description": "The label used for the latest version suggestion link label"
|
||||
},
|
||||
"theme.docs.versionBadge.label": {
|
||||
"message": "版本:{versionLabel}"
|
||||
},
|
||||
"theme.common.headingLinkTitle": {
|
||||
"message": "{heading}的直接链接",
|
||||
"description": "Title for link to heading"
|
||||
},
|
||||
"theme.common.editThisPage": {
|
||||
"message": "编辑此页",
|
||||
"description": "The link label to edit the current page"
|
||||
},
|
||||
"theme.lastUpdated.atDate": {
|
||||
"message": "于 {date} ",
|
||||
"description": "The words used to describe on which date a page has been last updated"
|
||||
},
|
||||
"theme.lastUpdated.byUser": {
|
||||
"message": "由 {user} ",
|
||||
"description": "The words used to describe by who the page has been last updated"
|
||||
},
|
||||
"theme.lastUpdated.lastUpdatedAtBy": {
|
||||
"message": "最后{byUser}{atDate}更新",
|
||||
"description": "The sentence used to display when a page has been last updated, and by who"
|
||||
},
|
||||
"theme.NotFound.title": {
|
||||
"message": "找不到页面",
|
||||
"description": "The title of the 404 page"
|
||||
},
|
||||
"theme.navbar.mobileVersionsDropdown.label": {
|
||||
"message": "选择版本",
|
||||
"description": "The label for the navbar versions dropdown on mobile view"
|
||||
},
|
||||
"theme.admonition.caution": {
|
||||
"message": "警告",
|
||||
"description": "The default label used for the Caution admonition (:::caution)"
|
||||
},
|
||||
"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.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.warning": {
|
||||
"message": "注意",
|
||||
"description": "The default label used for the Warning admonition (:::warning)"
|
||||
},
|
||||
"theme.tags.tagsListLabel": {
|
||||
"message": "标签:",
|
||||
"description": "The label alongside a tag list"
|
||||
},
|
||||
"theme.AnnouncementBar.closeButtonAriaLabel": {
|
||||
"message": "关闭",
|
||||
"description": "The ARIA label for close button of announcement bar"
|
||||
},
|
||||
"theme.blog.sidebar.navAriaLabel": {
|
||||
"message": "最近博文导航",
|
||||
"description": "The ARIA label for recent posts in the blog sidebar"
|
||||
},
|
||||
"theme.CodeBlock.copied": {
|
||||
"message": "复制成功",
|
||||
"description": "The copied button label on code blocks"
|
||||
},
|
||||
"theme.CodeBlock.copyButtonAriaLabel": {
|
||||
"message": "复制代码到剪贴板",
|
||||
"description": "The ARIA label for copy code blocks button"
|
||||
},
|
||||
"theme.CodeBlock.copy": {
|
||||
"message": "复制",
|
||||
"description": "The copy button label on code blocks"
|
||||
},
|
||||
"theme.CodeBlock.wordWrapToggle": {
|
||||
"message": "切换自动换行",
|
||||
"description": "The title attribute for toggle word wrapping button of code block lines"
|
||||
},
|
||||
"theme.DocSidebarItem.expandCategoryAriaLabel": {
|
||||
"message": "展开侧边栏分类 '{label}'",
|
||||
"description": "The ARIA label to expand the sidebar category"
|
||||
},
|
||||
"theme.DocSidebarItem.collapseCategoryAriaLabel": {
|
||||
"message": "折叠侧边栏分类 '{label}'",
|
||||
"description": "The ARIA label to collapse the sidebar category"
|
||||
},
|
||||
"theme.NavBar.navAriaLabel": {
|
||||
"message": "主导航",
|
||||
"description": "The ARIA label for the main navigation"
|
||||
},
|
||||
"theme.NotFound.p1": {
|
||||
"message": "我们找不到您要找的页面。",
|
||||
"description": "The first paragraph of the 404 page"
|
||||
},
|
||||
"theme.NotFound.p2": {
|
||||
"message": "请联系原始链接来源网站的所有者,并告知他们链接已损坏。",
|
||||
"description": "The 2nd paragraph of the 404 page"
|
||||
},
|
||||
"theme.TOCCollapsible.toggleButtonLabel": {
|
||||
"message": "本页总览",
|
||||
"description": "The label used by the button on the collapsible TOC component"
|
||||
},
|
||||
"theme.navbar.mobileLanguageDropdown.label": {
|
||||
"message": "选择语言",
|
||||
"description": "The label for the mobile language switcher dropdown"
|
||||
},
|
||||
"theme.blog.post.readingTime.plurals": {
|
||||
"message": "{readingTime} 分钟阅读",
|
||||
"message": "阅读需 {readingTime} 分钟",
|
||||
"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.blog.post.readMore": {
|
||||
"message": "阅读更多",
|
||||
"description": "The label used in blog post item excerpts to link to full blog posts"
|
||||
},
|
||||
"theme.blog.sidebar.navAriaLabel": {
|
||||
"message": "Blog recent posts navigation",
|
||||
"description": "The ARIA label for recent posts in the blog sidebar"
|
||||
"theme.blog.post.readMoreLabel": {
|
||||
"message": "阅读 {title} 的全文",
|
||||
"description": "The ARIA label for the link to full blog posts from excerpts"
|
||||
},
|
||||
"theme.blog.post.plurals": {
|
||||
"message": "{count} 篇文章",
|
||||
"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.docs.breadcrumbs.home": {
|
||||
"message": "主页面",
|
||||
"description": "The ARIA label for the home page in the breadcrumbs"
|
||||
},
|
||||
"theme.blog.tagTitle": {
|
||||
"message": "{nPosts} tagged with \"{tagName}\"",
|
||||
"description": "The title of the page for a blog tag"
|
||||
"theme.docs.sidebar.navAriaLabel": {
|
||||
"message": "文档侧边栏",
|
||||
"description": "The ARIA label for the sidebar navigation"
|
||||
},
|
||||
"theme.tags.tagsPageLink": {
|
||||
"message": "View All Tags",
|
||||
"description": "The label of the link targeting the tag list page"
|
||||
"theme.docs.sidebar.collapseButtonTitle": {
|
||||
"message": "收起侧边栏",
|
||||
"description": "The title attribute for collapse button of doc sidebar"
|
||||
},
|
||||
"theme.blog.post.paginator.navAriaLabel": {
|
||||
"message": "Blog post page navigation",
|
||||
"description": "The ARIA label for the blog posts pagination"
|
||||
"theme.docs.sidebar.collapseButtonAriaLabel": {
|
||||
"message": "收起侧边栏",
|
||||
"description": "The title attribute for collapse button of doc sidebar"
|
||||
},
|
||||
"theme.blog.post.paginator.newerPost": {
|
||||
"message": "Newer Post",
|
||||
"description": "The blog post button label to navigate to the newer/previous post"
|
||||
"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.blog.post.paginator.olderPost": {
|
||||
"message": "Older Post",
|
||||
"description": "The blog post button label to navigate to the older/next post"
|
||||
"theme.docs.sidebar.closeSidebarButtonAriaLabel": {
|
||||
"message": "关闭导航栏",
|
||||
"description": "The ARIA label for close button of mobile sidebar"
|
||||
},
|
||||
"theme.CodeBlock.copyButtonAriaLabel": {
|
||||
"message": "Copy code to clipboard",
|
||||
"description": "The ARIA label for copy code blocks button"
|
||||
},
|
||||
"theme.CodeBlock.copied": {
|
||||
"message": "已复制",
|
||||
"description": "The copied button label on code blocks"
|
||||
},
|
||||
"theme.CodeBlock.copy": {
|
||||
"message": "复制",
|
||||
"description": "The copy button label on code blocks"
|
||||
"theme.docs.sidebar.toggleSidebarButtonAriaLabel": {
|
||||
"message": "切换导航栏",
|
||||
"description": "The ARIA label for hamburger menu button of mobile navigation"
|
||||
},
|
||||
"theme.docs.sidebar.expandButtonTitle": {
|
||||
"message": "展开侧边栏",
|
||||
|
@ -91,176 +258,283 @@
|
|||
"message": "展开侧边栏",
|
||||
"description": "The ARIA label and title attribute for expand button of doc sidebar"
|
||||
},
|
||||
"theme.docs.paginator.navAriaLabel": {
|
||||
"message": "Docs pages navigation",
|
||||
"description": "The ARIA label for the docs pagination"
|
||||
},
|
||||
"theme.docs.paginator.previous": {
|
||||
"message": "上一篇",
|
||||
"description": "The label used to navigate to the previous doc"
|
||||
},
|
||||
"theme.docs.paginator.next": {
|
||||
"message": "下一篇",
|
||||
"description": "The label used to navigate to the next doc"
|
||||
},
|
||||
"theme.docs.sidebar.collapseButtonTitle": {
|
||||
"message": "折叠侧边栏",
|
||||
"description": "The title attribute for collapse button of doc sidebar"
|
||||
},
|
||||
"theme.docs.sidebar.collapseButtonAriaLabel": {
|
||||
"message": "折叠侧边栏",
|
||||
"description": "The title attribute for collapse button of doc sidebar"
|
||||
},
|
||||
"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.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": "最新版本",
|
||||
"description": "The label used for the latest version suggestion link label"
|
||||
},
|
||||
"theme.common.editThisPage": {
|
||||
"message": "修改本文",
|
||||
"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.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.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.TOCCollapsible.toggleButtonLabel": {
|
||||
"message": "On this page",
|
||||
"description": "The label used by the button on the collapsible TOC component"
|
||||
},
|
||||
"theme.tags.tagsListLabel": {
|
||||
"message": "Tags:",
|
||||
"description": "The label alongside a tag list"
|
||||
"theme.SearchBar.seeAll": {
|
||||
"message": "查看全部 {count} 个结果"
|
||||
},
|
||||
"theme.SearchPage.documentsFound.plurals": {
|
||||
"message": "发现 {count} 篇文档",
|
||||
"message": "找到 {count} 份文件",
|
||||
"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}\"",
|
||||
"message": "「{query}」的搜索结果",
|
||||
"description": "The search page title for non-empty query"
|
||||
},
|
||||
"theme.SearchPage.emptyResultsTitle": {
|
||||
"message": "Search the documentation",
|
||||
"message": "在文档中搜索",
|
||||
"description": "The search page title for empty query"
|
||||
},
|
||||
"theme.SearchPage.inputPlaceholder": {
|
||||
"message": "Type your search here",
|
||||
"message": "在此输入搜索字词",
|
||||
"description": "The placeholder for search page input"
|
||||
},
|
||||
"theme.SearchPage.inputLabel": {
|
||||
"message": "Search",
|
||||
"message": "搜索",
|
||||
"description": "The ARIA label for search page input"
|
||||
},
|
||||
"theme.SearchPage.algoliaLabel": {
|
||||
"message": "Search by Algolia",
|
||||
"message": "通过 Algolia 搜索",
|
||||
"description": "The ARIA label for Algolia mention"
|
||||
},
|
||||
"theme.SearchPage.noResultsText": {
|
||||
"message": "No results were found",
|
||||
"message": "未找到任何结果",
|
||||
"description": "The paragraph for empty search result"
|
||||
},
|
||||
"theme.SearchPage.fetchingNewResults": {
|
||||
"message": "Fetching new results...",
|
||||
"message": "正在获取新的搜索结果...",
|
||||
"description": "The paragraph for fetching new search results"
|
||||
},
|
||||
"theme.SearchBar.label": {
|
||||
"message": "搜索",
|
||||
"description": "The ARIA label and placeholder for search button"
|
||||
},
|
||||
"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.blog.post.plurals": {
|
||||
"message": "{count} 篇博文",
|
||||
"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} 含有标签「{tagName}」",
|
||||
"description": "The title of the page for a blog tag"
|
||||
},
|
||||
"theme.blog.author.pageTitle": {
|
||||
"message": "{authorName} - {nPosts}",
|
||||
"description": "The title of the page for a blog author"
|
||||
},
|
||||
"theme.blog.authorsList.pageTitle": {
|
||||
"message": "Authors",
|
||||
"description": "The title of the authors page"
|
||||
},
|
||||
"theme.blog.authorsList.viewAll": {
|
||||
"message": "View All Authors",
|
||||
"description": "The label of the link targeting the blog authors page"
|
||||
},
|
||||
"theme.blog.author.noPosts": {
|
||||
"message": "This author has not written any posts yet.",
|
||||
"description": "The text for authors with 0 blog post"
|
||||
},
|
||||
"theme.contentVisibility.unlistedBanner.title": {
|
||||
"message": "未列出页",
|
||||
"description": "The unlisted content banner title"
|
||||
},
|
||||
"theme.contentVisibility.unlistedBanner.message": {
|
||||
"message": "此页面未列出。搜索引擎不会对其索引,只有拥有直接链接的用户才能访问。",
|
||||
"description": "The unlisted content banner message"
|
||||
},
|
||||
"theme.contentVisibility.draftBanner.title": {
|
||||
"message": "Draft page",
|
||||
"description": "The draft content banner title"
|
||||
},
|
||||
"theme.contentVisibility.draftBanner.message": {
|
||||
"message": "This page is a draft. It will only be visible in dev and be excluded from the production build.",
|
||||
"description": "The draft content banner message"
|
||||
},
|
||||
"theme.ErrorPageContent.tryAgain": {
|
||||
"message": "重试",
|
||||
"description": "The label of the button to try again rendering when the React error boundary captures an error"
|
||||
},
|
||||
"theme.common.skipToMainContent": {
|
||||
"message": "跳到主要内容",
|
||||
"description": "The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation"
|
||||
},
|
||||
"theme.tags.tagsPageTitle": {
|
||||
"message": "标签",
|
||||
"description": "The title of the tag list page"
|
||||
},
|
||||
"home.desc": {
|
||||
"message": "Chaos Mesh 为 Kubernetes 带来了各种类型的故障模拟,并拥有强大的故障场景编排能力。它可以帮助你方便地模拟在开发、测试和生产环境中可能发生的各种异常情况,并发现系统中潜在的问题。"
|
||||
},
|
||||
"home.getstarted": {
|
||||
"message": "开始使用 →"
|
||||
},
|
||||
"home.tryitout": {
|
||||
"message": "使用以下命令尝试一下 👇"
|
||||
},
|
||||
"home.whoisusing": {
|
||||
"message": "Chaos Mesh 的用户"
|
||||
},
|
||||
"home.k8s": {
|
||||
"home.features.desc": {
|
||||
"message": "基于混沌工程的原则,Chaos Mesh 将真实世界的事件抽象成可以直接应用的对象,隐藏了琐碎的细节。"
|
||||
},
|
||||
"home.features.k8s": {
|
||||
"message": "为 Kubernetes 设计"
|
||||
},
|
||||
"home.k8s.1": {
|
||||
"home.features.k8s.desc": {
|
||||
"message": "在 Kubernetes 领域,{crd} 是实现自定义资源的成熟解决方案。 Chaos Mesh 借助 CRD 实现了与 Kubernetes 生态系统的自然融合。"
|
||||
},
|
||||
"home.easytouse": {
|
||||
"home.features.easytouse": {
|
||||
"message": "易于使用"
|
||||
},
|
||||
"home.easytouse.1": {
|
||||
"home.features.easytouse.desc": {
|
||||
"message": "无需特殊依赖,Chaos Mesh可以轻松地直接部署在Kubernetes集群上,包括 {minikube} 和 {kind}。"
|
||||
},
|
||||
"home.easytouse.2": {
|
||||
"home.features.easytouse.list.1": {
|
||||
"message": "无需修改应用的部署逻辑,拥有在生产环境中进行混沌实验的能力。"
|
||||
},
|
||||
"home.easytouse.3": {
|
||||
"home.features.easytouse.list.2": {
|
||||
"message": "通过仪表盘快速创建混沌实验,允许用户实时观察实验的状态并快速回滚任何注入的故障。"
|
||||
},
|
||||
"home.flexiblescope": {
|
||||
"home.features.flexiblescope": {
|
||||
"message": "灵活的范围"
|
||||
},
|
||||
"home.flexiblescope.1": {
|
||||
"home.features.flexiblescope.desc.1": {
|
||||
"message": "Chaos Mesh 提供了多种过滤规则,允许根据标签、注释等选择注入目标。它们统称为选择器。"
|
||||
},
|
||||
"home.flexiblescope.2": {
|
||||
"home.features.flexiblescope.desc.2": {
|
||||
"message": "此外,用户还可以设置命名空间白名单,以更大程度地控制实验的“爆炸半径”。"
|
||||
},
|
||||
"home.securityfirst": {
|
||||
"home.features.securityfirst": {
|
||||
"message": "安全至上"
|
||||
},
|
||||
"home.securityfirst.1": {
|
||||
"home.features.securityfirst.desc": {
|
||||
"message": "默认启用基于角色的访问控制(RBAC)以限制恶意操作。用户必须被授予特定权限才能访问仪表板。"
|
||||
},
|
||||
"home.failuretypes": {
|
||||
"message": "多种多样的故障类型"
|
||||
},
|
||||
"home.failuretypes.1": {
|
||||
"home.failuretypes.desc": {
|
||||
"message": "Chaos Mesh 起初从分布式系统的角度出发,充分考虑了其可能出现的故障,从而提供更全面、更细粒度的故障类型来帮助用户对网络、磁盘、文件系统、操作系统等进行故障注入。"
|
||||
},
|
||||
"home.buildcommunity": {
|
||||
"message": "共建整个社区"
|
||||
"home.exploremore": {
|
||||
"message": "探索更多"
|
||||
},
|
||||
"home.buildcommunity.1": {
|
||||
"message": "加入社区和维护者及其他用户一起交流,你的建议可以让 Chaos Mesh 变得更好。"
|
||||
"home.workflows.desc": {
|
||||
"message": "现实世界中的故障通常不是孤立的原因造成的。Chaos Mesh 内置了工作流,允许你根据需要串行或并行地进行实验,以构建符合架构的演练。"
|
||||
},
|
||||
"home.workflows.suspend": {
|
||||
"message": "挂起"
|
||||
},
|
||||
"home.workflows.suspend.desc": {
|
||||
"message": "您还可以使用挂起节点来模拟临时恢复。"
|
||||
},
|
||||
"home.workflows.statuscheck": {
|
||||
"message": "状态检查"
|
||||
},
|
||||
"home.workflows.statuscheck.desc": {
|
||||
"message": "您还可以使用自定义的状态检查来告知集群状态。"
|
||||
},
|
||||
"home.startcreating": {
|
||||
"message": "开始创建 →"
|
||||
},
|
||||
"home.experimental": {
|
||||
"message": "实验性功能"
|
||||
},
|
||||
"home.chaosd.desc": {
|
||||
"message": "即使你没有使用 Kubernetes,你仍然可以利用 Chaos Mesh 的功能。我们其中一个实验性工具 Chaosd 专门用于在物理机上进行混沌测试。此外,你可以在 Chaos Mesh 中使用 {link} 来远程调用 Chaosd,从而在物理机上进行实验。"
|
||||
},
|
||||
"home.learnmore": {
|
||||
"message": "了解更多 →"
|
||||
},
|
||||
"home.buildcommunity.desc": {
|
||||
"message": "加入社区和维护者及其他用户一起交流。你的建议可以让 Chaos Mesh 变得更好。"
|
||||
},
|
||||
"home.buildcommunity.beacontributor": {
|
||||
"message": "成为 Chaos Mesh 未来建设的贡献者。"
|
||||
},
|
||||
"home.buildcommunity.help": {
|
||||
"message": "遇到任何问题?请随时联系我们寻求帮助。"
|
||||
},
|
||||
"home.buildcommunity.slack": {
|
||||
"message": "通过我们的 Slack 频道 (#project-chaos-mesh) 与其他用户联系。"
|
||||
},
|
||||
"home.buildcommunity.slack.join": {
|
||||
"message": "加入 Slack 频道"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
},
|
||||
"sidebar.docs.category.Orchestrate Multiple Chaos Experiments": {
|
||||
"message": "编排多个混沌实验",
|
||||
"description": "The label for category Orchestrate Multiple Chaos Experiments in sidebar docs"
|
||||
"description": "The label for category Orchestrate Multiple Chaos Experiments in sidebar docs"
|
||||
},
|
||||
"sidebar.docs.category.Types of Chaos Experiments": {
|
||||
"message": "混沌实验类型",
|
||||
|
@ -32,7 +32,7 @@
|
|||
"description": "The label for category Kubernetes in sidebar docs"
|
||||
},
|
||||
"sidebar.docs.category.Physical Nodes": {
|
||||
"message": "物理机",
|
||||
"message": "物理节点",
|
||||
"description": "The label for category Physical Nodes in sidebar docs"
|
||||
},
|
||||
"sidebar.docs.category.Authentication": {
|
||||
|
@ -40,7 +40,7 @@
|
|||
"description": "The label for category Authentication in sidebar docs"
|
||||
},
|
||||
"sidebar.docs.category.Tools Integration": {
|
||||
"message": "工具整合",
|
||||
"message": "工具集成",
|
||||
"description": "The label for category Tools Integration in sidebar docs"
|
||||
},
|
||||
"sidebar.docs.category.Development Guides": {
|
||||
|
@ -50,5 +50,17 @@
|
|||
"sidebar.docs.category.FAQs and Troubleshooting": {
|
||||
"message": "常见问题与故障",
|
||||
"description": "The label for category FAQs and Troubleshooting in sidebar docs"
|
||||
},
|
||||
"sidebar.docs.category.Release": {
|
||||
"message": "发布",
|
||||
"description": "The label for category Release in sidebar docs"
|
||||
},
|
||||
"sidebar.docs.category.Release Tracking": {
|
||||
"message": "发布跟踪",
|
||||
"description": "The label for category Release Tracking in sidebar docs"
|
||||
},
|
||||
"sidebar.docs.link.Supported Releases": {
|
||||
"message": "支持的版本",
|
||||
"description": "The label for link Supported Releases in sidebar docs, linking to /supported-releases"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
},
|
||||
"sidebar.docs.category.Orchestrate Multiple Chaos Experiments": {
|
||||
"message": "编排多个混沌实验",
|
||||
"description": "The label for category Orchestrate Multiple Chaos Experiments in sidebar docs"
|
||||
"description": "The label for category Orchestrate Multiple Chaos Experiments in sidebar docs"
|
||||
},
|
||||
"sidebar.docs.category.Types of Chaos Experiments": {
|
||||
"message": "混沌实验类型",
|
||||
|
@ -32,7 +32,7 @@
|
|||
"description": "The label for category Kubernetes in sidebar docs"
|
||||
},
|
||||
"sidebar.docs.category.Physical Nodes": {
|
||||
"message": "物理机",
|
||||
"message": "物理节点",
|
||||
"description": "The label for category Physical Nodes in sidebar docs"
|
||||
},
|
||||
"sidebar.docs.category.Authentication": {
|
||||
|
@ -40,7 +40,7 @@
|
|||
"description": "The label for category Authentication in sidebar docs"
|
||||
},
|
||||
"sidebar.docs.category.Tools Integration": {
|
||||
"message": "工具整合",
|
||||
"message": "工具集成",
|
||||
"description": "The label for category Tools Integration in sidebar docs"
|
||||
},
|
||||
"sidebar.docs.category.Development Guides": {
|
||||
|
@ -50,5 +50,17 @@
|
|||
"sidebar.docs.category.FAQs and Troubleshooting": {
|
||||
"message": "常见问题与故障",
|
||||
"description": "The label for category FAQs and Troubleshooting in sidebar docs"
|
||||
},
|
||||
"sidebar.docs.category.Release": {
|
||||
"message": "发布",
|
||||
"description": "The label for category Release in sidebar docs"
|
||||
},
|
||||
"sidebar.docs.category.Release Tracking": {
|
||||
"message": "发布跟踪",
|
||||
"description": "The label for category Release Tracking in sidebar docs"
|
||||
},
|
||||
"sidebar.docs.link.Supported Releases": {
|
||||
"message": "支持的版本",
|
||||
"description": "The label for link Supported Releases in sidebar docs, linking to /supported-releases"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
},
|
||||
"sidebar.docs.category.Orchestrate Multiple Chaos Experiments": {
|
||||
"message": "编排多个混沌实验",
|
||||
"description": "The label for category Orchestrate Multiple Chaos Experiments in sidebar docs"
|
||||
"description": "The label for category Orchestrate Multiple Chaos Experiments in sidebar docs"
|
||||
},
|
||||
"sidebar.docs.category.Types of Chaos Experiments": {
|
||||
"message": "混沌实验类型",
|
||||
|
@ -32,7 +32,7 @@
|
|||
"description": "The label for category Kubernetes in sidebar docs"
|
||||
},
|
||||
"sidebar.docs.category.Physical Nodes": {
|
||||
"message": "物理机",
|
||||
"message": "物理节点",
|
||||
"description": "The label for category Physical Nodes in sidebar docs"
|
||||
},
|
||||
"sidebar.docs.category.Authentication": {
|
||||
|
@ -40,7 +40,7 @@
|
|||
"description": "The label for category Authentication in sidebar docs"
|
||||
},
|
||||
"sidebar.docs.category.Tools Integration": {
|
||||
"message": "工具整合",
|
||||
"message": "工具集成",
|
||||
"description": "The label for category Tools Integration in sidebar docs"
|
||||
},
|
||||
"sidebar.docs.category.Development Guides": {
|
||||
|
@ -50,5 +50,17 @@
|
|||
"sidebar.docs.category.FAQs and Troubleshooting": {
|
||||
"message": "常见问题与故障",
|
||||
"description": "The label for category FAQs and Troubleshooting in sidebar docs"
|
||||
},
|
||||
"sidebar.docs.category.Release": {
|
||||
"message": "发布",
|
||||
"description": "The label for category Release in sidebar docs"
|
||||
},
|
||||
"sidebar.docs.category.Release Tracking": {
|
||||
"message": "发布跟踪",
|
||||
"description": "The label for category Release Tracking in sidebar docs"
|
||||
},
|
||||
"sidebar.docs.link.Supported Releases": {
|
||||
"message": "支持的版本",
|
||||
"description": "The label for link Supported Releases in sidebar docs, linking to /supported-releases"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"version.label": {
|
||||
"message": "2.7.0",
|
||||
"description": "The label for version current"
|
||||
"description": "The label for version 2.7.0"
|
||||
},
|
||||
"sidebar.docs.category.About Chaos Mesh": {
|
||||
"message": "关于 Chaos Mesh",
|
||||
|
@ -21,7 +21,7 @@
|
|||
},
|
||||
"sidebar.docs.category.Orchestrate Multiple Chaos Experiments": {
|
||||
"message": "编排多个混沌实验",
|
||||
"description": "The label for category Orchestrate Multiple Chaos Experiments in sidebar docs"
|
||||
"description": "The label for category Orchestrate Multiple Chaos Experiments in sidebar docs"
|
||||
},
|
||||
"sidebar.docs.category.Types of Chaos Experiments": {
|
||||
"message": "混沌实验类型",
|
||||
|
@ -32,7 +32,7 @@
|
|||
"description": "The label for category Kubernetes in sidebar docs"
|
||||
},
|
||||
"sidebar.docs.category.Physical Nodes": {
|
||||
"message": "物理机",
|
||||
"message": "物理节点",
|
||||
"description": "The label for category Physical Nodes in sidebar docs"
|
||||
},
|
||||
"sidebar.docs.category.Authentication": {
|
||||
|
@ -40,7 +40,7 @@
|
|||
"description": "The label for category Authentication in sidebar docs"
|
||||
},
|
||||
"sidebar.docs.category.Tools Integration": {
|
||||
"message": "工具整合",
|
||||
"message": "工具集成",
|
||||
"description": "The label for category Tools Integration in sidebar docs"
|
||||
},
|
||||
"sidebar.docs.category.Development Guides": {
|
||||
|
@ -50,5 +50,17 @@
|
|||
"sidebar.docs.category.FAQs and Troubleshooting": {
|
||||
"message": "常见问题与故障",
|
||||
"description": "The label for category FAQs and Troubleshooting in sidebar docs"
|
||||
},
|
||||
"sidebar.docs.category.Release": {
|
||||
"message": "发布",
|
||||
"description": "The label for category Release in sidebar docs"
|
||||
},
|
||||
"sidebar.docs.category.Release Tracking": {
|
||||
"message": "发布跟踪",
|
||||
"description": "The label for category Release Tracking in sidebar docs"
|
||||
},
|
||||
"sidebar.docs.link.Supported Releases": {
|
||||
"message": "支持的版本",
|
||||
"description": "The label for link Supported Releases in sidebar docs, linking to /supported-releases"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,9 +3,17 @@
|
|||
"message": "文档",
|
||||
"description": "The title of the footer links column with title=Documentation in the footer"
|
||||
},
|
||||
"link.title.Community": {
|
||||
"message": "社区",
|
||||
"description": "The title of the footer links column with title=Community in the footer"
|
||||
},
|
||||
"link.title.Acknowledgements": {
|
||||
"message": "致谢",
|
||||
"description": "The title of the footer links column with title=Acknowledgements in the footer"
|
||||
},
|
||||
"link.item.label.Quick Start": {
|
||||
"message": "快速试用(测试推荐)",
|
||||
"description": "The label of footer link with label=Quick Start linking to docs/quick_start"
|
||||
"message": "快速试用",
|
||||
"description": "The label of footer link with label=Quick Start linking to docs/quick-start"
|
||||
},
|
||||
"link.item.label.Run a Chaos Experiment": {
|
||||
"message": "运行实验",
|
||||
|
@ -16,15 +24,35 @@
|
|||
"description": "The label of footer link with label=Developer Guide Overview linking to docs/developer-guide-overview"
|
||||
},
|
||||
"link.item.label.FAQs": {
|
||||
"message": "FAQs",
|
||||
"message": "常见问题",
|
||||
"description": "The label of footer link with label=FAQs linking to docs/faqs"
|
||||
},
|
||||
"link.title.Community": {
|
||||
"message": "社区",
|
||||
"description": "The title of the footer links column with title=Community in the footer"
|
||||
},
|
||||
"link.item.label.Blog": {
|
||||
"message": "博客",
|
||||
"description": "The label of footer link with label=Blog linking to blog"
|
||||
},
|
||||
"link.item.label.CNCF Community Group": {
|
||||
"message": "CNCF 社团",
|
||||
"description": "The label of footer link with label=CNCF Community Group linking to https://community.cncf.io/chaos-mesh-community/"
|
||||
},
|
||||
"link.item.label.GitHub": {
|
||||
"message": "GitHub",
|
||||
"description": "The label of footer link with label=GitHub linking to https://github.com/chaos-mesh/chaos-mesh"
|
||||
},
|
||||
"link.item.label.Slack (#project-chaos-mesh)": {
|
||||
"message": "Slack (#project-chaos-mesh)",
|
||||
"description": "The label of footer link with label=Slack (#project-chaos-mesh) linking to https://slack.cncf.io/"
|
||||
},
|
||||
"link.item.label.Twitter": {
|
||||
"message": "Twitter",
|
||||
"description": "The label of footer link with label=Twitter linking to https://twitter.com/chaos_mesh"
|
||||
},
|
||||
"link.item.label.Thanks for the technology illustrations by Storyset": {
|
||||
"message": "Thanks for the technology illustrations by Storyset",
|
||||
"description": "The label of footer link with label=Thanks for the technology illustrations by Storyset linking to https://storyset.com/technology"
|
||||
},
|
||||
"copyright": {
|
||||
"message": "\n <p style=\"font-weight: 500;\">Copyright © Chaos Mesh Authors 2024 | Documentation Distributed under CC-BY-4.0</p>\n © 2024 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our <a href=\"https://www.linuxfoundation.org/trademark-usage/\"> Trademark Usage</a> page.\n ",
|
||||
"description": "The footer copyright"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,16 +3,20 @@
|
|||
"message": "Chaos Mesh",
|
||||
"description": "The title in the navbar"
|
||||
},
|
||||
"logo.alt": {
|
||||
"message": "Chaos Mesh",
|
||||
"description": "The alt text of navbar logo"
|
||||
},
|
||||
"item.label.Documentation": {
|
||||
"message": "文档",
|
||||
"description": "Navbar item with label Documentation"
|
||||
},
|
||||
"item.label.Community Group": {
|
||||
"message": "社团",
|
||||
"description": "Navbar item with label Community Group"
|
||||
},
|
||||
"item.label.Blog": {
|
||||
"message": "博客",
|
||||
"description": "Navbar item with label Blog"
|
||||
},
|
||||
"item.label.Community Group": {
|
||||
"message": "社团",
|
||||
"description": "Navbar item with label Community Group"
|
||||
}
|
||||
}
|
||||
|
|
15
package.json
15
package.json
|
@ -15,8 +15,8 @@
|
|||
"prepare": "husky"
|
||||
},
|
||||
"dependencies": {
|
||||
"@docusaurus/core": "3.5.2",
|
||||
"@docusaurus/preset-classic": "3.5.2",
|
||||
"@docusaurus/core": "3.6.3",
|
||||
"@docusaurus/preset-classic": "3.6.3",
|
||||
"@gracefullight/docusaurus-plugin-microsoft-clarity": "^1.0.0",
|
||||
"@mdx-js/react": "^3.0.0",
|
||||
"clsx": "^2.1.0",
|
||||
|
@ -40,8 +40,8 @@
|
|||
]
|
||||
},
|
||||
"devDependencies": {
|
||||
"@docusaurus/module-type-aliases": "3.5.2",
|
||||
"@docusaurus/types": "3.5.2",
|
||||
"@docusaurus/module-type-aliases": "3.6.3",
|
||||
"@docusaurus/types": "3.6.3",
|
||||
"@trivago/prettier-plugin-sort-imports": "^4.3.0",
|
||||
"autoprefixer": "^10.4.17",
|
||||
"daisyui": "^4.12.14",
|
||||
|
@ -57,10 +57,5 @@
|
|||
"lint-staged": {
|
||||
"*.(js|md)": "prettier --write"
|
||||
},
|
||||
"packageManager": "pnpm@9.2.0",
|
||||
"pnpm": {
|
||||
"patchedDependencies": {
|
||||
"fast-url-parser@1.1.3": "patches/fast-url-parser@1.1.3.patch"
|
||||
}
|
||||
}
|
||||
"packageManager": "pnpm@9.2.0"
|
||||
}
|
||||
|
|
|
@ -1,13 +0,0 @@
|
|||
diff --git a/src/urlparser.js b/src/urlparser.js
|
||||
index a78d7f50043a835ce7242fd81cc02ff622a04581..263c5944eea13ab6784a0608890536c5f2303678 100644
|
||||
--- a/src/urlparser.js
|
||||
+++ b/src/urlparser.js
|
||||
@@ -398,7 +398,7 @@ Url.prototype.resolveObject = function Url$resolveObject(relative) {
|
||||
return result;
|
||||
};
|
||||
|
||||
-var punycode = require("punycode");
|
||||
+var punycode = require("punycode/");
|
||||
Url.prototype._hostIdna = function Url$_hostIdna(hostname) {
|
||||
// IDNA Support: Returns a punycoded representation of "domain".
|
||||
// It only converts parts of the domain name that
|
5134
pnpm-lock.yaml
5134
pnpm-lock.yaml
File diff suppressed because it is too large
Load Diff
|
@ -42,11 +42,11 @@ export default function Features() {
|
|||
<>
|
||||
<Feature
|
||||
imgUrl="img/logos/kubernetes.svg"
|
||||
title={<Translate id="home.k8s">Design for Kubernetes</Translate>}
|
||||
title={<Translate id="home.features.k8s">Design for Kubernetes</Translate>}
|
||||
description={
|
||||
<p>
|
||||
<Translate
|
||||
id="home.k8s.1"
|
||||
id="home.features.k8s.desc"
|
||||
values={{
|
||||
crd: (
|
||||
<Link
|
||||
|
@ -68,12 +68,12 @@ export default function Features() {
|
|||
/>
|
||||
<Feature
|
||||
imgUrl="img/features/easy-to-use.svg"
|
||||
title={<Translate id="home.easytouse">Easy to Use</Translate>}
|
||||
title={<Translate id="home.features.easytouse">Easy to Use</Translate>}
|
||||
description={
|
||||
<>
|
||||
<p>
|
||||
<Translate
|
||||
id="home.easytouse.1"
|
||||
id="home.features.easytouse.desc"
|
||||
values={{
|
||||
minikube: (
|
||||
<Link className="tw-underline dark:tw-no-underline" to="https://minikube.sigs.k8s.io/">
|
||||
|
@ -94,13 +94,13 @@ export default function Features() {
|
|||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
<Translate id="home.easytouse.2">
|
||||
<Translate id="home.features.easytouse.list.1">
|
||||
Ability to perform chaos experiments in production environments without modifying the deployment logic
|
||||
of applications.
|
||||
</Translate>
|
||||
</li>
|
||||
<li>
|
||||
<Translate id="home.easytouse.3">
|
||||
<Translate id="home.features.easytouse.list.2">
|
||||
Quickly create chaos experiments through the dashboard, allowing users to observe the experiment's
|
||||
state in real time and quickly roll back any injected failures.
|
||||
</Translate>
|
||||
|
@ -112,17 +112,17 @@ export default function Features() {
|
|||
/>
|
||||
<Feature
|
||||
imgUrl="img/features/flexible-scope.svg"
|
||||
title={<Translate id="home.flexiblescope">Flexible Scope</Translate>}
|
||||
title={<Translate id="home.features.flexiblescope">Flexible Scope</Translate>}
|
||||
description={
|
||||
<>
|
||||
<p>
|
||||
<Translate id="home.flexiblescope.1">
|
||||
<Translate id="home.features.flexiblescope.desc.1">
|
||||
Chaos Mesh provides multiple filtering rules that allow selecting injection targets based on labels,
|
||||
annotations, and so on. They are collectively called selectors.
|
||||
</Translate>
|
||||
</p>
|
||||
<p>
|
||||
<Translate id="home.flexiblescope.2">
|
||||
<Translate id="home.features.flexiblescope.desc.2">
|
||||
In addition, users can also set a namespace whitelist to greater control the "blast radius" of the
|
||||
experiment.
|
||||
</Translate>
|
||||
|
@ -133,10 +133,10 @@ export default function Features() {
|
|||
/>
|
||||
<Feature
|
||||
imgUrl="img/features/security-first.svg"
|
||||
title={<Translate id="home.securityfirst">Security First</Translate>}
|
||||
title={<Translate id="home.features.securityfirst">Security First</Translate>}
|
||||
description={
|
||||
<p>
|
||||
<Translate id="home.securityfirst.1">
|
||||
<Translate id="home.features.securityfirst.desc">
|
||||
Role-based access control (RBAC) is enabled by default to restrict malicious operations. Users must be
|
||||
authorized with specific privileges to access the dashboard.
|
||||
</Translate>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import BrowserOnly from '@docusaurus/BrowserOnly'
|
||||
import Head from '@docusaurus/Head'
|
||||
import Link from '@docusaurus/Link'
|
||||
import Translate from '@docusaurus/Translate'
|
||||
import Translate, { translate } from '@docusaurus/Translate'
|
||||
import useBaseUrl from '@docusaurus/useBaseUrl'
|
||||
import useDocusaurusContext from '@docusaurus/useDocusaurusContext'
|
||||
import Layout from '@theme/Layout'
|
||||
|
@ -29,7 +29,7 @@ const description =
|
|||
'Chaos Mesh brings various types of fault simulation to Kubernetes and has an enormous capability to orchestrate fault scenarios. It helps you conveniently simulate various abnormalities that might occur in reality during the development, testing, and production environments and find potential problems in the system.'
|
||||
|
||||
function Home() {
|
||||
const { siteConfig } = useDocusaurusContext()
|
||||
const { siteConfig, i18n } = useDocusaurusContext()
|
||||
|
||||
useEffect(() => {
|
||||
document.querySelector('.navbar__inner').classList.add('tw-container', 'tw-mx-auto')
|
||||
|
@ -59,13 +59,13 @@ function Home() {
|
|||
}, [])
|
||||
|
||||
return (
|
||||
<Layout description={description}>
|
||||
<Layout description={translate({ message: description, id: 'home.desc' })}>
|
||||
<Head>
|
||||
<title>Chaos Mesh: {siteConfig.tagline}</title>
|
||||
</Head>
|
||||
<main>
|
||||
<div className="hero tw-relative tw-h-[768px] tw-pt-0 tw-overflow-hidden">
|
||||
<BrowserOnly>{() => <Mesh />}</BrowserOnly>
|
||||
{/* <BrowserOnly>{() => <Mesh />}</BrowserOnly> */}
|
||||
<div className="tw-container tw-mx-auto tw-z-10">
|
||||
<div className="tw-flex tw-flex-col lg:tw-flex-row lg:tw-justify-between lg:tw-items-center">
|
||||
<div className="tw-flex-[.8] 2xl:tw-flex-[.6] tw-p-6 lg:tw-p-3">
|
||||
|
@ -75,22 +75,33 @@ function Home() {
|
|||
styles.heroTitle
|
||||
)}
|
||||
>
|
||||
<span>Break</span>
|
||||
<br />
|
||||
Your System
|
||||
<br />
|
||||
<span>Constructively.</span>
|
||||
{/* Due to the below texts are not simple strings, so we can't use <Translate /> here. */}
|
||||
{i18n.currentLocale === 'en' && (
|
||||
<>
|
||||
<span>Break</span>
|
||||
<br />
|
||||
<span>Your System</span>
|
||||
<br />
|
||||
<span>Constructively</span>
|
||||
</>
|
||||
)}
|
||||
{i18n.currentLocale === 'zh' && (
|
||||
<>
|
||||
<span>破而后立</span>
|
||||
<br />
|
||||
<span className="tw-text-3xl">建设性地解构与优化你的系统</span>
|
||||
</>
|
||||
)}
|
||||
</h1>
|
||||
<p className="lg:tw-text-lg tw-font-medium tw-rounded-2xl tw-backdrop-blur-sm lg:tw-backdrop-blur">
|
||||
{/* TODO: add translation. */}
|
||||
<Translate id="home.description">{description}</Translate>
|
||||
<Translate id="home.desc">{description}</Translate>
|
||||
</p>
|
||||
<div className="tw-flex tw-gap-3">
|
||||
<Link
|
||||
to="/docs/production-installation-using-helm"
|
||||
className="tw-btn !tw-btn-primary hover:-tw-translate-y-[3px]"
|
||||
>
|
||||
Get Started →
|
||||
<Translate id="home.getstarted">Get Started →</Translate>
|
||||
</Link>
|
||||
<Link
|
||||
to="https://github.com/chaos-mesh/chaos-mesh"
|
||||
|
@ -104,7 +115,7 @@ function Home() {
|
|||
|
||||
<div className="lg:max-xl:tw-w-[500px] tw-p-6 lg:tw-p-3">
|
||||
<h2 className="tw-inline-block tw-text-base lg:tw-text-lg tw-font-semibold tw-rounded-2xl tw-backdrop-blur-sm lg:tw-backdrop-blur">
|
||||
Try it out with the following command 👇
|
||||
<Translate id="home.tryitout">Try it out with the following command 👇</Translate>
|
||||
</h2>
|
||||
<PickVersion className="!tw-mb-0">
|
||||
curl -sSL https://mirrors.chaos-mesh.org/latest/install.sh | bash
|
||||
|
@ -141,14 +152,25 @@ function Home() {
|
|||
<div className="hero">
|
||||
<div className="tw-container tw-mx-auto max-lg:tw-px-4">
|
||||
<div className="tw-max-w-[800px] tw-mb-12 tw-mx-auto tw-text-center">
|
||||
{/* TODO: add translation. */}
|
||||
<h2 className="tw-text-4xl xl:tw-text-5xl">
|
||||
Make <span className={styles.heroTitle}>Cloud Native + Chaos Engineering</span> simple and
|
||||
straightforward.
|
||||
{/* Due to the below texts are not simple strings, so we can't use <Translate /> here. */}
|
||||
{i18n.currentLocale === 'en' && (
|
||||
<span>
|
||||
Make <span className={styles.heroTitle}>Cloud Native + Chaos Engineering</span> simple and
|
||||
straightforward
|
||||
</span>
|
||||
)}
|
||||
{i18n.currentLocale === 'zh' && (
|
||||
<span>
|
||||
让<span className={styles.heroTitle}>云原生 + 混沌工程</span>变得简单直接
|
||||
</span>
|
||||
)}
|
||||
</h2>
|
||||
<p className="lg:tw-text-lg tw-font-medium">
|
||||
Based on the principles of Chaos Engineering, Chaos Mesh abstracts real-world events into objects that
|
||||
can be directly applied, hiding the trivial details.
|
||||
<Translate id="home.features.desc">
|
||||
Based on the principles of Chaos Engineering, Chaos Mesh abstracts real-world events into objects that
|
||||
can be directly applied, hiding the trivial details.
|
||||
</Translate>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
@ -161,12 +183,21 @@ function Home() {
|
|||
<div className="hero">
|
||||
<div className="tw-container tw-mx-auto max-lg:tw-px-4">
|
||||
<div className="tw-max-w-[800px] tw-mx-auto tw-text-center">
|
||||
{/* TODO: add translation. */}
|
||||
<h2 className="tw-text-4xl xl:tw-text-5xl">
|
||||
<span className={styles.heroTitle}>Wide variety</span> of failure types.
|
||||
{/* Due to the below texts are not simple strings, so we can't use <Translate /> here. */}
|
||||
{i18n.currentLocale === 'en' && (
|
||||
<span>
|
||||
<span className={styles.heroTitle}>Wide variety</span> of failure types
|
||||
</span>
|
||||
)}
|
||||
{i18n.currentLocale === 'zh' && (
|
||||
<span>
|
||||
<span className={styles.heroTitle}>多样化</span>的故障类型
|
||||
</span>
|
||||
)}
|
||||
</h2>
|
||||
<p className="lg:tw-text-lg tw-font-medium">
|
||||
<Translate id="home.failuretypes.1">
|
||||
<Translate id="home.failuretypes.desc">
|
||||
Chaos Mesh initially started from a distributed system perspective, fully considering its possible
|
||||
failures, thus providing more comprehensive and fine-grained fault types to help users with fault
|
||||
injection for networks, disks, file systems, operating systems, etc.
|
||||
|
@ -188,7 +219,7 @@ function Home() {
|
|||
className="tw-btn !tw-btn-primary tw-gap-2 hover:-tw-translate-y-[3px]"
|
||||
>
|
||||
<IconLibrary className="tw-w-4 tw-h-4 tw-fill-primary-content" />
|
||||
Explore More
|
||||
<Translate id="home.exploremore">Explore More</Translate>
|
||||
</Link>
|
||||
</div>
|
||||
<div className="tw-grid tw-gap-8 lg:tw-grid-cols-3 tw-my-12">
|
||||
|
@ -207,27 +238,51 @@ function Home() {
|
|||
<div className="xl:tw-w-[90%]">
|
||||
{/* TODO: add translation. */}
|
||||
<h2 className="tw-text-4xl xl:tw-text-5xl">
|
||||
Orchestrate complex fault scenarios with <span className={styles.heroTitle}>Workflows</span>.
|
||||
{/* Due to the below texts are not simple strings, so we can't use <Translate /> here. */}
|
||||
{i18n.currentLocale === 'en' && (
|
||||
<span>
|
||||
Orchestrate complex fault scenarios with <span className={styles.heroTitle}>Workflows</span>
|
||||
</span>
|
||||
)}
|
||||
{i18n.currentLocale === 'zh' && (
|
||||
<span>
|
||||
使用<span className={styles.heroTitle}>工作流</span>编排复杂的故障场景
|
||||
</span>
|
||||
)}
|
||||
</h2>
|
||||
<p className="lg:tw-text-lg tw-font-medium">
|
||||
Real-world failures are often not isolated causes.Chaos Mesh has built-in workflows that allow you
|
||||
to experiment serially or in parallel at will to build walkthroughs that fit the architecture.
|
||||
<Translate id="home.workflows.desc">
|
||||
Real-world failures are often not isolated causes.Chaos Mesh has built-in workflows that allow you
|
||||
to experiment serially or in parallel at will to build walkthroughs that fit the architecture.
|
||||
</Translate>
|
||||
</p>
|
||||
<div className="tw-flex tw-gap-4 tw-mb-6">
|
||||
<Card>
|
||||
<h4 className="text-lg">Suspend</h4>
|
||||
<p>You can also use the suspend node to simulate a temporary recovery.</p>
|
||||
<h4 className="text-lg">
|
||||
<Translate id="home.workflows.suspend">Suspend</Translate>
|
||||
</h4>
|
||||
<p>
|
||||
<Translate id="home.workflows.suspend.desc">
|
||||
You can also use the suspend node to simulate a temporary recovery.
|
||||
</Translate>
|
||||
</p>
|
||||
</Card>
|
||||
<Card>
|
||||
<h4 className="text-lg">Status Check</h4>
|
||||
<p>You can also use customized status checks to inform the cluster status.</p>
|
||||
<h4 className="text-lg">
|
||||
<Translate id="home.workflows.statuscheck">Status Check</Translate>
|
||||
</h4>
|
||||
<p>
|
||||
<Translate id="home.workflows.statuscheck.desc">
|
||||
You can also use customized status checks to inform the cluster status.
|
||||
</Translate>
|
||||
</p>
|
||||
</Card>
|
||||
</div>
|
||||
<Link
|
||||
to="/docs/create-chaos-mesh-workflow/"
|
||||
className="tw-btn !tw-btn-primary tw-gap-2 hover:-tw-translate-y-[3px]"
|
||||
>
|
||||
Start Creating →
|
||||
<Translate id="home.startcreating">Start Creating →</Translate>
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -246,25 +301,43 @@ function Home() {
|
|||
</div>
|
||||
</div>
|
||||
<div className="tw-flex-[1.5] tw-z-10">
|
||||
<span className="tw-badge tw-badge-primary">Experimental</span>
|
||||
{/* TODO: add translation. */}
|
||||
<span className="tw-badge tw-badge-primary">
|
||||
<Translate id="home.experimental">Experimental</Translate>
|
||||
</span>
|
||||
<h2 className="tw-text-4xl xl:tw-text-5xl">
|
||||
Meet <span className={styles.heroTitle}>Chaosd</span>: A Chaos Toolkit for Physical Machines.
|
||||
{/* Due to the below texts are not simple strings, so we can't use <Translate /> here. */}
|
||||
{i18n.currentLocale === 'en' && (
|
||||
<span>
|
||||
Meet <span className={styles.heroTitle}>Chaosd</span>: A Chaos Toolkit for Physical Machines
|
||||
</span>
|
||||
)}
|
||||
{i18n.currentLocale === 'zh' && (
|
||||
<span>
|
||||
认识<span className={styles.heroTitle}>Chaosd</span>:物理机混沌工具箱
|
||||
</span>
|
||||
)}
|
||||
</h2>
|
||||
<p className="lg:tw-text-lg tw-font-medium">
|
||||
Even if you are not using Kubernetes, you can still take advantage of the features offered by Chaos
|
||||
Mesh. One of our experimental tools, Chaosd, is specifically designed to test chaos on physical
|
||||
machines. Moreover, you can use{' '}
|
||||
<Link className="tw-underline dark:tw-no-underline" to="/docs/simulate-physical-machine-chaos">
|
||||
PhysicalMachineChaos
|
||||
</Link>{' '}
|
||||
in Chaos Mesh to remotely invoke Chaosd for conducting experiments on physical machines.
|
||||
<Translate
|
||||
id="home.chaosd.desc"
|
||||
values={{
|
||||
link: (
|
||||
<Link className="tw-underline dark:tw-no-underline" to="/docs/simulate-physical-machine-chaos">
|
||||
PhysicalMachineChaos
|
||||
</Link>
|
||||
),
|
||||
}}
|
||||
>
|
||||
{
|
||||
'Even if you are not using Kubernetes, you can still take advantage of the features of Chaos Mesh. One of our experimental tools, Chaosd, specifically tests chaos on physical machines. Moreover, you can use {link} in Chaos Mesh to remotely invoke Chaosd for conducting experiments on physical machines.'
|
||||
}
|
||||
</Translate>
|
||||
</p>
|
||||
<Link
|
||||
to="/docs/chaosd-overview/"
|
||||
className="tw-btn !tw-btn-primary tw-gap-2 hover:-tw-translate-y-[3px]"
|
||||
>
|
||||
Overview →
|
||||
<Translate id="home.learnmore">Learn More →</Translate>
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -274,54 +347,76 @@ function Home() {
|
|||
<div className="hero">
|
||||
<div className="tw-container tw-mx-auto max-lg:tw-px-4">
|
||||
<div className="tw-max-w-[800px] tw-mb-12 tw-mx-auto tw-text-center">
|
||||
{/* TODO: add translation. */}
|
||||
<h2 className="tw-text-4xl xl:tw-text-5xl">
|
||||
Building the Whole Community <span className={styles.heroTitle}>Together</span>.
|
||||
{/* Due to the below texts are not simple strings, so we can't use <Translate /> here. */}
|
||||
{i18n.currentLocale === 'en' && (
|
||||
<span>
|
||||
Building the Whole Community <span className={styles.heroTitle}>Together</span>
|
||||
</span>
|
||||
)}
|
||||
{i18n.currentLocale === 'zh' && (
|
||||
<span>
|
||||
<span className={styles.heroTitle}>共建</span>社区,共同前行
|
||||
</span>
|
||||
)}
|
||||
</h2>
|
||||
<p className="lg:tw-text-lg tw-font-medium">
|
||||
<Translate id="home.buildcommunity.1">
|
||||
Join the community and talk to the maintainers and other users, your suggestions can make Chaos Mesh
|
||||
even better.
|
||||
<Translate id="home.buildcommunity.desc">
|
||||
Join the community and interact with maintainers and other users. Your suggestions can make Chaos Mesh
|
||||
better.
|
||||
</Translate>
|
||||
</p>
|
||||
</div>
|
||||
<div className="tw-grid lg:tw-grid-cols-3 tw-gap-8 tw-mb-12 lg:tw-w-[80%] lg:tw-mx-auto">
|
||||
<Card>
|
||||
<IconGithub className="tw-w-12 tw-h-12 dark:tw-fill-white" />
|
||||
<p>Join our contributors in building the future of Chaos Mesh.</p>
|
||||
<p>
|
||||
<Translate id="home.buildcommunity.beacontributor">
|
||||
Be a contributor to building the future of Chaos Mesh.
|
||||
</Translate>
|
||||
</p>
|
||||
<Link
|
||||
to="https://github.com/chaos-mesh/chaos-mesh"
|
||||
className="tw-btn tw-bg-[#f2f2f2] tw-text-[#1f2937] dark:tw-text-[#a6adba] hover:!tw-bg-[#e6e6e6] tw-normal-case dark:tw-glass dark:hover:!tw-bg-transparent dark:hover:tw-text-white"
|
||||
>
|
||||
Star on GitHub
|
||||
<IconOctocat className="tw-w-4 tw-h-4 dark:tw-fill-white" />
|
||||
GitHub
|
||||
</Link>
|
||||
</Card>
|
||||
<Card>
|
||||
<IconHelp className="tw-w-12 tw-h-12 dark:tw-fill-white" />
|
||||
<p>Experiencing any issues? Don't hesitate to reach out to us for assistance.</p>
|
||||
<p>
|
||||
<Translate id="home.buildcommunity.help">
|
||||
Experiencing any issues? Don't hesitate to reach out to us for assistance.
|
||||
</Translate>
|
||||
</p>
|
||||
<div className="tw-flex tw-gap-3">
|
||||
<Link
|
||||
to="https://github.com/chaos-mesh/chaos-mesh/issues"
|
||||
className="tw-btn tw-bg-[#f2f2f2] tw-text-[#1f2937] dark:tw-text-[#a6adba] hover:!tw-bg-[#e6e6e6] tw-normal-case dark:tw-glass dark:hover:!tw-bg-transparent dark:hover:tw-text-white"
|
||||
>
|
||||
Issues
|
||||
GitHub Issues
|
||||
</Link>
|
||||
<Link
|
||||
to="https://github.com/chaos-mesh/chaos-mesh/discussions"
|
||||
className="tw-btn tw-bg-[#f2f2f2] tw-text-[#1f2937] dark:tw-text-[#a6adba] hover:!tw-bg-[#e6e6e6] tw-normal-case dark:tw-glass dark:hover:!tw-bg-transparent dark:hover:tw-text-white"
|
||||
>
|
||||
Discussions
|
||||
GitHub Discussions
|
||||
</Link>
|
||||
</div>
|
||||
</Card>
|
||||
<Card>
|
||||
<img className="tw-w-12 tw-h-12 tw-scale-150" src="/img/icons/slack.svg" alt="Slack" />
|
||||
<p>Connect with other users on our Slack channel (#project-chaos-mesh).</p>
|
||||
<p>
|
||||
<Translate id="home.buildcommunity.slack">
|
||||
Connect with other users on our Slack channel (#project-chaos-mesh).
|
||||
</Translate>
|
||||
</p>
|
||||
<Link
|
||||
to="https://slack.cncf.io"
|
||||
className="tw-btn tw-bg-[#f2f2f2] tw-text-[#1f2937] dark:tw-text-[#a6adba] hover:!tw-bg-[#e6e6e6] tw-normal-case dark:tw-glass dark:hover:!tw-bg-transparent dark:hover:tw-text-white"
|
||||
>
|
||||
Join Slack channel
|
||||
<Translate id="home.buildcommunity.slack.join">Join Slack channel</Translate>
|
||||
</Link>
|
||||
</Card>
|
||||
</div>
|
||||
|
|
Loading…
Reference in New Issue