SSE 本身不处理多语言,但可通过服务端按 Accept-Language 或 JWT locale 字段生成本地化消息、前端用 i18n 库解析 key 渲染,并配合 RTL、日期、货币等格式化策略实现多语言实时推送。

SSE(Server-Sent Events)本身不处理多语言,但可以和国际化机制协同工作,实现“按用户语言实时推送本地化内容”。关键不在 SSE 协议本身,而在于服务端如何根据请求上下文(如语言标识)生成对应语言的消息,以及前端如何正确渲染。
服务端按语言生成 SSE 流
客户端发起 SSE 请求时,应携带语言偏好(如通过 Accept-Language 请求头、URL 查询参数或认证 token 中的 locale 字段)。服务端据此加载对应语言的资源(如 JSON 翻译包或数据库本地化字段),再将已翻译的内容推送给该连接。
- 推荐用 Accept-Language 自动提取首选语言(如
zh-CN、en-US),避免额外参数污染 URL - 若使用 token 认证(如 JWT),可在 payload 中嵌入
locale: "fr-FR",更可靠且支持用户手动切换 - 避免在服务端硬编码多语言逻辑;建议复用现有 i18n 框架(如 i18next 的后端适配器或 Node.js 的
i18n-2)做运行时翻译
前端接收并动态渲染本地化消息
前端接收到 SSE 数据后,不应直接显示原始文本字段(如 message: "new_order"),而应将其作为翻译 key,交由前端 i18n 库(如 i18next、vue-i18n 或 @lingui/js)解析成当前语言的实际文案。
- 服务端推送结构建议:发送带 key 和可选插值的数据,例如
{"key": "notification.order_placed", "values": {"order_id": "ORD-7890"}} - 前端用
i18next.t(key, values)渲染,确保与当前 active locale 同步 - 若用户中途切换语言,需重新初始化 SSE 连接(关闭旧流,用新 language header 建立新连接),避免语言错乱
注意 RTL 和格式敏感内容的兼容性
某些语言(如阿拉伯语、希伯来语)需要右到左(RTL)布局,日期、数字、货币格式也因语言而异。SSE 推送的内容若含这些信息,服务端应在生成阶段完成格式化,而非交由前端二次处理。
立即学习“Java免费学习笔记(深入)”;
- 日期时间推荐用 ISO 格式(如
"2026-08-13T15:17:00Z")传输,前端用Intl.DateTimeFormat按 locale 格式化 - 金额类字段可推送数值 + 货币码(如
{"amount": 199.99, "currency": "EUR"}),由前端用Intl.NumberFormat格式化 - 对 RTL 语言,可在 SSE 数据中附带
dir: "rtl",用于动态设置容器dir属性或 CSS 变量
避免常见陷阱
SSE 在多语言场景下容易因缓存、连接复用或 locale 不一致导致内容错位。需主动规避:
- 禁用代理或 CDN 对 SSE 响应的缓存(设置
Cache-Control: no-cache和Pragma: no-cache) - 每个语言环境应有独立的 SSE 连接;不要复用同一连接推送多种语言消息
- 服务端记录每个连接的 locale 并绑定会话,防止负载均衡下语言上下文丢失
- 前端监听
onerror并重连时,必须重新传入当前 locale,不能沿用初始请求头


















