Translator Multilingual Survey Response Normalizer
When a multilingual survey response arrives via Microsoft Forms, the flow detects the language, translates open-text answers to English with Microsoft Translator, stores both original and translated text in Dataverse, and runs sentiment on the English version. Lets analysts work in one language while preserving the original.
Provided as-is, without warranty of any kind. Review and test each pattern in a non-production environment before deploying it to live automations. See our Terms.
Overview
This flow normalizes multilingual survey feedback for centralized analysis using Microsoft Translator V3. When a response is submitted to a Microsoft Forms survey, the flow detects the language of the open-text answer, translates it to a configurable pivot language (default English), scores sentiment in-flow, and stores the original verbatim, the translation, the detected language, and the sentiment in a Dataverse table. Feedback arrives in many languages and is hard to analyze together; normalizing every verbatim to one language while preserving the original lets analysts work in a single language and report consistently across regions.
Use Case
A CX / marketing team runs global surveys and wants every verbatim translated and analyzed centrally, with the original preserved. Analysts read a single Dataverse table that holds both the source-language text and the English rendering plus a sentiment label, so cross-region reporting needs no manual translation.
Flow Architecture
When a New Survey Response Is Submitted
Microsoft Forms - CreateFormWebhookFires on each new response to the configured form.
Initialize Variables
Initialize variableMints a correlation id and binds the pivot language plus lower-cased positive/negative keyword lists from env vars.
Get Response Details
Forms - GetFormResponseByIdReads the submitted response's answers; composes the open-text verbatim from the configurable question id.
Detect Language
HTTP - Translator detectBuilt-in HTTP POST to the Azure AI Translator detect endpoint identifies the verbatim's source language (the V3 connector has no Detect action).
Translate Text
Microsoft Translator - TranslateTranslates the verbatim from the detected language to the pivot language; flattens the V3 response.
Score Sentiment
Filter array + ComposeLower-cases the translation, tallies positive and negative keyword hits, and derives a net score and Positive/Negative/Neutral label.
Create Response Record
Dataverse - CreateRecordStores the original verbatim, translation, detected language, sentiment, score, and correlation id in flowlibs_surveyresponsenorm.
Environment Variables
| Schema name | Type | Default | Description |
|---|---|---|---|
| flowlibs_SurveyFormId | String | <configure> | The Microsoft Forms form id the trigger watches. |
| flowlibs_SurveyOpenTextQuestionId | String | <configure> | Question id of the open-text answer to translate/analyze. |
| flowlibs_PivotLanguage | String | en | Target language all verbatims are normalized to. |
| flowlibs_SurveyResponseTable | String | flowlibs_surveyresponsenorm | Dataverse table logical name (documentation). |
| flowlibs_PositiveSentimentWords | String | good,great,excellent,love,helpful | Comma-separated positive keywords for the heuristic. |
| flowlibs_NegativeSentimentWords | String | bad,terrible,poor,hate,broken | Comma-separated negative keywords for the heuristic. |
| flowlibs_TranslatorTextEndpoint | String | https://api.cognitive.microsofttranslator.com | Azure AI Translator base URL for the detect call. |
| flowlibs_TranslatorTextKey | String | <configure> | Translator resource subscription key (HTTP detect). |
| flowlibs_TranslatorTextRegion | String |
Connectors & Connections
| Connector | API name | Actions used |
|---|---|---|
| Microsoft Forms | shared_microsoftforms | CreateFormWebhook GetFormResponseById |
| Microsoft Translator | shared_microsofttranslatorv | Translate |
| Microsoft Dataverse | shared_commondataserviceforapps | CreateRecord |
| HTTP (built-in) | http | HTTP - Detect language |
Note — All connections are referenced as solution connection references; the flow is portable between environments as long as a connection is mapped at import time.
Customization Guide
Almost every realistic variant of this flow can be implemented by changing environment variable values. A few cases require small edits inside the flow definition — those are called out explicitly below.
- Pivot language
- Change flowlibs_PivotLanguage to normalize to any language Translator supports (e.g. es, fr).
- Sentiment quality
- Swap the in-flow keyword heuristic for Azure AI Language Sentiment or Azure OpenAI; keep the detected language as a report dimension.
- Multiple open-text questions
- Duplicate the compose/translate actions per question id, or loop over an array of question ids.
- Key phrases / themes
- Add a Translator key-phrase or AI Language key-phrase step on the translated text.
- PII
- Redact PII before translation if required by policy.
Key Expressions
The flow is intentionally light on Power Fx / WDL gymnastics — the heaviest expressions are the branch-name concatenation and the approval outcome check. They are listed below in the order they appear in the flow.
EXPR.01Detected language
Falls back to the pivot language.
EXPR.02English verbatim (V3 flattened)
The flattened V3 translation.
EXPR.03Sentiment score
Net positive minus negative hits.
EXPR.04Open-text answer (dynamic key)
Reads the answer by configurable question id.
Customize & download
Generate a ready-to-import copy of this solution with your environment-variable values baked in — available on Base, Pro, or Team.
Upgrade to customize
Comments
Sign in to join the conversation.
Sign inNo comments yet. Be the first to share your experience with this flow.