@mdn/fred 2.3.0 → 2.4.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 (195) hide show
  1. package/.env-dist +0 -4
  2. package/CHANGELOG.md +40 -0
  3. package/components/article-footer/server.js +3 -1
  4. package/components/code-example/types.d.ts +1 -1
  5. package/components/env/index.js +0 -3
  6. package/components/issues-table/element.js +1 -1
  7. package/components/left-sidebar/server.css +14 -2
  8. package/components/live-sample-result/element.js +2 -0
  9. package/components/menu/tabs.json +4 -0
  10. package/components/outer-layout/server.js +8 -6
  11. package/components/placement/mixin.js +2 -2
  12. package/components/play-console/element.js +5 -1
  13. package/components/play-console/types.d.ts +1 -1
  14. package/components/record-visit/element.js +1 -1
  15. package/components/reference-layout/server.css +10 -0
  16. package/components/reference-layout/server.js +3 -1
  17. package/entry.client.js +0 -1
  18. package/hooks/live-samples.js +5 -3
  19. package/l10n/locales/de.ftl +288 -22
  20. package/l10n/locales/fr.ftl +256 -91
  21. package/l10n/parser/transform.js +0 -1
  22. package/l10n/template.ftl +5 -0
  23. package/legacy/index.tsx +2 -0
  24. package/out/service-worker.js +1 -1
  25. package/out/service-worker.js.map +1 -1
  26. package/out/static/client/1550.317cf910e7937050.js +321 -0
  27. package/out/static/client/1550.317cf910e7937050.js.map +1 -0
  28. package/out/static/client/{3094.58da3996c52b5264.js → 3094.ad202726cd671cc6.js} +2 -2
  29. package/out/static/client/3094.ad202726cd671cc6.js.map +1 -0
  30. package/out/static/client/{4204.c77e84ea2f8c359a.js → 4204.082860f577e883b1.js} +2 -2
  31. package/out/static/client/{4204.c77e84ea2f8c359a.js.map → 4204.082860f577e883b1.js.map} +1 -1
  32. package/out/static/client/{5330.8d5173f308b639bc.js → 5330.0fa70a944297da04.js} +7 -7
  33. package/out/static/client/{5330.8d5173f308b639bc.js.map → 5330.0fa70a944297da04.js.map} +1 -1
  34. package/out/static/client/5649.00f25ce181894101.js +2 -0
  35. package/out/static/client/5649.00f25ce181894101.js.map +1 -0
  36. package/out/static/client/6333.530138f4b30df5a7.js +317 -0
  37. package/out/static/client/6333.530138f4b30df5a7.js.map +1 -0
  38. package/out/static/client/6760.d97440f1ca6690c6.js.map +1 -1
  39. package/out/static/client/{8903.ce3ee42276c345b9.js → 8903.f870aafb338b203a.js} +2 -2
  40. package/out/static/client/{8903.ce3ee42276c345b9.js.map → 8903.f870aafb338b203a.js.map} +1 -1
  41. package/out/static/client/{index.880284fd3bb87ecf.js → index.3d355ddb095f80e1.js} +4 -4
  42. package/out/static/client/index.3d355ddb095f80e1.js.map +1 -0
  43. package/out/static/client/{runtime.9d7da16d8104c706.js → runtime.5998abbd768bf4b4.js} +2 -2
  44. package/out/static/client/{runtime.9d7da16d8104c706.js.map → runtime.5998abbd768bf4b4.js.map} +1 -1
  45. package/out/static/client/stats.json +284 -284
  46. package/out/static/client/styles-a11y-menu.e450c80bdecd73b0.js +1 -0
  47. package/out/static/client/styles-advertising.8680d559dfd1e6da.js +1 -0
  48. package/out/static/client/styles-article-footer.4c924cfce86cefb1.js +1 -0
  49. package/out/static/client/styles-banner.b2fd6f3f4890f119.js +1 -0
  50. package/out/static/client/styles-baseline-indicator.7bda150efbd00e44.js +1 -0
  51. package/out/static/client/styles-blog-index.ed9148eebbd54874.js +1 -0
  52. package/out/static/client/styles-blog-post.e23d949d4b39893e.js +1 -0
  53. package/out/static/client/styles-breadcrumbs-bar.e72110560a2a2d11.js +1 -0
  54. package/out/static/client/styles-breadcrumbs.3e8f4af57730f539.js +1 -0
  55. package/out/static/client/styles-button.4529576beae298ca.js +1 -0
  56. package/out/static/client/styles-content-section.6e6c01c92b1ef20d.js +1 -0
  57. package/out/static/client/styles-contributor-spotlight.b7bc7bc60baf8578.js +1 -0
  58. package/out/static/client/styles-curriculum-about.a146120bd6d81d2b.js +1 -0
  59. package/out/static/client/styles-curriculum-default.f9cffbec77bd6a2a.js +1 -0
  60. package/out/static/client/styles-curriculum-landing.64b11fc6617af9bf.js +1 -0
  61. package/out/static/client/styles-curriculum-module.a96942f28d9841bd.js +1 -0
  62. package/out/static/client/styles-curriculum-overview.62ec696fa6196a83.js +1 -0
  63. package/out/static/client/styles-featured-articles.aaed3d1876c9083b.js +1 -0
  64. package/out/static/client/styles-footer.c3e8b1950387a3f8.js +1 -0
  65. package/out/static/client/styles-generic-about.13ddd8305fa7ad8e.js +1 -0
  66. package/out/static/client/styles-generic-community.f60b231a4a172157.js +1 -0
  67. package/out/static/client/styles-generic-content.5124855e59a283a5.js +1 -0
  68. package/out/static/client/styles-generic-layout.813a99dd507e1bab.js +1 -0
  69. package/out/static/client/styles-generic-sidebar.1d92203f2d9da43d.js +1 -0
  70. package/out/static/client/styles-generic-toc.61b41b9e9f5f85d0.js +1 -0
  71. package/out/static/client/{styles-global.d51198f5229746cf.js → styles-global.aa9d5defd4680e6c.js} +1 -1
  72. package/out/static/client/styles-heading-anchor.df83d71ad077415d.js +1 -0
  73. package/out/static/client/styles-homepage-body.0df30491a320f9c7.js +1 -0
  74. package/out/static/client/styles-homepage-contributor-spotlight.b879a173e860f6a9.js +1 -0
  75. package/out/static/client/styles-homepage-footer.99f5e147d6f2b9ed.js +1 -0
  76. package/out/static/client/styles-homepage-header.43271f37ca9a57df.js +1 -0
  77. package/out/static/client/styles-homepage-hero.ae60620a6fed0008.js +1 -0
  78. package/out/static/client/styles-homepage.3dfe53192c32e305.js +1 -0
  79. package/out/static/client/styles-latest-news.8a03d3fba6e1cd47.js +1 -0
  80. package/out/static/client/{styles-left-sidebar.dc1db5a87a982579.css → styles-left-sidebar.6f954e8939555f77.css} +2 -2
  81. package/out/static/client/{styles-left-sidebar.dc1db5a87a982579.css.map → styles-left-sidebar.6f954e8939555f77.css.map} +1 -1
  82. package/out/static/client/styles-left-sidebar.c36264a47e1805b1.js +1 -0
  83. package/out/static/client/styles-logo.8f20fe059f2d43b6.js +1 -0
  84. package/out/static/client/styles-mandala.926fd25378dd7542.js +1 -0
  85. package/out/static/client/styles-menu.1d5ef33019535538.js +1 -0
  86. package/out/static/client/styles-navigation.5caf382b2b53c3c1.js +1 -0
  87. package/out/static/client/styles-not-found.7fa9aeb622dc059e.js +1 -0
  88. package/out/static/client/styles-observatory-landing.34dc1b73c5e94907.js +1 -0
  89. package/out/static/client/styles-observatory-results.74448918bd9b8126.js +1 -0
  90. package/out/static/client/styles-page-layout.fd2f866f258a840d.js +1 -0
  91. package/out/static/client/styles-pagination.6a917bf99443fbe0.js +1 -0
  92. package/out/static/client/styles-playground.f6d77d4376f8103b.js +1 -0
  93. package/out/static/client/styles-recent-contributions.05e0168e43678c69.js +1 -0
  94. package/out/static/client/styles-reference-layout.01f91b57466bc3d8.css +2 -0
  95. package/out/static/client/styles-reference-layout.01f91b57466bc3d8.css.map +1 -0
  96. package/out/static/client/styles-reference-layout.c225b05af4a496ec.js +1 -0
  97. package/out/static/client/styles-reference-toc.cefa20df1f0b9e55.js +1 -0
  98. package/out/static/client/styles-sandbox.39a70a5ffa12a531.js +1 -0
  99. package/out/static/client/styles-site-search.bb29f36fdd646b10.js +1 -0
  100. package/out/static/client/styles-social-image.29ca61210c11848e.js +1 -0
  101. package/out/static/client/styles-translation-banner.f7da234674dc43ff.js +1 -0
  102. package/out/static/client/styles-writer-toolbar.4743aa6e3fa72415.js +1 -0
  103. package/out/static/client/{styles.7ccaeb561f3fb889.js → styles.37aa6c605abf6990.js} +2 -2
  104. package/out/static/client/{styles.7ccaeb561f3fb889.js.map → styles.37aa6c605abf6990.js.map} +1 -1
  105. package/out/static/legacy/asset-manifest.json +5 -5
  106. package/out/static/legacy/{index.f31b95b1d9fb620a.js → index.3fd784dd246fb28b.js} +3 -3
  107. package/out/static/legacy/{index.f31b95b1d9fb620a.js.map → index.3fd784dd246fb28b.js.map} +1 -1
  108. package/out/static/legacy/{index.fb9f65c469ca30a7.html → index.b72bb30bdf1cb6b9.html} +1 -1
  109. package/out/static/legacy/stats.json +13 -13
  110. package/out/static/legacy/{yari.5a79950ba25352de.js → yari.4560ee30606e8a90.js} +3 -3
  111. package/out/static/legacy/{yari.5a79950ba25352de.js.map → yari.4560ee30606e8a90.js.map} +1 -1
  112. package/out/static/ssr/1550.js +256 -91
  113. package/out/static/ssr/1550.js.map +1 -1
  114. package/out/static/ssr/6333.js +288 -22
  115. package/out/static/ssr/6333.js.map +1 -1
  116. package/out/static/ssr/index.js +14 -12
  117. package/out/static/ssr/index.js.map +1 -1
  118. package/out/static/ssr/stats.json +4 -4
  119. package/package.json +16 -16
  120. package/server.js +5 -1
  121. package/test/unit/l10n/fixtures/simple-different.js +1 -1
  122. package/test/unit/l10n/fixtures/simple.js +1 -1
  123. package/test/unit/l10n/fixtures/tags-with-duplicates.js +1 -1
  124. package/test/unit/l10n/fixtures/tags-with-substitutions.js +1 -1
  125. package/test/unit/l10n/fixtures/tags.js +1 -1
  126. package/types/lit.ts +1 -1
  127. package/hooks/ga-init.d.ts +0 -5
  128. package/hooks/ga-init.js +0 -28
  129. package/out/static/client/1550.1bc9bf6c1f4edb2b.js +0 -156
  130. package/out/static/client/1550.1bc9bf6c1f4edb2b.js.map +0 -1
  131. package/out/static/client/3094.58da3996c52b5264.js.map +0 -1
  132. package/out/static/client/5649.0e40dc56a97136d2.js +0 -2
  133. package/out/static/client/5649.0e40dc56a97136d2.js.map +0 -1
  134. package/out/static/client/6333.4df091fca06fdbe0.js +0 -51
  135. package/out/static/client/6333.4df091fca06fdbe0.js.map +0 -1
  136. package/out/static/client/index.880284fd3bb87ecf.js.map +0 -1
  137. package/out/static/client/styles-a11y-menu.bf0e970df3199f5d.js +0 -1
  138. package/out/static/client/styles-advertising.d17c1cc85ea68d89.js +0 -1
  139. package/out/static/client/styles-article-footer.da648fa126c9ef35.js +0 -1
  140. package/out/static/client/styles-banner.3a9c208a543e4e08.js +0 -1
  141. package/out/static/client/styles-baseline-indicator.de2ebbf5d4d6d2c6.js +0 -1
  142. package/out/static/client/styles-blog-index.db438e20391403c5.js +0 -1
  143. package/out/static/client/styles-blog-post.4f8200c9e59f9064.js +0 -1
  144. package/out/static/client/styles-breadcrumbs-bar.56117b372f98e1bb.js +0 -1
  145. package/out/static/client/styles-breadcrumbs.31fef62b20adf891.js +0 -1
  146. package/out/static/client/styles-button.fd5bf1d0d6b9e233.js +0 -1
  147. package/out/static/client/styles-content-section.a196f33b9d9e316d.js +0 -1
  148. package/out/static/client/styles-contributor-spotlight.9e6a6225135a95e4.js +0 -1
  149. package/out/static/client/styles-curriculum-about.1596c8f7f696ec0b.js +0 -1
  150. package/out/static/client/styles-curriculum-default.6688b5588b7bb474.js +0 -1
  151. package/out/static/client/styles-curriculum-landing.978bdf31fe767e6b.js +0 -1
  152. package/out/static/client/styles-curriculum-module.22ad33bd781fedea.js +0 -1
  153. package/out/static/client/styles-curriculum-overview.73290072eaf98c47.js +0 -1
  154. package/out/static/client/styles-featured-articles.2426db4e569be912.js +0 -1
  155. package/out/static/client/styles-footer.9b7a6e88180fe92d.js +0 -1
  156. package/out/static/client/styles-generic-about.fbdd35941b30ecb4.js +0 -1
  157. package/out/static/client/styles-generic-community.0460f98e8202cbc3.js +0 -1
  158. package/out/static/client/styles-generic-content.d7ba09d8d6784d92.js +0 -1
  159. package/out/static/client/styles-generic-layout.4e8f7141d77a3d0a.js +0 -1
  160. package/out/static/client/styles-generic-sidebar.9a19341f843e26dc.js +0 -1
  161. package/out/static/client/styles-generic-toc.313908c6a50cd4f4.js +0 -1
  162. package/out/static/client/styles-heading-anchor.6f4f5ad03a7f9308.js +0 -1
  163. package/out/static/client/styles-homepage-body.0a3bdcbec90af911.js +0 -1
  164. package/out/static/client/styles-homepage-contributor-spotlight.d2b96c96fc38fcf8.js +0 -1
  165. package/out/static/client/styles-homepage-footer.f1c1120fd9eb434a.js +0 -1
  166. package/out/static/client/styles-homepage-header.cbe6e6608152438d.js +0 -1
  167. package/out/static/client/styles-homepage-hero.5b6ca92aaffb33ad.js +0 -1
  168. package/out/static/client/styles-homepage.3ed301c8c4ebaa04.js +0 -1
  169. package/out/static/client/styles-latest-news.9fcf156fdb6f0099.js +0 -1
  170. package/out/static/client/styles-left-sidebar.8afa4a0c07dc390a.js +0 -1
  171. package/out/static/client/styles-logo.4f1e847c0fafc690.js +0 -1
  172. package/out/static/client/styles-mandala.b5bc9b1e26685615.js +0 -1
  173. package/out/static/client/styles-menu.cdaed3d488edc7e5.js +0 -1
  174. package/out/static/client/styles-navigation.c30010b963de146d.js +0 -1
  175. package/out/static/client/styles-not-found.1931cd41c663a211.js +0 -1
  176. package/out/static/client/styles-observatory-landing.cfcf2761ceece549.js +0 -1
  177. package/out/static/client/styles-observatory-results.851694fe2b9402e8.js +0 -1
  178. package/out/static/client/styles-page-layout.242bde5d7a8b2118.js +0 -1
  179. package/out/static/client/styles-pagination.91d95daa63d13fc6.js +0 -1
  180. package/out/static/client/styles-playground.68430c102865ae2c.js +0 -1
  181. package/out/static/client/styles-recent-contributions.5d2b8bc44c3385b9.js +0 -1
  182. package/out/static/client/styles-reference-layout.f17861486ef2423f.css +0 -2
  183. package/out/static/client/styles-reference-layout.f17861486ef2423f.css.map +0 -1
  184. package/out/static/client/styles-reference-layout.fcb22f6809bd2f5b.js +0 -1
  185. package/out/static/client/styles-reference-toc.f1e6afe3660e67a1.js +0 -1
  186. package/out/static/client/styles-sandbox.939050c7574b6369.js +0 -1
  187. package/out/static/client/styles-site-search.712ba523882ce36e.js +0 -1
  188. package/out/static/client/styles-social-image.1f1abcf5b04e3219.js +0 -1
  189. package/out/static/client/styles-translation-banner.cae413f93f1335b6.js +0 -1
  190. package/out/static/client/styles-writer-toolbar.796f905329fa62ff.js +0 -1
  191. package/utils/dnt-helper.js +0 -59
  192. /package/out/static/client/{5330.8d5173f308b639bc.js.LICENSE.txt → 5330.0fa70a944297da04.js.LICENSE.txt} +0 -0
  193. /package/out/static/client/{index.880284fd3bb87ecf.js.LICENSE.txt → index.3d355ddb095f80e1.js.LICENSE.txt} +0 -0
  194. /package/out/static/legacy/{index.f31b95b1d9fb620a.js.LICENSE.txt → index.3fd784dd246fb28b.js.LICENSE.txt} +0 -0
  195. /package/out/static/legacy/{yari.5a79950ba25352de.js.LICENSE.txt → yari.4560ee30606e8a90.js.LICENSE.txt} +0 -0
package/.env-dist CHANGED
@@ -25,10 +25,6 @@ RARI_URL="http://localhost:8083"
25
25
  # FRED_GLEAN_ENABLED=true
26
26
  # FRED_GLEAN_DEBUG=true
27
27
 
28
- # uncomment to enable Google Analytics 4
29
- # FRED_GA_ENABLED=true
30
- # FRED_GA_MEASUREMENT_ID=G-XXXXXXXXXX
31
-
32
28
  # legacy react-specific environment variables
33
29
  REACT_APP_KUMA_HOST="localhost:3000"
34
30
  REACT_APP_FXA_SIGNIN_URL="/users/fxa/login/authenticate/"
package/CHANGELOG.md CHANGED
@@ -1,5 +1,45 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.4.0](https://github.com/mdn/fred/compare/v2.3.0...v2.4.0) (2026-03-20)
4
+
5
+
6
+ ### Features
7
+
8
+ * **reference-layout:** render code blocks in doc titles ([#1398](https://github.com/mdn/fred/issues/1398)) ([9f0021e](https://github.com/mdn/fred/commit/9f0021eaff28a8c85d9160b4d436eedf401ef1c8))
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * **l10n:** add missing docs page strings ([#1374](https://github.com/mdn/fred/issues/1374)) ([2a5892a](https://github.com/mdn/fred/commit/2a5892a9ec9b4b1c66d5e3cbe1a784f4e13ff678))
14
+ * **l10n:** add missing documentation page strings ([2a5892a](https://github.com/mdn/fred/commit/2a5892a9ec9b4b1c66d5e3cbe1a784f4e13ff678))
15
+ * **l10n:** fixed report translation for `obs-report` in fr ([a084129](https://github.com/mdn/fred/commit/a084129a9b2d075b570ac7ce94a9e76d8ef4c3b3))
16
+ * **live-sample:** add fullscreen + orientation lock to sandbox ([#1386](https://github.com/mdn/fred/issues/1386)) ([17bc90a](https://github.com/mdn/fred/commit/17bc90ad7c505e29396ef46400a4542bf5b67349))
17
+ * **sidebar:** dedent current page highlight ([#1407](https://github.com/mdn/fred/issues/1407)) ([3fdb2d9](https://github.com/mdn/fred/commit/3fdb2d9f018f27461d76510e3078c096d99fc667))
18
+
19
+
20
+ ### Miscellaneous
21
+
22
+ * **deps-dev:** bump @mdn/browser-compat-data from 7.3.6 to 7.3.7 ([#1383](https://github.com/mdn/fred/issues/1383)) ([f22d895](https://github.com/mdn/fred/commit/f22d8952150dd3a6650a399977dfd3021a1e253c))
23
+ * **deps-dev:** bump flatted from 3.3.3 to 3.4.2 ([#1400](https://github.com/mdn/fred/issues/1400)) ([544d28b](https://github.com/mdn/fred/commit/544d28bf7da621d97f83278efe66b517cfa74d62))
24
+ * **deps-dev:** bump stylelint from 17.4.0 to 17.5.0 in the npm-dev group ([#1399](https://github.com/mdn/fred/issues/1399)) ([46c7c24](https://github.com/mdn/fred/commit/46c7c24fb141615aa6e2fb26178161519d990978))
25
+ * **deps-dev:** bump stylelint in the npm-dev group ([46c7c24](https://github.com/mdn/fred/commit/46c7c24fb141615aa6e2fb26178161519d990978))
26
+ * **deps-dev:** bump the npm-dev group with 3 updates ([#1394](https://github.com/mdn/fred/issues/1394)) ([0dec997](https://github.com/mdn/fred/commit/0dec997c4a8dada903b8a6d0a0979d81fff8e403))
27
+ * **deps-dev:** bump the npm-dev group with 6 updates ([#1382](https://github.com/mdn/fred/issues/1382)) ([5422888](https://github.com/mdn/fred/commit/5422888b09daf645698454f86e35e01a5653dd15))
28
+ * **deps-dev:** bump typescript-eslint from 8.57.0 to 8.57.1 in the npm-dev group ([#1390](https://github.com/mdn/fred/issues/1390)) ([31fb322](https://github.com/mdn/fred/commit/31fb322e755a07fd59188ff2ef551260ccc86517))
29
+ * **deps-dev:** bump typescript-eslint in the npm-dev group ([31fb322](https://github.com/mdn/fred/commit/31fb322e755a07fd59188ff2ef551260ccc86517))
30
+ * **deps-dev:** bump undici from 6.21.3 to 6.24.0 ([#1381](https://github.com/mdn/fred/issues/1381)) ([c6e7603](https://github.com/mdn/fred/commit/c6e76033d0b012496377ec8ed65b20e244e538c7))
31
+ * **deps-dev:** bump webpack-dev-middleware from 7.4.5 to 8.0.0 ([#1409](https://github.com/mdn/fred/issues/1409)) ([bab73ee](https://github.com/mdn/fred/commit/bab73eedd3a79b8d42361b06b6c0213c2b61ce4e))
32
+ * **deps:** bump @mdn/rari from 0.2.14 to 0.2.15 ([#1408](https://github.com/mdn/fred/issues/1408)) ([c74aef4](https://github.com/mdn/fred/commit/c74aef4df14e67eca3c1658f87c2fbad2f1590dd))
33
+ * **deps:** bump @mozilla/glean from 5.0.7 to 5.0.8 in the npm-prod group ([#1389](https://github.com/mdn/fred/issues/1389)) ([8739815](https://github.com/mdn/fred/commit/87398159fb943a38d350cab131e3e3a095c37194))
34
+ * **deps:** bump @mozilla/glean in the npm-prod group ([8739815](https://github.com/mdn/fred/commit/87398159fb943a38d350cab131e3e3a095c37194))
35
+ * **deps:** run `npm audit fix` ([#1401](https://github.com/mdn/fred/issues/1401)) ([7f4f353](https://github.com/mdn/fred/commit/7f4f353aabefa4973ae24ecfbea3070bb1ec1cc6))
36
+ * **eslint:** enable `@typescript-eslint/recommended` config ([#1392](https://github.com/mdn/fred/issues/1392)) ([ce55206](https://github.com/mdn/fred/commit/ce5520675bcfc973b2983d3f5710fed4cfac11de))
37
+ * **l10n/fr:** fix Observatory translation ([#1397](https://github.com/mdn/fred/issues/1397)) ([a084129](https://github.com/mdn/fred/commit/a084129a9b2d075b570ac7ce94a9e76d8ef4c3b3))
38
+ * **l10n:** machine translate missing German strings ([#1376](https://github.com/mdn/fred/issues/1376)) ([d773f10](https://github.com/mdn/fred/commit/d773f1029e2f3ff5b5f858a2ed91935258bae929))
39
+ * **l10n:** update French locale ([#1373](https://github.com/mdn/fred/issues/1373)) ([8d9d9d7](https://github.com/mdn/fred/commit/8d9d9d763e474b786b5fafe88b2f66d7fa884243))
40
+ * **menu:** add Scrimba link ([#1380](https://github.com/mdn/fred/issues/1380)) ([1775f43](https://github.com/mdn/fred/commit/1775f439c823991198e211493a5b877fc86d4b8b))
41
+ * **telemetry:** remove Google Analytics ([#1385](https://github.com/mdn/fred/issues/1385)) ([5b7de76](https://github.com/mdn/fred/commit/5b7de76b6d5681c8e36016346db3df01e5981590))
42
+
3
43
  ## [2.3.0](https://github.com/mdn/fred/compare/v2.2.1...v2.3.0) (2026-03-12)
4
44
 
5
45
 
@@ -22,7 +22,9 @@ export class ArticleFooter extends ServerComponent {
22
22
  >
23
23
  <div class="article-footer__inner">
24
24
  <div class="article-footer__svg-container">${svg}</div>
25
- <h2 id="feedback">Help improve MDN</h2>
25
+ <h2 id="feedback">
26
+ ${context.l10n("article-footer-title")`Help improve MDN`}
27
+ </h2>
26
28
  <mdn-content-feedback locale=${context.locale}></mdn-content-feedback>
27
29
  ${Contribute(context)} ${LastModified(context)} ${Links(context)}
28
30
  </div>
@@ -2,5 +2,5 @@ export interface PrismLanguage {
2
2
  alias?: string | string[];
3
3
  require?: string | string[];
4
4
  optional?: string | string[];
5
- [key: string]: any;
5
+ [key: string]: unknown;
6
6
  }
@@ -24,9 +24,6 @@ export const FXA_SIGNOUT_URL = parseString(
24
24
  "/users/fxa/login/logout/",
25
25
  );
26
26
 
27
- export const GA_ENABLED = parseBool("GA_ENABLED", false);
28
- export const GA_MEASUREMENT_ID = parseString("GA_MEASUREMENT_ID", "");
29
-
30
27
  /** Set to non-prod default, because we don't want glean to run without explicitly enabling. */
31
28
  export const GLEAN_ENABLED = parseBool("GLEAN_ENABLED", false);
32
29
  /** Set to non-prod default, because we don't want glean to run without explicitly enabling. */
@@ -91,7 +91,7 @@ export class MDNIssuesTable extends L10nMixin(LitElement) {
91
91
  typeof label === "object" && label !== null
92
92
  ? label.name
93
93
  : label;
94
- this.LABELS.includes(labelName)
94
+ return this.LABELS.includes(labelName)
95
95
  ? html`<span class="label">${labelName}</span>`
96
96
  : null;
97
97
  })}
@@ -140,14 +140,26 @@
140
140
  }
141
141
 
142
142
  em {
143
+ --padding: 0.5rem;
144
+ --border: 2px;
145
+
143
146
  display: block;
144
147
 
145
- padding-inline: 0.5rem;
148
+ padding-inline: var(--padding);
149
+ margin-left: calc(-1 * (var(--padding) + var(--border)));
146
150
 
147
151
  font-style: normal;
148
152
 
149
153
  background-color: var(--color-area-background);
150
- border-left: 2px solid var(--color-area-highlight-border);
154
+ border-left: var(--border) solid var(--color-area-highlight-border);
155
+
156
+ summary > & {
157
+ padding-left: calc(var(--padding) + var(--sidebar-list-indent-chevron));
158
+ margin-left: calc(
159
+ -1 *
160
+ (var(--padding) + var(--border) + var(--sidebar-list-indent-chevron))
161
+ );
162
+ }
151
163
  }
152
164
 
153
165
  .icon {
@@ -113,6 +113,8 @@ export class MDNLiveSampleResult extends L10nMixin(LitElement) {
113
113
  ...new Set([
114
114
  "allow-modals",
115
115
  "allow-downloads",
116
+ "allow-fullscreen",
117
+ "allow-orientation-lock",
116
118
  ...(this.sandbox?.split(" ") || []),
117
119
  ]),
118
120
  ].join(" ")}
@@ -378,6 +378,10 @@
378
378
  {
379
379
  "href": "/en-US/curriculum/",
380
380
  "text": "MDN Curriculum"
381
+ },
382
+ {
383
+ "href": "https://scrimba.com/frontend-path-c0j?via=mdn-learn-navbar",
384
+ "text": "Check out the video course from Scrimba, our partner"
381
385
  }
382
386
  ]
383
387
  },
@@ -126,12 +126,12 @@ export class OuterLayout extends ServerComponent {
126
126
  rel="search"
127
127
  type="application/opensearchdescription+xml"
128
128
  href="/opensearch.xml"
129
- title="MDN Web Docs"
129
+ title=${context.l10n("brand-web-docs")`MDN Web Docs`}
130
130
  />
131
131
  <link
132
132
  rel="alternate"
133
133
  type="application/rss+xml"
134
- title="MDN Blog RSS Feed"
134
+ title=${context.l10n("blog-rss-title")`MDN Blog RSS Feed`}
135
135
  href="https://developer.mozilla.org/en-US/blog/rss.xml"
136
136
  />
137
137
  </head>
@@ -160,14 +160,16 @@ export class OuterLayout extends ServerComponent {
160
160
 
161
161
  const title =
162
162
  ("doc" in context ? context.doc.pageTitle : context.pageTitle) ||
163
- "MDN Web Docs";
163
+ context.l10n("brand-web-docs")`MDN Web Docs`;
164
164
  const description =
165
165
  ("pageDescription" in context
166
166
  ? context.pageDescription
167
167
  : "doc" in context && "summary" in context.doc
168
168
  ? context.doc.summary
169
169
  : "") ||
170
- "The MDN Web Docs site provides information about Open Web technologies including HTML, CSS, and APIs for both Web sites and progressive web apps.";
170
+ context.l10n(
171
+ "meta-description",
172
+ )`The MDN Web Docs site provides information about Open Web technologies including HTML, CSS, and APIs for both Web sites and progressive web apps.`;
171
173
 
172
174
  const entries = {
173
175
  robots,
@@ -180,8 +182,8 @@ export class OuterLayout extends ServerComponent {
180
182
  "og:image:type": "image/png",
181
183
  "og:image:height": "1024",
182
184
  "og:image:width": "1024",
183
- "og:image:alt": "The MDN logo",
184
- "og:site_name": "MDN Web Docs",
185
+ "og:image:alt": context.l10n("logo-alt")`The MDN logo`,
186
+ "og:site_name": context.l10n("brand-web-docs")`MDN Web Docs`,
185
187
  "twitter:card": "summary",
186
188
  "twitter:creator": "MozDevNet",
187
189
  };
@@ -39,11 +39,11 @@ export const PlacementMixin = (Base) =>
39
39
  /**
40
40
  * @type {string | undefined}
41
41
  */
42
- this._viewedUrl;
42
+ this._viewedUrl = undefined;
43
43
  /**
44
44
  * @type {number | undefined}
45
45
  */
46
- this._version;
46
+ this._version = undefined;
47
47
  /** @type {ViewedController} */
48
48
  this.viewed = new ViewedController(this, this._placementRef, () => {
49
49
  if (this._viewedUrl) {
@@ -104,7 +104,11 @@ export class MDNPlayConsole extends LitElement {
104
104
  onConsole({ detail }) {
105
105
  if (detail.prop in this.vconsole) {
106
106
  const prop = /** @type {keyof typeof this.vconsole} */ (detail.prop);
107
- detail.args ? this.vconsole[prop](...detail.args) : this.vconsole[prop]();
107
+ if (detail.args) {
108
+ this.vconsole[prop](...detail.args);
109
+ } else {
110
+ this.vconsole[prop]();
111
+ }
108
112
  } else {
109
113
  this.vconsole.warn(
110
114
  "[Playground] Unsupported console message (see browser console)",
@@ -1,4 +1,4 @@
1
1
  export interface VConsole {
2
2
  prop: string;
3
- args: any[];
3
+ args: unknown[];
4
4
  }
@@ -14,7 +14,7 @@ export class MDNRecordVisit extends LitElement {
14
14
  constructor() {
15
15
  super();
16
16
  /** @type {string | undefined} */
17
- this.pageTitle;
17
+ this.pageTitle = undefined;
18
18
  }
19
19
 
20
20
  connectedCallback() {
@@ -11,6 +11,16 @@
11
11
  font-weight: normal;
12
12
 
13
13
  line-height: var(--font-line-normal);
14
+
15
+ code {
16
+ font-family: inherit;
17
+ }
18
+
19
+ code:first-of-type {
20
+ padding: 0.0625em 0.125em;
21
+ background-color: var(--color-background-secondary);
22
+ border-radius: var(--radius-normal);
23
+ }
14
24
  }
15
25
  }
16
26
 
@@ -1,6 +1,8 @@
1
1
  import { html } from "@lit-labs/ssr";
2
2
  import { nothing } from "lit";
3
3
 
4
+ import { unsafeHTML } from "lit/directives/unsafe-html.js";
5
+
4
6
  import { ArticleFooter } from "../article-footer/server.js";
5
7
  import { BaselineIndicator } from "../baseline-indicator/server.js";
6
8
  import { ContentSection } from "../content-section/server.js";
@@ -27,7 +29,7 @@ export class ReferenceLayout extends ServerComponent {
27
29
  ${WRITER_MODE ? WriterToolbar.render(context) : nothing}
28
30
  ${TranslationBanner.render(context)}
29
31
  <mdn-survey></mdn-survey>
30
- <h1>${doc.title}</h1>
32
+ <h1>${unsafeHTML(doc.titleHTML)}</h1>
31
33
  ${BaselineIndicator.render(context)} ${description}
32
34
  </div>
33
35
  <aside class="layout__right-sidebar reference-layout__toc">
package/entry.client.js CHANGED
@@ -3,7 +3,6 @@ import "@lit-labs/ssr-client/lit-element-hydrate-support.js";
3
3
 
4
4
  // hooks:
5
5
  import "./hooks/glean-init.js";
6
- import "./hooks/ga-init.js";
7
6
  import "./hooks/dialog-closedby.js";
8
7
  import "./l10n/hook.js";
9
8
  import "./hooks/load-elements.js";
@@ -22,9 +22,11 @@ for (const iframe of document.querySelectorAll("iframe[data-live-id]")) {
22
22
  if (codeExample) {
23
23
  codeExamples.push(codeExample);
24
24
  const { language, code } = codeExample;
25
- liveSampleCode[language]
26
- ? (liveSampleCode[language] += code)
27
- : (liveSampleCode[language] = code);
25
+ if (liveSampleCode[language]) {
26
+ liveSampleCode[language] += code;
27
+ } else {
28
+ liveSampleCode[language] = code;
29
+ }
28
30
  }
29
31
  }
30
32
 
@@ -2,13 +2,11 @@ content-feedback-question = War diese Übersetzung hilfreich?
2
2
  content-feedback-reason = Warum war diese Übersetzung nicht hilfreich?
3
3
  content-feedback-thanks = Vielen Dank für die Rückmeldung!
4
4
 
5
- reference-toc-header = In diesem Artikel
6
-
7
- footer-tagline = Dein Bauplan für ein besseres Internet.
5
+ footer-tagline = Der Bauplan für ein besseres Internet.
8
6
  footer-mofo = Besuche die gemeinnützige Muttergesellschaft der <a data-l10n-name="moco">Mozilla Corporation</a>, die <a data-l10n-name="mofo">Mozilla Foundation</a>.
9
7
  footer-copyright = Teile dieses Inhalts sind ©1998–{ $year } von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfügbar unter <a data-l10n-name="cc">einer Creative-Commons-Lizenz</a>.
10
8
 
11
- search-modal-site-search = Erweiterte Suche nach <em>{ $query }</em>
9
+ search-modal-site-search = Website-Suche nach <em>{ $query }</em>
12
10
 
13
11
  site-search-search-stats = { $results } Dokumente gefunden.
14
12
  site-search-suggestion-matches = { $relation ->
@@ -21,29 +19,297 @@ site-search-suggestion-matches = { $relation ->
21
19
  *[other] { $matches } Übereinstimmungen
22
20
  }
23
21
  }
24
- site-search-suggestions-text = Meinten Sie:
25
-
26
-
27
- theme-default = Systemstandard
28
22
 
29
23
  blog-time-to-read = { $minutes ->
30
24
  [one] { $minutes } Minute Lesezeit
31
25
  *[other] { $minutes } Minuten Lesezeit
32
26
  }
33
- blog-post-not-found = Blogartikel nicht gefunden.
34
27
 
35
- blog-previous = Voriger Artikel
36
- blog-next = Nächster Artikel
28
+ -brand-name-obs = HTTP Observatory
29
+ obs-report = Bericht
30
+ obs-title = { -brand-name-obs }
31
+ obs-landing-intro = Seit 2016 verbessert { -brand-name-obs } die Sicherheit durch Analyse der Einhaltung bewährter Sicherheitspraktiken. Es hat durch 47 Millionen Scans Einblicke in über 6,9 Millionen Websites geliefert.
32
+ obs-assessment = Das von Mozilla entwickelte { -brand-name-obs } führt eine umfassende Bewertung der HTTP-Header und weiterer zentraler Sicherheitskonfigurationen einer Website durch.
33
+ obs-scanning = Der automatisierte Scan-Prozess liefert detailliertes, handlungsorientiertes Feedback für Entwicklungsteams und Website-Administration und konzentriert sich darauf, potenzielle Sicherheitslücken zu erkennen und zu beheben.
34
+ obs-security = Das Tool unterstützt Entwicklungsteams und Website-Administration dabei, Websites in einem sich stetig weiterentwickelnden digitalen Umfeld gegen häufige Sicherheitsbedrohungen abzusichern.
35
+ obs-mdn = Das { -brand-name-obs } bietet wirksame Sicherheitseinblicke auf Grundlage von Mozillas Expertise und Engagement für ein sichereres Internet sowie basierend auf etablierten Trends und Richtlinien.
37
36
 
38
- No = Nein
39
- Submit = Abschicken
40
- Yes = Ja
41
-
42
- obs-report = Report
37
+ article-footer-last-modified = Diese Seite wurde zuletzt am <time data-l10n-name="date">{ $date }</time> von <a data-l10n-name="contributors">MDN-Mitwirkenden</a> bearbeitet.
38
+ article-footer-source-title = Ordner: { $folder } (öffnet in neuem Tab)
39
+ baseline-asterisk = Einige Teile dieser Funktion werden möglicherweise unterschiedlich gut unterstützt.
40
+ baseline-high-extra = Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit { $date } browserübergreifend verfügbar.
41
+ baseline-low-extra = Seit { $date } funktioniert diese Funktion auf aktuellen Geräten und in aktuellen Browserversionen. Auf älteren Geräten oder in älteren Browsern funktioniert sie möglicherweise nicht.
42
+ baseline-not-extra = Diese Funktion ist nicht Baseline, da sie in einigen der am weitesten verbreiteten Browser nicht funktioniert.
43
+ baseline-supported-in = Unterstützt in { $browsers }
44
+ baseline-unsupported-in = In { $browsers } nicht weitgehend unterstützt
45
+ baseline-supported-and-unsupported-in = Unterstützt in { $supported }, aber in { $unsupported } nicht weitgehend unterstützt
46
+ homepage-hero-title = Ressourcen für Entwickelnde,<br> von Entwickelnden
47
+ homepage-hero-description = Dokumentation zu <a data-l10n-name="css">CSS</a>, <a data-l10n-name="html">HTML</a> und <a data-l10n-name="js">JavaScript</a> – seit 2005.
48
+ not-found-title = Seite nicht gefunden
49
+ not-found-description = Entschuldigung, die Seite <code data-l10n-name="url">{ $url }</code> wurde nicht gefunden.
50
+ not-found-fallback-english = <strong data-l10n-name="strong">Gute Nachricht:</strong> Die angeforderte Seite existiert auf <em data-l10n-name="em">Englisch</em>.
51
+ not-found-fallback-search = Die angeforderte Seite existiert nicht, aber Sie könnten eine Website-Suche versuchen nach:
52
+ not-found-back = Zurück zur Startseite
53
+ compat-browser-version-date = { $browser } { $version } – Veröffentlichungsdatum: { $date }
54
+ compat-browser-version-released = Veröffentlichungsdatum: { $date }
55
+ compat-link-source-title = Datei: { $filename }
56
+ compat-support-prefix = Implementiert mit dem Hersteller-Präfix: { $prefix }
57
+ compat-support-altname = Alternativer Name: { $altname }
58
+ compat-support-removed = Ab { $version } entfernt
59
+ compat-support-see-impl-url = Siehe <a data-l10n-name="impl_url">{ $label }</a>
60
+ compat-support-flags =
61
+ { NUMBER($has_added) ->
62
+ [one] Ab Version { $version_added }
63
+ *[other] { "" }
64
+ }{ $has_last ->
65
+ [one]
66
+ { NUMBER($has_added) ->
67
+ *[zero] Bis { $versionLast } muss
68
+ [one] { " " }bis { $versionLast } muss
69
+ }
70
+ *[zero]
71
+ { NUMBER($has_added) ->
72
+ *[zero] muss
73
+ [one] { " " }muss
74
+ }
75
+ }
76
+ { " " }die Einstellung <code data-l10n-name="name">{ $flag_name }</code>{ " " }
77
+ { $flag_type ->
78
+ *[preference] explizit festgelegt werden
79
+ [runtime_flag] als Laufzeit-Flag explizit festgelegt werden
43
80
 
44
- obs-title = HTTP Observatory
45
- obs-landing-intro = Seit 2016 verbessert HTTP Observatory die Sicherheit durch Analyse der Einhaltung bewährter Sicherheitspraktiken. Es hat durch 47 Millionen Scans Einblicke in über 6,9 Millionen Websites geliefert.
46
- obs-assessment = Das von Mozilla entwickelte HTTP Observatory führt eine umfassende Bewertung der HTTP-Header und weiterer zentraler Sicherheitskonfigurationen einer Website durch.
47
- obs-scanning = Der automatisierte Scan-Prozess liefert Entwicklern und Website-Administratoren detailliertes, handlungsorientiertes Feedback und konzentriert sich darauf, potenzielle Sicherheitslücken zu erkennen und zu beheben.
48
- obs-security = Das Tool unterstützt Entwickler und Website-Administratoren maßgeblich dabei, ihre Websites in einem sich stetig weiterentwickelnden digitalen Umfeld gegen häufige Sicherheitsbedrohungen abzusichern.
49
- obs-mdn = Das HTTP Observatory bietet wirksame Sicherheitseinblicke auf Grundlage von Mozillas Expertise und Engagement für ein sichereres Internet sowie basierend auf etablierten Trends und Richtlinien.
81
+ }{ NUMBER($has_value) ->
82
+ [one] { " " }auf <code data-l10n-name="value">{ $flag_value }</code>
83
+ *[other] { "" }
84
+ }{ "." }
85
+ { NUMBER($has_pref_url) ->
86
+ [one]
87
+ { $flag_type ->
88
+ [preference] Um die Einstellungen in { $browser_name } zu ändern, besuchen Sie { $browser_pref_url }.
89
+ *[other] { "" }
90
+ }
91
+ *[other] { "" }
92
+ }
93
+ compat-legend-yes = { compat-support-full }
94
+ compat-legend-partial = { compat-support-partial }
95
+ compat-legend-preview = In Entwicklung. In einer Vorabversion unterstützt.
96
+ compat-legend-no = { compat-support-no }
97
+ compat-legend-unknown = Kompatibilität unbekannt
98
+ compat-legend-experimental = { compat-experimental }. Verhaltensänderungen in der Zukunft sind zu erwarten.
99
+ compat-legend-nonstandard = { compat-nonstandard }. Überprüfen Sie die browserübergreifende Unterstützung vor der Verwendung.
100
+ compat-legend-deprecated = { compat-deprecated }. Nicht für neue Websites verwenden.
101
+ compat-legend-footnote = Implementierungshinweise ansehen.
102
+ compat-legend-disabled = Diese Funktion muss explizit aktiviert werden.
103
+ compat-legend-altname = Verwendet einen nicht standardmäßigen Namen.
104
+ compat-legend-prefix = Erfordert ein Hersteller-Präfix oder einen anderen Namen zur Verwendung.
105
+ compat-legend-more = Hat mehr Kompatibilitätsinformationen.
106
+ placement-note = Anzeige
107
+ placement-no = Keine Werbung erwünscht?
108
+ pagination-next = Nächste Seite
109
+ pagination-prev = Vorherige Seite
110
+ pagination-current = Aktuelle Seite
111
+ pagination-goto = Zur Seite { $page }
112
+ logout = Abmelden
113
+ login = Anmelden
114
+ example-play-button-label = Abspielen
115
+ example-play-button-title = Beispiel im MDN Playground ausführen (öffnet in neuem Tab)
116
+ writer-reload-polling = Aktualisierung alle { $seconds } s
117
+ a11y-menu-skip-to-main-content = Zum Hauptinhalt springen
118
+ a11y-menu-skip-to-search = Zur Suche springen
119
+ article-footer-learn-how-to-contribute = Erfahren Sie, wie Sie beitragen können
120
+ article-footer-view-this-page-on-github = Diese Seite auf GitHub ansehen
121
+ article-footer-this-will-take-you-to-github-to = Dies führt Sie zu GitHub, um ein neues Problem zu melden.
122
+ article-footer-report-a-problem-with-this-conte = Ein Problem mit diesem Inhalt melden
123
+ baseline-indicator-baseline-cross = Baseline (nicht erfüllt)
124
+ baseline-indicator-baseline-check = Baseline (erfüllt)
125
+ baseline-indicator-limited-availability = Eingeschränkt verfügbar
126
+ baseline-indicator-baseline = Baseline
127
+ baseline-indicator-widely-available = Weitgehend verfügbar
128
+ baseline-indicator-newly-available = Neu verfügbar
129
+ baseline-indicator-check = Häkchen
130
+ baseline-indicator-cross = Kreuz
131
+ baseline-indicator-learn-more = Mehr erfahren
132
+ baseline-indicator-see-full-compatibility = Vollständige Kompatibilität anzeigen
133
+ baseline-indicator-report-feedback = Feedback geben
134
+ blog-previous = Vorheriger Beitrag
135
+ blog-next = Nächster Beitrag
136
+ blog-index-blog-it-better = Blog it better
137
+ reference-toc-header = In diesem Artikel
138
+ blog-post-not-found = Blogartikel nicht gefunden.
139
+ collection-save-button-save-in-collection = In einer Sammlung speichern
140
+ collection-save-button-remove = Entfernen
141
+ collection-save-button-save = Speichern
142
+ collection-save-button-add-to-collection = Zur Sammlung hinzufügen
143
+ collection-save-button-collection = Sammlung:
144
+ collection-save-button-saved-articles = Gespeicherte Artikel
145
+ collection-save-button-new-collection = Neue Sammlung
146
+ collection-save-button-name = Name:
147
+ collection-save-button-note = Notiz:
148
+ collection-save-button-saving = Wird gespeichert…
149
+ collection-save-button-cancel = Abbrechen
150
+ collection-save-button-deleting = Wird gelöscht…
151
+ collection-save-button-delete = Löschen
152
+ theme-default = Systemeinstellung
153
+ color-theme-light = Hell
154
+ color-theme-dark = Dunkel
155
+ color-theme-switch-color-theme = Farbschema wechseln
156
+ color-theme-theme = Farbschema
157
+ compat-link-report-issue-title = Ein Problem mit diesen Kompatibilitätsdaten melden
158
+ compat-link-report-issue = Probleme mit diesen Kompatibilitätsdaten melden
159
+ compat-link-source = Daten auf GitHub ansehen
160
+ compat-experimental = Experimentell
161
+ compat-deprecated = Veraltet
162
+ compat-nonstandard = Nicht standardisiert
163
+ compat-support-partial = Teilweise unterstützt
164
+ compat-support-preview-browser = Unterstützung in einer Vorabversion des Browsers
165
+ compat-support-full = Vollständig unterstützt
166
+ compat-support-no = Nicht unterstützt
167
+ compat-support-unknown = Unterstützung unbekannt
168
+ compat-yes = Ja
169
+ compat-partial = Teilweise
170
+ compat-no = Nein
171
+ compat-support-preview = Unterstützt in Vorabversion
172
+ compat-legend = Legende
173
+ compat-legend-tip = Tipp: Sie können auf eine Zelle klicken oder tippen, um weitere Informationen zu erhalten.
174
+ compat-link-report-missing-title = Fehlende Kompatibilitätsdaten melden
175
+ compat-link-report-missing = Dieses Problem melden
176
+ compat-js-required = JavaScript aktivieren, um diese Browser-Kompatibilitätstabelle anzuzeigen.
177
+ compat-loading = Wird geladen…
178
+ content-feedback-content-is-out-of-date = Inhalt ist veraltet
179
+ content-feedback-missing-information = Fehlende Informationen
180
+ content-feedback-code-examples-not-working-as-exp = Codebeispiele funktionieren nicht wie erwartet
181
+ content-feedback-other = Sonstiges
182
+ content-feedback-yes = Ja
183
+ content-feedback-no = Nein
184
+ content-feedback-submit = Absenden
185
+ contributor-spotlight-want-to-be-part-of-the-journey = Möchten Sie Teil der Reise sein?
186
+ contributor-spotlight-our-constant-quest-for-innovatio = Unsere ständige Suche nach Innovation beginnt hier, mit Ihnen. Jeder Teil von MDN (Dokumentationen, Demos und die Website selbst) entsteht aus unserer großartigen offenen Entwicklergemeinschaft. Bitte machen Sie mit!
187
+ contributor-spotlight-get-involved = Mitmachen
188
+ contributor-spotlight-contributor-profile = Mitwirkendenprofil
189
+ copy-button-copied = Kopiert
190
+ copy-button-copy-failed = Kopieren fehlgeschlagen!
191
+ copy-button-copy = Kopieren
192
+ footer-mdn-on-github = MDN auf GitHub
193
+ footer-mdn-on-bluesky = MDN auf Bluesky
194
+ footer-mdn-on-x = MDN auf X
195
+ footer-mdn-on-mastodon = MDN auf Mastodon
196
+ footer-mdn-blog-rss-feed = MDN-Blog-RSS-Feed
197
+ footer-mdn = MDN
198
+ footer-about = Über uns
199
+ footer-blog = Blog
200
+ footer-mozilla-careers = Jobs bei Mozilla
201
+ footer-advertise-with-us = Mit uns werben
202
+ footer-mdn-plus = MDN Plus
203
+ footer-product-help = Produkthilfe
204
+ footer-contribute = Mitmachen
205
+ footer-mdn-community = MDN-Community
206
+ footer-community-resources = Community-Ressourcen
207
+ footer-writing-guidelines = Schreibrichtlinien
208
+ footer-mdn-discord = MDN-Discord
209
+ footer-developers = Entwicklung
210
+ footer-web-technologies = Webtechnologien
211
+ footer-learn-web-development = Webentwicklung lernen
212
+ footer-guides = Leitfäden
213
+ footer-tutorials = Tutorials
214
+ footer-glossary = Glossar
215
+ footer-hacks-blog = Hacks-Blog
216
+ footer-website-privacy-notice = Datenschutzerklärung der Website
217
+ footer-telemetry-settings = Telemetrie-Einstellungen
218
+ footer-legal = Rechtliches
219
+ footer-community-participation-guidelin = Community-Teilnahmerichtlinien
220
+ footer-mdn-logo = MDN-Logo
221
+ footer-mozilla-logo = Mozilla-Logo
222
+ generic-toc__header = In diesem Artikel
223
+ homepage-body-featured-articles = Ausgewählte Artikel
224
+ homepage-body-latest-news = Neuigkeiten
225
+ homepage-body-recent-contributions = Neueste Beiträge
226
+ homepage-contributor-spotlight-contributor-spotlight = Mitwirkende im Fokus
227
+ homepage-contributor-spotlight-get-involved = Mitmachen
228
+ homepage-search-search-the-site = Website durchsuchen
229
+ homepage-search-search = Suche
230
+ interactive-example-reset = Zurücksetzen
231
+ interactive-example-value-select = Wertauswahl
232
+ interactive-example-the-current-value-is-not-support = Der aktuelle Wert wird von Ihrem Browser nicht unterstützt.
233
+ interactive-example-run-example-and-show-console-ou = Beispiel ausführen und Konsolenausgabe anzeigen
234
+ interactive-example-run = Ausführen
235
+ interactive-example-reset-example-and-clear-console = Beispiel zurücksetzen und Konsolenausgabe löschen
236
+ interactive-example-console-output = Konsolenausgabe
237
+ interactive-example-output = Ausgabe
238
+ issues-table-loading-issues = GitHub-Issues werden geladen…
239
+ issues-table-title = Titel
240
+ issues-table-repository = Repository
241
+ language-switcher-remember-language = Sprache merken
242
+ language-switcher-enable-this-setting-to-always-sw = Aktivieren Sie diese Einstellung, um immer zur aktuell ausgewählten Sprache zu wechseln, wenn sie verfügbar ist. (Klicken Sie hier, um mehr zu erfahren.)
243
+ language-switcher-learn-more = Mehr erfahren
244
+ login-button-login = Anmelden
245
+ modal-exit-modal = Modal schließen
246
+ navigation-toggle-navigation = Navigation umschalten
247
+ obs-about-title = Über das HTTP Observatory
248
+ observatory-landing-read-our-faq = FAQ lesen
249
+ observatory-landing-report-feedback = Feedback geben
250
+ observatory-rescan-button-rescan = Erneut scannen
251
+ observatory-rescan-button-wait-a-minute-to-rescan = Warten Sie eine Minute, um erneut zu scannen
252
+ observatory-results-report-feedback = Feedback geben
253
+ observatory-results-faq = FAQ
254
+ observatory-tests-and-scores-loading-tests-and-scoring-data = Tests und Bewertungsdaten werden geladen…
255
+ observatory-tests-and-scores-see = Siehe
256
+ observatory-tests-and-scores-for-guidance = für weitere Hinweise.
257
+ observatory-tests-and-scores-test-result = Testergebnis
258
+ observatory-tests-and-scores-description = Beschreibung
259
+ observatory-tests-and-scores-modifier = Modifikator
260
+ observatory-tests-and-scores-failed-to-load-tests-and-scoring = Tests und Bewertungsdaten konnten nicht geladen werden. Bitte versuchen Sie es später erneut.
261
+ pagination-pagination = Seitennavigation
262
+ playground-do-you-really-want-to-clear-ever = Wirklich alles löschen?
263
+ playground-do-you-really-want-to-revert-you = Alle Änderungen zurücksetzen?
264
+ playground-playground = Playground
265
+ playground-format = Formatieren
266
+ playground-run = Ausführen
267
+ playground-share = Teilen
268
+ playground-clear = Leeren
269
+ playground-reset = Zurücksetzen
270
+ playground-seeing-something-inappropriate = Sehen Sie etwas Unangemessenes?
271
+ playground-console = Konsole
272
+ playground-share-markdown = Markdown teilen
273
+ playground-copy-markdown-to-clipboard = Markdown in die Zwischenablage kopieren
274
+ playground-share-data-url = Code via Daten-URL teilen
275
+ playground-copy-data-url-to-clipboard = Daten-URL in die Zwischenablage kopieren
276
+ playground-share-your-code-via-permalink = Code via Permalink teilen
277
+ playground-copy-to-clipboard = In die Zwischenablage kopieren
278
+ playground-create-link = Link erstellen
279
+ playground-report-this-malicious-or-inappro = Diesen Playground wegen schädlicher oder unangemessener Inhalte melden
280
+ playground-can-you-please-share-some-detail = Bitte beschreiben Sie kurz, was an diesem Inhalt problematisch ist:
281
+ playground-cancel = Abbrechen
282
+ playground-report = Melden
283
+ recently-visited-recently-visited = Zuletzt besucht
284
+ scrim-inline-clicking-will-load-content-from = Durch Klicken werden Inhalte von scrimba.com geladen
285
+ scrim-inline-toggle-fullscreen = Vollbild umschalten
286
+ scrim-inline-open-on-scrimba = Auf Scrimba öffnen
287
+ scrim-inline-load-scrim-and-open-dialog = Scrim laden und Dialog öffnen.
288
+ search-button-search-the-site = Website durchsuchen
289
+ search-modal-loading-search-index = Suchindex wird geladen…
290
+ search-modal-search = Suche
291
+ search-modal-exit-search = Suche schließen
292
+ sidebar-filter-filter-sidebar = Seitenleiste filtern
293
+ sidebar-filter-filter = Filtern
294
+ sidebar-filter-clear-filter-input = Filterfeld leeren
295
+ site-search-search = Suchen
296
+ site-search-previous = Zurück
297
+ site-search-next = Weiter
298
+ site-search-suggestions-text = Meinten Sie:
299
+ site-search-searching = Suche läuft…
300
+ site-search-language = Sprache
301
+ site-search-both = Beides
302
+ specifications-list-this-feature-does-not-appear-to = Diese Funktion scheint in keiner Spezifikation definiert zu sein.
303
+ specifications-list-specification = Spezifikation
304
+ survey-hide-this-survey = Diese Umfrage ausblenden
305
+ survey-take-survey-opens-in-a-new-tab = An der Umfrage teilnehmen (öffnet in neuem Tab)
306
+ toggle-sidebar-toggle-sidebar = Seitenleiste umschalten
307
+ user-menu-ai-help = KI-Hilfe
308
+ user-menu-collections = Sammlungen
309
+ user-menu-updates = Updates
310
+ user-menu-settings = Meine Einstellungen
311
+ user-menu-help = Hilfe
312
+ user-menu-feedback = Feedback
313
+ user-menu-user = Konto
314
+ writer-open-editor-open-in-editor = Im Editor öffnen
315
+ writer-toolbar-view-on-mdn = Auf MDN anzeigen