引文元素必须显式设置lang属性,不能依赖继承;、、等须按实际内容语言精确标注,值须符合BCP 47标准,否则屏幕阅读器误读、翻译失效、:lang()选择器不生效。

引文元素必须显式加 lang,不能靠继承
浏览器和屏幕阅读器不会从 自动推断引文语言。哪怕整页是中文,<blockquote></blockquote> 里的英文原文仍会被普通话引擎硬读成“阿皮”或“欧斯”,除非你手动标出 lang="en"。
常见错误是只给外层容器加 lang:<div lang="en"><blockquote>API</blockquote></div>——<div> 没有语义语言含义,读屏软件直接忽略。
<ul>
<li>
<code><blockquote lang="en">The API is unstable.</blockquote> ✅ 正确:语义合理 + 显式声明
<q lang="fr">Merci beaucoup.</q> ✅ <q></q> 是内联引文,同样支持 lang
<cite lang="ja">『源氏物語』</cite> ✅ 书名、专有名词等语义明确的引用场景也适用
lang 值要匹配引文实际内容,不是页面主语言
别为了省事统一写成 lang="zh-CN"。一段日文俳句、一段德文法律条文、一段拉丁文格言,各自得用对应语言码,否则拼写检查失效、语音引擎错配、翻译工具无法触发上下文识别。
例如:<blockquote lang="de">Die Wahrheit ist immer die einfachste Erklärung.</blockquote> —— 写成 lang="zh-CN" 或 lang="en" 都会让 Chrome 翻译按钮不出现,NVDA 也会用中文发音念德文单词。
立即学习“前端免费学习笔记(深入)”;
- 英文用
en或en-US(后者更精确,但en已足够) - 法文优先
fr,非必须加地区码;若强调加拿大法语可写fr-CA - 日文用
ja即可,ja-JP不必要,除非你要排除巴西日裔社区的变体 - 避免
lang="Chinese"、lang="jp"这类非 BCP 47 格式,浏览器静默忽略
配合 :lang() CSS 选择器做视觉微调
:lang(en) 这类选择器只有在元素真实携带对应 lang 属性时才生效。它不是装饰,而是可访问性链路的一环——比如让英文引文默认用无衬线字体,中文引文保留宋体,或对阿拉伯语引文启用 text-align: right。
生成可在 deepbi 沙箱 iframe 内运行或作为独立文件运行的交互式 HTML 页面,使用 `window.deepbi` JS SDK 实现数据查询、空间管理、文件浏览及用户操作。当用户提出以下需求时启用该能力: - 创建 KPI 仪表盘、数据表格、文件浏览器、成员列表、管理页面; - 明确要求“转成 dhtml”、“转译成 HTML”、“把 XX 页面转成……”、“控制台页面”、“管理后台”、“DeepBI 页面迁移”; - 提及位于 `apps/console/src/featur
示例:
blockquote:lang(en) {
font-family: "Segoe UI", system-ui;
}
blockquote:lang(zh-Hans) {
font-family: "PingFang SC", "Noto Sans CJK SC";
}
注意::lang(zh) 不会匹配 <blockquote lang="zh-CN"></blockquote>,必须写成 :lang(zh-CN) 或用属性选择器前缀匹配:[lang^="zh"]。
动态插入引文时,lang 必须同步设置
用 JS 插入 <blockquote></blockquote> 后,光设 innerHTML 不够。如果内容本身是英文,却没带 lang="en",那它就只是“一段没语言标签的文本”,后续任何可访问性逻辑都失效。
- 错误写法:
el.innerHTML = "<blockquote>Hello world</blockquote>" - 正确写法:
el.innerHTML = "<blockquote lang='\"en\"'>Hello world</blockquote>" - React/Vue 中也要确保 JSX/模板里显式传入
lang属性,不能依赖父组件语言上下文
最容易被忽略的是:引文可能来自 CMS 富文本字段,而编辑器没提供语言标注入口——这时得在渲染层做兜底判断(比如正则匹配 Unicode 范围),但不如源头结构化支持可靠。


















