|
@@ -0,0 +1,45 @@
|
|
|
+# Translations
|
|
|
+
|
|
|
+We use Crowdin for translations, and the `i18next` library to load these at
|
|
|
+runtime.
|
|
|
+
|
|
|
+Within our project we have the _source_ strings - these are the key value pairs
|
|
|
+in the `public/locales/en-US/translation.json` file in each app.
|
|
|
+
|
|
|
+Volunteers can add a new _translation_ in their language corresponding to each
|
|
|
+such source key-value to our [Crowdin
|
|
|
+project](https://crowdin.com/project/ente-photos-web).
|
|
|
+
|
|
|
+Everyday, we run a [GitHub workflow](../../.github/workflows/web-crowdin.yml)
|
|
|
+that
|
|
|
+
|
|
|
+* Uploads sources to Crowdin - So any new key value pair we add in the source
|
|
|
+ `translation.json` becomes available to translators to translate.
|
|
|
+
|
|
|
+* Downloads translations from Crowdin - So any new translations that translators
|
|
|
+ have made on the Crowdin dashboard (for existing sources) will be added to the
|
|
|
+ corresponding `lang/translation.json`.
|
|
|
+
|
|
|
+The workflow also uploads existing translations and also downloads new sources
|
|
|
+from Crowdin, but these two should be no-ops.
|
|
|
+
|
|
|
+## Adding a new string
|
|
|
+
|
|
|
+- Add a new entry in `public/locales/en-US/translation.json` (the **source `translation.json`**).
|
|
|
+- Use the new key in code with the `t` function (`import { t } from "i18next"`).
|
|
|
+- During the next sync, the workflow will upload this source item to Crowdin's
|
|
|
+ dashboard, allowing translators to translate it.
|
|
|
+
|
|
|
+## Updating an existing string
|
|
|
+
|
|
|
+- Update the existing value for the key in the source `translation.json`.
|
|
|
+- During the next sync, the workflow will clear out all the existing
|
|
|
+ translations so that they can be translated afresh.
|
|
|
+
|
|
|
+## Deleting an existing string
|
|
|
+
|
|
|
+- Remove the key value pair from the source `translation.json`.
|
|
|
+- During the next sync, the workflow will delete that source item from all
|
|
|
+ existing translations (both in the Crowdin project and also from the he other
|
|
|
+ `lang/translation.json` files in the repository).
|
|
|
+
|