@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-kod-generator';
6
- const title = 'Offline QR Kod Generator';
7
- const description =
8
- 'Skapa QR-koder för WiFi, URL och Kontakter 100% säkert i din webbläsare. Dina data lämnar aldrig din enhet.';
9
-
10
- const faqData = [
11
- {
12
- question: 'Går dessa QR-koder ut?',
13
- answer:
14
- 'Nej. Koderna som genereras här är statiska. Informationen är kodad direkt i bilden. De kommer att fungera för alltid.',
15
- },
16
- {
17
- question: 'Sparar ni mina data?',
18
- answer:
19
- 'Absolut inte. Hela processen sker i din webbläsare (Client-Side). Ingen data skickas till våra servrar.',
20
- },
21
- {
22
- question: 'Fungerar det på iPhone och Android?',
23
- answer:
24
- 'Ja. De flesta moderna kameror i iOS och Android läser QR-koder nativt och föreslår rätt åtgärd (anslut till WiFi, öppna länk etc.).',
25
- },
26
- {
27
- question: 'Kan jag använda den utan internet?',
28
- answer:
29
- 'Ja. När sidan väl har laddats kan du koppla bort nätet och generatorn fortsätter att fungera perfekt.',
30
- },
31
- ];
32
-
33
- const howToData = [
34
- {
35
- name: 'Välj typ av QR',
36
- text: 'Välj om du vill skapa för WiFi, en URL eller en kontakt (vCard).',
37
- },
38
- {
39
- name: 'Fyll i uppgifter',
40
- text: 'Fyll i fälten som nätverksnamn och lösenord, eller webbadress.',
41
- },
42
- {
43
- name: 'Skapa och testa',
44
- text: 'Koden skapas direkt. Du kan testa att skanna den direkt från skärmen.',
45
- },
46
- {
47
- name: 'Ladda ner',
48
- text: 'Spara QR-koden som bild för att skriva ut eller dela digitalt.',
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-kod-generator';
7
+ const title = 'Offline QR Kod Generator';
8
+ const description =
9
+ 'Skapa QR-koder för WiFi, URL och Kontakter 100% säkert i din webbläsare. Dina data lämnar aldrig din enhet.';
10
+
11
+ const faqData = [
12
+ {
13
+ question: 'Går dessa QR-koder ut?',
14
+ answer:
15
+ 'Nej. Koderna som genereras här är statiska. Informationen är kodad direkt i bilden. De kommer att fungera för alltid.',
16
+ },
17
+ {
18
+ question: 'Sparar ni mina data?',
19
+ answer:
20
+ 'Absolut inte. Hela processen sker i din webbläsare (Client-Side). Ingen data skickas till våra servrar.',
21
+ },
22
+ {
23
+ question: 'Fungerar det på iPhone och Android?',
24
+ answer:
25
+ 'Ja. De flesta moderna kameror i iOS och Android läser QR-koder nativt och föreslår rätt åtgärd (anslut till WiFi, öppna länk etc.).',
26
+ },
27
+ {
28
+ question: 'Kan jag använda den utan internet?',
29
+ answer:
30
+ 'Ja. När sidan väl har laddats kan du koppla bort nätet och generatorn fortsätter att fungera perfekt.',
31
+ },
32
+ ];
33
+
34
+ const howToData = [
35
+ {
36
+ name: 'Välj typ av QR',
37
+ text: 'Välj om du vill skapa för WiFi, en URL eller en kontakt (vCard).',
38
+ },
39
+ {
40
+ name: 'Fyll i uppgifter',
41
+ text: 'Fyll i fälten som nätverksnamn och lösenord, eller webbadress.',
42
+ },
43
+ {
44
+ name: 'Skapa och testa',
45
+ text: 'Koden skapas direkt. Du kan testa att skanna den direkt från skärmen.',
46
+ },
47
+ {
48
+ name: 'Ladda ner',
49
+ text: 'Spara QR-koden som bild för att skriva ut eller dela digitalt.',
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: 'SEK' },
83
+ inLanguage: 'sv',
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: 'SEK' },
82
- inLanguage: 'sv',
83
- };
84
-
85
- export const content: ToolLocaleContent<QRGeneratorUI> = {
86
- slug,
87
- title,
88
- description,
89
- faqTitle: 'Vanliga Frågor',
90
- faq: faqData,
91
- bibliographyTitle: 'Referenser',
92
- bibliography: [
93
- { name: 'node-qrcode bibliotek', url: 'https://github.com/soldair/node-qrcode' },
94
- { name: 'vCard standard (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: 'Sekretess Först: Lokal Generering',
102
- level: 2,
103
- },
104
- {
105
- type: 'paragraph',
106
- html: 'Det här verktyget skapar QR-koden i din enhet. Total säkerhet för dina <strong>WiFi-lösenord</strong> eller <strong>personuppgifter</strong>.',
107
- },
108
- {
109
- type: 'stats',
110
- items: [
111
- { value: '100%', label: 'Privat', icon: 'mdi:shield-lock' },
112
- { value: 'Offline', label: 'Ingen server', icon: 'mdi:wifi-off' },
113
- { value: 'PNG', label: 'Ladda ner', icon: 'mdi:download' },
114
- ],
115
- columns: 3,
116
- },
117
- {
118
- type: 'summary',
119
- title: 'Användningstips',
120
- items: [
121
- 'Data bearbetas endast lokalt i webbläsaren.',
122
- 'Var noga med stora/små bokstäver i WiFi-namnet.',
123
- 'Statiska QR: om du byter lösenord måste du göra en ny kod.',
124
- 'Testskanna alltid koden innan utskrift.',
125
- ],
126
- },
127
- ],
128
- ui: {
129
- tabWifi: 'WiFi',
130
- tabUrl: 'URL',
131
- tabContact: 'Kontakt',
132
- labelSsid: 'Nätverksnamn (SSID)',
133
- labelPassword: 'Lösenord',
134
- labelEncryption: 'Säkerhet',
135
- labelHidden: 'Dolt nätverk',
136
- labelUrl: 'Webbadress (URL)',
137
- labelName: 'Förnamn',
138
- labelSurname: 'Efternamn',
139
- labelPhone: 'Telefon',
140
- labelEmail: 'E-post',
141
- labelOrg: 'Organisation / Företag',
142
- encWpa: 'WPA/WPA2',
143
- encWep: 'WEP',
144
- encNone: 'Ingen',
145
- downloadBtn: 'Ladda ner PNG',
146
- privacyMsg: 'Genererad 100% i webbläsaren. Dina data är säkra.',
147
- placeholderSsid: 'MittWiFi_5G',
148
- placeholderUrl: 'https://exempel.se',
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: 'Sekretess Först: Lokal Generering',
98
+ level: 2,
99
+ },
100
+ {
101
+ type: 'paragraph',
102
+ html: 'Det här verktyget skapar QR-koden i din enhet. Total säkerhet för dina <strong>WiFi-lösenord</strong> eller <strong>personuppgifter</strong>.',
103
+ },
104
+ {
105
+ type: 'stats',
106
+ items: [
107
+ { value: '100%', label: 'Privat', icon: 'mdi:shield-lock' },
108
+ { value: 'Offline', label: 'Ingen server', icon: 'mdi:wifi-off' },
109
+ { value: 'PNG', label: 'Ladda ner', icon: 'mdi:download' },
110
+ ],
111
+ columns: 3,
112
+ },
113
+ {
114
+ type: 'summary',
115
+ title: 'Användningstips',
116
+ items: [
117
+ 'Data bearbetas endast lokalt i webbläsaren.',
118
+ 'Var noga med stora/små bokstäver i WiFi-namnet.',
119
+ 'Statiska QR: om du byter lösenord måste du göra en ny kod.',
120
+ 'Testskanna alltid koden innan utskrift.',
121
+ ],
122
+ },
123
+ ],
124
+ ui: {
125
+ tabWifi: 'WiFi',
126
+ tabUrl: 'URL',
127
+ tabContact: 'Kontakt',
128
+ labelSsid: 'Nätverksnamn (SSID)',
129
+ labelPassword: 'Lösenord',
130
+ labelEncryption: 'Säkerhet',
131
+ labelHidden: 'Dolt nätverk',
132
+ labelUrl: 'Webbadress (URL)',
133
+ labelName: 'Förnamn',
134
+ labelSurname: 'Efternamn',
135
+ labelPhone: 'Telefon',
136
+ labelEmail: 'E-post',
137
+ labelOrg: 'Organisation / Företag',
138
+ encWpa: 'WPA/WPA2',
139
+ encWep: 'WEP',
140
+ encNone: 'Ingen',
141
+ downloadBtn: 'Ladda ner PNG',
142
+ privacyMsg: 'Genererad 100% i webbläsaren. Dina data är säkra.',
143
+ placeholderSsid: 'MittWiFi_5G',
144
+ placeholderUrl: 'https://exempel.se',
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 = 'cevrimdisi-qr-kod-olusturucu';
6
- const title = 'Çevrimdışı QR Kod Oluşturucu';
7
- const description =
8
- 'WiFi, URL ve Kişiler için tarayıcınızda %100 güvenli QR kodları oluşturun. Verileriniz asla cihazınızdan dışarı çıkmaz.';
9
-
10
- const faqData = [
11
- {
12
- question: 'Bu QR kodlarının süresi dolar mı?',
13
- answer:
14
- 'Hayır. Burada oluşturulan kodlar statiktir. Bilgi doğrudan görüntünün içine kodlanmıştır. Sonsuza kadar çalışırlar.',
15
- },
16
- {
17
- question: 'Verilerimi kaydediyor musunuz?',
18
- answer:
19
- 'Kesinlikle hayır. Tüm süreç tarayıcınızda (istemci tarafında) gerçekleşir. Sunucularımıza hiçbir veri gönderilmez.',
20
- },
21
- {
22
- question: 'iPhone ve Android\'de çalışır mı?',
23
- answer:
24
- 'Evet. iOS ve Android\'deki çoğu modern kamera QR kodlarını yerel olarak okur ve ilgili işlemi (WiFi\'ye bağlan, linki aç vb.) önerir.',
25
- },
26
- {
27
- question: 'İnternet olmadan kullanabilir miyim?',
28
- answer:
29
- 'Evet. Sayfa yüklendikten sonra bağlantınızı kesebilirsiniz, oluşturucu çalışmaya devam edecektir.',
30
- },
31
- ];
32
-
33
- const howToData = [
34
- {
35
- name: 'QR Tipini Seçin',
36
- text: 'WiFi ağı, URL veya kişi (vCard) oluşturmak istediğinizi seçin.',
37
- },
38
- {
39
- name: 'Verileri Girin',
40
- text: ' adı, şifre veya web adresi gibi gerekli alanları doldurun.',
41
- },
42
- {
43
- name: 'Oluştur ve Kontrol Et',
44
- text: 'Kod anında oluşturulur. Ekrandan taratarak test edebilirsiniz.',
45
- },
46
- {
47
- name: 'İndir',
48
- text: 'QR kodu yazdırmak veya paylaşmak için görüntü olarak kaydedin.',
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 = 'cevrimdisi-qr-kod-olusturucu';
7
+ const title = 'Çevrimdışı QR Kod Oluşturucu';
8
+ const description =
9
+ 'WiFi, URL ve Kişiler için tarayıcınızda %100 güvenli QR kodları oluşturun. Verileriniz asla cihazınızdan dışarı çıkmaz.';
10
+
11
+ const faqData = [
12
+ {
13
+ question: 'Bu QR kodlarının süresi dolar mı?',
14
+ answer:
15
+ 'Hayır. Burada oluşturulan kodlar statiktir. Bilgi doğrudan görüntünün içine kodlanmıştır. Sonsuza kadar çalışırlar.',
16
+ },
17
+ {
18
+ question: 'Verilerimi kaydediyor musunuz?',
19
+ answer:
20
+ 'Kesinlikle hayır. Tüm süreç tarayıcınızda (istemci tarafında) gerçekleşir. Sunucularımıza hiçbir veri gönderilmez.',
21
+ },
22
+ {
23
+ question: 'iPhone ve Android\'de çalışır mı?',
24
+ answer:
25
+ 'Evet. iOS ve Android\'deki çoğu modern kamera QR kodlarını yerel olarak okur ve ilgili işlemi (WiFi\'ye bağlan, linki aç vb.) önerir.',
26
+ },
27
+ {
28
+ question: 'İnternet olmadan kullanabilir miyim?',
29
+ answer:
30
+ 'Evet. Sayfa yüklendikten sonra bağlantınızı kesebilirsiniz, oluşturucu çalışmaya devam edecektir.',
31
+ },
32
+ ];
33
+
34
+ const howToData = [
35
+ {
36
+ name: 'QR Tipini Seçin',
37
+ text: 'WiFi ağı, URL veya kişi (vCard) oluşturmak istediğinizi seçin.',
38
+ },
39
+ {
40
+ name: 'Verileri Girin',
41
+ text: 'Ağ adı, şifre veya web adresi gibi gerekli alanları doldurun.',
42
+ },
43
+ {
44
+ name: 'Oluştur ve Kontrol Et',
45
+ text: 'Kod anında oluşturulur. Ekrandan taratarak test edebilirsiniz.',
46
+ },
47
+ {
48
+ name: 'İndir',
49
+ text: 'QR kodu yazdırmak veya paylaşmak için görüntü olarak kaydedin.',
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: 'TRY' },
83
+ inLanguage: 'tr',
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: 'TRY' },
82
- inLanguage: 'tr',
83
- };
84
-
85
- export const content: ToolLocaleContent<QRGeneratorUI> = {
86
- slug,
87
- title,
88
- description,
89
- faqTitle: 'Sıkça Sorulan Sorular',
90
- faq: faqData,
91
- bibliographyTitle: 'Kaynakça',
92
- bibliography: [
93
- { name: 'node-qrcode kütüphanesi', url: 'https://github.com/soldair/node-qrcode' },
94
- { name: 'RFC 6350: vCard Spesifikasyonu', 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: 'Önce Gizlilik: Yerel Oluşturma',
102
- level: 2,
103
- },
104
- {
105
- type: 'paragraph',
106
- html: 'Bu araç QR kodlarını doğrudan cihazınızda oluşturur. <strong>WiFi şifreleriniz</strong> veya <strong>kişisel verileriniz</strong> için tam güvenlik.',
107
- },
108
- {
109
- type: 'stats',
110
- items: [
111
- { value: '%100', label: 'Gizli', icon: 'mdi:shield-lock' },
112
- { value: 'Offline', label: 'Sunucusuz', icon: 'mdi:wifi-off' },
113
- { value: 'PNG', label: 'İndir', icon: 'mdi:download' },
114
- ],
115
- columns: 3,
116
- },
117
- {
118
- type: 'summary',
119
- title: 'Kullanım İpuçları',
120
- items: [
121
- 'Veriler sadece tarayıcıda işlenir.',
122
- 'WiFi adında büyük/küçük harf duyarlılığına dikkat edin.',
123
- 'Statik QR: Şifre değişirse yeni kod oluşturun.',
124
- 'Yazdırmadan önce mutlaka kodu test edin.',
125
- ],
126
- },
127
- ],
128
- ui: {
129
- tabWifi: 'WiFi',
130
- tabUrl: 'URL',
131
- tabContact: 'Kişi',
132
- labelSsid: 'Ağ Adı (SSID)',
133
- labelPassword: 'Şifre',
134
- labelEncryption: 'Güvenlik',
135
- labelHidden: 'Gizli Ağ',
136
- labelUrl: 'Web Adresi (URL)',
137
- labelName: 'Ad',
138
- labelSurname: 'Soyad',
139
- labelPhone: 'Telefon',
140
- labelEmail: 'E-posta',
141
- labelOrg: 'Kurum / Şirket',
142
- encWpa: 'WPA/WPA2',
143
- encWep: 'WEP',
144
- encNone: 'Yok',
145
- downloadBtn: 'PNG İndir',
146
- privacyMsg: '%100 tarayıcıda oluşturuldu. Verileriniz güvende.',
147
- placeholderSsid: 'EvAgim_5G',
148
- placeholderUrl: 'https://ornek.com',
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: 'Önce Gizlilik: Yerel Oluşturma',
98
+ level: 2,
99
+ },
100
+ {
101
+ type: 'paragraph',
102
+ html: 'Bu araç QR kodlarını doğrudan cihazınızda oluşturur. <strong>WiFi şifreleriniz</strong> veya <strong>kişisel verileriniz</strong> için tam güvenlik.',
103
+ },
104
+ {
105
+ type: 'stats',
106
+ items: [
107
+ { value: '%100', label: 'Gizli', icon: 'mdi:shield-lock' },
108
+ { value: 'Offline', label: 'Sunucusuz', icon: 'mdi:wifi-off' },
109
+ { value: 'PNG', label: 'İndir', icon: 'mdi:download' },
110
+ ],
111
+ columns: 3,
112
+ },
113
+ {
114
+ type: 'summary',
115
+ title: 'Kullanım İpuçları',
116
+ items: [
117
+ 'Veriler sadece tarayıcıda işlenir.',
118
+ 'WiFi adında büyük/küçük harf duyarlılığına dikkat edin.',
119
+ 'Statik QR: Şifre değişirse yeni kod oluşturun.',
120
+ 'Yazdırmadan önce mutlaka kodu test edin.',
121
+ ],
122
+ },
123
+ ],
124
+ ui: {
125
+ tabWifi: 'WiFi',
126
+ tabUrl: 'URL',
127
+ tabContact: 'Kişi',
128
+ labelSsid: 'Ağ Adı (SSID)',
129
+ labelPassword: 'Şifre',
130
+ labelEncryption: 'Güvenlik',
131
+ labelHidden: 'Gizli Ağ',
132
+ labelUrl: 'Web Adresi (URL)',
133
+ labelName: 'Ad',
134
+ labelSurname: 'Soyad',
135
+ labelPhone: 'Telefon',
136
+ labelEmail: 'E-posta',
137
+ labelOrg: 'Kurum / Şirket',
138
+ encWpa: 'WPA/WPA2',
139
+ encWep: 'WEP',
140
+ encNone: 'Yok',
141
+ downloadBtn: 'PNG İndir',
142
+ privacyMsg: '%100 tarayıcıda oluşturuldu. Verileriniz güvende.',
143
+ placeholderSsid: 'EvAgim_5G',
144
+ placeholderUrl: 'https://ornek.com',
145
+ placeholderPassword: '••••••••',
146
+ },
147
+ };