srclang是字幕轨道的唯一语言标识,必须为合法BCP 47标签(如zh、en-US),错误将导致轨道被浏览器静默忽略;它与label分工明确,缺一不可,且决定默认激活逻辑。

srclang 不是可有可无的标识符,它是浏览器识别、匹配、切换字幕的唯一语言依据;写错、漏掉或用非标准码,字幕就直接消失——不是不显示文字,而是整个轨道被浏览器静默忽略。
srclang 必须是合法 BCP 47 语言标签,不是自然语言名
浏览器只认标准语言子标签,比如 zh、en-US、ja、ar,不接受 ch、english、Chinese、zh-cn(旧式写法)这类常见错误。
-
zh-Hans比zh更精确,适合区分简体/繁体,但zh已足够触发 Chrome/Firefox 的语言匹配逻辑 -
zh-TW和zh-Hant都有效,但不要混用(如zh-tw小写不符合规范,部分 Safari 版本会失效) - ISO 639-1 双字母码是底线要求;BCP 47 允许扩展,但必须格式正确,例如
es-419(拉丁美洲西班牙语)可被识别,es_LA则不行
srclang 和 label 各司其职,缺一不可
srclang 是给浏览器看的机器码,label 是给用户看的菜单名。两者不绑定,但必须同时存在:缺 srclang,轨道进不了字幕列表;缺 label,右键菜单里只显示“字幕”两个字,用户根本分不清哪条是中文、哪条是日文。
- 推荐写法:
srclang="zh"+label="中文(简体)",或srclang="en"+label="English" - 避免
label="zh"或label="subtitles"这类无意义值 - 如果用 JS 动态控制字幕,
video.textTracks[i].language返回的就是srclang值,不是label
多个 track 共存时,srclang 决定默认激活逻辑
浏览器(尤其是 Chrome 和 Edge)会在页面加载后,根据系统语言自动启用第一个 srclang 匹配的 kind="subtitles" 轨道——前提是该轨道没被用户手动禁用过,且没被其他脚本干扰。
生成可在 deepbi 沙箱 iframe 内运行或作为独立文件运行的交互式 HTML 页面,使用 `window.deepbi` JS SDK 实现数据查询、空间管理、文件浏览及用户操作。当用户提出以下需求时启用该能力: - 创建 KPI 仪表盘、数据表格、文件浏览器、成员列表、管理页面; - 明确要求“转成 dhtml”、“转译成 HTML”、“把 XX 页面转成……”、“控制台页面”、“管理后台”、“DeepBI 页面迁移”; - 提及位于 `apps/console/src/featur
立即学习“前端免费学习笔记(深入)”;
- 如果系统语言是
zh-CN,而你只写了srclang="zh",它会被自动选中;但写成srclang="zh-HK"就不会 -
default属性在现代浏览器中已弱化:它只在“用户从未操作过字幕开关”的首次加载时起作用,一旦用户点过一次菜单,default就彻底失效 - 真正可靠的默认行为,是靠
srclang与系统语言对齐,而不是依赖default
srclang 错误导致的典型现象和排查点
字幕“看不见”往往不是样式或路径问题,而是 srclang 触发了浏览器的静默丢弃机制——DOM 里元素还在,但 video.textTracks.length 为 0,或 readyState 始终是 0。
- 检查控制台是否报
Failed to load resource: the server responded with a status of 404 ():这说明 src 路径错,但不影响textTracks列表生成 - 如果
video.textTracks.length === 0,重点查kind是否拼错(如caption少了个s)、srclang是否非法、track是否没放在video直接子级位置 - VTT 文件头部必须是
WEBVTT(全大写、顶行、无空格、无 BOM),否则即使srclang正确,轨道也会加载失败且不报错
最常被忽略的是:srclang 不是“设置后就完事”的属性,它参与整个字幕生命周期——从初始匹配、JS 切换定位,到无障碍读取和系统语言回退,任何环节出错都会让字幕彻底隐身。别把它当成 label 的复制品,它是字幕轨道的身份证号。


















