diff --git a/docs/astro.config.mjs b/docs/astro.config.mjs
index a6719d8..9534621 100644
--- a/docs/astro.config.mjs
+++ b/docs/astro.config.mjs
@@ -23,6 +23,10 @@ export const locales = {
ru: {
label: 'Русский',
lang: 'ru'
+ },
+ 'zh-cn': {
+ label: '简体中文',
+ lang: 'zh-CN'
}
};
@@ -51,7 +55,8 @@ export default defineConfig({
es: 'Guías',
fr: 'Guides',
pt: 'Guias',
- ru: 'Руководство'
+ ru: 'Руководство',
+ 'zh-CN': '指南'
}
},
{
@@ -64,7 +69,8 @@ export default defineConfig({
es: 'Leaderboard',
fr: 'Leaderboard',
pt: 'Tabela de Classificação',
- ru: 'Leaderboard'
+ ru: 'Leaderboard',
+ 'zh-CN': '排行榜'
}
},
{
@@ -76,7 +82,8 @@ export default defineConfig({
es: 'Desafíos',
fr: 'Challenges',
pt: 'Desafios',
- ru: 'Задачи'
+ ru: 'Задачи',
+ 'zh-CN': '挑战'
}
}],
head: [{
diff --git a/docs/src/components/CommentSection.astro b/docs/src/components/CommentSection.astro
index b8563ae..778eba0 100644
--- a/docs/src/components/CommentSection.astro
+++ b/docs/src/components/CommentSection.astro
@@ -3,7 +3,8 @@ import type { Props } from '@astrojs/starlight/props';
const {lang, locale} = Astro.props;
-const shortLang = lang.split('-')[0];
+// Chinese needs to `zh-CN`
+// const shortLang =lang.split('-')[0];
---
@@ -19,7 +20,7 @@ const shortLang = lang.split('-')[0];
data-emit-metadata="0"
data-input-position="bottom"
data-theme="preferred_color_scheme"
- data-lang={shortLang}
+ data-lang={lang}
data-loading="lazy"
crossorigin="anonymous"
async>
diff --git a/docs/src/content/docs/zh-cn/challenges/angular/1-projection.md b/docs/src/content/docs/zh-cn/challenges/angular/1-projection.md
new file mode 100644
index 0000000..8d17bae
--- /dev/null
+++ b/docs/src/content/docs/zh-cn/challenges/angular/1-projection.md
@@ -0,0 +1,52 @@
+---
+title: 🟢 投影
+description: 挑战1是学习如何通过组件投影DOM元素
+author: thomas-laforge
+contributors:
+ - tomalaforge
+ - jdegand
+ - dmmishchenko
+ - kabrunko-dev
+ - svenson95
+challengeNumber: 1
+command: angular-projection
+blogLink: https://medium.com/@thomas.laforge/create-a-highly-customizable-component-cc3a9805e4c5
+videoLinks:
+ - link: https://www.youtube.com/watch?v=npyEyUZxoIw&ab_channel=ArthurLannelucq
+ alt: Projection video by Arthur Lannelucq
+ flag: FR
+ - link: https://www.youtube.com/watch?v=yNrfvu7vTa4
+ alt: Projection video by Amos Lucian IsailaAmos Lucian Isaila
+ flag: ES
+sidebar:
+ order: 1
+---
+
+## 信息
+
+在Angular中,内容投影是一种创建高度可定制组件的强大技术。利用和理解ng-content和ngTemplateOutlet的概念可以显著增强你创建可共享组件的能力
+
+你可以在[这里](https://angular.dev/guide/components/content-projection)了解ng-content 的所有内容,从简单的投影到更复杂的投影。
+
+要了解ngTemplateOutlet,你可以在[这里](https://angular.io/api/common/NgTemplateOutlet)找到API文档和一些基本示例。
+
+有了这两个工具,您现在就可以接受挑战了。
+
+## 说明
+
+您将从一个功能齐全的应用程序开始,该应用程序包括一个包含教师卡和学生卡的仪表盘。目标是实现城市卡。
+
+虽然应用程序可以工作,但开发人员的体验还远没有达到最佳。每次需要实现新卡时,都必须修改`card.component.ts` 。在实际项目中,该组件可以在许多应用程序之间共享。该挑战的目标是创建一个 `CardComponent` ,它可以在不做任何修改的情况下进行自定义。一旦你创建了这个组件,你就可以开始实现 `CityCardComponent` ,并确保你没有触碰 `CardComponent` 。
+
+## 约束
+
+- 必须重构 `CardComponent` 和 `ListItemComponent`。
+- `NgFor` 指令必须声明并保持在 `CardComponent` 内。你可能想把它移到 `ParentCardComponent` ,比如 `TeacherCardComponent` 。
+- `CardComponent` 不应包含任何 `NgIf` 或 `NgSwitch` 。
+- CSS:尽量避免使用 `::ng-deep` 。寻找更好的方法来处理CSS样式。
+
+## 挑战奖励
+
+- 尝试使用新的内置控制流语法for循环和条件语句(文档在[这里](https://angular.dev/guide/templates/control-flow))
+- 使用signal API来管理组件状态(文档在[这里](https://angular.dev/guide/signals))
+- 要引用模板,请使用指令而不是魔术字符串([魔术字符串有什么问题?](https://softwareengineering.stackexchange.com/a/365344))
diff --git a/docs/src/content/docs/zh-cn/guides/checkout-answer.md b/docs/src/content/docs/zh-cn/guides/checkout-answer.md
new file mode 100644
index 0000000..5ac31b9
--- /dev/null
+++ b/docs/src/content/docs/zh-cn/guides/checkout-answer.md
@@ -0,0 +1,57 @@
+---
+title: 查看某人的回答
+description: 查看某人的回答指南
+contributors:
+ - tomalaforge
+ - gsgonzalez88
+ - 1fbr
+ - jdegand
+sidebar:
+ order: 3
+---
+
+所有Angular Challenges的答案都将以pull request (PR)的形式呈现。要查看和跟踪它们,请浏览GitHub上的**文件更改**页面。但是,如果您不熟悉界面,理解和遵循此过程可能并不简单。在许多情况下,您可能更喜欢签出分支并在您首选的IDE中检查解决方案。
+
+## 安装 GitHub CLI
+
+在[这里](https://github.com/cli/cli#installation)按照操作系统的说明操作。
+
+## 查看本地其他人的PR
+
+### 同步存储库
+
+首先,您需要同步您的分支,以确保它与分支存储库是最新的。
+
+这可以通过点击你的分支主页上的**Sync fork**按钮来实现。
+
+
+
+上图显示我的分支落后于主分支 8 个提交,我需要将其同步才能保持最新。
+
+
+
+### 本地检出查看
+
+导航到你想在本地查看的PR并获取其ID。你可以在PR的标题中找到它(如下所示)。
+
+
+
+接下来,切换到项目目录中的任意终端,并运行以下命令:
+
+```bash
+gh pr checkout
+```
+
+如果你不记得这个命令,点击标题右侧的Code按钮,你可以轻松地复制/粘贴这个命令。
+
+
+
+:::note[注意]
+如果命令不起作用或失败,GitHub CLI会引导你完成整个过程。
+:::
+
+🔥您现在可以在本地浏览解决方案并提供服务以测试它。🔥
+
+### 使用GitHub Codespaces检出查看
+
+你可以使用GitHub Codespaces查看任何**打开**的PR。点击code按钮后,你可以导航到codespaces标签,然后点击绿色按钮,在PR的分支上创建一个codesace。codespace初始化后,就可以启动应用了。
diff --git a/docs/src/content/docs/zh-cn/guides/contribute.md b/docs/src/content/docs/zh-cn/guides/contribute.md
new file mode 100644
index 0000000..7fea19d
--- /dev/null
+++ b/docs/src/content/docs/zh-cn/guides/contribute.md
@@ -0,0 +1,25 @@
+---
+title: 贡献
+description: 贡献指南
+contributors:
+ - tomalaforge
+ - jdegand
+sidebar:
+ order: 4
+---
+
+你可以通过以下多种方式为这个存储库做出贡献:
+
+🔥 依照以下[指示](/guides/create-challenge)创建一个新的挑战。
+
+🔥 接受挑战并提交结果(指南 [在此](/guides/resolve-challenge))。
+
+🔥 对他人提出的解决方案给予有建设性的、热情的反馈。
+
+🔥 校正文档中的拼写错误。
+
+🔥 协助翻译文档。
+
+🔥 提交问题建议新的挑战想法或报告错误。
+
+🔥 [在此](https://github.com/sponsors/tomalaforge)赞助该项目。
diff --git a/docs/src/content/docs/zh-cn/guides/create-challenge.md b/docs/src/content/docs/zh-cn/guides/create-challenge.md
new file mode 100644
index 0000000..6b13e69
--- /dev/null
+++ b/docs/src/content/docs/zh-cn/guides/create-challenge.md
@@ -0,0 +1,68 @@
+---
+title: 创建你自己的挑战
+description: 创建你自己的挑战指南
+contributors:
+ - tomalaforge
+ - gsgonzalez88
+ - jdegand
+sidebar:
+ order: 5
+---
+
+你有一个想法想要分享,你正在努力解决某个私人项目或业余项目中的一个有趣的bug,或者你发现的一个Angular技巧。所有这些可能性都是创建挑战并与他人分享解决方案的良好起点。
+
+如何开始创造这些挑战?
+
+## 样板设置
+
+为了简化这个过程,我创建了一个Nx生成器,它将为您设置所有样板文件。运行它最简单的方法是使用Nx控制台:转到Nx Console > generate > @angular-challenges/cli - challenge。
+
+或者,你也可以利用IDE的 [Nx Console extension](https://nx.dev/getting-started/editor-setup)来生成文件
+
+### 参数
+
+#### 强制参数
+
+- title: 你想给你的挑战的标题。
+ :::note[注意]
+ 标题长度不能超过25个字符。
+ :::
+
+- author: 你的名字
+
+ :::note[注意]
+ 你的名字应该使用烤肉串格式(如: john-doe)
+ :::
+
+ :::note[注意]
+ 别忘了在以你名字命名的文件中更新你的个人信息
+ :::
+
+- challengeDifficulty:你认为你的挑战有多大的难度。有三个难度级别:🟢简单/🟠中等/🔴困难
+
+- docRepository: 你挑战的类别是Nx、Angular、Angular性能、Rxjs、NgRx、Typescript、表单或信号。
+
+#### 可选参数
+
+- challengeNumber: 当有挑战提交时,可以指定挑战号。(如果为空,该数字将是下一个数字)。
+- directory: 如果您希望您的应用程序位于 `apps` 中的特定文件夹中。
+- addTest: 如果您想添加测试配置。
+
+### 创建了什么?
+
+- 生成器将创建新应用程序运行所需的所有文件。所有这些文件都将创建在 `apps/${directory}/${name}` 中
+- 将在 `docs/src/content/docs/challenges/${docRepository}` 中创建一个带有最小设置的Markdown文件。
+
+## 创造挑战
+
+剩下唯一要做的就是创造挑战。 🚀
+
+:::danger[危险]
+不要忘记更新文档以介绍您的挑战并提供说明。
+:::
+
+轮到你行动了!!💪
+
+## 解决方案提交
+
+大约一周后,提供一个针对您的挑战的解决方案的pull request。
diff --git a/docs/src/content/docs/zh-cn/guides/faq.md b/docs/src/content/docs/zh-cn/guides/faq.md
new file mode 100644
index 0000000..0a79778
--- /dev/null
+++ b/docs/src/content/docs/zh-cn/guides/faq.md
@@ -0,0 +1,22 @@
+---
+title: 常见问题解答
+description: 回答问题
+contributors:
+ - tomalaforge
+ - jdegand
+sidebar:
+ order: 7
+---
+
+
+
+ 为什么我的应用程序没有启动,或者为什么我在运行`nx serve`时在终端中遇到错误?
+
+
+ 大多数情况下,出现这个问题是因为你的node_modules已经过时了,你需要通过运行 `npm ci` 来更新它们。
+
+如果安装失败,可以通过 `rm -rf node_modules` 或 `npx npkill` 删除node_modules文件夹,然后重新运行 `npm ci` 来解决。
+
+如果问题仍然存在,请在[这里](https://github.com/tomalaforge/angular-challenges/issues/new)报告问题。
+
+
diff --git a/docs/src/content/docs/zh-cn/guides/getting-started.md b/docs/src/content/docs/zh-cn/guides/getting-started.md
new file mode 100644
index 0000000..53033ca
--- /dev/null
+++ b/docs/src/content/docs/zh-cn/guides/getting-started.md
@@ -0,0 +1,83 @@
+---
+title: 开始
+description: 关于如何开始Angular挑战的指南。
+contributors:
+ - tomalaforge
+ - 1fbr
+ - ho-ssain
+ - jdegand
+sidebar:
+ order: 1
+---
+
+要开始使用 Angular Challenges,请按照以下步骤操作:
+
+## 创建一个GitHub账户
+
+如果你想提交答案,你需要拥有自己的GitHub账户。此外,拥有GitHub账户总是有益的,而且是免费的。
+
+## Fork GitHub 项目
+
+导航至 [Angular Challenges Repository](https://github.com/tomalaforge/angular-challenges) 在页面顶部点击 Fork 按钮。这将在您的 GitHub 个人资料中创建该存储库的副本。
+
+## 将存储库克隆到您的本地机器上
+
+在您的本地计算机上选择一个目录,然后克隆此存储库。
+
+打开终端,导航到选择的目录,并输入以下命令:
+
+```bash
+git clone https://github.com/[YOUR_GITHUB_NAME]/angular-challenges.git
+```
+
+:::note[注意]
+
+你可以通过点击Angular Challenges存储库中你自己的实例中的<> Code 按钮来找到克隆URL
+
+
+
+:::
+
+## 在您最喜欢的IDE中打开该项目
+
+使用您选择的任意集成开发环境(IDE)打开该项目。
+
+## 安装所有依赖项
+
+```bash
+npm ci
+```
+
+## 选择一个挑战
+
+您的项目现已启动并正在运行。剩下的唯一步骤是选择一个挑战 🚀
+
+每项挑战包括:
+
+- Name: 表示挑战的内容。
+- Number: 创建顺序。 这个数字没有任何特别的含义,但有助于在 GitHub Pull Request 部分进行参考。
+- Badge: 有助于可视化难度程度。这完全是主观的 😅
+ - 🟢 容易
+ - 🟠 中等
+ - 🔴 困难
+
+## (交替) 使用 GitHub Codespaces
+
+在你自己的 Angular Challenges 存储库实例中,单击代码按钮并导航到 codespaces 选项卡。
+
+
+
+单击 `Create codespace on main` 按钮, 您将导航到 GitHub codespace
+
+如果您以前从未使用过 GitHub codespace,我建议您尝试这个简短的交互式 [GitHub Skills Tutorial](https://github.com/skills/code-with-codespaces).
+
+当您导航到codespace时,将出现一个提示,要求安装推荐的 `VS Code` 插件。如果您打算创建一个挑战,您可以使用 `Nx plugin` 来生成开始代码。无论哪种方式,codespace都将安装依赖项,你可以创建一个新分支,解决任何挑战,并创建一个pull request。
+
+当您推送到分支时,您不必提供 GitHub 令牌。
+
+一旦你完成,记得暂停或删除你的codesace。如果不这样做,GitHub将在30分钟后自动暂停空闲的codesace。你每个月确实有大量的免费codespace时间,但重要的是不要浪费你的分配时间
+
+在GitHub codesace中,复制和粘贴将被阻止,直到你获得许可
+
+GitHub codespace使用端口转发为项目提供服务。单击运行 `npx nx serve [project-name]` 后的提示符,导航到 `localhost:4200` 。
diff --git a/docs/src/content/docs/zh-cn/guides/rebase.md b/docs/src/content/docs/zh-cn/guides/rebase.md
new file mode 100644
index 0000000..a88ec24
--- /dev/null
+++ b/docs/src/content/docs/zh-cn/guides/rebase.md
@@ -0,0 +1,57 @@
+---
+title: 变基分支
+description: 将分支变基到最新更改的指南
+contributors:
+ - tomalaforge
+sidebar:
+ order: 6
+---
+
+有时,可能会向项目添加更改。我会尝试做出不会破坏任何东西的更改,但有时这是不可避免的。
+
+大多数情况下,您不需要变基您的解决方案,但这里有一个指南可以帮助您知道如何操作。
+
+:::note[注意]
+本指南适用于任何开源项目。
+:::
+
+## 变基分支的步骤
+
+### 同步存储库
+
+首先,你需要同步你的分支,以确保它与分支的存储库是最新的。
+
+你可以通过点击你的fork主页面上的Sync fork按钮来实现这一点。
+
+
+
+上图显示我的分支比主分支落后 8 个提交,我需要将其同步才能保持最新。
+
+
+
+### 打开终端
+
+打开您选择的任何终端,可以是您最喜欢的 IDE 中的终端,也可以是独立实例。
+
+### Git
+
+请按照以下命令重新设置本地分支的基础:
+
+- git checkout main
+- git pull
+- git checkout [你的分支]
+- git rebase main
+- 解决冲突
+
+在此步骤中,变基可能会停止,因为您的本地分支与主分支有冲突的文件。纠正它们。完成此操作后:
+
+- git add .
+- git rebase --continue
+
+如果您的分支没有任何冲突,则会显示成功消息。
+
+### 将你的工作推送到远程分支
+
+最后,将你的工作推送到GitHub:
+
+- git push -f
diff --git a/docs/src/content/docs/zh-cn/guides/resolve-challenge.md b/docs/src/content/docs/zh-cn/guides/resolve-challenge.md
new file mode 100644
index 0000000..a943fb3
--- /dev/null
+++ b/docs/src/content/docs/zh-cn/guides/resolve-challenge.md
@@ -0,0 +1,107 @@
+---
+title: 解决挑战
+description: 解决挑战指南
+contributors:
+ - tomalaforge
+ - 1fbr
+ - gsgonzalez88
+sidebar:
+ order: 2
+---
+
+在本指南中,您将学习如何解决挑战并向主GitHub存储库提交答案。
+
+## 介绍
+
+此存储库由 [Nx](https://nx.dev/getting-started/intro) 提供支持。Nx是一个 monorepository,允许您将多个应用程序存储在同一个工作区中。每个挑战都是一个单独的应用程序。如果您打开`apps`目录,您将找到多个目录,每个目录都与一个特定的挑战相关。每个目录都代表一个完整的独立的`Nx`应用程序。想要运行并从某个开始,请打开您的终端并运行:
+
+```bash
+npx nx serve
+```
+
+:::note[注意]
+如果您不确定 `APPLICATION_NAME` ,请打开README.md文件。 `serve` 命令写在那里,并有一个到挑战文档的链接。
+:::
+
+:::note[注意]
+
+如果您的设备已全局安装 `nx` ,则可以跳过使用 `npx`
+
+要全局安装 `nx` ,使用
+
+```bash
+npm i -g nx
+```
+
+:::
+
+## 创建 Git 分支
+
+在你开始实现解决挑战的解决方案之前,创建一个git分支来提交你的工作。
+
+```bash
+git checkout -b
+```
+
+## 完成挑战
+
+按照说明来完成挑战。
+
+## 提交和推送您的工作
+
+最后一步是按照常规的[指导方针](https://www.conventionalcommits.org/en/v1.0.0/)提交工作
+
+最后,使用以下命令将工作推送到远程仓库
+
+```bash
+ git push --set-upstream origin
+```
+
+:::tip[不用去记]
+你不必精确地记住这个命令。你只需要记住 `git push` ,如果这是你第一次推送这个分支, `git` 将为你提供完整的命令。
+:::
+
+## 将您的工作提交到主仓库
+
+现在,你所有的工作都位于Angular Challenges仓库的本地实例中。
+
+下一步是转到Angular的主要[挑战页面](https://github.com/tomalaforge/angular-challenges),并创建一个新的Pull Request。
+
+GitHub应该显示一个通知头来帮助你创建拉取请求。
+
+如果不是这样,要么是你错误地执行了前面的某个步骤,要么你可以转到Pull Request选项卡并点击New pull request按钮
+
+一旦你选择了要比较的两个分支,就会看到下面的页面:
+
+
+
+在标题部分,以Answer:开始,然后是你的挑战号。之后,您可以随意添加任何您想要的内容
+
+:::danger[危险]
+这非常重要。它让别人知道你试图解决的是什么挑战。
+:::
+
+在描述部分,您可以添加您遇到的问题、麻烦或任何其他您想要分享的内容。如果你没什么可说的,可以把它空着
+
+现在你可以点击 Create pull request.
+
+## 获取审查
+
+为了继续提供有价值的反馈和评论,请在Github上支持这个项目:
+
+
+- 每次评论5美元
+- 终身评论25美元
+- 创建一个挑战/贡献终身评论
+
+
+:::note[注意]
+
+您仍然可以提交您的PR加入已回答的挑战列表。你仍然可以被社区成员审查🔥
+
+欢迎大家评论和阅读其他PRs。💪
+:::
+
+:::tip[开源拥护者]
+🔥完成本教程后,您就可以为任何其他公共GitHub存储库做出贡献并提交PR。就这么简单。🔥
+:::
diff --git a/docs/src/content/docs/zh-cn/index.mdx b/docs/src/content/docs/zh-cn/index.mdx
new file mode 100644
index 0000000..97abc22
--- /dev/null
+++ b/docs/src/content/docs/zh-cn/index.mdx
@@ -0,0 +1,79 @@
+---
+title: 欢迎来到 Angular 挑战
+description: 从解决这些挑战开始,成为一名更好的Angular前端工程师.
+template: splash
+noCommentSection: true
+hero:
+ tagline: 现在就开始成为Angular专家吧!
+ image:
+ file: ../../../assets/angular-challenge.webp
+ actions:
+ - text: 开始
+ link: /zh-cn/guides/getting-started/
+ icon: right-arrow
+ variant: primary
+ - text: 进入最新的挑战
+ link: /zh-cn/challenges/signal/56-forms-and-signal/
+ icon: rocket
+ - text: 给个星星
+ link: https://github.com/tomalaforge/angular-challenges
+ icon: github
+ variant: secondary
+---
+
+import { Card, CardGrid } from '@astrojs/starlight/components';
+import MyIcon from '../../../components/MyIcon.astro';
+
+import SubscriptionForm from '../../../components/SubscriptionForm.astro';
+
+
+
+ 该存储库包含与Angular, Nx, RxJS, Ngrx和Typescript相关的56个挑战。这些挑战围绕现实生活中的问题或特定功能,旨在提升您的技能。
+
+
+
+
+
+
+
+ 这个存储库的一个目标是降低进入开放源码软件(OSS)的门槛。通过参与这些挑战,您将学习如何开始为其他任何开源项目做出贡献
+
+
+
+ 学习和实践一个新的框架总是具有挑战性的。这些挑战提供了实际使用案例,可以让你将所学的知识应用到实际中。
+ 任何人都可以发表评论或提供帮助。
+
+ 独自学习固然很棒,但与他人一起学习会让你走得更远。
+
+
+
+
+ 你有任何问题、有趣的bug或者想法吗?不要犹豫,{' '}不要浪费任何时间创造属于你自己的挑战。
+
+
+
+ 通过完成这些挑战,您将为前端面试中可能出现的任何技术问题做好准备
+
+
+
+ 这个项目是免费的,并且希望能够长期保持免费。然而,所有工作都是在我的业余时间完成的,包括创建挑战和审核合并请求(PR)。赞助可以支持我,并有助于项目的成长。
+
+
+
+---
+
+
+
+
diff --git a/docs/src/content/docs/zh-cn/leaderboard/answers.mdx b/docs/src/content/docs/zh-cn/leaderboard/answers.mdx
new file mode 100644
index 0000000..812043b
--- /dev/null
+++ b/docs/src/content/docs/zh-cn/leaderboard/answers.mdx
@@ -0,0 +1,12 @@
+---
+title: 挑战的回答
+description: 排行榜显示已回答的挑战数量
+noCommentSection: true
+prev: false
+next: false
+---
+
+import LeaderboardAnswer from '../../../../components/leaderboard/LeaderboardAnswer.svelte';
+
+加入这个列表,通过阅读入门指南[开始](/zh-cn/guides/getting-started)你的Angular挑战之旅。
+
diff --git a/docs/src/content/docs/zh-cn/leaderboard/challenges.mdx b/docs/src/content/docs/zh-cn/leaderboard/challenges.mdx
new file mode 100644
index 0000000..ce97799
--- /dev/null
+++ b/docs/src/content/docs/zh-cn/leaderboard/challenges.mdx
@@ -0,0 +1,13 @@
+---
+title: 创建的挑战数量
+description: 排行榜显示创建的挑战数量
+noCommentSection: true
+prev: false
+next: false
+---
+
+import LeaderboardChallenge from '../../../../components/leaderboard/LeaderboardChallenge.svelte';
+
+缺少挑战,创建自己的挑战并登上排行榜!阅读创建挑战指南来学习如何[创建挑战](/zh-cn/guides/create-challenge)。
+
+
diff --git a/docs/src/content/docs/zh-cn/leaderboard/commit.mdx b/docs/src/content/docs/zh-cn/leaderboard/commit.mdx
new file mode 100644
index 0000000..ea0448c
--- /dev/null
+++ b/docs/src/content/docs/zh-cn/leaderboard/commit.mdx
@@ -0,0 +1,13 @@
+---
+title: 贡献数量
+description: 显示贡献数量的排行榜
+noCommentSection: true
+prev: false
+next: false
+---
+
+import LeaderboardCommit from '../../../../components/leaderboard/LeaderboardCommit.svelte';
+
+您想要改进项目,修复一个错别字,为一个挑战添加一些文档,或者翻译一个页面?这个排行榜显示了每个用户的贡献数量。这个存储库是开源的,您可以为它做出贡献。阅读贡献[贡献](/zh-cn/guides/contribute)指南开始。
+
+
diff --git a/docs/src/content/docs/zh-cn/subscription/index.mdx b/docs/src/content/docs/zh-cn/subscription/index.mdx
new file mode 100644
index 0000000..1dde061
--- /dev/null
+++ b/docs/src/content/docs/zh-cn/subscription/index.mdx
@@ -0,0 +1,10 @@
+---
+title: 订阅
+description: Email订阅
+noCommentSection: true
+---
+import SubscriptionForm from '../../../../components/SubscriptionForm.astro'
+
+如果您想了解新的挑战,可以订阅电子邮件
+
+
diff --git a/docs/src/content/i18n/zh-CN.json b/docs/src/content/i18n/zh-CN.json
new file mode 100644
index 0000000..62cb71e
--- /dev/null
+++ b/docs/src/content/i18n/zh-CN.json
@@ -0,0 +1,27 @@
+{
+ "page.title.challenge": "挑战",
+ "author.createdBy": "创建者",
+ "buttons.email": "Email 订阅",
+ "buttons.star": "给个星星",
+ "buttons.sponsor": "赞助",
+ "buttons.clipboardCopy": "已复制!",
+ "challenge.footer.note": "注意",
+ "challenge.footer.running": "通过执行启动项目:",
+ "challenge.footer.start": "您的 PR 标题开头必须是",
+ "challenge.footer.reminder": "提醒",
+ "challenge.footer.communityAnswers": "社区解决方案",
+ "challenge.footer.authorAnswer": "作者的解决方案",
+ "challenge.footer.blogPost": "文章",
+ "challenge.footer.video": "视频",
+ "challenge.footer.gettingStarted.title": "要完成这个挑战,开始阅读: ",
+ "challenge.footer.gettingStarted.link": "开始",
+ "challenge.footer.upvoteAnswer": "如果你喜欢,可以使用👍给答案投票",
+ "subscription.button": "订阅",
+ "subscription.email": "username@gmail.com",
+ "subscription.note.title": "注意",
+ "subscription.note.description": "此电子邮件将仅用于发送新的挑战更新",
+ "contributor.title": "贡献者",
+ "contributor.subtitle": "感谢所有帮助本文档变得更好的贡献者!",
+ "sponsors.description": "非常感谢支持这个项目的人: ",
+ "sponsors.joinButton": "加入列表"
+}