@jjlmoya/utils-home 1.16.0 → 1.17.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 (125) hide show
  1. package/package.json +1 -1
  2. package/src/pages/[locale]/[slug].astro +28 -12
  3. package/src/tests/locale_completeness.test.ts +2 -20
  4. package/src/tests/shared-test-helpers.ts +56 -0
  5. package/src/tests/tool_exports.test.ts +34 -0
  6. package/src/tool/dewPointCalculator/bibliography.ts +10 -0
  7. package/src/tool/dewPointCalculator/i18n/de.ts +2 -12
  8. package/src/tool/dewPointCalculator/i18n/en.ts +2 -12
  9. package/src/tool/dewPointCalculator/i18n/es.ts +2 -12
  10. package/src/tool/dewPointCalculator/i18n/fr.ts +2 -12
  11. package/src/tool/dewPointCalculator/i18n/id.ts +2 -12
  12. package/src/tool/dewPointCalculator/i18n/it.ts +2 -12
  13. package/src/tool/dewPointCalculator/i18n/ja.ts +2 -12
  14. package/src/tool/dewPointCalculator/i18n/ko.ts +2 -12
  15. package/src/tool/dewPointCalculator/i18n/nl.ts +2 -12
  16. package/src/tool/dewPointCalculator/i18n/pl.ts +2 -12
  17. package/src/tool/dewPointCalculator/i18n/pt.ts +2 -12
  18. package/src/tool/dewPointCalculator/i18n/ru.ts +2 -12
  19. package/src/tool/dewPointCalculator/i18n/sv.ts +2 -12
  20. package/src/tool/dewPointCalculator/i18n/tr.ts +2 -12
  21. package/src/tool/dewPointCalculator/i18n/zh.ts +2 -12
  22. package/src/tool/dewPointCalculator/seo.astro +2 -1
  23. package/src/tool/heatingComparator/bibliography.ts +14 -0
  24. package/src/tool/heatingComparator/i18n/de.ts +2 -16
  25. package/src/tool/heatingComparator/i18n/en.ts +2 -12
  26. package/src/tool/heatingComparator/i18n/es.ts +2 -16
  27. package/src/tool/heatingComparator/i18n/fr.ts +2 -12
  28. package/src/tool/heatingComparator/i18n/id.ts +2 -16
  29. package/src/tool/heatingComparator/i18n/it.ts +2 -16
  30. package/src/tool/heatingComparator/i18n/ja.ts +296 -310
  31. package/src/tool/heatingComparator/i18n/ko.ts +296 -306
  32. package/src/tool/heatingComparator/i18n/nl.ts +2 -16
  33. package/src/tool/heatingComparator/i18n/pl.ts +2 -16
  34. package/src/tool/heatingComparator/i18n/pt.ts +2 -16
  35. package/src/tool/heatingComparator/i18n/ru.ts +2 -12
  36. package/src/tool/heatingComparator/i18n/sv.ts +2 -16
  37. package/src/tool/heatingComparator/i18n/tr.ts +2 -16
  38. package/src/tool/heatingComparator/i18n/zh.ts +296 -306
  39. package/src/tool/heatingComparator/seo.astro +3 -3
  40. package/src/tool/ledSavingCalculator/bibliography.ts +14 -0
  41. package/src/tool/ledSavingCalculator/i18n/de.ts +2 -12
  42. package/src/tool/ledSavingCalculator/i18n/en.ts +2 -16
  43. package/src/tool/ledSavingCalculator/i18n/es.ts +2 -16
  44. package/src/tool/ledSavingCalculator/i18n/fr.ts +2 -16
  45. package/src/tool/ledSavingCalculator/i18n/id.ts +2 -12
  46. package/src/tool/ledSavingCalculator/i18n/it.ts +2 -12
  47. package/src/tool/ledSavingCalculator/i18n/ja.ts +2 -12
  48. package/src/tool/ledSavingCalculator/i18n/ko.ts +2 -12
  49. package/src/tool/ledSavingCalculator/i18n/nl.ts +2 -12
  50. package/src/tool/ledSavingCalculator/i18n/pl.ts +2 -12
  51. package/src/tool/ledSavingCalculator/i18n/pt.ts +2 -12
  52. package/src/tool/ledSavingCalculator/i18n/ru.ts +2 -12
  53. package/src/tool/ledSavingCalculator/i18n/sv.ts +2 -12
  54. package/src/tool/ledSavingCalculator/i18n/tr.ts +2 -12
  55. package/src/tool/ledSavingCalculator/i18n/zh.ts +2 -12
  56. package/src/tool/ledSavingCalculator/seo.astro +2 -1
  57. package/src/tool/projectorCalculator/bibliography.ts +5 -0
  58. package/src/tool/projectorCalculator/i18n/de.ts +2 -6
  59. package/src/tool/projectorCalculator/i18n/en.ts +2 -7
  60. package/src/tool/projectorCalculator/i18n/es.ts +2 -7
  61. package/src/tool/projectorCalculator/i18n/fr.ts +2 -7
  62. package/src/tool/projectorCalculator/i18n/id.ts +2 -7
  63. package/src/tool/projectorCalculator/i18n/it.ts +2 -6
  64. package/src/tool/projectorCalculator/i18n/ja.ts +175 -179
  65. package/src/tool/projectorCalculator/i18n/ko.ts +175 -179
  66. package/src/tool/projectorCalculator/i18n/nl.ts +2 -6
  67. package/src/tool/projectorCalculator/i18n/pl.ts +2 -6
  68. package/src/tool/projectorCalculator/i18n/pt.ts +2 -6
  69. package/src/tool/projectorCalculator/i18n/ru.ts +2 -6
  70. package/src/tool/projectorCalculator/i18n/sv.ts +2 -6
  71. package/src/tool/projectorCalculator/i18n/tr.ts +2 -6
  72. package/src/tool/projectorCalculator/i18n/zh.ts +175 -179
  73. package/src/tool/projectorCalculator/seo.astro +2 -1
  74. package/src/tool/qrGenerator/bibliography.ts +14 -0
  75. package/src/tool/qrGenerator/i18n/de.ts +192 -202
  76. package/src/tool/qrGenerator/i18n/en.ts +2 -16
  77. package/src/tool/qrGenerator/i18n/es.ts +2 -16
  78. package/src/tool/qrGenerator/i18n/fr.ts +2 -16
  79. package/src/tool/qrGenerator/i18n/id.ts +146 -150
  80. package/src/tool/qrGenerator/i18n/it.ts +169 -173
  81. package/src/tool/qrGenerator/i18n/ja.ts +146 -150
  82. package/src/tool/qrGenerator/i18n/ko.ts +146 -150
  83. package/src/tool/qrGenerator/i18n/nl.ts +146 -150
  84. package/src/tool/qrGenerator/i18n/pl.ts +146 -150
  85. package/src/tool/qrGenerator/i18n/pt.ts +146 -150
  86. package/src/tool/qrGenerator/i18n/ru.ts +146 -150
  87. package/src/tool/qrGenerator/i18n/sv.ts +146 -150
  88. package/src/tool/qrGenerator/i18n/tr.ts +146 -150
  89. package/src/tool/qrGenerator/i18n/zh.ts +146 -150
  90. package/src/tool/qrGenerator/seo.astro +2 -1
  91. package/src/tool/solarCalculator/bibliography.ts +5 -0
  92. package/src/tool/solarCalculator/i18n/de.ts +141 -145
  93. package/src/tool/solarCalculator/i18n/en.ts +2 -7
  94. package/src/tool/solarCalculator/i18n/es.ts +2 -7
  95. package/src/tool/solarCalculator/i18n/fr.ts +2 -7
  96. package/src/tool/solarCalculator/i18n/id.ts +2 -6
  97. package/src/tool/solarCalculator/i18n/it.ts +2 -6
  98. package/src/tool/solarCalculator/i18n/ja.ts +121 -125
  99. package/src/tool/solarCalculator/i18n/ko.ts +116 -120
  100. package/src/tool/solarCalculator/i18n/nl.ts +2 -5
  101. package/src/tool/solarCalculator/i18n/pl.ts +2 -6
  102. package/src/tool/solarCalculator/i18n/pt.ts +2 -6
  103. package/src/tool/solarCalculator/i18n/ru.ts +2 -5
  104. package/src/tool/solarCalculator/i18n/sv.ts +2 -5
  105. package/src/tool/solarCalculator/i18n/tr.ts +2 -5
  106. package/src/tool/solarCalculator/i18n/zh.ts +116 -120
  107. package/src/tool/solarCalculator/seo.astro +2 -1
  108. package/src/tool/tariffComparator/bibliography.ts +7 -0
  109. package/src/tool/tariffComparator/i18n/de.ts +129 -132
  110. package/src/tool/tariffComparator/i18n/en.ts +2 -9
  111. package/src/tool/tariffComparator/i18n/es.ts +2 -9
  112. package/src/tool/tariffComparator/i18n/fr.ts +2 -9
  113. package/src/tool/tariffComparator/i18n/id.ts +2 -5
  114. package/src/tool/tariffComparator/i18n/it.ts +2 -5
  115. package/src/tool/tariffComparator/i18n/ja.ts +129 -132
  116. package/src/tool/tariffComparator/i18n/ko.ts +129 -132
  117. package/src/tool/tariffComparator/i18n/nl.ts +2 -5
  118. package/src/tool/tariffComparator/i18n/pl.ts +2 -5
  119. package/src/tool/tariffComparator/i18n/pt.ts +2 -5
  120. package/src/tool/tariffComparator/i18n/ru.ts +2 -5
  121. package/src/tool/tariffComparator/i18n/sv.ts +2 -5
  122. package/src/tool/tariffComparator/i18n/tr.ts +2 -5
  123. package/src/tool/tariffComparator/i18n/zh.ts +129 -132
  124. package/src/tool/tariffComparator/seo.astro +2 -1
  125. package/src/types.ts +0 -2
@@ -1,203 +1,193 @@
1
- import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
- import type { ToolLocaleContent } from '../../../types';
3
- import type { QRGeneratorUI } from '../ui';
4
-
5
- const slug = 'offline-qr-code-generator';
6
- const title = 'Offline QR Code Generator';
7
- const description =
8
- 'Erstellen Sie QR-Codes für WLAN, URLs und Kontakte 100 % sicher in Ihrem Browser. Ihre Daten verlassen niemals Ihr Gerät.';
9
-
10
- const faqData = [
11
- {
12
- question: 'Laufen diese QR-Codes ab?',
13
- answer:
14
- 'Nein. Die hier generierten Codes sind statisch. Die Informationen sind direkt im Bild kodiert und hängen nicht von externen Links ab. Sie funktionieren für immer.',
15
- },
16
- {
17
- question: 'Werden meine Daten gespeichert?',
18
- answer:
19
- 'Absolut nicht. Der gesamte Prozess findet in Ihrem Browser statt (Client-Side). Es werden keine Daten an unsere Server gesendet. Es ist 100 % privat und sicher.',
20
- },
21
- {
22
- question: 'Funktioniert es auf iPhone und Android?',
23
- answer:
24
- 'Ja. Die meisten modernen Kameras von iOS und Android lesen QR-Codes nativ und schlagen die entsprechende Aktion vor (WLAN verbinden, Link öffnen etc.).',
25
- },
26
- {
27
- question: 'Kann ich es ohne Internet verwenden?',
28
- answer:
29
- 'Ja. Sobald die Seite geladen ist, können Sie das Internet trennen. Der Generator arbeitet vollständig lokal in Ihrem Browser.',
30
- },
31
- ];
32
-
33
- const howToData = [
34
- {
35
- name: 'Typ wählen',
36
- text: 'Wählen Sie, ob Sie einen Code für WLAN, eine URL oder einen Kontakt (vCard) erstellen möchten.',
37
- },
38
- {
39
- name: 'Daten eingeben',
40
- text: 'Füllen Sie die Felder aus, wie z. B. Netzwerkname und Passwort oder die Webadresse.',
41
- },
42
- {
43
- name: 'Generieren und prüfen',
44
- text: 'Der Code wird sofort erstellt. Testen Sie ihn direkt durch Scannen vom Bildschirm.',
45
- },
46
- {
47
- name: 'Herunterladen',
48
- text: 'Speichern Sie den QR-Code als Bilddatei (.webp), um ihn zu drucken oder digital zu teilen.',
49
- },
50
- ];
51
-
52
- const faqSchema: WithContext<FAQPage> = {
53
- '@context': 'https://schema.org',
54
- '@type': 'FAQPage',
55
- mainEntity: faqData.map((item) => ({
56
- '@type': 'Question',
57
- name: item.question,
58
- acceptedAnswer: { '@type': 'Answer', text: item.answer },
59
- })),
60
- };
61
-
62
- const howToSchema: WithContext<HowTo> = {
63
- '@context': 'https://schema.org',
64
- '@type': 'HowTo',
65
- name: title,
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { QRGeneratorUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
5
+
6
+ const slug = 'offline-qr-code-generator';
7
+ const title = 'Offline QR Code Generator';
8
+ const description =
9
+ 'Erstellen Sie QR-Codes für WLAN, URLs und Kontakte 100 % sicher in Ihrem Browser. Ihre Daten verlassen niemals Ihr Gerät.';
10
+
11
+ const faqData = [
12
+ {
13
+ question: 'Laufen diese QR-Codes ab?',
14
+ answer:
15
+ 'Nein. Die hier generierten Codes sind statisch. Die Informationen sind direkt im Bild kodiert und hängen nicht von externen Links ab. Sie funktionieren für immer.',
16
+ },
17
+ {
18
+ question: 'Werden meine Daten gespeichert?',
19
+ answer:
20
+ 'Absolut nicht. Der gesamte Prozess findet in Ihrem Browser statt (Client-Side). Es werden keine Daten an unsere Server gesendet. Es ist 100 % privat und sicher.',
21
+ },
22
+ {
23
+ question: 'Funktioniert es auf iPhone und Android?',
24
+ answer:
25
+ 'Ja. Die meisten modernen Kameras von iOS und Android lesen QR-Codes nativ und schlagen die entsprechende Aktion vor (WLAN verbinden, Link öffnen etc.).',
26
+ },
27
+ {
28
+ question: 'Kann ich es ohne Internet verwenden?',
29
+ answer:
30
+ 'Ja. Sobald die Seite geladen ist, können Sie das Internet trennen. Der Generator arbeitet vollständig lokal in Ihrem Browser.',
31
+ },
32
+ ];
33
+
34
+ const howToData = [
35
+ {
36
+ name: 'Typ wählen',
37
+ text: 'Wählen Sie, ob Sie einen Code für WLAN, eine URL oder einen Kontakt (vCard) erstellen möchten.',
38
+ },
39
+ {
40
+ name: 'Daten eingeben',
41
+ text: 'Füllen Sie die Felder aus, wie z. B. Netzwerkname und Passwort oder die Webadresse.',
42
+ },
43
+ {
44
+ name: 'Generieren und prüfen',
45
+ text: 'Der Code wird sofort erstellt. Testen Sie ihn direkt durch Scannen vom Bildschirm.',
46
+ },
47
+ {
48
+ name: 'Herunterladen',
49
+ text: 'Speichern Sie den QR-Code als Bilddatei (.webp), um ihn zu drucken oder digital zu teilen.',
50
+ },
51
+ ];
52
+
53
+ const faqSchema: WithContext<FAQPage> = {
54
+ '@context': 'https://schema.org',
55
+ '@type': 'FAQPage',
56
+ mainEntity: faqData.map((item) => ({
57
+ '@type': 'Question',
58
+ name: item.question,
59
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
60
+ })),
61
+ };
62
+
63
+ const howToSchema: WithContext<HowTo> = {
64
+ '@context': 'https://schema.org',
65
+ '@type': 'HowTo',
66
+ name: title,
67
+ description,
68
+ step: howToData.map((step) => ({
69
+ '@type': 'HowToStep',
70
+ name: step.name,
71
+ text: step.text,
72
+ })),
73
+ };
74
+
75
+ const appSchema: WithContext<SoftwareApplication> = {
76
+ '@context': 'https://schema.org',
77
+ '@type': 'SoftwareApplication',
78
+ name: title,
79
+ description,
80
+ applicationCategory: 'UtilityApplication',
81
+ operatingSystem: 'All',
82
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
83
+ inLanguage: 'de',
84
+ };
85
+
86
+ export const content: ToolLocaleContent<QRGeneratorUI> = {
87
+ slug,
88
+ title,
66
89
  description,
67
- step: howToData.map((step) => ({
68
- '@type': 'HowToStep',
69
- name: step.name,
70
- text: step.text,
71
- })),
72
- };
73
-
74
- const appSchema: WithContext<SoftwareApplication> = {
75
- '@context': 'https://schema.org',
76
- '@type': 'SoftwareApplication',
77
- name: title,
78
- description,
79
- applicationCategory: 'UtilityApplication',
80
- operatingSystem: 'All',
81
- offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
82
- inLanguage: 'de',
83
- };
84
-
85
- export const content: ToolLocaleContent<QRGeneratorUI> = {
86
- slug,
87
- title,
88
- description,
89
- faqTitle: 'Häufig gestellte Fragen',
90
- faq: faqData,
91
- bibliographyTitle: 'Quellen',
92
- bibliography: [
93
- {
94
- name: 'node-qrcode: QR-Code Generator Bibliothek',
95
- url: 'https://github.com/soldair/node-qrcode',
96
- },
97
- {
98
- name: 'RFC 6350: vCard Format Spezifikation',
99
- url: 'https://www.rfc-editor.org/rfc/rfc6350',
100
- },
101
- ],
102
- howTo: howToData,
103
- schemas: [faqSchema, howToSchema, appSchema],
104
- seo: [
105
- {
106
- type: 'title',
107
- text: 'Warum Offline? Datenschutz an erster Stelle',
108
- level: 2,
109
- },
110
- {
111
- type: 'paragraph',
112
- html: 'Die meisten Online-QR-Generatoren senden Ihre Daten an einen Server. Dies ist ein Risiko, besonders bei <strong>WLAN-Passwörtern</strong> oder <strong>persönlichen Daten</strong>. Dieses Tool nutzt JavaScript, um den Code direkt auf Ihrem Gerät zu erzeugen.',
113
- },
114
- {
115
- type: 'stats',
116
- items: [
117
- { value: '100%', label: 'Privat', icon: 'mdi:shield-lock' },
118
- { value: 'Offline', label: 'Kein Server', icon: 'mdi:wifi-off' },
119
- { value: 'WebP', label: 'Download', icon: 'mdi:download' },
120
- ],
121
- columns: 3,
122
- },
123
- {
124
- type: 'diagnostic',
125
- variant: 'success',
126
- title: 'Open Source und Transparent',
127
- icon: 'mdi:github',
128
- badge: 'Open Source',
129
- html: '<p>Der Code dieses Tools ist zu 100 % Open Source. Sie können prüfen, wie er funktioniert, oder ihn herunterladen, um ihn ohne Internet auszuführen.</p>',
130
- },
131
- {
132
- type: 'title',
133
- text: 'Anwendungsfälle',
134
- level: 3,
135
- },
136
- {
137
- type: 'comparative',
138
- items: [
139
- {
140
- title: 'WLAN QR',
141
- description: 'Teilen Sie Ihr WLAN mit Gästen, ohne das Passwort diktieren zu müssen.',
142
- icon: 'mdi:wifi',
143
- points: ['Kompatibel mit iOS und Android', 'Unterstützt WPA2, WEP und offene Netze'],
144
- },
145
- {
146
- title: 'URL QR',
147
- description: 'Wandeln Sie Web Links in scanbare Codes um. Ideal für Flyer oder Visitenkarten.',
148
- icon: 'mdi:link',
149
- points: ['Jede gültige URL', 'Kein Ablaufdatum'],
150
- },
151
- {
152
- title: 'vCard QR',
153
- description: 'Digitale Visitenkarte. Beim Scannen wird der Kontakt direkt im Adressbuch vorgeschlagen.',
154
- icon: 'mdi:card-account-details',
155
- points: ['Name, Nummer, E Mail, Firma', 'vCard 3.0 Standard'],
156
- },
157
- ],
158
- columns: 3,
159
- },
160
- {
161
- type: 'glossary',
162
- items: [
163
- { term: 'QR-Code', definition: '2D-Barcode, der bis zu 4.296 Zeichen speichern kann.' },
164
- { term: 'vCard', definition: 'Standardformat für digitale Visitenkarten.' },
165
- { term: 'SSID', definition: 'Der sichtbare Name eines WLAN-Netzwerks.' },
166
- ],
167
- },
168
- {
169
- type: 'summary',
170
- title: 'Tipps für die Nutzung',
171
- items: [
172
- 'Alle Daten werden lokal in Ihrem Browser verarbeitet.',
173
- 'Achten Sie bei WLAN-Daten auf Groß- und Kleinschreibung.',
174
- 'Statische QR-Codes: Bei Passwortänderung neuen Code erstellen.',
175
- 'Laden Sie das Bild für beste Druckqualität herunter.',
176
- 'Testen Sie den Code vor dem Ausdrucken auf dem Bildschirm.',
177
- ],
178
- },
179
- ],
180
- ui: {
181
- tabWifi: 'WLAN',
182
- tabUrl: 'URL',
183
- tabContact: 'Kontakt',
184
- labelSsid: 'Netzwerkname (SSID)',
185
- labelPassword: 'Passwort',
186
- labelEncryption: 'Verschlüsselung',
187
- labelHidden: 'Verstecktes Netz',
188
- labelUrl: 'Web-Adresse (URL)',
189
- labelName: 'Vorname',
190
- labelSurname: 'Nachname',
191
- labelPhone: 'Telefon',
192
- labelEmail: 'E-Mail',
193
- labelOrg: 'Organisation / Firma',
194
- encWpa: 'WPA/WPA2',
195
- encWep: 'WEP',
196
- encNone: 'Keine',
197
- downloadBtn: 'PNG herunterladen',
198
- privacyMsg: 'Zu 100 % im Browser generiert. Ihre Daten bleiben bei Ihnen.',
199
- placeholderSsid: 'MeinWLAN_5G',
200
- placeholderUrl: 'https://beispiel.de',
201
- placeholderPassword: '••••••••',
202
- },
203
- };
90
+ faq: faqData,
91
+ bibliography,
92
+ howTo: howToData,
93
+ schemas: [faqSchema, howToSchema, appSchema],
94
+ seo: [
95
+ {
96
+ type: 'title',
97
+ text: 'Warum Offline? Datenschutz an erster Stelle',
98
+ level: 2,
99
+ },
100
+ {
101
+ type: 'paragraph',
102
+ html: 'Die meisten Online-QR-Generatoren senden Ihre Daten an einen Server. Dies ist ein Risiko, besonders bei <strong>WLAN-Passwörtern</strong> oder <strong>persönlichen Daten</strong>. Dieses Tool nutzt JavaScript, um den Code direkt auf Ihrem Gerät zu erzeugen.',
103
+ },
104
+ {
105
+ type: 'stats',
106
+ items: [
107
+ { value: '100%', label: 'Privat', icon: 'mdi:shield-lock' },
108
+ { value: 'Offline', label: 'Kein Server', icon: 'mdi:wifi-off' },
109
+ { value: 'WebP', label: 'Download', icon: 'mdi:download' },
110
+ ],
111
+ columns: 3,
112
+ },
113
+ {
114
+ type: 'diagnostic',
115
+ variant: 'success',
116
+ title: 'Open Source und Transparent',
117
+ icon: 'mdi:github',
118
+ badge: 'Open Source',
119
+ html: '<p>Der Code dieses Tools ist zu 100 % Open Source. Sie können prüfen, wie er funktioniert, oder ihn herunterladen, um ihn ohne Internet auszuführen.</p>',
120
+ },
121
+ {
122
+ type: 'title',
123
+ text: 'Anwendungsfälle',
124
+ level: 3,
125
+ },
126
+ {
127
+ type: 'comparative',
128
+ items: [
129
+ {
130
+ title: 'WLAN QR',
131
+ description: 'Teilen Sie Ihr WLAN mit Gästen, ohne das Passwort diktieren zu müssen.',
132
+ icon: 'mdi:wifi',
133
+ points: ['Kompatibel mit iOS und Android', 'Unterstützt WPA2, WEP und offene Netze'],
134
+ },
135
+ {
136
+ title: 'URL QR',
137
+ description: 'Wandeln Sie Web Links in scanbare Codes um. Ideal für Flyer oder Visitenkarten.',
138
+ icon: 'mdi:link',
139
+ points: ['Jede gültige URL', 'Kein Ablaufdatum'],
140
+ },
141
+ {
142
+ title: 'vCard QR',
143
+ description: 'Digitale Visitenkarte. Beim Scannen wird der Kontakt direkt im Adressbuch vorgeschlagen.',
144
+ icon: 'mdi:card-account-details',
145
+ points: ['Name, Nummer, E Mail, Firma', 'vCard 3.0 Standard'],
146
+ },
147
+ ],
148
+ columns: 3,
149
+ },
150
+ {
151
+ type: 'glossary',
152
+ items: [
153
+ { term: 'QR-Code', definition: '2D-Barcode, der bis zu 4.296 Zeichen speichern kann.' },
154
+ { term: 'vCard', definition: 'Standardformat für digitale Visitenkarten.' },
155
+ { term: 'SSID', definition: 'Der sichtbare Name eines WLAN-Netzwerks.' },
156
+ ],
157
+ },
158
+ {
159
+ type: 'summary',
160
+ title: 'Tipps für die Nutzung',
161
+ items: [
162
+ 'Alle Daten werden lokal in Ihrem Browser verarbeitet.',
163
+ 'Achten Sie bei WLAN-Daten auf Groß- und Kleinschreibung.',
164
+ 'Statische QR-Codes: Bei Passwortänderung neuen Code erstellen.',
165
+ 'Laden Sie das Bild für beste Druckqualität herunter.',
166
+ 'Testen Sie den Code vor dem Ausdrucken auf dem Bildschirm.',
167
+ ],
168
+ },
169
+ ],
170
+ ui: {
171
+ tabWifi: 'WLAN',
172
+ tabUrl: 'URL',
173
+ tabContact: 'Kontakt',
174
+ labelSsid: 'Netzwerkname (SSID)',
175
+ labelPassword: 'Passwort',
176
+ labelEncryption: 'Verschlüsselung',
177
+ labelHidden: 'Verstecktes Netz',
178
+ labelUrl: 'Web-Adresse (URL)',
179
+ labelName: 'Vorname',
180
+ labelSurname: 'Nachname',
181
+ labelPhone: 'Telefon',
182
+ labelEmail: 'E-Mail',
183
+ labelOrg: 'Organisation / Firma',
184
+ encWpa: 'WPA/WPA2',
185
+ encWep: 'WEP',
186
+ encNone: 'Keine',
187
+ downloadBtn: 'PNG herunterladen',
188
+ privacyMsg: 'Zu 100 % im Browser generiert. Ihre Daten bleiben bei Ihnen.',
189
+ placeholderSsid: 'MeinWLAN_5G',
190
+ placeholderUrl: 'https://beispiel.de',
191
+ placeholderPassword: '••••••••',
192
+ },
193
+ };
@@ -1,6 +1,7 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { QRGeneratorUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
4
5
 
5
6
  const slug = 'qr-generator';
6
7
  const title = 'Offline QR Code Generator';
@@ -86,23 +87,8 @@ export const content: ToolLocaleContent<QRGeneratorUI> = {
86
87
  slug,
87
88
  title,
88
89
  description,
89
- faqTitle: 'Frequently Asked Questions',
90
90
  faq: faqData,
91
- bibliographyTitle: 'Bibliography',
92
- bibliography: [
93
- {
94
- name: 'node-qrcode: QR code generator library',
95
- url: 'https://github.com/soldair/node-qrcode',
96
- },
97
- {
98
- name: 'RFC 6350: vCard Format Specification',
99
- url: 'https://www.rfc-editor.org/rfc/rfc6350',
100
- },
101
- {
102
- name: 'ZXing: Barcode Contents — WiFi, vCard and URL',
103
- url: 'https://github.com/zxing/zxing/wiki/Barcode-Contents',
104
- },
105
- ],
91
+ bibliography,
106
92
  howTo: howToData,
107
93
  schemas: [faqSchema, howToSchema, appSchema],
108
94
  seo: [
@@ -1,6 +1,7 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { QRGeneratorUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
4
5
 
5
6
  const slug = 'qr';
6
7
  const title = 'Generador de Códigos QR Offline';
@@ -86,23 +87,8 @@ export const content: ToolLocaleContent<QRGeneratorUI> = {
86
87
  slug,
87
88
  title,
88
89
  description,
89
- faqTitle: 'Preguntas Frecuentes',
90
90
  faq: faqData,
91
- bibliographyTitle: 'Bibliografía',
92
- bibliography: [
93
- {
94
- name: 'node-qrcode: QR code generator library',
95
- url: 'https://github.com/soldair/node-qrcode',
96
- },
97
- {
98
- name: 'RFC 6350: vCard Format Specification',
99
- url: 'https://www.rfc-editor.org/rfc/rfc6350',
100
- },
101
- {
102
- name: 'ZXing: Barcode Contents — WiFi, vCard y URL',
103
- url: 'https://github.com/zxing/zxing/wiki/Barcode-Contents',
104
- },
105
- ],
91
+ bibliography,
106
92
  howTo: howToData,
107
93
  schemas: [faqSchema, howToSchema, appSchema],
108
94
  seo: [
@@ -1,6 +1,7 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { QRGeneratorUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
4
5
 
5
6
  const slug = 'generateur-qr';
6
7
  const title = 'Générateur de Codes QR Hors Ligne';
@@ -86,23 +87,8 @@ export const content: ToolLocaleContent<QRGeneratorUI> = {
86
87
  slug,
87
88
  title,
88
89
  description,
89
- faqTitle: 'Questions Fréquentes',
90
90
  faq: faqData,
91
- bibliographyTitle: 'Bibliographie',
92
- bibliography: [
93
- {
94
- name: 'node-qrcode: bibliothèque de génération de codes QR',
95
- url: 'https://github.com/soldair/node-qrcode',
96
- },
97
- {
98
- name: 'RFC 6350: Spécification du format vCard',
99
- url: 'https://www.rfc-editor.org/rfc/rfc6350',
100
- },
101
- {
102
- name: 'ZXing: Barcode Contents — WiFi, vCard et URL',
103
- url: 'https://github.com/zxing/zxing/wiki/Barcode-Contents',
104
- },
105
- ],
91
+ bibliography,
106
92
  howTo: howToData,
107
93
  schemas: [faqSchema, howToSchema, appSchema],
108
94
  seo: [