Multilingual audio in select_one choices not switching (ODK Aggregate)

Hi everyone,

I’m currently working on a multilingual XLSForm (Portuguese, Yanomami, Yanomae, Ye'kwana and Sanöma) for use in ODK Collect as part of a project with Indigenous communities in Brazil.

In this context, audio is essential because many users have limited literacy in Portuguese and varying familiarity with written forms of their own languages. For accessibility reasons, it’s important that users can rely on listening rather than reading.

Users can change the form language directly from the three-dot menu while filling the form.

Text translations using label::language work correctly — the labels update when the form language changes.

However, I’m trying to implement multilingual audio for select_one choices, and I’m running into issues.

What I’m trying to achieve

When the user changes the form language, I would like the audio associated with each choice to change accordingly (similar to how labels behave).

What I tested

In the choices sheet, I added columns like:

audio::Portuguese  
audio::Yanomae  
audio::Sanoma  

The language names match exactly the ones used in label::language.

Current behavior

  • The text updates correctly when the form language changes.

  • The audio does not switch.

  • In some cases, the form crashes when multiple audio::language columns are used in the choices sheet.

Environment

  • Server: ODK Aggregate

  • ODK Collect (Android)

  • XLSForm converted using the standard online converter

Is multilingual audio for select_one/select_multiple choices fully supported in ODK Aggregate?

If so, is there a minimal working example that demonstrates the correct structure?

Thanks in advance for any guidance.

Here's a minimal example: multi-language.audio.zip (133.0 KB) We no longer have an Aggregate server we can test with but I've verified that it works with the latest versions of Central and Collect.

Can you please share the message you get if you experience the crash again?

Hey LN! Thanks for sharing the example!

I tested the multi-language.audio.zip form you provided and it works correctly on my setup — the audio changes properly when switching the form language, so that was very helpful to understand the expected behavior.

However, when I try to implement the same structure in my own form, I still experience a crash.

What happens is the following:

• The form opens, but no text or audio appears — it seems to load in the "default" language with empty labels.
• When I try to change the language from the three-dot menu while filling the form, ODK Collect crashes.

The error message shown is:

Error loading locale Portuguese. There were 26 keys which were contained in this locale, but were not properly registered in the default Locale. Any keys which are added to a locale should always be added to the default locale to ensure appropriate functioning.

To troubleshoot this, I tested a few things:

• Added audio columns for all languages (audio::Portuguese, audio::Yanomae, audio::Sanoma, audio::Ye'kwana, audio::Yanomamɨ)
• Ensured the same languages are used consistently in label::language columns
• Uploaded all the corresponding audio files to Aggregate

The structure of the form follows the same pattern as the minimal example (same column structure and language naming), but the crash still occurs.

I've attached screenshots showing:

  1. the form opening with empty labels

  2. the crash message when changing the language

Any suggestions on what else I should check would be greatly appreciated.

Hi @vanessacanoso

If you’re still struggling to resolve that error, here’s the answer: it seems some media files are missing for the defined languages. For example, if I remove the highlighted field from the attached form, I get the same error.

Screenshot from 2026-03-17 15-01-19

To be precise, this works for the default language. If media files are defined for other languages, there must also be a corresponding file for the default language.

Hi @Grzesiek2010 and @LN,

I finally solved it! It was as simple as adding those three columns in the settings tab. It seems the issue was that the system couldn’t detect the default language.

Now, everything works fine! Thank you so much for your help :grinning_face: