lighthouse 11.7.1 → 12.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (272) hide show
  1. package/CONTRIBUTING.md +2 -2
  2. package/cli/bin.js +0 -7
  3. package/cli/cli-flags.d.ts +1 -5
  4. package/cli/cli-flags.js +4 -8
  5. package/cli/test/smokehouse/__snapshots__/report-assert-test.js.snap +14 -14
  6. package/cli/test/smokehouse/config/exclusions.js +3 -0
  7. package/cli/test/smokehouse/core-tests.js +6 -20
  8. package/cli/test/smokehouse/frontends/smokehouse-bin.js +2 -2
  9. package/core/audits/accessibility/aria-conditional-attr.d.ts +10 -0
  10. package/core/audits/accessibility/aria-conditional-attr.js +43 -0
  11. package/core/audits/accessibility/{duplicate-id-active.d.ts → aria-deprecated-role.d.ts} +3 -3
  12. package/core/audits/accessibility/aria-deprecated-role.js +43 -0
  13. package/core/audits/accessibility/aria-prohibited-attr.d.ts +10 -0
  14. package/core/audits/accessibility/aria-prohibited-attr.js +44 -0
  15. package/core/audits/accessibility/target-size.js +0 -1
  16. package/core/audits/byte-efficiency/byte-efficiency-audit.d.ts +0 -16
  17. package/core/audits/byte-efficiency/byte-efficiency-audit.js +1 -38
  18. package/core/audits/byte-efficiency/offscreen-images.d.ts +0 -11
  19. package/core/audits/byte-efficiency/offscreen-images.js +0 -15
  20. package/core/audits/byte-efficiency/render-blocking-resources.js +27 -26
  21. package/core/audits/byte-efficiency/unminified-css.js +2 -2
  22. package/core/audits/byte-efficiency/unused-css-rules.js +3 -1
  23. package/core/audits/dobetterweb/uses-http2.d.ts +0 -13
  24. package/core/audits/dobetterweb/uses-http2.js +4 -38
  25. package/core/audits/font-display.js +2 -2
  26. package/core/audits/layout-shifts.js +1 -1
  27. package/core/audits/preload-fonts.d.ts +1 -5
  28. package/core/audits/preload-fonts.js +1 -10
  29. package/core/audits/prioritize-lcp-image.js +2 -2
  30. package/core/audits/redirects-http.d.ts +19 -0
  31. package/core/audits/redirects-http.js +75 -0
  32. package/core/audits/resource-summary.d.ts +2 -0
  33. package/core/audits/resource-summary.js +5 -4
  34. package/core/audits/seo/is-crawlable.d.ts +2 -1
  35. package/core/audits/seo/link-text.js +12 -0
  36. package/core/audits/uses-rel-preload.d.ts +1 -5
  37. package/core/audits/uses-rel-preload.js +5 -15
  38. package/core/audits/work-during-interaction.d.ts +2 -2
  39. package/core/audits/work-during-interaction.js +2 -2
  40. package/core/computed/js-bundles.d.ts +1 -1
  41. package/core/computed/metrics/lantern-first-contentful-paint.d.ts +13 -82
  42. package/core/computed/metrics/lantern-first-contentful-paint.js +16 -178
  43. package/core/computed/metrics/lantern-first-meaningful-paint.d.ts +13 -12
  44. package/core/computed/metrics/lantern-first-meaningful-paint.js +11 -49
  45. package/core/computed/metrics/lantern-interactive.d.ts +13 -21
  46. package/core/computed/metrics/lantern-interactive.js +12 -84
  47. package/core/computed/metrics/lantern-largest-contentful-paint.d.ts +13 -25
  48. package/core/computed/metrics/lantern-largest-contentful-paint.js +13 -80
  49. package/core/computed/metrics/lantern-max-potential-fid.d.ts +13 -24
  50. package/core/computed/metrics/lantern-max-potential-fid.js +12 -64
  51. package/core/computed/metrics/lantern-metric.d.ts +14 -18
  52. package/core/computed/metrics/lantern-metric.js +34 -30
  53. package/core/computed/metrics/lantern-speed-index.d.ts +13 -32
  54. package/core/computed/metrics/lantern-speed-index.js +13 -116
  55. package/core/computed/metrics/lantern-total-blocking-time.d.ts +13 -25
  56. package/core/computed/metrics/lantern-total-blocking-time.js +10 -94
  57. package/core/computed/metrics/metric.js +1 -3
  58. package/core/computed/module-duplication.d.ts +1 -1
  59. package/core/computed/navigation-insights.d.ts +36 -0
  60. package/core/computed/navigation-insights.js +35 -0
  61. package/core/computed/page-dependency-graph.js +3 -7
  62. package/core/computed/resource-summary.d.ts +10 -12
  63. package/core/computed/resource-summary.js +12 -19
  64. package/core/computed/trace-engine-result.d.ts +16 -3
  65. package/core/computed/trace-engine-result.js +19 -14
  66. package/core/computed/unused-css.d.ts +3 -1
  67. package/core/computed/unused-css.js +6 -5
  68. package/core/config/config-helpers.js +0 -4
  69. package/core/config/constants.js +0 -1
  70. package/core/config/default-config.js +63 -142
  71. package/core/config/experimental-config.js +11 -0
  72. package/core/config/filters.js +0 -1
  73. package/core/gather/driver/navigation.js +4 -1
  74. package/core/gather/driver/prepare.js +1 -1
  75. package/core/gather/driver/target-manager.js +4 -3
  76. package/core/gather/driver/wait-for-condition.js +2 -3
  77. package/core/gather/driver.d.ts +12 -0
  78. package/core/gather/driver.js +27 -0
  79. package/core/gather/gatherers/accessibility.js +4 -6
  80. package/core/gather/gatherers/css-usage.d.ts +0 -21
  81. package/core/gather/gatherers/css-usage.js +9 -119
  82. package/core/gather/gatherers/root-causes.d.ts +2 -2
  83. package/core/gather/gatherers/root-causes.js +6 -5
  84. package/core/gather/gatherers/stylesheets.d.ts +26 -0
  85. package/core/gather/gatherers/stylesheets.js +138 -0
  86. package/core/gather/gatherers/trace-elements.d.ts +2 -12
  87. package/core/gather/gatherers/trace-elements.js +2 -21
  88. package/core/gather/navigation-runner.js +3 -1
  89. package/core/gather/session.d.ts +8 -0
  90. package/core/gather/session.js +14 -1
  91. package/core/lib/emulation.js +2 -2
  92. package/core/lib/i18n/i18n.d.ts +0 -1
  93. package/core/lib/i18n/i18n.js +0 -2
  94. package/core/lib/lantern/cpu-node.d.ts +7 -1
  95. package/core/lib/lantern/cpu-node.js +12 -2
  96. package/core/lib/lantern/lantern-error.d.ts +8 -0
  97. package/core/lib/lantern/lantern-error.js +9 -0
  98. package/core/lib/lantern/metric.js +2 -6
  99. package/core/lib/lantern/metrics/first-contentful-paint.d.ts +79 -0
  100. package/core/lib/lantern/metrics/first-contentful-paint.js +200 -0
  101. package/core/lib/lantern/metrics/first-meaningful-paint.d.ts +6 -0
  102. package/core/lib/lantern/metrics/first-meaningful-paint.js +64 -0
  103. package/core/lib/lantern/metrics/interactive.d.ts +26 -0
  104. package/core/lib/lantern/metrics/interactive.js +112 -0
  105. package/core/lib/lantern/metrics/largest-contentful-paint.d.ts +19 -0
  106. package/core/lib/lantern/metrics/largest-contentful-paint.js +108 -0
  107. package/core/lib/lantern/metrics/max-potential-fid.d.ts +30 -0
  108. package/core/lib/lantern/metrics/max-potential-fid.js +92 -0
  109. package/core/lib/lantern/metrics/speed-index.d.ts +38 -0
  110. package/core/lib/lantern/metrics/speed-index.js +144 -0
  111. package/core/lib/lantern/metrics/total-blocking-time.d.ts +31 -0
  112. package/core/lib/lantern/metrics/total-blocking-time.js +128 -0
  113. package/core/lib/lantern/network-node.js +28 -4
  114. package/core/lib/lantern/page-dependency-graph.d.ts +4 -4
  115. package/core/lib/lantern/page-dependency-graph.js +19 -7
  116. package/core/lib/lantern/simulator/connection-pool.d.ts +2 -12
  117. package/core/lib/lantern/simulator/connection-pool.js +3 -22
  118. package/core/lib/lantern/simulator/network-analyzer.js +1 -12
  119. package/core/lib/lantern/simulator/simulator.d.ts +2 -4
  120. package/core/lib/lantern/simulator/simulator.js +7 -14
  121. package/core/lib/lantern/types/lantern.d.ts +5 -3
  122. package/core/lib/lantern-trace-saver.js +0 -1
  123. package/core/lib/lh-error.d.ts +9 -0
  124. package/core/lib/lh-error.js +13 -3
  125. package/core/lib/lighthouse-compatibility.js +53 -10
  126. package/core/lib/navigation-error.js +3 -0
  127. package/core/lib/network-request.d.ts +1 -0
  128. package/core/lib/network-request.js +28 -0
  129. package/core/runner.js +18 -25
  130. package/dist/report/bundle.esm.js +11 -112
  131. package/dist/report/flow.js +16 -117
  132. package/dist/report/standalone.js +12 -113
  133. package/flow-report/src/help-dialog.tsx +0 -1
  134. package/flow-report/src/i18n/i18n.d.ts +0 -4
  135. package/flow-report/src/i18n/ui-strings.d.ts +0 -1
  136. package/flow-report/src/i18n/ui-strings.js +0 -2
  137. package/flow-report/src/summary/category.tsx +10 -12
  138. package/package.json +5 -5
  139. package/readme.md +4 -4
  140. package/report/assets/styles.css +1 -60
  141. package/report/assets/templates.html +0 -95
  142. package/report/renderer/category-renderer.js +1 -1
  143. package/report/renderer/components.d.ts +2 -2
  144. package/report/renderer/components.js +2 -103
  145. package/report/renderer/dom.d.ts +1 -1
  146. package/report/renderer/dom.js +1 -1
  147. package/report/renderer/performance-category-renderer.d.ts +0 -7
  148. package/report/renderer/performance-category-renderer.js +1 -32
  149. package/report/renderer/report-renderer.js +3 -13
  150. package/report/renderer/report-ui-features.js +1 -1
  151. package/report/renderer/report-utils.d.ts +0 -1
  152. package/report/renderer/report-utils.js +13 -13
  153. package/shared/localization/locales/ar-XB.json +62 -329
  154. package/shared/localization/locales/ar.json +62 -329
  155. package/shared/localization/locales/bg.json +62 -329
  156. package/shared/localization/locales/ca.json +62 -329
  157. package/shared/localization/locales/cs.json +62 -329
  158. package/shared/localization/locales/da.json +62 -329
  159. package/shared/localization/locales/de.json +62 -329
  160. package/shared/localization/locales/el.json +62 -329
  161. package/shared/localization/locales/en-GB.json +62 -329
  162. package/shared/localization/locales/en-US.json +41 -272
  163. package/shared/localization/locales/en-XA.json +62 -329
  164. package/shared/localization/locales/en-XL.json +41 -272
  165. package/shared/localization/locales/es-419.json +62 -329
  166. package/shared/localization/locales/es.json +62 -329
  167. package/shared/localization/locales/fi.json +62 -329
  168. package/shared/localization/locales/fil.json +61 -328
  169. package/shared/localization/locales/fr.json +62 -329
  170. package/shared/localization/locales/he.json +62 -329
  171. package/shared/localization/locales/hi.json +62 -329
  172. package/shared/localization/locales/hr.json +63 -330
  173. package/shared/localization/locales/hu.json +62 -329
  174. package/shared/localization/locales/id.json +62 -329
  175. package/shared/localization/locales/it.json +62 -329
  176. package/shared/localization/locales/ja.json +62 -329
  177. package/shared/localization/locales/ko.json +62 -329
  178. package/shared/localization/locales/lt.json +62 -329
  179. package/shared/localization/locales/lv.json +62 -329
  180. package/shared/localization/locales/nl.json +62 -329
  181. package/shared/localization/locales/no.json +62 -329
  182. package/shared/localization/locales/pl.json +61 -328
  183. package/shared/localization/locales/pt-PT.json +62 -329
  184. package/shared/localization/locales/pt.json +64 -331
  185. package/shared/localization/locales/ro.json +62 -329
  186. package/shared/localization/locales/ru.json +62 -329
  187. package/shared/localization/locales/sk.json +62 -329
  188. package/shared/localization/locales/sl.json +62 -329
  189. package/shared/localization/locales/sr-Latn.json +62 -329
  190. package/shared/localization/locales/sr.json +62 -329
  191. package/shared/localization/locales/sv.json +62 -329
  192. package/shared/localization/locales/ta.json +61 -328
  193. package/shared/localization/locales/te.json +62 -329
  194. package/shared/localization/locales/th.json +62 -329
  195. package/shared/localization/locales/tr.json +62 -329
  196. package/shared/localization/locales/uk.json +62 -329
  197. package/shared/localization/locales/vi.json +61 -328
  198. package/shared/localization/locales/zh-HK.json +62 -329
  199. package/shared/localization/locales/zh-TW.json +61 -328
  200. package/shared/localization/locales/zh.json +62 -329
  201. package/tsconfig.json +1 -3
  202. package/types/artifacts.d.ts +21 -110
  203. package/types/audit.d.ts +0 -10
  204. package/types/config.d.ts +0 -1
  205. package/types/externs.d.ts +0 -2
  206. package/types/gatherer.d.ts +3 -0
  207. package/types/internal/smokehouse.d.ts +1 -1
  208. package/types/lh.d.ts +0 -2
  209. package/types/lhr/audit-details.d.ts +9 -4
  210. package/types/lhr/lhr.d.ts +0 -4
  211. package/types/lhr/settings.d.ts +0 -4
  212. package/core/audits/accessibility/duplicate-id-active.js +0 -42
  213. package/core/audits/content-width.d.ts +0 -17
  214. package/core/audits/content-width.js +0 -76
  215. package/core/audits/installable-manifest.d.ts +0 -111
  216. package/core/audits/installable-manifest.js +0 -248
  217. package/core/audits/layout-shift-elements.d.ts +0 -16
  218. package/core/audits/layout-shift-elements.js +0 -101
  219. package/core/audits/manual/pwa-cross-browser.d.ts +0 -12
  220. package/core/audits/manual/pwa-cross-browser.js +0 -40
  221. package/core/audits/manual/pwa-each-page-has-url.d.ts +0 -12
  222. package/core/audits/manual/pwa-each-page-has-url.js +0 -38
  223. package/core/audits/manual/pwa-page-transitions.d.ts +0 -12
  224. package/core/audits/manual/pwa-page-transitions.js +0 -38
  225. package/core/audits/maskable-icon.d.ts +0 -25
  226. package/core/audits/maskable-icon.js +0 -70
  227. package/core/audits/multi-check-audit.d.ts +0 -28
  228. package/core/audits/multi-check-audit.js +0 -82
  229. package/core/audits/no-unload-listeners.d.ts +0 -16
  230. package/core/audits/no-unload-listeners.js +0 -86
  231. package/core/audits/performance-budget.d.ts +0 -39
  232. package/core/audits/performance-budget.js +0 -154
  233. package/core/audits/script-elements-test-audit.d.ts +0 -14
  234. package/core/audits/script-elements-test-audit.js +0 -29
  235. package/core/audits/seo/plugins.d.ts +0 -15
  236. package/core/audits/seo/plugins.js +0 -150
  237. package/core/audits/seo/tap-targets.d.ts +0 -50
  238. package/core/audits/seo/tap-targets.js +0 -352
  239. package/core/audits/splash-screen.d.ts +0 -37
  240. package/core/audits/splash-screen.js +0 -98
  241. package/core/audits/themed-omnibox.d.ts +0 -42
  242. package/core/audits/themed-omnibox.js +0 -102
  243. package/core/audits/timing-budget.d.ts +0 -43
  244. package/core/audits/timing-budget.js +0 -175
  245. package/core/computed/manifest-values.d.ts +0 -24
  246. package/core/computed/manifest-values.js +0 -136
  247. package/core/config/budget.d.ts +0 -74
  248. package/core/config/budget.js +0 -340
  249. package/core/config/metrics-to-audits.d.ts +0 -19
  250. package/core/config/metrics-to-audits.js +0 -62
  251. package/core/gather/driver/service-workers.d.ts +0 -16
  252. package/core/gather/driver/service-workers.js +0 -52
  253. package/core/gather/gatherers/dobetterweb/tags-blocking-first-paint.d.ts +0 -47
  254. package/core/gather/gatherers/dobetterweb/tags-blocking-first-paint.js +0 -233
  255. package/core/gather/gatherers/global-listeners.d.ts +0 -27
  256. package/core/gather/gatherers/global-listeners.js +0 -108
  257. package/core/gather/gatherers/installability-errors.d.ts +0 -17
  258. package/core/gather/gatherers/installability-errors.js +0 -56
  259. package/core/gather/gatherers/script-elements.d.ts +0 -21
  260. package/core/gather/gatherers/script-elements.js +0 -100
  261. package/core/gather/gatherers/seo/embedded-content.d.ts +0 -10
  262. package/core/gather/gatherers/seo/embedded-content.js +0 -63
  263. package/core/gather/gatherers/seo/tap-targets.d.ts +0 -21
  264. package/core/gather/gatherers/seo/tap-targets.js +0 -389
  265. package/core/gather/gatherers/service-worker.d.ts +0 -10
  266. package/core/gather/gatherers/service-worker.js +0 -32
  267. package/core/gather/gatherers/web-app-manifest.d.ts +0 -32
  268. package/core/gather/gatherers/web-app-manifest.js +0 -106
  269. package/report/renderer/pwa-category-renderer.d.ts +0 -55
  270. package/report/renderer/pwa-category-renderer.js +0 -184
  271. package/third-party/chromium-synchronization/installability-errors-test.js +0 -79
  272. package/types/lhr/budget.d.ts +0 -60
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "core/audits/accessibility/accesskeys.js | description": {
3
- "message": "Các khoá truy cập cho phép người dùng chuyển nhanh đến một phần của trang. Để điều hướng đúng cách, mỗi khoá truy cập phải là duy nhất. [Tìm hiểu thêm về khoá truy cập](https://dequeuniversity.com/rules/axe/4.8/accesskeys)."
3
+ "message": "Các khoá truy cập cho phép người dùng chuyển nhanh đến một phần của trang. Để điều hướng đúng cách, mỗi khoá truy cập phải là duy nhất. [Tìm hiểu thêm về khoá truy cập](https://dequeuniversity.com/rules/axe/4.9/accesskeys)."
4
4
  },
5
5
  "core/audits/accessibility/accesskeys.js | failureTitle": {
6
6
  "message": "Các giá trị của `[accesskey]` không phải là duy nhất"
@@ -9,7 +9,7 @@
9
9
  "message": "Các giá trị của `[accesskey]` là duy nhất"
10
10
  },
11
11
  "core/audits/accessibility/aria-allowed-attr.js | description": {
12
- "message": "Mỗi `role` của Ứng dụng Internet phong phú dễ dùng (ARIA) hỗ trợ một tập hợp con cụ thể các thuộc tính `aria-*`. Nếu không trùng khớp, các thuộc tính `aria-*` sẽ bị vô hiệu. [Tìm hiểu cách khớp các thuộc tính của Ứng dụng Internet phong phú dễ dùng (ARIA) với vai trò của những thuộc tính này](https://dequeuniversity.com/rules/axe/4.8/aria-allowed-attr)."
12
+ "message": "Mỗi `role` của Ứng dụng Internet phong phú dễ dùng (ARIA) hỗ trợ một tập hợp con cụ thể các thuộc tính `aria-*`. Nếu không trùng khớp, các thuộc tính `aria-*` sẽ bị vô hiệu. [Tìm hiểu cách khớp các thuộc tính của Ứng dụng Internet phong phú dễ dùng (ARIA) với vai trò của những thuộc tính này](https://dequeuniversity.com/rules/axe/4.9/aria-allowed-attr)."
13
13
  },
14
14
  "core/audits/accessibility/aria-allowed-attr.js | failureTitle": {
15
15
  "message": "Các thuộc tính `[aria-*]` không khớp với vai trò tương ứng"
@@ -18,7 +18,7 @@
18
18
  "message": "Các thuộc tính `[aria-*]` khớp với vai trò tương ứng"
19
19
  },
20
20
  "core/audits/accessibility/aria-allowed-role.js | description": {
21
- "message": "`role` ARIA cho phép công nghệ hỗ trợ biết vai trò của từng phần tử trên trang web. Nếu các giá trị `role` bị sai chính tả, là vai trò trừu tượng hoặc không phải giá trị ARIA `role` hiện có, thì mục đích của phần tử này sẽ không được thông báo cho người dùng công nghệ hỗ trợ. [Tìm hiểu thêm về các vai trò ARIA](https://dequeuniversity.com/rules/axe/4.8/aria-allowed-role)."
21
+ "message": "`role` ARIA cho phép công nghệ hỗ trợ biết vai trò của từng phần tử trên trang web. Nếu các giá trị `role` bị sai chính tả, là vai trò trừu tượng hoặc không phải giá trị ARIA `role` hiện có, thì mục đích của phần tử này sẽ không được thông báo cho người dùng công nghệ hỗ trợ. [Tìm hiểu thêm về các vai trò ARIA](https://dequeuniversity.com/rules/axe/4.9/aria-allowed-role)."
22
22
  },
23
23
  "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
24
24
  "message": "Giá trị được chỉ định cho `role=\"\"` không phải là vai trò ARIA hợp lệ."
@@ -27,7 +27,7 @@
27
27
  "message": "Giá trị được chỉ định cho `role=\"\"` là vai trò ARIA hợp lệ."
28
28
  },
29
29
  "core/audits/accessibility/aria-command-name.js | description": {
30
- "message": "Khi một phần tử không có tên thành phần hỗ trợ tiếp cận, trình đọc màn hình sẽ gọi phần tử đó bằng một tên gọi chung, dẫn đến việc người dùng trình đọc màn hình không sử dụng được phần tử này. [Tìm hiểu cách giúp các phần tử lệnh dễ tiếp cận hơn](https://dequeuniversity.com/rules/axe/4.8/aria-command-name)."
30
+ "message": "Khi một phần tử không có tên thành phần hỗ trợ tiếp cận, trình đọc màn hình sẽ gọi phần tử đó bằng một tên gọi chung, dẫn đến việc người dùng trình đọc màn hình không sử dụng được phần tử này. [Tìm hiểu cách giúp các phần tử lệnh dễ tiếp cận hơn](https://dequeuniversity.com/rules/axe/4.9/aria-command-name)."
31
31
  },
32
32
  "core/audits/accessibility/aria-command-name.js | failureTitle": {
33
33
  "message": "Các phần tử `button`, `link` và `menuitem` không có tên dễ đọc."
@@ -36,7 +36,7 @@
36
36
  "message": "Các phần tử `button`, `link` và `menuitem` có tên dễ đọc"
37
37
  },
38
38
  "core/audits/accessibility/aria-dialog-name.js | description": {
39
- "message": "Các phần tử hộp thoại của ARIA không có tên thành phần hỗ trợ tiếp cận có thể khiến người dùng trình đọc màn hình không phân biệt được mục đích của các phần tử này. [Tìm hiểu cách giúp các phần tử hộp thoại của ARIA dễ tiếp cận hơn](https://dequeuniversity.com/rules/axe/4.8/aria-dialog-name)."
39
+ "message": "Các phần tử hộp thoại của ARIA không có tên thành phần hỗ trợ tiếp cận có thể khiến người dùng trình đọc màn hình không phân biệt được mục đích của các phần tử này. [Tìm hiểu cách giúp các phần tử hộp thoại của ARIA dễ tiếp cận hơn](https://dequeuniversity.com/rules/axe/4.9/aria-dialog-name)."
40
40
  },
41
41
  "core/audits/accessibility/aria-dialog-name.js | failureTitle": {
42
42
  "message": "Các phần tử có `role=\"dialog\"` hoặc `role=\"alertdialog\"` không có tên thành phần hỗ trợ tiếp cận."
@@ -45,7 +45,7 @@
45
45
  "message": "Các phần tử có `role=\"dialog\"` hoặc `role=\"alertdialog\"` có tên thành phần hỗ trợ tiếp cận."
46
46
  },
47
47
  "core/audits/accessibility/aria-hidden-body.js | description": {
48
- "message": "Các công nghệ hỗ trợ, chẳng hạn như trình đọc màn hình, sẽ hoạt động không nhất quán khi đặt `aria-hidden=\"true\"` trên tài liệu `<body>`. [Tìm hiểu ảnh hưởng của `aria-hidden` đối với phần nội dung của tài liệu](https://dequeuniversity.com/rules/axe/4.8/aria-hidden-body)."
48
+ "message": "Các công nghệ hỗ trợ, chẳng hạn như trình đọc màn hình, sẽ hoạt động không nhất quán khi đặt `aria-hidden=\"true\"` trên tài liệu `<body>`. [Tìm hiểu ảnh hưởng của `aria-hidden` đối với phần nội dung của tài liệu](https://dequeuniversity.com/rules/axe/4.9/aria-hidden-body)."
49
49
  },
50
50
  "core/audits/accessibility/aria-hidden-body.js | failureTitle": {
51
51
  "message": "Hiện có `[aria-hidden=\"true\"]` trên tài liệu `<body>`"
@@ -54,7 +54,7 @@
54
54
  "message": "Hiện không có `[aria-hidden=\"true\"]` trên tài liệu `<body>`"
55
55
  },
56
56
  "core/audits/accessibility/aria-hidden-focus.js | description": {
57
- "message": "Các phần tử theo thứ tự giảm dần có thể lấy tiêu điểm bên trong một phần tử `[aria-hidden=\"true\"]` sẽ giúp ngăn người dùng công nghệ hỗ trợ, chẳng hạn như trình đọc màn hình, tiếp cận với các phần tử tương tác đó. [Tìm hiểu ảnh hưởng của `aria-hidden` đối với các phần tử có thể lấy tiêu điểm](https://dequeuniversity.com/rules/axe/4.8/aria-hidden-focus)."
57
+ "message": "Các phần tử theo thứ tự giảm dần có thể lấy tiêu điểm bên trong một phần tử `[aria-hidden=\"true\"]` sẽ giúp ngăn người dùng công nghệ hỗ trợ, chẳng hạn như trình đọc màn hình, tiếp cận với các phần tử tương tác đó. [Tìm hiểu ảnh hưởng của `aria-hidden` đối với các phần tử có thể lấy tiêu điểm](https://dequeuniversity.com/rules/axe/4.9/aria-hidden-focus)."
58
58
  },
59
59
  "core/audits/accessibility/aria-hidden-focus.js | failureTitle": {
60
60
  "message": "Các phần tử `[aria-hidden=\"true\"]` có chứa các phần tử theo thứ tự giảm dần có thể lấy tiêu điểm"
@@ -63,7 +63,7 @@
63
63
  "message": "Các phần tử `[aria-hidden=\"true\"]` không chứa các phần tử theo thứ tự giảm dần có thể lấy tiêu điểm"
64
64
  },
65
65
  "core/audits/accessibility/aria-input-field-name.js | description": {
66
- "message": "Khi một trường nhập dữ liệu không có tên thành phần hỗ trợ tiếp cận, thì trình đọc màn hình sẽ gọi trường đó bằng tên gọi chung, khiến người dùng trình đọc màn hình không dùng được trường này. [Tìm hiểu thêm về nhãn của trường nhập dữ liệu](https://dequeuniversity.com/rules/axe/4.8/aria-input-field-name)."
66
+ "message": "Khi một trường nhập dữ liệu không có tên thành phần hỗ trợ tiếp cận, thì trình đọc màn hình sẽ gọi trường đó bằng tên gọi chung, khiến người dùng trình đọc màn hình không dùng được trường này. [Tìm hiểu thêm về nhãn của trường nhập dữ liệu](https://dequeuniversity.com/rules/axe/4.9/aria-input-field-name)."
67
67
  },
68
68
  "core/audits/accessibility/aria-input-field-name.js | failureTitle": {
69
69
  "message": "Tên các trường nhập của ARIA ở trạng thái không thể tiếp cận"
@@ -72,7 +72,7 @@
72
72
  "message": "Tên các trường nhập của ARIA ở trạng thái có thể tiếp cận"
73
73
  },
74
74
  "core/audits/accessibility/aria-meter-name.js | description": {
75
- "message": "Khi một phần tử thước đo không có tên thành phần hỗ trợ tiếp cận, trình đọc màn hình sẽ gọi phần tử đó bằng một tên gọi chung, dẫn đến việc người dùng trình đọc màn hình không sử dụng được phần tử này. [Tìm hiểu cách đặt tên các phần tử `meter`](https://dequeuniversity.com/rules/axe/4.8/aria-meter-name)."
75
+ "message": "Khi một phần tử thước đo không có tên thành phần hỗ trợ tiếp cận, trình đọc màn hình sẽ gọi phần tử đó bằng một tên gọi chung, dẫn đến việc người dùng trình đọc màn hình không sử dụng được phần tử này. [Tìm hiểu cách đặt tên các phần tử `meter`](https://dequeuniversity.com/rules/axe/4.9/aria-meter-name)."
76
76
  },
77
77
  "core/audits/accessibility/aria-meter-name.js | failureTitle": {
78
78
  "message": "Các phần tử `meter` của ARIA không có tên dễ đọc."
@@ -81,7 +81,7 @@
81
81
  "message": "Các phần tử `meter` của ARIA có tên dễ đọc"
82
82
  },
83
83
  "core/audits/accessibility/aria-progressbar-name.js | description": {
84
- "message": "Khi một phần tử `progressbar` không có tên thành phần hỗ trợ tiếp cận, trình đọc màn hình sẽ gọi phần tử đó bằng một tên gọi chung, dẫn đến việc người dùng trình đọc màn hình không sử dụng được phần tử này. [Tìm hiểu cách gắn nhãn phần tử `progressbar`](https://dequeuniversity.com/rules/axe/4.8/aria-progressbar-name)."
84
+ "message": "Khi một phần tử `progressbar` không có tên thành phần hỗ trợ tiếp cận, trình đọc màn hình sẽ gọi phần tử đó bằng một tên gọi chung, dẫn đến việc người dùng trình đọc màn hình không sử dụng được phần tử này. [Tìm hiểu cách gắn nhãn phần tử `progressbar`](https://dequeuniversity.com/rules/axe/4.9/aria-progressbar-name)."
85
85
  },
86
86
  "core/audits/accessibility/aria-progressbar-name.js | failureTitle": {
87
87
  "message": "Các phần tử `progressbar` của ARIA không có tên dễ đọc."
@@ -90,7 +90,7 @@
90
90
  "message": "Các phần tử `progressbar` của ARIA có tên dễ đọc"
91
91
  },
92
92
  "core/audits/accessibility/aria-required-attr.js | description": {
93
- "message": "Một số vai trò ARIA có các thuộc tính bắt buộc mô tả trạng thái của phần tử cho trình đọc màn hình. [Tìm hiểu thêm về các vai trò và thuộc tính bắt buộc](https://dequeuniversity.com/rules/axe/4.8/aria-required-attr)."
93
+ "message": "Một số vai trò ARIA có các thuộc tính bắt buộc mô tả trạng thái của phần tử cho trình đọc màn hình. [Tìm hiểu thêm về các vai trò và thuộc tính bắt buộc](https://dequeuniversity.com/rules/axe/4.9/aria-required-attr)."
94
94
  },
95
95
  "core/audits/accessibility/aria-required-attr.js | failureTitle": {
96
96
  "message": "`[role]` không có tất cả các thuộc tính `[aria-*]` bắt buộc"
@@ -99,7 +99,7 @@
99
99
  "message": "`[role]` có tất cả các thuộc tính `[aria-*]` bắt buộc"
100
100
  },
101
101
  "core/audits/accessibility/aria-required-children.js | description": {
102
- "message": "Một số vai trò mẹ của Ứng dụng Internet phong phú dễ dùng (ARIA) phải chứa vai trò con cụ thể để thực hiện các chức năng hỗ trợ tiếp cận chủ định tương ứng. [Tìm hiểu thêm về các vai trò và phần tử con bắt buộc](https://dequeuniversity.com/rules/axe/4.8/aria-required-children)."
102
+ "message": "Một số vai trò mẹ của Ứng dụng Internet phong phú dễ dùng (ARIA) phải chứa vai trò con cụ thể để thực hiện các chức năng hỗ trợ tiếp cận chủ định tương ứng. [Tìm hiểu thêm về các vai trò và phần tử con bắt buộc](https://dequeuniversity.com/rules/axe/4.9/aria-required-children)."
103
103
  },
104
104
  "core/audits/accessibility/aria-required-children.js | failureTitle": {
105
105
  "message": "Các phần tử có `[role]` ARIA yêu cầu phần tử con phải chứa một `[role]` cụ thể hiện đang thiếu một số hoặc tất cả các phần tử con bắt buộc đó."
@@ -108,7 +108,7 @@
108
108
  "message": "Các phần tử có `[role]` ARIA yêu cầu phần tử con phải chứa một `[role]` cụ thể có tất cả các phần tử con bắt buộc."
109
109
  },
110
110
  "core/audits/accessibility/aria-required-parent.js | description": {
111
- "message": "Các vai trò mẹ cụ thể phải chứa một số vai trò con của Ứng dụng Internet phong phú dễ dùng (ARIA) để thực hiện đúng cách các chức năng hỗ trợ tiếp cận chủ định tương ứng. [Tìm hiểu thêm về các vai trò của Ứng dụng Internet phong phú dễ dùng (ARIA) và phần tử mẹ bắt buộc](https://dequeuniversity.com/rules/axe/4.8/aria-required-parent)."
111
+ "message": "Các vai trò mẹ cụ thể phải chứa một số vai trò con của Ứng dụng Internet phong phú dễ dùng (ARIA) để thực hiện đúng cách các chức năng hỗ trợ tiếp cận chủ định tương ứng. [Tìm hiểu thêm về các vai trò của Ứng dụng Internet phong phú dễ dùng (ARIA) và phần tử mẹ bắt buộc](https://dequeuniversity.com/rules/axe/4.9/aria-required-parent)."
112
112
  },
113
113
  "core/audits/accessibility/aria-required-parent.js | failureTitle": {
114
114
  "message": "`[role]` không có trong phần tử mẹ bắt buộc tương ứng"
@@ -117,7 +117,7 @@
117
117
  "message": "`[role]` có trong phần tử mẹ bắt buộc tương ứng"
118
118
  },
119
119
  "core/audits/accessibility/aria-roles.js | description": {
120
- "message": "Các vai trò của Ứng dụng Internet phong phú dễ dùng (ARIA) phải có giá trị hợp lệ để thực hiện những chức năng hỗ trợ tiếp cận chủ định tương ứng. [Tìm hiểu thêm về các vai trò của Ứng dụng Internet phong phú dễ dùng (ARIA)](https://dequeuniversity.com/rules/axe/4.8/aria-roles)."
120
+ "message": "Các vai trò của Ứng dụng Internet phong phú dễ dùng (ARIA) phải có giá trị hợp lệ để thực hiện những chức năng hỗ trợ tiếp cận chủ định tương ứng. [Tìm hiểu thêm về các vai trò của Ứng dụng Internet phong phú dễ dùng (ARIA)](https://dequeuniversity.com/rules/axe/4.9/aria-roles)."
121
121
  },
122
122
  "core/audits/accessibility/aria-roles.js | failureTitle": {
123
123
  "message": "Các giá trị của `[role]` là không hợp lệ"
@@ -126,7 +126,7 @@
126
126
  "message": "Các giá trị của `[role]` là hợp lệ"
127
127
  },
128
128
  "core/audits/accessibility/aria-text.js | description": {
129
- "message": "Nếu bạn thêm `role=text` quanh một nút văn bản được phân tách bằng thẻ đánh dấu, VoiceOver có thể coi nút đó là một cụm từ, nhưng con cháu có thể làm tâm điểm của phần tử này sẽ không được công bố. [Tìm hiểu thêm về thuộc tính `role=text`](https://dequeuniversity.com/rules/axe/4.8/aria-text)."
129
+ "message": "Nếu bạn thêm `role=text` quanh một nút văn bản được phân tách bằng thẻ đánh dấu, VoiceOver có thể coi nút đó là một cụm từ, nhưng con cháu có thể làm tâm điểm của phần tử này sẽ không được công bố. [Tìm hiểu thêm về thuộc tính `role=text`](https://dequeuniversity.com/rules/axe/4.9/aria-text)."
130
130
  },
131
131
  "core/audits/accessibility/aria-text.js | failureTitle": {
132
132
  "message": "Các phần tử có thuộc tính `role=text` có con cháu có thể làm tâm điểm."
@@ -135,7 +135,7 @@
135
135
  "message": "Các phần tử có thuộc tính `role=text` không có con cháu có thể làm tâm điểm."
136
136
  },
137
137
  "core/audits/accessibility/aria-toggle-field-name.js | description": {
138
- "message": "Khi một trường chuyển đổi không có tên thành phần hỗ trợ tiếp cận, thì trình đọc màn hình sẽ gọi trường đó bằng tên gọi chung, khiến người dùng trình đọc màn hình không dùng được trường này. [Tìm hiểu thêm về trường chuyển đổi](https://dequeuniversity.com/rules/axe/4.8/aria-toggle-field-name)."
138
+ "message": "Khi một trường chuyển đổi không có tên thành phần hỗ trợ tiếp cận, thì trình đọc màn hình sẽ gọi trường đó bằng tên gọi chung, khiến người dùng trình đọc màn hình không dùng được trường này. [Tìm hiểu thêm về trường chuyển đổi](https://dequeuniversity.com/rules/axe/4.9/aria-toggle-field-name)."
139
139
  },
140
140
  "core/audits/accessibility/aria-toggle-field-name.js | failureTitle": {
141
141
  "message": "Tên các trường chuyển đổi của ARIA ở trạng thái không thể tiếp cận"
@@ -144,7 +144,7 @@
144
144
  "message": "Tên các trường chuyển đổi của ARIA ở trạng thái có thể tiếp cận"
145
145
  },
146
146
  "core/audits/accessibility/aria-tooltip-name.js | description": {
147
- "message": "Khi một phần tử chú giải công cụ không có tên thành phần hỗ trợ tiếp cận, trình đọc màn hình sẽ gọi phần tử đó bằng một tên gọi chung, dẫn đến việc người dùng trình đọc màn hình không sử dụng được phần tử này. [Tìm hiểu cách đặt tên các phần tử `tooltip`](https://dequeuniversity.com/rules/axe/4.8/aria-tooltip-name)."
147
+ "message": "Khi một phần tử chú giải công cụ không có tên thành phần hỗ trợ tiếp cận, trình đọc màn hình sẽ gọi phần tử đó bằng một tên gọi chung, dẫn đến việc người dùng trình đọc màn hình không sử dụng được phần tử này. [Tìm hiểu cách đặt tên các phần tử `tooltip`](https://dequeuniversity.com/rules/axe/4.9/aria-tooltip-name)."
148
148
  },
149
149
  "core/audits/accessibility/aria-tooltip-name.js | failureTitle": {
150
150
  "message": "Các phần tử `tooltip` của ARIA không có tên dễ đọc."
@@ -153,7 +153,7 @@
153
153
  "message": "Các phần tử `tooltip` của ARIA có tên dễ đọc"
154
154
  },
155
155
  "core/audits/accessibility/aria-treeitem-name.js | description": {
156
- "message": "Khi một phần tử `treeitem` không có tên thành phần hỗ trợ tiếp cận, trình đọc màn hình sẽ gọi phần tử đó bằng một tên gọi chung, dẫn đến việc người dùng trình đọc màn hình không sử dụng được phần tử này. [Tìm hiểu thêm về cách gắn nhãn phần tử `treeitem`](https://dequeuniversity.com/rules/axe/4.8/aria-treeitem-name)."
156
+ "message": "Khi một phần tử `treeitem` không có tên thành phần hỗ trợ tiếp cận, trình đọc màn hình sẽ gọi phần tử đó bằng một tên gọi chung, dẫn đến việc người dùng trình đọc màn hình không sử dụng được phần tử này. [Tìm hiểu thêm về cách gắn nhãn phần tử `treeitem`](https://dequeuniversity.com/rules/axe/4.9/aria-treeitem-name)."
157
157
  },
158
158
  "core/audits/accessibility/aria-treeitem-name.js | failureTitle": {
159
159
  "message": "Các phần tử `treeitem` của ARIA không có tên dễ đọc."
@@ -162,7 +162,7 @@
162
162
  "message": "Các phần tử `treeitem` của ARIA có tên dễ đọc"
163
163
  },
164
164
  "core/audits/accessibility/aria-valid-attr-value.js | description": {
165
- "message": "Các công nghệ hỗ trợ, chẳng hạn như trình đọc màn hình, không thể diễn giải thuộc tính của Ứng dụng Internet phong phú dễ dùng (ARIA) có giá trị không hợp lệ. [Tìm hiểu thêm về giá trị hợp lệ cho thuộc tính của Ứng dụng Internet phong phú dễ dùng (ARIA)](https://dequeuniversity.com/rules/axe/4.8/aria-valid-attr-value)."
165
+ "message": "Các công nghệ hỗ trợ, chẳng hạn như trình đọc màn hình, không thể diễn giải thuộc tính của Ứng dụng Internet phong phú dễ dùng (ARIA) có giá trị không hợp lệ. [Tìm hiểu thêm về giá trị hợp lệ cho thuộc tính của Ứng dụng Internet phong phú dễ dùng (ARIA)](https://dequeuniversity.com/rules/axe/4.9/aria-valid-attr-value)."
166
166
  },
167
167
  "core/audits/accessibility/aria-valid-attr-value.js | failureTitle": {
168
168
  "message": "Giá trị của các thuộc tính `[aria-*]` là không hợp lệ"
@@ -171,7 +171,7 @@
171
171
  "message": "Các thuộc tính `[aria-*]` có giá trị hợp lệ"
172
172
  },
173
173
  "core/audits/accessibility/aria-valid-attr.js | description": {
174
- "message": "Các công nghệ hỗ trợ, chẳng hạn như trình đọc màn hình, không thể diễn giải các thuộc tính của Ứng dụng Internet phong phú dễ dùng (ARIA) có tên không hợp lệ. [Tìm hiểu thêm về các thuộc tính hợp lệ của Ứng dụng Internet phong phú dễ dùng (ARIA)](https://dequeuniversity.com/rules/axe/4.8/aria-valid-attr)."
174
+ "message": "Các công nghệ hỗ trợ, chẳng hạn như trình đọc màn hình, không thể diễn giải các thuộc tính của Ứng dụng Internet phong phú dễ dùng (ARIA) có tên không hợp lệ. [Tìm hiểu thêm về các thuộc tính hợp lệ của Ứng dụng Internet phong phú dễ dùng (ARIA)](https://dequeuniversity.com/rules/axe/4.9/aria-valid-attr)."
175
175
  },
176
176
  "core/audits/accessibility/aria-valid-attr.js | failureTitle": {
177
177
  "message": "Các thuộc tính `[aria-*]` là không hợp lệ hoặc bị sai chính tả"
@@ -183,7 +183,7 @@
183
183
  "message": "Các phần tử không đạt"
184
184
  },
185
185
  "core/audits/accessibility/button-name.js | description": {
186
- "message": "Khi một nút không có tên thành phần hỗ trợ tiếp cận, trình đọc màn hình sẽ thông báo đó là \"nút\", khiến người dùng trình đọc màn hình không sử dụng được nút này. [Tìm hiểu cách giúp các nút dễ tiếp cận hơn](https://dequeuniversity.com/rules/axe/4.8/button-name)."
186
+ "message": "Khi một nút không có tên thành phần hỗ trợ tiếp cận, trình đọc màn hình sẽ thông báo đó là \"nút\", khiến người dùng trình đọc màn hình không sử dụng được nút này. [Tìm hiểu cách giúp các nút dễ tiếp cận hơn](https://dequeuniversity.com/rules/axe/4.9/button-name)."
187
187
  },
188
188
  "core/audits/accessibility/button-name.js | failureTitle": {
189
189
  "message": "Các nút không có tên có thể tiếp cận được"
@@ -192,7 +192,7 @@
192
192
  "message": "Các nút có tên tiếp cận được"
193
193
  },
194
194
  "core/audits/accessibility/bypass.js | description": {
195
- "message": "Bằng việc thêm các cách bỏ qua nội dung lặp lại, người dùng bàn phím có thể khám phá trang một cách hiệu quả hơn. [Tìm hiểu thêm về cách tránh bị chặn](https://dequeuniversity.com/rules/axe/4.8/bypass)."
195
+ "message": "Bằng việc thêm các cách bỏ qua nội dung lặp lại, người dùng bàn phím có thể khám phá trang một cách hiệu quả hơn. [Tìm hiểu thêm về cách tránh bị chặn](https://dequeuniversity.com/rules/axe/4.9/bypass)."
196
196
  },
197
197
  "core/audits/accessibility/bypass.js | failureTitle": {
198
198
  "message": "Trang này không chứa tiêu đề, đường liên kết bỏ qua hoặc vùng mốc"
@@ -201,7 +201,7 @@
201
201
  "message": "Trang này chứa tiêu đề, phần tử liên kết bỏ qua hoặc vùng mốc"
202
202
  },
203
203
  "core/audits/accessibility/color-contrast.js | description": {
204
- "message": "Nhiều người dùng gặp khó khăn khi đọc hoặc không thể đọc được văn bản có độ tương phản thấp. [Tìm hiểu cách cung cấp độ tương phản màu vừa đủ](https://dequeuniversity.com/rules/axe/4.8/color-contrast)."
204
+ "message": "Nhiều người dùng gặp khó khăn khi đọc hoặc không thể đọc được văn bản có độ tương phản thấp. [Tìm hiểu cách cung cấp độ tương phản màu vừa đủ](https://dequeuniversity.com/rules/axe/4.9/color-contrast)."
205
205
  },
206
206
  "core/audits/accessibility/color-contrast.js | failureTitle": {
207
207
  "message": "Màu nền trước và nền sau không có đủ tỷ lệ tương phản."
@@ -210,7 +210,7 @@
210
210
  "message": "Màu nền trước và nền sau có đủ tỷ lệ tương phản"
211
211
  },
212
212
  "core/audits/accessibility/definition-list.js | description": {
213
- "message": "Khi danh sách định nghĩa không được đánh dấu đúng cách, thì trình đọc màn hình có thể tạo ra thông báo gây nhầm lẫn hoặc không chính xác. [Tìm hiểu cách định cấu trúc danh sách định nghĩa đúng cách](https://dequeuniversity.com/rules/axe/4.8/definition-list)."
213
+ "message": "Khi danh sách định nghĩa không được đánh dấu đúng cách, thì trình đọc màn hình có thể tạo ra thông báo gây nhầm lẫn hoặc không chính xác. [Tìm hiểu cách định cấu trúc danh sách định nghĩa đúng cách](https://dequeuniversity.com/rules/axe/4.9/definition-list)."
214
214
  },
215
215
  "core/audits/accessibility/definition-list.js | failureTitle": {
216
216
  "message": "`<dl>` không chỉ chứa các nhóm `<dt>` và `<dd>` được sắp xếp đúng cách, các phần tử `<script>`, `<template>` hoặc `<div>`."
@@ -219,7 +219,7 @@
219
219
  "message": "`<dl>` chỉ chứa các nhóm `<dt>` và `<dd>` được sắp xếp đúng cách, các phần tử `<script>`, `<template>` hoặc `<div>`."
220
220
  },
221
221
  "core/audits/accessibility/dlitem.js | description": {
222
- "message": "Các mục trong danh sách định nghĩa (`<dt>` và `<dd>`) phải được đưa vào một phần tử `<dl>` mẹ để đảm bảo rằng trình đọc màn hình có thể thông báo đúng cách các mục này. [Tìm hiểu cách định cấu trúc danh sách định nghĩa đúng cách](https://dequeuniversity.com/rules/axe/4.8/dlitem)."
222
+ "message": "Các mục trong danh sách định nghĩa (`<dt>` và `<dd>`) phải được đưa vào một phần tử `<dl>` mẹ để đảm bảo rằng trình đọc màn hình có thể thông báo đúng cách các mục này. [Tìm hiểu cách định cấu trúc danh sách định nghĩa đúng cách](https://dequeuniversity.com/rules/axe/4.9/dlitem)."
223
223
  },
224
224
  "core/audits/accessibility/dlitem.js | failureTitle": {
225
225
  "message": "Các phần tử `<dl>` không bao gồm những mục trong danh sách định nghĩa"
@@ -228,7 +228,7 @@
228
228
  "message": "Các phần tử `<dl>` chứa mục trong danh sách định nghĩa"
229
229
  },
230
230
  "core/audits/accessibility/document-title.js | description": {
231
- "message": "Tiêu đề giúp người dùng trình đọc màn hình nắm được thông tin tổng quan về trang và giúp người dùng công cụ tìm kiếm chủ yếu dựa vào tiêu đề này xác định xem một trang có liên quan đến nội dung tìm kiếm của họ hay không. [Tìm hiểu thêm về tiêu đề tài liệu](https://dequeuniversity.com/rules/axe/4.8/document-title)."
231
+ "message": "Tiêu đề giúp người dùng trình đọc màn hình nắm được thông tin tổng quan về trang và giúp người dùng công cụ tìm kiếm chủ yếu dựa vào tiêu đề này xác định xem một trang có liên quan đến nội dung tìm kiếm của họ hay không. [Tìm hiểu thêm về tiêu đề tài liệu](https://dequeuniversity.com/rules/axe/4.9/document-title)."
232
232
  },
233
233
  "core/audits/accessibility/document-title.js | failureTitle": {
234
234
  "message": "Tài liệu không có phần tử `<title>`"
@@ -236,17 +236,8 @@
236
236
  "core/audits/accessibility/document-title.js | title": {
237
237
  "message": "Tài liệu có phần tử `<title>`"
238
238
  },
239
- "core/audits/accessibility/duplicate-id-active.js | description": {
240
- "message": "Để có thể hiển thị với các công nghệ hỗ trợ, `id` của các phần tử có thể lấy tiêu điểm không được trùng nhau. [Tìm hiểu cách khắc phục các `id` trùng lặp](https://dequeuniversity.com/rules/axe/4.8/duplicate-id-active)."
241
- },
242
- "core/audits/accessibility/duplicate-id-active.js | failureTitle": {
243
- "message": "Các thuộc tính `[id]` trên những phần tử có thể lấy tiêu điểm đang hoạt động bị trùng nhau"
244
- },
245
- "core/audits/accessibility/duplicate-id-active.js | title": {
246
- "message": "Các thuộc tính `[id]` trên những phần tử có thể lấy tiêu điểm đang hoạt động là duy nhất"
247
- },
248
239
  "core/audits/accessibility/duplicate-id-aria.js | description": {
249
- "message": "Để các công nghệ hỗ trợ không bỏ qua các phiên bản khác, giá trị mã nhận dạng của Ứng dụng Internet phong phú dễ dùng (ARIA) không được trùng nhau. [Tìm hiểu cách khắc phục mã nhận dạng trùng lặp của Ứng dụng Internet phong phú dễ dùng (ARIA)](https://dequeuniversity.com/rules/axe/4.8/duplicate-id-aria)."
240
+ "message": "Để các công nghệ hỗ trợ không bỏ qua các phiên bản khác, giá trị mã nhận dạng của Ứng dụng Internet phong phú dễ dùng (ARIA) không được trùng nhau. [Tìm hiểu cách khắc phục mã nhận dạng trùng lặp của Ứng dụng Internet phong phú dễ dùng (ARIA)](https://dequeuniversity.com/rules/axe/4.9/duplicate-id-aria)."
250
241
  },
251
242
  "core/audits/accessibility/duplicate-id-aria.js | failureTitle": {
252
243
  "message": "Mã nhận dạng của ARIA bị trùng lặp"
@@ -255,7 +246,7 @@
255
246
  "message": "Mã nhận dạng của Ứng dụng Internet phong phú dễ dùng (ARIA) là duy nhất"
256
247
  },
257
248
  "core/audits/accessibility/empty-heading.js | description": {
258
- "message": "Tiêu đề không có nội dung hoặc có văn bản khó đọc sẽ khiến người dùng trình đọc màn hình không thể truy cập thông tin trên cấu trúc của trang. [Tìm hiểu thêm về tiêu đề](https://dequeuniversity.com/rules/axe/4.8/empty-heading)."
249
+ "message": "Tiêu đề không có nội dung hoặc có văn bản khó đọc sẽ khiến người dùng trình đọc màn hình không thể truy cập thông tin trên cấu trúc của trang. [Tìm hiểu thêm về tiêu đề](https://dequeuniversity.com/rules/axe/4.9/empty-heading)."
259
250
  },
260
251
  "core/audits/accessibility/empty-heading.js | failureTitle": {
261
252
  "message": "Phần tử tiêu đề không chứa nội dung."
@@ -264,7 +255,7 @@
264
255
  "message": "Tất cả phần tử tiêu đề đều chứa nội dung."
265
256
  },
266
257
  "core/audits/accessibility/form-field-multiple-labels.js | description": {
267
- "message": "Các công nghệ hỗ trợ, chẳng hạn như trình đọc màn hình, sử dụng nhãn đầu tiên, nhãn cuối cùng hoặc tất cả các nhãn có thể thông báo nhầm các trường biểu mẫu có nhiều nhãn. [Tìm hiểu cách sử dụng nhãn của biểu mẫu](https://dequeuniversity.com/rules/axe/4.8/form-field-multiple-labels)."
258
+ "message": "Các công nghệ hỗ trợ, chẳng hạn như trình đọc màn hình, sử dụng nhãn đầu tiên, nhãn cuối cùng hoặc tất cả các nhãn có thể thông báo nhầm các trường biểu mẫu có nhiều nhãn. [Tìm hiểu cách sử dụng nhãn của biểu mẫu](https://dequeuniversity.com/rules/axe/4.9/form-field-multiple-labels)."
268
259
  },
269
260
  "core/audits/accessibility/form-field-multiple-labels.js | failureTitle": {
270
261
  "message": "Các trường biểu mẫu có nhiều nhãn"
@@ -273,7 +264,7 @@
273
264
  "message": "Không có trường biểu mẫu nào có nhiều nhãn"
274
265
  },
275
266
  "core/audits/accessibility/frame-title.js | description": {
276
- "message": "Người dùng trình đọc màn hình dựa vào tiêu đề khung để mô tả nội dung của khung. [Tìm hiểu thêm về tiêu đề khung](https://dequeuniversity.com/rules/axe/4.8/frame-title)."
267
+ "message": "Người dùng trình đọc màn hình dựa vào tiêu đề khung để mô tả nội dung của khung. [Tìm hiểu thêm về tiêu đề khung](https://dequeuniversity.com/rules/axe/4.9/frame-title)."
277
268
  },
278
269
  "core/audits/accessibility/frame-title.js | failureTitle": {
279
270
  "message": "Phần tử `<frame>` hoặc `<iframe>` không có tiêu đề"
@@ -282,7 +273,7 @@
282
273
  "message": "Các phần tử `<frame>` hoặc `<iframe>` có tiêu đề"
283
274
  },
284
275
  "core/audits/accessibility/heading-order.js | description": {
285
- "message": "Nhờ cách thức sắp xếp tiêu đề sao cho không bỏ qua các cấp độ thể hiện cấu trúc ngữ nghĩa của trang, người dùng dễ dàng hiểu được nội dung và thực hiện thao tác bằng công nghệ hỗ trợ hơn. [Tìm hiểu thêm về trình tự tiêu đề](https://dequeuniversity.com/rules/axe/4.8/heading-order)."
276
+ "message": "Nhờ cách thức sắp xếp tiêu đề sao cho không bỏ qua các cấp độ thể hiện cấu trúc ngữ nghĩa của trang, người dùng dễ dàng hiểu được nội dung và thực hiện thao tác bằng công nghệ hỗ trợ hơn. [Tìm hiểu thêm về trình tự tiêu đề](https://dequeuniversity.com/rules/axe/4.9/heading-order)."
286
277
  },
287
278
  "core/audits/accessibility/heading-order.js | failureTitle": {
288
279
  "message": "Các phần tử tiêu đề không tuân theo trình tự giảm dần"
@@ -291,7 +282,7 @@
291
282
  "message": "Các phần tử tiêu đề xuất hiện theo trình tự giảm dần"
292
283
  },
293
284
  "core/audits/accessibility/html-has-lang.js | description": {
294
- "message": "Nếu một trang chưa chỉ định thuộc tính `lang`, thì trình đọc màn hình sẽ xem như trang đó đang hiển thị bằng ngôn ngữ mặc định mà người dùng chọn khi thiết lập trình đọc màn hình. Nếu trên thực tế, trang đó không hiển thị bằng ngôn ngữ mặc định, thì trình đọc màn hình có thể không thông báo văn bản của trang đó một cách chính xác. [Tìm hiểu thêm về thuộc tính `lang`](https://dequeuniversity.com/rules/axe/4.8/html-has-lang)."
285
+ "message": "Nếu một trang chưa chỉ định thuộc tính `lang`, thì trình đọc màn hình sẽ xem như trang đó đang hiển thị bằng ngôn ngữ mặc định mà người dùng chọn khi thiết lập trình đọc màn hình. Nếu trên thực tế, trang đó không hiển thị bằng ngôn ngữ mặc định, thì trình đọc màn hình có thể không thông báo văn bản của trang đó một cách chính xác. [Tìm hiểu thêm về thuộc tính `lang`](https://dequeuniversity.com/rules/axe/4.9/html-has-lang)."
295
286
  },
296
287
  "core/audits/accessibility/html-has-lang.js | failureTitle": {
297
288
  "message": "Phần tử `<html>` chưa có thuộc tính `[lang]`"
@@ -300,7 +291,7 @@
300
291
  "message": "Phần tử `<html>` có thuộc tính `[lang]`"
301
292
  },
302
293
  "core/audits/accessibility/html-lang-valid.js | description": {
303
- "message": "Việc chỉ định [ngôn ngữ BCP 47](https://www.w3.org/International/questions/qa-choosing-language-tags#question) hợp lệ sẽ giúp trình đọc màn hình thông báo văn bản đúng cách. [Tìm hiểu cách sử dụng thuộc tính `lang`](https://dequeuniversity.com/rules/axe/4.8/html-lang-valid)."
294
+ "message": "Việc chỉ định [ngôn ngữ BCP 47](https://www.w3.org/International/questions/qa-choosing-language-tags#question) hợp lệ sẽ giúp trình đọc màn hình thông báo văn bản đúng cách. [Tìm hiểu cách sử dụng thuộc tính `lang`](https://dequeuniversity.com/rules/axe/4.9/html-lang-valid)."
304
295
  },
305
296
  "core/audits/accessibility/html-lang-valid.js | failureTitle": {
306
297
  "message": "Thuộc tính `[lang]` của phần tử `<html>` không có giá trị hợp lệ."
@@ -309,7 +300,7 @@
309
300
  "message": "Thuộc tính `[lang]` của phần tử `<html>` có giá trị hợp lệ"
310
301
  },
311
302
  "core/audits/accessibility/html-xml-lang-mismatch.js | description": {
312
- "message": "Nếu trang web không chỉ định một ngôn ngữ nhất quán thì trình đọc màn hình có thể không thông báo chính xác văn bản trong trang. [Tìm hiểu thêm về thuộc tính `lang`](https://dequeuniversity.com/rules/axe/4.8/html-xml-lang-mismatch)."
303
+ "message": "Nếu trang web không chỉ định một ngôn ngữ nhất quán thì trình đọc màn hình có thể không thông báo chính xác văn bản trong trang. [Tìm hiểu thêm về thuộc tính `lang`](https://dequeuniversity.com/rules/axe/4.9/html-xml-lang-mismatch)."
313
304
  },
314
305
  "core/audits/accessibility/html-xml-lang-mismatch.js | failureTitle": {
315
306
  "message": "Phần tử `<html>` không sở hữu thuộc tính `[xml:lang]` có cùng ngôn ngữ cơ sở như thuộc tính `[lang]`."
@@ -318,7 +309,7 @@
318
309
  "message": "Phần tử `<html>` sở hữu thuộc tính `[xml:lang]` có cùng ngôn ngữ cơ sở như thuộc tính `[lang]`."
319
310
  },
320
311
  "core/audits/accessibility/identical-links-same-purpose.js | description": {
321
- "message": "Các đường liên kết có cùng một đích đến phải có cùng nội dung mô tả để giúp người dùng hiểu mục đích của đường liên kết và quyết định có nên truy cập hay không. [Tìm hiểu thêm về các đường liên kết giống hệt nhau](https://dequeuniversity.com/rules/axe/4.8/identical-links-same-purpose)."
312
+ "message": "Các đường liên kết có cùng một đích đến phải có cùng nội dung mô tả để giúp người dùng hiểu mục đích của đường liên kết và quyết định có nên truy cập hay không. [Tìm hiểu thêm về các đường liên kết giống hệt nhau](https://dequeuniversity.com/rules/axe/4.9/identical-links-same-purpose)."
322
313
  },
323
314
  "core/audits/accessibility/identical-links-same-purpose.js | failureTitle": {
324
315
  "message": "Các đường liên kết giống hệt nhau không có cùng mục đích."
@@ -327,7 +318,7 @@
327
318
  "message": "Các đường liên kết giống hệt nhau có cùng mục đích."
328
319
  },
329
320
  "core/audits/accessibility/image-alt.js | description": {
330
- "message": "Các phần tử thông tin nên là đoạn văn bản thay thế ngắn, có tính mô tả. Có thể bỏ qua phần tử trang trí bằng một thuộc tính alt trống. [Tìm hiểu thêm về thuộc tính `alt`](https://dequeuniversity.com/rules/axe/4.8/image-alt)."
321
+ "message": "Các phần tử thông tin nên là đoạn văn bản thay thế ngắn, có tính mô tả. Có thể bỏ qua phần tử trang trí bằng một thuộc tính alt trống. [Tìm hiểu thêm về thuộc tính `alt`](https://dequeuniversity.com/rules/axe/4.9/image-alt)."
331
322
  },
332
323
  "core/audits/accessibility/image-alt.js | failureTitle": {
333
324
  "message": "Phần tử hình ảnh không có thuộc tính `[alt]`"
@@ -336,7 +327,7 @@
336
327
  "message": "Các phần tử hình ảnh có thuộc tính `[alt]`"
337
328
  },
338
329
  "core/audits/accessibility/image-redundant-alt.js | description": {
339
- "message": "Các phần tử thông tin nên là đoạn văn bản thay thế ngắn, có tính mô tả. Văn bản thay thế giống hệt với văn bản bên cạnh đường liên kết hoặc hình ảnh có thể khiến người dùng trình đọc màn hình bối rối vì văn bản sẽ được đọc hai lần. [Tìm hiểu thêm về thuộc tính `alt`](https://dequeuniversity.com/rules/axe/4.8/image-redundant-alt)."
330
+ "message": "Các phần tử thông tin nên là đoạn văn bản thay thế ngắn, có tính mô tả. Văn bản thay thế giống hệt với văn bản bên cạnh đường liên kết hoặc hình ảnh có thể khiến người dùng trình đọc màn hình bối rối vì văn bản sẽ được đọc hai lần. [Tìm hiểu thêm về thuộc tính `alt`](https://dequeuniversity.com/rules/axe/4.9/image-redundant-alt)."
340
331
  },
341
332
  "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
342
333
  "message": "Các phần tử hình ảnh có thuộc tính `[alt]` là văn bản thừa."
@@ -345,7 +336,7 @@
345
336
  "message": "Các phần tử hình ảnh không có thuộc tính `[alt]` là văn bản thừa."
346
337
  },
347
338
  "core/audits/accessibility/input-button-name.js | description": {
348
- "message": "Bạn nên thêm văn bản rõ ràng và dễ đọc vào các nút nhập để giúp người dùng trình đọc màn hình hiểu mục đích của nút nhập. [Tìm hiểu thêm về các nút nhập](https://dequeuniversity.com/rules/axe/4.8/input-button-name)."
339
+ "message": "Bạn nên thêm văn bản rõ ràng và dễ đọc vào các nút nhập để giúp người dùng trình đọc màn hình hiểu mục đích của nút nhập. [Tìm hiểu thêm về các nút nhập](https://dequeuniversity.com/rules/axe/4.9/input-button-name)."
349
340
  },
350
341
  "core/audits/accessibility/input-button-name.js | failureTitle": {
351
342
  "message": "Các nút nhập không có văn bản rõ ràng."
@@ -354,7 +345,7 @@
354
345
  "message": "Các nút nhập có văn bản rõ ràng."
355
346
  },
356
347
  "core/audits/accessibility/input-image-alt.js | description": {
357
- "message": "Khi dùng một hình ảnh làm nút `<input>`, thì việc cung cấp văn bản thay thế có thể giúp người dùng trình đọc màn hình hiểu rõ mục đích của nút đó. [Tìm hiểu về văn bản thay thế hình ảnh đầu vào](https://dequeuniversity.com/rules/axe/4.8/input-image-alt)."
348
+ "message": "Khi dùng một hình ảnh làm nút `<input>`, thì việc cung cấp văn bản thay thế có thể giúp người dùng trình đọc màn hình hiểu rõ mục đích của nút đó. [Tìm hiểu về văn bản thay thế hình ảnh đầu vào](https://dequeuniversity.com/rules/axe/4.9/input-image-alt)."
358
349
  },
359
350
  "core/audits/accessibility/input-image-alt.js | failureTitle": {
360
351
  "message": "Các thành phần `<input type=\"image\">` không có văn bản `[alt]`"
@@ -363,7 +354,7 @@
363
354
  "message": "Các thành phần `<input type=\"image\">` có văn bản `[alt]`"
364
355
  },
365
356
  "core/audits/accessibility/label-content-name-mismatch.js | description": {
366
- "message": "Nhãn văn bản hiển thị không khớp với tên thành phần hỗ trợ tiếp cận có thể gây ra trải nghiệm khó hiểu đối với người dùng trình đọc màn hình. [Tìm hiểu thêm về tên thành phần hỗ trợ tiếp cận](https://dequeuniversity.com/rules/axe/4.8/label-content-name-mismatch)."
357
+ "message": "Nhãn văn bản hiển thị không khớp với tên thành phần hỗ trợ tiếp cận có thể gây ra trải nghiệm khó hiểu đối với người dùng trình đọc màn hình. [Tìm hiểu thêm về tên thành phần hỗ trợ tiếp cận](https://dequeuniversity.com/rules/axe/4.9/label-content-name-mismatch)."
367
358
  },
368
359
  "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
369
360
  "message": "Các phần tử gắn nhãn văn bản hiển thị không có tên thành phần hỗ trợ tiếp cận trùng khớp."
@@ -372,7 +363,7 @@
372
363
  "message": "Phần tử gắn nhãn văn bản hiển thị có tên thành phần hỗ trợ tiếp cận trùng khớp."
373
364
  },
374
365
  "core/audits/accessibility/label.js | description": {
375
- "message": "Các nhãn đảm bảo rằng những công nghệ hỗ trợ, chẳng hạn như trình đọc màn hình, thông báo các biện pháp kiểm soát biểu mẫu đúng cách. [Tìm hiểu thêm về nhãn phần tử biểu mẫu](https://dequeuniversity.com/rules/axe/4.8/label)."
366
+ "message": "Các nhãn đảm bảo rằng những công nghệ hỗ trợ, chẳng hạn như trình đọc màn hình, thông báo các biện pháp kiểm soát biểu mẫu đúng cách. [Tìm hiểu thêm về nhãn phần tử biểu mẫu](https://dequeuniversity.com/rules/axe/4.9/label)."
376
367
  },
377
368
  "core/audits/accessibility/label.js | failureTitle": {
378
369
  "message": "Các phần tử biểu mẫu không có nhãn liên kết"
@@ -381,7 +372,7 @@
381
372
  "message": "Các phần tử biểu mẫu có nhãn liên quan"
382
373
  },
383
374
  "core/audits/accessibility/landmark-one-main.js | description": {
384
- "message": "Điểm mốc chính giúp người dùng trình đọc màn hình dễ dàng thao tác trên trang web. [Tìm hiểu thêm về điểm mốc](https://dequeuniversity.com/rules/axe/4.8/landmark-one-main)."
375
+ "message": "Điểm mốc chính giúp người dùng trình đọc màn hình dễ dàng thao tác trên trang web. [Tìm hiểu thêm về điểm mốc](https://dequeuniversity.com/rules/axe/4.9/landmark-one-main)."
385
376
  },
386
377
  "core/audits/accessibility/landmark-one-main.js | failureTitle": {
387
378
  "message": "Tài liệu không có điểm mốc chính."
@@ -390,7 +381,7 @@
390
381
  "message": "Tài liệu có một điểm mốc chính."
391
382
  },
392
383
  "core/audits/accessibility/link-in-text-block.js | description": {
393
- "message": "Nhiều người dùng gặp khó khăn khi đọc hoặc không thể đọc được văn bản có độ tương phản thấp. Văn bản liên kết rõ ràng sẽ giúp người dùng có thị lực kém dễ đọc hơn. [Tìm hiểu cách giúp các đường liên kết dễ phân biệt](https://dequeuniversity.com/rules/axe/4.8/link-in-text-block)."
384
+ "message": "Nhiều người dùng gặp khó khăn khi đọc hoặc không thể đọc được văn bản có độ tương phản thấp. Văn bản liên kết rõ ràng sẽ giúp người dùng có thị lực kém dễ đọc hơn. [Tìm hiểu cách giúp các đường liên kết dễ phân biệt](https://dequeuniversity.com/rules/axe/4.9/link-in-text-block)."
394
385
  },
395
386
  "core/audits/accessibility/link-in-text-block.js | failureTitle": {
396
387
  "message": "Bạn cần dựa vào màu sắc để phân biệt các đường liên kết."
@@ -399,7 +390,7 @@
399
390
  "message": "Bạn có thể phân biệt được các đường liên kết mà không cần dựa vào màu sắc."
400
391
  },
401
392
  "core/audits/accessibility/link-name.js | description": {
402
- "message": "Văn bản liên kết (và văn bản thay thế cho hình ảnh, khi dùng làm phần tử liên kết) có thể thấy rõ, là duy nhất và có thể lấy tiêu điểm sẽ cải thiện trải nghiệm khám phá cho người dùng trình đọc màn hình. [Tìm hiểu cách giúp các phần tử liên kết trở nên dễ tiếp cận](https://dequeuniversity.com/rules/axe/4.8/link-name)."
393
+ "message": "Văn bản liên kết (và văn bản thay thế cho hình ảnh, khi dùng làm phần tử liên kết) có thể thấy rõ, là duy nhất và có thể lấy tiêu điểm sẽ cải thiện trải nghiệm khám phá cho người dùng trình đọc màn hình. [Tìm hiểu cách giúp các phần tử liên kết trở nên dễ tiếp cận](https://dequeuniversity.com/rules/axe/4.9/link-name)."
403
394
  },
404
395
  "core/audits/accessibility/link-name.js | failureTitle": {
405
396
  "message": "Các phần tử liên kết không có tên có thể nhận rõ"
@@ -408,7 +399,7 @@
408
399
  "message": "Các phần tử liên kết có tên có thể nhận rõ"
409
400
  },
410
401
  "core/audits/accessibility/list.js | description": {
411
- "message": "Các trình đọc màn hình có các cách riêng để thông báo danh sách. Khi danh sách có cấu trúc phù hợp, trình đọc màn hình sẽ thông báo về danh sách chính xác hơn. [Tìm hiểu thêm về cấu trúc phù hợp của danh sách](https://dequeuniversity.com/rules/axe/4.8/list)."
402
+ "message": "Các trình đọc màn hình có các cách riêng để thông báo danh sách. Khi danh sách có cấu trúc phù hợp, trình đọc màn hình sẽ thông báo về danh sách chính xác hơn. [Tìm hiểu thêm về cấu trúc phù hợp của danh sách](https://dequeuniversity.com/rules/axe/4.9/list)."
412
403
  },
413
404
  "core/audits/accessibility/list.js | failureTitle": {
414
405
  "message": "Danh sách không chỉ chứa các phần tử `<li>` và phần tử hỗ trợ tập lệnh (`<script>` và `<template>`)."
@@ -417,7 +408,7 @@
417
408
  "message": "Danh sách chỉ chứa các phần tử `<li>` và phần tử hỗ trợ tập lệnh (`<script>` và `<template>`)."
418
409
  },
419
410
  "core/audits/accessibility/listitem.js | description": {
420
- "message": "Trình đọc màn hình yêu cầu các mục danh sách (`<li>`) phải có trong một `<ul>` `<ol>` hoặc `<menu>` mẹ để được thông báo đúng cách. [Tìm hiểu thêm về cấu trúc phù hợp của danh sách](https://dequeuniversity.com/rules/axe/4.8/listitem)."
411
+ "message": "Trình đọc màn hình yêu cầu các mục danh sách (`<li>`) phải có trong một `<ul>` `<ol>` hoặc `<menu>` mẹ để được thông báo đúng cách. [Tìm hiểu thêm về cấu trúc phù hợp của danh sách](https://dequeuniversity.com/rules/axe/4.9/listitem)."
421
412
  },
422
413
  "core/audits/accessibility/listitem.js | failureTitle": {
423
414
  "message": "Các mục trong danh sách (`<li>`) không có trong phần tử `<ul>` `<ol>` hoặc `<menu>` mẹ."
@@ -426,7 +417,7 @@
426
417
  "message": "Các mục trong danh sách (`<li>`) có trong phần tử mẹ `<ul>`, `<ol>` hoặc `<menu>`"
427
418
  },
428
419
  "core/audits/accessibility/meta-refresh.js | description": {
429
- "message": "Người dùng không muốn một trang tự động làm mới và việc trang tự động làm mới sẽ chuyển tiêu điểm quay về đầu trang. Người dùng có thể cảm thấy khó chịu hoặc bị nhầm lẫn nếu gặp trường hợp này. [Tìm hiểu thêm về thẻ làm mới meta](https://dequeuniversity.com/rules/axe/4.8/meta-refresh)."
420
+ "message": "Người dùng không muốn một trang tự động làm mới và việc trang tự động làm mới sẽ chuyển tiêu điểm quay về đầu trang. Người dùng có thể cảm thấy khó chịu hoặc bị nhầm lẫn nếu gặp trường hợp này. [Tìm hiểu thêm về thẻ làm mới meta](https://dequeuniversity.com/rules/axe/4.9/meta-refresh)."
430
421
  },
431
422
  "core/audits/accessibility/meta-refresh.js | failureTitle": {
432
423
  "message": "Tài liệu này sử dụng `<meta http-equiv=\"refresh\">`"
@@ -435,7 +426,7 @@
435
426
  "message": "Tài liệu này không dùng `<meta http-equiv=\"refresh\">`"
436
427
  },
437
428
  "core/audits/accessibility/meta-viewport.js | description": {
438
- "message": "Việc tắt tính năng thu phóng sẽ gây trở ngại cho những người dùng có thị lực kém bị lệ thuộc vào chức năng phóng to màn hình để thấy rõ nội dung trang web. [Tìm hiểu thêm về thẻ meta cửa sổ xem](https://dequeuniversity.com/rules/axe/4.8/meta-viewport)."
429
+ "message": "Việc tắt tính năng thu phóng sẽ gây trở ngại cho những người dùng có thị lực kém bị lệ thuộc vào chức năng phóng to màn hình để thấy rõ nội dung trang web. [Tìm hiểu thêm về thẻ meta cửa sổ xem](https://dequeuniversity.com/rules/axe/4.9/meta-viewport)."
439
430
  },
440
431
  "core/audits/accessibility/meta-viewport.js | failureTitle": {
441
432
  "message": "`[user-scalable=\"no\"]` được dùng trong phần tử `<meta name=\"viewport\">` hoặc thuộc tính `[maximum-scale]` nhỏ hơn 5."
@@ -444,7 +435,7 @@
444
435
  "message": "`[user-scalable=\"no\"]` không được sử dụng trong phần tử `<meta name=\"viewport\">` và thuộc tính `[maximum-scale]` không nhỏ hơn 5."
445
436
  },
446
437
  "core/audits/accessibility/object-alt.js | description": {
447
- "message": "Trình đọc màn hình không dịch được nội dung không ở dạng văn bản. Bằng việc thêm văn bản thay thế vào các phần tử `<object>`, bạn có thể giúp trình đọc màn hình truyền đạt ý nghĩa cho người dùng. [Tìm hiểu thêm về văn bản thay thế cho `object` phần tử](https://dequeuniversity.com/rules/axe/4.8/object-alt)."
438
+ "message": "Trình đọc màn hình không dịch được nội dung không ở dạng văn bản. Bằng việc thêm văn bản thay thế vào các phần tử `<object>`, bạn có thể giúp trình đọc màn hình truyền đạt ý nghĩa cho người dùng. [Tìm hiểu thêm về văn bản thay thế cho `object` phần tử](https://dequeuniversity.com/rules/axe/4.9/object-alt)."
448
439
  },
449
440
  "core/audits/accessibility/object-alt.js | failureTitle": {
450
441
  "message": "Các thành phần `<object>` không có văn bản thay thế"
@@ -453,7 +444,7 @@
453
444
  "message": "Các thành phần `<object>` có văn bản thay thế"
454
445
  },
455
446
  "core/audits/accessibility/select-name.js | description": {
456
- "message": "Các phần tử biểu mẫu không có nhãn hữu ích có thể khiến người dùng trình đọc màn hình cảm thấy khó chịu. [Tìm hiểu thêm về phần tử `select`](https://dequeuniversity.com/rules/axe/4.8/select-name)."
447
+ "message": "Các phần tử biểu mẫu không có nhãn hữu ích có thể khiến người dùng trình đọc màn hình cảm thấy khó chịu. [Tìm hiểu thêm về phần tử `select`](https://dequeuniversity.com/rules/axe/4.9/select-name)."
457
448
  },
458
449
  "core/audits/accessibility/select-name.js | failureTitle": {
459
450
  "message": "Các phần tử lựa chọn không có phần tử nhãn đi kèm."
@@ -462,7 +453,7 @@
462
453
  "message": "Các phần tử lựa chọn có phần tử nhãn liên kết."
463
454
  },
464
455
  "core/audits/accessibility/skip-link.js | description": {
465
- "message": "Nếu có đường liên kết bỏ qua, người dùng có thể chuyển ngay đến nội dung chính để tiết kiệm thời gian. [Tìm hiểu thêm về đường liên kết bỏ qua](https://dequeuniversity.com/rules/axe/4.8/skip-link)."
456
+ "message": "Nếu có đường liên kết bỏ qua, người dùng có thể chuyển ngay đến nội dung chính để tiết kiệm thời gian. [Tìm hiểu thêm về đường liên kết bỏ qua](https://dequeuniversity.com/rules/axe/4.9/skip-link)."
466
457
  },
467
458
  "core/audits/accessibility/skip-link.js | failureTitle": {
468
459
  "message": "Đường liên kết bỏ qua không thể làm tâm điểm."
@@ -471,7 +462,7 @@
471
462
  "message": "Đường liên kết bỏ qua có thể làm tâm điểm."
472
463
  },
473
464
  "core/audits/accessibility/tabindex.js | description": {
474
- "message": "Giá trị lớn hơn 0 ngụ ý thứ tự điều hướng rõ ràng. Mặc dù hợp lệ về mặt kỹ thuật nhưng điều này thường tạo ra trải nghiệm khó chịu cho những người dùng bị lệ thuộc vào công nghệ hỗ trợ. [Tìm hiểu thêm về thuộc tính `tabindex`](https://dequeuniversity.com/rules/axe/4.8/tabindex)."
465
+ "message": "Giá trị lớn hơn 0 ngụ ý thứ tự điều hướng rõ ràng. Mặc dù hợp lệ về mặt kỹ thuật nhưng điều này thường tạo ra trải nghiệm khó chịu cho những người dùng bị lệ thuộc vào công nghệ hỗ trợ. [Tìm hiểu thêm về thuộc tính `tabindex`](https://dequeuniversity.com/rules/axe/4.9/tabindex)."
475
466
  },
476
467
  "core/audits/accessibility/tabindex.js | failureTitle": {
477
468
  "message": "Một số phần tử có giá trị `[tabindex]` lớn hơn 0"
@@ -480,7 +471,7 @@
480
471
  "message": "Không phần tử nào có giá trị `[tabindex]` lớn hơn 0"
481
472
  },
482
473
  "core/audits/accessibility/table-duplicate-name.js | description": {
483
- "message": "Thuộc tính tóm tắt phải mô tả cấu trúc bảng, còn `<caption>` phải có tiêu đề trên màn hình. Việc đánh dấu bảng chính xác giúp ích cho người dùng trình đọc màn hình. [Tìm hiểu thêm về tóm tắt và chú thích](https://dequeuniversity.com/rules/axe/4.8/table-duplicate-name)."
474
+ "message": "Thuộc tính tóm tắt phải mô tả cấu trúc bảng, còn `<caption>` phải có tiêu đề trên màn hình. Việc đánh dấu bảng chính xác giúp ích cho người dùng trình đọc màn hình. [Tìm hiểu thêm về tóm tắt và chú thích](https://dequeuniversity.com/rules/axe/4.9/table-duplicate-name)."
484
475
  },
485
476
  "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
486
477
  "message": "Các bảng có nội dung giống nhau trong thuộc tính tóm tắt và `<caption>.`"
@@ -489,7 +480,7 @@
489
480
  "message": "Các bảng có nội dung khác nhau trong thuộc tính tóm tắt và `<caption>`."
490
481
  },
491
482
  "core/audits/accessibility/table-fake-caption.js | description": {
492
- "message": "Trình đọc màn hình có các tính năng giúp người dùng dễ dàng sử dụng bảng hơn. Các bảng cần sử dụng phần tử chú thích thực tế thay vì các ô có thuộc tính `[colspan]` để người dùng trình đọc màn hình có trải nghiệm tốt hơn. [Tìm hiểu thêm về chú thích](https://dequeuniversity.com/rules/axe/4.8/table-fake-caption)."
483
+ "message": "Trình đọc màn hình có các tính năng giúp người dùng dễ dàng sử dụng bảng hơn. Các bảng cần sử dụng phần tử chú thích thực tế thay vì các ô có thuộc tính `[colspan]` để người dùng trình đọc màn hình có trải nghiệm tốt hơn. [Tìm hiểu thêm về chú thích](https://dequeuniversity.com/rules/axe/4.9/table-fake-caption)."
493
484
  },
494
485
  "core/audits/accessibility/table-fake-caption.js | failureTitle": {
495
486
  "message": "Bảng không sử dụng `<caption>` thay cho các ô có thuộc tính `[colspan]` để biểu thị chú thích."
@@ -498,7 +489,7 @@
498
489
  "message": "Bảng sử dụng `<caption>` thay vì các ô có thuộc tính `[colspan]` để biểu thị chú thích."
499
490
  },
500
491
  "core/audits/accessibility/target-size.js | description": {
501
- "message": "Đích chạm có kích thước và khoảng giãn cách phù hợp sẽ giúp người dùng kích hoạt mục tiêu nếu họ gặp khó khăn với việc chọn các thành phần điều khiển nhỏ. [Tìm hiểu thêm về đích chạm](https://dequeuniversity.com/rules/axe/4.8/target-size)."
492
+ "message": "Đích chạm có kích thước và khoảng giãn cách phù hợp sẽ giúp người dùng kích hoạt mục tiêu nếu họ gặp khó khăn với việc chọn các thành phần điều khiển nhỏ. [Tìm hiểu thêm về đích chạm](https://dequeuniversity.com/rules/axe/4.9/target-size)."
502
493
  },
503
494
  "core/audits/accessibility/target-size.js | failureTitle": {
504
495
  "message": "Đích chạm có kích thước hoặc khoảng giãn cách chưa phù hợp."
@@ -507,7 +498,7 @@
507
498
  "message": "Đích chạm có kích thước và khoảng giãn cách phù hợp."
508
499
  },
509
500
  "core/audits/accessibility/td-has-header.js | description": {
510
- "message": "Trình đọc màn hình có các tính năng giúp người dùng dễ dàng sử dụng bảng hơn. Các phần tử `<td>` trong bảng lớn (chiều rộng và chiều cao từ 3 ô trở lên) cần có tiêu đề bảng liên kết để người dùng trình đọc màn hình có trải nghiệm tốt hơn. [Tìm hiểu thêm về tiêu đề bảng](https://dequeuniversity.com/rules/axe/4.8/td-has-header)."
501
+ "message": "Trình đọc màn hình có các tính năng giúp người dùng dễ dàng sử dụng bảng hơn. Các phần tử `<td>` trong bảng lớn (chiều rộng và chiều cao từ 3 ô trở lên) cần có tiêu đề bảng liên kết để người dùng trình đọc màn hình có trải nghiệm tốt hơn. [Tìm hiểu thêm về tiêu đề bảng](https://dequeuniversity.com/rules/axe/4.9/td-has-header)."
511
502
  },
512
503
  "core/audits/accessibility/td-has-header.js | failureTitle": {
513
504
  "message": "Các phần tử `<td>` trong `<table>` lớn không có tiêu đề bảng."
@@ -516,7 +507,7 @@
516
507
  "message": "Các phần tử `<td>` trong `<table>` lớn có một hoặc nhiều tiêu đề bảng."
517
508
  },
518
509
  "core/audits/accessibility/td-headers-attr.js | description": {
519
- "message": "Trình đọc màn hình có các tính năng giúp người dùng dễ dàng sử dụng bảng hơn. Việc đảm bảo các ô `<td>` sử dụng thuộc tính `[headers]` chỉ tham chiếu các ô khác trong cùng bảng có thể cải thiện trải nghiệm của người dùng trình đọc màn hình. [Tìm hiểu thêm về thuộc tính `headers`](https://dequeuniversity.com/rules/axe/4.8/td-headers-attr)."
510
+ "message": "Trình đọc màn hình có các tính năng giúp người dùng dễ dàng sử dụng bảng hơn. Việc đảm bảo các ô `<td>` sử dụng thuộc tính `[headers]` chỉ tham chiếu các ô khác trong cùng bảng có thể cải thiện trải nghiệm của người dùng trình đọc màn hình. [Tìm hiểu thêm về thuộc tính `headers`](https://dequeuniversity.com/rules/axe/4.9/td-headers-attr)."
520
511
  },
521
512
  "core/audits/accessibility/td-headers-attr.js | failureTitle": {
522
513
  "message": "Các ô trong phần tử `<table>` sử dụng thuộc tính `[headers]` tham chiếu đến một phần tử `id` không tìm thấy trong cùng một bảng."
@@ -525,7 +516,7 @@
525
516
  "message": "Các ô trong phần tử `<table>` sử dụng thuộc tính `[headers]` tham chiếu đến các ô trong cùng một bảng."
526
517
  },
527
518
  "core/audits/accessibility/th-has-data-cells.js | description": {
528
- "message": "Trình đọc màn hình có các tính năng giúp người dùng dễ dàng sử dụng bảng hơn. Việc đảm bảo tiêu đề bảng luôn tham chiếu đến một nhóm ô nào đó có thể cải thiện trải nghiệm của người dùng trình đọc màn hình. [Tìm hiểu thêm về tiêu đề bảng](https://dequeuniversity.com/rules/axe/4.8/th-has-data-cells)."
519
+ "message": "Trình đọc màn hình có các tính năng giúp người dùng dễ dàng sử dụng bảng hơn. Việc đảm bảo tiêu đề bảng luôn tham chiếu đến một nhóm ô nào đó có thể cải thiện trải nghiệm của người dùng trình đọc màn hình. [Tìm hiểu thêm về tiêu đề bảng](https://dequeuniversity.com/rules/axe/4.9/th-has-data-cells)."
529
520
  },
530
521
  "core/audits/accessibility/th-has-data-cells.js | failureTitle": {
531
522
  "message": "Các phần tử `<th>` và phần tử có `[role=\"columnheader\"/\"rowheader\"]` không chứa các ô dữ liệu mà các phần tử đó mô tả."
@@ -534,7 +525,7 @@
534
525
  "message": "Các phần tử `<th>` và phần tử có `[role=\"columnheader\"/\"rowheader\"]` chứa các ô dữ liệu mà các phần tử này mô tả."
535
526
  },
536
527
  "core/audits/accessibility/valid-lang.js | description": {
537
- "message": "Việc chỉ định một [ngôn ngữ BCP 47](https://www.w3.org/International/questions/qa-choosing-language-tags#question) hợp lệ cho các phần tử sẽ giúp trình đọc màn hình phát âm văn bản chính xác. [Tìm hiểu cách sử dụng thuộc tính `lang`](https://dequeuniversity.com/rules/axe/4.8/valid-lang)."
528
+ "message": "Việc chỉ định một [ngôn ngữ BCP 47](https://www.w3.org/International/questions/qa-choosing-language-tags#question) hợp lệ cho các phần tử sẽ giúp trình đọc màn hình phát âm văn bản chính xác. [Tìm hiểu cách sử dụng thuộc tính `lang`](https://dequeuniversity.com/rules/axe/4.9/valid-lang)."
538
529
  },
539
530
  "core/audits/accessibility/valid-lang.js | failureTitle": {
540
531
  "message": "Các thuộc tính `[lang]` không có giá trị hợp lệ"
@@ -543,7 +534,7 @@
543
534
  "message": "Các thuộc tính `[lang]` có giá trị hợp lệ"
544
535
  },
545
536
  "core/audits/accessibility/video-caption.js | description": {
546
- "message": "Khi video có chú thích, người dùng khiếm thính và người dùng bị suy giảm thính lực có thể tiếp cận thông tin trên video đó dễ dàng hơn. [Tìm hiểu thêm về chú thích của video](https://dequeuniversity.com/rules/axe/4.8/video-caption)."
537
+ "message": "Khi video có chú thích, người dùng khiếm thính và người dùng bị suy giảm thính lực có thể tiếp cận thông tin trên video đó dễ dàng hơn. [Tìm hiểu thêm về chú thích của video](https://dequeuniversity.com/rules/axe/4.9/video-caption)."
547
538
  },
548
539
  "core/audits/accessibility/video-caption.js | failureTitle": {
549
540
  "message": "Các phần tử `<video>` không chứa phần tử `<track>` có `[kind=\"captions\"]`."
@@ -743,18 +734,6 @@
743
734
  "core/audits/byte-efficiency/uses-text-compression.js | title": {
744
735
  "message": "Bật tính năng nén văn bản"
745
736
  },
746
- "core/audits/content-width.js | description": {
747
- "message": "Nếu chiều rộng của nội dung trong ứng dụng không khớp với chiều rộng của khung nhìn, thì ứng dụng có thể không được tối ưu hoá cho màn hình thiết bị di động. [Tìm hiểu cách xác định kích thước nội dung cho khung nhìn](https://developer.chrome.com/docs/lighthouse/pwa/content-width/)."
748
- },
749
- "core/audits/content-width.js | explanation": {
750
- "message": "Kích thước khung nhìn {innerWidth}px không khớp với kích thước cửa sổ {outerWidth}px."
751
- },
752
- "core/audits/content-width.js | failureTitle": {
753
- "message": "Kích thước của nội dung không phù hợp với khung nhìn"
754
- },
755
- "core/audits/content-width.js | title": {
756
- "message": "Kích thước của nội dung phù hợp với khung nhìn"
757
- },
758
737
  "core/audits/critical-request-chains.js | description": {
759
738
  "message": "Các Chuỗi yêu cầu quan trọng dưới đây cho bạn biết những tài nguyên được tải ở mức độ ưu tiên cao. Hãy cân nhắc giảm độ dài chuỗi, giảm kích thước tài nguyên tải xuống hoặc trì hoãn tải xuống các tài nguyên không cần thiết để cải thiện tốc độ tải trang. [Tìm hiểu cách tránh tạo chuỗi yêu cầu quan trọng](https://developer.chrome.com/docs/lighthouse/performance/critical-request-chains/)."
760
739
  },
@@ -1004,102 +983,6 @@
1004
983
  "core/audits/image-size-responsive.js | title": {
1005
984
  "message": "Phân phối hình ảnh có độ phân giải phù hợp"
1006
985
  },
1007
- "core/audits/installable-manifest.js | already-installed": {
1008
- "message": "Ứng dụng này đã được cài đặt"
1009
- },
1010
- "core/audits/installable-manifest.js | cannot-download-icon": {
1011
- "message": "Không thể tải một biểu tượng bắt buộc từ tệp kê khai"
1012
- },
1013
- "core/audits/installable-manifest.js | columnValue": {
1014
- "message": "Lý do xảy ra lỗi"
1015
- },
1016
- "core/audits/installable-manifest.js | description": {
1017
- "message": "Trình chạy dịch vụ là công nghệ cho phép ứng dụng của bạn dùng nhiều tính năng của Ứng dụng web tiến bộ, chẳng hạn như hoạt động khi không có mạng, thêm vào màn hình chính và thông báo đẩy. Khi triển khai trình chạy dịch vụ và tệp kê khai đúng cách, trình duyệt có thể chủ động nhắc người dùng thêm ứng dụng của bạn vào màn hình chính của họ, nhờ đó có thể tăng mức độ tương tác. [Tìm hiểu thêm về yêu cầu liên quan đến khả năng cài đặt tệp kê khai](https://developer.chrome.com/docs/lighthouse/pwa/installable-manifest/)."
1018
- },
1019
- "core/audits/installable-manifest.js | displayValue": {
1020
- "message": "{itemCount,plural, =1{1 lý do}other{# lý do}}"
1021
- },
1022
- "core/audits/installable-manifest.js | failureTitle": {
1023
- "message": "Tệp kê khai ứng dụng web hoặc trình chạy dịch vụ không đáp ứng các yêu cầu về khả năng cài đặt"
1024
- },
1025
- "core/audits/installable-manifest.js | ids-do-not-match": {
1026
- "message": "URL ứng dụng trong Cửa hàng Play và mã nhận dạng trong Cửa hàng Play không khớp"
1027
- },
1028
- "core/audits/installable-manifest.js | in-incognito": {
1029
- "message": "Trang được tải trong cửa sổ ẩn danh"
1030
- },
1031
- "core/audits/installable-manifest.js | manifest-display-not-supported": {
1032
- "message": "Thuộc tính `display` của tệp kê khai phải là `standalone`, `fullscreen` hoặc `minimal-ui`"
1033
- },
1034
- "core/audits/installable-manifest.js | manifest-display-override-not-supported": {
1035
- "message": "Tệp kê khai chứa trường \"display_override\" và chế độ hiển thị được hỗ trợ đầu tiên phải là một trong các chế độ \"standalone\", \"fullscreen\" hoặc \"minimal-ui\""
1036
- },
1037
- "core/audits/installable-manifest.js | manifest-empty": {
1038
- "message": "Không thể tìm nạp/phân tích cú pháp tệp kê khai hoặc tệp kê khai bị trống"
1039
- },
1040
- "core/audits/installable-manifest.js | manifest-location-changed": {
1041
- "message": "URL của tệp kê khai đã thay đổi khi đang tìm nạp tệp kê khai đó."
1042
- },
1043
- "core/audits/installable-manifest.js | manifest-missing-name-or-short-name": {
1044
- "message": "Tệp kê khai không chứa trường `name` hoặc `short_name`"
1045
- },
1046
- "core/audits/installable-manifest.js | manifest-missing-suitable-icon": {
1047
- "message": "Tệp kê khai chứa biểu tượng không phù hợp. Yêu cầu tệp phải ở định dạng PNG, SVG hoặc WebP có kích thước tối thiểu là {value0} px, thuộc tính \"sizes\" phải được đặt, còn thuộc tính \"purpose\" (nếu được đặt) phải bao gồm \"any\"."
1048
- },
1049
- "core/audits/installable-manifest.js | no-acceptable-icon": {
1050
- "message": "Không có biểu tượng nào được cung cấp ở định dạng PNG, SVG hoặc WebP với kích thước tối thiểu là {value0} px vuông, còn thuộc tính \"purpose\" không được đặt hoặc được đặt thành \"any\""
1051
- },
1052
- "core/audits/installable-manifest.js | no-icon-available": {
1053
- "message": "Biểu tượng đã tải xuống bị trống hoặc hỏng"
1054
- },
1055
- "core/audits/installable-manifest.js | no-id-specified": {
1056
- "message": "Chưa cung cấp mã nhận dạng trong Cửa hàng Play"
1057
- },
1058
- "core/audits/installable-manifest.js | no-manifest": {
1059
- "message": "Trang không có URL <link> của tệp kê khai"
1060
- },
1061
- "core/audits/installable-manifest.js | no-url-for-service-worker": {
1062
- "message": "Không thể kiểm tra trình chạy dịch vụ nếu không có trường \"start_url\" trong tệp kê khai"
1063
- },
1064
- "core/audits/installable-manifest.js | noErrorId": {
1065
- "message": "Không nhận ra mã lỗi liên quan đến khả năng cài đặt \"{errorId}\""
1066
- },
1067
- "core/audits/installable-manifest.js | not-from-secure-origin": {
1068
- "message": "Trang không được phân phối từ một nguồn gốc an toàn"
1069
- },
1070
- "core/audits/installable-manifest.js | not-in-main-frame": {
1071
- "message": "Trang không được tải trong khung chính"
1072
- },
1073
- "core/audits/installable-manifest.js | not-offline-capable": {
1074
- "message": "Trang không hoạt động khi không có mạng"
1075
- },
1076
- "core/audits/installable-manifest.js | pipeline-restarted": {
1077
- "message": "Đã gỡ cài đặt PWA và đang đặt lại quá trình kiểm tra khả năng cài đặt."
1078
- },
1079
- "core/audits/installable-manifest.js | platform-not-supported-on-android": {
1080
- "message": "Nền tảng ứng dụng đã chỉ định chưa được hỗ trợ trên Android"
1081
- },
1082
- "core/audits/installable-manifest.js | prefer-related-applications": {
1083
- "message": "Tệp kê khai chỉ định prefer_related_applications: true"
1084
- },
1085
- "core/audits/installable-manifest.js | prefer-related-applications-only-beta-stable": {
1086
- "message": "Chỉ hỗ trợ prefer_related_applications cho các kênh Chính thức và Thử nghiệm của Chrome trên Android."
1087
- },
1088
- "core/audits/installable-manifest.js | protocol-timeout": {
1089
- "message": "Lighthouse không thể xác định khả năng cài đặt trang. Vui lòng thử lại bằng một phiên bản Chrome mới hơn."
1090
- },
1091
- "core/audits/installable-manifest.js | start-url-not-valid": {
1092
- "message": "URL bắt đầu của tệp kê khai là không hợp lệ"
1093
- },
1094
- "core/audits/installable-manifest.js | title": {
1095
- "message": "Tệp kê khai ứng dụng web và trình chạy dịch vụ đáp ứng các yêu cầu về khả năng cài đặt"
1096
- },
1097
- "core/audits/installable-manifest.js | url-not-supported-for-webapk": {
1098
- "message": "Một URL trong tệp kê khai chứa tên người dùng, mật khẩu hoặc cổng"
1099
- },
1100
- "core/audits/installable-manifest.js | warn-not-offline-capable": {
1101
- "message": "Trang không hoạt động khi không có mạng. Trang này sẽ không được xem là có thể cài đặt sau khi Chrome 93 chính thức phát hành vào tháng 8 năm 2021."
1102
- },
1103
986
  "core/audits/is-on-https.js | allowed": {
1104
987
  "message": "Được phép"
1105
988
  },
@@ -1157,15 +1040,6 @@
1157
1040
  "core/audits/largest-contentful-paint-element.js | title": {
1158
1041
  "message": "Thành phần Thời gian hiển thị nội dung lớn nhất"
1159
1042
  },
1160
- "core/audits/layout-shift-elements.js | columnContribution": {
1161
- "message": "Ảnh hưởng của việc thay đổi bố cục"
1162
- },
1163
- "core/audits/layout-shift-elements.js | description": {
1164
- "message": "Các phần tử DOM này là đối tượng chịu ảnh hưởng nhiều nhất của việc thay đổi bố cục. Một số thay đổi về bố cục có thể không được tính vào giá trị chỉ số CLS do phương pháp [chuẩn hoá](https://web.dev/articles/cls#what_is_cls). [Tìm hiểu cách cải thiện CLS](https://web.dev/articles/optimize-cls)"
1165
- },
1166
- "core/audits/layout-shift-elements.js | title": {
1167
- "message": "Tránh các thay đổi lớn về bố cục"
1168
- },
1169
1043
  "core/audits/layout-shifts.js | columnScore": {
1170
1044
  "message": "Điểm số về mức thay đổi bố cục"
1171
1045
  },
@@ -1220,33 +1094,6 @@
1220
1094
  "core/audits/mainthread-work-breakdown.js | title": {
1221
1095
  "message": "Giảm thiểu công việc theo chuỗi chính"
1222
1096
  },
1223
- "core/audits/manual/pwa-cross-browser.js | description": {
1224
- "message": "Để tiếp cận nhiều người dùng nhất, các trang web phải hoạt động trên mọi trình duyệt chính. [Tìm hiểu về khả năng tương thích trên nhiều trình duyệt](https://developer.chrome.com/docs/lighthouse/pwa/pwa-cross-browser/)."
1225
- },
1226
- "core/audits/manual/pwa-cross-browser.js | title": {
1227
- "message": "Trang web hoạt động trên nhiều trình duyệt"
1228
- },
1229
- "core/audits/manual/pwa-each-page-has-url.js | description": {
1230
- "message": "Đảm bảo từng trang có thể liên kết sâu qua URL và URL là duy nhất để có thể chia sẻ trên mạng xã hội. [Tìm hiểu thêm về cách cung cấp liên kết sâu](https://developer.chrome.com/docs/lighthouse/pwa/pwa-each-page-has-url/)."
1231
- },
1232
- "core/audits/manual/pwa-each-page-has-url.js | title": {
1233
- "message": "Mỗi trang có một URL"
1234
- },
1235
- "core/audits/manual/pwa-page-transitions.js | description": {
1236
- "message": "Quá trình chuyển tiếp phải diễn ra ngay khi bạn nhấn vào, kể cả khi mạng chậm. Trải nghiệm này là một yếu tố quan trọng quyết định cảm nhận của người dùng về hiệu suất. [Tìm hiểu thêm về quá trình chuyển tiếp trang](https://developer.chrome.com/docs/lighthouse/pwa/pwa-page-transitions/)."
1237
- },
1238
- "core/audits/manual/pwa-page-transitions.js | title": {
1239
- "message": "Người dùng không cảm thấy mạng chậm khi chuyển trang"
1240
- },
1241
- "core/audits/maskable-icon.js | description": {
1242
- "message": "Một biểu tượng có thể chỉnh sửa sẽ đảm bảo rằng hình ảnh lấp đầy toàn bộ hình dạng mà không bị hiệu ứng hòm thư khi cài đặt ứng dụng trên một thiết bị. [Tìm hiểu về biểu tượng có thể chỉnh sửa của tệp kê khai](https://developer.chrome.com/docs/lighthouse/pwa/maskable-icon-audit/)."
1243
- },
1244
- "core/audits/maskable-icon.js | failureTitle": {
1245
- "message": "Tệp kê khai không có biểu tượng che mờ được"
1246
- },
1247
- "core/audits/maskable-icon.js | title": {
1248
- "message": "Tệp kê khai có một biểu tượng che mờ được"
1249
- },
1250
1097
  "core/audits/metrics/cumulative-layout-shift.js | description": {
1251
1098
  "message": "Điểm số tổng hợp về mức thay đổi bố cục đo lường mức độ dịch chuyển của các phần tử hiển thị trong khung nhìn. [Tìm hiểu thêm về chỉ số Điểm số tổng hợp về mức thay đổi bố cục](https://web.dev/articles/cls)."
1252
1099
  },
@@ -1286,15 +1133,6 @@
1286
1133
  "core/audits/network-server-latency.js | title": {
1287
1134
  "message": "Thời gian dưới nền của máy chủ"
1288
1135
  },
1289
- "core/audits/no-unload-listeners.js | description": {
1290
- "message": "Sự kiện `unload` kích hoạt không ổn định và việc làm theo sự kiện này có thể ngăn các hoạt động tối ưu hoá trình duyệt, chẳng hạn như Bộ nhớ đệm cho thao tác tiến/lùi. Hãy chuyển sang dùng sự kiện `pagehide` hoặc `visibilitychange`. [Tìm hiểu thêm về trình nghe sự kiện huỷ tải](https://web.dev/articles/bfcache#never_use_the_unload_event)"
1291
- },
1292
- "core/audits/no-unload-listeners.js | failureTitle": {
1293
- "message": "Đăng ký trình xử lý sự kiện `unload`"
1294
- },
1295
- "core/audits/no-unload-listeners.js | title": {
1296
- "message": "Tránh dùng trình xử lý sự kiện `unload`"
1297
- },
1298
1136
  "core/audits/non-composited-animations.js | description": {
1299
1137
  "message": "Các ảnh động không được ghép có thể kém chất lượng và làm tăng CLS (Điểm số tổng hợp về mức thay đổi bố cục). [Tìm hiểu cách tránh ảnh động không được ghép](https://developer.chrome.com/docs/lighthouse/performance/non-composited-animations/)"
1300
1138
  },
@@ -1322,15 +1160,6 @@
1322
1160
  "core/audits/non-composited-animations.js | unsupportedTimingParameters": {
1323
1161
  "message": "Hiệu ứng có tham số thời gian không được hỗ trợ"
1324
1162
  },
1325
- "core/audits/performance-budget.js | description": {
1326
- "message": "Đảm bảo số lượng và quy mô của yêu cầu mạng thấp hơn mục tiêu đặt ra của ngân sách hiệu suất đã cung cấp. [Tìm hiểu thêm về ngân sách hiệu suất](https://developers.google.com/web/tools/lighthouse/audits/budgets)."
1327
- },
1328
- "core/audits/performance-budget.js | requestCountOverBudget": {
1329
- "message": "{count,plural, =1{1 yêu cầu}other{# yêu cầu}}"
1330
- },
1331
- "core/audits/performance-budget.js | title": {
1332
- "message": "Ngân sách hiệu suất"
1333
- },
1334
1163
  "core/audits/preload-fonts.js | description": {
1335
1164
  "message": "Tải trước phông chữ có `optional` để khách truy cập lần đầu có thể sử dụng. [Tìm hiểu thêm về cách tải trước phông chữ](https://web.dev/articles/preload-optional-fonts)"
1336
1165
  },
@@ -1481,15 +1310,6 @@
1481
1310
  "core/audits/seo/meta-description.js | title": {
1482
1311
  "message": "Tài liệu có phần mô tả meta"
1483
1312
  },
1484
- "core/audits/seo/plugins.js | description": {
1485
- "message": "Các công cụ tìm kiếm không thể lập chỉ mục nội dung trình bổ trợ và nhiều thiết bị hạn chế hoặc không hỗ trợ trình bổ trợ. [Tìm hiểu thêm về cách tránh trình bổ trợ](https://developer.chrome.com/docs/lighthouse/seo/plugins/)."
1486
- },
1487
- "core/audits/seo/plugins.js | failureTitle": {
1488
- "message": "Tài liệu sử dụng plugin"
1489
- },
1490
- "core/audits/seo/plugins.js | title": {
1491
- "message": "Tài liệu tránh sử dụng plugin"
1492
- },
1493
1313
  "core/audits/seo/robots-txt.js | description": {
1494
1314
  "message": "Nếu định dạng của tệp robots.txt không đúng, thì trình thu thập thông tin có thể không hiểu được cách bạn muốn thu thập thông tin hoặc lập chỉ mục trang web của mình. [Tìm hiểu thêm về tệp robots.txt](https://developer.chrome.com/docs/lighthouse/seo/invalid-robots-txt/)."
1495
1315
  },
@@ -1508,27 +1328,6 @@
1508
1328
  "core/audits/seo/robots-txt.js | title": {
1509
1329
  "message": "robots.txt hợp lệ"
1510
1330
  },
1511
- "core/audits/seo/tap-targets.js | description": {
1512
- "message": "Các phần tử tương tác, chẳng hạn như nút và đường liên kết, cần có kích thước đủ lớn (48 x 48 pixel) hoặc khoảng cách xung quanh đủ rộng sao cho dễ nhấn mà không chồng chéo lên các phần tử khác. [Tìm hiểu thêm về các mục tiêu nhấn](https://developer.chrome.com/docs/lighthouse/seo/tap-targets/)."
1513
- },
1514
- "core/audits/seo/tap-targets.js | displayValue": {
1515
- "message": "{decimalProportion, number, percent} mục tiêu nhấn có kích thước phù hợp"
1516
- },
1517
- "core/audits/seo/tap-targets.js | explanationViewportMetaNotOptimized": {
1518
- "message": "Mục tiêu nhấn có kích thước quá nhỏ do không có thẻ meta viewport nào được tối ưu hóa cho màn hình thiết bị di động"
1519
- },
1520
- "core/audits/seo/tap-targets.js | failureTitle": {
1521
- "message": "Các mục tiêu nhấn có kích thước không phù hợp"
1522
- },
1523
- "core/audits/seo/tap-targets.js | overlappingTargetHeader": {
1524
- "message": "Mục tiêu chồng chéo"
1525
- },
1526
- "core/audits/seo/tap-targets.js | tapTargetHeader": {
1527
- "message": "Mục tiêu nhấn"
1528
- },
1529
- "core/audits/seo/tap-targets.js | title": {
1530
- "message": "Mục tiêu nhấn có kích thước phù hợp"
1531
- },
1532
1331
  "core/audits/server-response-time.js | description": {
1533
1332
  "message": "Giữ cho máy chủ phản hồi trong thời gian ngắn đối với tài liệu chính vì tất cả các yêu cầu khác phụ thuộc vào thời gian đó. [Tìm hiểu thêm về chỉ số Thời gian cho byte đầu tiên](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/)."
1534
1333
  },
@@ -1541,24 +1340,6 @@
1541
1340
  "core/audits/server-response-time.js | title": {
1542
1341
  "message": "Thời gian phản hồi ban đầu của máy chủ là ngắn"
1543
1342
  },
1544
- "core/audits/splash-screen.js | description": {
1545
- "message": "Màn hình chờ có giao diện giúp đảm bảo người dùng có trải nghiệm chất lượng cao khi chạy ứng dụng từ màn hình chính. [Tìm hiểu thêm về màn hình chờ](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)."
1546
- },
1547
- "core/audits/splash-screen.js | failureTitle": {
1548
- "message": "Chưa được định cấu hình cho màn hình chờ tùy chỉnh"
1549
- },
1550
- "core/audits/splash-screen.js | title": {
1551
- "message": "Đã định cấu hình cho màn hình chờ tùy chỉnh"
1552
- },
1553
- "core/audits/themed-omnibox.js | description": {
1554
- "message": "Bạn có thể đặt giao diện cho thanh địa chỉ trên trình duyệt để phù hợp với trang web của mình. [Tìm hiểu thêm về cách đặt giao diện cho thanh địa chỉ](https://developer.chrome.com/docs/lighthouse/pwa/themed-omnibox/)."
1555
- },
1556
- "core/audits/themed-omnibox.js | failureTitle": {
1557
- "message": "Không đặt màu giao diện cho thanh địa chỉ."
1558
- },
1559
- "core/audits/themed-omnibox.js | title": {
1560
- "message": "Đặt màu giao diện cho thanh địa chỉ."
1561
- },
1562
1343
  "core/audits/third-party-cookies.js | description": {
1563
1344
  "message": "Các phiên bản Chrome sau này sẽ không hỗ trợ cookie của bên thứ ba nữa. [Tìm hiểu thêm về việc Chrome ngừng hỗ trợ cookie của bên thứ ba](https://developer.chrome.com/en/docs/privacy-sandbox/third-party-cookie-phase-out/)."
1564
1345
  },
@@ -1613,18 +1394,6 @@
1613
1394
  "core/audits/third-party-summary.js | title": {
1614
1395
  "message": "Giảm thiểu mức sử dụng của bên thứ ba"
1615
1396
  },
1616
- "core/audits/timing-budget.js | columnMeasurement": {
1617
- "message": "Đo lường"
1618
- },
1619
- "core/audits/timing-budget.js | columnTimingMetric": {
1620
- "message": "Chỉ số"
1621
- },
1622
- "core/audits/timing-budget.js | description": {
1623
- "message": "Khi đặt giới hạn về thời gian, bạn sẽ có thể theo dõi được hiệu suất trang web của mình. Các trang có hiệu suất cao sẽ tải và phản hồi nhanh với các sự kiện hoạt động đầu vào của người dùng. [Tìm hiểu thêm về ngân sách hiệu suất](https://developers.google.com/web/tools/lighthouse/audits/budgets)."
1624
- },
1625
- "core/audits/timing-budget.js | title": {
1626
- "message": "Giới hạn về thời gian"
1627
- },
1628
1397
  "core/audits/unsized-images.js | description": {
1629
1398
  "message": "Đặt chiều rộng và chiều cao rõ ràng đối với các phần tử hình ảnh để giảm sự thay đổi về bố cục và cải thiện CLS (Điểm số tổng hợp về mức thay đổi bố cục). [Tìm hiểu cách đặt kích thước hình ảnh](https://web.dev/articles/optimize-cls#images_without_dimensions)"
1630
1399
  },
@@ -1718,7 +1487,7 @@
1718
1487
  "core/audits/work-during-interaction.js | presentationDelay": {
1719
1488
  "message": "Độ trễ khi trình bày"
1720
1489
  },
1721
- "core/audits/work-during-interaction.js | processingTime": {
1490
+ "core/audits/work-during-interaction.js | processingDuration": {
1722
1491
  "message": "Thời gian xử lý"
1723
1492
  },
1724
1493
  "core/audits/work-during-interaction.js | title": {
@@ -1796,12 +1565,6 @@
1796
1565
  "core/config/default-config.js | bestPracticesUXGroupTitle": {
1797
1566
  "message": "Trải nghiệm người dùng"
1798
1567
  },
1799
- "core/config/default-config.js | budgetsGroupDescription": {
1800
- "message": "Phần Ngân sách hiệu suất đặt ra tiêu chuẩn về hiệu suất của trang web."
1801
- },
1802
- "core/config/default-config.js | budgetsGroupTitle": {
1803
- "message": "Ngân sách"
1804
- },
1805
1568
  "core/config/default-config.js | diagnosticsGroupDescription": {
1806
1569
  "message": "Thông tin bổ sung về hiệu suất của ứng dụng. Những số liệu này không [trực tiếp ảnh hưởng](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) đến Điểm hiệu suất."
1807
1570
  },
@@ -1814,12 +1577,6 @@
1814
1577
  "core/config/default-config.js | firstPaintImprovementsGroupTitle": {
1815
1578
  "message": "Các thao tác để cải thiện thời gian hiển thị hình ảnh đầu tiên"
1816
1579
  },
1817
- "core/config/default-config.js | loadOpportunitiesGroupDescription": {
1818
- "message": "Những đề xuất này có thể giúp trang của bạn tải nhanh hơn, chứ không [trực tiếp ảnh hưởng](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) đến Điểm hiệu suất."
1819
- },
1820
- "core/config/default-config.js | loadOpportunitiesGroupTitle": {
1821
- "message": "Cơ hội"
1822
- },
1823
1580
  "core/config/default-config.js | metricGroupTitle": {
1824
1581
  "message": "Các chỉ số"
1825
1582
  },
@@ -1832,21 +1589,6 @@
1832
1589
  "core/config/default-config.js | performanceCategoryTitle": {
1833
1590
  "message": "Hiệu suất"
1834
1591
  },
1835
- "core/config/default-config.js | pwaCategoryDescription": {
1836
- "message": "Những hoạt động kiểm tra này sẽ xác thực các chương trình thành phần của Ứng dụng web tiến bộ. [Tìm hiểu những tiêu chí của Ứng dụng web tiến bộ hiệu quả](https://web.dev/articles/pwa-checklist)."
1837
- },
1838
- "core/config/default-config.js | pwaCategoryManualDescription": {
1839
- "message": "Đây là những hoạt động kiểm tra được chỉ định trong [Danh sách kiểm tra ứng dụng web tiến bộ (PWA)](https://web.dev/articles/pwa-checklist) cơ bản, nhưng Lighthouse không tự động kiểm tra các mục này. Các hoạt động kiểm tra này không ảnh hưởng đến điểm số của bạn, nhưng bạn nên xác minh theo cách thủ công."
1840
- },
1841
- "core/config/default-config.js | pwaCategoryTitle": {
1842
- "message": "PWA"
1843
- },
1844
- "core/config/default-config.js | pwaInstallableGroupTitle": {
1845
- "message": "Có thể cài đặt"
1846
- },
1847
- "core/config/default-config.js | pwaOptimizedGroupTitle": {
1848
- "message": "PWA đã tối ưu hóa"
1849
- },
1850
1592
  "core/config/default-config.js | seoCategoryDescription": {
1851
1593
  "message": "Các hoạt động kiểm tra này đảm bảo rằng trang của bạn tuân theo lời khuyên cơ bản về cách tối ưu hoá cho công cụ tìm kiếm. Có nhiều yếu tố bổ sung mà Lighthouse không xếp hạng ở đây có thể ảnh hưởng đến thứ hạng của bạn trong kết quả tìm kiếm, kể cả hiệu suất của [Các chỉ số quan trọng về trang web](https://web.dev/explore/vitals). [Tìm hiểu thêm Kiến thức thiết yếu về Google Tìm kiếm](https://support.google.com/webmasters/answer/35769)."
1852
1594
  },
@@ -2516,9 +2258,6 @@
2516
2258
  "core/lib/i18n/i18n.js | columnName": {
2517
2259
  "message": "Tên"
2518
2260
  },
2519
- "core/lib/i18n/i18n.js | columnOverBudget": {
2520
- "message": "Vượt ngân sách"
2521
- },
2522
2261
  "core/lib/i18n/i18n.js | columnRequests": {
2523
2262
  "message": "Số yêu cầu"
2524
2263
  },
@@ -2729,9 +2468,6 @@
2729
2468
  "flow-report/src/i18n/ui-strings.js | categoryPerformance": {
2730
2469
  "message": "Hiệu suất"
2731
2470
  },
2732
- "flow-report/src/i18n/ui-strings.js | categoryProgressiveWebApp": {
2733
- "message": "Ứng dụng web tiến bộ"
2734
- },
2735
2471
  "flow-report/src/i18n/ui-strings.js | categorySeo": {
2736
2472
  "message": "SEO"
2737
2473
  },
@@ -3398,9 +3134,6 @@
3398
3134
  "report/renderer/report-utils.js | passedAuditsGroupTitle": {
3399
3135
  "message": "Số lần kiểm tra đạt yêu cầu"
3400
3136
  },
3401
- "report/renderer/report-utils.js | pwaRemovalMessage": {
3402
- "message": "Theo [điểm mới trong Tiêu chí về khả năng cài đặt của Chrome](https://developer.chrome.com/blog/update-install-criteria), Lighthouse sẽ ngừng sử dụng danh mục PWA trong bản phát hành sau này. Vui lòng tham khảo [tài liệu mới nhất về PWA](https://developer.chrome.com/docs/devtools/progressive-web-apps/) để biết quy trình kiểm thử PWA trong tương lai."
3403
- },
3404
3137
  "report/renderer/report-utils.js | runtimeAnalysisWindow": {
3405
3138
  "message": "Lượt tải trang đầu tiên"
3406
3139
  },