lang属性必须写在标签上,如;用ru-ru而非ru或错误格式;嵌入英文内容需局部标注lang="en";css中应使用[lang|="ru"]匹配所有俄语变体;动态插入内容须显式设置lang="ru-ru"。

lang属性必须写在html>标签上,其他位置无效
俄语新闻页面的主语言声明,lang只能出现在标签里,比如。写在、<div>或用JS后期赋值(如<code>document.documentElement.lang = "ru-RU"),浏览器和屏幕阅读器都当没看见——Chrome翻译按钮不出现,NVDA会按系统默认语种(比如英语)朗读俄语单词,Google Search Console可能报“未指定语言”。
俄语该用ru还是ru-RU?别用ru-RU以外的变体
必须用ru-RU,不是ru、ru_RU、Russian或ru-ru。BCP 47规范要求小写字母+短横线,地区码虽非强制但强烈建议带上:俄罗斯本土的拼写习惯、标点规则(如引号用«»而非“”)、词典匹配和TTS语音引擎都依赖ru-RU这个完整标识。用ru会导致部分旧版JAWS跳过俄语语音库,直接fallback到英文发音;用下划线或大写会被静默忽略,等同于没设。
含英文标题或引用时,怎么局部标注语言
主页面是俄语,但若嵌入英文新闻源标题、作者署名或代码片段,必须显式加lang到对应元素上,不能靠继承:
-
<h1 lang="en">Russia’s Economy in 2026</h1>—— 告诉屏幕阅读器这段读英文,避免把“Russia”按俄语规则读成“Раша” -
<blockquote lang="en"><p>The Central Bank reported...</p></blockquote>—— Chrome翻译会单独识别并提供英→俄翻译选项 -
<code lang="en">const inflationRate = 5.2;—— IDE和语法高亮工具据此判断上下文,lang="javascript"是非法值,语言码必须是真实自然语言
不要给整个<section></section>加lang="en"再包一堆俄语段落——语义错乱,且会干扰:lang(ru)样式匹配。
:lang(ru) CSS选择器为什么没生效
:lang(ru)只匹配lang="ru",不匹配lang="ru-RU";而:lang(ru-RU)又无法命中lang="ru"。所以俄语页面想统一控制排版(比如调整西里尔字母间距、设置«»引号),得用[lang|="ru"]:
q:lang(ru-RU), q[lang|="ru"] {
quotes: "«" "»" "„" "“";
letter-spacing: 0.02em;
}
这个选择器能覆盖ru、ru-RU、ru-UA等所有以ru开头的合法值。另外注意::lang()是继承的,但前提是父元素有合法lang值——如果写错了位置或值非法,整个链路就断了。
最常被忽略的一点:俄语新闻页若含大量用户评论(尤其是动态加载的),每个新插入的<p></p>或<div>必须自带<code>lang="ru-RU",否则屏幕阅读器对后续内容完全失语——这不是CSS问题,是可访问性树构建失败。











