@jjlmoya/utils-nature 1.13.0 → 1.15.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 (84) hide show
  1. package/package.json +1 -1
  2. package/src/category/i18n/fr.ts +6 -6
  3. package/src/category/i18n/ru.ts +5 -5
  4. package/src/layouts/PreviewLayout.astro +1 -1
  5. package/src/pages/[locale]/[slug].astro +32 -14
  6. package/src/tests/diacritics_density.test.ts +118 -0
  7. package/src/tests/inverted_punctuation.test.ts +84 -0
  8. package/src/tests/locale_completeness.test.ts +1 -31
  9. package/src/tests/no_en_dash.test.ts +71 -0
  10. package/src/tests/script_density.test.ts +94 -0
  11. package/src/tests/shared-test-helpers.ts +56 -0
  12. package/src/tests/tool_exports.test.ts +34 -0
  13. package/src/tool/cricketThermometer/bibliography.ts +12 -0
  14. package/src/tool/cricketThermometer/i18n/de.ts +6 -18
  15. package/src/tool/cricketThermometer/i18n/en.ts +3 -15
  16. package/src/tool/cricketThermometer/i18n/es.ts +3 -15
  17. package/src/tool/cricketThermometer/i18n/fr.ts +9 -21
  18. package/src/tool/cricketThermometer/i18n/id.ts +3 -15
  19. package/src/tool/cricketThermometer/i18n/it.ts +3 -15
  20. package/src/tool/cricketThermometer/i18n/ja.ts +3 -15
  21. package/src/tool/cricketThermometer/i18n/ko.ts +3 -15
  22. package/src/tool/cricketThermometer/i18n/nl.ts +3 -15
  23. package/src/tool/cricketThermometer/i18n/pl.ts +6 -18
  24. package/src/tool/cricketThermometer/i18n/pt.ts +3 -15
  25. package/src/tool/cricketThermometer/i18n/ru.ts +8 -20
  26. package/src/tool/cricketThermometer/i18n/sv.ts +3 -15
  27. package/src/tool/cricketThermometer/i18n/tr.ts +3 -15
  28. package/src/tool/cricketThermometer/i18n/zh.ts +8 -20
  29. package/src/tool/cricketThermometer/seo.astro +1 -1
  30. package/src/tool/cricketThermometer/ui.ts +0 -2
  31. package/src/tool/digitalCarbon/bibliography.ts +8 -0
  32. package/src/tool/digitalCarbon/digital-carbon-footprint-calculator.css +57 -1
  33. package/src/tool/digitalCarbon/i18n/de.ts +4 -10
  34. package/src/tool/digitalCarbon/i18n/en.ts +2 -8
  35. package/src/tool/digitalCarbon/i18n/es.ts +2 -8
  36. package/src/tool/digitalCarbon/i18n/fr.ts +6 -12
  37. package/src/tool/digitalCarbon/i18n/id.ts +2 -8
  38. package/src/tool/digitalCarbon/i18n/it.ts +2 -8
  39. package/src/tool/digitalCarbon/i18n/ja.ts +2 -8
  40. package/src/tool/digitalCarbon/i18n/ko.ts +2 -8
  41. package/src/tool/digitalCarbon/i18n/nl.ts +2 -8
  42. package/src/tool/digitalCarbon/i18n/pl.ts +2 -8
  43. package/src/tool/digitalCarbon/i18n/pt.ts +2 -8
  44. package/src/tool/digitalCarbon/i18n/ru.ts +3 -9
  45. package/src/tool/digitalCarbon/i18n/sv.ts +2 -8
  46. package/src/tool/digitalCarbon/i18n/tr.ts +2 -8
  47. package/src/tool/digitalCarbon/i18n/zh.ts +2 -8
  48. package/src/tool/digitalCarbon/seo.astro +1 -1
  49. package/src/tool/rainHarvester/bibliography.ts +20 -0
  50. package/src/tool/rainHarvester/i18n/de.ts +5 -23
  51. package/src/tool/rainHarvester/i18n/en.ts +2 -20
  52. package/src/tool/rainHarvester/i18n/es.ts +2 -20
  53. package/src/tool/rainHarvester/i18n/fr.ts +3 -21
  54. package/src/tool/rainHarvester/i18n/id.ts +2 -20
  55. package/src/tool/rainHarvester/i18n/it.ts +2 -20
  56. package/src/tool/rainHarvester/i18n/ja.ts +2 -20
  57. package/src/tool/rainHarvester/i18n/ko.ts +2 -20
  58. package/src/tool/rainHarvester/i18n/nl.ts +2 -20
  59. package/src/tool/rainHarvester/i18n/pl.ts +5 -23
  60. package/src/tool/rainHarvester/i18n/pt.ts +2 -20
  61. package/src/tool/rainHarvester/i18n/ru.ts +8 -26
  62. package/src/tool/rainHarvester/i18n/sv.ts +2 -20
  63. package/src/tool/rainHarvester/i18n/tr.ts +2 -20
  64. package/src/tool/rainHarvester/i18n/zh.ts +5 -23
  65. package/src/tool/rainHarvester/seo.astro +1 -1
  66. package/src/tool/seedCalculator/bibliography.ts +16 -0
  67. package/src/tool/seedCalculator/i18n/de.ts +2 -18
  68. package/src/tool/seedCalculator/i18n/en.ts +2 -18
  69. package/src/tool/seedCalculator/i18n/es.ts +2 -18
  70. package/src/tool/seedCalculator/i18n/fr.ts +3 -19
  71. package/src/tool/seedCalculator/i18n/id.ts +2 -18
  72. package/src/tool/seedCalculator/i18n/it.ts +2 -18
  73. package/src/tool/seedCalculator/i18n/ja.ts +2 -18
  74. package/src/tool/seedCalculator/i18n/ko.ts +2 -18
  75. package/src/tool/seedCalculator/i18n/nl.ts +2 -18
  76. package/src/tool/seedCalculator/i18n/pl.ts +3 -19
  77. package/src/tool/seedCalculator/i18n/pt.ts +2 -18
  78. package/src/tool/seedCalculator/i18n/ru.ts +6 -22
  79. package/src/tool/seedCalculator/i18n/sv.ts +2 -18
  80. package/src/tool/seedCalculator/i18n/tr.ts +2 -18
  81. package/src/tool/seedCalculator/i18n/zh.ts +2 -18
  82. package/src/tool/seedCalculator/seo.astro +8 -2
  83. package/src/tool/seedCalculator/ui.ts +0 -2
  84. package/src/types.ts +0 -2
@@ -1,9 +1,10 @@
1
1
  import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
2
3
  import type { ToolLocaleContent } from '../../../types';
3
4
  import type { CricketThermometerUI } from '../ui';
4
5
 
5
6
  const slug = 'sverchkovyy-termometr';
6
- const title = 'Сверчковый термометр Калькулятор температуры по закону Долбера';
7
+ const title = 'Сверчковый термометр: Калькулятор температуры по закону Долбера';
7
8
  const description =
8
9
  'Нет термометра? Послушайте сверчков. Рассчитайте точную температуру, подсчитав количество стрекотаний с помощью нашего калькулятора закона Долбера.';
9
10
 
@@ -16,7 +17,7 @@ const faqData = [
16
17
  {
17
18
  question: 'Почему в жару сверчки стрекочут быстрее?',
18
19
  answer:
19
- 'Сверчки холоднокровные животные (эктотермы). Скорость их метаболических процессов и мышечных сокращений зависит от внешней температуры; чем теплее, тем больше у них энергии для быстрого издания звуков.',
20
+ 'Сверчки - холоднокровные животные (эктотермы). Скорость их метаболических процессов и мышечных сокращений зависит от внешней температуры; чем теплее, тем больше у них энергии для быстрого издания звуков.',
20
21
  },
21
22
  {
22
23
  question: 'Насколько точны эти измерения?',
@@ -87,19 +88,8 @@ export const content: ToolLocaleContent<CricketThermometerUI> = {
87
88
  slug,
88
89
  title,
89
90
  description,
90
- faqTitle: 'Часто задаваемые вопросы',
91
91
  faq: faqData,
92
- bibliographyTitle: 'Научные источники',
93
- bibliography: [
94
- {
95
- name: 'The American Naturalist - The Cricket as a Thermometer',
96
- url: 'https://www.jstor.org/stable/2453256',
97
- },
98
- {
99
- name: 'Wikipedia - Dolbear\'s Law',
100
- url: 'https://en.wikipedia.org/wiki/Dolbear%27s_law',
101
- },
102
- ],
92
+ bibliography,
103
93
  howTo: howToData,
104
94
  schemas: [faqSchema, howToSchema, appSchema],
105
95
  seo: [
@@ -114,8 +104,8 @@ export const content: ToolLocaleContent<CricketThermometerUI> = {
114
104
  },
115
105
  {
116
106
  type: 'tip',
117
- title: 'Почему сверчки «поют»?',
118
- html: '<p>«Песня» сверчка, или <strong>стридуляция</strong>, на самом деле является брачным зовом. Самцы трут крыльями (не ногами) друг о друга, чтобы создать этот звук. Удивительно, но так как они являются холоднокровными животными (эктотермами), скорость этого трения напрямую зависит от тепловой энергии воздуха.</p>',
107
+ title: 'Почему сверчки "поют"?',
108
+ html: '<p>"Песня" сверчка, или <strong>стридуляция</strong>, на самом деле является брачным зовом. Самцы трут крыльями (не ногами) друг о друга, чтобы создать этот звук. Удивительно, но так как они являются холоднокровными животными (эктотермами), скорость этого трения напрямую зависит от тепловой энергии воздуха.</p>',
119
109
  },
120
110
  {
121
111
  type: 'title',
@@ -156,9 +146,9 @@ export const content: ToolLocaleContent<CricketThermometerUI> = {
156
146
  {
157
147
  type: 'list',
158
148
  items: [
159
- '<strong>Термометры любви:</strong> Некоторые теории предполагают, что самки предпочитают самцов, которые поют на «правильной» частоте для текущей температуры, так как это указывает на то, что самец здоров и имеет сильный метаболизм.',
149
+ '<strong>Термометры любви:</strong> Некоторые теории предполагают, что самки предпочитают самцов, которые поют на "правильной" частоте для текущей температуры, так как это указывает на то, что самец здоров и имеет сильный метаболизм.',
160
150
  '<strong>Предел холода:</strong> Ниже 10°C (50°F) большинство сверчков перестают петь, потому что их метаболизм слишком медленный для поддержания мышечного усилия.',
161
- '<strong>Синхронизация:</strong> Теплыми ночами тысячи сверчков могут синхронизировать свое стрекотание, создавая впечатляющий звуковой эффект «волны».',
151
+ '<strong>Синхронизация:</strong> Теплыми ночами тысячи сверчков могут синхронизировать свое стрекотание, создавая впечатляющий звуковой эффект "волны".',
162
152
  ],
163
153
  },
164
154
  {
@@ -175,7 +165,5 @@ export const content: ToolLocaleContent<CricketThermometerUI> = {
175
165
  btnSoundOn: 'Звук: Вкл.',
176
166
  btnSoundOff: 'Звук: Выкл.',
177
167
  unitChirpsMin: 'стр./мин',
178
- faqTitle: 'Часто задаваемые вопросы',
179
- bibliographyTitle: 'Научные источники',
180
168
  },
181
169
  };
@@ -1,9 +1,10 @@
1
1
  import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
2
3
  import type { ToolLocaleContent } from '../../../types';
3
4
  import type { CricketThermometerUI } from '../ui';
4
5
 
5
6
  const slug = 'syrstermometer';
6
- const title = 'Syrstermometer Dolbears lag temperaturkalkylator';
7
+ const title = 'Syrstermometer: Dolbears lag temperaturkalkylator';
7
8
  const description =
8
9
  'Ingen termometer? Lyssna på syrsorna. Beräkna exakt temperatur genom att räkna spelningar med vår kalkylator för Dolbears lag.';
9
10
 
@@ -87,19 +88,8 @@ export const content: ToolLocaleContent<CricketThermometerUI> = {
87
88
  slug,
88
89
  title,
89
90
  description,
90
- faqTitle: 'Vanliga frågor',
91
91
  faq: faqData,
92
- bibliographyTitle: 'Vetenskapliga referenser',
93
- bibliography: [
94
- {
95
- name: 'The American Naturalist - The Cricket as a Thermometer',
96
- url: 'https://www.jstor.org/stable/2453256',
97
- },
98
- {
99
- name: 'Wikipedia - Dolbear\'s Law',
100
- url: 'https://en.wikipedia.org/wiki/Dolbear%27s_law',
101
- },
102
- ],
92
+ bibliography,
103
93
  howTo: howToData,
104
94
  schemas: [faqSchema, howToSchema, appSchema],
105
95
  seo: [
@@ -175,7 +165,5 @@ export const content: ToolLocaleContent<CricketThermometerUI> = {
175
165
  btnSoundOn: 'Ljud: På',
176
166
  btnSoundOff: 'Ljud: Av',
177
167
  unitChirpsMin: 'spel/min',
178
- faqTitle: 'Vanliga frågor',
179
- bibliographyTitle: 'Vetenskapliga referenser',
180
168
  },
181
169
  };
@@ -1,9 +1,10 @@
1
1
  import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
2
3
  import type { ToolLocaleContent } from '../../../types';
3
4
  import type { CricketThermometerUI } from '../ui';
4
5
 
5
6
  const slug = 'cricket-termometer';
6
- const title = 'Cırcır Böceği Termometresi Dolbear Yasası Sıcaklık Hesaplayıcı';
7
+ const title = 'Cırcır Böceği Termometresi: Dolbear Yasası Sıcaklık Hesaplayıcı';
7
8
  const description =
8
9
  'Termometreniz mi yok? Cırcır böceklerini dinleyin. Dolbear Yasası hesaplayıcımızla ötüşleri sayarak tam sıcaklığı hesaplayın.';
9
10
 
@@ -87,19 +88,8 @@ export const content: ToolLocaleContent<CricketThermometerUI> = {
87
88
  slug,
88
89
  title,
89
90
  description,
90
- faqTitle: 'Sıkça Sorulan Sorular',
91
91
  faq: faqData,
92
- bibliographyTitle: 'Bilimsel Referanslar',
93
- bibliography: [
94
- {
95
- name: 'The American Naturalist - The Cricket as a Thermometer',
96
- url: 'https://www.jstor.org/stable/2453256',
97
- },
98
- {
99
- name: 'Wikipedia - Dolbear\'s Law',
100
- url: 'https://en.wikipedia.org/wiki/Dolbear%27s_law',
101
- },
102
- ],
92
+ bibliography,
103
93
  howTo: howToData,
104
94
  schemas: [faqSchema, howToSchema, appSchema],
105
95
  seo: [
@@ -175,7 +165,5 @@ export const content: ToolLocaleContent<CricketThermometerUI> = {
175
165
  btnSoundOn: 'Ses: Açık',
176
166
  btnSoundOff: 'Ses: Kapalı',
177
167
  unitChirpsMin: 'ötüş/dak',
178
- faqTitle: 'Sıkça Sorulan Sorular',
179
- bibliographyTitle: 'Bilimsel Referanslar',
180
168
  },
181
169
  };
@@ -1,9 +1,10 @@
1
1
  import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
2
3
  import type { ToolLocaleContent } from '../../../types';
3
4
  import type { CricketThermometerUI } from '../ui';
4
5
 
5
6
  const slug = 'cricket-thermometer';
6
- const title = '蟋蟀温度计 杜倍耳定律温度计算器';
7
+ const title = '蟋蟀温度计: 杜倍耳定律温度计算器';
7
8
  const description =
8
9
  '没有温度计?听听蟋蟀的声音。使用我们的杜倍耳定律计算器,通过计算鸣叫次数来得出准确温度。';
9
10
 
@@ -41,7 +42,7 @@ const howToData = [
41
42
  },
42
43
  {
43
44
  name: '输入数值',
44
- text: '跟随鸣叫节奏点击“TAP”按钮几秒钟,计算器会自动计算 BPM(每分钟鸣叫次数)。',
45
+ text: '跟随鸣叫节奏点击"TAP"按钮几秒钟,计算器会自动计算 BPM(每分钟鸣叫次数)。',
45
46
  },
46
47
  {
47
48
  name: '验证温度',
@@ -87,19 +88,8 @@ export const content: ToolLocaleContent<CricketThermometerUI> = {
87
88
  slug,
88
89
  title,
89
90
  description,
90
- faqTitle: '常见问题',
91
91
  faq: faqData,
92
- bibliographyTitle: '科学参考文献',
93
- bibliography: [
94
- {
95
- name: 'The American Naturalist - The Cricket as a Thermometer',
96
- url: 'https://www.jstor.org/stable/2453256',
97
- },
98
- {
99
- name: 'Wikipedia - Dolbear\'s Law',
100
- url: 'https://en.wikipedia.org/wiki/Dolbear%27s_law',
101
- },
102
- ],
92
+ bibliography,
103
93
  howTo: howToData,
104
94
  schemas: [faqSchema, howToSchema, appSchema],
105
95
  seo: [
@@ -114,8 +104,8 @@ export const content: ToolLocaleContent<CricketThermometerUI> = {
114
104
  },
115
105
  {
116
106
  type: 'tip',
117
- title: '蟋蟀为什么要“唱歌”?',
118
- html: '<p>蟋蟀的“歌声”,即<strong>摩擦发声</strong>,实际上是一种求偶信号。公蟋蟀通过摩擦双翅(而不是腿)来发出这种声音。令人着迷的是,由于它们是冷血动物(变温动物),这种摩擦的速度直接取决于空气的热能。</p>',
107
+ title: '蟋蟀为什么要"唱歌"?',
108
+ html: '<p>蟋蟀的"歌声",即<strong>摩擦发声</strong>,实际上是一种求偶信号。公蟋蟀通过摩擦双翅(而不是腿)来发出这种声音。令人着迷的是,由于它们是冷血动物(变温动物),这种摩擦的速度直接取决于空气的热能。</p>',
119
109
  },
120
110
  {
121
111
  type: 'title',
@@ -156,9 +146,9 @@ export const content: ToolLocaleContent<CricketThermometerUI> = {
156
146
  {
157
147
  type: 'list',
158
148
  items: [
159
- '<strong>爱情温度计:</strong> 一些理论认为,母蟋蟀更喜欢在当前温度下以“正确”频率唱歌的公蟋蟀,因为这表明该公蟋蟀身体健康且代谢强健。',
149
+ '<strong>爱情温度计:</strong> 一些理论认为,母蟋蟀更喜欢在当前温度下以"正确"频率唱歌的公蟋蟀,因为这表明该公蟋蟀身体健康且代谢强健。',
160
150
  '<strong>寒冷极限:</strong> 低于 10°C (50°F) 时,大多数蟋蟀会停止唱歌,因为它们的代谢太慢,无法维持肌肉输出。',
161
- '<strong>同步鸣叫:</strong> 在温暖的夜晚,成千上万只蟋蟀可以同步鸣叫,产生令人印象深刻的“声波”效果。',
151
+ '<strong>同步鸣叫:</strong> 在温暖的夜晚,成千上万只蟋蟀可以同步鸣叫,产生令人印象深刻的"声波"效果。',
162
152
  ],
163
153
  },
164
154
  {
@@ -175,7 +165,5 @@ export const content: ToolLocaleContent<CricketThermometerUI> = {
175
165
  btnSoundOn: '声音:开启',
176
166
  btnSoundOff: '声音:关闭',
177
167
  unitChirpsMin: '次鸣叫/分',
178
- faqTitle: '常见问题',
179
- bibliographyTitle: '科学参考文献',
180
168
  },
181
169
  };
@@ -12,4 +12,4 @@ const content = await cricketThermometer.i18n[locale]?.();
12
12
  if (!content) return null;
13
13
  ---
14
14
 
15
- <SEORenderer content={{ locale: locale as string, sections: content.seo }} />
15
+ {content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
@@ -6,6 +6,4 @@ export interface CricketThermometerUI extends Record<string, string> {
6
6
  btnSoundOn: string;
7
7
  btnSoundOff: string;
8
8
  unitChirpsMin: string;
9
- faqTitle: string;
10
- bibliographyTitle: string;
11
9
  }
@@ -0,0 +1,8 @@
1
+ import type { BibliographyEntry } from '../../types';
2
+
3
+ export const bibliography: BibliographyEntry[] = [
4
+ { name: 'Sustainable Web Design Model', url: 'https://sustainablewebdesign.org/' },
5
+ { name: 'Website Carbon Calculator', url: 'https://www.websitecarbon.com/' },
6
+ { name: 'The Green Web Foundation', url: 'https://www.thegreenwebfoundation.org/' },
7
+ { name: 'W3C - Web Sustainability Guidelines', url: 'https://w3c.github.io/sustyweb/' },
8
+ ];
@@ -95,6 +95,7 @@
95
95
 
96
96
  .dc-input {
97
97
  flex: 1;
98
+ min-width: 0;
98
99
  background: transparent;
99
100
  border: none;
100
101
  padding: 0.75rem 1rem;
@@ -339,4 +340,59 @@
339
340
  opacity: 0.05;
340
341
  color: var(--dc-accent);
341
342
  pointer-events: none;
342
- }
343
+ }
344
+
345
+ @media (max-width: 640px) {
346
+ .dc-wrap {
347
+ padding: 0.75rem;
348
+ }
349
+
350
+ .dc-container {
351
+ border-radius: 1.25rem;
352
+ }
353
+
354
+ .dc-inputs,
355
+ .dc-results-grid,
356
+ .dc-sidebar {
357
+ padding: 1.25rem;
358
+ }
359
+
360
+ .dc-section-head {
361
+ align-items: flex-start;
362
+ font-size: 1.25rem;
363
+ margin-bottom: 1.5rem;
364
+ }
365
+
366
+ .dc-search-box {
367
+ flex-direction: column;
368
+ gap: 0.75rem;
369
+ }
370
+
371
+ .dc-input {
372
+ width: 100%;
373
+ font-size: 1rem;
374
+ }
375
+
376
+ .dc-btn-primary {
377
+ width: 100%;
378
+ min-width: 0;
379
+ min-height: 3rem;
380
+ padding: 0.75rem 1rem;
381
+ }
382
+
383
+ .dc-result-card.main,
384
+ .dc-impact-items,
385
+ .dc-stats-grid {
386
+ grid-template-columns: 1fr;
387
+ }
388
+
389
+ .dc-result-card.main {
390
+ align-items: flex-start;
391
+ gap: 1rem;
392
+ padding: 1.25rem;
393
+ }
394
+
395
+ .dc-stat-item.full {
396
+ grid-column: auto;
397
+ }
398
+ }
@@ -1,4 +1,5 @@
1
1
  import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
2
3
  import type { DigitalCarbonLocaleContent } from '../index';
3
4
 
4
5
  const slug = 'digitaler-co2-fussabdruck-rechner';
@@ -119,10 +120,8 @@ export const content: DigitalCarbonLocaleContent = {
119
120
  tipFonts: 'Laden Sie nur die Schriftschnitte, die Sie tatsächlich verwenden.',
120
121
  tipCache: 'Konfigurieren Sie HTTP-Cache-Header, um erneute Downloads zu vermeiden.',
121
122
  },
122
- faqTitle: 'Häufig gestellte Fragen',
123
123
  faq: faqData,
124
124
  howTo: howToData,
125
- bibliographyTitle: 'Referenzen zur Web-Nachhaltigkeit',
126
125
  seo: [
127
126
  {
128
127
  type: 'title',
@@ -144,7 +143,7 @@ export const content: DigitalCarbonLocaleContent = {
144
143
  },
145
144
  {
146
145
  type: 'paragraph',
147
- html: 'Der <strong>digitale CO₂-Fußabdruck</strong> einer Website wird in Gramm CO₂-Äquivalent (gCO₂e) pro Besuch gemessen. Eine durchschnittliche Website erzeugt etwa 0,5 g CO₂ pro Ladevorgang. Obwohl das unbedeutend scheint, kann eine Seite mit 100.000 monatlichen Besuchen mehr als 600 kg CO₂ pro Jahr emittieren was einer Fahrt von mehr als 3.000 km mit einem Benziner entspricht.',
146
+ html: 'Der <strong>digitale CO₂-Fußabdruck</strong> einer Website wird in Gramm CO₂-Äquivalent (gCO₂e) pro Besuch gemessen. Eine durchschnittliche Website erzeugt etwa 0,5 g CO₂ pro Ladevorgang. Obwohl das unbedeutend scheint, kann eine Seite mit 100.000 monatlichen Besuchen mehr als 600 kg CO₂ pro Jahr emittieren - was einer Fahrt von mehr als 3.000 km mit einem Benziner entspricht.',
148
147
  },
149
148
  {
150
149
  type: 'title',
@@ -222,14 +221,9 @@ export const content: DigitalCarbonLocaleContent = {
222
221
  },
223
222
  {
224
223
  type: 'paragraph',
225
- html: 'Das Internet macht zwischen <strong>2 % und 4 % der weltweiten CO₂-Emissionen</strong> aus ein Wert, der mit der Luftfahrtindustrie vergleichbar ist. Jedes Kilobyte, das Sie einsparen, macht nicht nur Ihre Website schneller: Es reduziert messbar die digitale Verschmutzung.',
224
+ html: 'Das Internet macht zwischen <strong>2 % und 4 % der weltweiten CO₂-Emissionen</strong> aus - ein Wert, der mit der Luftfahrtindustrie vergleichbar ist. Jedes Kilobyte, das Sie einsparen, macht nicht nur Ihre Website schneller: Es reduziert messbar die digitale Verschmutzung.',
226
225
  },
227
226
  ],
228
- bibliography: [
229
- { name: 'Sustainable Web Design Model', url: 'https://sustainablewebdesign.org/' },
230
- { name: 'Website Carbon Calculator', url: 'https://www.websitecarbon.com/' },
231
- { name: 'The Green Web Foundation', url: 'https://www.thegreenwebfoundation.org/' },
232
- { name: 'W3C - Web Sustainability Guidelines', url: 'https://w3c.github.io/sustyweb/' },
233
- ],
227
+ bibliography,
234
228
  schemas: [faqSchema, howToSchema, appSchema],
235
229
  };
@@ -1,4 +1,5 @@
1
1
  import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
2
3
  import type { DigitalCarbonLocaleContent } from '../index';
3
4
 
4
5
  const slug = 'digital-carbon-footprint-calculator';
@@ -119,10 +120,8 @@ export const content: DigitalCarbonLocaleContent = {
119
120
  tipFonts: 'Load only the typographic weights you actually use.',
120
121
  tipCache: 'Configure HTTP cache headers to avoid re-downloads.',
121
122
  },
122
- faqTitle: 'Frequently Asked Questions',
123
123
  faq: faqData,
124
124
  howTo: howToData,
125
- bibliographyTitle: 'Web Sustainability References',
126
125
  seo: [
127
126
  {
128
127
  type: 'title',
@@ -225,11 +224,6 @@ export const content: DigitalCarbonLocaleContent = {
225
224
  html: 'The internet represents between <strong>2% and 4% of global CO₂ emissions</strong>, a figure comparable to the aviation industry. Every kilobyte you eliminate doesn\'t just make your website faster: it measurably reduces digital pollution.',
226
225
  },
227
226
  ],
228
- bibliography: [
229
- { name: 'Sustainable Web Design Model', url: 'https://sustainablewebdesign.org/' },
230
- { name: 'Website Carbon Calculator', url: 'https://www.websitecarbon.com/' },
231
- { name: 'The Green Web Foundation', url: 'https://www.thegreenwebfoundation.org/' },
232
- { name: 'W3C - Web Sustainability Guidelines', url: 'https://w3c.github.io/sustyweb/' },
233
- ],
227
+ bibliography,
234
228
  schemas: [faqSchema, howToSchema, appSchema],
235
229
  };
@@ -1,4 +1,5 @@
1
1
  import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
2
3
  import type { DigitalCarbonLocaleContent } from '../index';
3
4
 
4
5
  const slug = 'calculadora-huella-carbono-digital';
@@ -119,16 +120,9 @@ export const content: DigitalCarbonLocaleContent = {
119
120
  tipFonts: 'Carga solo los pesos tipográficos que realmente usas.',
120
121
  tipCache: 'Configura cabeceras de caché HTTP para evitar re-descargas.',
121
122
  },
122
- faqTitle: 'Preguntas Frecuentes',
123
123
  faq: faqData,
124
124
  howTo: howToData,
125
- bibliographyTitle: 'Referencias de Sostenibilidad Web',
126
- bibliography: [
127
- { name: 'Sustainable Web Design Model', url: 'https://sustainablewebdesign.org/' },
128
- { name: 'Website Carbon Calculator', url: 'https://www.websitecarbon.com/' },
129
- { name: 'The Green Web Foundation', url: 'https://www.thegreenwebfoundation.org/' },
130
- { name: 'W3C - Web Sustainability Guidelines', url: 'https://w3c.github.io/sustyweb/' },
131
- ],
125
+ bibliography,
132
126
  seo: [
133
127
  {
134
128
  type: 'title',
@@ -1,4 +1,5 @@
1
1
  import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
2
3
  import type { DigitalCarbonLocaleContent } from '../index';
3
4
 
4
5
  const slug = 'calculateur-empreinte-carbone-numerique';
@@ -20,7 +21,7 @@ const faqData = [
20
21
  },
21
22
  {
22
23
  question: 'Comment réduire le CO₂ de mon site web ?',
23
- answer: 'Le moyen le plus efficace est de réduire le poids de la page : optimisez les images (WebP), minimisez les fichiers CSS y JS, utilisez le chargement différé (lazy loading) y choisissez un hébergeur utilisant des énergies renouvelables.',
24
+ answer: 'Le moyen le plus efficace est de réduire le poids de la page: optimisez les images (WebP), minimisez les fichiers CSS y JS, utilisez le chargement différé (lazy loading) y choisissez un hébergeur utilisant des énergies renouvelables.',
24
25
  },
25
26
  ];
26
27
 
@@ -119,14 +120,12 @@ export const content: DigitalCarbonLocaleContent = {
119
120
  tipFonts: 'Ne chargez que les graisses typographiques que vous utilisez réellement.',
120
121
  tipCache: 'Configurez les en-têtes de cache HTTP pour éviter les re-téléchargements.',
121
122
  },
122
- faqTitle: 'Questions Fréquemment Posées',
123
123
  faq: faqData,
124
124
  howTo: howToData,
125
- bibliographyTitle: 'Références sur la durabilité du web',
126
125
  seo: [
127
126
  {
128
127
  type: 'title',
129
- text: 'Calculateur d\'empreinte carbone numérique : Quel est le CO₂ généré par votre site',
128
+ text: 'Calculateur d\'empreinte carbone numérique: Quel est le CO₂ généré par votre site',
130
129
  level: 2,
131
130
  },
132
131
  {
@@ -140,7 +139,7 @@ export const content: DigitalCarbonLocaleContent = {
140
139
  },
141
140
  {
142
141
  type: 'paragraph',
143
- html: 'Chaque fois que vous ouvrez une page web, votre appareil, votre routeur, les câbles sous-marins et les serveurs à l\'autre bout du monde consomment de l\'électricité. Cette électricité est encore largement générée par la combustion d\'énergies fossiles. Résultat : une quantité réelle de <strong>CO₂ émise dans l\'atmosphère à chaque visite</strong>.',
142
+ html: 'Chaque fois que vous ouvrez une page web, votre appareil, votre routeur, les câbles sous-marins et les serveurs à l\'autre bout du monde consomment de l\'électricité. Cette électricité est encore largement générée par la combustion d\'énergies fossiles. Résultat: une quantité réelle de <strong>CO₂ émise dans l\'atmosphère à chaque visite</strong>.',
144
143
  },
145
144
  {
146
145
  type: 'paragraph',
@@ -222,14 +221,9 @@ export const content: DigitalCarbonLocaleContent = {
222
221
  },
223
222
  {
224
223
  type: 'paragraph',
225
- html: 'Internet représente entre <strong>2% et 4% des émissions mondiales de CO₂</strong>, un chiffre comparable à l\'industrie aéronautique. Chaque kilo-octet éliminé ne rend pas seulement votre site plus rapide : il réduit de manière mesurable la pollution numérique.',
224
+ html: 'Internet représente entre <strong>2% et 4% des émissions mondiales de CO₂</strong>, un chiffre comparable à l\'industrie aéronautique. Chaque kilo-octet éliminé ne rend pas seulement votre site plus rapide: il réduit de manière mesurable la pollution numérique.',
226
225
  },
227
226
  ],
228
- bibliography: [
229
- { name: 'Sustainable Web Design Model', url: 'https://sustainablewebdesign.org/' },
230
- { name: 'Website Carbon Calculator', url: 'https://www.websitecarbon.com/' },
231
- { name: 'The Green Web Foundation', url: 'https://www.thegreenwebfoundation.org/' },
232
- { name: 'W3C - Web Sustainability Guidelines', url: 'https://w3c.github.io/sustyweb/' },
233
- ],
227
+ bibliography,
234
228
  schemas: [faqSchema, howToSchema, appSchema],
235
229
  };
@@ -1,4 +1,5 @@
1
1
  import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
2
3
  import type { DigitalCarbonLocaleContent } from '../index';
3
4
 
4
5
  const slug = 'kalkulator-jejak-karbon-digital';
@@ -119,10 +120,8 @@ export const content: DigitalCarbonLocaleContent = {
119
120
  tipFonts: 'Muat hanya tebal tipografi yang benar-benar Anda gunakan.',
120
121
  tipCache: 'Konfigurasikan header cache HTTP untuk menghindari pengunduhan ulang.',
121
122
  },
122
- faqTitle: 'Pertanyaan yang Sering Diajukan',
123
123
  faq: faqData,
124
124
  howTo: howToData,
125
- bibliographyTitle: 'Referensi Keberlanjutan Web',
126
125
  seo: [
127
126
  {
128
127
  type: 'title',
@@ -225,11 +224,6 @@ export const content: DigitalCarbonLocaleContent = {
225
224
  html: 'Internet mewakili antara <strong>2% dan 4% emisi CO₂ global</strong>, angka yang sebanding dengan industri penerbangan. Setiap kilobyte yang Anda hilangkan tidak hanya membuat situs web Anda lebih cepat: ia mengurangi polusi digital secara terukur.',
226
225
  },
227
226
  ],
228
- bibliography: [
229
- { name: 'Sustainable Web Design Model', url: 'https://sustainablewebdesign.org/' },
230
- { name: 'Website Carbon Calculator', url: 'https://www.websitecarbon.com/' },
231
- { name: 'The Green Web Foundation', url: 'https://www.thegreenwebfoundation.org/' },
232
- { name: 'W3C - Web Sustainability Guidelines', url: 'https://w3c.github.io/sustyweb/' },
233
- ],
227
+ bibliography,
234
228
  schemas: [faqSchema, howToSchema, appSchema],
235
229
  };
@@ -1,4 +1,5 @@
1
1
  import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
2
3
  import type { DigitalCarbonLocaleContent } from '../index';
3
4
 
4
5
  const slug = 'calcolatore-impronta-carbonio-digitale';
@@ -119,10 +120,8 @@ export const content: DigitalCarbonLocaleContent = {
119
120
  tipFonts: 'Carica solo i pesi tipografici che usi effettivamente.',
120
121
  tipCache: 'Configura gli header della cache HTTP per evitare nuovi download.',
121
122
  },
122
- faqTitle: 'Domande Frequenti',
123
123
  faq: faqData,
124
124
  howTo: howToData,
125
- bibliographyTitle: 'Riferimenti alla sostenibilità web',
126
125
  seo: [
127
126
  {
128
127
  type: 'title',
@@ -225,11 +224,6 @@ export const content: DigitalCarbonLocaleContent = {
225
224
  html: 'Internet rappresenta tra il <strong>2% e il 4% delle emissioni globali di CO₂</strong>, una cifra paragonabile all\'industria dell\'aviazione. Ogni kilobyte rimosso non solo rende il tuo sito più veloce: riduce in modo misurabile l\'inquinamento digitale.',
226
225
  },
227
226
  ],
228
- bibliography: [
229
- { name: 'Sustainable Web Design Model', url: 'https://sustainablewebdesign.org/' },
230
- { name: 'Website Carbon Calculator', url: 'https://www.websitecarbon.com/' },
231
- { name: 'The Green Web Foundation', url: 'https://www.thegreenwebfoundation.org/' },
232
- { name: 'W3C - Web Sustainability Guidelines', url: 'https://w3c.github.io/sustyweb/' },
233
- ],
227
+ bibliography,
234
228
  schemas: [faqSchema, howToSchema, appSchema],
235
229
  };
@@ -1,4 +1,5 @@
1
1
  import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
2
3
  import type { DigitalCarbonLocaleContent } from '../index';
3
4
 
4
5
  const slug = 'digital-carbon-footprint-calculator';
@@ -119,10 +120,8 @@ export const content: DigitalCarbonLocaleContent = {
119
120
  tipFonts: '実際に使用するフォントウェイトのみを読み込むようにしてください。',
120
121
  tipCache: 'HTTPキャッシュヘッダーを適切に設定し、不要な再ダウンロードを防いでください。',
121
122
  },
122
- faqTitle: 'よくある質問',
123
123
  faq: faqData,
124
124
  howTo: howToData,
125
- bibliographyTitle: 'ウェブ・サステナビリティに関する参考文献',
126
125
  seo: [
127
126
  {
128
127
  type: 'title',
@@ -225,11 +224,6 @@ export const content: DigitalCarbonLocaleContent = {
225
224
  html: 'インターネットは<strong>世界全体のCO₂排出量の2%から4%</strong>を占めており、これは航空業界にも匹敵する数字です。不要な数キロバイトを削ることは、単にサイトを速くするだけでなく、デジタル汚染を着実に減らすことにつながります。',
226
225
  },
227
226
  ],
228
- bibliography: [
229
- { name: 'Sustainable Web Design Model', url: 'https://sustainablewebdesign.org/' },
230
- { name: 'Website Carbon Calculator', url: 'https://www.websitecarbon.com/' },
231
- { name: 'The Green Web Foundation', url: 'https://www.thegreenwebfoundation.org/' },
232
- { name: 'W3C - Web Sustainability Guidelines', url: 'https://w3c.github.io/sustyweb/' },
233
- ],
227
+ bibliography,
234
228
  schemas: [faqSchema, howToSchema, appSchema],
235
229
  };
@@ -1,4 +1,5 @@
1
1
  import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
2
3
  import type { DigitalCarbonLocaleContent } from '../index';
3
4
 
4
5
  const slug = 'digital-carbon-footprint-calculator';
@@ -119,10 +120,8 @@ export const content: DigitalCarbonLocaleContent = {
119
120
  tipFonts: '실제로 사용하는 폰트 굵기만 로드하세요.',
120
121
  tipCache: 'HTTP 캐시 헤더를 구성하여 재다운로드를 방지하세요.',
121
122
  },
122
- faqTitle: '자주 묻는 질문',
123
123
  faq: faqData,
124
124
  howTo: howToData,
125
- bibliographyTitle: '웹 지속 가능성 참고 문헌',
126
125
  seo: [
127
126
  {
128
127
  type: 'title',
@@ -225,11 +224,6 @@ export const content: DigitalCarbonLocaleContent = {
225
224
  html: '인터넷은 <strong>전 세계 CO₂ 배출량의 2%~4%</strong>를 차지하며, 이는 항공 산업과 맞먹는 수치입니다. 단 몇 킬로바이트라도 줄이는 것은 단순히 웹사이트를 빠르게 만드는 것이 아니라, 디지털 오염을 실질적으로 줄이는 일입니다.',
226
225
  },
227
226
  ],
228
- bibliography: [
229
- { name: 'Sustainable Web Design Model', url: 'https://sustainablewebdesign.org/' },
230
- { name: 'Website Carbon Calculator', url: 'https://www.websitecarbon.com/' },
231
- { name: 'The Green Web Foundation', url: 'https://www.thegreenwebfoundation.org/' },
232
- { name: 'W3C - Web Sustainability Guidelines', url: 'https://w3c.github.io/sustyweb/' },
233
- ],
227
+ bibliography,
234
228
  schemas: [faqSchema, howToSchema, appSchema],
235
229
  };
@@ -1,4 +1,5 @@
1
1
  import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
2
3
  import type { DigitalCarbonLocaleContent } from '../index';
3
4
 
4
5
  const slug = 'digitale-co2-voetafdruk-calculator';
@@ -119,10 +120,8 @@ export const content: DigitalCarbonLocaleContent = {
119
120
  tipFonts: 'Laad alleen de lettertypegewichten die u daadwerkelijk gebruikt.',
120
121
  tipCache: 'Configureer HTTP-cache-headers om opnieuw downloaden te voorkomen.',
121
122
  },
122
- faqTitle: 'Veelgestelde vragen',
123
123
  faq: faqData,
124
124
  howTo: howToData,
125
- bibliographyTitle: 'Web-duurzaamheidsreferenties',
126
125
  seo: [
127
126
  {
128
127
  type: 'title',
@@ -225,11 +224,6 @@ export const content: DigitalCarbonLocaleContent = {
225
224
  html: 'Internet is verantwoordelijk voor tussen de <strong>2% en 4% van de wereldwijde CO₂-emissies</strong>, een cijfer dat vergelijkbaar is met de luchtvaartindustrie. Elke kilobyte die u verwijdert, maakt uw website niet alleen sneller: het vermindert meetbaar de digitale vervuiling.',
226
225
  },
227
226
  ],
228
- bibliography: [
229
- { name: 'Sustainable Web Design Model', url: 'https://sustainablewebdesign.org/' },
230
- { name: 'Website Carbon Calculator', url: 'https://www.websitecarbon.com/' },
231
- { name: 'The Green Web Foundation', url: 'https://www.thegreenwebfoundation.org/' },
232
- { name: 'W3C - Web Sustainability Guidelines', url: 'https://w3c.github.io/sustyweb/' },
233
- ],
227
+ bibliography,
234
228
  schemas: [faqSchema, howToSchema, appSchema],
235
229
  };