diff --git a/art/README.md b/art/README.md
index 66227b4f..c2f74048 100644
--- a/art/README.md
+++ b/art/README.md
@@ -28,5 +28,7 @@
* `logo-readme.svg` 是 `logo.svg` 的 `for-repo-readme` 图层粘贴过来再去掉那个底部矩形的结果。
* `logo-readme.png` 是 `logo-readme.svg` 用 Inkscape 导出后 `pngcrush` 的结果。
* `logo-site.svg` 是将 `logo.svg` 的 `chinese` 图层的内容挪到 32x144 画布另存为的结果。
+* `logo-site-en.svg` 是将 `logo.svg` 的 `english title` 图层的内容挪到 32x252 画布另存为的结果。
* `static/img/logo.svg` 是在 Inkscape 中另存 `logo-site.svg` 为优化的 SVG 的结果。
+* `static/img/logo.svg` 是在 Inkscape 中另存 `logo-site-en.svg` 为优化的 SVG 的结果。
* `static/img/favicon.ico` 是在 Gimp 将 `favicon.xcf` 先合并为单个图层再保存为 Windows ICO 格式的结果。
diff --git a/art/logo-site-en.svg b/art/logo-site-en.svg
new file mode 100644
index 00000000..8c477e5f
--- /dev/null
+++ b/art/logo-site-en.svg
@@ -0,0 +1,295 @@
+
+
+
+
diff --git a/docusaurus.config.js b/docusaurus.config.js
index 326c1ae0..d3fdab72 100644
--- a/docusaurus.config.js
+++ b/docusaurus.config.js
@@ -24,7 +24,7 @@ const config = {
// to replace "en" with "zh-Hans".
i18n: {
defaultLocale: 'zh-Hans',
- locales: ['zh-Hans'],
+ locales: ['zh-Hans', 'en'],
},
plugins: [
@@ -144,6 +144,7 @@ const config = {
label: 'GitHub',
position: 'right',
},
+ {type: 'localeDropdown', position: 'right'},
],
},
footer: {
diff --git a/i18n/en/code.json b/i18n/en/code.json
new file mode 100644
index 00000000..e3f24922
--- /dev/null
+++ b/i18n/en/code.json
@@ -0,0 +1,273 @@
+{
+ "theme.ErrorPageContent.title": {
+ "message": "This page crashed.",
+ "description": "The title of the fallback page 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.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.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",
+ "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.tags.tagsListLabel": {
+ "message": "Tags:",
+ "description": "The label alongside a tag list"
+ },
+ "theme.AnnouncementBar.closeButtonAriaLabel": {
+ "message": "Close",
+ "description": "The ARIA label for close button of announcement bar"
+ },
+ "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.navAriaLabel": {
+ "message": "Main",
+ "description": "The ARIA label for the main navigation"
+ },
+ "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.breadcrumbs.home": {
+ "message": "Home page",
+ "description": "The ARIA label for the home page in the breadcrumbs"
+ },
+ "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.docs.sidebar.navAriaLabel": {
+ "message": "Docs sidebar",
+ "description": "The ARIA label for the sidebar navigation"
+ },
+ "theme.docs.sidebar.closeSidebarButtonAriaLabel": {
+ "message": "Close navigation bar",
+ "description": "The ARIA label for close button of mobile 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.toggleSidebarButtonAriaLabel": {
+ "message": "Toggle navigation bar",
+ "description": "The ARIA label for hamburger menu button of mobile navigation"
+ },
+ "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.ErrorPageContent.tryAgain": {
+ "message": "Try again",
+ "description": "The label of the button to try again rendering when the React error boundary captures an error"
+ },
+ "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.tagsPageTitle": {
+ "message": "Tags",
+ "description": "The title of the tag list page"
+ }
+}
diff --git a/i18n/en/docusaurus-plugin-content-blog-blog-newsletter/options.json b/i18n/en/docusaurus-plugin-content-blog-blog-newsletter/options.json
new file mode 100644
index 00000000..9239ff70
--- /dev/null
+++ b/i18n/en/docusaurus-plugin-content-blog-blog-newsletter/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/i18n/en/docusaurus-plugin-content-blog/options.json b/i18n/en/docusaurus-plugin-content-blog/options.json
new file mode 100644
index 00000000..9239ff70
--- /dev/null
+++ b/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/i18n/en/docusaurus-plugin-content-docs/current.json b/i18n/en/docusaurus-plugin-content-docs/current.json
new file mode 100644
index 00000000..dd30528d
--- /dev/null
+++ b/i18n/en/docusaurus-plugin-content-docs/current.json
@@ -0,0 +1,6 @@
+{
+ "version.label": {
+ "message": "Next",
+ "description": "The label for version current"
+ }
+}
diff --git a/i18n/en/docusaurus-theme-classic/footer.json b/i18n/en/docusaurus-theme-classic/footer.json
new file mode 100644
index 00000000..aaa25f3c
--- /dev/null
+++ b/i18n/en/docusaurus-theme-classic/footer.json
@@ -0,0 +1,54 @@
+{
+ "link.title.站内导航": {
+ "message": "Quick links",
+ "description": "The title of the footer links column with title=站内导航 in the footer"
+ },
+ "link.title.社区资源": {
+ "message": "Community resources",
+ "description": "The title of the footer links column with title=社区资源 in the footer"
+ },
+ "link.title.企业资源": {
+ "message": "Enterprise resources",
+ "description": "The title of the footer links column with title=企业资源 in the footer"
+ },
+ "link.item.label.每周一龙": {
+ "message": "This Week in LoongArch",
+ "description": "The label of footer link with label=每周一龙 linking to /newsletter"
+ },
+ "link.item.label.本站动态": {
+ "message": "Site news",
+ "description": "The label of footer link with label=本站动态 linking to /blog"
+ },
+ "link.item.label.龙芯社区 GitHub": {
+ "message": "Loongson Community GitHub",
+ "description": "The label of footer link with label=龙芯社区 GitHub linking to https://github.com/loongson-community"
+ },
+ "link.item.label.LoongArch 非官方论坛": {
+ "message": "LoongArch unofficial forum",
+ "description": "The label of footer link with label=LoongArch 非官方论坛 linking to https://bbs.loongarch.org"
+ },
+ "link.item.label.Telegram Loongson Group": {
+ "message": "Telegram Loongson Group",
+ "description": "The label of footer link with label=Telegram Loongson Group linking to https://t.me/loongson_users"
+ },
+ "link.item.label.龙芯用户闲聊 Matrix 群": {
+ "message": "Matrix Loongson offtopic room",
+ "description": "The label of footer link with label=龙芯用户闲聊 Matrix 群 linking to https://matrix.to/#/%23loongson-users-ot:matrix.org"
+ },
+ "link.item.label.百度贴吧龙芯吧": {
+ "message": "Baidu Tieba",
+ "description": "The label of footer link with label=百度贴吧龙芯吧 linking to https://tieba.baidu.com/f?kw=%E9%BE%99%E8%8A%AF&ie=utf-8"
+ },
+ "link.item.label.龙芯公司官网": {
+ "message": "Loongson Corp. official site",
+ "description": "The label of footer link with label=龙芯公司官网 linking to https://loongson.cn"
+ },
+ "link.item.label.龙芯公司官方 GitHub": {
+ "message": "Loongson official GitHub",
+ "description": "The label of footer link with label=龙芯公司官方 GitHub linking to https://github.com/loongson"
+ },
+ "copyright": {
+ "message": "© 2022-2023 Project contributors. This project is unaffiliated with Loongson.
龙芯®, 龙芯中科®, 龙芯架构®, 龙架构®, Loongson®, LoongArch® etc. are registered trademarks of Loongson Corporation (688047.SH).",
+ "description": "The footer copyright"
+ }
+}
diff --git a/i18n/en/docusaurus-theme-classic/navbar.json b/i18n/en/docusaurus-theme-classic/navbar.json
new file mode 100644
index 00000000..670eebbe
--- /dev/null
+++ b/i18n/en/docusaurus-theme-classic/navbar.json
@@ -0,0 +1,22 @@
+{
+ "logo.alt": {
+ "message": "My Site Logo",
+ "description": "The alt text of navbar logo"
+ },
+ "item.label.阅读材料": {
+ "message": "Reads",
+ "description": "Navbar item with label 阅读材料"
+ },
+ "item.label.每周一龙": {
+ "message": "TWiL",
+ "description": "Navbar item with label 每周一龙"
+ },
+ "item.label.本站动态": {
+ "message": "Site news",
+ "description": "Navbar item with label 本站动态"
+ },
+ "item.label.GitHub": {
+ "message": "GitHub",
+ "description": "Navbar item with label GitHub"
+ }
+}
diff --git a/src/theme/Logo/.gitignore b/src/theme/Logo/.gitignore
new file mode 100644
index 00000000..275fc2a5
--- /dev/null
+++ b/src/theme/Logo/.gitignore
@@ -0,0 +1 @@
+!/index.js
diff --git a/src/theme/Logo/index.js b/src/theme/Logo/index.js
new file mode 100644
index 00000000..d9ee928b
--- /dev/null
+++ b/src/theme/Logo/index.js
@@ -0,0 +1,60 @@
+import React from 'react';
+import Link from '@docusaurus/Link';
+import useBaseUrl from '@docusaurus/useBaseUrl';
+import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
+import {useThemeConfig} from '@docusaurus/theme-common';
+import ThemedImage from '@theme/ThemedImage';
+function LogoThemedImage({logo, alt, imageClassName}) {
+ const sources = {
+ light: useBaseUrl(logo.src),
+ dark: useBaseUrl(logo.srcDark || logo.src),
+ };
+ const themedImage = (
+