diff --git a/docs/i18n/chinese/FAQ.md b/docs/i18n/chinese/FAQ.md
new file mode 100644
index 0000000000..74f63ffbae
--- /dev/null
+++ b/docs/i18n/chinese/FAQ.md
@@ -0,0 +1,82 @@
+### I am new to GitHub and Open Source. Where should I start?
+
+Read our ["How to Contribute to Open Source Guide"](https://github.com/freeCodeCamp/how-to-contribute-to-open-source). It's a comprehensive reference for first-timer-friendly projects. And it includes a lot of open source contribution tips.
+
+### Can I translate freeCodeCamp's curriculum?
+
+Yes. We will roll out the tools for translating freeCodeCamp's curriculum soon.
+
+Eventually, we intend to localize freeCodeCamp into several major world languages, starting with: Arabic, Chinese, Hindi, Portuguese, Russian, and Spanish.
+
+### How can I report a new bug?
+
+If you think you've found a bug, first read the ["Help I've Found a Bug"](https://forum.freecodecamp.org/t/how-to-report-a-bug/19543) article and follow its instructions.
+
+If you're confident it's a new bug, go ahead and create a new GitHub issue. Be sure to include as much information as possible so that we can reproduce the bug. We have a pre-defined issue template to help you through this.
+
+Please note that these GitHub issues are for codebase-related issues and discussions – not for getting help with learning to code. Whenever in doubt, you should [seek assistance on the forum](https://forum.freecodecamp.org) before creating a GitHub issue.
+
+### How can I report a security issue?
+
+Please don't create GitHub issues for security issues. Instead, please send an email to `security@freecodecamp.org` and we'll look into it immediately.
+
+### I am a student. Can I work on a feature for academic credits?
+
+Yes. Please note we are unable to commit to any timelines or paperwork that may be a requirement by your college or university. We receive many pull-requests and code contributions by volunteer developers, and we respect their time and efforts. Out of respect for all of our other contributors, we will not give any PR special priority just because it happens to be school-related.
+
+We request you to plan ahead and work on code contributions with this in mind.
+
+### What do these different labels that are tagged on issues mean?
+
+The code maintainers [triage](https://en.wikipedia.org/wiki/Software_bug#Bug_management) issues and pull requests based on their priority, severity, and other factors. You can [find a complete glossary of their meanings here](https://github.com/freecodecamp/freecodecamp/labels).
+
+### Where do I start if I want to work on an issue?
+
+You should go through [**`help wanted`**](https://github.com/freeCodeCamp/freeCodeCamp/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22) or [**`first timers only`**](https://github.com/freeCodeCamp/freeCodeCamp/issues?q=is%3Aopen+is%3Aissue+label%3A%22first+timers+only%22) issues for a quick overview of what is available for you to work on.
+
+> [!TIP] **`help wanted`** issues are up for grabs, and you do not need to seek permission before working on them. However, issues with the **`first timers only`** label are special issues that are designed for people who have not contributed to the freeCodeCamp codebase before.
+
+### I found a typo. Should I report an issue before I can make a pull request?
+
+For typos and other wording changes, you can directly open pull requests without creating an issue first. Please be sure to mention details in the pull request description to help us understand and review your contribution – even if it's just a minor change.
+
+Please do create an issue if you want to discuss bigger aspects of the codebase or curriculum.
+
+### How can I get an issue assigned to me?
+
+We typically do not assign issues to anyone other than long-time contributors. Instead, we follow the below policy to be fair to everyone:
+
+1. We are most likely to merge the first pull request that addresses the issue.
+2. In the case of multiple contributors opening a pull request for the same issue at around the same time, we will give priority to the pull request that best addresses the issue. Some of the things we consider:
+ - Did you include tests?
+ - Did you catch all usecases?
+ - Did you ensure all tests pass, and confirm everything works locally?
+3. Finally, we give priority to pull requests which follow our recommended guidelines.
+ - Did you follow the pull request checklist?
+ - Did you give your pull request a meaningful title?
+
+### I am stuck on something that is not included in this documentation.
+
+**Feel free to ask for help in:**
+
+- The `Contributors` category of [our community forum](https://forum.freecodecamp.org/c/contributors).
+- The `#Contributors` channel on [our chat server](https://chat.freecodecamp.org/channel/contributors).
+
+We are excited to help you contribute to any of the topics that you would like to work on. If you ask us questions on the related issue threads, we will be glad to clarify. Be sure to search for your question before posting a new one.
+
+Thanks in advance for being polite and patient. Remember – this community is run mainly by volunteers.
+
+**Additional Assistance:**
+
+If you have queries about the stack, architecture of the codebase, feel free to reach out to our staff dev team:
+
+| Staff | Send message on Forum |
+|:--------------------- |:---------------------------------------------------------------------------- |
+| Mrugesh Mohapatra | [@raisedadead](https://forum.freecodecamp.org/u/raisedadead) |
+| Ahmad Abdolsaheb | [@abdolsa](https://forum.freecodecamp.org/u/abdolsa) |
+| Kristofer Koishigawa | [@scissorsneedfoodtoo](https://forum.freecodecamp.org/u/scissorsneedfoodtoo) |
+| Tom Mondloc | [@moT01](https://forum.freecodecamp.org/u/moT01) |
+| Oliver Eyton-Williams | [@ojeytonwilliams](https://forum.freecodecamp.org/u/ojeytonwilliams) |
+| Randell Dawson | [@RandellDawson](https://forum.freecodecamp.org/u/randelldawson) |
+
+**You can email our developer staff at: `dev[at]freecodecamp.org`**
diff --git a/docs/i18n/chinese/_sidebar.md b/docs/i18n/chinese/_sidebar.md
new file mode 100644
index 0000000000..2a9ef6102e
--- /dev/null
+++ b/docs/i18n/chinese/_sidebar.md
@@ -0,0 +1,31 @@
+- **Getting Started**
+ - [Introduction](index.md "Contribute to the freeCodeCamp.org Community")
+ - [Frequently Asked Questions](FAQ.md)
+- **Code Contribution**
+ - [Set up freeCodeCamp locally](how-to-setup-freecodecamp-locally.md)
+ - [Open a pull request](how-to-open-a-pull-request.md)
+ - [Work on coding challenges](how-to-work-on-coding-challenges.md)
+ - [Work on video challenges](how-to-help-with-video-challenges.md)
+ - [Work on the news theme](how-to-work-on-the-news-theme.md)
+ - [Work on the docs theme](how-to-work-on-the-docs-theme.md)
+- **Translation Contribution**
+ - [Translating a Curriculum File](how-to-translate-files.md)
+ - [Proofreading a Curriculum File](how-to-proofread-files.md)
+- **Optional Guides**
+ - [Catch outgoing emails locally](how-to-catch-outgoing-emails-locally.md)
+ - [Set up freeCodeCamp on WSL](how-to-setup-wsl.md)
+ - [Add Cypress tests](how-to-add-cypress-tests.md)
+ - [How to Translate the Website](how-to-translate-the-website.md)
+
+---
+
+- **Flight Manuals** (for Staff & Mods)
+ - [Moderator Handbook](moderator-handbook.md)
+ - [DevOps Handbook](devops.md)
+
+---
+
+- **Our Community**
+ - [**GitHub**](https://github.com/freecodecamp/freecodecamp)
+ - [**Discourse Forum**](https://freecodecamp.org/forum/c/contributors)
+ - [**Chat Server**](https://chat.freecodecamp.org/home)
diff --git a/docs/i18n/chinese/devops.md b/docs/i18n/chinese/devops.md
new file mode 100644
index 0000000000..ecb964cce8
--- /dev/null
+++ b/docs/i18n/chinese/devops.md
@@ -0,0 +1,706 @@
+# DevOps Handbook
+
+This guide will help you understand our infrastructure stack and how we maintain our platforms. While this guide does not have exhaustive details for all operations, it could be used as a reference for your understanding of the systems.
+
+Let us know, if you have feedback or queries, and we will be happy to clarify.
+
+# Flight Manual - Code deployments
+
+This repository is continuously built, tested and deployed to **separate sets of infrastructure (Servers, Databases, CDNs, etc.)**.
+
+This involves three steps to be followed in sequence:
+
+1. New changes (both fixes and features) are merged into our primary development branch (`main`) via pull requests.
+2. These changes are run through a series of automated tests.
+3. Once the tests pass we release the changes (or update them if needed) to deployments on our infrastructure.
+
+#### Building the codebase - Mapping Git Branches to Deployments.
+
+Typically, [`main`](https://github.com/freeCodeCamp/freeCodeCamp/tree/main) (the default development branch) is merged into the [`production-staging`](https://github.com/freeCodeCamp/freeCodeCamp/tree/production-staging) branch once a day and is released into an isolated infrastructure.
+
+This is an intermediate release for our developers and volunteer contributors. It is also known as our "staging" or "beta" release.
+
+It is identical to our live production environment at `freeCodeCamp.org`, other than it using a separate set of databases, servers, web-proxies, etc. This isolation lets us test ongoing development and features in a "production" like scenario, without affecting regular users of freeCodeCamp.org's main platforms.
+
+Once the developer team [`@freeCodeCamp/dev-team`](https://github.com/orgs/freeCodeCamp/teams/dev-team/members) is happy with the changes on the staging platform, these changes are moved every few days to the [`production-current`](https://github.com/freeCodeCamp/freeCodeCamp/tree/production-current) branch.
+
+This is the final release that moves changes to our production platforms on freeCodeCamp.org.
+
+#### Testing changes - Integration and User Acceptance Testing.
+
+We employ various levels of integration and acceptance testing to check on the quality of the code. All our tests are done through software like [GitHub Actions CI](https://github.com/freeCodeCamp/freeCodeCamp/actions) and [Azure Pipelines](https://dev.azure.com/freeCodeCamp-org/freeCodeCamp).
+
+We have unit tests for testing our challenge solutions, Server APIs and Client User interfaces. These help us test the integration between different components.
+
+> [!NOTE] We are also in the process of writing end user tests which will help in replicating real world scenarios like updating an email or making a call to the API or third-party services.
+
+Together these tests help in preventing issues from repeating themselves and ensure we do not introduce a bug while working on another bug or a feature.
+
+#### Deploying Changes - Pushing changes to servers.
+
+We have configured continuous delivery software to push changes to our development and production servers.
+
+Once the changes are pushed to the protected release branches, a build pipeline is automatically triggered for the branch. The build pipelines are responsible for building artifacts and keeping them in a cold storage for later use.
+
+The build pipeline goes on to trigger a corresponding release pipeline if it completes a successful run. The release pipelines are responsible for collecting the build artifacts, moving them to the servers and going live.
+
+Status of builds and releases are [available here](#build-test-and-deployment-status).
+
+## Trigger a build, test and deploy
+
+Currently, only members on the developer team can push to the production branches. The changes to the `production-*` branches can land only via fast-forward merge to the [`upstream`](https://github.com/freeCodeCamp/freeCodeCamp).
+
+> [!NOTE] In the upcoming days we would improve this flow to be done via pull-requests, for better access management and transparency.
+
+### Pushing changes to Staging Applications.
+
+1. Configure your remotes correctly.
+
+ ```sh
+ git remote -v
+ ```
+
+ **Results:**
+
+ ```
+ origin git@github.com:raisedadead/freeCodeCamp.git (fetch)
+ origin git@github.com:raisedadead/freeCodeCamp.git (push)
+ upstream git@github.com:freeCodeCamp/freeCodeCamp.git (fetch)
+ upstream git@github.com:freeCodeCamp/freeCodeCamp.git (push)
+ ```
+
+2. Make sure your `maim` branch is pristine and in sync with the upstream.
+
+ ```sh
+ git checkout main
+ git fetch --all --prune
+ git reset --hard upstream/main
+ ```
+
+3. Check that the GitHub CI is passing on the `main` branch for upstream.
+
+ The [continuous integration](https://github.com/freeCodeCamp/freeCodeCamp/actions) tests should be green and PASSING for the `main` branch. Click the green check mark next to the commit hash when viewing the `main` branch code.
+
+ Checking status on GitHub Actions (screenshot)
+
+ 
+
` tag and Crowdin has caught that.
+
+> [!WARNING] You have the option to save a translation in spite of errors, but this should be done only in circumstances where the error might be incorrect.
+
+Crowdin will sometimes convert HTML tags (such as ``) into numerical values, like `<0>text0>` or `<1>text1>`. These tags are usually code tags, and our QA check will verify that these have not been translated. However, sometimes these may be `` or `` tags, which _should_ be translated. If you hover over a numerical tag in the source string, you can see which HTML tag or tags have been replaced:
+
+
+
+If the replaced tags are something that should be translated (such as `strong` tags), translate the content within the tags and select "Save Anyway" when the error appears. Then leave a comment on the string explaining that the tags are `strong` (for example) so other translators and proofreaders are aware that they should be translated.
+
+## Translation Best Practices
+
+Follow these guidelines to ensure our translations are as accurate as possible:
+
+- Do not translate the content within `` tags. These tags indicate text that is found in code and should be left in English.
+- Do not add additional content. If you feel a challenge requires changes in the text content or additional information, you should propose the changes through a GitHub issue or a pull request that modifies the English file.
+- Do not change the order of content.
+
+If you have any questions, feel free to reach out to us in our [translators chat room](https://chat.freecodecamp.org/channel/translators) and we will be happy to assist you.
diff --git a/docs/i18n/chinese/how-to-translate-the-website.md b/docs/i18n/chinese/how-to-translate-the-website.md
new file mode 100644
index 0000000000..eba0014eb9
--- /dev/null
+++ b/docs/i18n/chinese/how-to-translate-the-website.md
@@ -0,0 +1,197 @@
+The client/react side of our website is translated into various world languages using [react-i18next](https://react.i18next.com/) and [i18next](https://www.i18next.com/).
+
+> [!NOTE] This does not include the curriculum
+
+## File Structure
+
+The files for translating the website are located in the `client/i18n` folder. Each language has a folder within that containing JSON files with the translations.
+
+The values in the `translations.json` file contain the majority of the text that appears on the website. The keys are used in the codebase to get the correct text for whatever language is set. This file needs to have the exact same keys in all languages.
+
+The `motivation.json` files are not required to have the same quotes, compliments, or array length. Just the same JSON structure.
+
+## Adding a Language
+
+To add a new language, create a folder with the language name as the title next to the other languages and copy the JSON files from another language into your new folder.
+
+In the `allLangs.js` file, add the language to the `client` array in the first variable. Then, follow the instructions in the comments to add the rest of the necessary variables.
+
+## How to Translate
+
+After a new language is added, you just need to translate the JSON files into the language.
+
+Here are some tips:
+- Only translate the values in the JSON files, the keys need to stay the same
+- The English versions of the JSON files are the "source of truth" for what needs to be translated. If you are unsure what text to translate, find the matching key in the English version of the file and translate that text
+- Be sure to escape double quotes (`\"`) in the strings if you need to use them
+- Most of the time, when you see text wrapped in number tags (`<0>`text`0>`) tags, it's a link. It is okay to change the text that it is wrapped around. Just keep the same tags.
+- A value that has something like `{{value}}` in it is a variable. Don't change any of those characters. You can move that whole group of characters around though.
+
+There's some [help on how make changes and open a PR here](/how-to-setup-freecodecamp-locally).
+
+## Running it Locally
+
+Set the `CLIENT_LOCALE` variable in your `.env` file to the locale you want to build.
+
+> [!NOTE] The value needs to be one of the client languages available in `client/i18n/allLangs.js`
+
+## How to Structure Components
+
+### Functional Component
+
+```js
+import { useTranslation } from 'react-i18next';
+
+// in the render method:
+const { t } = useTranslation();
+
+// call the "t" function with a key from the JSON file:
+{t('key')}
// more details below
+```
+
+### Class Component
+```js
+import { withTranslation } from 'react-i18next';
+
+// withTranslation adds the "t" function to props:
+const { t } = this.props;
+
+// call the "t" function with a key from the JSON file:
+{t('key')}
// more details below
+
+// export without redux:
+export default withTranslation()(Component);
+
+// or with redux:
+export default connect(...)(withTranslation()(Component));
+```
+
+## Translate Using the "t" Function
+
+### Basic Translation
+
+```js
+// in the component:
+{t('p1')}
+
+// in the JSON file:
+{
+ "p1": "My paragraph"
+}
+
+// output:
+My paragraph
+```
+
+### With Dynamic Data
+
+```js
+// in the component:
+const username = 'moT';
+
+{t('welcome', { username: username })}
+
+// in the JSON file:
+{
+ "welcome": "Welcome {{username}}"
+}
+
+// output:
+Welcome moT
+```
+
+The above example passes an object to the `t` function with a `username` variable. The variable will be used in the JSON value where `{{username}}` is.
+
+## Translate with the \ Component
+
+The general rule is to use the "t" function when you can. But there's a `Trans` component for when that isn't enough, usually when you have elements embedded in the text. You can use the `Trans` component with any type of react component.
+
+### Basic Elements Nested
+
+```js
+// in the component:
+import { Trans } from 'react-i18next'
+
+
+ fcc.greeting
+
+
+// in the JSON file:
+{
+ "fcc": {
+ "greeting": "Welcome to freeCodeCamp"
+ }
+}
+
+// output:
+Welcome to freeCodeCamp
+```
+
+You can place the key inside the component tags like the above example if the text contains "simple" tags with no attributes. `br`, `strong`, `i`, and `p` are the default, but that list can be expanded in the i18n config.
+
+### Complex Elements Nested
+
+Other times, you will want to have certain text inside another element, an anchor tag is a good example:
+
+```js
+// in the component:
+
+
+ placeholder
+
+
+
+// in the JSON file:
+{
+ "check-forum": "Check out <0>our forum0>."
+}
+
+// output:
+Check out our forum
+```
+
+In the above example, the key is set in the attributes of the `Trans` component. The `<0>` and `0>` in the JSON represent the first child of the component, in this case, the anchor element. If there were more children, they would just count up from there using the same syntax. You can find the children of a component in the react dev tools by inspecting it. `placeholder` is simply there because the linter was complaining at me about an empty `` element.
+
+### With a Variable
+
+```js
+// in the component:
+const email = 'team@freecodecamp.org';
+
+
+
+
+ {{ email }}
+
+
+
+
+// in the JSON file:
+{
+ "fcc": {
+ "email": "Send us an email at: <0>{{email}}0>"
+ }
+}
+
+// output:
+Send us an email at: team@freecodecamp.org
+```
+
+In the above example, the key and a variable are set in the attributes of the `Trans` component. `{{ email }}` needs to be somewhere in the `Trans` component as well, it doesn't matter where.
+
+## Helpful Documentation
+
+- [react-i18next docs](https://react.i18next.com/latest/usetranslation-hook)
+- [i18next docs](https://www.i18next.com/translation-function/essentials)
+
+## Changing Text
+
+To change text on the client side of things, go to the `translations.json` file, find the key that is being used in the react component, and change the value to the new text you want. You should search the codebase for that key to make sure it isn't being used elsewhere. Or, if it is, that the changes make sense in all places.
+
+## Adding Text
+
+If the text you want to add to the client exists in the `translations.json` file, use the existing key. No sense in creating another one.
+
+The `translations-schema.js` file is the "source of truth" for all of the `translations.json` files. If you need to add a new key, add it there. Then, add the key to **all** of the `translations.json` files with placeholder text in the langauges you don't know. The tests will fail if you don't. It would be nice to keep the keys in the same order across all the files as well. Also, try to put all punctuation, spacing, quotes, etc in the JSON files and not in the components or server files.
+
+> [!NOTE] The underscore (`_`) is a reserved character for keys in the client side files. See [the documentation](https://www.i18next.com/translation-function/plurals) for how they are used.
diff --git a/docs/i18n/chinese/how-to-use-docker-on-windows-home.md b/docs/i18n/chinese/how-to-use-docker-on-windows-home.md
new file mode 100644
index 0000000000..d336c2b94d
--- /dev/null
+++ b/docs/i18n/chinese/how-to-use-docker-on-windows-home.md
@@ -0,0 +1,15 @@
+# How to use Docker on Windows Home
+
+There are a few pitfalls to be avoided when setting up Docker on Windows Home. First of all, you have to use [Docker Toolbox](https://docs.docker.com/toolbox/toolbox_install_windows/) as Administrator. Unfortunately Windows Home does not support Docker for Windows Desktop, so Toolbox must be used instead. It has to be run as Administrator as the installation uses symlinks, which cannot be created otherwise.
+
+Once you've installed the toolbox, run Docker Quickstart Terminal as Administrator. This will create a `default` virtual machine if it does not already exist. Once that has happened, close the terminal and open VirtualBox (again as Administrator). You should be able to see the `default` machine. The site is quite resource-intensive, so stop the virtual machine and raise the settings as much as you can - memory in particular. It has been confirmed to work with 4GB of ram.
+
+Once you're happy that Docker is working, clone the freeCodeCamp repository to a directory inside `C:\Users`. These directories are shared giving Docker access to the local directories, which it needs during installation.
+
+If you see messages like
+
+```shell
+bash: change_volumes_owner.sh: No such file or directory
+```
+
+when you `npm run docker:init` this is likely the culprit.
\ No newline at end of file
diff --git a/docs/i18n/chinese/how-to-work-on-coding-challenges.md b/docs/i18n/chinese/how-to-work-on-coding-challenges.md
new file mode 100644
index 0000000000..54a1445253
--- /dev/null
+++ b/docs/i18n/chinese/how-to-work-on-coding-challenges.md
@@ -0,0 +1,490 @@
+# How to work on coding challenges
+
+Our goal is to develop a fun and clear interactive learning experience.
+
+Designing interactive coding challenges is difficult. It would be much easier to write a lengthy explanation or to create a video tutorial. But for our core curriculum, we're sticking with what works best for most people - a fully interactive, video game-like experience.
+
+We want campers to achieve a flow state. We want them to build momentum and blast through our curriculum with as few snags as possible. We want them to go into the projects with confidence and gain a wide exposure to programming concepts.
+
+Note that for Version 7.0 of the freeCodeCamp curriculum, we are moving toward [an entirely project-focused model with a lot more repetition](https://www.freecodecamp.org/news/python-curriculum-is-live/).
+
+Creating these challenges requires immense creativity and attention to detail. There's plenty of help available. You'll have support from a whole team of contributors to whom you can bounce ideas off and demo your challenges.
+
+And as always, feel free to ask questions on the ['Contributors' category on our forum](https://forum.freecodecamp.org/c/contributors) or [the contributors chat room](https://chat.freecodecamp.org/channel/contributors).
+
+With your help, we can design an interactive coding curriculum that will help millions of people learn to code for years to come.
+
+The content for each challenge is stored in its markdown file. This markdown file is later converted to HTML using our tools to create interactive web pages.
+
+You can find all of freeCodeCamp.org's curricular content in the [`/curriculum/challenges`](https://github.com/freeCodeCamp/freeCodeCamp/tree/main/curriculum/challenges) directory.
+
+## Set up the tooling for the curriculum
+
+Before you work on the curriculum, you would need to set up some tooling to help you test your changes. You can use any option from the below:
+
+- You can [set up freeCodeCamp locally](how-to-setup-freecodecamp-locally.md). This is **highly recommended** for regular/repeat contributions. This setup allows you to work and test your changes.
+- Use Gitpod, a free online dev environment. Clicking the button below will start a ready-to-code dev environment for freeCodeCamp in your browser. It only takes a few minutes.
+
+ [](https://gitpod.io/#https://github.com/freeCodeCamp/freeCodeCamp)
+
+- Edit the files on GitHub's interface by clicking the pencil icon for the corresponding file. While this is the quickest way, It is **not recommended**, because you are unable to test your changes on GitHub. If our maintainers conclude that the changes you made need to be tested locally, you would need to follow the methods above instead.
+
+## Challenge Template
+
+````md
+
+---
+id: Unique identifier (alphanumerical, MongoDB_id)
+title: 'Challenge Title'
+challengeType: Integer, defined in `client/utils/challengeTypes.js`
+videoUrl: 'url of video explanation'
+forumTopicId: 12345
+---
+
+# --description--
+
+Challenge description text, in markdown
+
+```html
+
+ example code
+
+````
+
+# --instructions--
+
+Challenge instruction text, in markdown
+
+# --hints--
+
+Tests to run against user code, in pairs of markdown text and code block test code.
+
+```js
+Code for test one
+```
+
+More instructions in markdown syntax
+
+```js
+More code
+```
+
+# --seed--
+
+## --before-user-code--
+
+```lang
+Code evaluated before the user’s code.
+```
+
+## --after-user-code--
+
+```lang
+Code evaluated after the user’s code, and just before the tests
+```
+
+## --seed-contents--
+
+Boilerplate code to render to the editor. This section should only contain code inside backticks, like the following:
+
+```html
+
+
+ Hello world!
+
+
+```
+
+```css
+body {
+ margin: 0;
+ background-color: #3a3240;
+}
+
+.main-text {
+ color: #aea8d3;
+}
+```
+
+```js
+console.log('freeCodeCamp is awesome!');
+```
+
+# --solutions--
+
+Solutions are used for the CI tests to ensure that changes to the hints will still pass as intended
+
+```js
+// first solution - the language(s) should match the seed.
+```
+
+---
+
+```js
+// second solution - so if the seed is written in HTML...
+```
+
+---
+
+```js
+// third solution etc. - Your solutions should be in HTML.
+```
+
+# --question--
+
+These fields are currently used for the multiple-choice Python challenges.
+
+## --text--
+
+The question text goes here.
+
+## --answers--
+
+Answer 1
+
+---
+
+Answer 2
+
+---
+
+More answers
+
+## --video-solution--
+
+The number for the correct answer goes here.
+
+
+````
+
+> [!NOTE]
+>
+> 1. In the above sections, examples of `lang` are:
+>
+> - `html` - HTML/CSS
+> - `js` - JavaScript
+> - `jsx` - JSX
+
+## Numbering Challenges
+
+Every challenge needs an `id`. If you don't specify one, then MongoDB will create a new random one when it saves the data; however, we don't want it to do that, since we want the challenge ids to be consistent across different environments (staging, production, lots of different developers, etc.).
+
+To generate a new one in a shell (assuming MongoDB is running separately):
+
+1. Run `mongo` command.
+2. Run `ObjectId()` command.
+
+For example:
+
+```bash
+$ mongo
+MongoDB shell version v3.6.1
+connecting to: mongodb://127.0.0.1:27017
+MongoDB server version: 3.4.10
+...
+$ ObjectId()
+ObjectId("5a474d78df58bafeb3535d34")
+````
+
+The result is a new id, for example `5a474d78df58bafeb3535d34` above.
+
+Once you have your id, put it into the markdown file as the `id` field at the top, e.g.
+
+```yml
+---
+id: 5a474d78df58bafeb3535d34
+title: Challenge Title
+```
+
+## Naming challenges
+
+Naming things is hard. We've made it easier by imposing some constraints.
+
+All challenge titles should be explicit and should follow this pattern:
+
+\[verb\]\[object clause\]
+
+Here are some example challenge names:
+
+- Use Clockwise Notation to Specify the Padding of an Element
+- Condense arrays with .reduce
+- Use Bracket Notation to Find the First Character in a String
+
+## Challenge descriptions/instructions
+
+Sentences should be clear and concise with minimal jargon. If used, jargon should be immediately defined in plain English.
+
+Keep paragraphs short (around 1-4 sentences). People are more likely to read several short paragraphs than a wall of text.
+
+Challenge text should use the second person ("you") to help to give it a conversational tone. This way the text and instructions seem to speak directly to the camper working through the challenge. Try to avoid using the first person ("I", "we", "let's", and "us").
+
+Don't use outbound links. These interrupt the flow. Campers should never have to google anything during these challenges. If there are resources you think campers would benefit from, add them to the challenge's Guide-related article.
+
+You can add diagrams if necessary.
+
+Don't use emojis or emoticons in challenges. freeCodeCamp has a global community, and the cultural meaning of an emoji or emoticon may be different around the world. Also, emojis can render differently on different systems.
+
+Proper nouns should use correct capitalization when possible. Below is a list of words as they should appear in the challenges.
+
+- JavaScript (capital letters in "J" and "S" and no abbreviations)
+- Node.js
+- Front-end development (adjective form with a dash) is when you're working on the front end (noun form with no dash). The same goes with "back end", "full stack", and many other compound terms.
+
+### The 2-minute rule
+
+Each challenge should be solvable within 120 seconds by a native English speaker who has completed the challenges leading up to it. This includes the amount of time it takes to read the directions/instructions understand the seeded code, write their code and get all the tests to pass.
+
+If it takes longer than two minutes to complete the challenge, you have two options:
+
+- Simplify the challenge, or
+- Split the challenge into two challenges.
+
+The 2-minute rule forces you, the challenge designer, to make your directions concise, your seed code clear, and your tests straight-forward.
+
+We track how long it takes for campers to solve changes and use this information to identify challenges that need to be simplified or split.
+
+### Modularity
+
+Each challenge should teach exactly one concept, and that concept should be apparent from the challenge's name.
+
+We can reinforce previously covered concepts through repetition and variations - for example, introducing h1 elements in one challenge, then h3 elements a few challenges later.
+
+Our goal is to have thousands of 2-minute challenges. These can flow together and reiterate previously-covered concepts.
+
+### Formatting challenge text
+
+Here are specific formatting guidelines for challenge text and examples:
+
+- Language keywords go in `` \` `` backticks. For example, HTML tag names or CSS property names.
+- References to code parts (i.e. function, method, or variable names) should be wrapped in `` \` `` backticks. See example below:
+```md
+Use `parseInt` to convert the variable `realNumber` into an integer.
+```
+- References to file names and path directories (e.g. `package.json`, `src/components`) should be wrapped in `` \` `` backticks.
+- Multi-line code blocks **must be preceded by an empty line**. The next line must start with three backticks followed immediately by one of the [supported languages](https://prismjs.com/#supported-languages). To complete the code block, you must start a new line which only has three backticks and **another empty line**. See example below:
+- Whitespace matters in Markdown, so we recommend that you make it visible in your editor.
+
+**Note:** If you are going to use an example code in YAML, use `yaml` instead of `yml` for the language to the right of the backticks.
+
+The following is an example of code:
+````md
+```{language}
+
+[YOUR CODE HERE]
+
+````
+````
+
+- Additional information in the form of a note should be surrounded by blank lines, and formatted: `**Note:** Rest of note text...`
+- If multiple notes are needed, then list all of the notes in separate sentences using the format: `**Notes:** First note text. Second note text.`
+- Use single-quotes where applicable
+
+**Note:** The equivalent _Markdown_ should be used in place of _HTML_ tags.
+
+## Writing tests
+
+Challenges should have the minimum number of tests necessary to verify that a camper understands a concept.
+
+Our goal is to communicate the single point that the challenge is trying to teach, and test that they have understood that point.
+
+Challenge tests can make use of the Node.js and Chai.js assertion libraries. Also, if needed, user-generated code can be accessed in the `code` variable.
+
+## Formatting seed code
+
+Here are specific formatting guidelines for the challenge seed code:
+
+- Use two spaces to indent
+- JavaScript statements end with a semicolon
+- Use double quotes where applicable
+
+### Seed code comments
+
+We have a [comment dictionary](/curriculum/dictionaries/english/comments.js) that contains the only comments that can be used within the seed code. The exact case and spacing of the dictionary comment must be used. The comment dictionary should not be expanded without prior discussion with the dev-team.
+
+Comments used should have a space between the comment characters and the comment themselves. In general, comments should be used sparingly. Always consider rewriting a challenge's description or instructions if it could avoid using a seed code comment.
+
+Example of valid single line JavaScript comment:
+
+```js
+// Only change code below this line
+````
+
+Example of a valid CSS comment:
+
+```css
+/* Only change code above this line */
+```
+
+If a challenge only has a single place where code changes are needed, please use the comments in the following example to instruct the user where changes should be made.
+
+```js
+var a = 3;
+var b = 17;
+var c = 12;
+
+// Only change code below this line
+a = a + 12;
+b = 9 + b;
+c = c + 7;
+```
+
+If a challenge has multiple places where the user is expected to change code (i.e. the React challenges)
+
+```jsx
+class MyComponent extends React.Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ text: "Hello"
+ };
+ // Change code below this line
+
+ // Change code above this line
+ }
+ handleClick() {
+ this.setState({
+ text: "You clicked!"
+ });
+ }
+ render() {
+ return (
+
+ { /* Change code below this line */ }
+
+ { /* Change code above this line */ }
+ {this.state.text}
+
+ );
+ }
+};
+```
+
+### Translation of seed code comments
+
+There are separate comment dictionaries for each language. The [English version of the comment dictionary](/curriculum/dictionaries/english/comments.js) is the basis for the translations found in the corresponding non-English versions of the files. The non-English version of the Chinese comment dictionary would be located at `/curriculum/dictionaries/chinese/comments.js`. Each dictionary consists of an array of objects with a unique `id` property and a `text` property. Only the `text` should be modified to encompass the translation of the corresponding English comment.
+
+Some comments may contain a word/phrase that should not be translated. For example, variable names or proper library names like "React" should not be translated. See the comment below as an example. The word `myGlobal` should not be translated.
+
+```text
+Declare the myGlobal variable below this line
+```
+> [!NOTE]
+>
+> We are working on an integration to make it possible to work on i18n for the comment dictionary.
+
+## Hints and Solutions
+
+Each challenge has a `Get a Hint` button, so a user can access any hints/solutions which have been created for the challenge. Curriculum hints/solutions topics are located on [our forum](https://forum.freecodecamp.org/c/guide) under the `Guide` category.
+
+If you find a problem with an existing challenge's hints/solutions topic, you can make suggestions in the [contributors category](https://forum.freecodecamp.org/c/contributors) on the forum. Moderators and users with trust level 3 will review the comments and decide whether or not to include the changes in the corresponding hint/solutions topic.
+
+### Adding new Challenge hints/solutions Topics
+
+Take the following steps when adding a new challenge hints/solutions related topic.
+
+1. Start by following the same steps for creating a new topic but review the next for creating the title.
+2. The title of the topic should start with `freeCodeCamp Challenge Guide:` concatenated with the actual title of the curriculum challenge. For example, if the challenge is named "`Chunky Monkey`", the topic title would be "`freeCodeCamp Challenge Guide: Chunky Monkey`".
+3. `camperbot` should be the owner of these topics/posts, so you will need to request an admin to change the ownership of the main post to `camperbot`.
+4. Once the new topic is created, a forum topic id is created. It is located at the end of the forum topic URL. This id must be added to the frontmatter of the curriculum challenge file via the normal pull request process for the `Get a Hint` button to link to the topic.
+
+### Guidelines for content of hints and solutions topics
+
+When proposing a solution for a curriculum challenge related Guide topic, the full code must be added. This includes all the original seed code plus any changes needed to pass all the challenge tests. The following template should be used when creating new hints/solutions topics:
+
+````md
+# Challenge Name Goes Here
+
+---
+
+## Problem Explanation
+
+This summarizes what needs to be done without just restating the challenge description and/or instructions. This is an optional section
+
+#### Relevant Links
+
+- [Link Text](link_url_goes_here)
+- [Link Text](link_url_goes_here)
+
+---
+
+## Hints
+
+### Hint 1
+
+Hint goes here
+
+### Hint 2
+
+Hint goes here
+
+---
+
+## Solutions
+
+Solution 1 (Click to Show/Hide)
+
+```js
+function myFunc() {
+ console.log('Hello World!');
+}
+````
+
+#### Code Explanation
+
+- Code explanation goes here
+- Code explanation goes here
+
+#### Relevant Links
+
+- [Link Text](link_url_goes_here)
+- [Link Text](link_url_goes_here)
+
+
+````
+
+## Testing Challenges
+
+Before you [create a pull request](how-to-open-a-pull-request.md) for your changes, you need to validate that the changes you have made do not inadvertently cause problems with the challenge.
+
+1. To test all challenges run the below command from the root directory
+
+````
+npm run test:curriculum
+```
+
+2. You can also test a block or a superblock of challenges with these commands
+
+```
+npm run test:curriculum --block='Basic HTML and HTML5'
+```
+
+```
+npm run test:curriculum --superblock=responsive-web-design
+```
+
+You are also able to test one challenge individually by performing the following steps:
+
+1. Switch to the `curriculum` directory:
+
+ ```
+ cd curriculum
+ ```
+
+2. Run the following for each challenge file for which you have changed (replacing `challenge-title-goes-here` with the full title of the challenge):
+
+ ```
+ npm run test -- -g challenge-title-goes-here ```
+
+Once you have verified that each challenge you've worked on passes the tests, [please create a pull request](https://github.com/freeCodeCamp/freeCodeCamp/blob/main/docs/how-to-open-a-pull-request.md).
+
+> [!TIP] You can set the environment variable `LOCALE` in the `.env` to the language of the challenge(s) you need to test.
+>
+> The currently accepted values are `english` and `chinese`, with `english` being set by default.
+
+### Useful Links
+
+Creating and Editing Challenges:
+
+1. [Challenge types](https://github.com/freeCodeCamp/freeCodeCamp/blob/main/client/utils/challengeTypes.js#L1-L13) - what the numeric challenge type values mean (enum).
+
+2. [Contributing to FreeCodeCamp - Writing ES6 Challenge Tests](https://www.youtube.com/watch?v=iOdD84OSfAE#t=2h49m55s) - a video following [Ethan Arrowood](https://twitter.com/ArrowoodTech) as he contributes to the old version of the curriculum.
diff --git a/docs/i18n/chinese/how-to-work-on-the-docs-theme.md b/docs/i18n/chinese/how-to-work-on-the-docs-theme.md
new file mode 100644
index 0000000000..1e21b0218c
--- /dev/null
+++ b/docs/i18n/chinese/how-to-work-on-the-docs-theme.md
@@ -0,0 +1,54 @@
+# How to work on the docs theme
+
+> [!NOTE] A quick reminder that you do not need to setup anything for working on the content for the documentation site.
+>
+> To work on the contributing guidelines, you can edit or add files in the `docs` directory [available here](https://github.com/freeCodeCamp/freeCodeCamp/tree/main/docs). When your changes are merged, it will be made available automatically at the documentation site.
+
+## Structure of the docs website
+
+The site is generated using [`docsify`](https://docsify.js.org), and served using GitHub pages.
+
+Typically you would not need to change any configuration or build the site locally. In case you are interested, here is how it works:
+
+- The homepage's source for this site is available in [`docs/index.html`](index.html).
+- We serve this file as a SPA using `docsify` and GitHub Pages.
+- The `docsify` script generates the content of `markdown` files in `docs` directory on demand.
+- The homepage is generated from the [`_coverpage.md`](_coverpage.md).
+- the sidebar navigation is generated from [`_sidebar.md`](_sidebar.md).
+
+## Serving the documentation site locally
+
+Clone freeCodeCamp:
+
+```console
+git clone https://github.com/freeCodeCamp/freeCodeCamp.git
+docsify serve docs
+```
+
+Install `docsify`:
+
+```console
+npm install -g docsify
+```
+
+and serve the `/docs` directory
+
+```console
+docsify serve docs
+```
+
+Alternatively, if you have installed freeCodeCamp locally (see the local setup guide), we bundle the CLI with the development tools so you can run any of the below commands as needed from the root of the repo:
+
+### Serve and launch the documentation site only
+
+```console
+npm run docs:serve
+```
+
+### Serve the documentation site alongside freeCodeCamp locally:
+
+```console
+npm run develop
+```
+
+> The documentation site should be available at
diff --git a/docs/i18n/chinese/how-to-work-on-the-news-theme.md b/docs/i18n/chinese/how-to-work-on-the-news-theme.md
new file mode 100644
index 0000000000..59f1f2360e
--- /dev/null
+++ b/docs/i18n/chinese/how-to-work-on-the-news-theme.md
@@ -0,0 +1,99 @@
+# How to work on freeCodeCamp.org's developer news theme
+
+The developer news also known as [`/news`](https://www.freecodecamp.org/news) site is powered by [Ghost](https://ghost.org/). We use a custom theme for the look and feel of the site. The source code of the theme is available here: .
+
+## The Theme
+
+Ghost uses a simple templating language called [Handlebars](http://handlebarsjs.com/) for its themes. The theme used on `/news` is based off of the default [casper theme](https://github.com/TryGhost/Casper).
+
+The default theme is commented pretty heavily so that it should be fairly easy to work out what's going on just by reading the code and the comments. Once you feel comfortable with how everything works, Ghost also has a full [theme API documentation](https://themes.ghost.org) which explains every possible Handlebars helper and template.
+
+**The main files are:**
+
+- `default.hbs` - The main template file
+- `index.hbs` - Used for the home page
+- `post.hbs` - Used for individual posts
+- `page.hbs` - Used for individual pages
+- `tag.hbs` - Used for tag archives
+- `author.hbs` - Used for author archives
+
+One really neat trick is that you can also create custom one-off templates just by adding the slug of a page to a template file. For example:
+
+- `page-about.hbs` - Custom template for the `/about/` page
+- `tag-news.hbs` - Custom template for `/tag/news/` archive
+- `author-ali.hbs` - Custom template for `/author/ali/` archive
+
+## Development
+
+1. Get Ghost installed locally.
+
+ ```sh
+ npm install -g ghost-cli@latest
+ mkdir ghost-local-site
+ cd ghost-local-site
+ ```
+
+ ```sh
+ ghost install local
+ ghost start
+ ```
+
+ > Note: Currently freeCodeCamp uses Ghost version `2.9.0`, so make sure you are using a version higher than that.
+
+ Be sure to run `ghost` commands from the `ghost-local-site` directory. Follow additional instructions on [Ghost's official documentation](https://docs.ghost.org) if are not familiar with its interface.
+
+2. Fork and clone the repository in your theme directory (replacing `YOUR_USERNAME` with your GitHub username):
+
+ ```sh
+ cd content/themes/
+ git clone https://github.com/YOUR_USERNAME/news-theme.git
+ ```
+
+3. Make sure you have all the pre-requisites.
+
+ The theme styles are compiled using Gulp/PostCSS to polyfill future CSS spec. You'll need [Node.js](https://nodejs.org/). Make sure that your Node.js version is compatible with `ghost`.
+
+4. Install dependencies and develop the theme
+
+ ```sh
+ npm ci
+ npm run develop
+ ```
+
+5. Now you can edit `/assets/css/` files, which will be compiled to `/assets/built/` automatically.
+
+6. Access the development site.
+
+ a. Enter `http://localhost:2368/ghost/` into your address bar. Continue with the setup prompted on the page (if running ghost for the first time).
+
+ b. _(One-time only, during setup)_ Restart Ghost, on a separate terminal once to ensure the theme is available.
+
+ ```sh
+ cd ghost-local-site
+ ghost restart
+ ```
+
+ c. _(One-time only, during setup)_ Once you've done this, go to `http://localhost:2368/ghost/#/settings/design` and scroll to the bottom. Make sure you click activate on the `freecodecamp-news-theme`.
+
+7. Zip the final code and make a pull-request
+
+ The `zip` Gulp task packages the theme files into `dist/.zip`, which we can then upload to the production site.
+
+ When you make a PR, please make sure you have run the below script prior to commiting the code and sending a PR.
+
+ ```sh
+ npm run zip
+ ```
+## Other Reference and resources
+
+### PostCSS Features Used
+
+- Autoprefixer - Don't worry about writing browser prefixes of any kind, it's all done automatically with support for the latest 2 major versions of every browser.
+- Variables - Simple pure CSS variables
+- [Color Function](https://github.com/postcss/postcss-color-function)
+
+### SVG Icons
+
+The theme uses inline SVG icons, included via Handlebars partials. You can find all icons inside `/partials/icons`. To use an icon just include the name of the relevant file, eg. To include the SVG icon in `/partials/icons/rss.hbs` - use `{{> "icons/rss"}}`.
+
+You can add your own SVG icons in the same manner.
diff --git a/docs/i18n/chinese/index.md b/docs/i18n/chinese/index.md
new file mode 100644
index 0000000000..1c4add4ab3
--- /dev/null
+++ b/docs/i18n/chinese/index.md
@@ -0,0 +1,43 @@
+The [freeCodeCamp.org](https://freecodecamp.org) community is possible thanks to thousands of kind volunteers like you. If you want to contribute your time and expertise, we would be excited to welcome you aboard.
+
+> [!NOTE] Before you proceed, please take a quick 2 minutes to read our [Code of Conduct](https://www.freecodecamp.org/code-of-conduct). We strictly enforce it across our community so that contributing to freeCodeCamp.org is a safe, inclusive experience for everyone.
+
+Happy contributing.
+
+You are welcome to:
+
+- Create, update and fix bugs in our [curriculum](#curriculum).
+- Help us fix bugs in freeCodeCamp.org's [learning platform](#learning-platform).
+- _(Coming Soon)_ Help us translate freeCodeCamp.org to world languages.
+
+We answer the most common questions about contributing [in our contributor FAQ](/FAQ.md).
+
+## Curriculum
+
+Our curriculum is curated by the global freeCodeCamp community. This way, we are able to incorporate expert knowledge from volunteers like you.
+
+You can help expand and improve the curriculum. You can also update project user stories to better-explain concepts. And you can improve our automated tests so that we can more accurately test people's code.
+
+**If you're interested in improving our curriculum, here's [how to contribute to the curriculum](how-to-work-on-coding-challenges.md).**
+
+## Learning Platform
+
+Our learning platform runs on a modern JavaScript stack. It has various components, tools, and libraries. These include Node.js, MongoDB, OAuth 2.0, React, Gatsby, Webpack, and more.
+
+Broadly, we use
+
+- a Node.js based API server
+- a set of React-based client applications
+- and testing scripts to evaluate camper-submitted curriculum projects.
+
+If you want to productively contribute to the curriculum, we recommend some familiarity with these tools.
+
+If you want to help us improve our codebase...
+
+**you can either use Gitpod, a free online dev environment that starts a ready-to-code dev environment for freeCodeCamp in your browser.**
+
+[](https://gitpod.io/#https://github.com/freeCodeCamp/freeCodeCamp)
+
+Or you can...
+
+**[set up freeCodeCamp locally](how-to-setup-freecodecamp-locally.md) on your machine.**
diff --git a/docs/i18n/chinese/moderator-handbook.md b/docs/i18n/chinese/moderator-handbook.md
new file mode 100644
index 0000000000..498cac5019
--- /dev/null
+++ b/docs/i18n/chinese/moderator-handbook.md
@@ -0,0 +1,489 @@
+# The official freeCodeCamp Moderator Handbook.
+
+This will help you moderate different places in our community, including:
+
+- GitHub issues & pull requests
+- The forum, chat rooms, Facebook groups, and other online meeting places
+- In-person events like study groups, hackathons, and conferences
+
+**All freeCodeCamp Moderators are community-wide moderators. That means that we trust you to oversee any of these places.**
+
+This said you can serve as a moderator in whichever places are of the most interest to you. Some moderators just help out on GitHub. Others just help out on the forum. Some moderators are active everywhere.
+
+The bottom line is that we want you to enjoy being a moderator, and invest your scarce time in places that are of interest to you.
+
+> [!NOTE] "With great power comes great responsibility." - Uncle Ben
+
+As a moderator, temperament is more important than technical skill.
+
+Listen. Be Helpful. Don't abuse your power.
+
+freeCodeCamp is an inclusive community, and we need to keep it that way.
+
+We have a single code of conduct that governs our entire community. The fewer the rules, the easier they are to remember. You can read those rules and commit them to memory [here](https://code-of-conduct.freecodecamp.org).
+
+## Moderating GitHub
+
+Moderators have the ability to close issues and accept or close pull requests.
+
+Moderators have two primary responsibilities regarding GitHub:
+
+1. QA'ing and merging pull requests
+2. Evaluating and responding to issues
+
+### Moderating Pull Requests
+
+Pull Requests (PRs) are how contributors submit changes to freeCodeCamp's repository. We must perform Quality Assurance (QA) on pull requests before we decide whether to merge them or close them.
+
+#### Types of Pull Requests
+
+1. **Challenge Instruction Edits** These are changes to the text of challenges - the Description, Instructions, or Test Text. You can also review these right on GitHub and decide whether to merge them. We need to be a bit more careful about these because millions of people will encounter this text as they work through the freeCodeCamp curriculum. Does the pull request make the text more clear without making it much longer? Are the edits relevant and not overly pedantic? Remember that our goal is for challenges to be as clear and as short as possible. They aren't the place for obscure details. Also, contributors may try to add links to resources to the challenges. You can close these pull requests and reply to them with this:
+
+```markdown
+Thank you for your pull request.
+
+We are closing this pull request. Please add links and other details to the challenge's corresponding guide article instead.
+
+If you think we're wrong in closing this issue, please request for it to be reopened and add further clarification. Thank you, and happy coding.
+```
+
+2. **Challenge Code Edits** These are changes to the code in a challenge - the Challenge Seed, Challenge Solution, and Test Strings. These pull requests need to be pulled down from GitHub and tested on your local computer to make sure the challenge tests can still be passed with the current solution, and the new code doesn't introduce any errors. Some contributors may try to add additional tests to cover pedantic corner-cases. We need to be careful to not make the challenge too complicated. These challenges and their tests should be as simple and intuitive as possible. Aside from the algorithm challenges and interview prep section, learners should be able to solve each challenge within about 2 minutes.
+
+3. **Codebase Changes** These code edits change the functionality of the freeCodeCamp platform itself. Sometimes contributors try to make changes without much explanation, but for code changes, we need to make sure there's a genuine need for the change. So these pull requests should reference an existing GitHub issue where the reasons for the change are discussed. Then you can open the pull request on your computer and test them out locally. After you've done so, if the changes look good, don't merge them quite yet. You can comment on the pull request saying "LGTM", then mention @raisedadead so he can take a final look.
+
+#### How to merge or close pull requests
+
+First of all, when you choose a pull request to QA, you should assign yourself to it. You can do this by clicking the "assign yourself" link below the "assignees" part on the right-hand column of GitHub's interface.
+
+Depending on the type of pull request it is, follow the corresponding rules listed above.
+
+Before merging any pull request, make sure that GitHub has green checkmarks for everything. If there are any X's, investigate them first and figure out how to get them turned into green checkmarks first.
+
+Sometimes there will be a Merge Conflict. This means that another pull request has made a change to that same part of that same file. GitHub has a tool for addressing these merge conflicts right on GitHub. You can try to address these conflicts. Just use your best judgment. The pull request's changes will be on top, and the Master branch's changes will be on the bottom. Sometimes there will be redundant information in there that can be deleted. Before you finish, be sure to delete the `<<<<<<`, `======`, and `>>>>>>` that Git adds to indicate areas of conflict.
+
+If the pull request looks ready to merge (and doesn't require approval from @raisedadead), you can go ahead and merge it. Be sure to use the default "Squash and Merge" functionality on GitHub. This will squash all the pull requests commits down into a single commit, which makes the Git history much easier to read.
+
+You should then comment on the pull request, thanking the contributor in your own personal way.
+
+If the author of the pull request is a "first-time contributor" you should also congratulate them on their first merged pull request to the repository. You can look at the upper right-hand corner of the PR's body to determine a first-time contributor. It will show `First-time contributor` as shown below:
+
+
+
+If the pull request doesn't look ready to merge you can politely reply telling the author what they should do to get it ready. Hopefully, they will reply and get their pull request closer to ready.
+
+Often, a pull request will be obviously low effort. You can often tell this immediately when the contributor didn't bother checking the checkboxes in the Pull Request Template or used a generic pull request title like "made changes" or "Update index.md".
+
+There are also situations where the contributor is trying to add a link to their own website, or include a library they themselves created, or has a frivolous edit that doesn't serve to help anyone but themselves.
+
+In both of these situations, you should go ahead and close their pull request and reply with this standard message:
+
+```markdown
+Thank you for opening this pull request.
+
+This is a standard message notifying you that we've reviewed your pull request and have decided not to merge it. We would welcome future pull requests from you.
+
+Thank you and happy coding.
+```
+
+If you need a second opinion on a pull request, go ahead and leave your comments on the pull request, then add the "discussing" label to the pull request.
+
+### Moderating GitHub Issues
+
+freeCodeCamp is an active open source project. We get new issues every day, all of which need to be triaged and labeled.
+
+#### Types of GitHub Issues
+
+1. **Code Help Requests**, which people have mistakenly created GitHub issues for. If someone is asking for help, paste the following message, then close the issue.
+
+```markdown
+Thank you for reporting this issue.
+
+This is a standard message notifying you that this issue seems to be a request for help. Instead of asking for help here, please click the **"Help"** button on the challenge on freeCodeCamp, which will help you create a question in the right part of the forum. Volunteers on the forum usually respond to questions within a few hours and can help determine if there is an issue with your code or the challenge's tests.
+
+If the forum members determine there is nothing wrong with your code, you can request this issue to be reopened.
+
+Thank you and happy coding.
+```
+
+2. **Bug or Clarification issues** Try to reproduce the bug yourself if you can. If not, ask them for the steps to reproduce the bug, and whether they have any screenshots, videos, or additional details that can help you reproduce the issue. Once you can reproduce the issue - or at least confirm it's a legit issue - label it `confirmed`. Then:
+
+- If it's a simple change to an existing challenge, label it as `first timers only`, otherwise label it as `help wanted`. Use other labels as appropriate.
+- If the issue is more significant, flag it as `bug`. If there is any ambiguity as to the proper course of action on an issue, feel free to tag @raisedadead on the issue get his opinion on it, then add the `Discussing` label.
+
+3. **Duplicate Issues** If an issue is the same as another reported issue, the prior reported issue should take precedence. Flag as `Duplicate`, paste the following message replacing `#XXXXX` with the issue number, then close the issue.
+
+```markdown
+Thank you for reporting this issue.
+
+This is a standard message notifying you that this issue appears to be very similar to issue #XXXXX, so we are closing it as a duplicate.
+
+If you think we're wrong in closing this issue, please request for it to be reopened and add further clarification. Thank you and happy coding.
+```
+
+4. **Fixed in staging** Some problems may have already been fixed in staging, but don't have a GitHub issue associated with them. If this is the case, you can paste the following message, close the issue, and add a `status: resolved/shipping` label:
+
+```markdown
+Thank you for reporting this issue.
+
+This is a standard message notifying you that the problem you mentioned here is present in production, but that it has already been fixed in staging. This means that the next time we push our staging branch to production, this problem should be fixed. Because of this, we're closing this issue.
+
+If you think we're wrong in closing this issue, please request for it to be reopened and add further clarification. Thank you and happy coding.
+```
+
+#### Closing Stale, Outdated, Inactive Issues and Pull Requests
+
+- Stale issues or PRs are those that have not seen any activity from the OP for 21 days (3 weeks from the last activity), but only after a moderator has requested more information/changes. These can be closed in an automated/bot script or by the moderators themselves.
+
+- Activity is defined as: Comments requesting an update on the PR and triages like `status: update needed` label etc.
+
+- If the OP asks for additional assistance or even time, the above can be relaxed and revisited after a response is given. In any case, the mods should use their best judgment to resolve the outstanding PR's status.
+
+#### Other guidelines for Moderators on GitHub
+
+Though you will have write access to freeCodeCamp's repository, **you should never push code directly to freeCodeCamp repositories**. All code should enter freeCodeCamp's codebase in the form of a pull request from a fork of the repository.
+
+Also, you should never accept your own PRs. They must be QA'd by another moderator, just like with any other PR.
+
+If you notice anyone breaking the [code of conduct](https://code-of-conduct.freecodecamp.org) on GitHub issues, or opening pull requests with malicious content or code, email dev@freecodecamp.org with a link to the offending pull request and we can consider banning them from freeCodeCamp's GitHub organization entirely.
+
+## Moderating the Forum
+
+As a Moderator, you help keep our community an enjoyable place for anyone to learn and get help. You will deal with flagged posts and handle spam, off-topic, and other inappropriate conversations.
+
+Note that once you are a moderator on the forum, you will start to see blue moderator hints about forum members, like "this is the first time [person] has posted - let's welcome them to the community!" or "[person] hasn't posted in a long time - let's welcome them back."
+
+![A blue text message saying "this is the first time [person] has posted - let's welcome them to the community!](https://i.imgur.com/mPmVgzK.png)
+
+These are opportunities for you to welcome them and make them feel extra special. You never know which person who's marginally involved may become our next super-helper, helping many other people in their coding journey. Even the smallest kindness may trigger a cascade of good deeds.
+
+### Deleting forum posts
+
+Forum moderators have the ability to delete user's posts. You should only do this for the following instances:
+
+1. Someone has posted a pornographic or graphically violent image.
+2. Someone has posted a link or code that is malicious in nature and could harm other campers who click on it.
+3. Someone has flooded a thread with lots of spam messages.
+
+### Dealing with spam
+
+For the first spam post of a user, send them a message explaining the problem, and remove the link or post as appropriate. Leave a note on the user's profile explaining the action you have taken. If the problem persists, then follow the process above. Quietly block the user from posting (using the silence option on the User Admin panel), then send a warning with the Code of Conduct. Check the box in the private message indicating that your message is a "formal warning."
+
+You can ask questions and report incidents in the in the [staff forum section](https://forum.freecodecamp.com/c/staff).
+
+### Dealing with off-topic conversations
+
+Posts or topics that seems to be in the wrong place can be re-categorized or renamed to whatever would be appropriate.
+
+In exceptional circumstances, it may be appropriate for a moderator to fork a discussion into multiple threads.
+
+Again, if you have any problems or questions, make a post with your actions in the Staff category, and tag another moderator if you want them to review your moderating actions.
+
+### Underage Users
+
+Our Terms of Service require that freeCodeCamp users be at least 13 years of age. In the event that a user reveals that they are under the age of 13, send them the below message and delete their forum account (if deletion is not available, suspending the account is sufficient). Then email [Quincy](https://forum.freecodecamp.org/u/QuincyLarson) (quincy@freecodecamp.org) or [Mrugesh](https://forum.freecodecamp.org/u/raisedadead) (mrugesh@freecodecamp.org) to delete the user's freeCodeCamp account as well.
+
+```markdown
+SUBJECT: Users under 13 are not allowed to use the forum per Terms of Service
+
+It has come to our attention that you are under 13 years of age. Per the [freeCodeCamp terms of service](https://www.freecodecamp.org/news/terms-of-service), you must be at least 13 years old to use the site or the forum. We will be deleting both your freeCodeCamp account and your forum account. This restriction keeps us in compliance with United States laws.
+
+Please rejoin once you have reached at least 13 years of age.
+
+Thank you for understanding.
+```
+
+## Moderating Facebook
+
+If you see anything that seems to break our [Code of Conduct](https://code-of-conduct.freecodecamp.org/), you should delete it immediately.
+
+Sometimes people will post things that they think are funny. They don't realize that what they said or what they shared could be interpreted as offensive. In these cases, their post should be deleted, but the person who posted it doesn't necessarily need to be banned. By getting their post deleted, they will hopefully come to understand that what they posted was inappropriate.
+
+But if it is an egregious offense that can't reasonably be attributed to a cultural difference or a misunderstanding of the English language, then you should strongly consider blocking the member from the Facebook group.
+
+## Moderating Discord
+
+Here's how moderators deal with violations of our [Code of Conduct](https://code-of-conduct.freecodecamp.org/) on Discord:
+
+1. **Make sure it was intended to violate the Code of Conduct.** Not all violations of the CoC were intended as such. A new camper might post a large amount of code for help, unaware that this can be considered spamming. In these cases, you can just ask them to paste their code with services like Codepen or Pastebin.
+
+2. **If the camper clearly and intentionally violates the Code of Conduct, the moderator will proceed as follows:**
+
+- Ban the offending person from the Discord Server. In order to ban someone, right-click on their username/profile picture and select "Ban username". You will be given the option to delete their previous messages - select "Don't delete any", as the messages should remain present as a historic record.
+- Report a short summary of the event in the #mod-log channel. Here's an example of what such a summary might look like:
+
+```
+Banned: _@username_
+Reason(s): _Spamming, trolling_
+Evidence: _One or more links to the offending message(s)_
+```
+
+- If you decide to ban someone, it means they're unwilling to abide to our Code of Conduct. Therefore unbanning a Camper should rarely occur. However, if the need arises, you can do so by clicking on the server name, choosing "Server Settings", choosing "Bans", selecting the user you wish to unban, and clicking "Revoke Ban".
+
+Discord Bans are global - you cannot ban a user from a specific channel, only from the entire server.
+
+3. **Creating a Private Discussion**
+
+There may be situations where you need to address a concern with a camper privately. This should not be done through DMs, as this can lead to situations where you claim one thing and the camper claims another. Instead, use the bot's functionality to create a private discussion:
+
+- Call the `!fCC moderate private @username` command, where `@username` is the *Discord mention* of the user. If you are calling this command from a private channel (such as #mod-chat), you will need to parse the mention manually: Ensure you have Developer Mode turned on in your Discord settings, then right-click on the user's avatar and select `Copy ID`. Replace the `@username` parameter with `<@!ID>`, where `ID` is the value you copied earlier. The result should look like: `!fCC moderate private <@!465650873650118659>`.
+- The bot will create a new channel under the `private` category and add the `@username`-mentioned camper and all moderators with the `Your Friendly Moderator` role. While all moderators are added to the channel for transparency, the moderator who calls this command should be the only one to interact with the camper unless they request assistance.
+- When the conversation is complete, call the `!fCC moderate close` command *in the private channel* to have the bot close and delete that channel.
+
+4. **Deleting messages** Moderators have the ability to delete messages on Discord. They should only exercise this ability in four very specific situations:
+
+- Someone has posted a pornographic or graphically violent image.
+- Someone has posted a link or code that is malicious in nature and could harm other campers who click on it.
+- Someone has flooded the chat with lots of spam messages to such an extreme extent (usually involving bots) as to render chat completely unusable.
+- Someone has posted an advertisement and/or a self-promoting message/image (social media).
+
+In all other situations - even situations where the code of conduct is violated - Moderators should not delete the message as these are an important historic record. When you do delete a message, make sure you take a screenshot of it first! The screenshot can be logged in the #mod-log channel, but for the #activity-log it is sufficient to say the evidence was "removed due to sensitive content". Note: If the message contains material that would be illegal to take a screenshot of, copy the message link instead - provide that message link to @raisedadead to forward to Discord's Trust and Safety team.
+
+5. **Don’t use @everyone or @here** Don’t use @everyone or @here under any circumstances! Every single person in that chat room will get a notification. In some cases, tens of thousands of people. Instead, if you want people to see an announcement, you can pin it to the channel to allow everyone to read it.
+
+6. **Don’t threaten to ban** If a camper is breaking the code of conduct, don’t threaten to ban them, and never warn them in public. Instead, talk to them privately using the bot's `private` command. No one else in that channel needs to know that you banned/suspended the person - campers can view the summary in the #activity-log channel if they want to keep up on that information. If a violation was clearly unintended and doesn't warrant a suspension or private conversation, make the offending camper aware of his / her actions without making it come across as a warning. For example:
+
+- Camper posts a wall of code to request help
+
+ Moderator: @username Please use Codepen or Pastebin when posting large amounts of code.
+
+- Or if you really have to explain why:
+
+ Moderator: @username Please use Codepen or Pastebin when posting large amounts of code, because it disrupts the chat for everyone and could be considered spamming according to our Code of Conduct.
+
+- For mild and unintentional violations of the code of conduct
+
+ Moderator: This is a friendly reminder for everyone to follow the code of conduct: https://code-of-conduct.freecodecamp.org/
+
+7. **Don’t brag about being a moderator** Do not see yourself as above the community. You are the community. And the community has trusted you to help protect something rare that we all share - a _welcoming_ place for new developers. If you brag about being a moderator, people may feel uneasy around you, in the same way, that people may feel uneasy around a police officer, even if they’re doing nothing wrong. This is just human nature.
+
+8. **Don’t contradict other moderators** If you disagree with the action of a moderator, talk with them in private or bring it up in the #mod-chat channel. Never override a ban, and never contradict the other moderator(s) publicly. Instead, have a cool-headed discussion in mod-chat and convince the moderator that they themselves should reverse their ban or change their point of view. Remember: we’re all on the same team. We want to dignify the role of moderators and present a unified front.
+
+9. **Talk with other moderators** We have a room for moderators only. Use it! If you feel uncomfortable with how to handle a certain situation, ask other moderators for help. If you think something should be discussed, do it. You're part of the team and we value the input of every team member! Even if you totally disagree with anything in these guidelines or the Code of Conduct!
+
+10. **Temporarily inactive** If you're not going to be active as a Moderator for a while due to vacation, illness, or any other reason, make sure to let the others know in the #mod-chat channel. This is so we know if we can count on you to be regularly active on the server or not.
+
+## Moderating our Chat Server
+
+Moderating the chat server is very similar to moderating the Discord server, but there are a few key differences:
+
+1. **No Ban functionality** At this time, Rocket.Chat does not have a flow for banning users. Users can be muted (so they are prevented from chatting in a room) or kicked from a room.
+2. **Modified Bot Commands** The moderation bot in the chat server was developed with a smoother UX in mind. Some of the commands have been modified. Use the `!fCC modHelp` command to view the available functionality. Bot commands in the chat server do NOT require a user mention as they do with Discord.
+3. **No Role Mentions** Unlike Discord, Rocket.Chat does not allow you to mention all users by a specific role - this means you cannot ping all moderators at once.
+
+## How to become a moderator
+
+If you are helping people in the community consistently over time, our Moderator Team will eventually take notice, and one of them will mention you as a possible moderator to [our staff](https://forum.freecodecamp.org/g/Team). There are no shortcuts to becoming a moderator.
+
+If you are approved, we will add you to our Moderator Teams on [GitHub](https://github.com/orgs/freeCodeCamp/teams/moderators), [forum](https://forum.freecodecamp.org/g/moderators), etc.
+
+> [!NOTE] > **For GitHub:** After you've been accepted as a moderator, you will receive a Github repository invitation. You'll need to head over towards [freeCodeCamp GitHub Organisation Invitation](https://github.com/orgs/freeCodeCamp/invitation) to be able to accept the invitation. This is required for us to be able to give you write access to some of our repositories.
+
+## How we retire inactive moderators
+
+Please note that we will frequently remove mods whom we think are inactive. When we do this we will send the following message:
+
+> This is a standard message notifying you that, since you don't seem to have been an active moderator recently, we're removing you from our Moderator team. We deeply appreciate your help in the past.
+
+> If you think we did this in error, or once you're ready to come back and contribute more, just reply to this message letting me know.
+
+## How our Contributors room works
+
+Anyone is welcome in the [Contributors room on our chat server](https://chat.freecodecamp.org/channel/contributors). It is the designated chat room for moderators and other campers who are contributing to our community in any number of ways, including through study groups.
+
+Our assumption is that contributors will read anything in this room that directly mentions them with an `@username`. Everything else is optional. But feel free to read anything anyone posts in there and interact.
+
+## Dealing with solicitors
+
+You may be approached by organizations who want to partner or co-brand with freeCodeCamp in some way. Once you realize that this is what they're after, please stop talking to them and tell them to email quincy@freecodecamp.org. He gets proposals like this all the time and is in the best position to judge whether such a relationship will be worth it for our community (and it rarely is).
+
+## Dealing with (mental) health inquiries
+
+You may come across situations where users are seeking medical advice or are dealing with mental health issues and are looking for support. As a matter of policy, you should avoid talking privately about these matters. Should the situation at some point reflect back to fCC, we want to have the conversation(s) on record. Make it clear that we are not medical professionals and that you encourage the user to find professional help. As difficult as it sometimes can be, avoid giving any tips or advice other than pointing the user in the direction of professional help!
+
+If this happens on Discord: Create a private channel for the user and the mod team. This can be done with the bot's `private` command.
+
+- The user is guaranteed some privacy
+- Public chat is no longer disrupted
+- Other team members can pitch in, should you be uncomfortable dealing with the situation yourself
+
+If you believe the user is capable of rejoining the community, right-click on the private channel and copy the ID. Put the following message in #mod-log:
+
+> Reference medical advice: ` `
+
+Helpful URLs:
+
+http://www.suicide.org/international-suicide-hotlines.html
+
+## A note on free speech
+
+Sometimes people will defend something offensive or incendiary that they said as "free speech."
+
+This XKCD comic perfectly summarizes most communities' thoughts on free speech. So if someone defends something they're saying as "free speech" feel free to send it to them.
+
+
+
+Thanks for reading this, and thanks for helping the developer community!
+
+## Reply Templates
+
+These are some of the standard reply templates that you may use while reviewing pull requests and triaging issues.
+
+> You can make your own with GitHub's built-in [**Saved replies**](https://github.com/settings/replies/) feature or use the ones below.
+
+### Thank you
+
+```markdown
+Thank you for your contribution to the page! 👍
+We are happy to accept these changes and look forward to future contributions. 🎉
+```
+
+### Thank you and congrats
+
+> For thanking and encouraging first-time contributors.
+
+```markdown
+Hi @username. Congrats on your first pull request (PR)! 🎉
+
+Thank you for your contribution to the page! 👍
+We are happy to accept these changes and look forward to future contributions. 📝
+```
+
+### Build Error
+
+```markdown
+Hey @username
+
+We would love to be able to merge your changes but it looks like there is an error with the CI build. ⚠️
+
+Once you resolve these issues, We will be able to review your PR and merge it. 😊
+
+---
+
+Feel free to reference the [contributing guidelines](https://contribute.freecodecamp.org/#/how-to-work-on-coding-challenges?id=testing-challenges) for instructions on running the CI build locally. ✅
+```
+
+### Syncing Fork
+
+> When PR is not up to date with the `master` branch.
+
+````markdown
+Hey @username
+
+We would love to be able to merge your changes but it looks like the branch is not up to date. ⚠️
+
+To resolve this error, you will have to sync the latest changes from the `master` branch of the `freeCodeCamp/freeCodeCamp` repo.
+
+Using the command line, you can do this in three easy steps:
+
+```bash
+git remote add upstream git://github.com/freeCodeCamp/freeCodeCamp.git
+
+git fetch upstream
+
+git pull upstream master
+````
+
+If you're using a GUI, you can simply `Add a new remote...` and use the link `git://github.com/freeCodeCamp/freeCodeCamp.git` from above.
+
+Once you sync your fork and pass the build, we will be able to review your PR and merge it. 😊
+
+---
+
+Feel free to reference the [Syncing a Fork](https://help.github.com/articles/syncing-a-fork/) article on GitHub for more insight on how to keep your fork up-to-date with the upstream repository. 🔄
+````
+
+### Merge Conflicts
+
+> When PR has merge conflicts that need to be resolved.¹
+
+```markdown
+Hey @username
+
+We would love to be able to merge your changes but it looks like you have some merge conflicts. ⚠️
+
+Once you resolve these conflicts, We will be able to review your PR and merge it. 😊
+
+---
+
+If you're not familiar with the merge conflict process, feel free to look over GitHub's guide on ["Resolving a merge conflict"](https://help.github.com/articles/resolving-a-merge-conflict-on-github/). 🔍️
+
+Also, it's good practice on GitHub to write a brief description of your changes when creating a PR. 📝
+````
+
+¹ If a first-time-contributor has a merge conflict, maintainers will resolve the conflict for them.
+
+### Duplicate
+
+> When PR is repetitive or a duplicate.
+
+```markdown
+Hey @username
+
+This PR seems to make similar changes as the existing PR <#number>. As such, we are going to close this as duplicate.
+
+If you feel you have additional changes to expand upon this PR, please feel free to push your commits and request this PR be reopened.
+
+Thanks again! 😊
+
+---
+
+If you have any questions, feel free to ask questions on the ['Contributors' category on our forum](https://forum.freecodecamp.org/c/contributors) or [the contributors chat room](https://chat.freecodecamp.org/channel/contributors).
+```
+
+### Closing invalid pull requests
+
+> When PR is invalid.
+
+```markdown
+Hey @username
+
+Thank you for opening this pull request.
+
+This is a standard message notifying you that we've reviewed your pull request and have decided not to merge it. We would welcome future pull requests from you.
+
+Thank you and happy coding.
+```
+
+> When PR adds links to external resources.
+
+```markdown
+Thank you for your pull request.
+
+We are closing this pull request. Please suggest links and other details to add the challenge's corresponding guide post through [a forum topic](https://forum.freecodecamp.org/new-topic?category=Contributors&title=&body=**What%20is%20your%20hint%20or%20solution%20suggestion%3F**%0A%0A%0A%0A%0A**Challenge%3A**%0A%0A%0A**Link%20to%20the%20challenge%3A**) instead.
+
+If you think we're wrong in closing this issue, please request for it to be reopened and add further clarification. Thank you, and happy coding.
+```
+
+### Closing Invalid Issues
+
+> When an issue relates to the camper's code.
+
+```markdown
+Thank you for reporting this issue.
+
+This is a standard message notifying you that this issue seems to be a request for help. Instead of asking for help here, please click the **"Get Help"** button on the challenge on freeCodeCamp and choose the **"Ask for help"** option, which will help you create a question in the right part of the forum. Volunteers on the forum usually respond to questions within a few hours and can help determine if there is an issue with your code or the challenge's tests.
+
+If the forum members determine there is nothing wrong with your code, you can request this issue to be reopened.
+
+Thank you and happy coding.
+```
+
+> When an issue is duplicate of an earlier issue
+
+```markdown
+Thank you for reporting this issue.
+
+This is a standard message notifying you that this issue appears to be very similar to issue #XXXXX, so we are closing it as a duplicate.
+
+If you think we're wrong in closing this issue, please request for it to be reopened and add further clarification. Thank you and happy coding.
+```
+
+> When an issue is fixed in staging.
+
+```markdown
+Thank you for reporting this issue.
+
+This is a standard message notifying you that the problem you mentioned here is present in production, but that it has already been fixed in staging. This means that the next time we push our staging branch to production, this problem should be fixed. Because of this, we're closing this issue.
+
+If you think we're wrong in closing this issue, please request for it to be reopened and add further clarification. Thank you and happy coding.
+```
diff --git a/docs/i18n/espanol/FAQ.md b/docs/i18n/espanol/FAQ.md
index 23d506c1ae..35f0e81ba7 100644
--- a/docs/i18n/espanol/FAQ.md
+++ b/docs/i18n/espanol/FAQ.md
@@ -60,7 +60,7 @@ Por lo general, no asignamos los números a nadie más que a los colaboradores d
**Siéntete libre de pedir ayuda en:**
- La categoría de `colaboradores` de [nuestro foro de la comunidad](https://forum.freecodecamp.org/c/contributors).
-- El canal `#Contributors` en [nuestro servidor de la comunidad de Discord](https://discord.gg/pFspAhS).
+- The `#Contributors` channel on [our chat server](https://chat.freecodecamp.org/channel/contributors).
Estamos encantados de ayudarte a contribuir a cualquiera de los temas en los que te gustaría trabajar. Si nos hace preguntas sobre los temas relacionados, estaremos encantados de aclararlos. Asegúrese de buscar su pregunta antes de publicar una nueva.
diff --git a/docs/i18n/espanol/_sidebar.md b/docs/i18n/espanol/_sidebar.md
index 133494af3f..c485ebf17e 100644
--- a/docs/i18n/espanol/_sidebar.md
+++ b/docs/i18n/espanol/_sidebar.md
@@ -8,32 +8,24 @@
- [Trabaja en los desafíos de video](how-to-help-with-video-challenges.md)
- [ Trabajar en el tema de noticias](how-to-work-on-the-news-theme.md)
- [Trabaja en la documentación](how-to-work-on-the-docs-theme.md)
-- **Guías Opcionales**
- - [Captura correos electrónicos salientes localmente](how-to-catch-outgoing-emails-locally.md)
- - [Configurar freeCodeCamp en WSL](how-to-setup-wsl.md)
+- **Translation Contribution**
+ - [Translating a Curriculum File](how-to-translate-files.md)
+ - [Proofreading a Curriculum File](how-to-proofread-files.md)
+- **Optional Guides**
+ - [Catch outgoing emails locally](how-to-catch-outgoing-emails-locally.md)
+ - [Set up freeCodeCamp on WSL](how-to-setup-wsl.md)
+ - [Add Cypress tests](how-to-add-cypress-tests.md)
+ - [How to Translate the Website](how-to-translate-the-website.md)
---
-
-
-- **中文社区贡献指南**
- - [成为专栏作者](/i18n/Chinese/news-author-application.md)
- - [文章翻译计划](/i18n/Chinese/news-translations.md)
- - [视频翻译计划](/i18n/Chinese/video-translations.md)
-
-
+- **Flight Manuals** (for Staff & Mods)
+ - [Moderator Handbook](moderator-handbook.md)
+ - [DevOps Handbook](devops.md)
---
-- **Manuales de Vuelo** (para el Personal & Moderadores)
- - [Manual del Moderador](moderator-handbook.md)
- - [Plantillas de Respuesta](moderator-handbook?id=using-reply-templates)
- - [Manual de DevOps](devops.md)
-
----
-
-- **Nuestra Comunidad**
+- **Our Community**
- [**GitHub**](https://github.com/freecodecamp/freecodecamp)
- [**Discourse Forum**](https://freecodecamp.org/forum/c/contributors)
- - [**Gitter Chat**](https://gitter.im/FreeCodeCamp/Contributors)
- - [**Discord Server**](https://discord.gg/pFspAhS)
+ - [**Chat Server**](https://chat.freecodecamp.org/home)
diff --git a/docs/i18n/espanol/devops.md b/docs/i18n/espanol/devops.md
index 95b2d4c407..0bb98401ef 100644
--- a/docs/i18n/espanol/devops.md
+++ b/docs/i18n/espanol/devops.md
@@ -10,13 +10,13 @@ Este repositorio se construye, prueba y despliega continuamente para ** separar
Esto involucra tres pasos que deben seguirse en secuencia:
-1. Los nuevos cambios (ambos, correcciones y funcionalidades) son mezclados en nuestra rama principal de desarrollo (`master`) mediante pull requests.
+1. New changes (both fixes and features) are merged into our primary development branch (`main`) via pull requests.
2. Estos cambios son ejecutados a través de una serie de pruebas automatizadas.
3. Una vez que las pruebas se completan de forma satisfactoria, publicamos los cambios (o los actualizamos si es necesario) para desplegarlos en nuestra infraestructura.
#### Construyendo la base de código - Mapeando las Ramas de Git con los Despliegues.
-Usualmente, [`master`](https://github.com/freeCodeCamp/freeCodeCamp/tree/master) (la rama de desarrollo por defecto) es fusionada con la rama [`production-staging`](https://github.com/freeCodeCamp/freeCodeCamp/tree/production-staging) una vez al día, y publicada dentro de una infraestructura que se encuentra aislada.
+Typically, [`main`](https://github.com/freeCodeCamp/freeCodeCamp/tree/main) (the default development branch) is merged into the [`production-staging`](https://github.com/freeCodeCamp/freeCodeCamp/tree/production-staging) branch once a day and is released into an isolated infrastructure.
Esta es una publicación intermedia para nuestros desarrolladores y colaboradores voluntarios. También es conocida como nuestra publicación "staging" o "beta".
@@ -28,7 +28,7 @@ Esta es la versión final que despliega los cambios a nuestras plataformas de pr
#### Pruebas de cambios - Pruebas de Integración y Aceptación del Usuario.
-Empleamos varios niveles de pruebas de integración y aceptación para verificar la calidad del código. Todas nuestras pruebas se realizan a través de software como [Travis CI](https://travis-ci.org/freeCodeCamp/freeCodeCamp) y [Azure Pipelines](https://dev.azure.com/freeCodeCamp-org/freeCodeCamp).
+Empleamos varios niveles de pruebas de integración y aceptación para verificar la calidad del código. All our tests are done through software like [GitHub Actions CI](https://github.com/freeCodeCamp/freeCodeCamp/actions) and [Azure Pipelines](https://dev.azure.com/freeCodeCamp-org/freeCodeCamp).
Contamos con pruebas unitarias para probar nuestras soluciones a los desafíos, las API del Servidor y las interfaces de Usuario. Estas nos ayudan a probar la integración entre diferentes componentes.
@@ -69,21 +69,21 @@ Actualmente, solo los miembros del equipo de desarrolladores pueden enviar cambi
upstream git@github.com:freeCodeCamp/freeCodeCamp.git (push)
```
-2. Asegúrate de que tu rama `master` no tiene cambios pendientes y esté sincronizada con el upstream.
+2. Make sure your `maim` branch is pristine and in sync with the upstream.
```sh
- git checkout master
+ git checkout main
git fetch --all --prune
- git reset --hard upstream/master
+ git reset --hard upstream/main
```
-3. Comprueba que Travis CI se está ejecutando sobre la rama `master` para el flujo upstream.
+3. Check that the GitHub CI is passing on the `main` branch for upstream.
- Las pruebas de [integración continua](https://travis-ci.com/github/freeCodeCamp/freeCodeCamp/branches) deben estar en verde y en estado PASSING para la rama `master`.
+ The [continuous integration](https://github.com/freeCodeCamp/freeCodeCamp/actions) tests should be green and PASSING for the `main` branch. Click the green check mark next to the commit hash when viewing the `main` branch code.
- Comprobando el estado en Travis CI (captura de pantalla)
+ Checking status on GitHub Actions (screenshot)
- 
+ 
Si esto está fallando debes detenerte e investigar los errores.
@@ -94,11 +94,11 @@ Actualmente, solo los miembros del equipo de desarrolladores pueden enviar cambi
npm run clean-and-develop
```
-5. Mueva los cambios desde `master` a `production-staging` mediante una fusión fast-forward
+5. Move changes from `main` to `production-staging` via a fast-forward merge
```
git checkout production-staging
- git merge master
+ git merge main
git push upstream
```
@@ -166,15 +166,13 @@ Una vez que uno de los miembros del personal apruebe una publicación, el flujo
Aquí está el estado actual de las pruebas, compilación y despliegue del código base.
-| Tipo | Rama | Estado | Panel |
-|:-------------------- |:-------------------------------------------------------------------------------------------- |:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |:---------------------------------------------------------------------------------------- |
-| Pruebas CI | [`master`](https://github.com/freeCodeCamp/freeCodeCamp/tree/master) |  | [Ir al panel de estado](https://travis-ci.com/github/freeCodeCamp/freeCodeCamp/branches) |
-| Pruebas CI | [`production-staging`](https://github.com/freeCodeCamp/freeCodeCamp/tree/production-staging) |  | [Ir al panel de estado](https://travis-ci.com/github/freeCodeCamp/freeCodeCamp/branches) |
-| Flujo de Compilación | [`production-staging`](https://github.com/freeCodeCamp/freeCodeCamp/tree/production-staging) | [](https://dev.azure.com/freeCodeCamp-org/freeCodeCamp/_build/latest?definitionId=15&branchName=production-staging) | [Ir al panel de estado](https://dev.azure.com/freeCodeCamp-org/freeCodeCamp/_build) |
-| Flujo de Publicación | [`production-staging`](https://github.com/freeCodeCamp/freeCodeCamp/tree/production-staging) | | [Ir al panel de estado](https://dev.azure.com/freeCodeCamp-org/freeCodeCamp/_release) |
-| Pruebas CI | [`production-current`](https://github.com/freeCodeCamp/freeCodeCamp/tree/production-current) |  | [Ir al panel de estado](https://travis-ci.com/github/freeCodeCamp/freeCodeCamp/branches) |
-| Flujo de Compilación | [`production-current`](https://github.com/freeCodeCamp/freeCodeCamp/tree/production-staging) | [](https://dev.azure.com/freeCodeCamp-org/freeCodeCamp/_build/latest?definitionId=17&branchName=production-current) | [Ir al panel de estado](https://dev.azure.com/freeCodeCamp-org/freeCodeCamp/_build) |
-| Flujo de Publicación | [`production-current`](https://github.com/freeCodeCamp/freeCodeCamp/tree/production-staging) | | [Ir al panel de estado](https://dev.azure.com/freeCodeCamp-org/freeCodeCamp/_release) |
+| Tipo | Rama | Estado | Panel |
+|:---------------- |:-------------------------------------------------------------------------------------------- |:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |:---------------------------------------------------------------------------------------- |
+| Build Pipeline | [`production-staging`](https://github.com/freeCodeCamp/freeCodeCamp/tree/production-staging) | [](https://dev.azure.com/freeCodeCamp-org/freeCodeCamp/_build/latest?definitionId=15&branchName=production-staging) | [Ir al panel de estado](https://dev.azure.com/freeCodeCamp-org/freeCodeCamp/_build) |
+| Release Pipeline | [`production-staging`](https://github.com/freeCodeCamp/freeCodeCamp/tree/production-staging) | | [Ir al panel de estado](https://dev.azure.com/freeCodeCamp-org/freeCodeCamp/_release) |
+| CI Tests | [`production-current`](https://github.com/freeCodeCamp/freeCodeCamp/tree/production-current) |  | [Ir al panel de estado](https://travis-ci.com/github/freeCodeCamp/freeCodeCamp/branches) |
+| Build Pipeline | [`production-current`](https://github.com/freeCodeCamp/freeCodeCamp/tree/production-staging) | [](https://dev.azure.com/freeCodeCamp-org/freeCodeCamp/_build/latest?definitionId=17&branchName=production-current) | [Ir al panel de estado](https://dev.azure.com/freeCodeCamp-org/freeCodeCamp/_build) |
+| Release Pipeline | [`production-current`](https://github.com/freeCodeCamp/freeCodeCamp/tree/production-staging) | | [Ir al panel de estado](https://dev.azure.com/freeCodeCamp-org/freeCodeCamp/_release) |
## Acceso anticipado y pruebas beta
@@ -198,7 +196,7 @@ Actualmente una versión de prueba beta pública está disponible en:
El equipo de desarrollo fusiona los cambios de la rama `production-staging` a `production-current` cuando se publican los cambios. El commit más reciente debe ser lo que ves en vivo en el sitio.
-Puedes identificar la versión exacta desplegada visitando los registros de compilación y despliegue disponibles en la sección de estado. Adicionalmente, también puedes contactarnos en la [sala de chat de contribuyentes](https://gitter.im/FreeCodeCamp/Contributors) para obtener una confirmación.
+Puedes identificar la versión exacta desplegada visitando los registros de compilación y despliegue disponibles en la sección de estado. Alternatively you can also ping us in the [contributors chat room](https://chat.freecodecamp.org/channel/contributors) for a confirmation.
### Limitaciones Conocidas
@@ -216,7 +214,7 @@ Existen algunas limitaciones y problemas conocidos al utilizar la versión beta
El sitio beta es y siempre ha sido para aumentar el desarrollo y las pruebas locales, nada más. No es una promesa de lo que se avecina, sino un vistazo de lo que se está trabajando.
-- #### La página de registro puede verse diferente a la de producción
+- #### Sign in page may look different than production
Usamos un entorno de pruebas para freecodecamp.dev en Auth0 y, por lo tanto, no tenemos la capacidad de configurar un dominio personalizado. Esto hace que todas las redirecciones de peticiones y la página de inicio de sesión aparezcan en un dominio predeterminado como: `https://freecodecamp-dev.auth0.com/`. Esto no afecta la funcionalidad y es lo más cercano a producción que podemos tener.
@@ -502,7 +500,7 @@ sudo su
```console
cd /etc/nginx
git fetch --all --prune
-git reset --hard origin/master
+git reset --hard origin/main
```
3. Prueba y recarga la configuración [con Signals](https://docs.nginx.com/nginx/admin-guide/basic-functionality/runtime-control/#controlling-nginx).
diff --git a/docs/i18n/espanol/how-to-add-cypress-tests.md b/docs/i18n/espanol/how-to-add-cypress-tests.md
new file mode 100644
index 0000000000..f19369f7f5
--- /dev/null
+++ b/docs/i18n/espanol/how-to-add-cypress-tests.md
@@ -0,0 +1,43 @@
+# How to add Cypress tests
+
+When making changes to JavaScript, CSS, or HTML which could change the functionality or layout of a page, it's important to add corresponding [Cypress](https://docs.cypress.io) integration tests.
+
+To learn how to write Cypress tests, or 'specs', please see Cypress' official [documentation](https://docs.cypress.io/guides/getting-started/writing-your-first-test.html).
+
+> Note: When writing tests for freeCodeCamp, remember to add `/* global cy */` to the top of the file to avoid ESLint issues.
+
+### Where to add a test
+
+- Cypress tests are in the `./cypress` directory.
+
+- Cypress tests for a curriculum module are in the corresponding curriculum directory, i.e. `cypress/integration/learn/responsive-web-design/basic-css/index.js`.
+
+### How to run tests
+
+**1. Ensure that MongoDB and client applications are running**
+
+ - [Start MongoDB and seed the database](/how-to-setup-freecodecamp-locally#step-3-start-mongodb-and-seed-the-database)
+
+ - [Start the freeCodeCamp client application and API server](/how-to-setup-freecodecamp-locally#step-4-start-the-freecodecamp-client-application-and-api-server)
+
+**2. Run the cypress tests**
+
+ To run tests against production builds, replace `dev` with `prd` below.
+
+ - To run all tests in the `./cypress` directory:
+
+ ```console
+ npm run cypress:dev:run
+ ```
+
+ - To run a single test:
+
+ ```console
+ npm run cypress:dev:run -- --spec=cypress/pathToYourSpec/youSpecFileName.js
+ ```
+
+ - To create a development build, start the development server, and run all existing cypress end-to-end tests:
+
+ ```console
+ npm run e2e:dev:run
+ ```
diff --git a/docs/i18n/espanol/how-to-catch-outgoing-emails-locally.md b/docs/i18n/espanol/how-to-catch-outgoing-emails-locally.md
index 655c6e6550..b4d4b0bd76 100644
--- a/docs/i18n/espanol/how-to-catch-outgoing-emails-locally.md
+++ b/docs/i18n/espanol/how-to-catch-outgoing-emails-locally.md
@@ -81,7 +81,7 @@ Empieza [a usar MailHog](#using-mailhog).
## Usando MailHog
-Abra una nueva pestaña o ventana del navegador y vaya a [http://localhost:8025](http://localhost:8025) para abrir su bandeja de entrada de MailHog cuando se haya completado la instalación y éste se encuentre funcionando. La bandeja de entrada aparecerá similar a la captura de pantalla de abajo.
+Abra una nueva pestaña o ventana del navegador y vaya a [http://localhost:8025](http://localhost:8025) para abrir su bandeja de entrada de MailHog cuando se haya completado la instalación y éste se encuentre funcionando. The inbox will appear similar to the screenshot below.

diff --git a/docs/i18n/espanol/how-to-help-with-video-challenges.md b/docs/i18n/espanol/how-to-help-with-video-challenges.md
index 77cf40b023..fe2418840c 100644
--- a/docs/i18n/espanol/how-to-help-with-video-challenges.md
+++ b/docs/i18n/espanol/how-to-help-with-video-challenges.md
@@ -2,11 +2,11 @@
Los retos en vídeo son un nuevo tipo de desafío en el currículo de freeCodeCamp.
-Un desafío de vídeo es una pequeña sección de un curso de vídeo completo sobre un tema en particular. Una página de desafío de vídeo inserta un vídeo de YouTube. Cada página de desafío tiene una única pregunta de selección múltiple relacionada con el vídeo. El usuario debe responder correctamente a la pregunta antes de pasar al siguiente desafío de vídeo en el curso.
+Un desafío de vídeo es una pequeña sección de un curso de vídeo completo sobre un tema en particular. Una página de desafío de vídeo inserta un vídeo de YouTube. Cada página de desafío tiene una única pregunta de selección múltiple relacionada con el vídeo. A user must answer the question correctly before moving on to the next video challenge in the course.
Las páginas de desafío de vídeo son creadas por miembros del equipo freeCodeCamp. Los vídeos de YouTube también son subidos por miembros del equipo freeCodeCamp. Muchos de los desafíos de video todavía no tienen preguntas asociadas con ellos.
-Puedes ayudar creando preguntas de selección múltiple relacionadas con las secciones de vídeo y añadiendo las preguntas a los archivos de markdown para los desafíos de video.
+You can help by creating multiple-choice questions related to video sections and adding the questions to the markdown files for the video challenges.
## Plantilla de desafío
@@ -15,185 +15,188 @@ A continuación se muestra una plantilla de cómo se ven los archivos markdown d
````md
---
-id: Identificador Único (alfanumérico, MongoDB_id)
-title: Titulo del Desafío
+id: Unique identifier (alphanumerical, MongoDB_id)
+title: Challenge Title
challengeType: 11
-videoId: 'videoId de Youtube para el desafío de video'
+videoId: 'YouTube videoId for video challenge'
+forumTopicId: 12345
---
-## Descripción
+# --description--
-
-Descripción opcional con información util relacionada con el video.
-
+Challenge description text, in markdown
-## Pruebas
-
-
-
-```yml
-question:
- text: 'Pregunta'
- answers:
- - 'Respuesta Uno'
- - 'Respuesta Dos'
- - 'Respuesta Tres'
- solution: 3
+```html
+
+ example code
+
````
-
+# --question--
+
+These fields are currently used for the multiple-choice Python challenges.
+
+## --text--
+
+The question text goes here.
+
+## --answers--
+
+Answer 1
+
+---
+
+Answer 2
+
+---
+
+More answers
+
+## --video-solution--
+
+The number for the correct answer goes here.
+
````
-## Creando preguntas para los desafíos de video
+## Creating questions for video challenges
-### Accede a los archivos markdown del desafío de video
+### Access the video challenge markdown files
-Puedes encontrar los archivos markdown de los desafíos de video en las siguientes ubicaciones del currículum
+You can find the markdown files for video challenges at the following locations in the curriculum:
-- [Curso de análisis de datos con Python](https://github.com/freeCodeCamp/freeCodeCamp/tree/master/curriculum/challenges/english/08-data-analysis-with-python/data-analysis-with-python-course)
-- [Curso de TensorFlow 2.0](https://github.com/freeCodeCamp/freeCodeCamp/tree/master/curriculum/challenges/english/11-machine-learning-with-python/tensorflow)
-- [Curso de Numpy](https://github.com/freeCodeCamp/freeCodeCamp/tree/master/curriculum/challenges/english/08-data-analysis-with-python/numpy)
-- [Curso de como funcionan las redes neuronales](https://github.com/freeCodeCamp/freeCodeCamp/tree/master/curriculum/challenges/english/11-machine-learning-with-python/how-neural-networks-work)
+- [Data Analysis with Python Course](https://github.com/freeCodeCamp/freeCodeCamp/tree/main/curriculum/challenges/english/08-data-analysis-with-python/data-analysis-with-python-course)
+- [TensorFlow 2.0 Course](https://github.com/freeCodeCamp/freeCodeCamp/tree/main/curriculum/challenges/english/11-machine-learning-with-python/tensorflow)
+- [Numpy Course](https://github.com/freeCodeCamp/freeCodeCamp/tree/main/curriculum/challenges/english/08-data-analysis-with-python/numpy)
+- [How Neural Networks Work Course](https://github.com/freeCodeCamp/freeCodeCamp/tree/main/curriculum/challenges/english/11-machine-learning-with-python/how-neural-networks-work)
-Elige un archivo markdown de las opciones anteriores.
+Pick a challenge markdown file from the options above.
-### Mire superficialmente el video asociado con el desafío y cree una pregunta de opción múltiple
+### Skim through the video associated with the challenge and create a multiple-choice question
-Primero, encuentre el videoId.
+First, find the videoId.
-Por ejemplo, en el siguiente código de la cabecera de un archivo markdown de desafío de video, el videoId es "nVAaxZ34khk". En GitHub, la información debe ser puesta en un formato de tabla.
+Por ejemplo, en el siguiente código de la cabecera de un archivo markdown de desafío de video, el videoId es "nVAaxZ34khk". On GitHub, the information should be laid out in a table format.
````
---
-id: 5e9a093a74c4063ca6f7c14d title: Análisis de datos Ejemplo A challengeType: 11
+id: 5e9a093a74c4063ca6f7c14d title: Data Analysis Example A challengeType: 11
videoId: nVAaxZ34khk
---
```
-A continuación, acceda al vídeo de YouTube con ese videoId. La url del video será:
-https://www.youtube. om/watch?v=[videoId] (añadir videoId a la URL sin corchetes cuadrados)
+Next, access the YouTube video with that `videoId`. The URL for the video will be:
+https://www.youtube.com/watch?v=[videoId] (replace `videoId` in the URL with the video's ID - without square brackets)
-En el ejemplo anterior, la url es https://www. outube.com/watch?v=nVAaxZ34khk
+In the example above, the URL is https://www.youtube.com/watch?v=nVAaxZ34khk
-Mira superficialmente el vídeo de YouTube con ese videoId y piensa en una pregunta de selección múltiple basada en el contenido del vídeo.
+Skim the YouTube video with that videoId and think of a multiple-choice question based on the content of the video.
-### Añade la pregunta al archivo markdown
+### Add the question to the markdown file
-Puedes añadir la pregunta localmente o directamente a través de la interfaz de GitHub. Para añadir la pregunta localmente, necesitas [configurar freeCodeCamp localmente](how-to-setup-freecodecamp-locally.md). También puede encontrar el archivo en GitHub y hacer clic en el botón Editar para añadir la pregunta directamente en su navegador.
+You can add the question locally or using the GitHub interface. Para añadir la pregunta localmente, necesitas [configurar freeCodeCamp localmente](how-to-setup-freecodecamp-locally.md). También puede encontrar el archivo en GitHub y hacer clic en el botón Editar para añadir la pregunta directamente en su navegador.
-Si aún no se ha añadido una pregunta a un desafío de vídeo en particular, tendrá la siguiente pregunta predeterminada:
+If a question has not yet been added to a particular video challenge, it will have the following default question:
-```yml
-question:
- text: |
- Pregunta
- answers:
- - |
- una
- - |
- dos
- - |
- tres
- solution: 3
+```md
+# --question--
+
+## --text--
+
+Question text
+
+## --answers--
+
+Answer 1
+
+---
+
+Answer 2
+
+---
+
+More answers
+
+## --video-solution--
+
+1
```
-Actualiza la palabra "Pregunta" con tu pregunta. Actualiza “una”, “dos”, y “tres” con las posibles respuestas. Asegúrate de actualizar el número de la solución con el que corresponde a la respuesta correcta. Puede añadir más respuestas posibles usando el mismo formato. La pregunta y las respuestas pueden estar rodeadas de comillas.
-
-#### Utiliza markdown para formatear tu pregunta
-
-El texto de la pregunta se analiza como markdown. La forma más simple de asegurarse de que está formateado correctamente es iniciar la pregunta con `texto: |`, así:
-
-```yml
-question:
- text: |
- Pregunta
+Add/Update the question text under the part that shows:
```
+# --question--
-Entonces debes asegurarte de que tu pregunta está en una nueva línea e indentada un nivel mas que `texto: |`.
-
-El mismo enfoque se puede utilizar para las respuestas, de modo que toda la pregunta se convierte
-
-```yml
-question:
- text: |
- Pregunta
- answers:
- - |
- Primera Respuesta
- - |
- Segunda
- - |
- Tercera
- solution: 2
+## --text--
```
-
-Asegúrate de que cada respuesta sea plausible, pero sólo hay una respuesta correcta.
-
-#### Uso de HTML
-
-Las preguntas y respuestas pueden contener ciertas etiquetas HTML como `
` para una nueva línea. Las etiquetas HTML deben ser usadas de forma poco frecuente, cuando las preguntas no pueden ser expresadas sin ellas.
+Add/Update answers (`Answer 1`, `Answer 2`, and so on) under `## --answers--`. Make sure to update the number under `## --video-solution--` with the correct answer number. You can add more possible answers using the same format. The question and answers can be surrounded with quotation marks.
### Ejemplos de preguntas
-#### Ejemplos sin HTML
+````md
+# --question--
-````yml
-question:
- text: |
- ¿Que registra este código JavaScript en la consola?
- ```js
- console.log('hola mundo');
- ````
-
-
- ¡Selecciona una respuesta!
- answers:
- - | hola *mundo*
- - | **hola** mundo
- - | hola mundo solution: 3
+## --text--
+What does this JavaScript code log to the console?
+```js
+console.log('hello world');
````
-````yml
-pregunta:
- text: |
- ¿Qué se imprimirá después de ejecutar este código:
- ```py
- width = 15
- height = 12.
- print(height/3)
- ````
- answers:
- - | 39
- - | 4
- - | 4.0
- - | 5.0
- - | 5 solution: 3
+## --answers--
+
+hello *world*
+
+---
+
+**hello** world
+
+---
+
+hello world
+
+---
+
+## --video-solution--
+3
````
-#### Ejemplo con HTML
+````md
-```yml
-question:
- text: |
- ¿Qué se imprimirá después de ejecutar este código:
- width = 15
height = 12.
print(height/3)
- answers:
- - |
- 39
- - |
- 4
- - |
- 4.
- - |
- 5.
- - |
- 5
- solution: 3
+# --question--
+
+## --text--
+
+What will print out after running this code:
+
+```py
+width = 15
+height = 12.0
+print(height/3)
````
-El ejemplo final demuestra que se puede usar HTML, pero que no es tan legible como la versión sin ella.
+## --answers--
-Para más ejemplos, puede ver los archivos de markdown para el siguiente curso de vídeo. Todos los desafíos ya tienen preguntas: [Curso de Python para todos](https://github.com/freeCodeCamp/freeCodeCamp/tree/master/curriculum/challenges/english/07-scientific-computing-with-python/python-for-everybody)
+39
-## Abrir una pull request
+---
-Después de crear una o más preguntas, puede enviar los cambios a una nueva rama y [abrir una pull request](how-to-open-a-pull-request.md).
+4
+
+---
+
+4.0
+
+---
+
+5.0
+
+---
+
+5
+
+## --video-solution--
+
+3 ````
+
+For more examples, you can look at the markdown files for the following video course. All the challenges already have questions: [Python for Everybody Course](https://github.com/freeCodeCamp/freeCodeCamp/tree/main/curriculum/challenges/english/07-scientific-computing-with-python/python-for-everybody)
+
+## Open a pull request
+
+After creating one or more questions, you can commit the changes to a new branch and [open a pull request](how-to-open-a-pull-request.md).
diff --git a/docs/i18n/espanol/how-to-open-a-pull-request.md b/docs/i18n/espanol/how-to-open-a-pull-request.md
index f30371dc26..dc23f8d33a 100644
--- a/docs/i18n/espanol/how-to-open-a-pull-request.md
+++ b/docs/i18n/espanol/how-to-open-a-pull-request.md
@@ -12,16 +12,16 @@ Recomendamos usar [titulos y mensajes convencionales](https://www.conventionalco
>
> `fix(learn): tests for the do...while loop challenge`
-Al abrir un Pull Request(PR), puede utilizar el siguiente para determinar el tipo, alcance (opcional) y descripción.
+When opening a Pull Request(PR), you can use the below to determine the type, scope (optional), and description.
**Tipo:**
-| Tipo | Cuándo seleccionar |
-|:---------- |:------------------------------------------------------------------------------------------- |
-| fijar | Funciones modificadas o actualizadas/mejoradas, pruebas, verbiage de una lección, etc. |
-| hazaña | Sólo si está añadiendo nuevas funcionalidades, pruebas, etc. |
-| coro | Cambios que no están relacionados con el código, las pruebas o la verborrea de una lección. |
-| documentos | Cambios al directorio `/docs` o a las pautas de contribución, etc. |
+| Tipo | Cuándo seleccionar |
+|:----- |:-------------------------------------------------------------------------------- |
+| fix | Changed or updated/improved functionality, tests, the verbiage of a lesson, etc. |
+| feat | Sólo si está añadiendo nuevas funcionalidades, pruebas, etc. |
+| chore | Changes that are not related to code, tests, or verbiage of a lesson. |
+| docs | Cambios al directorio `/docs` o a las pautas de contribución, etc. |
**Alcance:**
@@ -34,7 +34,7 @@ Manténgalo corto (menos de 30 caracteres) y simple, puede agregar más informac
Algunos ejemplos de buenos títulos PRs serían:
- `fix(a11y): contraste mejorado en la barra de búsqueda`
-- `feat: añadir más pruebas a challenges html y css`
+- `feat: add more tests to HTML and CSS challenges`
- `fix(api,client): evitar errores CORS en el envío de formularios`
- `docs(i18n): Traducción al chino de la configuración local`
@@ -44,13 +44,13 @@ Algunos ejemplos de buenos títulos PRs serían:

-2. Por defecto, todas las pull requests deben estar en contra del repositorio principal freeCodeCamp `master` branch.
+2. By default, all pull requests should be against the freeCodeCamp main repo, `main` branch.
Asegúrese de que su bifurcación base está configurada en freeCodeCamp/freeCodeCamp al elevar una solicitud de Pull Request.

-3. Envía el pull request de tu rama a la rama `master` de freeCodeCamp.
+3. Submit the pull request from your branch to freeCodeCamp's `main` branch.
4. En el cuerpo de sus relaciones públicas incluya un resumen más detallado de los cambios realizados y por qué.
@@ -62,9 +62,11 @@ Algunos ejemplos de buenos títulos PRs serían:
> Ejemplo: `Cerrar #123` cerrará el problema 123
-5. Indique si ha probado en una copia local del sitio o no.
+5. Indicate if you have tested on a local copy of the site or not.
- Esto es muy importante a la hora de hacer cambios que no sean sólo ediciones al contenido de texto como la documentación o una descripción del desafío. Ejemplos de cambios que necesitan pruebas locales incluyen JavaScript, CSS o HTML que podrían cambiar la funcionalidad o el diseño de una página.
+ - This is very important when making changes that are not just edits to text content like documentation or a challenge description. Examples of changes that need local testing include JavaScript, CSS, or HTML which could change the functionality or layout of a page.
+
+ - If your PR affects the behaviour of a page it should be accompanied by corresponding [Cypress integration tests](/how-to-add-cypress-tests).
## Comentarios sobre pull requests
@@ -72,7 +74,7 @@ Algunos ejemplos de buenos títulos PRs serían:
Nuestros moderadores ahora echarán un vistazo y te dejarán tus comentarios. Por favor, sea paciente con los demás moderadores y respete su tiempo. Todos los pull requests son revisados a su debido tiempo.
-Y como siempre, siéntete libre de hacer preguntas en la categoría ['Colaboradores' en nuestro foro](https://forum.freecodecamp.org/c/contributors) o [nuestro servidor de Discord](https://discord.gg/pFspAhS).
+And as always, feel free to ask questions on the ['Contributors' category on our forum](https://forum.freecodecamp.org/c/contributors) or [the contributors chat room](https://chat.freecodecamp.org/channel/contributors).
> [!TIP] Si quieres contribuir con más solicitudes de extracción, te recomendamos que leas las directrices [haciendo cambios y sincronizando](https://contribute.freecodecamp.org/#/how-to-setup-freecodecamp-locally?id=making-changes-locally) para evitar tener que borrar tu bifurcación.
@@ -84,13 +86,13 @@ La mayoría de las veces no puede requerir una rebase, porque aplastamos todos l
### Para arreglos de errores y características habituales
-Cuando trabajas con errores y características regulares en nuestra rama de desarrollo `master`, puedes hacer una simple rebase:
+When you are working on regular bugs and features on our development branch `main`, you are able to do a simple rebase:
1. Reiniciar su copia local:
```console
git checkout
- git pull --rebase upstream master
+ git pull --rebase upstream main
```
2. Resolver cualquier conflicto y añadir / editar commits
@@ -118,7 +120,7 @@ Cuando estás trabajando en funciones para nuestro próximo currículo `siguient
1. Asegúrese de que su autor está sincronizado con su local:
```console
- git checkout master
+ git checkout main
git fetch --all --prune
git checkout next-python-projects
git reset --hard upstream/next-python-projects
diff --git a/docs/i18n/espanol/how-to-proofread-files.md b/docs/i18n/espanol/how-to-proofread-files.md
new file mode 100644
index 0000000000..e579f38175
--- /dev/null
+++ b/docs/i18n/espanol/how-to-proofread-files.md
@@ -0,0 +1,40 @@
+# Como revisar traducciones
+
+Nuestro equipo de revisión es responsable de asegurarse que las traducciones sean un reflejo fiel del texto original.
+
+Para comenzar a revisar y aprobar traducciones, visita [ nuestro sitio de traducciones](https://translate.freecodecamp.org) e inicia sesión. Luego, selecciona "Go to console" (ir a la consola) en la barra de navegación superior, para cambiar de la vista pública (public view) a la vista de trabajo (workspace view).
+
+## Seleccionar un archivo
+
+Deberías ver una lista de los proyectos para los que te concedieron acceso. Selecciona el proyecto que quieres revisar y luego selecciona el idioma.
+
+
+
+Ahora podrás ver la lista de archivos disponibles. Selecciona un archivo haciendo clic en el botón `Proofread` que se encuentra a la derecha de ese archivo, y luego selecciona la opción `Proofreading` del menú desplegable que se abrirá.
+
+> [!NOTE] Si estás en la vista "workspace" pero quieres trabajar en [traducir un archivo](./how-to-translate-files.md) en lugar de corregirlo, puedes seleccionar la opción `Crowdsourcing` del menú desplegable.
+
+## Revisar traducciones
+
+
+
+
+
+Aquí podrás ver una lista de segmentos del archivo seleccionado, cada uno con sus traducciones propuestas. La traducción que se muestra aquí es aquella que haya recibido el puntaje más alto de la comunidad de traductores (tomando en cuenta votos positivos y negativos).
+
+Si bien puedes ver *todas* las traducciones propuestas para un segmento, deberías tener en cuenta los puntajes de la comunidad (que se determinan según los votos positivos y negativos) para decidir cuál de las traducciones aprobarás. La comunidad puede revisar las traducciones propuestas y recomendar cuál es la más clara y apropiada.
+
+1. Este es el segmento original (en inglés).
+2. Este es el segmento traducido que le corresponde. Aquí se mostrará la traducción propuesta más popular, según sus votos positivos y negativos.
+3. Al hacer clic en este botón de tilde aprobarás esa traducción.
+4. Crowdin mostrará el estado de cada segmento. `Done` (listo) significa que una traducción ha sido aprobada y que será descargada en el próximo pull de Crowdin. `Todo` (por hacer o "to do") significa que el segmento aún no ha sido revisado. `Hidden` significa que el segmento está bloqueado (locked) y *no se debe traducir*. `Comment` significa que el segmento incluye un comentario.
+5. Puedes usar las casillas de verificación para seleccionar varias traducciones y aprobarlas en un solo paso.
+6. Aquí puedes ver las traducciones propuestas por la comunidad, sus puntajes de popularidad y las traducciones sugeridas por Crowdin.
+7. Este botón muestra/oculta el panel del lado derecho, donde puedes ver traducciones, comentarios, la memoria de traducciones y el glosario de términos.
+8. Crowdin muestra aquí los mensajes de error de las verificaciones de calidad (QA / quality assurance). En otras palabras, Crowdin te notificará si algo en la traducción no parece estar correcto. Estas traducciones deberían ser aprobadas cuidadosamente.
+
+> [!WARNING] Si un segmento es aprobado durante la revisión, se mostrará como finalizado en la vista de proofreading y será descargado en el próximo pull de Crowdin a GitHub.
+
+Cuando un archivo ha sido corregido, no se requiere ningún paso adicional. Si tienes alguna pregunta o te interesa colaborar como corrector, por favor contáctanos en nuestra [sala de chat de traductores](https://chat.freecodecamp.org/channel/translators).
+
+> [!NOTE] Crowdin te permite aprobar tus propias traducciones. Sin embargo, en general suele ser mejor permitir que otro corrector revise tus traducciones propuestas como medida adicional para asegurarse que no hayan errores.
diff --git a/docs/i18n/espanol/how-to-setup-freecodecamp-locally.md b/docs/i18n/espanol/how-to-setup-freecodecamp-locally.md
index 963be1c535..1e2ab07258 100644
--- a/docs/i18n/espanol/how-to-setup-freecodecamp-locally.md
+++ b/docs/i18n/espanol/how-to-setup-freecodecamp-locally.md
@@ -63,7 +63,7 @@ Esto es esencial, ya que te permite trabajar en tu propia copia de freeCodeCamp
> [!TIP] El repositorio principal en `https://github.com/freeCodeCamp/freeCodeCamp` es frecuentemente conocido como el repositorio `upstream`.
>
-> Su bifurcación en `https://github.com/YOUR_USER_NAME/freeCodeCamp` suele referirse como el repositorio `origen`.
+> Your fork at `https://github.com/YOUR_USER_NAME/freeCodeCamp` is often referred to as the `origin` repository. `YOUR_USER_NAME` would be replaced with your GitHub username.
**Sigue estos pasos para fork el repositorio `https://github.com/freeCodeCamp/freeCodeCamp`:**
@@ -71,7 +71,7 @@ Esto es esencial, ya que te permite trabajar en tu propia copia de freeCodeCamp
2. Haga clic en el botón "Fork" en la esquina superior derecha de la interfaz ([Más detalles aquí](https://help.github.com/articles/fork-a-repo/))
-3. Después de que el repositorio haya sido bifurcado, serás redirigido a tu copia del repositorio freeCodeCamp en `https://github.com/YOUR_USER_NAME/freeCodeCamp`
+3. After the repository has been forked, you will be taken to your copy of the freeCodeCamp repository at `https://github.com/YOUR_USER_NAME/freeCodeCamp` (`YOUR_USER_NAME` would be replaced with your GitHub user name.)
@@ -79,12 +79,16 @@ Esto es esencial, ya que te permite trabajar en tu propia copia de freeCodeCamp
-
+
## Clona tu bifurcación desde GitHub
-[Clonando](https://help.github.com/articles/cloning-a-repository/) es donde **descarga** una copia de un repositorio desde una ubicación `remota` que es propiedad de usted o de otra persona. En su caso, esta ubicación remota es su `fork` del repositorio de freeCodeCamp que debería estar disponible en `https://github.com/YOUR_USER_NAME/freeCodeCamp`.
+[Clonando](https://help.github.com/articles/cloning-a-repository/) es donde **descarga** una copia de un repositorio desde una ubicación `remota` que es propiedad de usted o de otra persona. En su caso, esta ubicación remota es su `fork` del repositorio de freeCodeCamp que debería estar disponible en `https://github.com/YOUR_USER_NAME/freeCodeCamp`. (`YOUR_USER_NAME` would be replaced with your GitHub user name.)
+
+> [!WARNING] If you are working on a WSL2 Linux Distro, you might get performance and stability issues by running this project in a folder which is shared between Windows and WSL2 (e.g. `/mnt/c/Users/`). Therefore we recommend to clone this repo into a folder which is mainly used by your WSL2 Linux Distro and not directly shared with Windows (e.g. `~/PROJECTS/`).
+>
+> See [this GitHub Issue](https://github.com/freeCodeCamp/freeCodeCamp/issues/40632) for further Information about this problem.
Ejecutar estos comandos en su máquina local:
@@ -128,7 +132,7 @@ Necesita una referencia de su clon local al repositorio `upstream` además del r
git remote -v
```
- La salida debería verse algo como a continuación:
+ The output should look something like below (replacing `YOUR_USER_NAME` with your GitHub username):
```console
origin https://github.com/YOUR_USER_NAME/freeCodeCamp.git (fetch)
@@ -147,13 +151,13 @@ Ahora que tienes una copia local de freeCodeCamp, puedes seguir estas instruccio
Si tiene problemas, primero realice una búsqueda web para su problema y compruebe si ya ha sido respondida. Si no encuentra una solución, por favor busque en nuestra página [GitHub issues](https://github.com/freeCodeCamp/freeCodeCamp/issues) para una solución e infórmese del problema si aún no ha sido reportado.
-Y como siempre, siéntete libre de hacer preguntas en la categoría ['Colaboradores' en nuestro foro](https://forum.freecodecamp.org/c/contributors) o [nuestro servidor de Discord](https://discord.gg/pFspAhS).
+And as always, feel free to ask questions on the ['Contributors' category on our forum](https://forum.freecodecamp.org/c/contributors) or [our chat server](https://chat.freecodecamp.org/home).
-> [!TIP] Puedes omitir la ejecución de freeCodeCamp localmente si simplemente estás editando archivos. Por ejemplo, realizar un `rebase` o resolver conflictos `merge`.
+> [!TIP] You may skip running freeCodeCamp locally if you are simply editing files. For instance, performing a `rebase`, or resolving `merge` conflicts.
>
-> Siempre puede volver a esta parte de las instrucciones más tarde. Debería **saltar** este paso si no necesita ejecutar las aplicaciones en su máquina.
+> You can always return to this part of the instructions later. You should **only** skip this step if you do not need to run the apps on your machine.
>
-> [Saltar a hacer cambios](#making-changes-locally).
+> [Skip to making changes](#making-changes-locally).
### Configurando dependencias
@@ -174,7 +178,7 @@ copy sample.env .env
Las llaves dentro del archivo `.env` _no_ requieren ser cambiadas para correr la aplicación de forma local. Puedes dejar los valores por defecto copiados desde `sample.env` tal cual.
-> [!TIP] Ten en cuenta si quieres usar servicios como Auth0 o Algolia, tendrás que adquirir tus propias claves API para esos servicios y editar las entradas en el archivo `.env`.
+> [!TIP] Keep in mind if you want to use services like Auth0 or Algolia, you'll have to acquire your own API keys for those services and edit the entries accordingly in the `.env` file.
#### Paso 2: Instalar dependencias
@@ -188,7 +192,7 @@ npm ci
Antes de que pueda ejecutar la aplicación localmente, necesitará iniciar el servicio MongoDB.
-> [!NOTE] A menos que tenga MongoDB corriendo en una configuración diferente a la predeterminada, la URL almacenada como el valor `MONGOHQ_URL` en el `. el archivo nv` debería funcionar bien. Si está utilizando una configuración personalizada, modifique este valor según sea necesario.
+> [!NOTE] Unless you have MongoDB running in a setup different than the default, the URL stored as the `MONGOHQ_URL` value in the `.env` file should work fine. If you are using a custom configuration, modify this value as needed.
Iniciar el servidor MongoDB en un terminal separado:
@@ -206,7 +210,7 @@ Iniciar el servidor MongoDB en un terminal separado:
Asegúrate de reemplazar `3.6` con la versión instalada
-> [!TIP] Puedes evitar tener que iniciar MongoDB cada vez instalándolo como un servicio en segundo plano. Puede [aprender más al respecto en su documentación para su sistema operativo](https://docs.mongodb.com/manual/administration/install-community/)
+> [!TIP] You can avoid having to start MongoDB every time by installing it as a background service. You can [learn more about it in their documentation for your OS](https://docs.mongodb.com/manual/administration/install-community/)
A continuación, vamos a sembrar la base de datos. En este paso, ejecutamos el siguiente comando que llena el servidor MongoDB con algunos conjuntos de datos iniciales que son requeridos por los servicios. Estos incluyen algunos esquemas, entre otras cosas.
@@ -224,11 +228,11 @@ desarrollo de ejecución npm
Este único comando lanzará todos los servicios, incluyendo el servidor API y las aplicaciones cliente disponibles para que usted trabaje.
-> [!NOTE] Una vez listo, abre un navegador web y **visita **. Si la aplicación se carga, enhorabuena: ¡ya estás listo! Ahora tiene una copia de toda la plataforma de aprendizaje de freeCodeCamp ejecutándose en su máquina local.
+> [!NOTE] Once ready, open a web browser and **visit **. If the app loads, congratulations – you're all set! You now have a copy of freeCodeCamp's entire learning platform running on your local machine.
-> [!TIP] El servidor API sirve APIs en `http://localhost:3000`. La aplicación Gatsby sirve a la aplicación cliente en `http://localhost:8000`
+> [!TIP] The API Server serves APIs at `http://localhost:3000`. The Gatsby app serves the client application at `http://localhost:8000`
-> Si visita debería ver las API disponibles.
+> If you visit you should see the available APIs.
## Iniciar sesión con un usuario local
@@ -253,7 +257,7 @@ Ahora puede hacer cambios en archivos y confirmar los cambios en su clon local d
Siga estos pasos:
-1. Validar que estás en la rama de `master`:
+1. Validate that you are on the `main` branch:
```console
git status
@@ -262,25 +266,25 @@ Siga estos pasos:
Deberías obtener una salida como esta:
```console
- En branch master
- Su rama está actualizada con 'origin/master'.
+ On branch main
+ Your branch is up-to-date with 'origin/main'.
nada para confirmar, limpiar directorio
```
- Si no estás en el directorio maestro o tu directorio de trabajo no está limpio, resuelve cualquier archivo/commits pendientes y comprueba `master`:
+ If you are not on main or your working directory is not clean, resolve any outstanding files/commits and checkout `main`:
```console
- git checkout master
+ git checkout main
```
-2. Sincroniza los últimos cambios desde la rama principal freeCodeCamp `master` a tu rama maestra local:
+2. Sync the latest changes from the freeCodeCamp upstream `main` branch to your local main branch:
- > [!WARNING] Si tienes algún pull request pendiente que hayas hecho desde la rama `master` de tu bifurcación, los perderás al final de este paso.
+ > [!WARNING] If you have any outstanding pull request that you made from the `main` branch of your fork, you will lose them at the end of this step.
>
- > Debería asegurarse de que su pull request está fusionado por un moderador antes de realizar este paso. Para evitar este escenario, deberías **siempre** trabajar en una rama que no sea el `maestro`.
+ > Debería asegurarse de que su pull request está fusionado por un moderador antes de realizar este paso. To avoid this scenario, you should **always** work on a branch other than the `main`.
- Este paso **sincronizará los últimos cambios** desde el repositorio principal de freeCodeCamp. Es importante que rebase su rama sobre la última `upstream/master` tan a menudo como sea posible para evitar conflictos más tarde.
+ Este paso **sincronizará los últimos cambios** desde el repositorio principal de freeCodeCamp. It is important that you rebase your branch on top of the latest `upstream/main` as often as possible to avoid conflicts later.
Actualiza tu copia local del repositorio de freeCodeCamp upstream:
@@ -288,31 +292,31 @@ Siga estos pasos:
git obtener arriba
```
- Restablece tu rama maestra con el maestro freeCodeCamp:
+ Hard reset your main branch with the freeCodeCamp main:
```console
- git reset --hard upstream/master
+ git reset --hard upstream/main
```
- Empuje su rama maestra a su origen para tener un historial limpio en su bifurcación en GitHub:
+ Push your main branch to your origin to have a clean history on your fork on GitHub:
```console
- git push origin master --force
+ git push origin main --force
```
- Puedes validar tu maestro actual concuerda con el autor / maestro realizando un difusión:
+ You can validate your current main matches the upstream/main by performing a diff:
```console
- git diff upstream/master
+ git diff upstream/main
```
La salida resultante debe estar vacía.
3. Crear una nueva rama:
- Trabajar en una rama separada para cada asunto le ayuda a mantener limpia su copia de trabajo local. Nunca deberías trabajar en el maestro ``. Esto sumergirá su copia de freeCodeCamp y puede que tenga que empezar con un clon o un tenedor fresco.
+ Trabajar en una rama separada para cada asunto le ayuda a mantener limpia su copia de trabajo local. You should never work on the `main`. Esto sumergirá su copia de freeCodeCamp y puede que tenga que empezar con un clon o un tenedor fresco.
- Comprueba que estás en `master` como se explicó anteriormente, y ramificar desde ahí:
+ Check that you are on `main` as explained previously, and branch off from there:
```console
git checkout -b fix/update-guide-for-xyz
@@ -348,15 +352,15 @@ Siga estos pasos:
En función/documentación de la rama
Su rama está actualizada con 'upstream/feat/documentation'.
- Cambios no escalonados para commit:
- (use "git add/rm ... para actualizar lo que se comprometerá)
- (use "git checkout -- . ." para descartar los cambios en el directorio de trabajo)
+ Changes were not staged for commit:
+ (use "git add/rm ..." to update what will be committed)
+ (use "git checkout -- ..." to discard changes in the working directory)
- modificado: CONTRIBUTING. d
- modificado: docs/README.md
- modificado: docs/how-to-setup-freecodecamp-locally. d
- modified: docs/how-to-work-on-guide-articles.md
-...
+ modified: CONTRIBUTING.md
+ modified: docs/README.md
+ modified: docs/how-to-setup-freecodecamp-locally.md
+ modified: docs/how-to-work-on-guide-articles.md
+ ...
```
8. Etapar los cambios y hacer una confirmación:
@@ -382,16 +386,16 @@ Siga estos pasos:
Salida:
```console
- En función/documentación de la rama
- Su rama está actualizada con 'upstream/feat/documentation'.
+ On branch feat/documentation
+ Your branch is up to date with 'upstream/feat/documentation'.
- Cambios a comprometir:
- (use "git reset HEAD ..." para desfasar)
+ Changes to be committed:
+ (use "git reset HEAD ..." to unstage)
- modificado: CONTRIBUTING.md
- modificado: docs/README.md
- modificado: docs/how-to-setup-freecodecamp-locally.md
- modificado: docs/how-to-work-on-guide-articles.md
+ modified: CONTRIBUTING.md
+ modified: docs/README.md
+ modified: docs/how-to-setup-freecodecamp-locally.md
+ modified: docs/how-to-work-on-guide-articles.md
```
Ahora, puede confirmar sus cambios con un mensaje corto así:
@@ -403,8 +407,8 @@ Siga estos pasos:
Algunos ejemplos:
```md
- fix: actualizar artículo de guía para Java - para bucle
- función: añadir artículo de guía para habilidades de alexa
+ fix: update guide article for Java - for loop
+ feat: add guide article for alexa skills
```
Opcional:
@@ -426,7 +430,7 @@ Siga estos pasos:
Puedes aprender más sobre por qué debes usar commits convencionales [aquí](https://www.conventionalcommits.org/en/v1.0.0-beta.2/#why-use-conventional-commits).
-9. Si te das cuenta de que necesitas editar un archivo o actualizar el mensaje de confirmación después de hacer un commit puedes hacerlo después de editar los archivos con:
+9. If you realize that you need to edit a file or update the commit message after making a commit you can do so after editing the files with:
```console
git commit --amend
@@ -452,32 +456,32 @@ Una referencia rápida a los comandos que necesitará cuando trabaje localmente.
| -------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
| `npm ci` | Instala / reinstala todas las dependencias y arranca los diferentes servicios. |
| `npm run seed` | Analiza todos los archivos markdown del desafío e inserta en MongoDB. |
-| `desarrollo de ejecución npm` | Inicia el servidor freeCodeCamp API y las aplicaciones de cliente. |
-| `prueba npm` | Ejecutar todas las pruebas JS en el sistema, incluyendo las pruebas de clientes, servidores, lint y challenge. |
-| `npm ejecutar prueba:cliente` | Ejecute la suite de pruebas del cliente. |
+| `npm run develop` | Inicia el servidor freeCodeCamp API y las aplicaciones de cliente. |
+| `npm test` | Ejecutar todas las pruebas JS en el sistema, incluyendo las pruebas de clientes, servidores, lint y challenge. |
+| `npm run test:client` | Ejecute la suite de pruebas del cliente. |
| `npm run test:curriculum` | Ejecute la suite de pruebas de currículum. |
-| `npm run test:curriculum --block='HTML básico y HTML5'` | Evalúa un bloque específico. |
+| `npm run test:curriculum --block='Basic HTML and HTML5'` | Evalúa un bloque específico. |
| `npm run test:curriculum --superblock='responsive-web-design'` | Evalúa un SuperBlock específico. |
-| `npm ejecuta test-curriculum-full-output` | Ejecutar el programa de prueba de currículo, sin tener que pagar después del primer error |
-| `ejecutar npm test:server` | Ejecute la suite de pruebas del servidor. |
-| `npm ejecutar e2e` | Ejecute el Cypress end para terminar las pruebas. |
-| `npm correr limpio` | Desinstala todas las dependencias y limpia los cachés. |
+| `npm run test-curriculum-full-output` | Ejecutar el programa de prueba de currículo, sin tener que pagar después del primer error |
+| `npm run test:server` | Ejecute la suite de pruebas del servidor. |
+| `npm run e2e` | Ejecute el Cypress end para terminar las pruebas. |
+| `npm run clean` | Desinstala todas las dependencias y limpia los cachés. |
## Solución de problemas
### Problemas con la instalación de los prerrequisitos recomendados
-Regularmente desarrollamos los últimos o más populares sistemas operativos como macOS 10.15 o posterior, Ubuntu 18.04 o posterior y Windows 10 (con WSL2).
+We regularly develop on the latest or most popular operating systems like macOS 10.15 or later, Ubuntu 18.04 or later, and Windows 10 (with WSL2).
-Se recomienda investigar tu problema específico en recursos como Google, Stack Overflow y Stack Exchange. Existe una buena posibilidad de que alguien se haya enfrentado al mismo problema y ya haya una respuesta a su pregunta específica.
+It is recommended to research your specific issue on resources such as Google, Stack Overflow, and Stack Exchange. Existe una buena posibilidad de que alguien se haya enfrentado al mismo problema y ya haya una respuesta a su pregunta específica.
Si estás en un sistema operativo diferente y/o todavía tienes problemas, consulta [obtener ayuda](#getting-help).
> [!WARNING]
>
-> Por favor, evite crear problemas de GitHub para problemas de prerrequisitos. Están fuera del ámbito de este proyecto.
+> Please avoid creating GitHub issues for prerequisite issues. They are out of the scope of this project.
-### Problemas con la interfaz de usuario, fuentes, errores de compilación, etc.
+### Issues with the UI, Fonts, build errors, etc.
Si usted se enfrenta a problemas con la interfaz de usuario, fuentes o ver errores de compilación, una limpieza puede ser útil:
@@ -493,12 +497,12 @@ O
Usar el acceso directo
```
-npm ejecuta limpieza y desarrollo
+npm run clean-and-develop
```
Si continúa enfrentándose a problemas con la construcción, se recomienda limpiar el espacio de trabajo.
-Usa `git clean` en modo interactivo:
+Use `git clean` in interactive mode:
```
git clean -ifdX
@@ -513,7 +517,7 @@ git clean -ifdX
-### Problemas con API, Login, Desafío de presentaciones, etc.
+### Issues with API, login, Challenge Submissions, etc.
Si no puedes iniciar sesión, y en su lugar ves un banner con un mensaje de error que será reportado a freeCodeCamp, por favor, comprueba que tu puerto local `3000` no esté en uso por un programa diferente.
@@ -537,10 +541,10 @@ TCP 0.0.0.0:3000 DESKTOP LISTENING
Si obtiene errores durante la instalación de las dependencias, por favor asegúrese de que no está en una red restringida o sus ajustes de cortafuegos no le impiden acceder a los recursos.
-La primera configuración puede tardar un rato dependiendo del ancho de banda de su red. Ten paciencia, y si aún estás atascado te recomendamos usar GitPod en lugar de una configuración sin conexión.
+La primera configuración puede tardar un rato dependiendo del ancho de banda de su red. Be patient, and if you are still stuck we recommend using GitPod instead of an offline setup.
## Obteniendo ayuda
-Si estás atascado y necesitas ayuda, Siéntete libre de hacer preguntas en la categoría de ['Colaboradores' en nuestro foro](https://forum.freecodecamp.org/c/contributors) o [nuestro servidor de Discord](https://discord.gg/pFspAhS).
+If you are stuck and need help, feel free to ask questions on the ['Contributors' category on our forum](https://forum.freecodecamp.org/c/contributors) or [the contributors chat room](https://chat.freecodecamp.org/channel/contributors).
Puede haber un error en la consola de su navegador o en Bash / Terminal / Command Line que le ayudará a identificar el problema. Proporcione este mensaje de error en la descripción de su problema para que otros puedan identificar el problema más fácilmente y ayudarle a encontrar una solución.
diff --git a/docs/i18n/espanol/how-to-translate-files.md b/docs/i18n/espanol/how-to-translate-files.md
new file mode 100644
index 0000000000..1fb92f79f6
--- /dev/null
+++ b/docs/i18n/espanol/how-to-translate-files.md
@@ -0,0 +1,88 @@
+# Cómo traducir un archivo
+
+> [!NOTE] Todas las traducciones se manejan a través de https://translate.freecodecamp.org, ya no utilizamos GitHub para traducir archivos directamente.
+
+Para comenzar, dirígete a nuestro sitio web de traducciones e inicia sesión (si no has contribuido en traducciones antes, deberás crear una cuenta).
+
+## Selecciona un proyecto y un archivo
+
+Deberías ver dos "proyectos" disponibles para traducir: el proyecto `Contributing Documentation`, que contiene los archivos para este sitio de documentación, y el proyecto `Coding Curriculum`, que contiene nuestros archivos de desafío para la sección `/learn`.
+
+Selecciona el proyecto en el que deseas contribuir y verás una lista de idiomas disponibles para traducir.
+
+
+
+Selecciona el idioma en el que deseas trabajar y verás el árbol de archivos completo.
+
+
+
+Cada archivo y carpeta mostrará una barra de progreso. La parte **azul** de la barra de progreso indica qué porcentaje del archivo se ha traducido, mientras que la parte **verde** de la barra de progreso indica qué porcentaje del archivo ha sido aprobado por el equipo de revisión.
+
+Selecciona un archivo para trabajar y Crowdin abrirá la vista de edición.
+
+## Traducir un archivo
+
+
+
+Crowdin separa un documento en "cadenas" traducibles, normalmente oraciones. Cada cadena se traduce individualmente. Tomando como referencia la imagen anterior:
+
+1. Una cadena resaltada en verde ya tiene una traducción propuesta.
+2. Una cadena resaltada en rojo _no_ tiene una traducción propuesta.
+3. Una cadena con texto en gris no es traducible. Este es el caso de los bloques de código y otros contenidos que no deben traducirse. No podrás seleccionar estas cadenas en el editor.
+4. Si un contribuyente ha propuesto una traducción a una cadena, Crowdin mostrará esas propuestas aquí. No podrás guardar una traducción idéntica, en su lugar, si una traducción es precisa, debes hacer clic en el ícono `+` para votar a su favor. Puedes votar en contra de una traducción inexacta con el icono `-`.
+5. Crowdin recomendará traducciones basadas en la Translation Memory (TM) o la Machine Translation (MT). La Translation Memory (memoria de traducción) remite hacia cadenas similares o idénticas que hemos traducido/aprobado en otros archivos. La Machine Translation (traducción automática) remite hacia las traducciones recomendadas por su biblioteca integrada.
+6. Este es el panel del editor, donde puedes escribir tu propuesta de traducción para la cadena seleccionada.
+7. La cadena seleccionada actualmente en el editor se resaltará en amarillo.
+8. Aquí verás etiquetas que indican el estado de la cadena. `Done` (hecho) significa que la cadena tiene al menos una traducción propuesta. `Todo` (por hacer) significa que la cadena no tiene ninguna traducción propuesta.
+9. Aquí puedes ver la ventana de comentarios. Si tienes preguntas o inquietudes sobre una cadena en particular, puedes dejar aquí un comentario sobre la cadena para que lo vean otros traductores.
+10. Estos dos botones de "panel" ocultarán las vistas izquierda (documento) y derecha (comentarios).
+
+> [!NOTE] Si ves una cadena oculta que incluye traducciones, notifícanos en la [ sala de chat de traductores ](https://chat.freecodecamp.org/channel/translators) para que podamos eliminar la traducción de la memoria.
+
+Cuando hayas completado la traducción de una cadena, pulsa el botón `Save` (guardar) para almacenar tu traducción en Crowdin. Luego, otros contribuyentes podrán votar tu traducción y los proofreaders podrán aprobarla.
+
+Eres bienvenido a traducir tantas cadenas como desees, no se requieren pasos adicionales cuando completas todo un archivo o propones una nueva traducción. Hacer clic en el botón `Save` es todo lo que se necesita para almacenar una traducción.
+
+> [!NOTE] Si ves algo en el archivo fuente en inglés que sea inexacto o incorrecto, no lo corrijas a través del flujo de traducción. En su lugar, deja un comentario en la cadena para notificarnos que hay una discrepancia, o crea un issue en GitHub.
+
+### Traducir la documentación
+
+Traducir nuestra documentación de contribución es un proceso similar a traducir nuestros archivos de currículo.
+
+> [!NOTE] Nuestra documentación de contribución esta basada en `docsify`, y tenemos una forma especial de procesar los cuadros de mensaje como este. Si ves cadenas que comiencen con `[!NOTE]`, `[!WARNING]` o ` [!TIP]`, estas palabras NO deben traducirse.
+
+## Calificar traducciones
+
+Crowdin te permite calificar las traducciones propuestas existentes. Si intentas guardar una traducción, es posible que veas un mensaje que indica que no puedes guardar una traducción duplicada, esto significa que otro contribuyente ha propuesto una traducción idéntica. Si estás de acuerdo con esa traducción, haz clic en el botón `+` para votar a favor de la traducción.
+
+Si ves una traducción que es inexacta o no proporciona la misma claridad que la cadena original, haz clic en el botón `-` para votar en contra de la traducción.
+
+Crowdin usa estos votos para dar una puntuación a cada traducción propuesta para una cadena, lo que ayuda al equipo de revisión a determinar qué traducción es la mejor para cada cadena.
+
+## Comprobaciones de control de calidad
+
+Hemos habilitado algunos pasos de control de calidad que verificarán que una traducción sea lo más precisa posible, esto ayuda a nuestros proofreaders a revisar las traducciones propuestas.
+
+Cuando intentes guardar una traducción, es posible que veas aparecer un mensaje de advertencia con una notificación sobre tu traducción propuesta.
+
+
+
+Este mensaje aparece cuando el sistema de control de calidad de Crowdin ha identificado un posible error en la traducción propuesta. En este ejemplo, hemos modificado el texto de una etiqueta `` y Crowdin lo ha detectado.
+
+> [!WARNING] Tienes la opción de guardar una traducción a pesar de los errores, pero esto debe hacerse solo en circunstancias en las que el error pueda ser incorrecto.
+
+Crowdin a veces convierte etiquetas HTML (como ``) en valores numéricos, como `<0>text0>` o `<1>text1>`. Estas etiquetas suelen ser etiquetas de código y nuestro control de calidad verificará que no se hayan traducido. Sin embargo, a veces pueden ser etiquetas `` o ``, que _deberían_ ser traducidas. Si pasas el cursor sobre una etiqueta numérica en la cadena de origen, puedes ver qué etiqueta o etiquetas HTML se han reemplazado:
+
+
+
+Si las etiquetas reemplazadas son algo que debería traducirse (como las etiquetas `strong`), traduce el contenido dentro de las etiquetas y selecciona "Save Anyway" (guardar de todos modos) cuando aparezca el error. Luego, deja un comentario en la cadena explicando que las etiquetas son `strong` (por ejemplo) para que otros traductores y proofreaders sepan que deben traducirse.
+
+## Buenas prácticas de traducción
+
+Sigue estas pautas para asegurarte de que nuestras traducciones sean lo más precisas posible:
+
+- No traduzcas el contenido dentro de las etiquetas ``. Estas etiquetas indican texto que se encuentra en el código y deben dejarse en inglés.
+- No agregues contenido adicional. Si crees que un desafío requiere cambios en el contenido del texto o información adicional, debes proponer los cambios a través de un issue de GitHub o una pull request que modifique el archivo en inglés.
+- No cambies el orden del contenido.
+
+Si tienes alguna pregunta, no dudes en comunicarte con nosotros en nuestra [sala de chat de traductores](https://chat.freecodecamp.org/channel/translators) y estaremos encantados de ayudarte.
diff --git a/docs/i18n/espanol/how-to-translate-the-website.md b/docs/i18n/espanol/how-to-translate-the-website.md
new file mode 100644
index 0000000000..eba0014eb9
--- /dev/null
+++ b/docs/i18n/espanol/how-to-translate-the-website.md
@@ -0,0 +1,197 @@
+The client/react side of our website is translated into various world languages using [react-i18next](https://react.i18next.com/) and [i18next](https://www.i18next.com/).
+
+> [!NOTE] This does not include the curriculum
+
+## File Structure
+
+The files for translating the website are located in the `client/i18n` folder. Each language has a folder within that containing JSON files with the translations.
+
+The values in the `translations.json` file contain the majority of the text that appears on the website. The keys are used in the codebase to get the correct text for whatever language is set. This file needs to have the exact same keys in all languages.
+
+The `motivation.json` files are not required to have the same quotes, compliments, or array length. Just the same JSON structure.
+
+## Adding a Language
+
+To add a new language, create a folder with the language name as the title next to the other languages and copy the JSON files from another language into your new folder.
+
+In the `allLangs.js` file, add the language to the `client` array in the first variable. Then, follow the instructions in the comments to add the rest of the necessary variables.
+
+## How to Translate
+
+After a new language is added, you just need to translate the JSON files into the language.
+
+Here are some tips:
+- Only translate the values in the JSON files, the keys need to stay the same
+- The English versions of the JSON files are the "source of truth" for what needs to be translated. If you are unsure what text to translate, find the matching key in the English version of the file and translate that text
+- Be sure to escape double quotes (`\"`) in the strings if you need to use them
+- Most of the time, when you see text wrapped in number tags (`<0>`text`0>`) tags, it's a link. It is okay to change the text that it is wrapped around. Just keep the same tags.
+- A value that has something like `{{value}}` in it is a variable. Don't change any of those characters. You can move that whole group of characters around though.
+
+There's some [help on how make changes and open a PR here](/how-to-setup-freecodecamp-locally).
+
+## Running it Locally
+
+Set the `CLIENT_LOCALE` variable in your `.env` file to the locale you want to build.
+
+> [!NOTE] The value needs to be one of the client languages available in `client/i18n/allLangs.js`
+
+## How to Structure Components
+
+### Functional Component
+
+```js
+import { useTranslation } from 'react-i18next';
+
+// in the render method:
+const { t } = useTranslation();
+
+// call the "t" function with a key from the JSON file:
+{t('key')}
// more details below
+```
+
+### Class Component
+```js
+import { withTranslation } from 'react-i18next';
+
+// withTranslation adds the "t" function to props:
+const { t } = this.props;
+
+// call the "t" function with a key from the JSON file:
+{t('key')}
// more details below
+
+// export without redux:
+export default withTranslation()(Component);
+
+// or with redux:
+export default connect(...)(withTranslation()(Component));
+```
+
+## Translate Using the "t" Function
+
+### Basic Translation
+
+```js
+// in the component:
+{t('p1')}
+
+// in the JSON file:
+{
+ "p1": "My paragraph"
+}
+
+// output:
+My paragraph
+```
+
+### With Dynamic Data
+
+```js
+// in the component:
+const username = 'moT';
+
+{t('welcome', { username: username })}
+
+// in the JSON file:
+{
+ "welcome": "Welcome {{username}}"
+}
+
+// output:
+Welcome moT
+```
+
+The above example passes an object to the `t` function with a `username` variable. The variable will be used in the JSON value where `{{username}}` is.
+
+## Translate with the \ Component
+
+The general rule is to use the "t" function when you can. But there's a `Trans` component for when that isn't enough, usually when you have elements embedded in the text. You can use the `Trans` component with any type of react component.
+
+### Basic Elements Nested
+
+```js
+// in the component:
+import { Trans } from 'react-i18next'
+
+
+ fcc.greeting
+
+
+// in the JSON file:
+{
+ "fcc": {
+ "greeting": "Welcome to freeCodeCamp"
+ }
+}
+
+// output:
+Welcome to freeCodeCamp
+```
+
+You can place the key inside the component tags like the above example if the text contains "simple" tags with no attributes. `br`, `strong`, `i`, and `p` are the default, but that list can be expanded in the i18n config.
+
+### Complex Elements Nested
+
+Other times, you will want to have certain text inside another element, an anchor tag is a good example:
+
+```js
+// in the component:
+
+
+ placeholder
+
+
+
+// in the JSON file:
+{
+ "check-forum": "Check out <0>our forum0>."
+}
+
+// output:
+Check out our forum
+```
+
+In the above example, the key is set in the attributes of the `Trans` component. The `<0>` and `0>` in the JSON represent the first child of the component, in this case, the anchor element. If there were more children, they would just count up from there using the same syntax. You can find the children of a component in the react dev tools by inspecting it. `placeholder` is simply there because the linter was complaining at me about an empty `` element.
+
+### With a Variable
+
+```js
+// in the component:
+const email = 'team@freecodecamp.org';
+
+
+
+
+ {{ email }}
+
+
+
+
+// in the JSON file:
+{
+ "fcc": {
+ "email": "Send us an email at: <0>{{email}}0>"
+ }
+}
+
+// output:
+Send us an email at: team@freecodecamp.org
+```
+
+In the above example, the key and a variable are set in the attributes of the `Trans` component. `{{ email }}` needs to be somewhere in the `Trans` component as well, it doesn't matter where.
+
+## Helpful Documentation
+
+- [react-i18next docs](https://react.i18next.com/latest/usetranslation-hook)
+- [i18next docs](https://www.i18next.com/translation-function/essentials)
+
+## Changing Text
+
+To change text on the client side of things, go to the `translations.json` file, find the key that is being used in the react component, and change the value to the new text you want. You should search the codebase for that key to make sure it isn't being used elsewhere. Or, if it is, that the changes make sense in all places.
+
+## Adding Text
+
+If the text you want to add to the client exists in the `translations.json` file, use the existing key. No sense in creating another one.
+
+The `translations-schema.js` file is the "source of truth" for all of the `translations.json` files. If you need to add a new key, add it there. Then, add the key to **all** of the `translations.json` files with placeholder text in the langauges you don't know. The tests will fail if you don't. It would be nice to keep the keys in the same order across all the files as well. Also, try to put all punctuation, spacing, quotes, etc in the JSON files and not in the components or server files.
+
+> [!NOTE] The underscore (`_`) is a reserved character for keys in the client side files. See [the documentation](https://www.i18next.com/translation-function/plurals) for how they are used.
diff --git a/docs/i18n/espanol/how-to-use-docker-on-windows-home.md b/docs/i18n/espanol/how-to-use-docker-on-windows-home.md
index 5a1cb1e3af..424535623e 100644
--- a/docs/i18n/espanol/how-to-use-docker-on-windows-home.md
+++ b/docs/i18n/espanol/how-to-use-docker-on-windows-home.md
@@ -1,8 +1,8 @@
# Cómo utilizar Docker en Windows Home
-Hay unas cuantas fallas que evitar al configurar docker en Windows Home. En primer lugar, tienes que usar [Docker Toolbox](https://docs.docker.com/toolbox/toolbox_install_windows/) como administrador. Desafortunadamente, Windows Home no soporta Docker para Windows Desktop, por lo que se debe utilizar Toolbox en su lugar. Tiene que ejecutarse como Administrador, ya que la instalación utiliza enlaces simbólicos, los cuales no se pueden crear de otra manera.
+There are a few pitfalls to be avoided when setting up Docker on Windows Home. First of all, you have to use [Docker Toolbox](https://docs.docker.com/toolbox/toolbox_install_windows/) as Administrator. Desafortunadamente, Windows Home no soporta Docker para Windows Desktop, por lo que se debe utilizar Toolbox en su lugar. Tiene que ejecutarse como Administrador, ya que la instalación utiliza enlaces simbólicos, los cuales no se pueden crear de otra manera.
-Una vez instalado Toolbox, ejecute Docker Quickstart Terminal como Administrador. Esto creará una máquina virtual `predeterminada`, si no existía anteriormente. Una vez que esto haya ocurrido, cierre la terminal y abra VirtualBox (otra vez como Administrador). Debería ser capaz de ver la máquina `predeterminada`. El sitio es bastante intensivo en recursos, así que detén la máquina virtual y aumenta la configuración tanto como puedas - memoria en particular. Se ha confirmado que trabaja con 4GB de ram.
+Una vez instalado Toolbox, ejecute Docker Quickstart Terminal como Administrador. This will create a `default` virtual machine if it does not already exist. Una vez que esto haya ocurrido, cierre la terminal y abra VirtualBox (otra vez como Administrador). Debería ser capaz de ver la máquina `predeterminada`. The site is quite resource-intensive, so stop the virtual machine and raise the settings as much as you can - memory in particular. Se ha confirmado que trabaja con 4GB de ram.
Una vez que estés contento de que Docker está funcionando, clona el repositorio freeCodeCamp en un directorio dentro de `C:\Users`. Estos directorios son compartidos dando acceso a los directorios locales que necesita Docker durante la instalación.
@@ -12,4 +12,4 @@ Si ves mensajes como
bash: change_volumes_owner.sh: No such file or directory
```
-al ejecutar `npm run docker:init` es probable que esto sea el culpable.
+al ejecutar `npm run docker:init` es probable que esto sea el culpable.
\ No newline at end of file
diff --git a/docs/i18n/espanol/how-to-work-on-coding-challenges.md b/docs/i18n/espanol/how-to-work-on-coding-challenges.md
index adf8f12272..24d7d76f5a 100644
--- a/docs/i18n/espanol/how-to-work-on-coding-challenges.md
+++ b/docs/i18n/espanol/how-to-work-on-coding-challenges.md
@@ -10,13 +10,13 @@ Ten en cuenta que para la versión 7.0 del plan de estudios gratuito, estamos av
La creación de estos desafíos requiere una inmensa creatividad y atención al detalle. Hay mucha ayuda disponible. Tendrás el apoyo de todo un equipo de colaboradores a los que podrás comentar tus ideas y demostrar tus desafíos.
-Y como siempre, siéntete libre de hacer preguntas en la categoría ['Colaboradores' en nuestro foro](https://forum.freecodecamp.org/c/contributors) o [nuestro servidor de Discord](https://discord.gg/pFspAhS).
+And as always, feel free to ask questions on the ['Contributors' category on our forum](https://forum.freecodecamp.org/c/contributors) or [the contributors chat room](https://chat.freecodecamp.org/channel/contributors).
-Con tu ayuda podemos diseñar un plan de estudios interactivo de codificación que ayudará a millones de personas a aprender a programar durante los años por venir.
+With your help, we can design an interactive coding curriculum that will help millions of people learn to code for years to come.
-El contenido de cada desafío se almacena en su propio archivo markdown. Este archivo markdown se convierte más tarde en HTML utilizando nuestras herramientas para crear páginas web interactivas.
+The content for each challenge is stored in its markdown file. Este archivo markdown se convierte más tarde en HTML utilizando nuestras herramientas para crear páginas web interactivas.
-Puedes encontrar todo el contenido curricular de freeCodeCamp.org en el directorio [`/curriculum/challenges`](https://github.com/freeCodeCamp/freeCodeCamp/tree/master/curriculum/challenges).
+You can find all of freeCodeCamp.org's curricular content in the [`/curriculum/challenges`](https://github.com/freeCodeCamp/freeCodeCamp/tree/main/curriculum/challenges) directory.
## Configurar las herramientas para el plan de estudios
@@ -27,162 +27,204 @@ Antes de trabajar en el plan de estudios, necesitarás configurar algunas herram
[](https://gitpod.io/#https://github.com/freeCodeCamp/freeCodeCamp)
-- Editar los archivos de la interfaz de GitHub haciendo clic en el icono del lápiz del archivo correspondiente. Aunque esta es la manera más rápida, **no se recomienda**, ya que no puedes probar tus cambios en GitHub. Si nuestros mantenedores concluyen que los cambios hechos necesitan ser probados localmente, necesitaras seguir uno de los métodos anteriores en su lugar.
+- Editar los archivos de la interfaz de GitHub haciendo clic en el icono del lápiz del archivo correspondiente. Aunque esta es la manera más rápida, **no se recomienda**, ya que no puedes probar tus cambios en GitHub. If our maintainers conclude that the changes you made need to be tested locally, you would need to follow the methods above instead.
## Plantilla de desafío
-A continuación se muestra una plantilla de cómo se ven los archivos markdown de los desafíos. Para ver la plantilla streamlined vamos a adoptar ver [abajo](#upcoming-challenge-template).
-
````md
+
---
-id: Identificador único (alfanumérico, MongoDB_id)
-title: Título del Desafío
-challengeType: 0
-videoUrl: 'url of video explication'
+id: Unique identifier (alphanumerical, MongoDB_id)
+title: 'Challenge Title'
+challengeType: Integer, defined in `client/utils/challengeTypes.js`
+videoUrl: 'url of video explanation'
+forumTopicId: 12345
---
-## Descripción
+# --description--
-
-Una descripción del desafío y lo que se requiere para pasar
-
+Challenge description text, in markdown
-## Instrucciones
-
-
-Instrucciones acerca de lo que exactamente se necesita hacer.
-
-
-## Prueba
-
-
-
-```yml
-tests:
- - text: Debe devolver "foo"
- testString: 'Una función stringificada posiblemente usando asertos Chai'
+```html
+
+ example code
+
````
-
+# --instructions--
-## Semilla del Desafío
+Challenge instruction text, in markdown
-
+# --hints--
-
+Tests to run against user code, in pairs of markdown text and code block test code.
-```{ext}
-Código mostrado en el editor por defecto.
-
-Esta es una sección requerida para el desafío.
+```js
+Code for test one
```
-
+More instructions in markdown syntax
-### Antes de la prueba
-
-
-
-```{ext}
-Código opcional de configuración de la prueba.
+```js
+More code
```
-
+# --seed--
-### Después de la prueba
+## --before-user-code--
-
-
-```{ext}
-Código desgarrador opcional de la prueba.
+```lang
+Code evaluated before the user’s code.
```
-
+## --after-user-code--
-
-
-## Solución
-
-
-
-```{ext}
-// solución requerida
+```lang
+Code evaluated after the user’s code, and just before the tests
```
-
+## --seed-contents--
+
+Boilerplate code to render to the editor. This section should only contain code inside backticks, like the following:
+
+```html
+
+
+ Hello world!
+
+
+```
+
+```css
+body {
+ margin: 0;
+ background-color: #3a3240;
+}
+
+.main-text {
+ color: #aea8d3;
+}
+```
+
+```js
+console.log('freeCodeCamp is awesome!');
+```
+
+# --solutions--
+
+Solutions are used for the CI tests to ensure that changes to the hints will still pass as intended
+
+```js
+// first solution - the language(s) should match the seed.
+```
+
+---
+
+```js
+// second solution - so if the seed is written in HTML...
+```
+
+---
+
+```js
+// third solution etc. - Your solutions should be in HTML.
+```
+
+# --question--
+
+These fields are currently used for the multiple-choice Python challenges.
+
+## --text--
+
+The question text goes here.
+
+## --answers--
+
+Answer 1
+
+---
+
+Answer 2
+
+---
+
+More answers
+
+## --video-solution--
+
+The number for the correct answer goes here.
+
````
> [!NOTE]
>
-> 1. En las secciones anteriores, ejemplos de `{ext}` son:
+> 1. In the above sections, examples of `lang` are:
>
> - `html` - HTML/CSS
> - `js` - JavaScript
> - `jsx` - JSX
->
-> 2. Para la sección 'Tests' de arriba, 'text' y 'testString' deben ser cadenas YAML válidas. `testString` puede ser una función o expresión stringificada usando los asertos de Chai.
## Numbering Challenges
-Cada desafío necesita un `id`. Si no especifica uno, entonces MongoDB creará una nueva al azar cuando guarde los datos; sin embargo, no queremos que haga eso, ya que queremos que los ids del desafío sean consistentes en diferentes entornos (escenario, de producción, muchos desarrolladores diferentes, etc.).
+Every challenge needs an `id`. If you don't specify one, then MongoDB will create a new random one when it saves the data; however, we don't want it to do that, since we want the challenge ids to be consistent across different environments (staging, production, lots of different developers, etc.).
-Para generar uno nuevo en un shell (asumiendo que MongoDB se está ejecutando por separado):
+To generate a new one in a shell (assuming MongoDB is running separately):
-1. Ejecuta el comando `mongo`.
-2. Ejecuta el comando `ObjectId()`.
+1. Run `mongo` command.
+2. Run `ObjectId()` command.
-Por ejemplo:
+For example:
```bash
$ mongo
-MongoDB shell versión v3.6.1
-conectando a: mongodb://127.0.0.1:27017
-Versión del servidor MongoDB: 3.4.10
+MongoDB shell version v3.6.1
+connecting to: mongodb://127.0.0.1:27017
+MongoDB server version: 3.4.10
...
$ ObjectId()
ObjectId("5a474d78df58bafeb3535d34")
````
-El resultado es un id nuevo, por ejemplo `5a474d78df58bafeb35d34` arriba.
+The result is a new id, for example `5a474d78df58bafeb3535d34` above.
-Una vez que tengas tu id, ponlo en el archivo markdown como el campo `id` en la parte superior, p.ej.
+Once you have your id, put it into the markdown file as the `id` field at the top, e.g.
```yml
---
id: 5a474d78df58bafeb3535d34
-título: Título del Desafío
+title: Challenge Title
```
-## Nombrando desafíos
+## Naming challenges
-Nombrar cosas es difícil. Lo hemos hecho más fácil imponiendo algunas restricciones.
+Naming things is hard. We've made it easier by imposing some constraints.
-Todos los títulos del desafío deben ser explícitos y deben seguir este patrón:
+All challenge titles should be explicit and should follow this pattern:
-\[verb\]\[cláusula del objeto\]
+\[verb\]\[object clause\]
-Aquí hay algunos ejemplos de nombres de desafíos:
+Here are some example challenge names:
- Utilice Notación en sentido de la derecha para especificar el relleno de un elemento
-- Condensar arreglos con .reduce
+- Condense arrays with .reduce
- Utilice la notación de corchete para encontrar el primer carácter en una cadena
-## Descripciones e instrucciones del desafío
+## Challenge descriptions/instructions
-Las frases deben ser claras y concisas con la mínima jerga. Si se utiliza, la jerga debe definirse inmediatamente en español sencillo.
+Sentences should be clear and concise with minimal jargon. If used, jargon should be immediately defined in plain English.
-Mantenga los párrafos cortos (alrededor de 1-4 oraciones). Es más probable que la gente lea varios párrafos cortos que un muro de texto.
+Keep paragraphs short (around 1-4 sentences). People are more likely to read several short paragraphs than a wall of text.
-El texto del desafío debe usar la segunda persona ("tú") para ayudar a darle un tono de conversación. De esta manera el texto y las instrucciones parecen hablar directamente con el acampador trabajando a través del desafío. Trate de evitar usar la primera persona ("yo", "nosotros", "let's", y "nosotros").
+Challenge text should use the second person ("you") to help to give it a conversational tone. This way the text and instructions seem to speak directly to the camper working through the challenge. Try to avoid using the first person ("I", "we", "let's", and "us").
-No utilice enlaces salientes. Estos interrumpen el flujo. Los campistas no deben tener que googlear nada durante estos desafíos. Si hay recursos de los que piensas que los campistas se beneficiarían, añádelos al artículo relacionado con la guía del desafío.
+Don't use outbound links. These interrupt the flow. Campers should never have to google anything during these challenges. If there are resources you think campers would benefit from, add them to the challenge's Guide-related article.
-Puedes añadir diagramas si es absolutamente necesario.
+You can add diagrams if necessary.
-No utilices emojis o emoticonos en desafíos. freeCodeCamp tiene una comunidad global, y el significado cultural de un emoji o emoticono puede ser diferente en distintas partes del mundo. Además, los emojis pueden renderizarse de manera diferente en sistemas diferentes.
+Don't use emojis or emoticons in challenges. freeCodeCamp has a global community, and the cultural meaning of an emoji or emoticon may be different around the world. Also, emojis can render differently on different systems.
-Los sustantivos adecuados deben usar una capitalización correcta cuando sea posible. A continuación se muestra una lista de palabras como deberían aparecer en los desafíos.
+Proper nouns should use correct capitalization when possible. Below is a list of words as they should appear in the challenges.
- JavaScript (mayúsculas en "J" y "S" y sin abreviaturas)
- Node.js
@@ -190,127 +232,126 @@ Los sustantivos adecuados deben usar una capitalización correcta cuando sea pos
### La regla de los 2 minutos
-Cada desafío debe ser resuelto en un plazo de 120 segundos por un hablante nativo de español que haya completado los desafíos que lo preceden. Esto incluye la cantidad de tiempo que se tarda en leer las direcciones/instrucciones para entender el código seed, escribir su propio código y conseguir que pasen todas las pruebas.
+Each challenge should be solvable within 120 seconds by a native English speaker who has completed the challenges leading up to it. This includes the amount of time it takes to read the directions/instructions understand the seeded code, write their code and get all the tests to pass.
-Si toma más de dos minutos completar el desafío, tienes dos opciones:
+If it takes longer than two minutes to complete the challenge, you have two options:
- Simplificar el desafío, o
- Dividir el desafío en dos desafíos.
-La regla de 2 minutos te obliga, como diseñador de desafíos, a hacer tus instrucciones concisas, tu código de semilla claro y tus pruebas directas.
+The 2-minute rule forces you, the challenge designer, to make your directions concise, your seed code clear, and your tests straight-forward.
-Seguimos el tiempo que tardan los campistas en resolver los cambios y utilizar esta información para identificar los desafíos que necesitan ser simplificados o divididos.
+We track how long it takes for campers to solve changes and use this information to identify challenges that need to be simplified or split.
### Modularidad
-Cada desafío debería enseñar exactamente un concepto, y ese concepto debería quedar claro en el nombre del desafío.
+Each challenge should teach exactly one concept, and that concept should be apparent from the challenge's name.
-Podemos reforzar los conceptos anteriormente cubiertos mediante la repetición y las variaciones - por ejemplo, introduciendo elementos h1 en un desafío, luego h3 elementos unos pocos retos más adelante.
+We can reinforce previously covered concepts through repetition and variations - for example, introducing h1 elements in one challenge, then h3 elements a few challenges later.
-Nuestro objetivo es tener miles de retos de 2 minutos. Estos pueden fluir juntos y reiterar conceptos cubiertos anteriormente.
+Our goal is to have thousands of 2-minute challenges. These can flow together and reiterate previously-covered concepts.
### Formateando el texto del desafío
-Aquí hay pautas de formato específicas para el texto del desafío y los ejemplos:
+Here are specific formatting guidelines for challenge text and examples:
-- Las palabras clave del lenguaje van en etiquetas ``. Por ejemplo, nombres de etiquetas HTML o nombres de propiedades CSS
-- La primera instancia de una palabra clave cuando está siendo definida, o palabras clave generales (por ejemplo, "object" o "inmutable") ir en etiquetas ``
-- Las referencias a las partes del código (es decir, funciones, métodos o nombres de variables) deben estar envueltas en etiquetas ``. Ver el ejemplo a continuación:
+- Language keywords go in `` \` `` backticks. For example, HTML tag names or CSS property names.
+- References to code parts (i.e. function, method, or variable names) should be wrapped in `` \` `` backticks. See example below:
```md
-Use parseInt
para convertir la variable real Number
en un entero.
+Use `parseInt` to convert the variable `realNumber` into an integer.
```
-- Las referencias a los nombres de archivos y directorios de rutas (por ejemplo, `package.json`, `src/components`) deben estar envueltas en etiquetas ``.
-- Los bloques de código de múltiples líneas **deben estar precedidos por una línea vacía**. La siguiente línea debe comenzar con tres backticks seguidos inmediatamente por uno de los [idiomas soportados](https://prismjs.com/#supported-languages). Para completar el bloque de código, debe iniciar una nueva línea que solo tiene tres backticks y **otra línea vacía**. Ver el ejemplo a continuación:
+- References to file names and path directories (e.g. `package.json`, `src/components`) should be wrapped in `` \` `` backticks.
+- Los bloques de código de múltiples líneas **deben estar precedidos por una línea vacía**. La siguiente línea debe comenzar con tres backticks seguidos inmediatamente por uno de los [idiomas soportados](https://prismjs.com/#supported-languages). To complete the code block, you must start a new line which only has three backticks and **another empty line**. Ver el ejemplo a continuación:
+- Whitespace matters in Markdown, so we recommend that you make it visible in your editor.
-**Nota:** Si vas a utilizar un código de ejemplo en YAML, use `yaml` en lugar de `yml` para el idioma a la derecha de los backticks.
+**Note:** If you are going to use an example code in YAML, use `yaml` instead of `yml` for the language to the right of the backticks.
+The following is an example of code:
````md
-El siguiente es un ejemplo de código:
-
```{language}
-[TU CÓDIGO AQUÍ]
+[YOUR CODE HERE]
````
````
-- La información adicional en forma de una nota debe ser formateada `Nota: El texto restante de la nota...
-- Si se necesitan varias notas. then list all of the notes in separate sentences using the format `Note: First note text. Segunda nota texto.`.
-- Utilizar comillas simples donde sea aplicable
+- Additional information in the form of a note should be surrounded by blank lines, and formatted: `**Note:** Rest of note text...`
+- If multiple notes are needed, then list all of the notes in separate sentences using the format: `**Notes:** First note text. Second note text.`
+- Use single-quotes where applicable
-**Nota:** Se debe utilizar el equivalente _Markdown_ en lugar de etiquetas _HTML_.
+**Note:** The equivalent _Markdown_ should be used in place of _HTML_ tags.
-## Pruebas de escritura
+## Writing tests
-Los desafíos deben tener el número mínimo de pruebas necesarias para verificar que un campador entienda un concepto.
+Challenges should have the minimum number of tests necessary to verify that a camper understands a concept.
-Nuestro objetivo es comunicar el único punto que el reto está tratando de enseñar y comprobar que han comprendido ese punto.
+Our goal is to communicate the single point that the challenge is trying to teach, and test that they have understood that point.
-Las pruebas de desafío pueden hacer uso de las librerías de aserción de Node.js y Chai.js. Además, si es necesario, se puede acceder al código generado por el usuario en la variable `code`.
+Challenge tests can make use of the Node.js and Chai.js assertion libraries. Also, if needed, user-generated code can be accessed in the `code` variable.
-## Código de semilla de formato
+## Formatting seed code
-Aquí están las pautas de formato específicas para el código de semilla del reto:
+Here are specific formatting guidelines for the challenge seed code:
-- Utilice dos espacios para indentar
-- Las declaraciones de JavaScript terminan con punto y coma
-- Utilice comillas dobles donde sea aplicable
+- Use two spaces to indent
+- JavaScript statements end with a semicolon
+- Use double quotes where applicable
-### Comentarios de código de semilla
+### Seed code comments
-Tenemos un [diccionario de comentarios](/curriculum/dictionaries/english/comentarios. ) que contiene los únicos comentarios que pueden ser usados dentro del código de semilla. El caso exacto y el espaciado del comentario del diccionario deben ser utilizados. El diccionario de comentarios no debe ser expandido sin una discusión previa con el equipo de desarrollo.
+We have a [comment dictionary](/curriculum/dictionaries/english/comments.js) that contains the only comments that can be used within the seed code. The exact case and spacing of the dictionary comment must be used. The comment dictionary should not be expanded without prior discussion with the dev-team.
-Los comentarios usados deben tener un espacio entre los caracteres del comentario y los propios comentarios. En general, los comentarios deben ser utilizados con esparcimiento. Siempre considere reescribir la descripción o las instrucciones de un desafío si pudiera evitar usar un comentario de código de semilla.
+Comments used should have a space between the comment characters and the comment themselves. In general, comments should be used sparingly. Always consider rewriting a challenge's description or instructions if it could avoid using a seed code comment.
-Ejemplo de comentario válido de JavaScript en una sola línea:
+Example of valid single line JavaScript comment:
```js
-// Sólo cambiar el código debajo de esta línea
+// Only change code below this line
````
-Ejemplo de un comentario CSS válido:
+Example of a valid CSS comment:
-```js
-/* Sólo cambiar el código por encima de esta línea */
+```css
+/* Only change code above this line */
```
-Si un desafío sólo tiene un solo lugar donde se necesitan cambios de código. utilice los comentarios en el siguiente ejemplo para indicar al usuario dónde deben realizarse los cambios.
+If a challenge only has a single place where code changes are needed, please use the comments in the following example to instruct the user where changes should be made.
```js
var a = 3;
var b = 17;
var c = 12;
-// Sólo cambiar el código debajo de esta línea
+// Only change code below this line
a = a + 12;
b = 9 + b;
c = c + 7;
```
-Si un desafío tiene múltiples lugares donde se espera que el usuario cambie el código (es decir, los desafíos de React)
+If a challenge has multiple places where the user is expected to change code (i.e. the React challenges)
```jsx
-clase MyComponent extends React.Component {
+class MyComponent extends React.Component {
constructor(props) {
super(props);
- esto. tate = {
- text: "Hola"
+ this.state = {
+ text: "Hello"
};
- // Cambia el código debajo de esta línea
+ // Change code below this line
- // Cambia el código encima de esta línea
+ // Change code above this line
}
handleClick() {
- esto. etState({
- text: "¡Has hecho clic!"
+ this.setState({
+ text: "You clicked!"
});
}
render() {
return (
- { /* Cambiar código debajo de esta línea */ }
-
- { /* Cambiar código sobre esta línea */ }
+ { /* Change code below this line */ }
+
+ { /* Change code above this line */ }
{this.state.text}
);
@@ -320,26 +361,26 @@ clase MyComponent extends React.Component {
### Traducción de comentarios de código de semilla
-Hay diccionarios de comentarios separados para cada idioma. La [diversión inglesa del diccionario de comentarios](/curriculum/dictionaries/english/comments.js) es la base para las traducciones que se encuentran en las versiones no inglesas correspondientes de los archivos. La versión no inglesa del diccionario de comentarios en chino se encontraría en `/curriculum/dictionaries/chinese/comments.js`. Cada diccionario consiste en un array de objetos con una propiedad `id` única y una propiedad `texto`. Solo el texto `` debe ser modificado para incluir la traducción del comentario correspondiente en inglés.
+There are separate comment dictionaries for each language. The [English version of the comment dictionary](/curriculum/dictionaries/english/comments.js) is the basis for the translations found in the corresponding non-English versions of the files. The non-English version of the Chinese comment dictionary would be located at `/curriculum/dictionaries/chinese/comments.js`. Each dictionary consists of an array of objects with a unique `id` property and a `text` property. Only the `text` should be modified to encompass the translation of the corresponding English comment.
-Algunos comentarios pueden contener una palabra/frase que no debe traducirse. Por ejemplo, nombres de variables o nombres de librerías apropiados como "React" no deben ser traducidos. Ver el comentario a continuación como ejemplo. La palabra `myGlobal` no debe traducirse.
+Some comments may contain a word/phrase that should not be translated. For example, variable names or proper library names like "React" should not be translated. See the comment below as an example. The word `myGlobal` should not be translated.
```text
-Declarar la variable myGlobal debajo de esta línea
+Declare the myGlobal variable below this line
```
> [!NOTE]
>
> Estamos trabajando en una integración que permita trabajar en i18n para el diccionario de comentarios.
-## Consejos y soluciones
+## Hints and Solutions
-Cada desafío tiene un botón `Obtener un pista` para que un usuario pueda acceder a cualquier pista/solución que haya sido creada para el desafío. Temas de sugerencias/soluciones de currículo se encuentran en [nuestro foro](https://forum.freecodecamp.org/c/guide) bajo la categoría `Guía`.
+Each challenge has a `Get a Hint` button, so a user can access any hints/solutions which have been created for the challenge. Curriculum hints/solutions topics are located on [our forum](https://forum.freecodecamp.org/c/guide) under the `Guide` category.
-Si encuentras un problema con el tema de sugerencias/soluciones de un desafío, puedes hacer sugerencias en la categoría de [colaboradores](https://forum.freecodecamp.org/c/contributors) en el foro. Los moderadores y usuarios con nivel de confianza 3 revisarán los comentarios y decidirán si incluir o no los cambios en el tema correspondiente.
+If you find a problem with an existing challenge's hints/solutions topic, you can make suggestions in the [contributors category](https://forum.freecodecamp.org/c/contributors) on the forum. Moderators and users with trust level 3 will review the comments and decide whether or not to include the changes in the corresponding hint/solutions topic.
### Añadir nuevos temas de sugerencias/soluciones de Desafío
-Da los siguientes pasos al añadir nuevas pistas y soluciones relacionadas con el tema.
+Take the following steps when adding a new challenge hints/solutions related topic.
1. Comience siguiendo los mismos pasos para crear un nuevo tema pero revise el siguiente para crear el título.
2. El título del tema debe comenzar con `Guía de Desafío gratuita:` concatenada con el título real del desafío curricular. Por ejemplo, si el desafío se llama "`Chunky Monkey`", el título del tema sería "`Guía gratuita del Desafío CodeCamp: Chunky Monkey`".
@@ -348,43 +389,43 @@ Da los siguientes pasos al añadir nuevas pistas y soluciones relacionadas con e
### Orientaciones para el contenido de pistas y temas de soluciones
-Cuando se proponga una solución para un tema de guía relacionado con el desafío curricular, se debe añadir el código completo. Esto incluye todo el código original de semilla más cualquier cambio necesario para pasar todas las pruebas de desafío. La siguiente plantilla debe utilizarse al crear nuevos temas de sugerencias/soluciones:
+When proposing a solution for a curriculum challenge related Guide topic, the full code must be added. This includes all the original seed code plus any changes needed to pass all the challenge tests. The following template should be used when creating new hints/solutions topics:
````md
-# El Nombre del Desafío va aquí
+# Challenge Name Goes Here
---
-## Explicación de Problemas
+## Problem Explanation
-Esto resume lo que hay que hacer sin simplemente reiniciar la descripción del desafío y/o las instrucciones. Esta es una sección opcional
+This summarizes what needs to be done without just restating the challenge description and/or instructions. This is an optional section
-#### Enlaces relevantes
+#### Relevant Links
-- [Enlace Text](link_url_goes_here)
+- [Link Text](link_url_goes_here)
- [Link Text](link_url_goes_here)
---
-## Consejos
+## Hints
-### Pista 1
+### Hint 1
-La pista va aquí
+Hint goes here
-### Pista 2
+### Hint 2
-La pista va aquí
+Hint goes here
---
-## Soluciones
+## Solutions
-Soluciones 1 (Haz clic en Mostrar/Ocultar)
+Solution 1 (Click to Show/Hide)
```js
function myFunc() {
- consola. og('¡Hola Mundo!');
+ console.log('Hello World!');
}
````
@@ -401,222 +442,49 @@ function myFunc() {
````
-## Desafíos de prueba
+## Testing Challenges
-Antes de ti [crea una solicitud de pull request](how-to-open-a-pull-request. d) para tus cambios, necesitas validar que los cambios que has realizado no causan inadvertidamente problemas con el desafío.
+Before you [create a pull request](how-to-open-a-pull-request.md) for your changes, you need to validate that the changes you have made do not inadvertently cause problems with the challenge.
-1. Para probar todos los desafíos, ejecute el siguiente comando desde el directorio raíz
+1. To test all challenges run the below command from the root directory
````
npm run test:curriculum
```
-2. También puedes probar un bloque o un superbloque de desafíos con estos comandos
+2. You can also test a block or a superblock of challenges with these commands
```
-npm run test:curriculum --block='HTML básico y HTML5'
+npm run test:curriculum --block='Basic HTML and HTML5'
```
```
npm run test:curriculum --superblock=responsive-web-design
```
-También puedes probar un desafío individualmente realizando los siguientes pasos:
+You are also able to test one challenge individually by performing the following steps:
-1. Cambiar al directorio `curriculum`:
+1. Switch to the `curriculum` directory:
```
- currículo de cd
+ cd curriculum
```
-2. Ejecuta lo siguiente por cada archivo de desafío por el cual has cambiado:
+2. Run the following for each challenge file for which you have changed (replacing `challenge-title-goes-here` with the full title of the challenge):
```
- npm run test -- -g 'el título completo en inglés del challenge'
- ```
+ npm run test -- -g challenge-title-goes-here ```
-Una vez que hayas verificado que cada desafío que has trabajado pasa las pruebas, [por favor crea una pull request](https://github.com/freeCodeCamp/freeCodeCamp/blob/master/docs/how-to-open-a-pull-request.md).
+Once you have verified that each challenge you've worked on passes the tests, [please create a pull request](https://github.com/freeCodeCamp/freeCodeCamp/blob/main/docs/how-to-open-a-pull-request.md).
-> [!TIP]
-> Puedes establecer la variable de entorno `LOCALE` en el `.env` al idioma de los desafíos que necesitas probar.
+> [!TIP] You can set the environment variable `LOCALE` in the `.env` to the language of the challenge(s) you need to test.
>
-> Los valores actualmente aceptados son `english` y `chinese`, con `english` siendo establecido por defecto.
+> The currently accepted values are `english` and `chinese`, with `english` being set by default.
-## La próxima plantilla de desafío
+### Useful Links
-La plantilla de desafío en proceso de ser actualizada a una estructura más limpia y menos anidada. Esto no ha sido finalizado completamente, pero lo siguiente debería estar cerca de la estructura final:
+Creating and Editing Challenges:
-````mdx
+1. [Challenge types](https://github.com/freeCodeCamp/freeCodeCamp/blob/main/client/utils/challengeTypes.js#L1-L13) - what the numeric challenge type values mean (enum).
----
-id: Identificador único (alfanumérico, MongoDB_id)
-title: 'Título del Desafío'
-challengeType: Integer, definido en `client/utils/challengeTypes. s`
-videoUrl: 'url of video explication'
-forumTopicId: 12345
----
-
-import Script from './script. dx';
-
-## --step-description--
-
-Texto de descripción, en markdown
-
-```html
-
- código de ejemplo
-
-```
-
-## --step-hints--
-
-![test-id-1]
-
-Habrá un número arbitrario de triples de ids, instrucciones (en markdown) y bloques de código.
-
-```js
-Código para la prueba uno
-```
-
-![test-id-2]
-
-Más instrucciones en la sintaxis markdown
-
-```js
-Más código
-```
-
-## --step-seed--
-
-### --before-user-code--
-
-```lang
-Código evaluado antes del usuario
-```
-
-### --after-user-code--
-
-```lang
-Código evaluado después del usuario, y justo antes de las pruebas
-```
-
-### --seed-content--
-
-![index-html]
-
-```html
-Algunos html
-```
-
-```css
-Alguno de censura
-```
-
-```js
-Algunos js
-```
-
-![index-js]
-
-