···33We want the official Bluesky app to be supported in as many languages as possible. If you want to help us translate the app, please open a PR or issue on the [Bluesky app repo on GitHub](https://github.com/bluesky-social/social-app)
4455## Tools
66-We are using Lingui to manage translations. You can find the documentation [here](https://lingui.dev/).
66+77+- We use Lingui to implement translations. You can find the documentation [here](https://lingui.dev/).
88+- We use Crowdin to manage translations.
99+ - Bluesky Crowdin: https://crowdin.com/project/bluesky-social
1010+ - Introduction to Crowdin: https://support.crowdin.com/for-translators/
1111+1212+## Translators
1313+1414+Much of the app is translated by community contributions. (We <3 our translators!) If you want to participate in the translation of the app, read this section.
1515+1616+### Using Crowdin
1717+1818+[Crowdin](https://crowdin.com/project/bluesky-social) is our primary tool for managing translations. There are two roles:
1919+2020+- **Proof-readers**. Can create new translations and approve submitted translations.
2121+- **Translators**. Can create new translations.
2222+2323+All translations must be approved by proof-readers before they are accepted into the app.
2424+2525+### Using other platforms
2626+2727+You may contribute PRs separately from Crowdin, however we strongly recommend using Crowdin to avoid conflicts.
2828+2929+### Code of conduct on Crowdin
3030+3131+Please treat everyone with respect. Proof-readers are given final say on translations. Translators who frequently come into conflict with other translators, or who contribute noticably incorrect translations, will have their membership to the Crowdin project revoked.
3232+3333+### Adding a new language
3434+3535+Create a new [Crowdin discussion](https://crowdin.com/project/bluesky-social/discussions) or [GitHub issue](https://github.com/bluesky-social/social-app/issues) requesting the new language be added to the project.
3636+3737+Please only request a new language when you are certain you will be able to contribute a substantive portion of translations for the language.
3838+3939+## Maintainers
4040+4141+Install the [Crowdin CLI](https://crowdin.github.io/crowdin-cli/). You will need to [configure your API token](https://crowdin.github.io/crowdin-cli/configuration) to access the project.
4242+4343+### Release process
4444+4545+1. Pull main and create a branch.
4646+1. Run `yarn intl:pull` to fetch all translation updates from Crowdin.
4747+1. Create a PR, ensure the translations all look correct, and merge.
4848+1. Merge all approved translation PRs (contributions from outside crowdin).
4949+1. Pull main.
5050+1. Run `yarn intl:extract` to sync the english `.po` file with the state of the app.
5151+1. Run `yarn intl:push` to sync Crowdin with the state of the repo.
5252+1. Commit the updated english `.po` and push to GitHub.
5353+5454+### Testing the translations in Crowdin
5555+5656+You can run `yarn intl:pull` to pull the currently-approved translations from Crowdin.
5757+5858+## Developers
759860### Adding new strings
6161+962When adding a new string, do it as follows:
1063```jsx
1164// Before
···611146. Enjoy translated app!
6211563116### Common pitfalls
117117+64118These pitfalls are memoization pitfalls that will cause the components to not re-render when the locale is changed -- causing stale translations to be shown.
6511966120```jsx
···111165 return <div>{welcome}</div>;
112166}
113167```
114114-115115-116116-### Credits
117117-Please check each individual `messages.po` file for the credits of the translators. We are very grateful for their help!
118118-119119-If you would like to translate the Bluesky app into your language, please open a PR or issue on this repo.