srclang必须是合法BCP 47语言标签,如zh、en、ja或zh-Hans等;拼写错误、大小写错误、缺失或重复值均导致track被静默丢弃,无法出现在字幕菜单中。

srclang 必须是合法 BCP 47 语言标签,不是自然语言名
写 srclang="Chinese" 或 srclang="english" 是无效的,浏览器直接忽略该 <track>,字幕不会出现在菜单里。浏览器只认标准语言子标签,比如 zh、en、ja,或带变体的 zh-Hans、zh-Hant、en-US。
-
zh✅ 简体中文通用标识,兼容性最好 -
zh-Hans✅ 明确简体,比zh-CN更推荐(后者绑定地域,zh-Hans描述书写系统) -
zh-Hant✅ 繁体中文,适用于台湾、香港等场景 -
en✅ 英文基础码,比en-US更稳妥(避免因系统设为en-GB导致不匹配) -
ja✅ 日语,不要写japanese
srclang 错误会导致整个 track 被静默丢弃
拼错、大小写混用、加空格或用下划线分隔(如 zh_CN),都会让浏览器拒绝注册这条轨道——控制台不报错,video.textTracks.length 也不增加,用户根本看不到该语言选项。
-
srclang="ch"❌ 不是 ISO 639-1 标准码 -
srclang="Zh"❌ 大小写敏感,必须小写 -
srclang="zh-cn"❌ 小写连字符可接受,但zh-CN不如zh-Hans语义准确 -
srclang=""或缺失该属性 ❌ 对kind="subtitles"是致命错误,轨道不进菜单
多语言共存时,srclang 值必须互不相同
同一 <video> 下多个 <track kind="subtitles">,它们的 srclang 不能重复。否则浏览器可能只加载第一个,其余被跳过——即使路径、格式都对,也只显示一种语言。
- 正确:
srclang="zh-Hans"+srclang="en"+srclang="ja" - 错误:
srclang="zh"和srclang="zh-Hans"同时存在 → Safari 可能只认前者,后者被忽略 - 错误:
srclang="zh"出现两次 → 第二个不会生效,textTracks列表里只有 1 条中文轨道
浏览器靠 srclang 匹配系统语言,但不保证自动启用
Chrome、Edge 会在加载时尝试匹配操作系统语言设置,比如系统设为「简体中文」,且存在 srclang="zh-Hans" 的 track,就可能默认选中它(前提是 default 未被其他 track 占用)。但这个行为不可控、不跨平台——Safari 移动端完全忽略 default,且不自动匹配;Firefox 表现也较保守。
立即学习“前端免费学习笔记(深入)”;
- 别依赖
srclang自动触发显示,用户仍需手动点开字幕开关 - 想真正“默认显示”,得用 JS 在
loadedmetadata后设track.mode = 'showing',且确认track.readyState === 2 -
srclang唯一可靠作用:决定该 track 是否出现在播放器字幕菜单里,以及能否被用户手动选中



















