npx skills add ...
npx skills add microsoft/data-formulator --skill language-injection
npx skills add microsoft/data-formulator --skill language-injection
LLM Agent 多语言注入规范。在修改 Agent 提示词、添加新的 Agent 端点、处理用户可见的后端消息(message_code)时使用。
Authoritative developer guide: docs/dev-guides/6-i18n-language-injection.md.
Prerequisites: Read
docs/dev-guides/6-i18n-language-injection.mdbefore changing Agent prompts, Agent routes, backend user-visible messages, or frontend i18n strings. If your work introduces new language injection patterns or conventions, update this file and related dev-guides accordingly.
| Module | Role |
|---|---|
agents/agent_language.py | build_language_instruction(lang, mode) — generates prompt fragments; inject_language_instruction() — injects into system prompts; supports 20 languages; returns "" for English |
routes/agents.py → get_language_instruction() | Reads Accept-Language header, delegates to build_language_instruction |
routes/agents.py → _get_ui_lang() | Extracts primary language code from Accept-Language header |
src/app/utils.tsx → fetchWithIdentity() | Sets Accept-Language header on every API request from i18n.language |
src/app/utils.tsx → translateBackend() | Translates backend message_code / content_code using frontend i18n |
For fixed strings in Python that appear in the UI, do NOT translate in Python.
Return a message_code and let the frontend translate:
Frontend consumption:
Translation keys go in src/i18n/locales/{en,zh}/messages.json under messages.agent.*.
| Pattern | Why it's wrong |
|---|---|
os.environ.get("DF_DEFAULT_LANGUAGE") | Process-level — all users get same language; breaks multi-user |
| Global LLM client interceptor | Hidden behavior; can't distinguish full/compact mode; fragile string detection |
New MessageBuilder class | Duplicates agent_language.py; creates parallel conflicting abstractions |
Hardcoded "回答请使用中文" in prompts | Not configurable; skips the mode system; breaks for other languages |
Backend-side translation dict (agent_messages.py) | Forces adding every new language to Python; translations should all live in src/i18n/locales/ |
Hardcoded English UI strings in .tsx without t() | Not translatable; use useTranslation + t('key') |
LANGUAGE_DISPLAY_NAMES in agents/agent_language.py.LANGUAGE_EXTRA_RULES (e.g. simplified vs traditional Chinese).src/i18n/locales/<lang>/ — copy an existing locale folder as template.