| 1 | {
|
|---|
| 2 | "lang": "pt_PT",
|
|---|
| 3 | "rules": {
|
|---|
| 4 | "accesskeys": {
|
|---|
| 5 | "description": "Garantir que cada valor do atributo 'accesskey' seja único",
|
|---|
| 6 | "help": "O valor do atributo 'accesskey' deve ser único"
|
|---|
| 7 | },
|
|---|
| 8 | "area-alt": {
|
|---|
| 9 | "description": "Garantir que os elementos <area> dos mapas de imagem tenham texto alternativo",
|
|---|
| 10 | "help": "Os elementos <area> ativos devem ter texto alternativo"
|
|---|
| 11 | },
|
|---|
| 12 | "aria-allowed-attr": {
|
|---|
| 13 | "description": "Garantir que a função de um elemento suporte os seus atributos ARIA",
|
|---|
| 14 | "help": "Os elementos devem usar apenas atributos ARIA suportados"
|
|---|
| 15 | },
|
|---|
| 16 | "aria-allowed-role": {
|
|---|
| 17 | "description": "Garantir que o atributo 'role' tenha um valor apropriado para o elemento",
|
|---|
| 18 | "help": "A 'role' ARIA deve ser apropriada para o elemento"
|
|---|
| 19 | },
|
|---|
| 20 | "aria-braille-equivalent": {
|
|---|
| 21 | "description": "Garantir que 'aria-braillelabel' e 'aria-brailleroledescription' tenham um equivalente não braile",
|
|---|
| 22 | "help": "Os atributos 'aria-braille' devem ter um equivalente não braile"
|
|---|
| 23 | },
|
|---|
| 24 | "aria-command-name": {
|
|---|
| 25 | "description": "Garantir que cada botão, link e item de menu ARIA tenha um nome acessível",
|
|---|
| 26 | "help": "Os comandos ARIA devem ter um nome acessível"
|
|---|
| 27 | },
|
|---|
| 28 | "aria-conditional-attr": {
|
|---|
| 29 | "description": "Garantir que os atributos ARIA sejam usados conforme descrito na especificação da função do elemento",
|
|---|
| 30 | "help": "Os atributos ARIA devem ser usados conforme especificado para a função do elemento"
|
|---|
| 31 | },
|
|---|
| 32 | "aria-deprecated-role": {
|
|---|
| 33 | "description": "Garantir que os elementos não usem funções obsoletas",
|
|---|
| 34 | "help": "Não se devem usar funções ARIA obsoletas"
|
|---|
| 35 | },
|
|---|
| 36 | "aria-dialog-name": {
|
|---|
| 37 | "description": "Garantir que cada diálogo e diálogo de alerta ARIA tenha um nome acessível",
|
|---|
| 38 | "help": "Os nós de diálogo e diálogo de alerta ARIA devem ter um nome acessível"
|
|---|
| 39 | },
|
|---|
| 40 | "aria-hidden-body": {
|
|---|
| 41 | "description": "Garantir que 'aria-hidden=\"true\"' não esteja presente no corpo do documento.",
|
|---|
| 42 | "help": "'aria-hidden=\"true\"' não deve estar presente no corpo do documento"
|
|---|
| 43 | },
|
|---|
| 44 | "aria-hidden-focus": {
|
|---|
| 45 | "description": "Garantir que elementos com 'aria-hidden' não sejam focáveis nem contenham elementos focáveis",
|
|---|
| 46 | "help": "Um elemento oculto por ARIA não deve ser focável nem conter elementos focáveis"
|
|---|
| 47 | },
|
|---|
| 48 | "aria-input-field-name": {
|
|---|
| 49 | "description": "Garantir que cada campo de entrada ARIA tenha um nome acessível",
|
|---|
| 50 | "help": "Os campos de entrada ARIA devem ter um nome acessível"
|
|---|
| 51 | },
|
|---|
| 52 | "aria-meter-name": {
|
|---|
| 53 | "description": "Garantir que cada nó de medidor ARIA tenha um nome acessível",
|
|---|
| 54 | "help": "Os nós de medidor ARIA devem ter um nome acessível"
|
|---|
| 55 | },
|
|---|
| 56 | "aria-progressbar-name": {
|
|---|
| 57 | "description": "Garantir que cada nó de barra de progresso ARIA tenha um nome acessível",
|
|---|
| 58 | "help": "Os nós de barra de progresso ARIA devem ter um nome acessível"
|
|---|
| 59 | },
|
|---|
| 60 | "aria-prohibited-attr": {
|
|---|
| 61 | "description": "Garantir que os atributos ARIA não sejam proibidos para a função de um elemento",
|
|---|
| 62 | "help": "Os elementos devem usar apenas atributos ARIA permitidos"
|
|---|
| 63 | },
|
|---|
| 64 | "aria-required-attr": {
|
|---|
| 65 | "description": "Garantir que os elementos com funções ARIA tenham todos os atributos ARIA obrigatórios",
|
|---|
| 66 | "help": "Devem ser fornecidos os atributos ARIA obrigatórios"
|
|---|
| 67 | },
|
|---|
| 68 | "aria-required-children": {
|
|---|
| 69 | "description": "Garantir que os elementos com uma função ARIA que requer funções filhas as contenham",
|
|---|
| 70 | "help": "Certas funções ARIA devem conter determinados elementos filhos"
|
|---|
| 71 | },
|
|---|
| 72 | "aria-required-parent": {
|
|---|
| 73 | "description": "Garantir que os elementos com uma função ARIA que requer funções parentais estejam contidos por estes",
|
|---|
| 74 | "help": "Certas funções ARIA devem estar contidas em pais específicos"
|
|---|
| 75 | },
|
|---|
| 76 | "aria-roledescription": {
|
|---|
| 77 | "description": "Garantir que 'aria-roledescription' seja usado apenas em elementos com uma função implícita ou explícita",
|
|---|
| 78 | "help": "'aria-roledescription' deve estar em elementos com uma função semântica"
|
|---|
| 79 | },
|
|---|
| 80 | "aria-roles": {
|
|---|
| 81 | "description": "Garantir que todos os elementos com o atributo 'role' usem um valor válido",
|
|---|
| 82 | "help": "As funções 'roles' ARIA utilizadas devem corresponder a valores válidos"
|
|---|
| 83 | },
|
|---|
| 84 | "aria-text": {
|
|---|
| 85 | "description": "Garantir que 'role=\"text\"' seja usado em elementos sem descendentes focáveis",
|
|---|
| 86 | "help": "'\"role=text\"' não deve ter descendentes focáveis"
|
|---|
| 87 | },
|
|---|
| 88 | "aria-toggle-field-name": {
|
|---|
| 89 | "description": "Garantir que cada campo de alternância ARIA tenha um nome acessível",
|
|---|
| 90 | "help": "Os campos de alternância ARIA devem ter um nome acessível"
|
|---|
| 91 | },
|
|---|
| 92 | "aria-tooltip-name": {
|
|---|
| 93 | "description": "Garantir que cada nó de 'tooltip' ARIA tenha um nome acessível",
|
|---|
| 94 | "help": "Os nós de 'tooltip' ARIA devem ter um nome acessível"
|
|---|
| 95 | },
|
|---|
| 96 | "aria-treeitem-name": {
|
|---|
| 97 | "description": "Garantir que cada nó de 'treeitem' ARIA tenha um nome acessível",
|
|---|
| 98 | "help": "Os nós de 'treeitem' ARIA devem ter um nome acessível"
|
|---|
| 99 | },
|
|---|
| 100 | "aria-valid-attr-value": {
|
|---|
| 101 | "description": "Garantir que todos os atributos ARIA tenham valores válidos",
|
|---|
| 102 | "help": "Os atributos ARIA devem corresponder a valores válidos"
|
|---|
| 103 | },
|
|---|
| 104 | "aria-valid-attr": {
|
|---|
| 105 | "description": "Garantir que os atributos que começam com 'aria-' sejam atributos ARIA válidos",
|
|---|
| 106 | "help": "Os atributos ARIA devem corresponder a nomes válidos"
|
|---|
| 107 | },
|
|---|
| 108 | "audio-caption": {
|
|---|
| 109 | "description": "Garantir que os elementos <audio> tenham legendas",
|
|---|
| 110 | "help": "Os elementos <audio> devem ter uma pista de legendas"
|
|---|
| 111 | },
|
|---|
| 112 | "autocomplete-valid": {
|
|---|
| 113 | "description": "Garantir que o atributo 'autocomplete' esteja correto e seja adequado para o campo de formulário",
|
|---|
| 114 | "help": "O atributo 'autocomplete' deve ser utilizado corretamente"
|
|---|
| 115 | },
|
|---|
| 116 | "avoid-inline-spacing": {
|
|---|
| 117 | "description": "Garantir que o espaçamento do texto definido através de atributos de estilo possa ser ajustado com folhas de estilo personalizadas",
|
|---|
| 118 | "help": "O espaçamento do texto 'inline' deve ser ajustável com folhas de estilo personalizadas"
|
|---|
| 119 | },
|
|---|
| 120 | "blink": {
|
|---|
| 121 | "description": "Garantir que os elementos <blink> não sejam usados",
|
|---|
| 122 | "help": "Os elementos <blink> estão obsoletos e não devem ser usados"
|
|---|
| 123 | },
|
|---|
| 124 | "button-name": {
|
|---|
| 125 | "description": "Garantir que os botões tenham texto discernível",
|
|---|
| 126 | "help": "Os botões devem ter texto discernível"
|
|---|
| 127 | },
|
|---|
| 128 | "bypass": {
|
|---|
| 129 | "description": "Garantir que cada página tenha pelo menos um mecanismo para o utilizador contornar a navegação e saltar diretamente para o conteúdo",
|
|---|
| 130 | "help": "A página deve ter meios para contornar blocos repetitivos"
|
|---|
| 131 | },
|
|---|
| 132 | "color-contrast-enhanced": {
|
|---|
| 133 | "description": "Garantir que o contraste entre as cores de primeiro plano e de fundo cumpra os limites de razão de contraste aprimorada, WCAG 2 AAA",
|
|---|
| 134 | "help": "Os elementos devem cumprir os limites de razão de contraste aprimorada"
|
|---|
| 135 | },
|
|---|
| 136 | "color-contrast": {
|
|---|
| 137 | "description": "Garantir que o contraste entre as cores de primeiro plano e de fundo cumpra os limites mínimos de razão de contraste, WCAG 2 AA",
|
|---|
| 138 | "help": "Os elementos devem cumprir os limites mínimos de razão de contraste"
|
|---|
| 139 | },
|
|---|
| 140 | "css-orientation-lock": {
|
|---|
| 141 | "description": "Garantir que o conteúdo não esteja bloqueado a uma orientação de ecrã específica, e que seja operativo em todas as orientações de ecrã",
|
|---|
| 142 | "help": "As media queries CSS não devem bloquear a orientação do ecrã"
|
|---|
| 143 | },
|
|---|
| 144 | "definition-list": {
|
|---|
| 145 | "description": "Garantir que os elementos <dl> estejam estruturados corretamente",
|
|---|
| 146 | "help": "Os elementos <dl> devem conter apenas grupos de <dt> e <dd> ordenados corretamente, ou elementos <script>, <template> ou <div>"
|
|---|
| 147 | },
|
|---|
| 148 | "dlitem": {
|
|---|
| 149 | "description": "Garantir que os elementos <dt> e <dd> estejam contidos num <dl>",
|
|---|
| 150 | "help": "Os elementos <dt> e <dd> devem estar contidos num <dl>"
|
|---|
| 151 | },
|
|---|
| 152 | "document-title": {
|
|---|
| 153 | "description": "Garantir que cada documento HTML contenha um elemento <title> não vazio",
|
|---|
| 154 | "help": "Os documentos devem ter um elemento <title> para ajudar na navegação"
|
|---|
| 155 | },
|
|---|
| 156 | "duplicate-id-active": {
|
|---|
| 157 | "description": "Garantir que cada valor do atributo 'id' dos elementos ativos seja único",
|
|---|
| 158 | "help": "Os IDs dos elementos ativos devem ser únicos"
|
|---|
| 159 | },
|
|---|
| 160 | "duplicate-id-aria": {
|
|---|
| 161 | "description": "Garantir que cada valor do atributo 'id' utilizado em ARIA e em etiquetas seja único",
|
|---|
| 162 | "help": "Os IDs usados em ARIA e etiquetas devem ser únicos"
|
|---|
| 163 | },
|
|---|
| 164 | "duplicate-id": {
|
|---|
| 165 | "description": "Garantir que cada valor do atributo 'id' seja único",
|
|---|
| 166 | "help": "O valor do atributo 'id' deve ser único"
|
|---|
| 167 | },
|
|---|
| 168 | "empty-heading": {
|
|---|
| 169 | "description": "Garantir que os cabeçalhos tenham texto discernível",
|
|---|
| 170 | "help": "Os cabeçalhos não devem estar vazios"
|
|---|
| 171 | },
|
|---|
| 172 | "empty-table-header": {
|
|---|
| 173 | "description": "Garantir que os cabeçalhos de tabelas tenham texto discernível",
|
|---|
| 174 | "help": "O texto dos cabeçalhos de tabela não deve estar vazio"
|
|---|
| 175 | },
|
|---|
| 176 | "focus-order-semantics": {
|
|---|
| 177 | "description": "Garantir que os elementos na ordem de foco tenham uma função apropriada para conteúdo interativo",
|
|---|
| 178 | "help": "Os elementos na ordem de foco devem ter uma função apropriada"
|
|---|
| 179 | },
|
|---|
| 180 | "form-field-multiple-labels": {
|
|---|
| 181 | "description": "Garantir que o campo de formulário não possua múltiplos elementos 'label'",
|
|---|
| 182 | "help": "O campo de formulário não deve ter múltiplos elementos 'label'"
|
|---|
| 183 | },
|
|---|
| 184 | "frame-focusable-content": {
|
|---|
| 185 | "description": "Garantir que os elementos <frame> e <iframe> com conteúdo focável não tenham tabindex=-1",
|
|---|
| 186 | "help": "Os frames com conteúdo focável não devem ter tabindex=-1"
|
|---|
| 187 | },
|
|---|
| 188 | "frame-tested": {
|
|---|
| 189 | "description": "Garantir que os elementos <iframe> e <frame> contenham o script axe-core",
|
|---|
| 190 | "help": "Os frames devem ser testados com axe-core"
|
|---|
| 191 | },
|
|---|
| 192 | "frame-title-unique": {
|
|---|
| 193 | "description": "Garantir que os elementos <iframe> e <frame> contenham um atributo 'title' único",
|
|---|
| 194 | "help": "Os frames devem ter um atributo 'title' único"
|
|---|
| 195 | },
|
|---|
| 196 | "frame-title": {
|
|---|
| 197 | "description": "Garantir que os elementos <iframe> e <frame> tenham um atributo 'title' acessível",
|
|---|
| 198 | "help": "Os frames devem ter um atributo 'title' acessível"
|
|---|
| 199 | },
|
|---|
| 200 | "heading-order": {
|
|---|
| 201 | "description": "Garantir que a ordem dos cabeçalhos seja semanticamente correta",
|
|---|
| 202 | "help": "Os níveis de cabeçalho devem aumentar apenas de um em um"
|
|---|
| 203 | },
|
|---|
| 204 | "hidden-content": {
|
|---|
| 205 | "description": "Informa os utilizadores sobre conteúdo oculto.",
|
|---|
| 206 | "help": "O conteúdo oculto na página deve ser analisado"
|
|---|
| 207 | },
|
|---|
| 208 | "html-has-lang": {
|
|---|
| 209 | "description": "Garantir que cada documento HTML tenha um atributo 'lang'",
|
|---|
| 210 | "help": "O elemento <html> deve ter um atributo 'lang'"
|
|---|
| 211 | },
|
|---|
| 212 | "html-lang-valid": {
|
|---|
| 213 | "description": "Garantir que o atributo 'lang' do elemento <html> tenha um valor válido",
|
|---|
| 214 | "help": "O elemento <html> deve ter um valor válido para o atributo 'lang'"
|
|---|
| 215 | },
|
|---|
| 216 | "html-xml-lang-mismatch": {
|
|---|
| 217 | "description": "Garantir que os elementos HTML com atributos 'lang' e 'xml:lang' válidos concordem na língua base da página",
|
|---|
| 218 | "help": "Os elementos HTML com 'lang' e 'xml:lang' devem ter a mesma língua base"
|
|---|
| 219 | },
|
|---|
| 220 | "identical-links-same-purpose": {
|
|---|
| 221 | "description": "Garantir que links com o mesmo nome acessível tenham um propósito semelhante",
|
|---|
| 222 | "help": "Links com o mesmo nome devem ter um propósito semelhante"
|
|---|
| 223 | },
|
|---|
| 224 | "image-alt": {
|
|---|
| 225 | "description": "Garantir que os elementos <img> tenham texto alternativo ou um 'role' igual a 'none' ou 'presentation'",
|
|---|
| 226 | "help": "As imagens devem ter texto alternativo"
|
|---|
| 227 | },
|
|---|
| 228 | "image-redundant-alt": {
|
|---|
| 229 | "description": "Garantir que o texto alternativo da imagem não seja repetido como texto",
|
|---|
| 230 | "help": "O texto alternativo das imagens não deve ser repetido como texto"
|
|---|
| 231 | },
|
|---|
| 232 | "input-button-name": {
|
|---|
| 233 | "description": "Garantir que os botões de 'input' tenham texto discernível",
|
|---|
| 234 | "help": "Os botões de 'input' devem ter texto discernível"
|
|---|
| 235 | },
|
|---|
| 236 | "input-image-alt": {
|
|---|
| 237 | "description": "Garantir que os elementos <input type=\"image\"> tenham texto alternativo",
|
|---|
| 238 | "help": "Os botões de imagem devem ter texto alternativo"
|
|---|
| 239 | },
|
|---|
| 240 | "label-content-name-mismatch": {
|
|---|
| 241 | "description": "Garantir que os elementos etiquetados através do seu conteúdo incluam o texto visível como parte do seu nome acessível",
|
|---|
| 242 | "help": "Os elementos devem incluir o seu texto visível como parte do nome acessível"
|
|---|
| 243 | },
|
|---|
| 244 | "label-title-only": {
|
|---|
| 245 | "description": "Garantir que cada elemento de formulário tenha uma etiqueta visível e não seja etiquetado apenas através de etiquetas ocultas, ou dos atributos 'title' ou 'aria-describedby'",
|
|---|
| 246 | "help": "Os elementos de formulário devem ter uma etiqueta visível"
|
|---|
| 247 | },
|
|---|
| 248 | "label": {
|
|---|
| 249 | "description": "Garantir que cada elemento de formulário tenha uma etiqueta",
|
|---|
| 250 | "help": "Os elementos de formulário devem ter etiquetas"
|
|---|
| 251 | },
|
|---|
| 252 | "landmark-banner-is-top-level": {
|
|---|
| 253 | "description": "Garantir que o marco de 'banner' esteja no nível principal",
|
|---|
| 254 | "help": "O marco de 'banner' não deve estar contido noutro marco"
|
|---|
| 255 | },
|
|---|
| 256 | "landmark-complementary-is-top-level": {
|
|---|
| 257 | "description": "Garantir que o marco 'complementary' ou 'aside' estejam no nível principal",
|
|---|
| 258 | "help": "O 'aside' não deve estar contido noutro marco"
|
|---|
| 259 | },
|
|---|
| 260 | "landmark-contentinfo-is-top-level": {
|
|---|
| 261 | "description": "Garantir que o marco 'contentinfo' esteja no nível principal",
|
|---|
| 262 | "help": "O marco 'contentinfo' não deve estar contido noutro marco"
|
|---|
| 263 | },
|
|---|
| 264 | "landmark-main-is-top-level": {
|
|---|
| 265 | "description": "Garantir que o marco 'main' esteja no nível principal",
|
|---|
| 266 | "help": "O marco 'main' não deve estar contido noutro marco"
|
|---|
| 267 | },
|
|---|
| 268 | "landmark-no-duplicate-banner": {
|
|---|
| 269 | "description": "Garantir que o documento tenha, no máximo, um marco de 'banner'",
|
|---|
| 270 | "help": "O documento não deve ter mais do que um marco de 'banner'"
|
|---|
| 271 | },
|
|---|
| 272 | "landmark-no-duplicate-contentinfo": {
|
|---|
| 273 | "description": "Garantir que o documento tenha, no máximo, um marco 'contentinfo'",
|
|---|
| 274 | "help": "O documento não deve ter mais do que um marco 'contentinfo'"
|
|---|
| 275 | },
|
|---|
| 276 | "landmark-no-duplicate-main": {
|
|---|
| 277 | "description": "Garantir que o documento tenha, no máximo, um marco 'main'",
|
|---|
| 278 | "help": "O documento não deve ter mais do que um marco 'main'"
|
|---|
| 279 | },
|
|---|
| 280 | "landmark-one-main": {
|
|---|
| 281 | "description": "Garantir que o documento tenha um marco 'main'",
|
|---|
| 282 | "help": "O documento deve ter um marco 'main'"
|
|---|
| 283 | },
|
|---|
| 284 | "landmark-unique": {
|
|---|
| 285 | "description": "Garantir que os marcos sejam únicos",
|
|---|
| 286 | "help": "Os marcos devem ter uma combinação única de 'role' ou 'role'/'label'/'title' (ou seja, nome acessível)"
|
|---|
| 287 | },
|
|---|
| 288 | "link-in-text-block": {
|
|---|
| 289 | "description": "Garantir que os links se distingam do texto circundante de forma que não dependa da cor",
|
|---|
| 290 | "help": "Os links devem ser distinguíveis sem depender da cor"
|
|---|
| 291 | },
|
|---|
| 292 | "link-name": {
|
|---|
| 293 | "description": "Garantir que os links tenham texto discernível",
|
|---|
| 294 | "help": "Os links devem ter texto discernível"
|
|---|
| 295 | },
|
|---|
| 296 | "list": {
|
|---|
| 297 | "description": "Garantir que as listas estejam estruturadas corretamente",
|
|---|
| 298 | "help": "Os elementos <ul> e <ol> devem conter diretamente apenas elementos <li>, <script> ou <template>"
|
|---|
| 299 | },
|
|---|
| 300 | "listitem": {
|
|---|
| 301 | "description": "Garantir que os elementos <li> sejam usados de forma semântica",
|
|---|
| 302 | "help": "Os elementos <li> devem estar contidos num <ul> ou <ol>"
|
|---|
| 303 | },
|
|---|
| 304 | "marquee": {
|
|---|
| 305 | "description": "Garantir que os elementos <marquee> não sejam usados",
|
|---|
| 306 | "help": "Os elementos <marquee> estão obsoletos e não devem ser usados"
|
|---|
| 307 | },
|
|---|
| 308 | "meta-refresh-no-exceptions": {
|
|---|
| 309 | "description": "Garantir que <meta http-equiv=\"refresh\"> não seja usado para atualização com atraso",
|
|---|
| 310 | "help": "Não se deve usar atualização com atraso"
|
|---|
| 311 | },
|
|---|
| 312 | "meta-refresh": {
|
|---|
| 313 | "description": "Garantir que <meta http-equiv=\"refresh\"> não seja usado para atualização com atraso",
|
|---|
| 314 | "help": "Não se deve usar atualização com atraso inferior a 20 horas"
|
|---|
| 315 | },
|
|---|
| 316 | "meta-viewport-large": {
|
|---|
| 317 | "description": "Garantir que <meta name=\"viewport\"> permita uma ampliação significativa",
|
|---|
| 318 | "help": "Os utilizadores devem ser capazes de ampliar e escalar o texto até 500%"
|
|---|
| 319 | },
|
|---|
| 320 | "meta-viewport": {
|
|---|
| 321 | "description": "Garantir que <meta name=\"viewport\"> não desative a escalabilidade e ampliação do texto",
|
|---|
| 322 | "help": "A ampliação e escalabilidade não devem ser desativadas"
|
|---|
| 323 | },
|
|---|
| 324 | "nested-interactive": {
|
|---|
| 325 | "description": "Garantir que os controles interativos não estejam aninhados, pois nem sempre são anunciados pelos leitores de ecrã ou podem causar problemas de foco para tecnologias assistivas",
|
|---|
| 326 | "help": "Os controles interativos não devem estar aninhados"
|
|---|
| 327 | },
|
|---|
| 328 | "no-autoplay-audio": {
|
|---|
| 329 | "description": "Garantir que os elementos <video> ou <audio> não reproduzam áudio automaticamente por mais de 3 segundos sem um mecanismo de controlo para parar ou silenciar o áudio",
|
|---|
| 330 | "help": "Os elementos <video> ou <audio> não devem reproduzir automaticamente"
|
|---|
| 331 | },
|
|---|
| 332 | "object-alt": {
|
|---|
| 333 | "description": "Garantir que os elementos <object> tenham texto alternativo",
|
|---|
| 334 | "help": "Os elementos <object> devem ter texto alternativo"
|
|---|
| 335 | },
|
|---|
| 336 | "p-as-heading": {
|
|---|
| 337 | "description": "Garantir que texto em negrito, itálico e tamanho de fonte não sejam usados para estilizar elementos <p> como cabeçalhos",
|
|---|
| 338 | "help": "Os elementos <p> estilizados não devem ser usados como cabeçalhos"
|
|---|
| 339 | },
|
|---|
| 340 | "page-has-heading-one": {
|
|---|
| 341 | "description": "Garantir que a página, ou pelo menos um dos seus 'frames', contenha um cabeçalho de nível 1",
|
|---|
| 342 | "help": "A página deve conter um cabeçalho de nível 1"
|
|---|
| 343 | },
|
|---|
| 344 | "presentation-role-conflict": {
|
|---|
| 345 | "description": "Os elementos marcados como 'none' ou 'presentation' não devem ter ARIA global ou 'tabindex', para garantir que todos os leitores de ecrã os ignorem",
|
|---|
| 346 | "help": "Garantir que os elementos marcados como 'none' ou 'presentation' sejam consistentemente ignorados"
|
|---|
| 347 | },
|
|---|
| 348 | "region": {
|
|---|
| 349 | "description": "Garantir que todo o conteúdo da página esteja contido em marcos (landmarks)",
|
|---|
| 350 | "help": "Todo o conteúdo da página deve estar contido em marcos (landmarks)"
|
|---|
| 351 | },
|
|---|
| 352 | "role-img-alt": {
|
|---|
| 353 | "description": "Garantir que os elementos com 'role=\"img\"' tenham texto alternativo",
|
|---|
| 354 | "help": "Os elementos com 'role=\"img\"' devem ter um texto alternativo"
|
|---|
| 355 | },
|
|---|
| 356 | "scope-attr-valid": {
|
|---|
| 357 | "description": "Garantir que o atributo 'scope' seja usado corretamente em tabelas",
|
|---|
| 358 | "help": "O atributo 'scope' deve ser usado corretamente"
|
|---|
| 359 | },
|
|---|
| 360 | "scrollable-region-focusable": {
|
|---|
| 361 | "description": "Garantir que os elementos com conteúdo rolável sejam acessíveis por teclado",
|
|---|
| 362 | "help": "A região rolável deve ser acessível por teclado"
|
|---|
| 363 | },
|
|---|
| 364 | "select-name": {
|
|---|
| 365 | "description": "Garantir que o elemento 'select' tenha um nome acessível",
|
|---|
| 366 | "help": "O elemento 'select' deve ter um nome acessível"
|
|---|
| 367 | },
|
|---|
| 368 | "server-side-image-map": {
|
|---|
| 369 | "description": "Garantir que os mapas de imagem do lado do servidor não sejam usados",
|
|---|
| 370 | "help": "Os mapas de imagem do lado do servidor não devem ser usados"
|
|---|
| 371 | },
|
|---|
| 372 | "skip-link": {
|
|---|
| 373 | "description": "Garantir que todos os links de salto tenham um destino focável",
|
|---|
| 374 | "help": "O destino do link de salto deve existir e ser focável"
|
|---|
| 375 | },
|
|---|
| 376 | "summary-name": {
|
|---|
| 377 | "description": "Garantir que os elementos 'summary' tenham texto discernível",
|
|---|
| 378 | "help": "Os elementos 'summary' devem ter texto discernível"
|
|---|
| 379 | },
|
|---|
| 380 | "svg-img-alt": {
|
|---|
| 381 | "description": "Garantir que os elementos <svg> com uma função 'img', 'graphics-document' ou 'graphics-symbol' tenham um texto acessível",
|
|---|
| 382 | "help": "Os elementos <svg> com a função 'img' devem ter um texto alternativo"
|
|---|
| 383 | },
|
|---|
| 384 | "tabindex": {
|
|---|
| 385 | "description": "Garantir que os valores do atributo 'tabindex' não sejam superiores a 0",
|
|---|
| 386 | "help": "Os elementos não devem ter 'tabindex' superior a zero"
|
|---|
| 387 | },
|
|---|
| 388 | "table-duplicate-name": {
|
|---|
| 389 | "description": "Garantir que o elemento <caption> não contenha o mesmo texto que o atributo 'summary'",
|
|---|
| 390 | "help": "As tabelas não devem ter o mesmo 'summary' e <caption>"
|
|---|
| 391 | },
|
|---|
| 392 | "table-fake-caption": {
|
|---|
| 393 | "description": "Garantir que as tabelas com caption utilizem o elemento <caption>.",
|
|---|
| 394 | "help": "Não se devem usar células de dados ou de cabeçalho para dar caption a uma tabela de dados."
|
|---|
| 395 | },
|
|---|
| 396 | "target-size": {
|
|---|
| 397 | "description": "Garantir que os alvos tácteis tenham tamanho e espaço suficientes",
|
|---|
| 398 | "help": "Todos os alvos tácteis devem ter 24px de dimensão ou deixar espaço suficiente"
|
|---|
| 399 | },
|
|---|
| 400 | "td-has-header": {
|
|---|
| 401 | "description": "Garantir que cada célula de dados não vazia numa tabela maior do que 3x3 tenha um ou mais cabeçalhos",
|
|---|
| 402 | "help": "Os elementos <td> não vazios em tabelas maiores devem ter um cabeçalho associado"
|
|---|
| 403 | },
|
|---|
| 404 | "td-headers-attr": {
|
|---|
| 405 | "description": "Garantir que cada célula numa tabela que usa o atributo 'headers' se refira apenas a outras células nessa tabela",
|
|---|
| 406 | "help": "As células de tabela que usam o atributo 'headers' devem referir-se apenas a células na mesma tabela"
|
|---|
| 407 | },
|
|---|
| 408 | "th-has-data-cells": {
|
|---|
| 409 | "description": "Garantir que os elementos <th> e os elementos com 'role=columnheader/rowheader' tenham células de dados que descrevem",
|
|---|
| 410 | "help": "Os cabeçalhos de tabela numa tabela de dados devem referir-se às células de dados"
|
|---|
| 411 | },
|
|---|
| 412 | "valid-lang": {
|
|---|
| 413 | "description": "Garantir que os atributos 'lang' tenham valores válidos",
|
|---|
| 414 | "help": "O atributo 'lang' deve ter um valor válido"
|
|---|
| 415 | },
|
|---|
| 416 | "video-caption": {
|
|---|
| 417 | "description": "Garantir que os elementos <video> tenham legendas",
|
|---|
| 418 | "help": "Os elementos <video> devem ter legendas"
|
|---|
| 419 | }
|
|---|
| 420 | },
|
|---|
| 421 | "checks": {
|
|---|
| 422 | "abstractrole": {
|
|---|
| 423 | "pass": "Funções abstratas não são utilizadas",
|
|---|
| 424 | "fail": {
|
|---|
| 425 | "singular": "A função abstrata não pode ser usada diretamente: ${data.values}",
|
|---|
| 426 | "plural": "As funções abstratas não podem ser usadas diretamente: ${data.values}"
|
|---|
| 427 | }
|
|---|
| 428 | },
|
|---|
| 429 | "aria-allowed-attr": {
|
|---|
| 430 | "pass": "Os atributos ARIA são usados corretamente para a função definida",
|
|---|
| 431 | "fail": {
|
|---|
| 432 | "singular": "Atributo ARIA não é permitido: ${data.values}",
|
|---|
| 433 | "plural": "Atributos ARIA não são permitidos: ${data.values}"
|
|---|
| 434 | },
|
|---|
| 435 | "incomplete": "Verifique se não há problemas se o atributo ARIA for ignorado neste elemento: ${data.values}"
|
|---|
| 436 | },
|
|---|
| 437 | "aria-allowed-role": {
|
|---|
| 438 | "pass": "A função ARIA é permitida para o elemento",
|
|---|
| 439 | "fail": {
|
|---|
| 440 | "singular": "A função ARIA ${data.values} não é permitida para o elemento",
|
|---|
| 441 | "plural": "As funções ARIA ${data.values} não são permitidas para o elemento"
|
|---|
| 442 | },
|
|---|
| 443 | "incomplete": {
|
|---|
| 444 | "singular": "A função ARIA ${data.values} deve ser removida quando o elemento se tornar visível, pois não é permitida para o elemento",
|
|---|
| 445 | "plural": "As funções ARIA ${data.values} devem ser removidas quando o elemento se tornar visível, pois não são permitidas para o elemento"
|
|---|
| 446 | }
|
|---|
| 447 | },
|
|---|
| 448 | "aria-busy": {
|
|---|
| 449 | "pass": "O elemento tem o atributo 'aria-busy'",
|
|---|
| 450 | "fail": "O elemento utiliza 'aria-busy=\"true\"' enquanto mostra um carregador"
|
|---|
| 451 | },
|
|---|
| 452 | "aria-conditional-attr": {
|
|---|
| 453 | "pass": "O atributo ARIA é permitido",
|
|---|
| 454 | "fail": {
|
|---|
| 455 | "checkbox": "Remova aria-checked, ou defina-o como '\"${data.checkState}\"' para corresponder ao estado real da caixa de seleção",
|
|---|
| 456 | "rowSingular": "Este atributo é suportado em linhas de 'treegrid', mas não em ${data.ownerRole}: ${data.invalidAttrs}",
|
|---|
| 457 | "rowPlural": "Estes atributos são suportados em linhas de 'treegrid', mas não em ${data.ownerRole}: ${data.invalidAttrs}"
|
|---|
| 458 | }
|
|---|
| 459 | },
|
|---|
| 460 | "aria-errormessage": {
|
|---|
| 461 | "pass": "'aria-errormessage' existe e referencia elementos visíveis para leitores de ecrã que utilizam uma técnica suportada de 'aria-errormessage'",
|
|---|
| 462 | "fail": {
|
|---|
| 463 | "singular": "O valor de 'aria-errormessage' `${data.values}` deve utilizar uma técnica para anunciar a mensagem (por exemplo, aria-live, aria-describedby, role=alert, etc.)",
|
|---|
| 464 | "plural": "Os valores de 'aria-errormessage' `${data.values}` devem utilizar uma técnica para anunciar a mensagem (por exemplo, aria-live, aria-describedby, role=alert, etc.)",
|
|---|
| 465 | "hidden": "O valor de 'aria-errormessage' `${data.values}` não pode referenciar um elemento oculto"
|
|---|
| 466 | },
|
|---|
| 467 | "incomplete": {
|
|---|
| 468 | "singular": "Assegure que o valor de 'aria-errormessage' `${data.values}` referencia um elemento existente",
|
|---|
| 469 | "plural": "Assegure que os valores de 'aria-errormessage' `${data.values}` referenciem elementos existentes",
|
|---|
| 470 | "idrefs": "Não foi possível determinar se o elemento 'aria-errormessage' existe na página: ${data.values}"
|
|---|
| 471 | }
|
|---|
| 472 | },
|
|---|
| 473 | "aria-hidden-body": {
|
|---|
| 474 | "pass": "Não há nenhum atributo 'aria-hidden' no corpo do documento",
|
|---|
| 475 | "fail": "'aria-hidden=true' não deve estar presente no corpo do documento"
|
|---|
| 476 | },
|
|---|
| 477 | "aria-level": {
|
|---|
| 478 | "pass": "Os valores de 'aria-level' são válidos",
|
|---|
| 479 | "incomplete": "Valores de 'aria-level' superiores a 6 não são suportados em todas as combinações de leitores de ecrã e navegadores"
|
|---|
| 480 | },
|
|---|
| 481 | "aria-prohibited-attr": {
|
|---|
| 482 | "pass": "O atributo ARIA é permitido",
|
|---|
| 483 | "fail": {
|
|---|
| 484 | "hasRolePlural": "Os atributos ${data.prohibited} não podem ser usados com a função '\"${data.role}\"'.",
|
|---|
| 485 | "hasRoleSingular": "O atributo ${data.prohibited} não pode ser usado com a função '\"${data.role}\"'.",
|
|---|
| 486 | "noRolePlural": "Os atributos ${data.prohibited} não podem ser usados num ${data.nodeName} sem um atributo 'role' válido.",
|
|---|
| 487 | "noRoleSingular": "O atributo ${data.prohibited} não pode ser usado num ${data.nodeName} sem um atributo 'role' válido."
|
|---|
| 488 | },
|
|---|
| 489 | "incomplete": {
|
|---|
| 490 | "hasRoleSingular": "O atributo ${data.prohibited} não é bem suportado com a função '\"${data.role}\"'.",
|
|---|
| 491 | "hasRolePlural": "Os atributos ${data.prohibited} não são bem suportados com a função '\"${data.role}\"'.",
|
|---|
| 492 | "noRoleSingular": "O atributo ${data.prohibited} não é bem suportado num ${data.nodeName} sem um atributo 'role' válido.",
|
|---|
| 493 | "noRolePlural": "Os atributos ${data.prohibited} não são bem suportados num ${data.nodeName} sem um atributo 'role' válido."
|
|---|
| 494 | }
|
|---|
| 495 | },
|
|---|
| 496 | "aria-required-attr": {
|
|---|
| 497 | "pass": "Todos os atributos ARIA obrigatórios estão presentes",
|
|---|
| 498 | "fail": {
|
|---|
| 499 | "singular": "Atributo ARIA obrigatório não está presente: ${data.values}",
|
|---|
| 500 | "plural": "Atributos ARIA obrigatórios não estão presentes: ${data.values}"
|
|---|
| 501 | }
|
|---|
| 502 | },
|
|---|
| 503 | "aria-required-children": {
|
|---|
| 504 | "pass": {
|
|---|
| 505 | "default": "Os elementos filhos ARIA obrigatórios estão presentes",
|
|---|
| 506 | "aria-busy": "O elemento tem o atributo 'aria-busy', pelo que é permitido omitir os elementos filhos obrigatórios"
|
|---|
| 507 | },
|
|---|
| 508 | "fail": {
|
|---|
| 509 | "singular": "A função ARIA de filho obrigatório não está presente: ${data.values}",
|
|---|
| 510 | "plural": "A função ARIA de filhos obrigatórios não está presente: ${data.values}",
|
|---|
| 511 | "unallowed": "O elemento tem filhos que não são permitidos: ${data.values}"
|
|---|
| 512 | },
|
|---|
| 513 | "incomplete": {
|
|---|
| 514 | "singular": "Espera-se que seja adicionada a função ARIA de filho: ${data.values}",
|
|---|
| 515 | "plural": "Espera-se que sejam adicionadas as funções ARIA de filhos: ${data.values}"
|
|---|
| 516 | }
|
|---|
| 517 | },
|
|---|
| 518 | "aria-required-parent": {
|
|---|
| 519 | "pass": "A função ARIA parental obrigatória está presente",
|
|---|
| 520 | "fail": {
|
|---|
| 521 | "singular": "A função ARIA parental obrigatória não está presente: ${data.values}",
|
|---|
| 522 | "plural": "As funções ARIA parentais obrigatórias não estão presentes: ${data.values}"
|
|---|
| 523 | }
|
|---|
| 524 | },
|
|---|
| 525 | "aria-roledescription": {
|
|---|
| 526 | "pass": "'aria-roledescription' é utilizado numa função semântica suportada",
|
|---|
| 527 | "incomplete": "Verifique se o 'aria-roledescription' é anunciado por leitores de ecrã suportados",
|
|---|
| 528 | "fail": "Atribua ao elemento uma função que suporte 'aria-roledescription'"
|
|---|
| 529 | },
|
|---|
| 530 | "aria-unsupported-attr": {
|
|---|
| 531 | "pass": "O atributo ARIA é suportado",
|
|---|
| 532 | "fail": "O atributo ARIA não é amplamente suportado em leitores de ecrã e tecnologias assistivas: ${data.values}"
|
|---|
| 533 | },
|
|---|
| 534 | "aria-valid-attr-value": {
|
|---|
| 535 | "pass": "Os valores dos atributos ARIA são válidos",
|
|---|
| 536 | "fail": {
|
|---|
| 537 | "singular": "Valor de atributo ARIA inválido: ${data.values}",
|
|---|
| 538 | "plural": "Valores de atributo ARIA inválidos: ${data.values}"
|
|---|
| 539 | },
|
|---|
| 540 | "incomplete": {
|
|---|
| 541 | "noId": "O ID do elemento do atributo ARIA não existe na página: ${data.needsReview}",
|
|---|
| 542 | "noIdShadow": "O ID do elemento do atributo ARIA não existe na página ou é descendente de uma shadow DOM tree diferente: ${data.needsReview}",
|
|---|
| 543 | "ariaCurrent": "O valor do atributo ARIA é inválido e será tratado como '\"aria-current=true\"': ${data.needsReview}",
|
|---|
| 544 | "idrefs": "Não foi possível determinar se o ID do elemento do atributo ARIA existe na página: ${data.needsReview}",
|
|---|
| 545 | "empty": "O valor do atributo ARIA é ignorado quando está vazio: ${data.needsReview}",
|
|---|
| 546 | "controlsWithinPopup": "Não foi possível determinar se o ID referenciado por 'aria-controls existe' na página enquanto se utiliza 'aria-haspopup': ${data.needsReview}"
|
|---|
| 547 | }
|
|---|
| 548 | },
|
|---|
| 549 | "aria-valid-attr": {
|
|---|
| 550 | "pass": "O nome do atributo ARIA é válido",
|
|---|
| 551 | "fail": {
|
|---|
| 552 | "singular": "Nome de atributo ARIA inválido: ${data.values}",
|
|---|
| 553 | "plural": "Nomes de atributos ARIA inválidos: ${data.values}"
|
|---|
| 554 | }
|
|---|
| 555 | },
|
|---|
| 556 | "braille-label-equivalent": {
|
|---|
| 557 | "pass": "'aria-braillelabel' é utilizado num elemento com texto acessível",
|
|---|
| 558 | "fail": "'aria-braillelabel' é utilizado num elemento sem texto acessível",
|
|---|
| 559 | "incomplete": "Não foi possível calcular o texto acessível"
|
|---|
| 560 | },
|
|---|
| 561 | "braille-roledescription-equivalent": {
|
|---|
| 562 | "pass": "'aria-brailleroledescription' é utilizado num elemento com aria-roledescription",
|
|---|
| 563 | "fail": {
|
|---|
| 564 | "noRoleDescription": "'aria-brailleroledescription' é utilizado num elemento sem 'aria-roledescription'",
|
|---|
| 565 | "emptyRoleDescription": "'aria-brailleroledescription' é utilizado num elemento com 'aria-roledescription' vazio"
|
|---|
| 566 | }
|
|---|
| 567 | },
|
|---|
| 568 | "deprecatedrole": {
|
|---|
| 569 | "pass": "A função ARIA não está obsoleta",
|
|---|
| 570 | "fail": "A função utilizada está obsoleta: ${data}"
|
|---|
| 571 | },
|
|---|
| 572 | "fallbackrole": {
|
|---|
| 573 | "pass": "Foi utilizado apenas um valor de 'role'",
|
|---|
| 574 | "fail": "Utilize apenas um valor de 'role', pois as funções de 'fallback' não são suportadas em navegadores mais antigos",
|
|---|
| 575 | "incomplete": "Utilize apenas o role 'presentation' ou 'none', pois são sinónimos."
|
|---|
| 576 | },
|
|---|
| 577 | "has-global-aria-attribute": {
|
|---|
| 578 | "pass": {
|
|---|
| 579 | "singular": "O elemento tem o atributo ARIA global: ${data.values}",
|
|---|
| 580 | "plural": "O elemento tem os atributos ARIA globais: ${data.values}"
|
|---|
| 581 | },
|
|---|
| 582 | "fail": "O elemento não tem atributo ARIA global"
|
|---|
| 583 | },
|
|---|
| 584 | "has-widget-role": {
|
|---|
| 585 | "pass": "O elemento tem uma função de 'widget'.",
|
|---|
| 586 | "fail": "O elemento não tem uma função de 'widget'."
|
|---|
| 587 | },
|
|---|
| 588 | "invalidrole": {
|
|---|
| 589 | "pass": "A função ARIA é válida",
|
|---|
| 590 | "fail": {
|
|---|
| 591 | "singular": "A função deve ser uma das funções ARIA válidas: ${data.values}",
|
|---|
| 592 | "plural": "As funções devem ser uma das funções ARIA válidas: ${data.values}"
|
|---|
| 593 | }
|
|---|
| 594 | },
|
|---|
| 595 | "is-element-focusable": {
|
|---|
| 596 | "pass": "O elemento é focável.",
|
|---|
| 597 | "fail": "O elemento não é focável."
|
|---|
| 598 | },
|
|---|
| 599 | "no-implicit-explicit-label": {
|
|---|
| 600 | "pass": "Não há discrepância entre uma <label> e o nome acessível",
|
|---|
| 601 | "incomplete": "Verifique se a <label> não precisa fazer parte do nome do campo ARIA ${data}"
|
|---|
| 602 | },
|
|---|
| 603 | "unsupportedrole": {
|
|---|
| 604 | "pass": "A função ARIA é suportada",
|
|---|
| 605 | "fail": "A função utilizada não é amplamente suportada em leitores de ecrã e tecnologias assistivas: ${data}"
|
|---|
| 606 | },
|
|---|
| 607 | "valid-scrollable-semantics": {
|
|---|
| 608 | "pass": "O elemento tem semântica válida para um elemento na ordem de foco.",
|
|---|
| 609 | "fail": "O elemento tem semântica inválida para um elemento na ordem de foco."
|
|---|
| 610 | },
|
|---|
| 611 | "color-contrast-enhanced": {
|
|---|
| 612 | "pass": "O elemento tem um contraste de cor suficiente de ${data.contrastRatio}",
|
|---|
| 613 | "fail": {
|
|---|
| 614 | "default": "O elemento tem um contraste de cor insuficiente de ${data.contrastRatio} (cor de primeiro plano: ${data.fgColor}, cor de fundo: ${data.bgColor}, tamanho da fonte: ${data.fontSize}, peso da fonte: ${data.fontWeight}). Esperava-se uma razão de contraste de ${data.expectedContrastRatio}",
|
|---|
| 615 | "fgOnShadowColor": "O elemento tem um contraste de cor insuficiente de ${data.contrastRatio} entre a cor de primeiro plano e a cor da sombra (cor de primeiro plano: ${data.fgColor}, cor do text-shadow: ${data.shadowColor}, tamanho da fonte: ${data.fontSize}, peso da fonte: ${data.fontWeight}). Esperava-se uma razão de contraste de ${data.expectedContrastRatio}",
|
|---|
| 616 | "shadowOnBgColor": "O elemento tem um contraste de cor insuficiente de ${data.contrastRatio} entre a cor da sombra e a cor de fundo (cor do text-shadow: ${data.shadowColor}, cor de fundo: ${data.bgColor}, tamanho da fonte: ${data.fontSize}, peso da fonte: ${data.fontWeight}). Esperava-se uma razão de contraste de ${data.expectedContrastRatio}"
|
|---|
| 617 | },
|
|---|
| 618 | "incomplete": {
|
|---|
| 619 | "default": "Não foi possível determinar a razão de contraste",
|
|---|
| 620 | "bgImage": "A cor de fundo do elemento não pôde ser determinada devido a uma imagem de fundo",
|
|---|
| 621 | "bgGradient": "A cor de fundo do elemento não pôde ser determinada devido a um gradiente de fundo",
|
|---|
| 622 | "imgNode": "A cor de fundo do elemento não pôde ser determinada porque o elemento contém um nó de imagem",
|
|---|
| 623 | "bgOverlap": "A cor de fundo do elemento não pôde ser determinada porque está sobreposto por outro elemento",
|
|---|
| 624 | "fgAlpha": "A cor de primeiro plano do elemento não pôde ser determinada devido à transparência alfa",
|
|---|
| 625 | "elmPartiallyObscured": "A cor de fundo do elemento não pôde ser determinada porque está parcialmente encoberta por outro elemento",
|
|---|
| 626 | "elmPartiallyObscuring": "A cor de fundo do elemento não pôde ser determinada porque se sobrepõe parcialmente a outros elementos",
|
|---|
| 627 | "outsideViewport": "A cor de fundo do elemento não pôde ser determinada porque está fora da área visível",
|
|---|
| 628 | "equalRatio": "O elemento tem uma razão de contraste 1:1 com o fundo",
|
|---|
| 629 | "shortTextContent": "O conteúdo do elemento é demasiado curto para determinar se é realmente conteúdo textual",
|
|---|
| 630 | "nonBmp": "O conteúdo do elemento contém apenas caracteres não textuais",
|
|---|
| 631 | "pseudoContent": "A cor de fundo do elemento não pôde ser determinada devido a um pseudo-elemento"
|
|---|
| 632 | }
|
|---|
| 633 | },
|
|---|
| 634 | "color-contrast": {
|
|---|
| 635 | "pass": {
|
|---|
| 636 | "default": "O elemento tem um contraste de cor suficiente de ${data.contrastRatio}",
|
|---|
| 637 | "hidden": "O elemento está oculto"
|
|---|
| 638 | },
|
|---|
| 639 | "fail": {
|
|---|
| 640 | "default": "O elemento tem um contraste de cor insuficiente de ${data.contrastRatio} (cor de primeiro plano: ${data.fgColor}, cor de fundo: ${data.bgColor}, tamanho da fonte: ${data.fontSize}, peso da fonte: ${data.fontWeight}). Esperava-se uma razão de contraste de ${data.expectedContrastRatio}",
|
|---|
| 641 | "fgOnShadowColor": "O elemento tem um contraste de cor insuficiente de ${data.contrastRatio} entre a cor de primeiro plano e a cor da sombra (cor de primeiro plano: ${data.fgColor}, cor do text-shadow: ${data.shadowColor}, tamanho da fonte: ${data.fontSize}, peso da fonte: ${data.fontWeight}). Esperava-se uma razão de contraste de ${data.expectedContrastRatio}",
|
|---|
| 642 | "shadowOnBgColor": "O elemento tem um contraste de cor insuficiente de ${data.contrastRatio} entre a cor da sombra e a cor de fundo (cor do text-shadow: ${data.shadowColor}, cor de fundo: ${data.bgColor}, tamanho da fonte: ${data.fontSize}, peso da fonte: ${data.fontWeight}). Esperava-se uma razão de contraste de ${data.expectedContrastRatio}"
|
|---|
| 643 | },
|
|---|
| 644 | "incomplete": {
|
|---|
| 645 | "default": "Não foi possível determinar a razão de contraste",
|
|---|
| 646 | "bgImage": "A cor de fundo do elemento não pôde ser determinada devido a uma imagem de fundo",
|
|---|
| 647 | "bgGradient": "A cor de fundo do elemento não pôde ser determinada devido a um gradiente de fundo",
|
|---|
| 648 | "imgNode": "A cor de fundo do elemento não pôde ser determinada porque o elemento contém um nó de imagem",
|
|---|
| 649 | "bgOverlap": "A cor de fundo do elemento não pôde ser determinada porque está sobreposto por outro elemento",
|
|---|
| 650 | "complexTextShadows": "Não foi possível determinar o contraste do elemento porque utiliza sombras de texto complexas",
|
|---|
| 651 | "fgAlpha": "A cor de primeiro plano do elemento não pôde ser determinada devido à transparência alfa",
|
|---|
| 652 | "elmPartiallyObscured": "A cor de fundo do elemento não pôde ser determinada porque está parcialmente encoberta por outro elemento",
|
|---|
| 653 | "elmPartiallyObscuring": "A cor de fundo do elemento não pôde ser determinada porque se sobrepõe parcialmente a outros elementos",
|
|---|
| 654 | "outsideViewport": "A cor de fundo do elemento não pôde ser determinada porque está fora da área visível",
|
|---|
| 655 | "equalRatio": "O elemento tem uma razão de contraste 1:1 com o fundo",
|
|---|
| 656 | "shortTextContent": "O conteúdo do elemento é demasiado curto para determinar se é realmente texto",
|
|---|
| 657 | "nonBmp": "O conteúdo do elemento contém apenas caracteres não textuais",
|
|---|
| 658 | "pseudoContent": "A cor de fundo do elemento não pôde ser determinada devido a um pseudo-elemento"
|
|---|
| 659 | }
|
|---|
| 660 | },
|
|---|
| 661 | "link-in-text-block-style": {
|
|---|
| 662 | "pass": "Os links podem ser distinguidos do texto circundante através de estilos visuais",
|
|---|
| 663 | "incomplete": {
|
|---|
| 664 | "default": "Verifique se o link necessita de estilos para se distinguir do texto próximo",
|
|---|
| 665 | "pseudoContent": "Verifique se o pseudo-estilo do link é suficiente para o distinguir do texto circundante"
|
|---|
| 666 | },
|
|---|
| 667 | "fail": "O link não tem estilos (como sublinhado) para se distinguir do texto circundante"
|
|---|
| 668 | },
|
|---|
| 669 | "link-in-text-block": {
|
|---|
| 670 | "pass": "Os links podem ser distinguidos do texto circundante de alguma forma que não seja pela cor",
|
|---|
| 671 | "fail": {
|
|---|
| 672 | "fgContrast": "O link tem um contraste de cor insuficiente de ${data.contrastRatio}:1 com o texto circundante. (O contraste mínimo é ${data.requiredContrastRatio}:1, cor do link: ${data.nodeColor}, cor do texto circundante: ${data.parentColor})",
|
|---|
| 673 | "bgContrast": "O fundo do link tem um contraste de cor insuficiente de ${data.contrastRatio} (o contraste mínimo é ${data.requiredContrastRatio}:1, cor de fundo do link: ${data.nodeBackgroundColor}, cor de fundo circundante: ${data.parentBackgroundColor})"
|
|---|
| 674 | },
|
|---|
| 675 | "incomplete": {
|
|---|
| 676 | "default": "Não foi possível determinar a razão de contraste do primeiro plano do elemento",
|
|---|
| 677 | "bgContrast": "Não foi possível determinar a razão de contraste do fundo do elemento",
|
|---|
| 678 | "bgImage": "Não foi possível determinar a razão de contraste do elemento devido a uma imagem de fundo",
|
|---|
| 679 | "bgGradient": "Não foi possível determinar a razão de contraste do elemento devido a um gradiente de fundo",
|
|---|
| 680 | "imgNode": "Não foi possível determinar a razão de contraste do elemento porque contém um nó de imagem",
|
|---|
| 681 | "bgOverlap": "Não foi possível determinar a razão de contraste do elemento devido à sobreposição de elementos"
|
|---|
| 682 | }
|
|---|
| 683 | },
|
|---|
| 684 | "autocomplete-appropriate": {
|
|---|
| 685 | "pass": "O valor de 'autocomplete' está num elemento apropriado",
|
|---|
| 686 | "fail": "O valor de 'autocomplete' é inapropriado para este tipo de entrada"
|
|---|
| 687 | },
|
|---|
| 688 | "autocomplete-valid": {
|
|---|
| 689 | "pass": "o atributo 'autocomplete' está formatado corretamente",
|
|---|
| 690 | "fail": "o atributo 'autocomplete' está formatado incorretamente",
|
|---|
| 691 | "incomplete": "o atributo 'autocomplete' tem um valor não padrão. Verifique se poderia ser utilizado algum valor padrão."
|
|---|
| 692 | },
|
|---|
| 693 | "accesskeys": {
|
|---|
| 694 | "pass": "O valor do atributo 'accesskey' é único",
|
|---|
| 695 | "fail": "O documento tem múltiplos elementos com o mesmo 'accesskey'"
|
|---|
| 696 | },
|
|---|
| 697 | "focusable-content": {
|
|---|
| 698 | "pass": "O elemento contém elementos focáveis",
|
|---|
| 699 | "fail": "O elemento deveria ter conteúdo focável"
|
|---|
| 700 | },
|
|---|
| 701 | "focusable-disabled": {
|
|---|
| 702 | "pass": "Não há elementos focáveis contidos no elemento",
|
|---|
| 703 | "incomplete": "Verifique se os elementos focáveis movem imediatamente o indicador de foco",
|
|---|
| 704 | "fail": "O conteúdo focável deve ser desativado ou removido do DOM"
|
|---|
| 705 | },
|
|---|
| 706 | "focusable-element": {
|
|---|
| 707 | "pass": "O elemento é focável",
|
|---|
| 708 | "fail": "O elemento deveria ser focável"
|
|---|
| 709 | },
|
|---|
| 710 | "focusable-modal-open": {
|
|---|
| 711 | "pass": "Não há elementos focáveis enquanto um modal está aberto",
|
|---|
| 712 | "incomplete": "Verifique se os elementos focáveis não são tabuláveis no estado atual"
|
|---|
| 713 | },
|
|---|
| 714 | "focusable-no-name": {
|
|---|
| 715 | "pass": "O elemento não está na ordem de tabulação ou tem texto acessível",
|
|---|
| 716 | "fail": "O elemento está na ordem de tabulação e não tem texto acessível",
|
|---|
| 717 | "incomplete": "Não foi possível determinar se o elemento tem um nome acessível"
|
|---|
| 718 | },
|
|---|
| 719 | "focusable-not-tabbable": {
|
|---|
| 720 | "pass": "Não há elementos focáveis contidos no elemento",
|
|---|
| 721 | "incomplete": "Verifique se os elementos focáveis movem imediatamente o indicador de foco",
|
|---|
| 722 | "fail": "O conteúdo focável deve ter 'tabindex=\"-1\"' ou ser removido do DOM"
|
|---|
| 723 | },
|
|---|
| 724 | "frame-focusable-content": {
|
|---|
| 725 | "pass": "O elemento não tem descendentes focáveis",
|
|---|
| 726 | "fail": "O elemento tem descendentes focáveis",
|
|---|
| 727 | "incomplete": "Não foi possível determinar se o elemento tem descendentes"
|
|---|
| 728 | },
|
|---|
| 729 | "landmark-is-top-level": {
|
|---|
| 730 | "pass": "O marco ${data.role} está no nível principal.",
|
|---|
| 731 | "fail": "O marco ${data.role} está contido noutro marco."
|
|---|
| 732 | },
|
|---|
| 733 | "no-focusable-content": {
|
|---|
| 734 | "pass": "O elemento não tem descendentes focáveis",
|
|---|
| 735 | "fail": {
|
|---|
| 736 | "default": "O elemento tem descendentes focáveis",
|
|---|
| 737 | "notHidden": "Utilizar um tabindex negativo num elemento dentro de um controlo interativo não impede que as tecnologias assistivas foquem o elemento (mesmo com aria-hidden=\"true\")"
|
|---|
| 738 | },
|
|---|
| 739 | "incomplete": "Não foi possível determinar se o elemento tem descendentes"
|
|---|
| 740 | },
|
|---|
| 741 | "page-has-heading-one": {
|
|---|
| 742 | "pass": "A página tem pelo menos um cabeçalho de nível 1",
|
|---|
| 743 | "fail": "A página deve ter um cabeçalho de nível 1"
|
|---|
| 744 | },
|
|---|
| 745 | "page-has-main": {
|
|---|
| 746 | "pass": "O documento tem pelo menos um marco 'main'",
|
|---|
| 747 | "fail": "O documento não tem um marco 'main'"
|
|---|
| 748 | },
|
|---|
| 749 | "page-no-duplicate-banner": {
|
|---|
| 750 | "pass": "O documento não tem mais do que um marco de 'banner'",
|
|---|
| 751 | "fail": "O documento tem mais do que um marco de 'banner'"
|
|---|
| 752 | },
|
|---|
| 753 | "page-no-duplicate-contentinfo": {
|
|---|
| 754 | "pass": "O documento não tem mais do que um marco 'contentinfo'",
|
|---|
| 755 | "fail": "O documento tem mais do que um marco 'contentinfo'"
|
|---|
| 756 | },
|
|---|
| 757 | "page-no-duplicate-main": {
|
|---|
| 758 | "pass": "O documento não tem mais do que um marco 'main'",
|
|---|
| 759 | "fail": "O documento tem mais do que um marco 'main'"
|
|---|
| 760 | },
|
|---|
| 761 | "tabindex": {
|
|---|
| 762 | "pass": "O elemento não tem um 'tabindex' superior a 0",
|
|---|
| 763 | "fail": "O elemento tem um 'tabindex' superior a 0"
|
|---|
| 764 | },
|
|---|
| 765 | "alt-space-value": {
|
|---|
| 766 | "pass": "O elemento tem um valor válido para o atributo 'alt'",
|
|---|
| 767 | "fail": "O elemento tem um atributo 'alt' que contém apenas um espaço, o qual não é ignorado por todos os leitores de ecrã"
|
|---|
| 768 | },
|
|---|
| 769 | "duplicate-img-label": {
|
|---|
| 770 | "pass": "O elemento não duplica o texto existente no atributo 'alt' da <img>",
|
|---|
| 771 | "fail": "O elemento contém uma <img> com texto 'alt' que duplica texto existente"
|
|---|
| 772 | },
|
|---|
| 773 | "explicit-label": {
|
|---|
| 774 | "pass": "O elemento tem uma <label> explícita",
|
|---|
| 775 | "fail": "O elemento não tem uma <label> explícita",
|
|---|
| 776 | "incomplete": "Não foi possível determinar se o elemento de formulário tem uma <label> explícita"
|
|---|
| 777 | },
|
|---|
| 778 | "help-same-as-label": {
|
|---|
| 779 | "pass": "O texto de ajuda (title ou aria-describedby) não duplica o texto da etiqueta",
|
|---|
| 780 | "fail": "O texto de ajuda (title ou aria-describedby) é igual ao texto da etiqueta"
|
|---|
| 781 | },
|
|---|
| 782 | "hidden-explicit-label": {
|
|---|
| 783 | "pass": "O elemento de formulário tem uma <label> explícita visível",
|
|---|
| 784 | "fail": "O elemento de formulário tem uma <label> explícita que está oculta",
|
|---|
| 785 | "incomplete": "Não foi possível determinar se o elemento de formulário tem uma <label> explícita oculta"
|
|---|
| 786 | },
|
|---|
| 787 | "implicit-label": {
|
|---|
| 788 | "pass": "O elemento tem uma <label> implícita (envolvida)",
|
|---|
| 789 | "fail": "O elemento não tem uma <label> implícita (envolvida)",
|
|---|
| 790 | "incomplete": "Não foi possível determinar se o elemento de formulário tem uma <label> implícita (envolvida)"
|
|---|
| 791 | },
|
|---|
| 792 | "label-content-name-mismatch": {
|
|---|
| 793 | "pass": "O elemento contém texto visível como parte do seu nome acessível",
|
|---|
| 794 | "fail": "O texto dentro do elemento não está incluído no nome acessível"
|
|---|
| 795 | },
|
|---|
| 796 | "multiple-label": {
|
|---|
| 797 | "pass": "O campo de formulário não tem múltiplos <label>",
|
|---|
| 798 | "incomplete": "Múltiplos <label> não são amplamente suportadas em tecnologias assistivas. Assegure que a primeira etiqueta contém toda a informação necessária."
|
|---|
| 799 | },
|
|---|
| 800 | "title-only": {
|
|---|
| 801 | "pass": "O elemento de formulário não utiliza apenas o atributo 'title' para a sua etiqueta",
|
|---|
| 802 | "fail": "Apenas o 'title' é usado para gerar a etiqueta do elemento de formulário"
|
|---|
| 803 | },
|
|---|
| 804 | "landmark-is-unique": {
|
|---|
| 805 | "pass": "Os marcos devem ter uma combinação única de 'role' ou 'role'/'label'/'title' (ou seja, nome acessível)",
|
|---|
| 806 | "fail": "O marco deve ter um 'aria-label', 'aria-labelledby' ou 'title' únicos para torná-lo distinguível"
|
|---|
| 807 | },
|
|---|
| 808 | "has-lang": {
|
|---|
| 809 | "pass": "O elemento <html> tem um atributo 'lang'",
|
|---|
| 810 | "fail": {
|
|---|
| 811 | "noXHTML": "O atributo 'xml:lang' não é válido em páginas HTML, use o atributo 'lang'.",
|
|---|
| 812 | "noLang": "O elemento <html> não tem um atributo 'lang'"
|
|---|
| 813 | }
|
|---|
| 814 | },
|
|---|
| 815 | "valid-lang": {
|
|---|
| 816 | "pass": "O valor do atributo 'lang' está incluído na lista de línguas válidas",
|
|---|
| 817 | "fail": "O valor do atributo 'lang' não está incluído na lista de línguas válidas"
|
|---|
| 818 | },
|
|---|
| 819 | "xml-lang-mismatch": {
|
|---|
| 820 | "pass": "Os atributos 'lang' e 'xml:lang' têm a mesma língua base",
|
|---|
| 821 | "fail": "Os atributos 'lang' e 'xml:lang' não têm a mesma língua base"
|
|---|
| 822 | },
|
|---|
| 823 | "dlitem": {
|
|---|
| 824 | "pass": "O item de lista de descrições tem um elemento pai <dl>",
|
|---|
| 825 | "fail": "O item de lista de descrições não tem um elemento pai <dl>"
|
|---|
| 826 | },
|
|---|
| 827 | "listitem": {
|
|---|
| 828 | "pass": "O item de lista tem um elemento pai <ul>, <ol> ou 'role=\"list\"'",
|
|---|
| 829 | "fail": {
|
|---|
| 830 | "default": "O item de lista não tem um elemento pai <ul> ou <ol>",
|
|---|
| 831 | "roleNotValid": "O elemento pai do item de lista tem uma role que não é 'role=\"list\"'"
|
|---|
| 832 | }
|
|---|
| 833 | },
|
|---|
| 834 | "only-dlitems": {
|
|---|
| 835 | "pass": "O elemento <dl> tem apenas filhos diretos permitidos: <dt>, <dd> ou <div>",
|
|---|
| 836 | "fail": "O elemento <dl> tem filhos diretos não permitidos: ${data.values}"
|
|---|
| 837 | },
|
|---|
| 838 | "only-listitems": {
|
|---|
| 839 | "pass": "O elemento de lista tem apenas filhos diretos permitidos, que devem ser <li>",
|
|---|
| 840 | "fail": "O elemento de lista tem filhos diretos não permitidos: ${data.values}"
|
|---|
| 841 | },
|
|---|
| 842 | "structured-dlitems": {
|
|---|
| 843 | "pass": "Quando não está vazio, o elemento tem tanto <dt> como <dd>",
|
|---|
| 844 | "fail": "Quando não está vazio, o elemento não tem pelo menos um elemento <dt> seguido de pelo menos um <dd>"
|
|---|
| 845 | },
|
|---|
| 846 | "caption": {
|
|---|
| 847 | "pass": "O elemento multimédia tem uma pista de legendas",
|
|---|
| 848 | "incomplete": "Verifique se as legendas estão disponíveis para o elemento"
|
|---|
| 849 | },
|
|---|
| 850 | "frame-tested": {
|
|---|
| 851 | "pass": "O 'iframe' foi testado com axe-core",
|
|---|
| 852 | "fail": "O 'iframe' não pôde ser testado com axe-core",
|
|---|
| 853 | "incomplete": "O 'iframe' ainda tem de ser testado com axe-core"
|
|---|
| 854 | },
|
|---|
| 855 | "no-autoplay-audio": {
|
|---|
| 856 | "pass": "<video> ou <audio> não reproduzem áudio por mais do que a duração permitida ou têm um mecanismo de controlo",
|
|---|
| 857 | "fail": "<video> ou <audio> reproduzem áudio por mais do que a duração permitida e não têm um mecanismo de controlo",
|
|---|
| 858 | "incomplete": "Verifique se o <video> ou <audio> não reproduzem áudio por mais do que a duração permitida ou fornecem um mecanismo de controlo"
|
|---|
| 859 | },
|
|---|
| 860 | "css-orientation-lock": {
|
|---|
| 861 | "pass": "O ecrã é operativo, e não existe bloqueio de orientação",
|
|---|
| 862 | "fail": "O bloqueio de orientação CSS está aplicado e torna o ecrã inoperável",
|
|---|
| 863 | "incomplete": "Não é possível determinar o bloqueio de orientação CSS"
|
|---|
| 864 | },
|
|---|
| 865 | "meta-viewport-large": {
|
|---|
| 866 | "pass": "A tag <meta> não impede uma ampliação significativa em dispositivos móveis",
|
|---|
| 867 | "fail": "A tag <meta> limita a ampliação em dispositivos móveis"
|
|---|
| 868 | },
|
|---|
| 869 | "meta-viewport": {
|
|---|
| 870 | "pass": "A tag <meta> não desativa a ampliação em dispositivos móveis",
|
|---|
| 871 | "fail": "${data} na tag <meta> desativa a ampliação em dispositivos móveis"
|
|---|
| 872 | },
|
|---|
| 873 | "target-offset": {
|
|---|
| 874 | "pass": {
|
|---|
| 875 | "default": "O alvo tem espaço suficiente dos seus vizinhos mais próximos. O espaço clicável seguro tem um diâmetro de ${data.closestOffset}px, que é, no mínimo, ${data.minOffset}px.",
|
|---|
| 876 | "large": "O alvo excede largamente o tamanho mínimo de ${data.minOffset}px."
|
|---|
| 877 | },
|
|---|
| 878 | "fail": "O alvo tem espaço insuficiente em relação aos vizinhos mais próximos. O espaço clicável seguro tem um diâmetro de ${data.closestOffset}px, em vez de, pelo menos, ${data.minOffset}px.",
|
|---|
| 879 | "incomplete": {
|
|---|
| 880 | "default": "O elemento com tabindex negativo tem espaço insuficiente em relação aos seus vizinhos mais próximos. O espaço clicável seguro tem um diâmetro de ${data.closestOffset}px, em vez de, pelo menos, ${data.minOffset}px. É este um alvo?",
|
|---|
| 881 | "nonTabbableNeighbor": "O alvo tem espaço insuficiente em relação aos seus vizinhos mais próximos. O espaço clicável seguro tem um diâmetro de ${data.closestOffset}px, em vez de, pelo menos, ${data.minOffset}px. Será que o vizinho é um alvo?",
|
|---|
| 882 | "tooManyRects": "Não foi possível obter o tamanho do alvo porque há elementos sobrepostos em excesso"
|
|---|
| 883 | }
|
|---|
| 884 | },
|
|---|
| 885 | "target-size": {
|
|---|
| 886 | "pass": {
|
|---|
| 887 | "default": "O controlo tem um tamanho suficiente (${data.width}px por ${data.height}px, devendo ter pelo menos ${data.minSize}px por ${data.minSize}px)",
|
|---|
| 888 | "obscured": "O controlo é ignorado porque está totalmente encoberto e, por isso, não é clicável",
|
|---|
| 889 | "large": "O alvo excede largamente o tamanho mínimo de ${data.minSize}px."
|
|---|
| 890 | },
|
|---|
| 891 | "fail": {
|
|---|
| 892 | "default": "O alvo tem um tamanho insuficiente (${data.width}px por ${data.height}px, devendo ter pelo menos ${data.minSize}px por ${data.minSize}px)",
|
|---|
| 893 | "partiallyObscured": "O alvo tem um tamanho insuficiente porque está parcialmente encoberto (o menor espaço é de ${data.width}px por ${data.height}px, devendo ser pelo menos ${data.minSize}px por ${data.minSize}px)"
|
|---|
| 894 | },
|
|---|
| 895 | "incomplete": {
|
|---|
| 896 | "default": "O elemento com 'tabindex' negativo tem um tamanho insuficiente (${data.width}px por ${data.height}px, devendo ser pelo menos ${data.minSize}px por ${data.minSize}px). É este um alvo?",
|
|---|
| 897 | "contentOverflow": "O tamanho do elemento não pôde ser determinado com precisão devido ao conteúdo com overflow",
|
|---|
| 898 | "partiallyObscured": "O elemento com 'tabindex' negativo tem um tamanho insuficiente porque está parcialmente encoberto (o menor espaço é de ${data.width}px por ${data.height}px, devendo ser pelo menos ${data.minSize}px por ${data.minSize}px). É este um alvo?",
|
|---|
| 899 | "partiallyObscuredNonTabbable": "O alvo tem um tamanho insuficiente porque está parcialmente encoberto por um vizinho com 'tabindex' negativo (o menor espaço é de ${data.width}px por ${data.height}px, devendo ser pelo menos ${data.minSize}px por ${data.minSize}px). Será que o vizinho é um alvo?",
|
|---|
| 900 | "tooManyRects": "Não foi possível obter o tamanho do alvo porque há elementos sobrepostos em excesso"
|
|---|
| 901 | }
|
|---|
| 902 | },
|
|---|
| 903 | "header-present": {
|
|---|
| 904 | "pass": "A página tem um cabeçalho",
|
|---|
| 905 | "fail": "A página não tem um cabeçalho"
|
|---|
| 906 | },
|
|---|
| 907 | "heading-order": {
|
|---|
| 908 | "pass": "Ordem dos cabeçalhos válida",
|
|---|
| 909 | "fail": "Ordem dos cabeçalhos inválida",
|
|---|
| 910 | "incomplete": "Não foi possível determinar o cabeçalho anterior"
|
|---|
| 911 | },
|
|---|
| 912 | "identical-links-same-purpose": {
|
|---|
| 913 | "pass": "Não existem outros links com o mesmo nome que direcionem para uma URL diferente",
|
|---|
| 914 | "incomplete": "Verifique se os links têm o mesmo propósito ou se são intencionalmente ambíguos."
|
|---|
| 915 | },
|
|---|
| 916 | "internal-link-present": {
|
|---|
| 917 | "pass": "Foi encontrado um link de salto válido",
|
|---|
| 918 | "fail": "Não foi encontrado um link de salto válido"
|
|---|
| 919 | },
|
|---|
| 920 | "landmark": {
|
|---|
| 921 | "pass": "A página tem uma região de marco",
|
|---|
| 922 | "fail": "A página não tem uma região de marco"
|
|---|
| 923 | },
|
|---|
| 924 | "meta-refresh-no-exceptions": {
|
|---|
| 925 | "pass": "A tag <meta> não atualiza imediatamente a página",
|
|---|
| 926 | "fail": "A tag <meta> força a atualização da página com temporização"
|
|---|
| 927 | },
|
|---|
| 928 | "meta-refresh": {
|
|---|
| 929 | "pass": "A tag <meta> não atualiza imediatamente a página",
|
|---|
| 930 | "fail": "A tag <meta> força a atualização da página com temporização (inferior a 20 horas)"
|
|---|
| 931 | },
|
|---|
| 932 | "p-as-heading": {
|
|---|
| 933 | "pass": "Os elementos <p> não estão estilizados como cabeçalhos",
|
|---|
| 934 | "fail": "Deveriam ser usados elementos de cabeçalho em vez de elementos <p> estilizados",
|
|---|
| 935 | "incomplete": "Não foi possível determinar se os elementos <p> estão estilizados como cabeçalhos"
|
|---|
| 936 | },
|
|---|
| 937 | "region": {
|
|---|
| 938 | "pass": "Todo o conteúdo da página está contido em marcos",
|
|---|
| 939 | "fail": "Algum conteúdo da página não está contido em marcos"
|
|---|
| 940 | },
|
|---|
| 941 | "skip-link": {
|
|---|
| 942 | "pass": "O destino do link de salto existe",
|
|---|
| 943 | "incomplete": "O destino do link de salto deve tornar-se visível na ativação",
|
|---|
| 944 | "fail": "Não há destino para o link de salto"
|
|---|
| 945 | },
|
|---|
| 946 | "unique-frame-title": {
|
|---|
| 947 | "pass": "O atributo 'title' do elemento é único",
|
|---|
| 948 | "fail": "O atributo 'title' do elemento não é único"
|
|---|
| 949 | },
|
|---|
| 950 | "duplicate-id-active": {
|
|---|
| 951 | "pass": "O documento não tem elementos ativos que partilhem o mesmo atributo 'id'",
|
|---|
| 952 | "fail": "O documento tem elementos ativos com o mesmo atributo 'id': ${data}"
|
|---|
| 953 | },
|
|---|
| 954 | "duplicate-id-aria": {
|
|---|
| 955 | "pass": "O documento não tem elementos referenciados com ARIA ou etiquetas que partilhem o mesmo atributo 'id'",
|
|---|
| 956 | "fail": "O documento tem múltiplos elementos referenciados com ARIA com o mesmo atributo 'id': ${data}"
|
|---|
| 957 | },
|
|---|
| 958 | "duplicate-id": {
|
|---|
| 959 | "pass": "O documento não tem elementos estáticos que partilhem o mesmo atributo 'id'",
|
|---|
| 960 | "fail": "O documento tem múltiplos elementos estáticos com o mesmo atributo 'id': ${data}"
|
|---|
| 961 | },
|
|---|
| 962 | "aria-label": {
|
|---|
| 963 | "pass": "O atributo 'aria-label' existe e não está vazio",
|
|---|
| 964 | "fail": "O atributo 'aria-label' não existe ou está vazio"
|
|---|
| 965 | },
|
|---|
| 966 | "aria-labelledby": {
|
|---|
| 967 | "pass": "O atributo 'aria-labelledby' existe e referencia elementos visíveis para leitores de ecrã",
|
|---|
| 968 | "fail": "O atributo 'aria-labelledby' não existe, referencia elementos que não existem ou que estão vazios",
|
|---|
| 969 | "incomplete": "Assegure que 'aria-labelledby' referencia um elemento existente"
|
|---|
| 970 | },
|
|---|
| 971 | "avoid-inline-spacing": {
|
|---|
| 972 | "pass": "Não foram especificados estilos 'inline' com '!important' que afetem o espaçamento do texto",
|
|---|
| 973 | "fail": {
|
|---|
| 974 | "singular": "Remova '!important' do estilo 'inline' ${data.values}, pois a sua sobreposição não é suportada pela maioria dos navegadores",
|
|---|
| 975 | "plural": "Remova '!important' dos estilos 'inline' ${data.values}, pois a sua sobreposição não é suportada pela maioria dos navegadores"
|
|---|
| 976 | }
|
|---|
| 977 | },
|
|---|
| 978 | "button-has-visible-text": {
|
|---|
| 979 | "pass": "O elemento tem texto interno que é visível para leitores de ecrã",
|
|---|
| 980 | "fail": "O elemento não tem texto interno que seja visível para leitores de ecrã",
|
|---|
| 981 | "incomplete": "Não foi possível determinar se o elemento tem filhos"
|
|---|
| 982 | },
|
|---|
| 983 | "doc-has-title": {
|
|---|
| 984 | "pass": "O documento tem um elemento <title> não vazio",
|
|---|
| 985 | "fail": "O documento não tem um elemento <title> não vazio"
|
|---|
| 986 | },
|
|---|
| 987 | "exists": {
|
|---|
| 988 | "pass": "O elemento não existe",
|
|---|
| 989 | "incomplete": "O elemento existe"
|
|---|
| 990 | },
|
|---|
| 991 | "has-alt": {
|
|---|
| 992 | "pass": "O elemento tem um atributo 'alt'",
|
|---|
| 993 | "fail": "O elemento não tem um atributo 'alt'"
|
|---|
| 994 | },
|
|---|
| 995 | "has-visible-text": {
|
|---|
| 996 | "pass": "O elemento tem texto que é visível para leitores de ecrã",
|
|---|
| 997 | "fail": "O elemento não tem texto que seja visível para leitores de ecrã",
|
|---|
| 998 | "incomplete": "Não foi possível determinar se o elemento tem filhos"
|
|---|
| 999 | },
|
|---|
| 1000 | "important-letter-spacing": {
|
|---|
| 1001 | "pass": "O espaçamento entre letras no atributo 'style' não está definido como !important, ou cumpre o mínimo",
|
|---|
| 1002 | "fail": "O espaçamento entre letras no atributo 'style' não deve usar !important, ou ter ${data.minValue}em (atualmente ${data.value}em)"
|
|---|
| 1003 | },
|
|---|
| 1004 | "important-line-height": {
|
|---|
| 1005 | "pass": "A altura da linha no atributo 'style' não está definida como !important, ou cumpre o mínimo",
|
|---|
| 1006 | "fail": "A altura da linha no atributo 'style' não deve usar !important, ou ter ${data.minValue}em (atualmente ${data.value}em)"
|
|---|
| 1007 | },
|
|---|
| 1008 | "important-word-spacing": {
|
|---|
| 1009 | "pass": "O espaçamento entre palavras no atributo 'style' não está definido como !important, ou cumpre o mínimo",
|
|---|
| 1010 | "fail": "O espaçamento entre palavras no atributo 'style' não deve usar !important, ou ter ${data.minValue}em (atualmente ${data.value}em)"
|
|---|
| 1011 | },
|
|---|
| 1012 | "is-on-screen": {
|
|---|
| 1013 | "pass": "O elemento não está visível",
|
|---|
| 1014 | "fail": "O elemento está visível"
|
|---|
| 1015 | },
|
|---|
| 1016 | "non-empty-alt": {
|
|---|
| 1017 | "pass": "O elemento tem um atributo 'alt' não vazio",
|
|---|
| 1018 | "fail": {
|
|---|
| 1019 | "noAttr": "O elemento não tem um atributo 'alt'",
|
|---|
| 1020 | "emptyAttr": "O elemento tem um atributo 'alt' vazio"
|
|---|
| 1021 | }
|
|---|
| 1022 | },
|
|---|
| 1023 | "non-empty-if-present": {
|
|---|
| 1024 | "pass": {
|
|---|
| 1025 | "default": "O elemento não tem um atributo 'value'",
|
|---|
| 1026 | "has-label": "O elemento tem um atributo 'value' não vazio"
|
|---|
| 1027 | },
|
|---|
| 1028 | "fail": "O elemento tem um atributo 'value' e este está vazio"
|
|---|
| 1029 | },
|
|---|
| 1030 | "non-empty-placeholder": {
|
|---|
| 1031 | "pass": "O elemento tem um atributo 'placeholder'",
|
|---|
| 1032 | "fail": {
|
|---|
| 1033 | "noAttr": "O elemento não tem um atributo 'placeholder'",
|
|---|
| 1034 | "emptyAttr": "O elemento tem um atributo 'placeholder' vazio"
|
|---|
| 1035 | }
|
|---|
| 1036 | },
|
|---|
| 1037 | "non-empty-title": {
|
|---|
| 1038 | "pass": "O elemento tem um atributo 'title'",
|
|---|
| 1039 | "fail": {
|
|---|
| 1040 | "noAttr": "O elemento não tem um atributo 'title'",
|
|---|
| 1041 | "emptyAttr": "O elemento tem um atributo 'title' vazio"
|
|---|
| 1042 | }
|
|---|
| 1043 | },
|
|---|
| 1044 | "non-empty-value": {
|
|---|
| 1045 | "pass": "O elemento tem um atributo 'value' não vazio",
|
|---|
| 1046 | "fail": {
|
|---|
| 1047 | "noAttr": "O elemento não tem um atributo 'value'",
|
|---|
| 1048 | "emptyAttr": "O elemento tem um atributo 'value' vazio"
|
|---|
| 1049 | }
|
|---|
| 1050 | },
|
|---|
| 1051 | "presentational-role": {
|
|---|
| 1052 | "pass": "A semântica por defeito do elemento foi substituída por 'role=\"${data.role}\"'",
|
|---|
| 1053 | "fail": {
|
|---|
| 1054 | "default": "A semântica por defeito do elemento não foi substituída por 'role=\"none\"' ou 'role=\"presentation\"'",
|
|---|
| 1055 | "globalAria": "A função do elemento não é de apresentação porque tem um atributo ARIA global",
|
|---|
| 1056 | "focusable": "A função do elemento não é de apresentação porque é focável",
|
|---|
| 1057 | "both": "A função do elemento não é de apresentação porque tem um atributo ARIA global e é focável",
|
|---|
| 1058 | "iframe": "Utilizar o atributo '\"title\"' num elemento ${data.nodeName} com uma função de apresentação comporta-se de forma inconsistente entre os leitores de ecrã"
|
|---|
| 1059 | }
|
|---|
| 1060 | },
|
|---|
| 1061 | "role-none": {
|
|---|
| 1062 | "pass": "A semântica por defeito do elemento foi substituída por 'role=\"none\"'",
|
|---|
| 1063 | "fail": "A semântica por defeito do elemento não foi substituída por 'role=\"none\"'"
|
|---|
| 1064 | },
|
|---|
| 1065 | "role-presentation": {
|
|---|
| 1066 | "pass": "A semântica por defeito do elemento foi substituída por 'role=\"presentation\"'",
|
|---|
| 1067 | "fail": "A semântica por defeito do elemento não foi substituída por 'role=\"presentation\"'"
|
|---|
| 1068 | },
|
|---|
| 1069 | "svg-non-empty-title": {
|
|---|
| 1070 | "pass": "O elemento tem um filho que é um título",
|
|---|
| 1071 | "fail": {
|
|---|
| 1072 | "noTitle": "O elemento não tem um filho que seja um título",
|
|---|
| 1073 | "emptyTitle": "O título do filho do elemento está vazio"
|
|---|
| 1074 | },
|
|---|
| 1075 | "incomplete": "Não foi possível determinar se o elemento tem um filho que seja um título"
|
|---|
| 1076 | },
|
|---|
| 1077 | "caption-faked": {
|
|---|
| 1078 | "pass": "A primeira linha de uma tabela não é utilizada como <caption>",
|
|---|
| 1079 | "fail": "O primeiro filho da tabela deveria ser um caption em vez de uma célula"
|
|---|
| 1080 | },
|
|---|
| 1081 | "html5-scope": {
|
|---|
| 1082 | "pass": "O atributo scope é usado apenas em elementos de cabeçalho de tabela (<th>)",
|
|---|
| 1083 | "fail": "No HTML 5, os atributos scope só podem ser usados em elementos de cabeçalho de tabela (<th>)"
|
|---|
| 1084 | },
|
|---|
| 1085 | "same-caption-summary": {
|
|---|
| 1086 | "pass": "O conteúdo do atributo 'summary' e do <caption> não está duplicado",
|
|---|
| 1087 | "fail": "O conteúdo do atributo 'summary' e do elemento <caption> são idênticos",
|
|---|
| 1088 | "incomplete": "Não foi possível determinar se o elemento <table> tem um caption"
|
|---|
| 1089 | },
|
|---|
| 1090 | "scope-value": {
|
|---|
| 1091 | "pass": "O atributo 'scope' é usado corretamente",
|
|---|
| 1092 | "fail": "O valor do atributo 'scope' só pode ser 'row' ou 'col'"
|
|---|
| 1093 | },
|
|---|
| 1094 | "td-has-header": {
|
|---|
| 1095 | "pass": "Todas as células de dados não vazias têm cabeçalhos de tabela",
|
|---|
| 1096 | "fail": "Algumas células de dados não vazias não têm cabeçalhos de tabela"
|
|---|
| 1097 | },
|
|---|
| 1098 | "td-headers-attr": {
|
|---|
| 1099 | "pass": "O atributo 'headers' é usado exclusivamente para referir-se a outras células da tabela",
|
|---|
| 1100 | "incomplete": "O atributo 'headers' está vazio",
|
|---|
| 1101 | "fail": "O atributo 'headers' não é usado exclusivamente para referir-se a outras células da tabela"
|
|---|
| 1102 | },
|
|---|
| 1103 | "th-has-data-cells": {
|
|---|
| 1104 | "pass": "Todos os cabeçalhos de tabela numa tabela de dados referem-se às células de dados",
|
|---|
| 1105 | "fail": "Nem todas as células de cabeçalho de tabela referem-se a células de dados",
|
|---|
| 1106 | "incomplete": "Faltam células de dados na tabela ou estão vazias"
|
|---|
| 1107 | },
|
|---|
| 1108 | "hidden-content": {
|
|---|
| 1109 | "pass": "Todo o conteúdo da página foi analisado.",
|
|---|
| 1110 | "fail": "Houve problemas na análise do conteúdo desta página.",
|
|---|
| 1111 | "incomplete": "Existe conteúdo oculto na página que não foi analisado. Será necessário acionar a sua exibição para o analisar."
|
|---|
| 1112 | }
|
|---|
| 1113 | },
|
|---|
| 1114 | "failureSummaries": {
|
|---|
| 1115 | "any": {
|
|---|
| 1116 | "failureMessage": "Corrija qualquer um dos seguintes:{{~it:value}}\n {{=value.split('\\n').join('\\n ')}}{{~}}"
|
|---|
| 1117 | },
|
|---|
| 1118 | "none": {
|
|---|
| 1119 | "failureMessage": "Corrija todos os seguintes:{{~it:value}}\n {{=value.split('\\n').join('\\n ')}}{{~}}"
|
|---|
| 1120 | }
|
|---|
| 1121 | },
|
|---|
| 1122 | "incompleteFallbackMessage": "O axe não conseguiu identificar a razão. Hora de recorrer ao inspetor de elementos!"
|
|---|
| 1123 | }
|
|---|