| 1 | {
|
|---|
| 2 | "lang": "ru",
|
|---|
| 3 | "rules": {
|
|---|
| 4 | "accesskeys": {
|
|---|
| 5 | "description": "Убедитесь, что значение атрибута accesskey является уникальным",
|
|---|
| 6 | "help": "Значение атрибута accesskey должно быть уникальным"
|
|---|
| 7 | },
|
|---|
| 8 | "area-alt": {
|
|---|
| 9 | "description": "Убедитесь, что элементы <area> карт изображений имеют альтернативный текст",
|
|---|
| 10 | "help": "Активные элементы <area> должны иметь альтернативный текст"
|
|---|
| 11 | },
|
|---|
| 12 | "aria-allowed-attr": {
|
|---|
| 13 | "description": "Убедитесь, что роль элемента поддерживает его ARIA атрибуты",
|
|---|
| 14 | "help": "Элементы должны использовать только поддерживаемые ARIA атрибуты"
|
|---|
| 15 | },
|
|---|
| 16 | "aria-allowed-role": {
|
|---|
| 17 | "description": "Убедитесь, что атрибут role имеет допустимое значение для элемента",
|
|---|
| 18 | "help": "ARIA роль должна быть подходящей для элемента"
|
|---|
| 19 | },
|
|---|
| 20 | "aria-braille-equivalent": {
|
|---|
| 21 | "description": "Убедитесь, что aria-braillelabel и aria-brailleroledescription имеют эквивалентный текст не для шрифта Брайля",
|
|---|
| 22 | "help": "Атрибуты aria-braille должны иметь эквивалентный текст не для шрифта Брайля"
|
|---|
| 23 | },
|
|---|
| 24 | "aria-command-name": {
|
|---|
| 25 | "description": "Убедитесь, что каждая ARIA кнопка, ссылка и пункт меню имеет доступное имя",
|
|---|
| 26 | "help": "ARIA команды должны иметь доступное имя"
|
|---|
| 27 | },
|
|---|
| 28 | "aria-conditional-attr": {
|
|---|
| 29 | "description": "Убедитесь, что ARIA атрибуты используются в соответствии со спецификацией роли элемента",
|
|---|
| 30 | "help": "ARIA атрибуты должны использоваться в соответствии с ролью элемента"
|
|---|
| 31 | },
|
|---|
| 32 | "aria-deprecated-role": {
|
|---|
| 33 | "description": "Убедитесь, что элементы не используют устаревшие роли",
|
|---|
| 34 | "help": "Устаревшие ARIA роли не должны использоваться"
|
|---|
| 35 | },
|
|---|
| 36 | "aria-dialog-name": {
|
|---|
| 37 | "description": "Убедитесь, что каждая ARIA диалоговая форма и alertdialog узел имеют доступное имя",
|
|---|
| 38 | "help": "ARIA диалоговые формы и alertdialog узлы должны иметь доступное имя"
|
|---|
| 39 | },
|
|---|
| 40 | "aria-hidden-body": {
|
|---|
| 41 | "description": "Убедитесь, что aria-hidden=\"true\" отсутствует на теле документа.",
|
|---|
| 42 | "help": "aria-hidden=\"true\" не должно присутствовать на теле документа"
|
|---|
| 43 | },
|
|---|
| 44 | "aria-hidden-focus": {
|
|---|
| 45 | "description": "Убедитесь, что aria-hidden элементы не могут быть сфокусированы и не содержат фокусируемых элементов",
|
|---|
| 46 | "help": "ARIA скрытые элементы не должны быть фокусируемыми или содержать фокусируемые элементы"
|
|---|
| 47 | },
|
|---|
| 48 | "aria-input-field-name": {
|
|---|
| 49 | "description": "Убедитесь, что каждое ARIA поле ввода имеет доступное имя",
|
|---|
| 50 | "help": "ARIA поля ввода должны иметь доступное имя"
|
|---|
| 51 | },
|
|---|
| 52 | "aria-meter-name": {
|
|---|
| 53 | "description": "Убедитесь, что каждый ARIA meter узел имеет доступное имя",
|
|---|
| 54 | "help": "ARIA meter узлы должны иметь доступное имя"
|
|---|
| 55 | },
|
|---|
| 56 | "aria-progressbar-name": {
|
|---|
| 57 | "description": "Убедитесь, что каждый ARIA progressbar узел имеет доступное имя",
|
|---|
| 58 | "help": "ARIA progressbar узлы должны иметь доступное имя"
|
|---|
| 59 | },
|
|---|
| 60 | "aria-prohibited-attr": {
|
|---|
| 61 | "description": "Убедитесь, что ARIA атрибуты не запрещены для роли элемента",
|
|---|
| 62 | "help": "Элементы должны использовать только разрешенные ARIA атрибуты"
|
|---|
| 63 | },
|
|---|
| 64 | "aria-required-attr": {
|
|---|
| 65 | "description": "Убедитесь, что элементы с ARIA ролями имеют все необходимые ARIA атрибуты",
|
|---|
| 66 | "help": "Необходимые ARIA атрибуты должны быть предоставлены"
|
|---|
| 67 | },
|
|---|
| 68 | "aria-required-children": {
|
|---|
| 69 | "description": "Убедитесь, что элементы с ARIA ролями, требующими дочерние роли, содержат их",
|
|---|
| 70 | "help": "Некоторые ARIA роли должны содержать определенные дочерние роли"
|
|---|
| 71 | },
|
|---|
| 72 | "aria-required-parent": {
|
|---|
| 73 | "description": "Убедитесь, что элементы с ARIA ролями, требующими родительские роли, содержатся ими",
|
|---|
| 74 | "help": "Некоторые ARIA роли должны содержаться в определенных родительских ролях"
|
|---|
| 75 | },
|
|---|
| 76 | "aria-roledescription": {
|
|---|
| 77 | "description": "Убедитесь, что aria-roledescription используется только на элементах с явной или неявной ролью",
|
|---|
| 78 | "help": "aria-roledescription должен использоваться на элементах с семантической ролью"
|
|---|
| 79 | },
|
|---|
| 80 | "aria-roles": {
|
|---|
| 81 | "description": "Убедитесь, что все элементы с атрибутом role используют допустимое значение",
|
|---|
| 82 | "help": "ARIA роли должны соответствовать допустимым значениям"
|
|---|
| 83 | },
|
|---|
| 84 | "aria-text": {
|
|---|
| 85 | "description": "Убедитесь, что роль=\"text\" используется на элементах без фокусируемых потомков",
|
|---|
| 86 | "help": "\"роль=text\" не должна иметь фокусируемых потомков"
|
|---|
| 87 | },
|
|---|
| 88 | "aria-toggle-field-name": {
|
|---|
| 89 | "description": "Убедитесь, что каждое ARIA toggle поле имеет доступное имя",
|
|---|
| 90 | "help": "ARIA toggle поля должны иметь доступное имя"
|
|---|
| 91 | },
|
|---|
| 92 | "aria-tooltip-name": {
|
|---|
| 93 | "description": "Убедитесь, что каждый ARIA tooltip узел имеет доступное имя",
|
|---|
| 94 | "help": "ARIA tooltip узлы должны иметь доступное имя"
|
|---|
| 95 | },
|
|---|
| 96 | "aria-treeitem-name": {
|
|---|
| 97 | "description": "Убедитесь, что каждый ARIA treeitem узел имеет доступное имя",
|
|---|
| 98 | "help": "ARIA treeitem узлы должны иметь доступное имя"
|
|---|
| 99 | },
|
|---|
| 100 | "aria-valid-attr-value": {
|
|---|
| 101 | "description": "Убедитесь, что все ARIA атрибуты имеют допустимые значения",
|
|---|
| 102 | "help": "ARIA атрибуты должны соответствовать допустимым значениям"
|
|---|
| 103 | },
|
|---|
| 104 | "aria-valid-attr": {
|
|---|
| 105 | "description": "Убедитесь, что атрибуты, начинающиеся с aria-, являются допустимыми ARIA атрибутами",
|
|---|
| 106 | "help": "ARIA атрибуты должны соответствовать допустимым именам"
|
|---|
| 107 | },
|
|---|
| 108 | "audio-caption": {
|
|---|
| 109 | "description": "Убедитесь, что элементы <audio> имеют субтитры",
|
|---|
| 110 | "help": "Элементы <audio> должны иметь трек субтитров"
|
|---|
| 111 | },
|
|---|
| 112 | "autocomplete-valid": {
|
|---|
| 113 | "description": "Убедитесь, что атрибут autocomplete правильный и подходит для поля формы",
|
|---|
| 114 | "help": "Атрибут autocomplete должен использоваться правильно"
|
|---|
| 115 | },
|
|---|
| 116 | "avoid-inline-spacing": {
|
|---|
| 117 | "description": "Убедитесь, что расстояние между текстом, установленное через атрибуты стиля, можно настроить с помощью пользовательских таблиц стилей",
|
|---|
| 118 | "help": "Встроенное текстовое пространство должно быть регулируемым с помощью пользовательских таблиц стилей"
|
|---|
| 119 | },
|
|---|
| 120 | "blink": {
|
|---|
| 121 | "description": "Убедитесь, что элементы <blink> не используются",
|
|---|
| 122 | "help": "Элементы <blink> устарели и не должны использоваться"
|
|---|
| 123 | },
|
|---|
| 124 | "button-name": {
|
|---|
| 125 | "description": "Убедитесь, что кнопки имеют различимый текст",
|
|---|
| 126 | "help": "Кнопки должны иметь различимый текст"
|
|---|
| 127 | },
|
|---|
| 128 | "bypass": {
|
|---|
| 129 | "description": "Убедитесь, что на каждой странице есть хотя бы один механизм, позволяющий пользователю обходить навигацию и переходить непосредственно к содержимому",
|
|---|
| 130 | "help": "На странице должен быть способ обойти повторяющиеся блоки"
|
|---|
| 131 | },
|
|---|
| 132 | "color-contrast-enhanced": {
|
|---|
| 133 | "description": "Убедитесь, что контраст между цветами переднего и заднего плана соответствует пороговым значениям улучшенной контрастности WCAG 2 AAA",
|
|---|
| 134 | "help": "Элементы должны соответствовать пороговым значениям улучшенной контрастности цвета"
|
|---|
| 135 | },
|
|---|
| 136 | "color-contrast": {
|
|---|
| 137 | "description": "Убедитесь, что контраст между цветами переднего и заднего плана соответствует минимальным пороговым значениям контрастности WCAG 2 AA",
|
|---|
| 138 | "help": "Элементы должны соответствовать минимальным пороговым значениям контрастности цвета"
|
|---|
| 139 | },
|
|---|
| 140 | "css-orientation-lock": {
|
|---|
| 141 | "description": "Убедитесь, что содержимое не привязано к определенной ориентации дисплея, и оно доступно во всех ориентациях дисплея",
|
|---|
| 142 | "help": "Медиа-запросы CSS не должны блокировать ориентацию дисплея"
|
|---|
| 143 | },
|
|---|
| 144 | "definition-list": {
|
|---|
| 145 | "description": "Убедитесь, что элементы <dl> структурированы правильно",
|
|---|
| 146 | "help": "Элементы <dl> должны содержать только группы <dt> и <dd>, <script>, <template> или <div> элементы"
|
|---|
| 147 | },
|
|---|
| 148 | "dlitem": {
|
|---|
| 149 | "description": "Убедитесь, что элементы <dt> и <dd> находятся внутри <dl>",
|
|---|
| 150 | "help": "Элементы <dt> и <dd> должны быть размещены внутри <dl>"
|
|---|
| 151 | },
|
|---|
| 152 | "document-title": {
|
|---|
| 153 | "description": "Убедитесь, что каждый HTML-документ содержит непустой элемент <title>",
|
|---|
| 154 | "help": "Документы должны иметь элемент <title> для навигации"
|
|---|
| 155 | },
|
|---|
| 156 | "duplicate-id-active": {
|
|---|
| 157 | "description": "Убедитесь, что каждое значение атрибута id активных элементов уникально",
|
|---|
| 158 | "help": "Идентификаторы активных элементов должны быть уникальными"
|
|---|
| 159 | },
|
|---|
| 160 | "duplicate-id-aria": {
|
|---|
| 161 | "description": "Убедитесь, что каждое значение атрибута id, используемого в ARIA и метках, уникально",
|
|---|
| 162 | "help": "Идентификаторы, используемые в ARIA и метках, должны быть уникальными"
|
|---|
| 163 | },
|
|---|
| 164 | "duplicate-id": {
|
|---|
| 165 | "description": "Убедитесь, что каждое значение атрибута id уникально",
|
|---|
| 166 | "help": "Значение атрибута id должно быть уникальным"
|
|---|
| 167 | },
|
|---|
| 168 | "empty-heading": {
|
|---|
| 169 | "description": "Убедитесь, что заголовки содержат различимый текст",
|
|---|
| 170 | "help": "Заголовки не должны быть пустыми"
|
|---|
| 171 | },
|
|---|
| 172 | "empty-table-header": {
|
|---|
| 173 | "description": "Убедитесь, что заголовки таблиц содержат различимый текст",
|
|---|
| 174 | "help": "Текст заголовка таблицы не должен быть пустым"
|
|---|
| 175 | },
|
|---|
| 176 | "focus-order-semantics": {
|
|---|
| 177 | "description": "Убедитесь, что элементы в порядке фокуса имеют роль, соответствующую интерактивному содержимому",
|
|---|
| 178 | "help": "Элементы в порядке фокуса должны иметь соответствующую роль"
|
|---|
| 179 | },
|
|---|
| 180 | "form-field-multiple-labels": {
|
|---|
| 181 | "description": "Убедитесь, что поле формы не имеет нескольких элементов label",
|
|---|
| 182 | "help": "Поле формы не должно иметь несколько элементов label"
|
|---|
| 183 | },
|
|---|
| 184 | "frame-focusable-content": {
|
|---|
| 185 | "description": "Убедитесь, что элементы <frame> и <iframe> с фокусируемым содержимым не имеют tabindex=-1",
|
|---|
| 186 | "help": "Фреймы с фокусируемым содержимым не должны иметь tabindex=-1"
|
|---|
| 187 | },
|
|---|
| 188 | "frame-tested": {
|
|---|
| 189 | "description": "Убедитесь, что элементы <iframe> и <frame> содержат скрипт axe-core",
|
|---|
| 190 | "help": "Фреймы должны быть протестированы с помощью axe-core"
|
|---|
| 191 | },
|
|---|
| 192 | "frame-title-unique": {
|
|---|
| 193 | "description": "Убедитесь, что элементы <iframe> и <frame> содержат уникальный атрибут title",
|
|---|
| 194 | "help": "Фреймы должны иметь уникальный атрибут title"
|
|---|
| 195 | },
|
|---|
| 196 | "frame-title": {
|
|---|
| 197 | "description": "Убедитесь, что элементы <iframe> и <frame> имеют доступное имя",
|
|---|
| 198 | "help": "Фреймы должны иметь доступное имя"
|
|---|
| 199 | },
|
|---|
| 200 | "heading-order": {
|
|---|
| 201 | "description": "Убедитесь, что порядок заголовков соответствует семантической структуре",
|
|---|
| 202 | "help": "Уровни заголовков должны увеличиваться на единицу"
|
|---|
| 203 | },
|
|---|
| 204 | "hidden-content": {
|
|---|
| 205 | "description": "Информирует пользователей о скрытом содержимом.",
|
|---|
| 206 | "help": "Скрытое содержимое на странице должно быть проанализировано"
|
|---|
| 207 | },
|
|---|
| 208 | "html-has-lang": {
|
|---|
| 209 | "description": "Убедитесь, что каждый HTML-документ имеет атрибут lang",
|
|---|
| 210 | "help": "Элемент <html> должен иметь атрибут lang"
|
|---|
| 211 | },
|
|---|
| 212 | "html-lang-valid": {
|
|---|
| 213 | "description": "Убедитесь, что атрибут lang элемента <html> имеет допустимое значение",
|
|---|
| 214 | "help": "Элемент <html> должен иметь допустимое значение для атрибута lang"
|
|---|
| 215 | },
|
|---|
| 216 | "html-xml-lang-mismatch": {
|
|---|
| 217 | "description": "Убедитесь, что HTML элементы с атрибутами lang и xml:lang согласуются в базовом языке страницы",
|
|---|
| 218 | "help": "HTML элементы с атрибутами lang и xml:lang должны согласоваться в базовом языке"
|
|---|
| 219 | },
|
|---|
| 220 | "identical-links-same-purpose": {
|
|---|
| 221 | "description": "Убедитесь, что ссылки с одинаковым доступным именем выполняют схожую цель",
|
|---|
| 222 | "help": "Ссылки с одинаковым именем должны выполнять схожую цель"
|
|---|
| 223 | },
|
|---|
| 224 | "image-alt": {
|
|---|
| 225 | "description": "Убедитесь, что элементы <img> имеют альтернативный текст или роль \"none\" или \"presentation\"",
|
|---|
| 226 | "help": "Изображения должны иметь альтернативный текст"
|
|---|
| 227 | },
|
|---|
| 228 | "image-redundant-alt": {
|
|---|
| 229 | "description": "Убедитесь, что альтернативный текст изображения не повторяется в тексте",
|
|---|
| 230 | "help": "Альтернативный текст изображения не должен повторяться в тексте"
|
|---|
| 231 | },
|
|---|
| 232 | "input-button-name": {
|
|---|
| 233 | "description": "Убедитесь, что кнопки ввода имеют различимый текст",
|
|---|
| 234 | "help": "Кнопки ввода должны иметь различимый текст"
|
|---|
| 235 | },
|
|---|
| 236 | "input-image-alt": {
|
|---|
| 237 | "description": "Убедитесь, что элементы <input type=\"image\"> имеют альтернативный текст",
|
|---|
| 238 | "help": "Кнопки изображения должны иметь альтернативный текст"
|
|---|
| 239 | },
|
|---|
| 240 | "label-content-name-mismatch": {
|
|---|
| 241 | "description": "Убедитесь, что элементы, маркированные через их содержимое, содержат видимый текст как часть доступного имени",
|
|---|
| 242 | "help": "Элементы должны содержать видимый текст как часть доступного имени"
|
|---|
| 243 | },
|
|---|
| 244 | "label-title-only": {
|
|---|
| 245 | "description": "Убедитесь, что каждый элемент формы имеет видимую метку и не маркируется исключительно скрытыми метками, или атрибутами title или aria-describedby",
|
|---|
| 246 | "help": "Элементы формы должны иметь видимую метку"
|
|---|
| 247 | },
|
|---|
| 248 | "label": {
|
|---|
| 249 | "description": "Убедитесь, что каждый элемент формы имеет метку",
|
|---|
| 250 | "help": "Элементы формы должны иметь метки"
|
|---|
| 251 | },
|
|---|
| 252 | "landmark-banner-is-top-level": {
|
|---|
| 253 | "description": "Убедитесь, что область баннера находится на верхнем уровне",
|
|---|
| 254 | "help": "Область баннера не должна быть вложена в другую область"
|
|---|
| 255 | },
|
|---|
| 256 | "landmark-complementary-is-top-level": {
|
|---|
| 257 | "description": "Убедитесь, что дополнительная область или aside находятся на верхнем уровне",
|
|---|
| 258 | "help": "Aside не должен быть вложен в другую область"
|
|---|
| 259 | },
|
|---|
| 260 | "landmark-contentinfo-is-top-level": {
|
|---|
| 261 | "description": "Убедитесь, что область contentinfo находится на верхнем уровне",
|
|---|
| 262 | "help": "Область contentinfo не должна быть вложена в другую область"
|
|---|
| 263 | },
|
|---|
| 264 | "landmark-main-is-top-level": {
|
|---|
| 265 | "description": "Убедитесь, что область main находится на верхнем уровне",
|
|---|
| 266 | "help": "Область main не должна быть вложена в другую область"
|
|---|
| 267 | },
|
|---|
| 268 | "landmark-no-duplicate-banner": {
|
|---|
| 269 | "description": "Убедитесь, что документ содержит не более одного баннера",
|
|---|
| 270 | "help": "Документ не должен содержать более одного баннера"
|
|---|
| 271 | },
|
|---|
| 272 | "landmark-no-duplicate-contentinfo": {
|
|---|
| 273 | "description": "Убедитесь, что документ содержит не более одной области contentinfo",
|
|---|
| 274 | "help": "Документ не должен содержать более одной области contentinfo"
|
|---|
| 275 | },
|
|---|
| 276 | "landmark-no-duplicate-main": {
|
|---|
| 277 | "description": "Убедитесь, что документ содержит не более одной области main",
|
|---|
| 278 | "help": "Документ не должен содержать более одной области main"
|
|---|
| 279 | },
|
|---|
| 280 | "landmark-one-main": {
|
|---|
| 281 | "description": "Убедитесь, что документ содержит одну основную область",
|
|---|
| 282 | "help": "Документ должен содержать одну основную область"
|
|---|
| 283 | },
|
|---|
| 284 | "landmark-unique": {
|
|---|
| 285 | "description": "Убедитесь, что области уникальны",
|
|---|
| 286 | "help": "Области должны иметь уникальную роль или комбинацию роли/метки/названия (т.е. доступное имя)"
|
|---|
| 287 | },
|
|---|
| 288 | "link-in-text-block": {
|
|---|
| 289 | "description": "Убедитесь, что ссылки выделяются на фоне окружающего текста, не полагаясь только на цвет",
|
|---|
| 290 | "help": "Ссылки должны быть различимы без использования цвета"
|
|---|
| 291 | },
|
|---|
| 292 | "link-name": {
|
|---|
| 293 | "description": "Убедитесь, что ссылки содержат различимый текст",
|
|---|
| 294 | "help": "Ссылки должны содержать различимый текст"
|
|---|
| 295 | },
|
|---|
| 296 | "list": {
|
|---|
| 297 | "description": "Убедитесь, что списки структурированы правильно",
|
|---|
| 298 | "help": "Элементы <ul> и <ol> должны содержать только элементы <li>, <script> или <template>"
|
|---|
| 299 | },
|
|---|
| 300 | "listitem": {
|
|---|
| 301 | "description": "Убедитесь, что элементы <li> используются семантически правильно",
|
|---|
| 302 | "help": "Элементы <li> должны быть вложены в <ul> или <ol>"
|
|---|
| 303 | },
|
|---|
| 304 | "marquee": {
|
|---|
| 305 | "description": "Убедитесь, что элементы <marquee> не используются",
|
|---|
| 306 | "help": "Элементы <marquee> устарели и не должны использоваться"
|
|---|
| 307 | },
|
|---|
| 308 | "meta-refresh-no-exceptions": {
|
|---|
| 309 | "description": "Убедитесь, что <meta http-equiv=\"refresh\"> не используется для отложенного обновления",
|
|---|
| 310 | "help": "Отложенное обновление не должно использоваться"
|
|---|
| 311 | },
|
|---|
| 312 | "meta-refresh": {
|
|---|
| 313 | "description": "Убедитесь, что <meta http-equiv=\"refresh\"> не используется для отложенного обновления",
|
|---|
| 314 | "help": "Отложенное обновление менее 20 часов не должно использоваться"
|
|---|
| 315 | },
|
|---|
| 316 | "meta-viewport-large": {
|
|---|
| 317 | "description": "Убедитесь, что <meta name=\"viewport\"> позволяет значительное масштабирование",
|
|---|
| 318 | "help": "Пользователи должны иметь возможность увеличивать и масштабировать текст до 500%"
|
|---|
| 319 | },
|
|---|
| 320 | "meta-viewport": {
|
|---|
| 321 | "description": "Убедитесь, что <meta name=\"viewport\"> не отключает масштабирование и увеличение текста",
|
|---|
| 322 | "help": "Масштабирование и увеличение текста не должны быть отключены"
|
|---|
| 323 | },
|
|---|
| 324 | "nested-interactive": {
|
|---|
| 325 | "description": "Убедитесь, что интерактивные элементы не вложены, так как они могут не озвучиваться экранными считывателями или вызывать проблемы с фокусом для вспомогательных технологий",
|
|---|
| 326 | "help": "Интерактивные элементы не должны быть вложены"
|
|---|
| 327 | },
|
|---|
| 328 | "no-autoplay-audio": {
|
|---|
| 329 | "description": "Убедитесь, что элементы <video> или <audio> не воспроизводят аудио автоматически более 3 секунд без механизма для его остановки или отключения",
|
|---|
| 330 | "help": "Элементы <video> или <audio> не должны воспроизводиться автоматически"
|
|---|
| 331 | },
|
|---|
| 332 | "object-alt": {
|
|---|
| 333 | "description": "Убедитесь, что элементы <object> имеют альтернативный текст",
|
|---|
| 334 | "help": "Элементы <object> должны иметь альтернативный текст"
|
|---|
| 335 | },
|
|---|
| 336 | "p-as-heading": {
|
|---|
| 337 | "description": "Убедитесь, что текст, оформленный как жирный, курсивный или с измененным размером шрифта, не используется для оформления элементов <p> в качестве заголовков",
|
|---|
| 338 | "help": "Оформленные элементы <p> не должны использоваться как заголовки"
|
|---|
| 339 | },
|
|---|
| 340 | "page-has-heading-one": {
|
|---|
| 341 | "description": "Убедитесь, что страница или хотя бы один из ее фреймов содержит заголовок первого уровня",
|
|---|
| 342 | "help": "Страница должна содержать заголовок первого уровня"
|
|---|
| 343 | },
|
|---|
| 344 | "presentation-role-conflict": {
|
|---|
| 345 | "description": "Элементы, отмеченные как презентационные, не должны иметь глобальные ARIA атрибуты или tabindex, чтобы все экранные считыватели игнорировали их",
|
|---|
| 346 | "help": "Убедитесь, что элементы, отмеченные как презентационные, последовательно игнорируются"
|
|---|
| 347 | },
|
|---|
| 348 | "region": {
|
|---|
| 349 | "description": "Убедитесь, что все содержимое страницы заключено в ориентиры",
|
|---|
| 350 | "help": "Все содержимое страницы должно быть заключено в ориентиры"
|
|---|
| 351 | },
|
|---|
| 352 | "role-img-alt": {
|
|---|
| 353 | "description": "Убедитесь, что элементы с ролью [role=\"img\"] имеют альтернативный текст",
|
|---|
| 354 | "help": "Элементы с ролью [role=\"img\"] должны иметь альтернативный текст"
|
|---|
| 355 | },
|
|---|
| 356 | "scope-attr-valid": {
|
|---|
| 357 | "description": "Убедитесь, что атрибут scope используется правильно в таблицах",
|
|---|
| 358 | "help": "Атрибут scope должен использоваться правильно"
|
|---|
| 359 | },
|
|---|
| 360 | "scrollable-region-focusable": {
|
|---|
| 361 | "description": "Убедитесь, что элементы с прокручиваемым содержимым доступны с клавиатуры",
|
|---|
| 362 | "help": "Прокручиваемая область должна быть доступна с клавиатуры"
|
|---|
| 363 | },
|
|---|
| 364 | "select-name": {
|
|---|
| 365 | "description": "Убедитесь, что элемент select имеет доступное имя",
|
|---|
| 366 | "help": "Элемент select должен иметь доступное имя"
|
|---|
| 367 | },
|
|---|
| 368 | "server-side-image-map": {
|
|---|
| 369 | "description": "Убедитесь, что серверные карты изображений не используются",
|
|---|
| 370 | "help": "Серверные карты изображений не должны использоваться"
|
|---|
| 371 | },
|
|---|
| 372 | "skip-link": {
|
|---|
| 373 | "description": "Убедитесь, что все ссылки для пропуска имеют фокусируемую цель",
|
|---|
| 374 | "help": "Цель ссылки для пропуска должна существовать и быть фокусируемой"
|
|---|
| 375 | },
|
|---|
| 376 | "summary-name": {
|
|---|
| 377 | "description": "Убедитесь, что элементы summary содержат различимый текст",
|
|---|
| 378 | "help": "Элементы summary должны содержать различимый текст"
|
|---|
| 379 | },
|
|---|
| 380 | "svg-img-alt": {
|
|---|
| 381 | "description": "Убедитесь, что элементы <svg> с ролью img, graphics-document или graphics-symbol имеют доступный текст",
|
|---|
| 382 | "help": "Элементы <svg> с ролью img должны иметь альтернативный текст"
|
|---|
| 383 | },
|
|---|
| 384 | "tabindex": {
|
|---|
| 385 | "description": "Убедитесь, что значения атрибута tabindex не превышают 0",
|
|---|
| 386 | "help": "Элементы не должны иметь tabindex больше нуля"
|
|---|
| 387 | },
|
|---|
| 388 | "table-duplicate-name": {
|
|---|
| 389 | "description": "Убедитесь, что элемент <caption> не содержит тот же текст, что и атрибут summary",
|
|---|
| 390 | "help": "Таблицы не должны иметь одинаковый summary и caption"
|
|---|
| 391 | },
|
|---|
| 392 | "table-fake-caption": {
|
|---|
| 393 | "description": "Убедитесь, что таблицы с заголовком используют элемент <caption>",
|
|---|
| 394 | "help": "Данные или заголовочные ячейки не должны использоваться для заголовка таблицы"
|
|---|
| 395 | },
|
|---|
| 396 | "target-size": {
|
|---|
| 397 | "description": "Убедитесь, что целевые элементы для касания имеют достаточный размер и пространство",
|
|---|
| 398 | "help": "Все целевые элементы для касания должны быть не менее 24px или иметь достаточное пространство"
|
|---|
| 399 | },
|
|---|
| 400 | "td-has-header": {
|
|---|
| 401 | "description": "Убедитесь, что каждая непустая ячейка данных в таблице больше 3 на 3 имеет один или несколько заголовков таблицы",
|
|---|
| 402 | "help": "Непустые элементы <td> в больших таблицах должны иметь связанные заголовки таблицы"
|
|---|
| 403 | },
|
|---|
| 404 | "td-headers-attr": {
|
|---|
| 405 | "description": "Убедитесь, что каждая ячейка в таблице, использующая атрибут headers, ссылается только на другие элементы <th> в этой таблице",
|
|---|
| 406 | "help": "Атрибуты headers ячеек таблицы должны ссылаться на другие элементы <th> в той же таблице"
|
|---|
| 407 | },
|
|---|
| 408 | "th-has-data-cells": {
|
|---|
| 409 | "description": "Убедитесь, что элементы <th> и элементы с ролью columnheader/rowheader имеют ячейки данных, которые они описывают",
|
|---|
| 410 | "help": "Заголовки таблицы в таблице данных должны ссылаться на ячейки данных"
|
|---|
| 411 | },
|
|---|
| 412 | "valid-lang": {
|
|---|
| 413 | "description": "Убедитесь, что атрибуты lang имеют допустимые значения",
|
|---|
| 414 | "help": "Атрибут lang должен иметь допустимое значение"
|
|---|
| 415 | },
|
|---|
| 416 | "video-caption": {
|
|---|
| 417 | "description": "Убедитесь, что элементы <video> имеют субтитры",
|
|---|
| 418 | "help": "Элементы <video> должны иметь субтитры"
|
|---|
| 419 | }
|
|---|
| 420 | },
|
|---|
| 421 | "checks": {
|
|---|
| 422 | "abstractrole": {
|
|---|
| 423 | "pass": "Абстрактные роли не используются",
|
|---|
| 424 | "fail": {
|
|---|
| 425 | "singular": "Абстрактная роль не может быть использована напрямую: ${data.values}",
|
|---|
| 426 | "plural": "Абстрактные роли не могут быть использованы напрямую: ${data.values}"
|
|---|
| 427 | }
|
|---|
| 428 | },
|
|---|
| 429 | "aria-allowed-attr": {
|
|---|
| 430 | "pass": "ARIA атрибуты используются правильно для заданной роли",
|
|---|
| 431 | "fail": {
|
|---|
| 432 | "singular": "ARIA атрибут не допускается: ${data.values}",
|
|---|
| 433 | "plural": "ARIA атрибуты не допускаются: ${data.values}"
|
|---|
| 434 | },
|
|---|
| 435 | "incomplete": "Проверьте, не возникает ли проблема, если атрибут ARIA будет проигнорирован на этом элементе: ${data.values}"
|
|---|
| 436 | },
|
|---|
| 437 | "aria-allowed-role": {
|
|---|
| 438 | "pass": "ARIA роль допустима для данного элемента",
|
|---|
| 439 | "fail": {
|
|---|
| 440 | "singular": "ARIA роль ${data.values} не допускается для данного элемента",
|
|---|
| 441 | "plural": "ARIA роли ${data.values} не допускаются для данного элемента"
|
|---|
| 442 | },
|
|---|
| 443 | "incomplete": {
|
|---|
| 444 | "singular": "ARIA роль ${data.values} должна быть удалена, когда элемент становится видимым, так как она не допускается для элемента",
|
|---|
| 445 | "plural": "ARIA роли ${data.values} должны быть удалены, когда элемент становится видимым, так как они не допускаются для элемента"
|
|---|
| 446 | }
|
|---|
| 447 | },
|
|---|
| 448 | "aria-busy": {
|
|---|
| 449 | "pass": "Элемент имеет атрибут aria-busy",
|
|---|
| 450 | "fail": "Элемент использует aria-busy=\"true\", пока отображается индикатор загрузки"
|
|---|
| 451 | },
|
|---|
| 452 | "aria-conditional-attr": {
|
|---|
| 453 | "pass": "ARIA атрибут допустим",
|
|---|
| 454 | "fail": {
|
|---|
| 455 | "checkbox": "Удалите aria-checked или установите его значение в \"${data.checkState}\", чтобы оно соответствовало фактическому состоянию флажка",
|
|---|
| 456 | "rowSingular": "Этот атрибут поддерживается для строк treegrid, но не для ${data.ownerRole}: ${data.invalidAttrs}",
|
|---|
| 457 | "rowPlural": "Эти атрибуты поддерживаются для строк treegrid, но не для ${data.ownerRole}: ${data.invalidAttrs}"
|
|---|
| 458 | }
|
|---|
| 459 | },
|
|---|
| 460 | "aria-errormessage": {
|
|---|
| 461 | "pass": "aria-errormessage существует и ссылается на элементы, видимые для экранных считывателей, которые используют поддерживаемую технику aria-errormessage",
|
|---|
| 462 | "fail": {
|
|---|
| 463 | "singular": "Значение aria-errormessage `${data.values}` должно использовать технику для объявления сообщения (например, aria-live, aria-describedby, role=alert и т.д.)",
|
|---|
| 464 | "plural": "Значения aria-errormessage `${data.values}` должны использовать технику для объявления сообщения (например, aria-live, aria-describedby, role=alert и т.д.)",
|
|---|
| 465 | "hidden": "Значение aria-errormessage `${data.values}` не может ссылаться на скрытый элемент"
|
|---|
| 466 | },
|
|---|
| 467 | "incomplete": {
|
|---|
| 468 | "singular": "Убедитесь, что значение aria-errormessage `${data.values}` ссылается на существующий элемент",
|
|---|
| 469 | "plural": "Убедитесь, что значения aria-errormessage `${data.values}` ссылаются на существующие элементы",
|
|---|
| 470 | "idrefs": "Невозможно определить, существует ли элемент aria-errormessage на странице: ${data.values}"
|
|---|
| 471 | }
|
|---|
| 472 | },
|
|---|
| 473 | "aria-hidden-body": {
|
|---|
| 474 | "pass": "Атрибут aria-hidden отсутствует на теле документа",
|
|---|
| 475 | "fail": "aria-hidden=true не должно присутствовать на теле документа"
|
|---|
| 476 | },
|
|---|
| 477 | "aria-level": {
|
|---|
| 478 | "pass": "Значения aria-level допустимы",
|
|---|
| 479 | "incomplete": "Значения aria-level больше 6 не поддерживаются всеми комбинациями экранных считывателей и браузеров"
|
|---|
| 480 | },
|
|---|
| 481 | "aria-prohibited-attr": {
|
|---|
| 482 | "pass": "ARIA атрибут допустим",
|
|---|
| 483 | "fail": {
|
|---|
| 484 | "hasRolePlural": "Атрибуты ${data.prohibited} не могут использоваться с ролью \"${data.role}\".",
|
|---|
| 485 | "hasRoleSingular": "Атрибут ${data.prohibited} не может использоваться с ролью \"${data.role}\".",
|
|---|
| 486 | "noRolePlural": "Атрибуты ${data.prohibited} не могут использоваться на ${data.nodeName} без допустимого атрибута role.",
|
|---|
| 487 | "noRoleSingular": "Атрибут ${data.prohibited} не может использоваться на ${data.nodeName} без допустимого атрибута role."
|
|---|
| 488 | },
|
|---|
| 489 | "incomplete": {
|
|---|
| 490 | "hasRoleSingular": "Атрибут ${data.prohibited} не поддерживается с ролью \"${data.role}\".",
|
|---|
| 491 | "hasRolePlural": "Атрибуты ${data.prohibited} не поддерживаются с ролью \"${data.role}\".",
|
|---|
| 492 | "noRoleSingular": "Атрибут ${data.prohibited} не поддерживается на ${data.nodeName} без допустимого атрибута role.",
|
|---|
| 493 | "noRolePlural": "Атрибуты ${data.prohibited} не поддерживаются на ${data.nodeName} без допустимого атрибута role."
|
|---|
| 494 | }
|
|---|
| 495 | },
|
|---|
| 496 | "aria-required-attr": {
|
|---|
| 497 | "pass": "Все необходимые ARIA атрибуты присутствуют",
|
|---|
| 498 | "fail": {
|
|---|
| 499 | "singular": "Необходимый ARIA атрибут отсутствует: ${data.values}",
|
|---|
| 500 | "plural": "Необходимые ARIA атрибуты отсутствуют: ${data.values}"
|
|---|
| 501 | }
|
|---|
| 502 | },
|
|---|
| 503 | "aria-required-children": {
|
|---|
| 504 | "pass": {
|
|---|
| 505 | "default": "Необходимые ARIA дочерние элементы присутствуют",
|
|---|
| 506 | "aria-busy": "Элемент имеет атрибут aria-busy, поэтому разрешено пропускать необходимые дочерние элементы"
|
|---|
| 507 | },
|
|---|
| 508 | "fail": {
|
|---|
| 509 | "singular": "Необходимая ARIA дочерняя роль отсутствует: ${data.values}",
|
|---|
| 510 | "plural": "Необходимые ARIA дочерние роли отсутствуют: ${data.values}",
|
|---|
| 511 | "unallowed": "Элемент имеет недопустимые дочерние элементы: ${data.values}"
|
|---|
| 512 | },
|
|---|
| 513 | "incomplete": {
|
|---|
| 514 | "singular": "Ожидается добавление ARIA дочерней роли: ${data.values}",
|
|---|
| 515 | "plural": "Ожидается добавление ARIA дочерних ролей: ${data.values}"
|
|---|
| 516 | }
|
|---|
| 517 | },
|
|---|
| 518 | "aria-required-parent": {
|
|---|
| 519 | "pass": "Необходимая ARIA родительская роль присутствует",
|
|---|
| 520 | "fail": {
|
|---|
| 521 | "singular": "Необходимая ARIA родительская роль отсутствует: ${data.values}",
|
|---|
| 522 | "plural": "Необходимые ARIA родительские роли отсутствуют: ${data.values}"
|
|---|
| 523 | }
|
|---|
| 524 | },
|
|---|
| 525 | "aria-roledescription": {
|
|---|
| 526 | "pass": "aria-roledescription используется на поддерживаемой семантической роли",
|
|---|
| 527 | "incomplete": "Проверьте, объявляется ли aria-roledescription поддерживаемыми экранными считывателями",
|
|---|
| 528 | "fail": "Назначьте элементу роль, поддерживающую aria-roledescription"
|
|---|
| 529 | },
|
|---|
| 530 | "aria-unsupported-attr": {
|
|---|
| 531 | "pass": "ARIA атрибут поддерживается",
|
|---|
| 532 | "fail": "ARIA атрибут не поддерживается в большинстве экранных считывателей и вспомогательных технологий: ${data.values}"
|
|---|
| 533 | },
|
|---|
| 534 | "aria-valid-attr-value": {
|
|---|
| 535 | "pass": "Значения ARIA атрибутов допустимы",
|
|---|
| 536 | "fail": {
|
|---|
| 537 | "singular": "Недопустимое значение ARIA атрибута: ${data.values}",
|
|---|
| 538 | "plural": "Недопустимые значения ARIA атрибутов: ${data.values}"
|
|---|
| 539 | },
|
|---|
| 540 | "incomplete": {
|
|---|
| 541 | "noId": "Элемент ID атрибута ARIA не существует на странице: ${data.needsReview}",
|
|---|
| 542 | "noIdShadow": "Элемент ID атрибута ARIA не существует на странице или является потомком другого дерева теневых DOM: ${data.needsReview}",
|
|---|
| 543 | "ariaCurrent": "Значение атрибута ARIA недопустимо и будет трактоваться как \"aria-current=true\": ${data.needsReview}",
|
|---|
| 544 | "idrefs": "Невозможно определить, существует ли элемент ID атрибута ARIA на странице: ${data.needsReview}",
|
|---|
| 545 | "empty": "Значение атрибута ARIA игнорируется, если оно пустое: ${data.needsReview}",
|
|---|
| 546 | "controlsWithinPopup": "Невозможно определить, существует ли ссылка на ID атрибута aria-controls на странице при использовании aria-haspopup: ${data.needsReview}"
|
|---|
| 547 | }
|
|---|
| 548 | },
|
|---|
| 549 | "aria-valid-attr": {
|
|---|
| 550 | "pass": "Имя ARIA атрибута допустимо",
|
|---|
| 551 | "fail": {
|
|---|
| 552 | "singular": "Недопустимое имя ARIA атрибута: ${data.values}",
|
|---|
| 553 | "plural": "Недопустимые имена ARIA атрибутов: ${data.values}"
|
|---|
| 554 | }
|
|---|
| 555 | },
|
|---|
| 556 | "braille-label-equivalent": {
|
|---|
| 557 | "pass": "aria-braillelabel используется на элементе с доступным текстом",
|
|---|
| 558 | "fail": "aria-braillelabel используется на элементе без доступного текста",
|
|---|
| 559 | "incomplete": "Не удалось вычислить доступный текст"
|
|---|
| 560 | },
|
|---|
| 561 | "braille-roledescription-equivalent": {
|
|---|
| 562 | "pass": "aria-brailleroledescription используется на элементе с aria-roledescription",
|
|---|
| 563 | "fail": {
|
|---|
| 564 | "noRoleDescription": "aria-brailleroledescription используется на элементе без aria-roledescription",
|
|---|
| 565 | "emptyRoleDescription": "aria-brailleroledescription используется на элементе с пустым aria-roledescription"
|
|---|
| 566 | }
|
|---|
| 567 | },
|
|---|
| 568 | "deprecatedrole": {
|
|---|
| 569 | "pass": "ARIA роль не устарела",
|
|---|
| 570 | "fail": "Используемая роль устарела: ${data}"
|
|---|
| 571 | },
|
|---|
| 572 | "fallbackrole": {
|
|---|
| 573 | "pass": "Используется только одно значение роли",
|
|---|
| 574 | "fail": "Используйте только одно значение роли, так как резервные роли не поддерживаются в старых браузерах",
|
|---|
| 575 | "incomplete": "Используйте только роль 'presentation' или 'none', так как они являются синонимами."
|
|---|
| 576 | },
|
|---|
| 577 | "has-global-aria-attribute": {
|
|---|
| 578 | "pass": {
|
|---|
| 579 | "singular": "Элемент имеет глобальный ARIA атрибут: ${data.values}",
|
|---|
| 580 | "plural": "Элемент имеет глобальные ARIA атрибуты: ${data.values}"
|
|---|
| 581 | },
|
|---|
| 582 | "fail": "Элемент не имеет глобального ARIA атрибута"
|
|---|
| 583 | },
|
|---|
| 584 | "has-widget-role": {
|
|---|
| 585 | "pass": "Элемент имеет роль виджета.",
|
|---|
| 586 | "fail": "Элемент не имеет роли виджета."
|
|---|
| 587 | },
|
|---|
| 588 | "invalidrole": {
|
|---|
| 589 | "pass": "ARIA роль допустима",
|
|---|
| 590 | "fail": {
|
|---|
| 591 | "singular": "Роль должна быть одной из допустимых ARIA ролей: ${data.values}",
|
|---|
| 592 | "plural": "Роли должны быть одной из допустимых ARIA ролей: ${data.values}"
|
|---|
| 593 | }
|
|---|
| 594 | },
|
|---|
| 595 | "is-element-focusable": {
|
|---|
| 596 | "pass": "Элемент может быть сфокусирован.",
|
|---|
| 597 | "fail": "Элемент не может быть сфокусирован."
|
|---|
| 598 | },
|
|---|
| 599 | "no-implicit-explicit-label": {
|
|---|
| 600 | "pass": "Нет несоответствия между <label> и доступным именем",
|
|---|
| 601 | "incomplete": "Проверьте, нужно ли, чтобы <label> был частью имени поля ARIA ${data}"
|
|---|
| 602 | },
|
|---|
| 603 | "unsupportedrole": {
|
|---|
| 604 | "pass": "ARIA роль поддерживается",
|
|---|
| 605 | "fail": "Используемая роль не поддерживается большинством экранных считывателей и вспомогательных технологий: ${data}"
|
|---|
| 606 | },
|
|---|
| 607 | "valid-scrollable-semantics": {
|
|---|
| 608 | "pass": "Элемент имеет допустимую семантику для элемента в порядке фокусировки.",
|
|---|
| 609 | "fail": "Элемент имеет недопустимую семантику для элемента в порядке фокусировки."
|
|---|
| 610 | },
|
|---|
| 611 | "color-contrast-enhanced": {
|
|---|
| 612 | "pass": "Элемент имеет достаточный цветовой контраст ${data.contrastRatio}",
|
|---|
| 613 | "fail": {
|
|---|
| 614 | "default": "Элемент имеет недостаточный цветовой контраст ${data.contrastRatio} (цвет переднего плана: ${data.fgColor}, цвет фона: ${data.bgColor}, размер шрифта: ${data.fontSize}, толщина шрифта: ${data.fontWeight}). Ожидаемый коэффициент контрастности ${data.expectedContrastRatio}",
|
|---|
| 615 | "fgOnShadowColor": "Элемент имеет недостаточный цветовой контраст ${data.contrastRatio} между цветом переднего плана и тенью (цвет переднего плана: ${data.fgColor}, цвет текстовой тени: ${data.shadowColor}, размер шрифта: ${data.fontSize}, толщина шрифта: ${data.fontWeight}). Ожидаемый коэффициент контрастности ${data.expectedContrastRatio}",
|
|---|
| 616 | "shadowOnBgColor": "Элемент имеет недостаточный цветовой контраст ${data.contrastRatio} между цветом тени и фоном (цвет текстовой тени: ${data.shadowColor}, цвет фона: ${data.bgColor}, размер шрифта: ${data.fontSize}, толщина шрифта: ${data.fontWeight}). Ожидаемый коэффициент контрастности ${data.expectedContrastRatio}"
|
|---|
| 617 | },
|
|---|
| 618 | "incomplete": {
|
|---|
| 619 | "default": "Невозможно определить коэффициент контрастности",
|
|---|
| 620 | "bgImage": "Невозможно определить цвет фона элемента из-за изображения на фоне",
|
|---|
| 621 | "bgGradient": "Невозможно определить цвет фона элемента из-за градиента на фоне",
|
|---|
| 622 | "imgNode": "Невозможно определить цвет фона элемента, так как он содержит изображение",
|
|---|
| 623 | "bgOverlap": "Невозможно определить цвет фона элемента, так как он перекрыт другим элементом",
|
|---|
| 624 | "fgAlpha": "Невозможно определить цвет переднего плана элемента из-за прозрачности альфа-канала",
|
|---|
| 625 | "elmPartiallyObscured": "Невозможно определить цвет фона элемента, так как он частично перекрыт другим элементом",
|
|---|
| 626 | "elmPartiallyObscuring": "Невозможно определить цвет фона элемента, так как он частично перекрывает другие элементы",
|
|---|
| 627 | "outsideViewport": "Невозможно определить цвет фона элемента, так как он находится за пределами видимой области",
|
|---|
| 628 | "equalRatio": "Элемент имеет коэффициент контрастности 1:1 с фоном",
|
|---|
| 629 | "shortTextContent": "Содержимое элемента слишком короткое, чтобы определить, является ли оно текстом",
|
|---|
| 630 | "nonBmp": "Содержимое элемента содержит только не текстовые символы",
|
|---|
| 631 | "pseudoContent": "Невозможно определить цвет фона элемента из-за псевдоэлемента"
|
|---|
| 632 | }
|
|---|
| 633 | },
|
|---|
| 634 | "color-contrast": {
|
|---|
| 635 | "pass": {
|
|---|
| 636 | "default": "Элемент имеет достаточный цветовой контраст ${data.contrastRatio}",
|
|---|
| 637 | "hidden": "Элемент скрыт"
|
|---|
| 638 | },
|
|---|
| 639 | "fail": {
|
|---|
| 640 | "default": "Элемент имеет недостаточный цветовой контраст ${data.contrastRatio} (цвет переднего плана: ${data.fgColor}, цвет фона: ${data.bgColor}, размер шрифта: ${data.fontSize}, толщина шрифта: ${data.fontWeight}). Ожидаемый коэффициент контрастности ${data.expectedContrastRatio}",
|
|---|
| 641 | "fgOnShadowColor": "Элемент имеет недостаточный цветовой контраст ${data.contrastRatio} между цветом переднего плана и тенью (цвет переднего плана: ${data.fgColor}, цвет текстовой тени: ${data.shadowColor}, размер шрифта: ${data.fontSize}, толщина шрифта: ${data.fontWeight}). Ожидаемый коэффициент контрастности ${data.expectedContrastRatio}",
|
|---|
| 642 | "shadowOnBgColor": "Элемент имеет недостаточный цветовой контраст ${data.contrastRatio} между цветом тени и фоном (цвет текстовой тени: ${data.shadowColor}, цвет фона: ${data.bgColor}, размер шрифта: ${data.fontSize}, толщина шрифта: ${data.fontWeight}). Ожидаемый коэффициент контрастности ${data.expectedContrastRatio}"
|
|---|
| 643 | },
|
|---|
| 644 | "incomplete": {
|
|---|
| 645 | "default": "Невозможно определить коэффициент контрастности",
|
|---|
| 646 | "bgImage": "Невозможно определить цвет фона элемента из-за изображения на фоне",
|
|---|
| 647 | "bgGradient": "Невозможно определить цвет фона элемента из-за градиента на фоне",
|
|---|
| 648 | "imgNode": "Невозможно определить цвет фона элемента, так как он содержит изображение",
|
|---|
| 649 | "bgOverlap": "Невозможно определить цвет фона элемента, так как он перекрыт другим элементом",
|
|---|
| 650 | "complexTextShadows": "Невозможно определить контрастность элемента из-за сложных теней текста",
|
|---|
| 651 | "fgAlpha": "Невозможно определить цвет переднего плана элемента из-за прозрачности альфа-канала",
|
|---|
| 652 | "elmPartiallyObscured": "Невозможно определить цвет фона элемента, так как он частично перекрыт другим элементом",
|
|---|
| 653 | "elmPartiallyObscuring": "Невозможно определить цвет фона элемента, так как он частично перекрывает другие элементы",
|
|---|
| 654 | "outsideViewport": "Невозможно определить цвет фона элемента, так как он находится за пределами видимой области",
|
|---|
| 655 | "equalRatio": "Элемент имеет коэффициент контрастности 1:1 с фоном",
|
|---|
| 656 | "shortTextContent": "Содержимое элемента слишком короткое, чтобы определить, является ли оно текстом",
|
|---|
| 657 | "nonBmp": "Содержимое элемента содержит только не текстовые символы",
|
|---|
| 658 | "pseudoContent": "Невозможно определить цвет фона элемента из-за псевдоэлемента"
|
|---|
| 659 | }
|
|---|
| 660 | },
|
|---|
| 661 | "link-in-text-block-style": {
|
|---|
| 662 | "pass": "Ссылки могут быть выделены среди окружающего текста с помощью визуального стиля",
|
|---|
| 663 | "incomplete": {
|
|---|
| 664 | "default": "Проверьте, нужно ли оформлять ссылку, чтобы отличить её от окружающего текста",
|
|---|
| 665 | "pseudoContent": "Проверьте, достаточно ли псевдо-стиля ссылки, чтобы отличить её от окружающего текста"
|
|---|
| 666 | },
|
|---|
| 667 | "fail": "Ссылка не имеет стиля (например, подчеркивания), чтобы отличить её от окружающего текста"
|
|---|
| 668 | },
|
|---|
| 669 | "link-in-text-block": {
|
|---|
| 670 | "pass": "Ссылки можно отличить от окружающего текста каким-либо способом, кроме цвета",
|
|---|
| 671 | "fail": {
|
|---|
| 672 | "fgContrast": "У ссылки недостаточный цветовой контраст ${data.contrastRatio}:1 с окружающим текстом. (Минимальный контраст ${data.requiredContrastRatio}:1, текст ссылки: ${data.nodeColor}, окружающий текст: ${data.parentColor})",
|
|---|
| 673 | "bgContrast": "Фон ссылки имеет недостаточный цветовой контраст ${data.contrastRatio} (Минимальный контраст ${data.requiredContrastRatio}:1, цвет фона ссылки: ${data.nodeBackgroundColor}, цвет фона окружающего текста: ${data.parentBackgroundColor})"
|
|---|
| 674 | },
|
|---|
| 675 | "incomplete": {
|
|---|
| 676 | "default": "Невозможно определить контрастность переднего плана элемента",
|
|---|
| 677 | "bgContrast": "Невозможно определить контрастность фона элемента",
|
|---|
| 678 | "bgImage": "Невозможно определить контрастность элемента из-за изображения на фоне",
|
|---|
| 679 | "bgGradient": "Невозможно определить контрастность элемента из-за градиента на фоне",
|
|---|
| 680 | "imgNode": "Невозможно определить контрастность элемента, так как он содержит изображение",
|
|---|
| 681 | "bgOverlap": "Невозможно определить контрастность элемента, так как он перекрыт другим элементом"
|
|---|
| 682 | }
|
|---|
| 683 | },
|
|---|
| 684 | "autocomplete-appropriate": {
|
|---|
| 685 | "pass": "Значение autocomplete подходит для данного элемента",
|
|---|
| 686 | "fail": "Значение autocomplete не подходит для этого типа ввода"
|
|---|
| 687 | },
|
|---|
| 688 | "autocomplete-valid": {
|
|---|
| 689 | "pass": "Атрибут autocomplete правильно отформатирован",
|
|---|
| 690 | "fail": "Атрибут autocomplete неправильно отформатирован",
|
|---|
| 691 | "incomplete": "Атрибут autocomplete имеет нестандартное значение. Проверьте, можно ли использовать вместо него какое-либо стандартное значение."
|
|---|
| 692 | },
|
|---|
| 693 | "accesskeys": {
|
|---|
| 694 | "pass": "Значение атрибута accesskey уникально",
|
|---|
| 695 | "fail": "Документ содержит несколько элементов с одинаковым значением accesskey"
|
|---|
| 696 | },
|
|---|
| 697 | "focusable-content": {
|
|---|
| 698 | "pass": "Элемент содержит фокусируемые элементы",
|
|---|
| 699 | "fail": "Элемент должен содержать фокусируемое содержимое"
|
|---|
| 700 | },
|
|---|
| 701 | "focusable-disabled": {
|
|---|
| 702 | "pass": "Внутри элемента нет фокусируемых элементов",
|
|---|
| 703 | "incomplete": "Проверьте, немедленно ли индикатор фокуса перемещается на фокусируемые элементы",
|
|---|
| 704 | "fail": "Фокусируемое содержимое должно быть отключено или удалено из DOM"
|
|---|
| 705 | },
|
|---|
| 706 | "focusable-element": {
|
|---|
| 707 | "pass": "Элемент является фокусируемым",
|
|---|
| 708 | "fail": "Элемент должен быть фокусируемым"
|
|---|
| 709 | },
|
|---|
| 710 | "focusable-modal-open": {
|
|---|
| 711 | "pass": "Нет фокусируемых элементов при открытии модального окна",
|
|---|
| 712 | "incomplete": "Проверьте, что фокусируемые элементы не являются доступными в текущем состоянии"
|
|---|
| 713 | },
|
|---|
| 714 | "focusable-no-name": {
|
|---|
| 715 | "pass": "Элемент не находится в таб-ордре или имеет доступный текст",
|
|---|
| 716 | "fail": "Элемент находится в таб-ордре и не имеет доступного текста",
|
|---|
| 717 | "incomplete": "Невозможно определить, есть ли у элемента доступное имя"
|
|---|
| 718 | },
|
|---|
| 719 | "focusable-not-tabbable": {
|
|---|
| 720 | "pass": "Внутри элемента нет фокусируемых элементов",
|
|---|
| 721 | "incomplete": "Проверьте, немедленно ли индикатор фокуса перемещается на фокусируемые элементы",
|
|---|
| 722 | "fail": "Фокусируемое содержимое должно иметь tabindex=\"-1\" или быть удалено из DOM"
|
|---|
| 723 | },
|
|---|
| 724 | "frame-focusable-content": {
|
|---|
| 725 | "pass": "Элемент не имеет фокусируемых потомков",
|
|---|
| 726 | "fail": "Элемент имеет фокусируемых потомков",
|
|---|
| 727 | "incomplete": "Невозможно определить, есть ли у элемента потомки"
|
|---|
| 728 | },
|
|---|
| 729 | "landmark-is-top-level": {
|
|---|
| 730 | "pass": "${data.role} область находится на верхнем уровне.",
|
|---|
| 731 | "fail": "${data.role} область содержится в другой области."
|
|---|
| 732 | },
|
|---|
| 733 | "no-focusable-content": {
|
|---|
| 734 | "pass": "Элемент не имеет фокусируемых потомков",
|
|---|
| 735 | "fail": {
|
|---|
| 736 | "default": "Элемент имеет фокусируемых потомков",
|
|---|
| 737 | "notHidden": "Использование отрицательного tabindex на элементе внутри интерактивного управления не предотвращает фокусировку элемента вспомогательными технологиями (даже с aria-hidden=\"true\")"
|
|---|
| 738 | },
|
|---|
| 739 | "incomplete": "Невозможно определить, есть ли у элемента потомки"
|
|---|
| 740 | },
|
|---|
| 741 | "page-has-heading-one": {
|
|---|
| 742 | "pass": "На странице есть хотя бы один заголовок первого уровня",
|
|---|
| 743 | "fail": "На странице должен быть заголовок первого уровня"
|
|---|
| 744 | },
|
|---|
| 745 | "page-has-main": {
|
|---|
| 746 | "pass": "В документе есть хотя бы одна основная область",
|
|---|
| 747 | "fail": "В документе нет основной области"
|
|---|
| 748 | },
|
|---|
| 749 | "page-no-duplicate-banner": {
|
|---|
| 750 | "pass": "В документе нет более одного баннера",
|
|---|
| 751 | "fail": "В документе более одного баннера"
|
|---|
| 752 | },
|
|---|
| 753 | "page-no-duplicate-contentinfo": {
|
|---|
| 754 | "pass": "В документе нет более одной области contentinfo",
|
|---|
| 755 | "fail": "В документе более одной области contentinfo"
|
|---|
| 756 | },
|
|---|
| 757 | "page-no-duplicate-main": {
|
|---|
| 758 | "pass": "В документе нет более одной основной области",
|
|---|
| 759 | "fail": "В документе более одной основной области"
|
|---|
| 760 | },
|
|---|
| 761 | "tabindex": {
|
|---|
| 762 | "pass": "Элемент не имеет tabindex больше 0",
|
|---|
| 763 | "fail": "Элемент имеет tabindex больше 0"
|
|---|
| 764 | },
|
|---|
| 765 | "alt-space-value": {
|
|---|
| 766 | "pass": "Элемент имеет допустимое значение атрибута alt",
|
|---|
| 767 | "fail": "Элемент имеет атрибут alt, содержащий только пробельный символ, который не игнорируется всеми экранными считывателями"
|
|---|
| 768 | },
|
|---|
| 769 | "duplicate-img-label": {
|
|---|
| 770 | "pass": "Элемент не дублирует существующий текст в тексте атрибута alt <img>",
|
|---|
| 771 | "fail": "Элемент содержит <img> с текстом атрибута alt, дублирующим существующий текст"
|
|---|
| 772 | },
|
|---|
| 773 | "explicit-label": {
|
|---|
| 774 | "pass": "Элемент формы имеет явную <label>",
|
|---|
| 775 | "fail": "Элемент формы не имеет явной <label>",
|
|---|
| 776 | "incomplete": "Невозможно определить, имеет ли элемент формы явную <label>"
|
|---|
| 777 | },
|
|---|
| 778 | "help-same-as-label": {
|
|---|
| 779 | "pass": "Текст помощи (title или aria-describedby) не дублирует текст метки",
|
|---|
| 780 | "fail": "Текст помощи (title или aria-describedby) совпадает с текстом метки"
|
|---|
| 781 | },
|
|---|
| 782 | "hidden-explicit-label": {
|
|---|
| 783 | "pass": "Элемент формы имеет видимую явную <label>",
|
|---|
| 784 | "fail": "Элемент формы имеет явную <label>, которая скрыта",
|
|---|
| 785 | "incomplete": "Невозможно определить, имеет ли элемент формы явную <label>, которая скрыта"
|
|---|
| 786 | },
|
|---|
| 787 | "implicit-label": {
|
|---|
| 788 | "pass": "Элемент формы имеет неявную (обернутую) <label>",
|
|---|
| 789 | "fail": "Элемент формы не имеет неявной (обернутой) <label>",
|
|---|
| 790 | "incomplete": "Невозможно определить, имеет ли элемент формы неявную (обернутую) <label>"
|
|---|
| 791 | },
|
|---|
| 792 | "label-content-name-mismatch": {
|
|---|
| 793 | "pass": "Элемент содержит видимый текст как часть его доступного имени",
|
|---|
| 794 | "fail": "Текст внутри элемента не включен в доступное имя"
|
|---|
| 795 | },
|
|---|
| 796 | "multiple-label": {
|
|---|
| 797 | "pass": "Поле формы не имеет нескольких элементов label",
|
|---|
| 798 | "incomplete": "Использование нескольких элементов label не поддерживается большинством вспомогательных технологий. Убедитесь, что первый элемент label содержит всю необходимую информацию."
|
|---|
| 799 | },
|
|---|
| 800 | "title-only": {
|
|---|
| 801 | "pass": "Элемент формы не использует только атрибут title для своей метки",
|
|---|
| 802 | "fail": "Для создания метки элемента формы используется только атрибут title"
|
|---|
| 803 | },
|
|---|
| 804 | "landmark-is-unique": {
|
|---|
| 805 | "pass": "Ориентиры должны иметь уникальную роль или комбинацию роли/метки/названия (т.е. доступное имя)",
|
|---|
| 806 | "fail": "Ориентир должен иметь уникальный aria-label, aria-labelledby или title, чтобы сделать ориентиры различимыми"
|
|---|
| 807 | },
|
|---|
| 808 | "has-lang": {
|
|---|
| 809 | "pass": "Элемент <html> имеет атрибут lang",
|
|---|
| 810 | "fail": {
|
|---|
| 811 | "noXHTML": "Атрибут xml:lang недействителен на HTML страницах, используйте атрибут lang.",
|
|---|
| 812 | "noLang": "Элемент <html> не имеет атрибута lang"
|
|---|
| 813 | }
|
|---|
| 814 | },
|
|---|
| 815 | "valid-lang": {
|
|---|
| 816 | "pass": "Значение атрибута lang включено в список допустимых языков",
|
|---|
| 817 | "fail": "Значение атрибута lang не включено в список допустимых языков"
|
|---|
| 818 | },
|
|---|
| 819 | "xml-lang-mismatch": {
|
|---|
| 820 | "pass": "Атрибуты lang и xml:lang имеют один и тот же базовый язык",
|
|---|
| 821 | "fail": "Атрибуты lang и xml:lang не имеют один и тот же базовый язык"
|
|---|
| 822 | },
|
|---|
| 823 | "dlitem": {
|
|---|
| 824 | "pass": "Элемент описания списка имеет родительский элемент <dl>",
|
|---|
| 825 | "fail": "Элемент описания списка не имеет родительского элемента <dl>"
|
|---|
| 826 | },
|
|---|
| 827 | "listitem": {
|
|---|
| 828 | "pass": "Элемент списка имеет родительский элемент <ul>, <ol> или роль=\"list\"",
|
|---|
| 829 | "fail": {
|
|---|
| 830 | "default": "Элемент списка не имеет родительского элемента <ul>, <ol>",
|
|---|
| 831 | "roleNotValid": "Родительский элемент списка имеет роль, которая не является ролью=\"list\""
|
|---|
| 832 | }
|
|---|
| 833 | },
|
|---|
| 834 | "only-dlitems": {
|
|---|
| 835 | "pass": "Элемент dl содержит только допустимые дочерние элементы; <dt>, <dd> или <div> элементы",
|
|---|
| 836 | "fail": "Элемент dl содержит недопустимые дочерние элементы: ${data.values}"
|
|---|
| 837 | },
|
|---|
| 838 | "only-listitems": {
|
|---|
| 839 | "pass": "Элемент списка содержит только допустимые дочерние элементы <li>",
|
|---|
| 840 | "fail": "Элемент списка содержит недопустимые дочерние элементы: ${data.values}"
|
|---|
| 841 | },
|
|---|
| 842 | "structured-dlitems": {
|
|---|
| 843 | "pass": "Когда элемент не пустой, он имеет как минимум один элемент <dt> и один элемент <dd>",
|
|---|
| 844 | "fail": "Когда элемент не пустой, он не содержит по крайней мере одного элемента <dt>, за которым следует по крайней мере один элемент <dd>"
|
|---|
| 845 | },
|
|---|
| 846 | "caption": {
|
|---|
| 847 | "pass": "Мультимедийный элемент имеет дорожку субтитров",
|
|---|
| 848 | "incomplete": "Проверьте, доступны ли субтитры для элемента"
|
|---|
| 849 | },
|
|---|
| 850 | "frame-tested": {
|
|---|
| 851 | "pass": "Элемент iframe был протестирован с помощью axe-core",
|
|---|
| 852 | "fail": "Не удалось протестировать элемент iframe с помощью axe-core",
|
|---|
| 853 | "incomplete": "Элемент iframe все еще должен быть протестирован с помощью axe-core"
|
|---|
| 854 | },
|
|---|
| 855 | "no-autoplay-audio": {
|
|---|
| 856 | "pass": "<video> или <audio> не воспроизводит аудио более допустимой продолжительности или имеет механизмы управления",
|
|---|
| 857 | "fail": "<video> или <audio> воспроизводит аудио более допустимой продолжительности и не имеет механизмов управления",
|
|---|
| 858 | "incomplete": "Проверьте, не воспроизводит ли <video> или <audio> аудио более допустимой продолжительности или предоставляет ли механизмы управления"
|
|---|
| 859 | },
|
|---|
| 860 | "css-orientation-lock": {
|
|---|
| 861 | "pass": "Дисплей работает, блокировка ориентации отсутствует",
|
|---|
| 862 | "fail": "CSS блокировка ориентации применяется и делает дисплей неработоспособным",
|
|---|
| 863 | "incomplete": "Невозможно определить, применяется ли CSS блокировка ориентации"
|
|---|
| 864 | },
|
|---|
| 865 | "meta-viewport-large": {
|
|---|
| 866 | "pass": "Тег <meta> не предотвращает значительное масштабирование на мобильных устройствах",
|
|---|
| 867 | "fail": "Тег <meta> ограничивает масштабирование на мобильных устройствах"
|
|---|
| 868 | },
|
|---|
| 869 | "meta-viewport": {
|
|---|
| 870 | "pass": "Тег <meta> не отключает масштабирование на мобильных устройствах",
|
|---|
| 871 | "fail": "${data} на теге <meta> отключает масштабирование на мобильных устройствах"
|
|---|
| 872 | },
|
|---|
| 873 | "target-offset": {
|
|---|
| 874 | "pass": {
|
|---|
| 875 | "default": "Целевой элемент имеет достаточное пространство от ближайших соседей. Безопасное кликабельное пространство имеет диаметр ${data.closestOffset}px, что не менее ${data.minOffset}px.",
|
|---|
| 876 | "large": "Целевой элемент значительно превышает минимальный размер в ${data.minOffset}px."
|
|---|
| 877 | },
|
|---|
| 878 | "fail": "Целевой элемент имеет недостаточное пространство до ближайших соседей. Безопасное кликабельное пространство имеет диаметр ${data.closestOffset}px вместо как минимум ${data.minOffset}px.",
|
|---|
| 879 | "incomplete": {
|
|---|
| 880 | "default": "Элемент с отрицательным tabindex имеет недостаточное пространство до ближайших соседей. Безопасное кликабельное пространство имеет диаметр ${data.closestOffset}px вместо как минимум ${data.minOffset}px. Является ли это целевым элементом?",
|
|---|
| 881 | "nonTabbableNeighbor": "Целевой элемент имеет недостаточное пространство до ближайших соседей. Безопасное кликабельное пространство имеет диаметр ${data.closestOffset}px вместо как минимум ${data.minOffset}px. Является ли сосед целевым элементом?",
|
|---|
| 882 | "tooManyRects": "Не удалось определить размер целевого элемента из-за слишком большого количества перекрывающихся элементов"
|
|---|
| 883 | }
|
|---|
| 884 | },
|
|---|
| 885 | "target-size": {
|
|---|
| 886 | "pass": {
|
|---|
| 887 | "default": "Контрол имеет достаточный размер (${data.width}px на ${data.height}px, должно быть как минимум ${data.minSize}px на ${data.minSize}px)",
|
|---|
| 888 | "obscured": "Контрол игнорируется, так как он полностью скрыт и, следовательно, не кликабелен",
|
|---|
| 889 | "large": "Целевой элемент значительно превышает минимальный размер в ${data.minSize}px."
|
|---|
| 890 | },
|
|---|
| 891 | "fail": {
|
|---|
| 892 | "default": "Целевой элемент имеет недостаточный размер (${data.width}px на ${data.height}px, должно быть как минимум ${data.minSize}px на ${data.minSize}px)",
|
|---|
| 893 | "partiallyObscured": "Целевой элемент имеет недостаточный размер, так как он частично скрыт (наименьшее пространство ${data.width}px на ${data.height}px, должно быть как минимум ${data.minSize}px на ${data.minSize}px)"
|
|---|
| 894 | },
|
|---|
| 895 | "incomplete": {
|
|---|
| 896 | "default": "Элемент с отрицательным tabindex имеет недостаточный размер (${data.width}px на ${data.height}px, должно быть как минимум ${data.minSize}px на ${data.minSize}px). Является ли это целевым элементом?",
|
|---|
| 897 | "contentOverflow": "Размер элемента не может быть точно определен из-за переполненного содержимого",
|
|---|
| 898 | "partiallyObscured": "Элемент с отрицательным tabindex имеет недостаточный размер, так как он частично скрыт (наименьшее пространство ${data.width}px на ${data.height}px, должно быть как минимум ${data.minSize}px на ${data.minSize}px). Является ли это целевым элементом?",
|
|---|
| 899 | "partiallyObscuredNonTabbable": "Целевой элемент имеет недостаточный размер, так как он частично скрыт соседом с отрицательным tabindex (наименьшее пространство ${data.width}px на ${data.height}px, должно быть как минимум ${data.minSize}px на ${data.minSize}px). Является ли сосед целевым элементом?",
|
|---|
| 900 | "tooManyRects": "Не удалось определить размер целевого элемента из-за слишком большого количества перекрывающихся элементов"
|
|---|
| 901 | }
|
|---|
| 902 | },
|
|---|
| 903 | "header-present": {
|
|---|
| 904 | "pass": "На странице есть заголовок",
|
|---|
| 905 | "fail": "На странице нет заголовка"
|
|---|
| 906 | },
|
|---|
| 907 | "heading-order": {
|
|---|
| 908 | "pass": "Порядок заголовков корректен",
|
|---|
| 909 | "fail": "Порядок заголовков некорректен",
|
|---|
| 910 | "incomplete": "Невозможно определить предыдущий заголовок"
|
|---|
| 911 | },
|
|---|
| 912 | "identical-links-same-purpose": {
|
|---|
| 913 | "pass": "Нет других ссылок с тем же именем, которые ведут на другой URL",
|
|---|
| 914 | "incomplete": "Проверьте, имеют ли ссылки одинаковую цель, или они намеренно неоднозначны."
|
|---|
| 915 | },
|
|---|
| 916 | "internal-link-present": {
|
|---|
| 917 | "pass": "Найдена допустимая ссылка для пропуска",
|
|---|
| 918 | "fail": "Допустимая ссылка для пропуска не найдена"
|
|---|
| 919 | },
|
|---|
| 920 | "landmark": {
|
|---|
| 921 | "pass": "На странице есть область-ориентир",
|
|---|
| 922 | "fail": "На странице нет области-ориентира"
|
|---|
| 923 | },
|
|---|
| 924 | "meta-refresh-no-exceptions": {
|
|---|
| 925 | "pass": "Тег <meta> не вызывает немедленное обновление страницы",
|
|---|
| 926 | "fail": "Тег <meta> вызывает обновление страницы по таймеру"
|
|---|
| 927 | },
|
|---|
| 928 | "meta-refresh": {
|
|---|
| 929 | "pass": "Тег <meta> не вызывает немедленное обновление страницы",
|
|---|
| 930 | "fail": "Тег <meta> вызывает обновление страницы по таймеру (менее 20 часов)"
|
|---|
| 931 | },
|
|---|
| 932 | "p-as-heading": {
|
|---|
| 933 | "pass": "Элементы <p> не оформлены как заголовки",
|
|---|
| 934 | "fail": "Для заголовков должны использоваться элементы <h1> - <h6>, а не стилизованные <p>",
|
|---|
| 935 | "incomplete": "Невозможно определить, оформлены ли элементы <p> как заголовки"
|
|---|
| 936 | },
|
|---|
| 937 | "region": {
|
|---|
| 938 | "pass": "Все содержимое страницы заключено в ориентиры",
|
|---|
| 939 | "fail": "Некоторое содержимое страницы не заключено в ориентиры"
|
|---|
| 940 | },
|
|---|
| 941 | "skip-link": {
|
|---|
| 942 | "pass": "Целевая ссылка для пропуска существует",
|
|---|
| 943 | "incomplete": "Целевая ссылка для пропуска должна стать видимой при активации",
|
|---|
| 944 | "fail": "Целевая ссылка для пропуска не найдена"
|
|---|
| 945 | },
|
|---|
| 946 | "unique-frame-title": {
|
|---|
| 947 | "pass": "Атрибут title элемента является уникальным",
|
|---|
| 948 | "fail": "Атрибут title элемента не является уникальным"
|
|---|
| 949 | },
|
|---|
| 950 | "duplicate-id-active": {
|
|---|
| 951 | "pass": "Документ не содержит активных элементов с одинаковым значением id атрибута",
|
|---|
| 952 | "fail": "Документ содержит активные элементы с одинаковым значением id атрибута: ${data}"
|
|---|
| 953 | },
|
|---|
| 954 | "duplicate-id-aria": {
|
|---|
| 955 | "pass": "Документ не содержит элементов, ссылающихся на ARIA или метки с одинаковым значением id атрибута",
|
|---|
| 956 | "fail": "Документ содержит несколько элементов, ссылающихся на ARIA, с одинаковым значением id атрибута: ${data}"
|
|---|
| 957 | },
|
|---|
| 958 | "duplicate-id": {
|
|---|
| 959 | "pass": "Документ не содержит статических элементов с одинаковым значением id атрибута",
|
|---|
| 960 | "fail": "Документ содержит несколько статических элементов с одинаковым значением id атрибута: ${data}"
|
|---|
| 961 | },
|
|---|
| 962 | "aria-label": {
|
|---|
| 963 | "pass": "Атрибут aria-label существует и не пуст",
|
|---|
| 964 | "fail": "Атрибут aria-label не существует или пуст"
|
|---|
| 965 | },
|
|---|
| 966 | "aria-labelledby": {
|
|---|
| 967 | "pass": "Атрибут aria-labelledby существует и ссылается на элементы, видимые для экранных считывателей",
|
|---|
| 968 | "fail": "Атрибут aria-labelledby не существует, ссылается на несуществующие элементы или ссылается на пустые элементы",
|
|---|
| 969 | "incomplete": "Убедитесь, что aria-labelledby ссылается на существующий элемент"
|
|---|
| 970 | },
|
|---|
| 971 | "avoid-inline-spacing": {
|
|---|
| 972 | "pass": "Внутренние стили с '!important', которые влияют на интервал текста, не указаны",
|
|---|
| 973 | "fail": {
|
|---|
| 974 | "singular": "Удалите '!important' из внутреннего стиля ${data.values}, так как переопределение этого стиля не поддерживается большинством браузеров",
|
|---|
| 975 | "plural": "Удалите '!important' из внутренних стилей ${data.values}, так как переопределение этих стилей не поддерживается большинством браузеров"
|
|---|
| 976 | }
|
|---|
| 977 | },
|
|---|
| 978 | "button-has-visible-text": {
|
|---|
| 979 | "pass": "Элемент содержит внутренний текст, видимый для экранных считывателей",
|
|---|
| 980 | "fail": "Элемент не содержит внутренний текст, видимый для экранных считывателей",
|
|---|
| 981 | "incomplete": "Невозможно определить, есть ли у элемента дочерние элементы"
|
|---|
| 982 | },
|
|---|
| 983 | "doc-has-title": {
|
|---|
| 984 | "pass": "Документ содержит непустой элемент <title>",
|
|---|
| 985 | "fail": "Документ не содержит непустой элемент <title>"
|
|---|
| 986 | },
|
|---|
| 987 | "exists": {
|
|---|
| 988 | "pass": "Элемент не существует",
|
|---|
| 989 | "incomplete": "Элемент существует"
|
|---|
| 990 | },
|
|---|
| 991 | "has-alt": {
|
|---|
| 992 | "pass": "Элемент имеет атрибут alt",
|
|---|
| 993 | "fail": "Элемент не имеет атрибута alt"
|
|---|
| 994 | },
|
|---|
| 995 | "has-visible-text": {
|
|---|
| 996 | "pass": "Элемент содержит текст, видимый для экранных считывателей",
|
|---|
| 997 | "fail": "Элемент не содержит текст, видимый для экранных считывателей",
|
|---|
| 998 | "incomplete": "Невозможно определить, есть ли у элемента дочерние элементы"
|
|---|
| 999 | },
|
|---|
| 1000 | "important-letter-spacing": {
|
|---|
| 1001 | "pass": "Letter-spacing в атрибуте стиля не установлен на !important, либо соответствует минимальному значению",
|
|---|
| 1002 | "fail": "Letter-spacing в атрибуте стиля не должен использовать !important, или должен быть не менее ${data.minValue}em (текущее значение ${data.value}em)"
|
|---|
| 1003 | },
|
|---|
| 1004 | "important-line-height": {
|
|---|
| 1005 | "pass": "Line-height в атрибуте стиля не установлен на !important, либо соответствует минимальному значению",
|
|---|
| 1006 | "fail": "Line-height в атрибуте стиля не должен использовать !important, или должен быть не менее ${data.minValue}em (текущее значение ${data.value}em)"
|
|---|
| 1007 | },
|
|---|
| 1008 | "important-word-spacing": {
|
|---|
| 1009 | "pass": "Word-spacing в атрибуте стиля не установлен на !important, либо соответствует минимальному значению",
|
|---|
| 1010 | "fail": "Word-spacing в атрибуте стиля не должен использовать !important, или должен быть не менее ${data.minValue}em (текущее значение ${data.value}em)"
|
|---|
| 1011 | },
|
|---|
| 1012 | "is-on-screen": {
|
|---|
| 1013 | "pass": "Элемент не виден",
|
|---|
| 1014 | "fail": "Элемент виден"
|
|---|
| 1015 | },
|
|---|
| 1016 | "non-empty-alt": {
|
|---|
| 1017 | "pass": "Элемент имеет непустой атрибут alt",
|
|---|
| 1018 | "fail": {
|
|---|
| 1019 | "noAttr": "Элемент не имеет атрибута alt",
|
|---|
| 1020 | "emptyAttr": "Элемент имеет пустой атрибут alt"
|
|---|
| 1021 | }
|
|---|
| 1022 | },
|
|---|
| 1023 | "non-empty-if-present": {
|
|---|
| 1024 | "pass": {
|
|---|
| 1025 | "default": "Элемент не имеет атрибута value",
|
|---|
| 1026 | "has-label": "Элемент имеет непустой атрибут value"
|
|---|
| 1027 | },
|
|---|
| 1028 | "fail": "Элемент имеет атрибут value, и этот атрибут пуст"
|
|---|
| 1029 | },
|
|---|
| 1030 | "non-empty-placeholder": {
|
|---|
| 1031 | "pass": "Элемент имеет атрибут placeholder",
|
|---|
| 1032 | "fail": {
|
|---|
| 1033 | "noAttr": "Элемент не имеет атрибута placeholder",
|
|---|
| 1034 | "emptyAttr": "Элемент имеет пустой атрибут placeholder"
|
|---|
| 1035 | }
|
|---|
| 1036 | },
|
|---|
| 1037 | "non-empty-title": {
|
|---|
| 1038 | "pass": "Элемент имеет атрибут title",
|
|---|
| 1039 | "fail": {
|
|---|
| 1040 | "noAttr": "Элемент не имеет атрибута title",
|
|---|
| 1041 | "emptyAttr": "Элемент имеет пустой атрибут title"
|
|---|
| 1042 | }
|
|---|
| 1043 | },
|
|---|
| 1044 | "non-empty-value": {
|
|---|
| 1045 | "pass": "Элемент имеет непустой атрибут value",
|
|---|
| 1046 | "fail": {
|
|---|
| 1047 | "noAttr": "Элемент не имеет атрибута value",
|
|---|
| 1048 | "emptyAttr": "Элемент имеет пустой атрибут value"
|
|---|
| 1049 | }
|
|---|
| 1050 | },
|
|---|
| 1051 | "presentational-role": {
|
|---|
| 1052 | "pass": "Стандартная семантика элемента была переопределена с помощью role=\"${data.role}\"",
|
|---|
| 1053 | "fail": {
|
|---|
| 1054 | "default": "Стандартная семантика элемента не была переопределена с помощью role=\"none\" или role=\"presentation\"",
|
|---|
| 1055 | "globalAria": "Роль элемента не является презентационной, так как у него есть глобальный ARIA атрибут",
|
|---|
| 1056 | "focusable": "Роль элемента не является презентационной, так как он может быть сфокусирован",
|
|---|
| 1057 | "both": "Роль элемента не является презентационной, так как у него есть глобальный ARIA атрибут и он может быть сфокусирован",
|
|---|
| 1058 | "iframe": "Использование атрибута \"title\" на элементе ${data.nodeName} с презентационной ролью ведет себя непоследовательно между экранными считывателями"
|
|---|
| 1059 | }
|
|---|
| 1060 | },
|
|---|
| 1061 | "role-none": {
|
|---|
| 1062 | "pass": "Стандартная семантика элемента была переопределена с помощью role=\"none\"",
|
|---|
| 1063 | "fail": "Стандартная семантика элемента не была переопределена с помощью role=\"none\""
|
|---|
| 1064 | },
|
|---|
| 1065 | "role-presentation": {
|
|---|
| 1066 | "pass": "Стандартная семантика элемента была переопределена с помощью role=\"presentation\"",
|
|---|
| 1067 | "fail": "Стандартная семантика элемента не была переопределена с помощью role=\"presentation\""
|
|---|
| 1068 | },
|
|---|
| 1069 | "svg-non-empty-title": {
|
|---|
| 1070 | "pass": "Элемент имеет дочерний элемент title",
|
|---|
| 1071 | "fail": {
|
|---|
| 1072 | "noTitle": "Элемент не имеет дочернего элемента title",
|
|---|
| 1073 | "emptyTitle": "Дочерний элемент title пуст"
|
|---|
| 1074 | },
|
|---|
| 1075 | "incomplete": "Невозможно определить, имеет ли элемент дочерний элемент title"
|
|---|
| 1076 | },
|
|---|
| 1077 | "caption-faked": {
|
|---|
| 1078 | "pass": "Первая строка таблицы не используется в качестве заголовка",
|
|---|
| 1079 | "fail": "Первый дочерний элемент таблицы должен быть заголовком, а не ячейкой таблицы"
|
|---|
| 1080 | },
|
|---|
| 1081 | "html5-scope": {
|
|---|
| 1082 | "pass": "Атрибут scope используется только для элементов заголовков таблицы (<th>)",
|
|---|
| 1083 | "fail": "В HTML 5 атрибуты scope могут использоваться только для элементов заголовков таблицы (<th>)"
|
|---|
| 1084 | },
|
|---|
| 1085 | "same-caption-summary": {
|
|---|
| 1086 | "pass": "Содержимое атрибута summary и элемента <caption> не дублируется",
|
|---|
| 1087 | "fail": "Содержимое атрибута summary и элемента <caption> идентично",
|
|---|
| 1088 | "incomplete": "Невозможно определить, есть ли у элемента <table> заголовок"
|
|---|
| 1089 | },
|
|---|
| 1090 | "scope-value": {
|
|---|
| 1091 | "pass": "Атрибут scope используется правильно",
|
|---|
| 1092 | "fail": "Значение атрибута scope может быть только 'row' или 'col'"
|
|---|
| 1093 | },
|
|---|
| 1094 | "td-has-header": {
|
|---|
| 1095 | "pass": "Все непустые ячейки данных имеют заголовки таблицы",
|
|---|
| 1096 | "fail": "Некоторые непустые ячейки данных не имеют заголовков таблицы"
|
|---|
| 1097 | },
|
|---|
| 1098 | "td-headers-attr": {
|
|---|
| 1099 | "pass": "Атрибут headers используется исключительно для ссылки на другие ячейки таблицы",
|
|---|
| 1100 | "incomplete": "Атрибут headers пуст",
|
|---|
| 1101 | "fail": {
|
|---|
| 1102 | "cell-header-not-in-table": "Атрибут headers не используется исключительно для ссылки на другие заголовочные ячейки в таблице",
|
|---|
| 1103 | "cell-header-not-th": "Атрибут headers должен ссылаться на заголовочные ячейки, а не на ячейки с данными",
|
|---|
| 1104 | "header-refs-self": "Элемент с атрибутом headers ссылается на самого себя"
|
|---|
| 1105 | }
|
|---|
| 1106 | },
|
|---|
| 1107 | "th-has-data-cells": {
|
|---|
| 1108 | "pass": "Все ячейки заголовков таблицы ссылаются на ячейки данных",
|
|---|
| 1109 | "fail": "Не все ячейки заголовков таблицы ссылаются на ячейки данных",
|
|---|
| 1110 | "incomplete": "Ячейки данных таблицы отсутствуют или пусты"
|
|---|
| 1111 | },
|
|---|
| 1112 | "hidden-content": {
|
|---|
| 1113 | "pass": "Все содержимое страницы было проанализировано.",
|
|---|
| 1114 | "fail": "Возникли проблемы с анализом содержимого на этой странице.",
|
|---|
| 1115 | "incomplete": "На странице есть скрытое содержимое, которое не было проанализировано. Вам нужно будет включить отображение этого содержимого, чтобы его проанализировать."
|
|---|
| 1116 | }
|
|---|
| 1117 | },
|
|---|
| 1118 | "failureSummaries": {
|
|---|
| 1119 | "any": {
|
|---|
| 1120 | "failureMessage": "Исправьте любое из следующего:{{~it:value}}\n {{=value.split('\\n').join('\\n ')}}{{~}}"
|
|---|
| 1121 | },
|
|---|
| 1122 | "none": {
|
|---|
| 1123 | "failureMessage": "Исправьте все из следующего:{{~it:value}}\n {{=value.split('\\n').join('\\n ')}}{{~}}"
|
|---|
| 1124 | }
|
|---|
| 1125 | },
|
|---|
| 1126 | "incompleteFallbackMessage": "axe не смог определить причину. Время использовать инспектор элементов!"
|
|---|
| 1127 | }
|
|---|