Implementation:Langgenius Dify I18n Workflow Translations
| Knowledge Sources | |
|---|---|
| Domains | Internationalization, Frontend |
| Last Updated | 2026-02-08 00:00 GMT |
Overview
Concrete i18n translation bundle providing localized UI strings for the workflow section of the Dify frontend.
Description
This translation namespace contains all user-facing strings for the workflow editor interface, including node types and descriptions, change history tracking, conversation variables, environment variables, debug and variable inspection panels, error messages, global/system variables, all node-specific configuration UI (agent, answer, assigner, code, HTTP request, IF/ELSE, iteration, loop, knowledge retrieval, LLM, parameter extractor, question classifier, template transform, tool, triggers, and variable aggregator), onboarding flows, canvas operators, panel controls, single-run testing, tab navigation, version history, and publishing controls. The bundle is a flat JSON key-value map where keys use dot-delimited hierarchical naming (e.g., "blocks.llm") and values are the translated strings, optionally containing Template:Interpolation placeholders.
The canonical (source-of-truth) locale is en-US. All other locales mirror the same key structure with translated values.
Usage
Import translation keys from this namespace via the i18next hook:
import { useTranslation } from 'react-i18next'
const { t } = useTranslation()
t('workflow.blocks.llm') // Returns localized string
Code Reference
Source Location
- Repository: Langgenius_Dify
- Canonical File: web/i18n/en-US/workflow.json
Locale Variants
| Locale | File | Lines |
|---|---|---|
| en-US | web/i18n/en-US/workflow.json | 1051 |
| fa-IR | web/i18n/fa-IR/workflow.json | 1051 |
| fr-FR | web/i18n/fr-FR/workflow.json | 1051 |
| ro-RO | web/i18n/ro-RO/workflow.json | 1051 |
| th-TH | web/i18n/th-TH/workflow.json | 1051 |
| vi-VN | web/i18n/vi-VN/workflow.json | 1051 |
| zh-Hant | web/i18n/zh-Hant/workflow.json | 1051 |
Key Structure
The canonical en-US file contains 1049 translation keys organized under the following top-level prefixes:
| Prefix | Description | Example Key |
|---|---|---|
| blocks | Node type display names | "blocks.llm", "blocks.code", "blocks.http-request" |
| blocksAbout | Node type descriptions | "blocksAbout.llm", "blocksAbout.iteration" |
| changeHistory | Change history tracking labels | "changeHistory.title", "changeHistory.nodeAdd" |
| chatVariable | Conversation variable panel | "chatVariable.button", "chatVariable.modal.title" |
| common | Common workflow editor strings | "common.publish", "common.debugAndPreview", "common.run" |
| customWebhook | Custom webhook label | "customWebhook" |
| debug | Debug panel and variable inspector | "debug.lastRunTab", "debug.variableInspect.title" |
| difyTeam | Dify team label | "difyTeam" |
| entryNodeStatus | Entry node status indicators | "entryNodeStatus.enabled", "entryNodeStatus.disabled" |
| env | Environment variable management | "env.envPanelTitle", "env.modal.title" |
| error | Error operation messages | "error.operations.addingNodes" |
| errorMsg | Validation error messages | "errorMsg.fieldRequired", "errorMsg.invalidJson" |
| globalVar | System/global variable descriptions | "globalVar.title", "globalVar.fieldsDescription.userId" |
| nodes | Node-specific configuration UI | "nodes.agent.strategy.label", "nodes.llm.prompt", "nodes.http.api" |
| onboarding | Onboarding flow strings | "onboarding.title", "onboarding.trigger" |
| operator | Canvas zoom and alignment controls | "operator.zoomIn", "operator.alignNodes" |
| panel | Panel navigation and controls | "panel.about", "panel.checklist", "panel.runThisStep" |
| publishLimit | Publishing limit messages | "publishLimit.startNodeDesc" |
| sidebar | Sidebar export warnings | "sidebar.exportWarning" |
| singleRun | Single-run testing UI | "singleRun.startRun", "singleRun.testRun" |
| tabs | Tab navigation and search | "tabs.blocks", "tabs.tools", "tabs.searchBlock" |
| tracing | Tracing labels | "tracing.stopBy" |
| triggerStatus | Trigger status indicators | "triggerStatus.enabled", "triggerStatus.disabled" |
| variableReference | Variable reference descriptions | "variableReference.conversationVars" |
| versionHistory | Version history management | "versionHistory.title", "versionHistory.copyId" |
{
"blocks.llm": "LLM",
"blocksAbout.llm": "Invoking large language models to answer questions or process natural language",
"changeHistory.title": "Change History",
"chatVariable.button": "Add Variable",
"common.publish": "Publish",
"customWebhook": "Custom Webhook",
"debug.lastRunTab": "Last Run",
"difyTeam": "Dify Team",
"entryNodeStatus.enabled": "START",
"env.envPanelTitle": "Environment Variables",
"error.operations.addingNodes": "adding nodes",
"errorMsg.fieldRequired": "{{field}} is required",
"globalVar.title": "System Variables",
"nodes.agent.strategy.label": "Agentic Strategy",
"onboarding.title": "Select a start node to begin",
"operator.zoomIn": "Zoom In",
"panel.about": "About",
"publishLimit.startNodeDesc": "You've reached the limit of 2 triggers...",
"sidebar.exportWarning": "Export Current Saved Version",
"singleRun.startRun": "Start Run",
"tabs.blocks": "Nodes",
"tracing.stopBy": "Stop by {{user}}",
"triggerStatus.enabled": "TRIGGER",
"variableReference.conversationVars": "conversation variables",
"versionHistory.title": "Versions"
}
Import
// Keys from this namespace are accessed via useTranslation
import { useTranslation } from 'react-i18next'
I/O Contract
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
| key | string | Yes | Dot-delimited translation key (e.g., "blocks.llm") |
| interpolation | Record<string, string> | No | Values for Template:Placeholder replacements (e.g., Template:Field, Template:User, Template:Count) |
Outputs
| Name | Type | Description |
|---|---|---|
| translated string | string | The localized string for the current locale |
Usage Examples
import { useTranslation } from 'react-i18next'
function MyComponent() {
const { t } = useTranslation()
return <span>{t('workflow.blocks.llm')}</span>
}
// With interpolation
function ErrorMessage({ field }: { field: string }) {
const { t } = useTranslation()
return <span>{t('workflow.errorMsg.fieldRequired', { field })}</span>
}