Files
Meshtastic-Android/main/docs/user/translate.html
T

95 lines
4.5 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Translate the App</title>
<link rel="stylesheet" href="../styles/docs.css">
</head>
<body data-page="translate" data-locale="en">
<pre class="markdown-content"># Translate the App
The app and its in-app docs are translated on Crowdin — this page shows how to contribute. The app uses [Crowdin](https://crowdin.com/) to manage community translations for both the user interface and in-app documentation.
## What Gets Translated
Resource | Source Location | Notes |
---|---|---|
UI strings | `core/resources/src/commonMain/composeResources/values/strings.xml` | Buttons, labels, messages, and all user-visible text |
User Guide pages | `docs/en/user/*.md` | In-app documentation shown in Help &amp; Documentation |
Fastlane metadata | `fastlane/metadata/android/en-US/` | App Store listing title, description, and changelogs |
&gt; ️ **Note:** Developer Guide pages are English-only. Code-focused documentation targeting contributors is not translated.
## How to Contribute
1. **Visit the Crowdin project.** Open the [Meshtastic Android Crowdin project](https://crowdin.com/project/meshtastic-android) and sign in or create a free account.
2. **Choose your language.** Select an existing language or request a new one by opening a [GitHub issue](https://github.com/meshtastic/Meshtastic-Android/issues/new).
3. **Translate strings.** Crowdin shows the English source on the left and your translation on the right. Translate each string and save.
4. **Review context.** Many strings include screenshots or context comments — check these to understand where the text appears in the app. Approved translations are automatically merged into the next release.
&gt; 💡 **Tip:** Keep translations short. UI strings often appear in buttons, chips, or narrow columns. If a translation is significantly longer than the English original, consider abbreviating where the meaning stays clear.
## Adding a New Language
If your language is not yet listed on Crowdin:
1. Open an issue on [GitHub](https://github.com/meshtastic/Meshtastic-Android/issues/new) requesting the new locale.
2. A maintainer will add the language to Crowdin and configure `crowdin.yml`.
3. Once added, you can begin translating immediately.
## How Translations Are Organized
The Android app uses **Compose Multiplatform resources** for all user-visible strings:
```
core/resources/src/commonMain/composeResources/
├── values/ ← English (default)
│ └── strings.xml
├── values-de/ ← German
│ └── strings.xml
├── values-fr/ ← French
│ └── strings.xml
└── ...
```
In-app documentation follows a similar pattern under `docs/`:
```
docs/
├── en/user/ ← English source (default)
│ ├── onboarding.md
│ └── ...
├── fr-rFR/user/ ← French (France)
│ ├── onboarding.md
│ └── ...
├── de-rDE/user/ ← German (Germany)
│ └── ...
└── ...
```
Locale folders use the Android resource convention `{lang}-r{REGION}` (e.g. `fr-rFR`, `de-rDE`, `ja-rJP`), matching the `values-*` directories used for app strings.
The app automatically selects the correct locale based on your phone's **Language &amp; Region** settings.
## Translation Guidelines
- **Do not translate** technical terms like "LoRa", "MQTT", "BLE", "TAK", "SNR", or "RSSI" — these are universal.
- **Keep placeholders intact.** Strings like `%1$s` or `%d` are filled in at runtime. Do not remove or reorder them unless the grammar of your language requires it.
- **Match tone.** The app uses a friendly, direct voice. Avoid overly formal language.
- **Test if possible.** Switch your phone's language and open the app to see how translations look in context.
## Questions?
If you have questions about a specific string's context or need help getting started, open a discussion on the [Meshtastic GitHub Discussions](https://github.com/orgs/meshtastic/discussions) page.
Thank you for helping expand the reach of Meshtastic.
## Related Topics
- [Units &amp; Locale](units-and-locale) — how the app picks number, date, and unit formats for your region
- [Help &amp; Documentation](help-and-docs) — the in-app docs browser these pages are published to
- [Onboarding](onboarding) — where a new user first meets the translated strings
</pre>
</body>
</html>