Skip to main content
Version: 2.8

Translate the App

Contributing translations helps make Meshtastic accessible to a wider audience. The app uses Crowdin to manage community translations for both the user interface and in-app documentation.


What Gets Translated​

ResourceSource LocationNotes
UI stringscore/resources/src/commonMain/composeResources/values/strings.xmlButtons, labels, messages, and all user-visible text
User Guide pagesdocs/en/user/*.mdIn-app documentation shown in Help & Documentation
Fastlane metadatafastlane/metadata/android/en-US/App Store listing title, description, and changelogs

⚠️ 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 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.
  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.
  5. Submit. Approved translations are automatically merged into the next release.

💡 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 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 device's Language & Region settings.


Translation Guidelines​

  • Do not translate technical terms like "LoRaLoRaA low-power, long-range wireless communication technology used by Meshtastic devices to enable communication over distances of several kilometers without the need for cellular, Wi-Fi, or other traditional network infrastructures.", "MQTTMQTT (Message Queuing Telemetry Transport). A lightweight messaging protocol designed for small sensors and mobile devices, enabling efficient data transmission in the Meshtastic network for Internet connectivity and integration with IoT platforms. See https://en.wikipedia.org/wiki/MQTT. In Meshtastic, MQTT is used to connect a node to the internet, and can be used to connect multiple meshes to each other.", "BLEBLE (Bluetooth Low Energy). The default wireless connection between a node and a phone client.", "TAKTAK (Team Awareness Kit). A situational awareness ecosystem. Meshtastic bridges to it by converting mesh messages to and from Cursor on Target format.", "SNRSNR (Signal-to-Noise Ratio). A measure used in communications to quantify the level of a desired signal to the level of background noise. In Meshtastic and other wireless systems, a higher SNR indicates a clearer signal that can enhance the reliability and quality of data transmission.", or "RSSIRSSI (Received Signal Strength Indicator). The raw power level of a received signal, where a value closer to zero is stronger. Clients rate signal quality from SNR rather than 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 device 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 page.

Thank you for helping expand the reach of Meshtastic!