@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.
- package/package.json +1 -1
- package/src/category/i18n/de.ts +10 -10
- package/src/category/i18n/en.ts +8 -8
- package/src/category/i18n/es.ts +2 -2
- package/src/category/i18n/fr.ts +15 -15
- package/src/category/i18n/id.ts +8 -8
- package/src/category/i18n/it.ts +7 -7
- package/src/category/i18n/nl.ts +8 -8
- package/src/category/i18n/pl.ts +10 -10
- package/src/category/i18n/pt.ts +8 -8
- package/src/category/i18n/ru.ts +10 -10
- package/src/category/i18n/sv.ts +8 -8
- package/src/category/i18n/tr.ts +4 -4
- package/src/category/i18n/zh.ts +8 -8
- package/src/entries.ts +4 -1
- package/src/pages/[locale]/[slug].astro +28 -12
- package/src/tests/locale_completeness.test.ts +4 -22
- package/src/tests/no_en_dash.test.ts +70 -0
- package/src/tests/shared-test-helpers.ts +56 -0
- package/src/tests/tool_exports.test.ts +34 -0
- package/src/tests/tool_validation.test.ts +2 -2
- package/src/tool/dewPointCalculator/bibliography.ts +10 -0
- package/src/tool/dewPointCalculator/i18n/de.ts +7 -17
- package/src/tool/dewPointCalculator/i18n/en.ts +8 -18
- package/src/tool/dewPointCalculator/i18n/es.ts +7 -17
- package/src/tool/dewPointCalculator/i18n/fr.ts +8 -18
- package/src/tool/dewPointCalculator/i18n/id.ts +7 -17
- package/src/tool/dewPointCalculator/i18n/it.ts +7 -17
- package/src/tool/dewPointCalculator/i18n/ja.ts +6 -16
- package/src/tool/dewPointCalculator/i18n/ko.ts +6 -16
- package/src/tool/dewPointCalculator/i18n/nl.ts +7 -17
- package/src/tool/dewPointCalculator/i18n/pl.ts +7 -17
- package/src/tool/dewPointCalculator/i18n/pt.ts +7 -17
- package/src/tool/dewPointCalculator/i18n/ru.ts +13 -23
- package/src/tool/dewPointCalculator/i18n/sv.ts +7 -17
- package/src/tool/dewPointCalculator/i18n/tr.ts +6 -16
- package/src/tool/dewPointCalculator/i18n/zh.ts +7 -17
- package/src/tool/dewPointCalculator/seo.astro +2 -1
- package/src/tool/heatingComparator/bibliography.ts +14 -0
- package/src/tool/heatingComparator/i18n/de.ts +10 -24
- package/src/tool/heatingComparator/i18n/en.ts +3 -13
- package/src/tool/heatingComparator/i18n/es.ts +3 -17
- package/src/tool/heatingComparator/i18n/fr.ts +9 -19
- package/src/tool/heatingComparator/i18n/id.ts +3 -17
- package/src/tool/heatingComparator/i18n/it.ts +3 -17
- package/src/tool/heatingComparator/i18n/ja.ts +296 -310
- package/src/tool/heatingComparator/i18n/ko.ts +296 -306
- package/src/tool/heatingComparator/i18n/nl.ts +3 -17
- package/src/tool/heatingComparator/i18n/pl.ts +3 -17
- package/src/tool/heatingComparator/i18n/pt.ts +3 -17
- package/src/tool/heatingComparator/i18n/ru.ts +14 -24
- package/src/tool/heatingComparator/i18n/sv.ts +6 -20
- package/src/tool/heatingComparator/i18n/tr.ts +2 -16
- package/src/tool/heatingComparator/i18n/zh.ts +296 -306
- package/src/tool/heatingComparator/seo.astro +3 -3
- package/src/tool/ledSavingCalculator/bibliography.ts +14 -0
- package/src/tool/ledSavingCalculator/i18n/de.ts +6 -16
- package/src/tool/ledSavingCalculator/i18n/en.ts +6 -20
- package/src/tool/ledSavingCalculator/i18n/es.ts +6 -20
- package/src/tool/ledSavingCalculator/i18n/fr.ts +10 -24
- package/src/tool/ledSavingCalculator/i18n/id.ts +5 -15
- package/src/tool/ledSavingCalculator/i18n/it.ts +6 -16
- package/src/tool/ledSavingCalculator/i18n/ja.ts +5 -15
- package/src/tool/ledSavingCalculator/i18n/ko.ts +4 -14
- package/src/tool/ledSavingCalculator/i18n/nl.ts +5 -15
- package/src/tool/ledSavingCalculator/i18n/pl.ts +5 -15
- package/src/tool/ledSavingCalculator/i18n/pt.ts +5 -15
- package/src/tool/ledSavingCalculator/i18n/ru.ts +8 -18
- package/src/tool/ledSavingCalculator/i18n/sv.ts +5 -15
- package/src/tool/ledSavingCalculator/i18n/tr.ts +5 -15
- package/src/tool/ledSavingCalculator/i18n/zh.ts +6 -16
- package/src/tool/ledSavingCalculator/seo.astro +2 -1
- package/src/tool/projectorCalculator/bibliography.ts +5 -0
- package/src/tool/projectorCalculator/i18n/de.ts +4 -8
- package/src/tool/projectorCalculator/i18n/en.ts +3 -8
- package/src/tool/projectorCalculator/i18n/es.ts +4 -9
- package/src/tool/projectorCalculator/i18n/fr.ts +6 -11
- package/src/tool/projectorCalculator/i18n/id.ts +4 -9
- package/src/tool/projectorCalculator/i18n/it.ts +4 -8
- package/src/tool/projectorCalculator/i18n/ja.ts +175 -179
- package/src/tool/projectorCalculator/i18n/ko.ts +175 -179
- package/src/tool/projectorCalculator/i18n/nl.ts +4 -8
- package/src/tool/projectorCalculator/i18n/pl.ts +5 -9
- package/src/tool/projectorCalculator/i18n/pt.ts +4 -8
- package/src/tool/projectorCalculator/i18n/ru.ts +7 -11
- package/src/tool/projectorCalculator/i18n/sv.ts +4 -8
- package/src/tool/projectorCalculator/i18n/tr.ts +4 -8
- package/src/tool/projectorCalculator/i18n/zh.ts +175 -179
- package/src/tool/projectorCalculator/seo.astro +2 -1
- package/src/tool/qrGenerator/bibliography.ts +14 -0
- package/src/tool/qrGenerator/i18n/de.ts +192 -202
- package/src/tool/qrGenerator/i18n/en.ts +3 -17
- package/src/tool/qrGenerator/i18n/es.ts +2 -16
- package/src/tool/qrGenerator/i18n/fr.ts +3 -17
- package/src/tool/qrGenerator/i18n/id.ts +146 -150
- package/src/tool/qrGenerator/i18n/it.ts +169 -173
- package/src/tool/qrGenerator/i18n/ja.ts +146 -150
- package/src/tool/qrGenerator/i18n/ko.ts +146 -150
- package/src/tool/qrGenerator/i18n/nl.ts +146 -150
- package/src/tool/qrGenerator/i18n/pl.ts +146 -150
- package/src/tool/qrGenerator/i18n/pt.ts +146 -150
- package/src/tool/qrGenerator/i18n/ru.ts +146 -150
- package/src/tool/qrGenerator/i18n/sv.ts +146 -150
- package/src/tool/qrGenerator/i18n/tr.ts +146 -150
- package/src/tool/qrGenerator/i18n/zh.ts +146 -150
- package/src/tool/qrGenerator/seo.astro +2 -1
- package/src/tool/solarCalculator/bibliography.ts +5 -0
- package/src/tool/solarCalculator/i18n/de.ts +141 -145
- package/src/tool/solarCalculator/i18n/en.ts +7 -12
- package/src/tool/solarCalculator/i18n/es.ts +5 -10
- package/src/tool/solarCalculator/i18n/fr.ts +8 -13
- package/src/tool/solarCalculator/i18n/id.ts +4 -8
- package/src/tool/solarCalculator/i18n/it.ts +4 -8
- package/src/tool/solarCalculator/i18n/ja.ts +121 -125
- package/src/tool/solarCalculator/i18n/ko.ts +116 -120
- package/src/tool/solarCalculator/i18n/nl.ts +4 -7
- package/src/tool/solarCalculator/i18n/pl.ts +5 -9
- package/src/tool/solarCalculator/i18n/pt.ts +4 -8
- package/src/tool/solarCalculator/i18n/ru.ts +7 -10
- package/src/tool/solarCalculator/i18n/sv.ts +4 -7
- package/src/tool/solarCalculator/i18n/tr.ts +4 -7
- package/src/tool/solarCalculator/i18n/zh.ts +116 -120
- package/src/tool/solarCalculator/seo.astro +2 -1
- package/src/tool/tariffComparator/bibliography.ts +7 -0
- package/src/tool/tariffComparator/i18n/de.ts +129 -132
- package/src/tool/tariffComparator/i18n/en.ts +5 -12
- package/src/tool/tariffComparator/i18n/es.ts +5 -12
- package/src/tool/tariffComparator/i18n/fr.ts +8 -15
- package/src/tool/tariffComparator/i18n/id.ts +2 -5
- package/src/tool/tariffComparator/i18n/it.ts +2 -5
- package/src/tool/tariffComparator/i18n/ja.ts +129 -132
- package/src/tool/tariffComparator/i18n/ko.ts +129 -132
- package/src/tool/tariffComparator/i18n/nl.ts +2 -5
- package/src/tool/tariffComparator/i18n/pl.ts +3 -6
- package/src/tool/tariffComparator/i18n/pt.ts +2 -5
- package/src/tool/tariffComparator/i18n/ru.ts +2 -5
- package/src/tool/tariffComparator/i18n/sv.ts +2 -5
- package/src/tool/tariffComparator/i18n/tr.ts +2 -5
- package/src/tool/tariffComparator/i18n/zh.ts +129 -132
- package/src/tool/tariffComparator/seo.astro +2 -1
- package/src/tool/wifiRangeSimulator/bibliography.astro +14 -0
- package/src/tool/wifiRangeSimulator/bibliography.ts +14 -0
- package/src/tool/wifiRangeSimulator/component.astro +170 -0
- package/src/tool/wifiRangeSimulator/entry.ts +29 -0
- package/src/tool/wifiRangeSimulator/i18n/de.ts +477 -0
- package/src/tool/wifiRangeSimulator/i18n/en.ts +477 -0
- package/src/tool/wifiRangeSimulator/i18n/es.ts +477 -0
- package/src/tool/wifiRangeSimulator/i18n/fr.ts +477 -0
- package/src/tool/wifiRangeSimulator/i18n/id.ts +477 -0
- package/src/tool/wifiRangeSimulator/i18n/it.ts +477 -0
- package/src/tool/wifiRangeSimulator/i18n/ja.ts +477 -0
- package/src/tool/wifiRangeSimulator/i18n/ko.ts +477 -0
- package/src/tool/wifiRangeSimulator/i18n/nl.ts +477 -0
- package/src/tool/wifiRangeSimulator/i18n/pl.ts +477 -0
- package/src/tool/wifiRangeSimulator/i18n/pt.ts +477 -0
- package/src/tool/wifiRangeSimulator/i18n/ru.ts +477 -0
- package/src/tool/wifiRangeSimulator/i18n/sv.ts +477 -0
- package/src/tool/wifiRangeSimulator/i18n/tr.ts +477 -0
- package/src/tool/wifiRangeSimulator/i18n/zh.ts +477 -0
- package/src/tool/wifiRangeSimulator/i18n-utils.ts +14 -0
- package/src/tool/wifiRangeSimulator/index.ts +8 -0
- package/src/tool/wifiRangeSimulator/logic.ts +220 -0
- package/src/tool/wifiRangeSimulator/seo.astro +15 -0
- package/src/tool/wifiRangeSimulator/sketch-actions.ts +168 -0
- package/src/tool/wifiRangeSimulator/sketch-events.ts +138 -0
- package/src/tool/wifiRangeSimulator/sketch-render-dash.ts +170 -0
- package/src/tool/wifiRangeSimulator/sketch-render-device.ts +42 -0
- package/src/tool/wifiRangeSimulator/sketch-render.ts +155 -0
- package/src/tool/wifiRangeSimulator/sketch-state.ts +186 -0
- package/src/tool/wifiRangeSimulator/sketch.ts +100 -0
- package/src/tool/wifiRangeSimulator/ui.ts +69 -0
- package/src/tool/wifiRangeSimulator/wifi-range-simulator.css +583 -0
- package/src/tools.ts +2 -0
- 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
|
-
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
'@
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
'@
|
|
65
|
-
|
|
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 = 'pembuat-kode-qr-offline';
|
|
7
|
+
const title = 'Pembuat Kode QR Offline';
|
|
8
|
+
const description =
|
|
9
|
+
'Buat kode QR untuk WiFi, URL, dan Kontak secara 100% aman di browser Anda. Data Anda tidak pernah meninggalkan perangkat Anda.';
|
|
10
|
+
|
|
11
|
+
const faqData = [
|
|
12
|
+
{
|
|
13
|
+
question: 'Apakah kode QR ini akan kedaluwarsa?',
|
|
14
|
+
answer:
|
|
15
|
+
'Tidak. Kode yang dihasilkan di sini bersifat statis. Informasi tersebut dikodekan langsung ke dalam gambar. Kode tersebut akan berfungsi selamanya.',
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
question: 'Apakah Anda menyimpan data saya?',
|
|
19
|
+
answer:
|
|
20
|
+
'Sama sekali tidak. Seluruh proses terjadi di browser Anda (Client-Side). Tidak ada data yang dikirim ke server kami.',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
question: 'Apakah ini berfungsi di iPhone dan Android?',
|
|
24
|
+
answer:
|
|
25
|
+
'Ya. Sebagian besar kamera modern di iOS dan Android membaca kode QR secara asli dan menyarankan tindakan yang sesuai (sambungkan ke WiFi, buka tautan, dll.).',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
question: 'Bisakah saya menggunakannya tanpa internet?',
|
|
29
|
+
answer:
|
|
30
|
+
'Ya. Setelah halaman dimuat, Anda dapat mematikan internet dan pembuat kode QR tetap akan berfungsi dengan sempurna.',
|
|
31
|
+
},
|
|
32
|
+
];
|
|
33
|
+
|
|
34
|
+
const howToData = [
|
|
35
|
+
{
|
|
36
|
+
name: 'Pilih tipe QR',
|
|
37
|
+
text: 'Pilih apakah Anda ingin membuat kode untuk jaringan WiFi, tautan URL, atau kontak (vCard).',
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
name: 'Masukkan data',
|
|
41
|
+
text: 'Isi bidang yang diperlukan, seperti nama jaringan dan kata sandi, atau alamat web.',
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
name: 'Buat dan periksa',
|
|
45
|
+
text: 'Kode akan dibuat secara instan. Anda dapat mencobanya dengan memindai langsung dari layar.',
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
name: 'Unduh',
|
|
49
|
+
text: 'Simpan kode QR sebagai gambar untuk dicetak atau dibagikan secara digital.',
|
|
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: 'IDR' },
|
|
83
|
+
inLanguage: 'id',
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
export const content: ToolLocaleContent<QRGeneratorUI> = {
|
|
87
|
+
slug,
|
|
88
|
+
title,
|
|
66
89
|
description,
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
],
|
|
126
|
-
},
|
|
127
|
-
],
|
|
128
|
-
ui: {
|
|
129
|
-
tabWifi: 'WiFi',
|
|
130
|
-
tabUrl: 'URL',
|
|
131
|
-
tabContact: 'Kontak',
|
|
132
|
-
labelSsid: 'Nama Jaringan (SSID)',
|
|
133
|
-
labelPassword: 'Kata Sandi',
|
|
134
|
-
labelEncryption: 'Keamanan',
|
|
135
|
-
labelHidden: 'Jaringan Tersembunyi',
|
|
136
|
-
labelUrl: 'Alamat Web (URL)',
|
|
137
|
-
labelName: 'Nama Depan',
|
|
138
|
-
labelSurname: 'Nama Belakang',
|
|
139
|
-
labelPhone: 'Telepon',
|
|
140
|
-
labelEmail: 'Email',
|
|
141
|
-
labelOrg: 'Organisasi / Perusahaan',
|
|
142
|
-
encWpa: 'WPA/WPA2',
|
|
143
|
-
encWep: 'WEP',
|
|
144
|
-
encNone: 'Tidak ada',
|
|
145
|
-
downloadBtn: 'Unduh PNG',
|
|
146
|
-
privacyMsg: 'Dibuat 100% di browser Anda. Data Anda aman.',
|
|
147
|
-
placeholderSsid: 'WiFiSaya_5G',
|
|
148
|
-
placeholderUrl: 'https://contoh.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: 'Privasi Utama: Pembuatan Lokal',
|
|
98
|
+
level: 2,
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
type: 'paragraph',
|
|
102
|
+
html: 'Alat ini menghasilkan kode QR langsung di perangkat Anda. Keamanan total untuk <strong>kata sandi WiFi</strong> atau <strong>data pribadi</strong> Anda.',
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
type: 'stats',
|
|
106
|
+
items: [
|
|
107
|
+
{ value: '100%', label: 'Privat', icon: 'mdi:shield-lock' },
|
|
108
|
+
{ value: 'Offline', label: 'Tanpa Server', icon: 'mdi:wifi-off' },
|
|
109
|
+
{ value: 'PNG', label: 'Unduh', icon: 'mdi:download' },
|
|
110
|
+
],
|
|
111
|
+
columns: 3,
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
type: 'summary',
|
|
115
|
+
title: 'Tips Penggunaan',
|
|
116
|
+
items: [
|
|
117
|
+
'Data hanya diproses di browser Anda.',
|
|
118
|
+
'Perhatikan huruf besar/kecil pada nama jaringan WiFi.',
|
|
119
|
+
'Kode QR statis: jika kata sandi diubah, buat kode baru.',
|
|
120
|
+
'Selalu uji pemindaian sebelum mencetak.',
|
|
121
|
+
],
|
|
122
|
+
},
|
|
123
|
+
],
|
|
124
|
+
ui: {
|
|
125
|
+
tabWifi: 'WiFi',
|
|
126
|
+
tabUrl: 'URL',
|
|
127
|
+
tabContact: 'Kontak',
|
|
128
|
+
labelSsid: 'Nama Jaringan (SSID)',
|
|
129
|
+
labelPassword: 'Kata Sandi',
|
|
130
|
+
labelEncryption: 'Keamanan',
|
|
131
|
+
labelHidden: 'Jaringan Tersembunyi',
|
|
132
|
+
labelUrl: 'Alamat Web (URL)',
|
|
133
|
+
labelName: 'Nama Depan',
|
|
134
|
+
labelSurname: 'Nama Belakang',
|
|
135
|
+
labelPhone: 'Telepon',
|
|
136
|
+
labelEmail: 'Email',
|
|
137
|
+
labelOrg: 'Organisasi / Perusahaan',
|
|
138
|
+
encWpa: 'WPA/WPA2',
|
|
139
|
+
encWep: 'WEP',
|
|
140
|
+
encNone: 'Tidak ada',
|
|
141
|
+
downloadBtn: 'Unduh PNG',
|
|
142
|
+
privacyMsg: 'Dibuat 100% di browser Anda. Data Anda aman.',
|
|
143
|
+
placeholderSsid: 'WiFiSaya_5G',
|
|
144
|
+
placeholderUrl: 'https://contoh.com',
|
|
145
|
+
placeholderPassword: '••••••••',
|
|
146
|
+
},
|
|
147
|
+
};
|
|
@@ -1,174 +1,170 @@
|
|
|
1
|
-
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
-
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
-
import type { QRGeneratorUI } from '../ui';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
'@
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
'@
|
|
65
|
-
|
|
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 = 'generatore-codici-qr-offline';
|
|
7
|
+
const title = 'Generatore di Codici QR Offline';
|
|
8
|
+
const description =
|
|
9
|
+
'Genera codici QR per WiFi, URL e Contatti in modo sicuro al 100% nel tuo browser. I tuoi dati non lasciano mai il tuo dispositivo.';
|
|
10
|
+
|
|
11
|
+
const faqData = [
|
|
12
|
+
{
|
|
13
|
+
question: 'Questi codici QR scadono?',
|
|
14
|
+
answer:
|
|
15
|
+
'No. I codici generati qui sono statici. Le informazioni sono codificate direttamente nell\'immagine. Funzioneranno per sempre.',
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
question: 'Salvate i miei dati?',
|
|
19
|
+
answer:
|
|
20
|
+
'Assolutamente no. Tutto il processo avviene nel tuo browser (Client-Side). Nessun dato viene inviato ai nostri server.',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
question: 'Funziona su iPhone e Android?',
|
|
24
|
+
answer:
|
|
25
|
+
'Sì. La maggior parte delle fotocamere moderne di iOS e Android leggono i QR in modo nativo e suggeriscono l\'azione (connessione WiFi, apertura link, ecc.).',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
question: 'Posso usarlo senza internet?',
|
|
29
|
+
answer:
|
|
30
|
+
'Sì. Una volta caricata la pagina, puoi disconnetterti e il generatore continuerà a funzionare perfettamente.',
|
|
31
|
+
},
|
|
32
|
+
];
|
|
33
|
+
|
|
34
|
+
const howToData = [
|
|
35
|
+
{
|
|
36
|
+
name: 'Scegli il tipo di QR',
|
|
37
|
+
text: 'Seleziona se vuoi un codice per una rete WiFi, un link URL o un contatto (vCard).',
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
name: 'Inserisci i dati',
|
|
41
|
+
text: 'Compila i campi necessari, come il nome della rete e la password, o l\'indirizzo web.',
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
name: 'Genera e controlla',
|
|
45
|
+
text: 'Il codice viene generato all\'istante. Prova a scansionarlo direttamente dallo schermo.',
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
name: 'Scarica',
|
|
49
|
+
text: 'Salva il codice QR come immagine per stamparlo o condividerlo.',
|
|
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: 'it',
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
export const content: ToolLocaleContent<QRGeneratorUI> = {
|
|
87
|
+
slug,
|
|
88
|
+
title,
|
|
66
89
|
description,
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
],
|
|
149
|
-
},
|
|
150
|
-
],
|
|
151
|
-
ui: {
|
|
152
|
-
tabWifi: 'WiFi',
|
|
153
|
-
tabUrl: 'URL',
|
|
154
|
-
tabContact: 'Contatto',
|
|
155
|
-
labelSsid: 'Nome Rete (SSID)',
|
|
156
|
-
labelPassword: 'Password',
|
|
157
|
-
labelEncryption: 'Sicurezza',
|
|
158
|
-
labelHidden: 'Rete Nascosta',
|
|
159
|
-
labelUrl: 'Indirizzo Web (URL)',
|
|
160
|
-
labelName: 'Nome',
|
|
161
|
-
labelSurname: 'Cognome',
|
|
162
|
-
labelPhone: 'Telefono',
|
|
163
|
-
labelEmail: 'Email',
|
|
164
|
-
labelOrg: 'Azienda',
|
|
165
|
-
encWpa: 'WPA/WPA2',
|
|
166
|
-
encWep: 'WEP',
|
|
167
|
-
encNone: 'Nessuna',
|
|
168
|
-
downloadBtn: 'Scarica PNG',
|
|
169
|
-
privacyMsg: 'Generato 100% nel browser. Dati sicuri.',
|
|
170
|
-
placeholderSsid: 'MiaRete_5G',
|
|
171
|
-
placeholderUrl: 'https://esempio.it',
|
|
172
|
-
placeholderPassword: '••••••••',
|
|
173
|
-
},
|
|
174
|
-
};
|
|
90
|
+
faq: faqData,
|
|
91
|
+
bibliography,
|
|
92
|
+
howTo: howToData,
|
|
93
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
94
|
+
seo: [
|
|
95
|
+
{
|
|
96
|
+
type: 'title',
|
|
97
|
+
text: 'Privacy al Primo Posto: Generazione Locale',
|
|
98
|
+
level: 2,
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
type: 'paragraph',
|
|
102
|
+
html: 'A differenza di altri sistemi, questa utility genera il QR direttamente sul tuo PC o smartphone utilizzando JavaScript. 0 rischi per le tue <strong>chiavi WiFi</strong> o <strong>contatti personali</strong>.',
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
type: 'stats',
|
|
106
|
+
items: [
|
|
107
|
+
{ value: '100%', label: 'Privato', icon: 'mdi:shield-lock' },
|
|
108
|
+
{ value: 'Offline', label: 'No Server', icon: 'mdi:wifi-off' },
|
|
109
|
+
{ value: 'PNG', label: 'Download', icon: 'mdi:download' },
|
|
110
|
+
],
|
|
111
|
+
columns: 3,
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
type: 'title',
|
|
115
|
+
text: 'Casi d\'Uso',
|
|
116
|
+
level: 3,
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
type: 'comparative',
|
|
120
|
+
items: [
|
|
121
|
+
{
|
|
122
|
+
title: 'WiFi QR',
|
|
123
|
+
description: 'Condividi la tua rete con gli ospiti senza dettare la password.',
|
|
124
|
+
icon: 'mdi:wifi',
|
|
125
|
+
points: ['Compatibile con iOS/Android', 'Supporta WPA2 e WEP'],
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
title: 'vCard QR',
|
|
129
|
+
description: 'Biglietto da visita digitale che si salva subito in rubrica.',
|
|
130
|
+
icon: 'mdi:card-account-details',
|
|
131
|
+
points: ['Nome, Tel, Email', 'Formato standard internazionale'],
|
|
132
|
+
},
|
|
133
|
+
],
|
|
134
|
+
columns: 2,
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
type: 'summary',
|
|
138
|
+
title: 'Consigli per l\'uso',
|
|
139
|
+
items: [
|
|
140
|
+
'Dati processati solo localmente.',
|
|
141
|
+
'I nomi delle reti distinguono tra maiuscole e minuscole.',
|
|
142
|
+
'I QR sono statici: se cambi dati, rigenera il codice.',
|
|
143
|
+
'Testa il codice prima di stamparlo.',
|
|
144
|
+
],
|
|
145
|
+
},
|
|
146
|
+
],
|
|
147
|
+
ui: {
|
|
148
|
+
tabWifi: 'WiFi',
|
|
149
|
+
tabUrl: 'URL',
|
|
150
|
+
tabContact: 'Contatto',
|
|
151
|
+
labelSsid: 'Nome Rete (SSID)',
|
|
152
|
+
labelPassword: 'Password',
|
|
153
|
+
labelEncryption: 'Sicurezza',
|
|
154
|
+
labelHidden: 'Rete Nascosta',
|
|
155
|
+
labelUrl: 'Indirizzo Web (URL)',
|
|
156
|
+
labelName: 'Nome',
|
|
157
|
+
labelSurname: 'Cognome',
|
|
158
|
+
labelPhone: 'Telefono',
|
|
159
|
+
labelEmail: 'Email',
|
|
160
|
+
labelOrg: 'Azienda',
|
|
161
|
+
encWpa: 'WPA/WPA2',
|
|
162
|
+
encWep: 'WEP',
|
|
163
|
+
encNone: 'Nessuna',
|
|
164
|
+
downloadBtn: 'Scarica PNG',
|
|
165
|
+
privacyMsg: 'Generato 100% nel browser. Dati sicuri.',
|
|
166
|
+
placeholderSsid: 'MiaRete_5G',
|
|
167
|
+
placeholderUrl: 'https://esempio.it',
|
|
168
|
+
placeholderPassword: '••••••••',
|
|
169
|
+
},
|
|
170
|
+
};
|