Bulk Application Translations

Bulk Application Translations

Overview

Managing translations manually through the form builder can be time-consuming, especially in large or multilingual applications. CommCare provides a Bulk Application Translation tool that allows you to manage all translatable content in your app using a single Excel file.

This tool supports exporting, updating, and importing translations across all forms, modules, case lists, multimedia, and labels.

What Can Be Translated Using the Bulk Tool?

  • App name, module (menu) names, and form names

  • Form content (questions, labels, hints, group headers)

  • Multimedia paths (for images, audio, video)

  • Case list and case detail screen labels

  • Display conditions and repeat group labels

  • Case property labels shown in the app

Options for Bulk Translation

CommCare provides two ways to bulk translate app content:

Option

Description

Option

Description

Entire App Translation

Export all translatable content across all forms and menus in a single file

Single Form Translation

Export translations specific to one form only

Both approaches produce Excel files with a consistent structure and can be edited and uploaded following the same process.

Bulk Translation for the Entire App

Step 1: Download the Excel File

  1. In App Builder, go to App SettingsLanguages

  2. Click Download Translations

  3. You will receive an Excel file with:

    • A row for each translatable text element in the app

    • Columns for each configured language

    • Filepath columns for multimedia (image/audio/video)

video_1280.mp4

 

Before downloading the file make sure that you have already added any languages you want to the Language List. You can change the order later if you choose to.

Download the structured file by clicking on the button shown below:

bulk translations.jpg

Understanding the Excel File

In the downloaded structured file, each sheet corresponds to a part of your application, such as menus or forms. Here's how it is organized:

1. Menus_and_forms Sheet

This sheet contains the names and multimedia references for your app's modules and forms.

Column

Description

Column

Description

Type

Indicates whether the row is a Menu or Form (do not modify)

menu_or_form

This specifies the location of the form or module. (do not modify)

default_language

Allows you to specify the name of the form or module in a given language.

image_* / audio_*

Filepath for an icon to appear in the menu or form list

unique_id

Internal reference key (do not modify)

image-20250731-112440.png


2. One Sheet per Menu or Form

Each form and menu has its own sheet. For example:

  • menu1 contains translations for the case list and detail screen of the first module.

  • menu1_form1 contains translations for all questions and labels in the first form of that module.

Menu Sheet (menu1)

Column

Description

Column

Description

case_property

Name of the case property shown in case list or detail (do not modify)

list_or_detail

Whether this row belongs to the case list or case detail (do not modify)

default_language

Column for each translation

image-20250731-112358.png

 

Form Sheet (menu1_form1)

Form tabs follow the same structure as Form Bulk Translation.

Changing order of forms in the App Builder

If you change the order of any forms or modules in the app builder you will need to download the Excel Translation File again and start over. The file references the order of the forms and modules and the upload will fail if they no longer match.

Column

Description

Column

Description

label

Path followed by the question id of the translatable element

default_en

Default English text for that element

default_language

Translations for each language you've added or you would like to add

image_*, audio_*, video_*

Media file paths per language (if applicable)

image-20250731-112317.png

 

Notes on Editing the File

  • Do not change the type, sheet names, row order, or internal keys like unique_id).

  • You can leave a translation blank if you want CommCare to use the default language.

  • Be consistent with terminology and formatting.

  • Multimedia fields should match the file names uploaded to CommCare HQ.

Step 2: Add or Update Translations

  • Fill in the translated text under each language column (default_hin, default_fr, etc.).

  • Ensure translations are accurate and consistent.

  • If using multimedia, ensure file paths point to uploaded files in the correct language folder (e.g., hin/audio/greeting.mp3).

  • Avoid editing column headers, internal labels, or deleting any rows.

Step 3: Upload the Updated File

  1. Return to App SettingsLanguages

  2. Click Upload Translations

  3. Upload your modified Excel file

If you have any errors you should see a message explaining the error. After fixing the error you can try again. In general the application builder will skip any single item that has an error and make all of the other changes, so another option is to just make any final changes in the Application Builder.

CommCare will apply all translations across your application. Updates will be reflected in the App Builder and on mobile devices after the version update.

Limitations/Notes

  • The bulk application file cannot manage translations of the application name

  • If you delete any rows or tabs you will see an error message that some fields are missing; however the rest of the app will be translated without any issues.

  • Making changes to anything other than translations or media filepaths will not actually cause that change to occur in the app and could result in problems with the bulk translation tool.

Bulk Translation for a Single Form

If you want to translate one form at a time, use the Edit Bulk Translations tool available inside the form builder.

Translation of buttons or error messages are not dealt with using Bulk Translations, but with https://dimagi.atlassian.net/wiki/x/wBbKfw.

How to Use Edit Bulk Translation tool

Below screenshot is of a sample application where we have configured two languages: English and French. We built this application in English and French display text was left blank. CommCare automatically populated the additional language display text blocks with the English text as a placeholder until the French translations are added

d8525c21-c283-4e87-8efc-599a237a03d5.png

Steps to Bulk translate a form:

  1. Open the desired form in the Form Builder

  2. On the right-hand side, click the Menu Button(three horizontal lines).

  3. Scroll to the bottom of the menu and select Edit Bulk Translations

fffee6a3-1dff-4b47-a42e-99c726941436 (1).png
  1. A pop-up window will appear with all display text for that form

602600f4-e519-43b9-a04d-0ee366b2c610.png
  1. In the window, press Ctrl + A to select all text and press Ctrl + C to copy the text

f65cccca-f0a9-4f69-ab19-facfe6e29116.png
  1. Open Excel, click into cell A1, and paste (Ctrl + V)

    The spreadsheet will have:

    • One row per translatable element

    • One column per language (e.g., English, French)

    • Text copied from the default language in untranslated fields

Each column represents a piece of content (either text or multimedia) in each language. Some of the French versions (column B) of the text the questions are in English because we have not translated them.

9c399457-79e7-457b-a9ee-01d258811609 (1).png
  1. Replace the placeholder text (e.g., French column) with actual translations

9764a286-9c92-42e4-80af-54f5d3912b3c.png

Tip: Always use Unicode fonts and test on your target devices, as not all fonts are supported on all phones.

  1. After editing, select all of the spreadsheet and copy it (Ctrl + C)

  2. Return to the open Edit Bulk Translations window in the form builder

  3. Click inside the text box and press Ctrl + A, then Delete

  4. Paste the updated content (Ctrl + V)

  5. Click Update Translations to save your changes

Do not click “Close” - this will discard your edits.

9303556c-6200-406b-a5b2-ccc9dbbbb1c6.png
  1. Click on any translated question in the form tree to verify your update

  2. Press the green Save button at the top to save the form

bcf6af60-5330-45dc-8a32-6ee22695443c.png

Translating HQ: Transifex Instructions for Translators

Transifex is a very helpful bulk translation tool used by professional translators. The section below provides guidance for how to use Transifex with your CommCare application.

Create a free account in Transifex:

https://www.transifex.com/signup/

  1. Log into Transifex

  2. Search for "CommCare HQ" in Transifex's explore page.

  3. Choose a language, and hit the “Join Team” button to request access. The manager of the team needs to approve your request before you can join that team.

  4. After you have been invited approved as a translator, you’ll be notified by e-mail. From then on, you will see the project in your Dashboard.

For more detailed instructions, see Transifex's how to page.

Once you have an account:

  1. In order to access the strings that have not yet been translated you will need to click on the "CommCare HQ" link on the lefthand side of your screen when you sign in. 

  2. If you click on the green "translate" button at the top, it will take you to a screen that looks like this:

83a491b1-7d10-4552-acaa-e6455406a820.png
  1. You want to click on choose a language, select the language into which you'd like to translate.

  2. It will then prompt you to select which file you want to translate, there are two there, django.po and djangojs.po.  Both need to be translated, so select "All resources."

  3. When you click on django po, you will see a screen that looks like this:

  1. You will want to select the "untranslated" tab at the top

  2. Once you have selected that tab, the terms/phrases on the left are the "strings" that we need translated.

  3. Note that this document contains:

all strings on CommCareHQ.  This includes some strings that only apply to custom features and reports, and are not a core part of the website.  To avoid these, you can use the search bar at the top of the translation interface to filter strings according to the file in which they are found.  Type file:corehq/ as one filter, and file:submodules/ as another, to view only strings which are visible to all CommCare web users

In the search filter on transifex these filters will look like this:

and

How to translate template strings and code

When translating, there are some things that you must take special care to preserve (don't translate).  For instance, if a string contains the URL www.example.com, and you translate that to www.ejemplo.com, the link will fail.  If you're unsure how to translate a particular string, it's better to leave it alone and ask for clarification.  A mistake like this in translations will block us from releasing translations until it's fixed.

Strings often contain variables that will later be substituted out.  For example, the string "Case '{name}' has been closed" will turn in to "Case 'Maria' will be closed" in the English version, and "Le dossier 'Maria'  a été fermé." in the French version.

Here are some example format strings an the expected translations:

Curly braces: keep everything inside the braces.

Type {type} must be in list of domain types: {list} El Tipo {type} debe estar en un listado de tipos de dominios: {list}

Modulo interpolation: These ones can be tricky.  Here's a simple example:

Did you mean %(suggestion)s? Voulez-vous dire %(suggestion)s?

These will always start with a % sign and end in a single letter, usually s or d.  In between there can be parenthesis with a word inside, and maybe some numbers or symbols.  Be sure to include everything including the % and the letter.

%(days_remaining)03d days remaining Faltan %(days_remaining)03d días

underscore.js translations:

User <%= name %> added successfully. El usuario <%%= name %%> fue agregado exitosamente.

You may also see html in translation strings.  In general, there you should leave everything between < and > and translate things between > and <:

Please update 'Client Contact Emails' <strong><a href=%(link)s target="_blank">here</a></strong> Por favor actualice 'Correos electrónicos de contacto del cliente' <strong><a href=%(link)s target=\_blank\">aquí</a></strong>
View our <a href=\"http://www.dimagi.com/partners/\">list of partners</a> Voir notre <a href=\"http://www.dimagi.com/partners/\">liste de partenaires</a>

Running a Translation Marathon

  • Send instructions on which client everyone should bill translation time to

  • Send link to CommCare Rosetta Stone

  • Accept/Invite New Translators

  • Send reminders about specific filters to use on Transifex

  • Choose one filter to translate strings

  • Click on Untranslated String button to view only untranslated strings

  • Divide up the strings among the team so people don't over-write each others

  • Remember to SAVE all of your translations

  • Refresh often, un/click untranslated button also (sometimes it doesn't refresh correctly)

Tips

 

 

 

 

GENERAL

  • Be sure to reference the CommCare Rosetta Stone for some common translations

  • Error: The translation should start with an empty line. Press the "Enter" or "Return" key before the translation text.

  • Do not change anything in curly brackets {xyz }

  • If you see some untranslated text on HQ and can't find that text on transifex, it's possible it hasn't been marked for translation.  Please contact CommCareHQ support so devs can mark it for translation.

  • If first letter in the string is capital make sure your translated suggestion is also capital

  • Do not translate CommCare branded features into other languages.

French

  • Capitalize all major words not small articles

  • If there is an article in between such as Remplacer l'icône, you can keep the first letter a lowercase

  • Do not use infinitive form for command verbs. E.g. Télécharger should be Téléchargez