Language Selection at Chat Start + Automatic Translation in HTTP & Chat Nodes?

Hi everyone,

I’m building a chat workflow in n8n and I’m wondering if there is a clean way to handle multilingual responses.

What I would like to achieve:

  1. When the user starts the chat, they should be asked to select a language (e.g. English or German).

  2. After the selection, the chat should always respond in that chosen language for the entire session.

  3. Ideally, this language setting should persist so the user is not asked again on every message.

Additionally, I have a few questions regarding translation behavior:

  • Is it possible to automatically translate responses coming from HTTP Request nodes into the selected language?

  • Can text defined inside Chat or Set nodes also be dynamically translated based on the user’s language selection?

  • What would be the best practice to implement this in n8n (e.g. workflow design, memory, or external translation service)?

I’m trying to build a robust multilingual setup and would appreciate any recommendations or examples of how others have solved this.

Thanks in advance!

I’d handle this as session state rather than trying to re-detect the language in every step. Let the first chat message either ask for the preferred language or detect it, then save that value against the chat/session ID in a Data Store, database, or whatever persistence layer you’re already using. After that, every prompt or translation step can read the saved language and keep replies consistent for the rest of the conversation.

Good Day @Leon22 This is very doable in n8n. Here’s the cleanest way to set it up:

1. Capture language on first message Use a simple IF node to check if a language has already been set in memory. If not, prompt the user to choose. Once they reply, store it.

2. Persist the language using Window Buffer Memory Save the selected language in your chat memory as a system context variable. Something like “The user has selected German. Always respond in German.” this way every subsequent AI call inherits it without asking again.

3. For dynamic translation of HTTP responses and Set node text Pass everything through your AI node with a system prompt that says:

“Always respond in {{ $('Set Language').item.json.language }}

This handles translation of external API responses and static text automatically no separate translation service needed for most cases.

Best practice summary:

  • Store language in memory or a Set node at session start

  • Inject it into every AI system prompt via expression

  • Let the LLM handle translation rather than adding a separate translation step

Only consider an external service like DeepL if you’re dealing with large structured content where LLM translation feels inconsistent.

good morning @Leon22

here are templates to help

Gmail drafts sometimes reply in English – how do I automatically detect the correct language for incoming mail? - Questions - n8n Community
How to build a multilingual bot with low code – n8n Blog
How to Make an AI Chatbot: A Step-by-Step Guide – n8n Blog
How to build a multilingual bot with low code – n8n Blog