Live Q&A in many languages: one list instead of a chat per language

googleappsscriptopensourcetranslationlivestreaming
Chat bubbles labelled EN, DE, FR and RU with arrows pointing to one live Q&A list, with one question starred

Picture a live session. The teacher speaks English, and interpreters stream it in other languages, for example German, French and Russian. Each language has its own Zoom or YouTube stream, and each stream has its own chat.

Then the teacher says, "Let's take some questions." Who reads all those chats at once?

What we did before

We used a Google Sheet with one column per language. Volunteers pasted questions into their language's column and ticked the checkbox once a question was done.

Our old Google Sheet: one column each for English, French, German and Arabic, with a checkbox per question and answered questions struck through

It worked, but:

  • The teacher had to scroll up and down, and also left and right, so some questions were missed.
  • A question asked in German had to be translated to English before the teacher could read it. A volunteer opened a translator, pasted the question, copied the result and pasted it back.

What we built

Multi Lang QA is a small web app that runs on Google Apps Script and keeps its data in a Google Sheet. All questions go into one list, from top to bottom, with no sideways scrolling.

The question list: each question shows its English translation first and the original text below it, with language badges

Sample questions. Each card shows the English translation first, with the original text and the asker's name below it.

Operators in every language open the same page and add questions at the same time. The page checks for new questions every 5 seconds, so everyone sees the same list.

Adding a question

An operator picks the question's language, types or pastes the question and presses Translate. The app translates it with Google's translation service (LanguageApp.translate in Apps Script) and fills in the translation field. The operator can fix it by hand before adding the question, and can add the asker's name in Latin letters (for example Мария as Maria), so the teacher can read and say it.

The add question dialog: a German question on the left and its English translation on the right, with a Translate button between them

For the teacher

  • Done: mark a question as completed once it has been answered.
  • Star: star the question being discussed. The star is saved with the data, so everyone sees which question is current.
  • Hide completed questions so that only the open ones are left.
  • Hide the original text to see only the English translations.
  • Filter by language to show one language only.
  • Zoom and fullscreen to put the list on a screen that the teacher can read from a distance.

The same list with completed questions and original text hidden: only the open questions, in English

See it and use it

Here is the whole flow in 40 seconds: add a question, translate it, star it, mark questions as done and hide the original text and the completed ones. The questions are made up.

A short screen recording: an operator adds a Spanish question and translates it, the teacher stars it, three questions are marked done, and the original text and the completed questions are hidden in turn

To run your own copy you need a Google account and Node.js. Apps Script and Google Sheets are free, and there is nothing to host. The README has the steps, and it takes about 5 minutes:

  1. Turn on the Apps Script API for your Google account (one switch in your Apps Script settings).
  2. Run npm install and npm run setup in the project folder. Sign in when the browser opens. The command creates the Apps Script project, uploads the app, publishes it and prints your app link.
  3. Open the link yourself once and allow access. This also creates the spreadsheet in your Google Drive, where the questions are stored. Then share the link with your audience.

Running npm run setup again later updates the app and keeps the same link. If you cannot run commands, the README also has a copy-and-paste way to set it up by hand.

It is not limited to our setup. If you take questions from an audience in more than one language, whether on Zoom, YouTube or in a room, it may save you the same trouble.

If it is useful to you, a star on GitHub helps other people find it. Issues and ideas are welcome too.

Edit this post on GitHub