diff --git a/source/contribute/development.html.md b/source/contribute/development.html.md
index ccaa739..c54a7e6 100644
--- a/source/contribute/development.html.md
+++ b/source/contribute/development.html.md
@@ -156,6 +156,24 @@ There is no need to provide individual translations of `i18n!`-wrapped strings
The strings will be uploaded to a third-party web service and translated automatically as
a separate step.
+### Adding a language
+
+Managers of the Crowdin project may add new languages to the list of target languages.
+But for these new languages to be visible in the interface as well, some changes need to be made to the code.
+
+First of all, make sure that the corresponding `.po` file is present in `po/plume`, and in `po/plume-front`.
+If it is not, ask someone who has access to the Crowdin API key (like a Crowdin manager or owner) to pull it with the Crowdin CLI tool.
+
+To find a manager, look at the list [in the sidebar of this page](https://crowdin.com/project/plume).
+These people are managers because they were involved enough in the project, and especially in the translation process.
+If you want to become a manager on Crowdin too, ask us [on Matrix](https://matrix.to/#/#plume:disroot.org).
+
+Then, in `src/main.rs` and `plume-front/src/main.rs`, add the code corresponding to the language in the `init_i18n!` macro.
+If you don't know the code for the language: it is the name of the `.po` file, without the extension.
+Here is an exemple of [a Pull Request adding Persian](https://github.com/Plume-org/Plume/pull/782).
+
+`cargo check` to make sure everything compiles, and you are good to go!
+
## Working with the front-end
When working with the front-end, we try limit our use of JavaScript as much as possible.