Skip to content

Languages and Translation

K M Rejowan Ahmmed edited this page Oct 26, 2026 · 4 revisions

Languages and Translation

Crowdin

Available languages

Progress updates live from Crowdin.

Language English name Code Progress Crowdin Contributors
English English en Source language Translate @ahmmedrejowan
বাংলা Bengali bn Bengali translation progress Translate @ahmmedrejowan
Deutsch German de German translation progress Translate @4kvoodoo
Español Spanish es Spanish translation progress Translate @4kvoodoo
Français French fr French translation progress Translate @4kvoodoo
Gaeilge Irish ga Irish translation progress Translate @4kvoodoo
Italiano Italian it Italian translation progress Translate @4kvoodoo
日本語 Japanese ja Japanese translation progress Translate @4kvoodoo
Polski Polish pl Polish translation progress Translate @4kvoodoo
Português Portuguese pt Portuguese translation progress Translate @4kvoodoo
Русский Russian ru Russian translation progress Translate @4kvoodoo
Türkçe Turkish tr Turkish translation progress Translate @4kvoodoo
中文 (简体) Chinese (Simplified) zh Chinese (Simplified) translation progress Translate @ahmmedrejowan, @Infinifar

Changing the app's language

Settings > Language lets you pick a language for the app only, on any Android version. Choose Use your phone's language to follow the system again. On Android 13 and newer the choice also appears in the system's per-app language setting, and the two stay in step.

Dates, times and counts follow the language you choose.

Helping translate

Translations are made by the community on Crowdin. No Git, Android Studio or coding is needed.

  1. Open the Crowdin project and sign in; a GitHub or Google account works.
  2. Choose your language and start translating in the browser.
  3. Your work is collected into a pull request on GitHub and ships in the next release.

Native speakers who review an existing language help just as much as new translators, since some languages were first translated with machine help.

Guidelines

  • Keep placeholders such as %s, %1$d and \n exactly as they are. They're replaced with names and numbers in the app.
  • Keep translations about as short as the English. Most strings are buttons and labels on a phone screen.
  • Use the everyday words people know from other apps, not formal or literal translations.
  • Some terms stay as they are: PDF Reader Pro, PDF, GitHub, AMOLED, PNG, JPG and GPL. Crowdin highlights them.
  • Screenshots of the app are attached in Crowdin, so you can see where a string appears.

Questions and new languages

Ask in the translation discussion if your language is missing or a string is unclear, or comment on the string in Crowdin.

For maintainers

  • crowdin.yml maps app/src/main/res/values/strings.xml to values-<code>/strings.xml. Crowdin syncs from the feature branch once a day and opens a pull request from l10n_feature; squash-merge it and delete the branch, and Crowdin recreates it for the next update.
  • English is owned by the repository: change source strings in code, and Crowdin picks them up.
  • The README is translated on Crowdin too: README.md is exported to readme/README.<code>.md for German, Spanish, French, Italian, Portuguese and Russian. Edit only the English README; the translations come back in Crowdin's pull request. To offer the README in another language, remove it from excluded_target_languages in crowdin.yml. Crowdin doesn't translate code blocks or HTML attributes, so keep those language-neutral.
  • To add a language: add it as a target language in Crowdin, then add its code to AppLanguage.supported and its plural rules to PLURALS in .github/scripts/check_translations.py. Add a row to the language table here and in every README too. Each progress badge reads progress.N from Crowdin's stats file, where N is the language's position in that file, so check the new order there and renumber the badges to match.
  • Suggestions made on strings that are already approved are not exported until someone approves them. Find them in the Crowdin editor with Advanced Filter > Translation Added After Approval.
  • Every pull request runs check_translations.py, which checks each language against English: valid XML, no missing strings or plurals, matching placeholders, escaped apostrophes, and the plural forms the language needs.

Clone this wiki locally