@jjlmoya/utils-home 1.16.0 → 1.23.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 (174) hide show
  1. package/package.json +1 -1
  2. package/src/category/i18n/de.ts +10 -10
  3. package/src/category/i18n/en.ts +8 -8
  4. package/src/category/i18n/es.ts +2 -2
  5. package/src/category/i18n/fr.ts +15 -15
  6. package/src/category/i18n/id.ts +8 -8
  7. package/src/category/i18n/it.ts +7 -7
  8. package/src/category/i18n/nl.ts +8 -8
  9. package/src/category/i18n/pl.ts +10 -10
  10. package/src/category/i18n/pt.ts +8 -8
  11. package/src/category/i18n/ru.ts +10 -10
  12. package/src/category/i18n/sv.ts +8 -8
  13. package/src/category/i18n/tr.ts +4 -4
  14. package/src/category/i18n/zh.ts +8 -8
  15. package/src/entries.ts +4 -1
  16. package/src/pages/[locale]/[slug].astro +28 -12
  17. package/src/tests/locale_completeness.test.ts +4 -22
  18. package/src/tests/no_en_dash.test.ts +70 -0
  19. package/src/tests/shared-test-helpers.ts +56 -0
  20. package/src/tests/tool_exports.test.ts +34 -0
  21. package/src/tests/tool_validation.test.ts +2 -2
  22. package/src/tool/dewPointCalculator/bibliography.ts +10 -0
  23. package/src/tool/dewPointCalculator/i18n/de.ts +7 -17
  24. package/src/tool/dewPointCalculator/i18n/en.ts +8 -18
  25. package/src/tool/dewPointCalculator/i18n/es.ts +7 -17
  26. package/src/tool/dewPointCalculator/i18n/fr.ts +8 -18
  27. package/src/tool/dewPointCalculator/i18n/id.ts +7 -17
  28. package/src/tool/dewPointCalculator/i18n/it.ts +7 -17
  29. package/src/tool/dewPointCalculator/i18n/ja.ts +6 -16
  30. package/src/tool/dewPointCalculator/i18n/ko.ts +6 -16
  31. package/src/tool/dewPointCalculator/i18n/nl.ts +7 -17
  32. package/src/tool/dewPointCalculator/i18n/pl.ts +7 -17
  33. package/src/tool/dewPointCalculator/i18n/pt.ts +7 -17
  34. package/src/tool/dewPointCalculator/i18n/ru.ts +13 -23
  35. package/src/tool/dewPointCalculator/i18n/sv.ts +7 -17
  36. package/src/tool/dewPointCalculator/i18n/tr.ts +6 -16
  37. package/src/tool/dewPointCalculator/i18n/zh.ts +7 -17
  38. package/src/tool/dewPointCalculator/seo.astro +2 -1
  39. package/src/tool/heatingComparator/bibliography.ts +14 -0
  40. package/src/tool/heatingComparator/i18n/de.ts +10 -24
  41. package/src/tool/heatingComparator/i18n/en.ts +3 -13
  42. package/src/tool/heatingComparator/i18n/es.ts +3 -17
  43. package/src/tool/heatingComparator/i18n/fr.ts +9 -19
  44. package/src/tool/heatingComparator/i18n/id.ts +3 -17
  45. package/src/tool/heatingComparator/i18n/it.ts +3 -17
  46. package/src/tool/heatingComparator/i18n/ja.ts +296 -310
  47. package/src/tool/heatingComparator/i18n/ko.ts +296 -306
  48. package/src/tool/heatingComparator/i18n/nl.ts +3 -17
  49. package/src/tool/heatingComparator/i18n/pl.ts +3 -17
  50. package/src/tool/heatingComparator/i18n/pt.ts +3 -17
  51. package/src/tool/heatingComparator/i18n/ru.ts +14 -24
  52. package/src/tool/heatingComparator/i18n/sv.ts +6 -20
  53. package/src/tool/heatingComparator/i18n/tr.ts +2 -16
  54. package/src/tool/heatingComparator/i18n/zh.ts +296 -306
  55. package/src/tool/heatingComparator/seo.astro +3 -3
  56. package/src/tool/ledSavingCalculator/bibliography.ts +14 -0
  57. package/src/tool/ledSavingCalculator/i18n/de.ts +6 -16
  58. package/src/tool/ledSavingCalculator/i18n/en.ts +6 -20
  59. package/src/tool/ledSavingCalculator/i18n/es.ts +6 -20
  60. package/src/tool/ledSavingCalculator/i18n/fr.ts +10 -24
  61. package/src/tool/ledSavingCalculator/i18n/id.ts +5 -15
  62. package/src/tool/ledSavingCalculator/i18n/it.ts +6 -16
  63. package/src/tool/ledSavingCalculator/i18n/ja.ts +5 -15
  64. package/src/tool/ledSavingCalculator/i18n/ko.ts +4 -14
  65. package/src/tool/ledSavingCalculator/i18n/nl.ts +5 -15
  66. package/src/tool/ledSavingCalculator/i18n/pl.ts +5 -15
  67. package/src/tool/ledSavingCalculator/i18n/pt.ts +5 -15
  68. package/src/tool/ledSavingCalculator/i18n/ru.ts +8 -18
  69. package/src/tool/ledSavingCalculator/i18n/sv.ts +5 -15
  70. package/src/tool/ledSavingCalculator/i18n/tr.ts +5 -15
  71. package/src/tool/ledSavingCalculator/i18n/zh.ts +6 -16
  72. package/src/tool/ledSavingCalculator/seo.astro +2 -1
  73. package/src/tool/projectorCalculator/bibliography.ts +5 -0
  74. package/src/tool/projectorCalculator/i18n/de.ts +4 -8
  75. package/src/tool/projectorCalculator/i18n/en.ts +3 -8
  76. package/src/tool/projectorCalculator/i18n/es.ts +4 -9
  77. package/src/tool/projectorCalculator/i18n/fr.ts +6 -11
  78. package/src/tool/projectorCalculator/i18n/id.ts +4 -9
  79. package/src/tool/projectorCalculator/i18n/it.ts +4 -8
  80. package/src/tool/projectorCalculator/i18n/ja.ts +175 -179
  81. package/src/tool/projectorCalculator/i18n/ko.ts +175 -179
  82. package/src/tool/projectorCalculator/i18n/nl.ts +4 -8
  83. package/src/tool/projectorCalculator/i18n/pl.ts +5 -9
  84. package/src/tool/projectorCalculator/i18n/pt.ts +4 -8
  85. package/src/tool/projectorCalculator/i18n/ru.ts +7 -11
  86. package/src/tool/projectorCalculator/i18n/sv.ts +4 -8
  87. package/src/tool/projectorCalculator/i18n/tr.ts +4 -8
  88. package/src/tool/projectorCalculator/i18n/zh.ts +175 -179
  89. package/src/tool/projectorCalculator/seo.astro +2 -1
  90. package/src/tool/qrGenerator/bibliography.ts +14 -0
  91. package/src/tool/qrGenerator/i18n/de.ts +192 -202
  92. package/src/tool/qrGenerator/i18n/en.ts +3 -17
  93. package/src/tool/qrGenerator/i18n/es.ts +2 -16
  94. package/src/tool/qrGenerator/i18n/fr.ts +3 -17
  95. package/src/tool/qrGenerator/i18n/id.ts +146 -150
  96. package/src/tool/qrGenerator/i18n/it.ts +169 -173
  97. package/src/tool/qrGenerator/i18n/ja.ts +146 -150
  98. package/src/tool/qrGenerator/i18n/ko.ts +146 -150
  99. package/src/tool/qrGenerator/i18n/nl.ts +146 -150
  100. package/src/tool/qrGenerator/i18n/pl.ts +146 -150
  101. package/src/tool/qrGenerator/i18n/pt.ts +146 -150
  102. package/src/tool/qrGenerator/i18n/ru.ts +146 -150
  103. package/src/tool/qrGenerator/i18n/sv.ts +146 -150
  104. package/src/tool/qrGenerator/i18n/tr.ts +146 -150
  105. package/src/tool/qrGenerator/i18n/zh.ts +146 -150
  106. package/src/tool/qrGenerator/seo.astro +2 -1
  107. package/src/tool/solarCalculator/bibliography.ts +5 -0
  108. package/src/tool/solarCalculator/i18n/de.ts +141 -145
  109. package/src/tool/solarCalculator/i18n/en.ts +7 -12
  110. package/src/tool/solarCalculator/i18n/es.ts +5 -10
  111. package/src/tool/solarCalculator/i18n/fr.ts +8 -13
  112. package/src/tool/solarCalculator/i18n/id.ts +4 -8
  113. package/src/tool/solarCalculator/i18n/it.ts +4 -8
  114. package/src/tool/solarCalculator/i18n/ja.ts +121 -125
  115. package/src/tool/solarCalculator/i18n/ko.ts +116 -120
  116. package/src/tool/solarCalculator/i18n/nl.ts +4 -7
  117. package/src/tool/solarCalculator/i18n/pl.ts +5 -9
  118. package/src/tool/solarCalculator/i18n/pt.ts +4 -8
  119. package/src/tool/solarCalculator/i18n/ru.ts +7 -10
  120. package/src/tool/solarCalculator/i18n/sv.ts +4 -7
  121. package/src/tool/solarCalculator/i18n/tr.ts +4 -7
  122. package/src/tool/solarCalculator/i18n/zh.ts +116 -120
  123. package/src/tool/solarCalculator/seo.astro +2 -1
  124. package/src/tool/tariffComparator/bibliography.ts +7 -0
  125. package/src/tool/tariffComparator/i18n/de.ts +129 -132
  126. package/src/tool/tariffComparator/i18n/en.ts +5 -12
  127. package/src/tool/tariffComparator/i18n/es.ts +5 -12
  128. package/src/tool/tariffComparator/i18n/fr.ts +8 -15
  129. package/src/tool/tariffComparator/i18n/id.ts +2 -5
  130. package/src/tool/tariffComparator/i18n/it.ts +2 -5
  131. package/src/tool/tariffComparator/i18n/ja.ts +129 -132
  132. package/src/tool/tariffComparator/i18n/ko.ts +129 -132
  133. package/src/tool/tariffComparator/i18n/nl.ts +2 -5
  134. package/src/tool/tariffComparator/i18n/pl.ts +3 -6
  135. package/src/tool/tariffComparator/i18n/pt.ts +2 -5
  136. package/src/tool/tariffComparator/i18n/ru.ts +2 -5
  137. package/src/tool/tariffComparator/i18n/sv.ts +2 -5
  138. package/src/tool/tariffComparator/i18n/tr.ts +2 -5
  139. package/src/tool/tariffComparator/i18n/zh.ts +129 -132
  140. package/src/tool/tariffComparator/seo.astro +2 -1
  141. package/src/tool/wifiRangeSimulator/bibliography.astro +14 -0
  142. package/src/tool/wifiRangeSimulator/bibliography.ts +14 -0
  143. package/src/tool/wifiRangeSimulator/component.astro +170 -0
  144. package/src/tool/wifiRangeSimulator/entry.ts +29 -0
  145. package/src/tool/wifiRangeSimulator/i18n/de.ts +477 -0
  146. package/src/tool/wifiRangeSimulator/i18n/en.ts +477 -0
  147. package/src/tool/wifiRangeSimulator/i18n/es.ts +477 -0
  148. package/src/tool/wifiRangeSimulator/i18n/fr.ts +477 -0
  149. package/src/tool/wifiRangeSimulator/i18n/id.ts +477 -0
  150. package/src/tool/wifiRangeSimulator/i18n/it.ts +477 -0
  151. package/src/tool/wifiRangeSimulator/i18n/ja.ts +477 -0
  152. package/src/tool/wifiRangeSimulator/i18n/ko.ts +477 -0
  153. package/src/tool/wifiRangeSimulator/i18n/nl.ts +477 -0
  154. package/src/tool/wifiRangeSimulator/i18n/pl.ts +477 -0
  155. package/src/tool/wifiRangeSimulator/i18n/pt.ts +477 -0
  156. package/src/tool/wifiRangeSimulator/i18n/ru.ts +477 -0
  157. package/src/tool/wifiRangeSimulator/i18n/sv.ts +477 -0
  158. package/src/tool/wifiRangeSimulator/i18n/tr.ts +477 -0
  159. package/src/tool/wifiRangeSimulator/i18n/zh.ts +477 -0
  160. package/src/tool/wifiRangeSimulator/i18n-utils.ts +14 -0
  161. package/src/tool/wifiRangeSimulator/index.ts +8 -0
  162. package/src/tool/wifiRangeSimulator/logic.ts +220 -0
  163. package/src/tool/wifiRangeSimulator/seo.astro +15 -0
  164. package/src/tool/wifiRangeSimulator/sketch-actions.ts +168 -0
  165. package/src/tool/wifiRangeSimulator/sketch-events.ts +138 -0
  166. package/src/tool/wifiRangeSimulator/sketch-render-dash.ts +170 -0
  167. package/src/tool/wifiRangeSimulator/sketch-render-device.ts +42 -0
  168. package/src/tool/wifiRangeSimulator/sketch-render.ts +155 -0
  169. package/src/tool/wifiRangeSimulator/sketch-state.ts +186 -0
  170. package/src/tool/wifiRangeSimulator/sketch.ts +100 -0
  171. package/src/tool/wifiRangeSimulator/ui.ts +69 -0
  172. package/src/tool/wifiRangeSimulator/wifi-range-simulator.css +583 -0
  173. package/src/tools.ts +2 -0
  174. package/src/types.ts +0 -2
@@ -1,151 +1,147 @@
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-dutch';
6
- const title = 'Offline QR Code Generator';
7
- const description =
8
- 'Genereer 100% veilig QR-codes voor WiFi, URL\'s en contacten in uw browser. Uw gegevens ver laten uw apparaat nooit.';
9
-
10
- const faqData = [
11
- {
12
- question: 'Verlopen deze QR-codes?',
13
- answer:
14
- 'Nee. Deze codes zijn statisch. De informatie is direct in de afbeelding gecodeerd. Ze werken voor altijd.',
15
- },
16
- {
17
- question: 'Worden mijn gegevens bewaard?',
18
- answer:
19
- 'Absoluut niet. Het proces vindt volledig plaats in uw browser (Client-Side). Geen gegevens worden naar onze servers gestuurd.',
20
- },
21
- {
22
- question: 'Werkt het op iPhone en Android?',
23
- answer:
24
- 'Ja. Moderne camera\'s op iOS en Android herkennen QR-codes direct en suggereren de actie (verbinden met WiFi, link openen, etc.).',
25
- },
26
- {
27
- question: 'Kan ik het zonder internet gebruiken?',
28
- answer:
29
- 'Ja. Zodra de pagina geladen is, kunt u de verbinding verbreken en de generator blijft gewoon werken.',
30
- },
31
- ];
32
-
33
- const howToData = [
34
- {
35
- name: 'Kies type QR',
36
- text: 'Selecteer of u een code wilt voor WiFi, een URL of een contact (vCard).',
37
- },
38
- {
39
- name: 'Voer gegevens in',
40
- text: 'Vul de velden in, zoals netwerknaam en wachtwoord, of het webadres.',
41
- },
42
- {
43
- name: 'Genereer en test',
44
- text: 'De code wordt direct gemaakt. Scan hem direct vanaf het scherm om te testen.',
45
- },
46
- {
47
- name: 'Downloaden',
48
- text: 'Sla de QR-code op als afbeelding om te printen of te delen.',
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-dutch';
7
+ const title = 'Offline QR Code Generator';
8
+ const description =
9
+ 'Genereer 100% veilig QR-codes voor WiFi, URL\'s en contacten in uw browser. Uw gegevens ver laten uw apparaat nooit.';
10
+
11
+ const faqData = [
12
+ {
13
+ question: 'Verlopen deze QR-codes?',
14
+ answer:
15
+ 'Nee. Deze codes zijn statisch. De informatie is direct in de afbeelding gecodeerd. Ze werken voor altijd.',
16
+ },
17
+ {
18
+ question: 'Worden mijn gegevens bewaard?',
19
+ answer:
20
+ 'Absoluut niet. Het proces vindt volledig plaats in uw browser (Client-Side). Geen gegevens worden naar onze servers gestuurd.',
21
+ },
22
+ {
23
+ question: 'Werkt het op iPhone en Android?',
24
+ answer:
25
+ 'Ja. Moderne camera\'s op iOS en Android herkennen QR-codes direct en suggereren de actie (verbinden met WiFi, link openen, etc.).',
26
+ },
27
+ {
28
+ question: 'Kan ik het zonder internet gebruiken?',
29
+ answer:
30
+ 'Ja. Zodra de pagina geladen is, kunt u de verbinding verbreken en de generator blijft gewoon werken.',
31
+ },
32
+ ];
33
+
34
+ const howToData = [
35
+ {
36
+ name: 'Kies type QR',
37
+ text: 'Selecteer of u een code wilt voor WiFi, een URL of een contact (vCard).',
38
+ },
39
+ {
40
+ name: 'Voer gegevens in',
41
+ text: 'Vul de velden in, zoals netwerknaam en wachtwoord, of het webadres.',
42
+ },
43
+ {
44
+ name: 'Genereer en test',
45
+ text: 'De code wordt direct gemaakt. Scan hem direct vanaf het scherm om te testen.',
46
+ },
47
+ {
48
+ name: 'Downloaden',
49
+ text: 'Sla de QR-code op als afbeelding om te printen of te delen.',
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: 'nl',
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: 'nl',
83
- };
84
-
85
- export const content: ToolLocaleContent<QRGeneratorUI> = {
86
- slug,
87
- title,
88
- description,
89
- faqTitle: 'Veelgestelde Vragen',
90
- faq: faqData,
91
- bibliographyTitle: 'Referenties',
92
- bibliography: [
93
- { name: 'node-qrcode library', url: 'https://github.com/soldair/node-qrcode' },
94
- { name: 'vCard Standard v3.0', url: 'https://www.rfc-editor.org/rfc/rfc6350' },
95
- ],
96
- howTo: howToData,
97
- schemas: [faqSchema, howToSchema, appSchema],
98
- seo: [
99
- {
100
- type: 'title',
101
- text: 'Privacy Eerst: Lokale Generatie',
102
- level: 2,
103
- },
104
- {
105
- type: 'paragraph',
106
- html: 'Deze tool genereert QR-codes direct op uw toestel. Veilig voor uw <strong>WiFi-wachtwoorden</strong> of <strong>persoonlijke gegevens</strong>.',
107
- },
108
- {
109
- type: 'stats',
110
- items: [
111
- { value: '100%', label: 'Privé', icon: 'mdi:shield-lock' },
112
- { value: 'Offline', label: 'Geen Server', icon: 'mdi:wifi-off' },
113
- { value: 'PNG', label: 'Download', icon: 'mdi:download' },
114
- ],
115
- columns: 3,
116
- },
117
- {
118
- type: 'summary',
119
- title: 'Gebruikstips',
120
- items: [
121
- 'Gegevens worden alleen in de browser verwerkt.',
122
- 'Let op hoofdletters bij de WiFi-naam.',
123
- 'Statische QR: bij een nieuw wachtwoord moet u een nieuwe QR maken.',
124
- 'Test de code altijd even voor u hem print.',
125
- ],
126
- },
127
- ],
128
- ui: {
129
- tabWifi: 'WiFi',
130
- tabUrl: 'URL',
131
- tabContact: 'Contact',
132
- labelSsid: 'Netwerknaam (SSID)',
133
- labelPassword: 'Wachtwoord',
134
- labelEncryption: 'Beveiliging',
135
- labelHidden: 'Verborgen netwerk',
136
- labelUrl: 'Webadres (URL)',
137
- labelName: 'Voornaam',
138
- labelSurname: 'Achternaam',
139
- labelPhone: 'Telefoon',
140
- labelEmail: 'Email',
141
- labelOrg: 'Organisatie / Bedrijf',
142
- encWpa: 'WPA/WPA2',
143
- encWep: 'WEP',
144
- encNone: 'Geen',
145
- downloadBtn: 'PNG downloaden',
146
- privacyMsg: '100% gegenereerd in de browser. Veilig en privé.',
147
- placeholderSsid: 'MijnWiFi_5G',
148
- placeholderUrl: 'https://voorbeeld.nl',
149
- placeholderPassword: '••••••••',
150
- },
151
- };
90
+ faq: faqData,
91
+ bibliography,
92
+ howTo: howToData,
93
+ schemas: [faqSchema, howToSchema, appSchema],
94
+ seo: [
95
+ {
96
+ type: 'title',
97
+ text: 'Privacy Eerst: Lokale Generatie',
98
+ level: 2,
99
+ },
100
+ {
101
+ type: 'paragraph',
102
+ html: 'Deze tool genereert QR-codes direct op uw toestel. Veilig voor uw <strong>WiFi-wachtwoorden</strong> of <strong>persoonlijke gegevens</strong>.',
103
+ },
104
+ {
105
+ type: 'stats',
106
+ items: [
107
+ { value: '100%', label: 'Privé', icon: 'mdi:shield-lock' },
108
+ { value: 'Offline', label: 'Geen Server', icon: 'mdi:wifi-off' },
109
+ { value: 'PNG', label: 'Download', icon: 'mdi:download' },
110
+ ],
111
+ columns: 3,
112
+ },
113
+ {
114
+ type: 'summary',
115
+ title: 'Gebruikstips',
116
+ items: [
117
+ 'Gegevens worden alleen in de browser verwerkt.',
118
+ 'Let op hoofdletters bij de WiFi-naam.',
119
+ 'Statische QR: bij een nieuw wachtwoord moet u een nieuwe QR maken.',
120
+ 'Test de code altijd even voor u hem print.',
121
+ ],
122
+ },
123
+ ],
124
+ ui: {
125
+ tabWifi: 'WiFi',
126
+ tabUrl: 'URL',
127
+ tabContact: 'Contact',
128
+ labelSsid: 'Netwerknaam (SSID)',
129
+ labelPassword: 'Wachtwoord',
130
+ labelEncryption: 'Beveiliging',
131
+ labelHidden: 'Verborgen netwerk',
132
+ labelUrl: 'Webadres (URL)',
133
+ labelName: 'Voornaam',
134
+ labelSurname: 'Achternaam',
135
+ labelPhone: 'Telefoon',
136
+ labelEmail: 'Email',
137
+ labelOrg: 'Organisatie / Bedrijf',
138
+ encWpa: 'WPA/WPA2',
139
+ encWep: 'WEP',
140
+ encNone: 'Geen',
141
+ downloadBtn: 'PNG downloaden',
142
+ privacyMsg: '100% gegenereerd in de browser. Veilig en privé.',
143
+ placeholderSsid: 'MijnWiFi_5G',
144
+ placeholderUrl: 'https://voorbeeld.nl',
145
+ placeholderPassword: '••••••••',
146
+ },
147
+ };
@@ -1,151 +1,147 @@
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 = 'generator-kodow-qr-offline';
6
- const title = 'Generator Kodów QR Offline';
7
- const description =
8
- 'Generuj kody QR dla WiFi, URL i Kontaktów w 100% bezpiecznie w swojej przeglądarce. Twoje dane nigdy nie opuszczają urządzenia.';
9
-
10
- const faqData = [
11
- {
12
- question: 'Czy te kody QR wygasają?',
13
- answer:
14
- 'Nie. Wygenerowane tutaj kody są statyczne. Informacja jest zakodowana bezpośrednio w obrazie. Będą działać na zawsze.',
15
- },
16
- {
17
- question: 'Czy zapisujecie moje dane?',
18
- answer:
19
- 'Absolutnie nie. Cały proces odbywa się w Twojej przeglądarce (Client-Side). Żadne dane nie są wysyłane na serwer.',
20
- },
21
- {
22
- question: 'Czy to działa na iPhone i Android?',
23
- answer:
24
- 'Tak. Większość nowoczesnych smartfonów czyta kody QR natywnie i sugeruje akcję (połącz z WiFi, otwórz link itp.).',
25
- },
26
- {
27
- question: 'Czy mogę używać tego bez internetu?',
28
- answer:
29
- 'Tak. Gdy strona się załaduje, możesz odłączyć sieć, a generator nadal będzie tworzył kody.',
30
- },
31
- ];
32
-
33
- const howToData = [
34
- {
35
- name: 'Wybierz typ QR',
36
- text: 'Wybierz czy chcesz kod dla sieci WiFi, linku URL czy kontaktu (vCard).',
37
- },
38
- {
39
- name: 'Wpisz dane',
40
- text: 'Wypełnij pola, takie jak nazwa sieci i hasło, lub adres strony.',
41
- },
42
- {
43
- name: 'Generuj i sprawdź',
44
- text: 'Kod powstaje natychmiast. Możesz go przetestować skanując go prosto z ekranu.',
45
- },
46
- {
47
- name: 'Pobierz',
48
- text: 'Zapisz kod QR jako obraz, aby go wydrukować lub udostępnić.',
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 = 'generator-kodow-qr-offline';
7
+ const title = 'Generator Kodów QR Offline';
8
+ const description =
9
+ 'Generuj kody QR dla WiFi, URL i Kontaktów w 100% bezpiecznie w swojej przeglądarce. Twoje dane nigdy nie opuszczają urządzenia.';
10
+
11
+ const faqData = [
12
+ {
13
+ question: 'Czy te kody QR wygasają?',
14
+ answer:
15
+ 'Nie. Wygenerowane tutaj kody są statyczne. Informacja jest zakodowana bezpośrednio w obrazie. Będą działać na zawsze.',
16
+ },
17
+ {
18
+ question: 'Czy zapisujecie moje dane?',
19
+ answer:
20
+ 'Absolutnie nie. Cały proces odbywa się w Twojej przeglądarce (Client-Side). Żadne dane nie są wysyłane na serwer.',
21
+ },
22
+ {
23
+ question: 'Czy to działa na iPhone i Android?',
24
+ answer:
25
+ 'Tak. Większość nowoczesnych smartfonów czyta kody QR natywnie i sugeruje akcję (połącz z WiFi, otwórz link itp.).',
26
+ },
27
+ {
28
+ question: 'Czy mogę używać tego bez internetu?',
29
+ answer:
30
+ 'Tak. Gdy strona się załaduje, możesz odłączyć sieć, a generator nadal będzie tworzył kody.',
31
+ },
32
+ ];
33
+
34
+ const howToData = [
35
+ {
36
+ name: 'Wybierz typ QR',
37
+ text: 'Wybierz czy chcesz kod dla sieci WiFi, linku URL czy kontaktu (vCard).',
38
+ },
39
+ {
40
+ name: 'Wpisz dane',
41
+ text: 'Wypełnij pola, takie jak nazwa sieci i hasło, lub adres strony.',
42
+ },
43
+ {
44
+ name: 'Generuj i sprawdź',
45
+ text: 'Kod powstaje natychmiast. Możesz go przetestować skanując go prosto z ekranu.',
46
+ },
47
+ {
48
+ name: 'Pobierz',
49
+ text: 'Zapisz kod QR jako obraz, aby go wydrukować lub udostępnić.',
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: 'PLN' },
83
+ inLanguage: 'pl',
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: 'PLN' },
82
- inLanguage: 'pl',
83
- };
84
-
85
- export const content: ToolLocaleContent<QRGeneratorUI> = {
86
- slug,
87
- title,
88
- description,
89
- faqTitle: 'Często Zadawane Pytania',
90
- faq: faqData,
91
- bibliographyTitle: 'Bibliografia',
92
- bibliography: [
93
- { name: 'biblioteka node-qrcode', url: 'https://github.com/soldair/node-qrcode' },
94
- { name: 'Specyfikacja vCard (RFC 6350)', url: 'https://www.rfc-editor.org/rfc/rfc6350' },
95
- ],
96
- howTo: howToData,
97
- schemas: [faqSchema, howToSchema, appSchema],
98
- seo: [
99
- {
100
- type: 'title',
101
- text: 'Prywatność Przede Wszystkim: Generowanie Lokalne',
102
- level: 2,
103
- },
104
- {
105
- type: 'paragraph',
106
- html: 'To narzędzie tworzy kod QR bezpośrednio na Twoim urządzeniu. Pełne bezpieczeństwo dla Twoich <strong>haseł WiFi</strong> i <strong>danych kontaktowych</strong>.',
107
- },
108
- {
109
- type: 'stats',
110
- items: [
111
- { value: '100%', label: 'Prywatnie', icon: 'mdi:shield-lock' },
112
- { value: 'Offline', label: 'Brak Serwera', icon: 'mdi:wifi-off' },
113
- { value: 'PNG', label: 'Pobieranie', icon: 'mdi:download' },
114
- ],
115
- columns: 3,
116
- },
117
- {
118
- type: 'summary',
119
- title: 'Porady',
120
- items: [
121
- 'Dane przetwarzane wyłącznie lokalnie w przeglądarce.',
122
- 'Pamiętaj o wielkości liter w nazwie WiFi.',
123
- 'Kody statyczne: zmiana danych wymaga nowego kodu.',
124
- 'Przetestuj kod przed drukowaniem.',
125
- ],
126
- },
127
- ],
128
- ui: {
129
- tabWifi: 'WiFi',
130
- tabUrl: 'URL',
131
- tabContact: 'Kontakt',
132
- labelSsid: 'Nazwa Sieci (SSID)',
133
- labelPassword: 'Hasło',
134
- labelEncryption: 'Zabezpieczenia',
135
- labelHidden: 'Ukryta Sieć',
136
- labelUrl: 'Adres WWW (URL)',
137
- labelName: 'Imię',
138
- labelSurname: 'Nazwisko',
139
- labelPhone: 'Telefon',
140
- labelEmail: 'Email',
141
- labelOrg: 'Organizacja / Firma',
142
- encWpa: 'WPA/WPA2',
143
- encWep: 'WEP',
144
- encNone: 'Brak',
145
- downloadBtn: 'Pobierz PNG',
146
- privacyMsg: 'Wygenerowane w 100% w przeglądarce. Dane są bezpieczne.',
147
- placeholderSsid: 'MojaSiec_5G',
148
- placeholderUrl: 'https://przyklad.pl',
149
- placeholderPassword: '••••••••',
150
- },
151
- };
90
+ faq: faqData,
91
+ bibliography,
92
+ howTo: howToData,
93
+ schemas: [faqSchema, howToSchema, appSchema],
94
+ seo: [
95
+ {
96
+ type: 'title',
97
+ text: 'Prywatność Przede Wszystkim: Generowanie Lokalne',
98
+ level: 2,
99
+ },
100
+ {
101
+ type: 'paragraph',
102
+ html: 'To narzędzie tworzy kod QR bezpośrednio na Twoim urządzeniu. Pełne bezpieczeństwo dla Twoich <strong>haseł WiFi</strong> i <strong>danych kontaktowych</strong>.',
103
+ },
104
+ {
105
+ type: 'stats',
106
+ items: [
107
+ { value: '100%', label: 'Prywatnie', icon: 'mdi:shield-lock' },
108
+ { value: 'Offline', label: 'Brak Serwera', icon: 'mdi:wifi-off' },
109
+ { value: 'PNG', label: 'Pobieranie', icon: 'mdi:download' },
110
+ ],
111
+ columns: 3,
112
+ },
113
+ {
114
+ type: 'summary',
115
+ title: 'Porady',
116
+ items: [
117
+ 'Dane przetwarzane wyłącznie lokalnie w przeglądarce.',
118
+ 'Pamiętaj o wielkości liter w nazwie WiFi.',
119
+ 'Kody statyczne: zmiana danych wymaga nowego kodu.',
120
+ 'Przetestuj kod przed drukowaniem.',
121
+ ],
122
+ },
123
+ ],
124
+ ui: {
125
+ tabWifi: 'WiFi',
126
+ tabUrl: 'URL',
127
+ tabContact: 'Kontakt',
128
+ labelSsid: 'Nazwa Sieci (SSID)',
129
+ labelPassword: 'Hasło',
130
+ labelEncryption: 'Zabezpieczenia',
131
+ labelHidden: 'Ukryta Sieć',
132
+ labelUrl: 'Adres WWW (URL)',
133
+ labelName: 'Imię',
134
+ labelSurname: 'Nazwisko',
135
+ labelPhone: 'Telefon',
136
+ labelEmail: 'Email',
137
+ labelOrg: 'Organizacja / Firma',
138
+ encWpa: 'WPA/WPA2',
139
+ encWep: 'WEP',
140
+ encNone: 'Brak',
141
+ downloadBtn: 'Pobierz PNG',
142
+ privacyMsg: 'Wygenerowane w 100% w przeglądarce. Dane są bezpieczne.',
143
+ placeholderSsid: 'MojaSiec_5G',
144
+ placeholderUrl: 'https://przyklad.pl',
145
+ placeholderPassword: '••••••••',
146
+ },
147
+ };