@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 = 'gerador-codigos-qr-offline';
|
|
7
|
+
const title = 'Gerador de Códigos QR Offline';
|
|
8
|
+
const description =
|
|
9
|
+
'Gere códigos QR para WiFi, URLs e Contactos de forma 100% segura no seu navegador. Os seus dados nunca saem do seu dispositivo.';
|
|
10
|
+
|
|
11
|
+
const faqData = [
|
|
12
|
+
{
|
|
13
|
+
question: 'Estes códigos QR expiram?',
|
|
14
|
+
answer:
|
|
15
|
+
'Não. Os códigos gerados aqui são estáticos. A informação está codificada diretamente na imagem e não depende de ligações externas. Funcionam para sempre.',
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
question: 'Guardam os meus dados?',
|
|
19
|
+
answer:
|
|
20
|
+
'Absolutamente não. Todo o processo ocorre no seu navegador (Client-Side). Nenhum dado é enviado para os nossos servidores.',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
question: 'Funciona no iPhone e Android?',
|
|
24
|
+
answer:
|
|
25
|
+
'Sim. A maioria das câmaras modernas lê códigos QR de forma nativa e sugere a ação correspondente (ligar ao WiFi, abrir link, etc.).',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
question: 'Posso usar sem internet?',
|
|
29
|
+
answer:
|
|
30
|
+
'Sim. Uma vez carregada a página, pode desligar o WiFi e o gerador continuará a funcionar perfeitamente.',
|
|
31
|
+
},
|
|
32
|
+
];
|
|
33
|
+
|
|
34
|
+
const howToData = [
|
|
35
|
+
{
|
|
36
|
+
name: 'Escolher tipo de QR',
|
|
37
|
+
text: 'Selecione se quer um código para uma rede WiFi, um link URL ou um contacto (vCard).',
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
name: 'Introduzir dados',
|
|
41
|
+
text: 'Preencha os campos necessários, como o nome da rede e a password, ou o endereço web.',
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
name: 'Gerar e verificar',
|
|
45
|
+
text: 'O código é gerado instantaneamente. Pode testar o scan diretamente no ecrã.',
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
name: 'Descarregar',
|
|
49
|
+
text: 'Guarde o código QR como imagem para imprimir ou partilhar.',
|
|
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: 'pt',
|
|
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: 'Contacto',
|
|
132
|
-
labelSsid: 'Nome da Rede (SSID)',
|
|
133
|
-
labelPassword: 'Palavra-passe',
|
|
134
|
-
labelEncryption: 'Segurança',
|
|
135
|
-
labelHidden: 'Rede Oculta',
|
|
136
|
-
labelUrl: 'Endereço Web (URL)',
|
|
137
|
-
labelName: 'Nome',
|
|
138
|
-
labelSurname: 'Apelido',
|
|
139
|
-
labelPhone: 'Telefone',
|
|
140
|
-
labelEmail: 'Email',
|
|
141
|
-
labelOrg: 'Organização / Empresa',
|
|
142
|
-
encWpa: 'WPA/WPA2',
|
|
143
|
-
encWep: 'WEP',
|
|
144
|
-
encNone: 'Nenhuma',
|
|
145
|
-
downloadBtn: 'Descarregar PNG',
|
|
146
|
-
privacyMsg: 'Gerado 100% no seu navegador. Dados seguros.',
|
|
147
|
-
placeholderSsid: 'MinhaRede_5G',
|
|
148
|
-
placeholderUrl: 'https://exemplo.pt',
|
|
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: 'Privacidade Primeiro: Geração Local',
|
|
98
|
+
level: 2,
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
type: 'paragraph',
|
|
102
|
+
html: 'Esta ferramenta gera o código QR diretamente no seu dispositivo. Segurança total para as suas <strong>palavras-passe WiFi</strong> ou <strong>dados pessoais</strong>.',
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
type: 'stats',
|
|
106
|
+
items: [
|
|
107
|
+
{ value: '100%', label: 'Privado', icon: 'mdi:shield-lock' },
|
|
108
|
+
{ value: 'Offline', label: 'Sem Servidor', icon: 'mdi:wifi-off' },
|
|
109
|
+
{ value: 'PNG', label: 'Download', icon: 'mdi:download' },
|
|
110
|
+
],
|
|
111
|
+
columns: 3,
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
type: 'summary',
|
|
115
|
+
title: 'Dicas de Utilização',
|
|
116
|
+
items: [
|
|
117
|
+
'Dados processados apenas no navegador.',
|
|
118
|
+
'Atenção a maiúsculas/minúsculas no nome da rede.',
|
|
119
|
+
'QR codes estáticos: se mudar a pass, gere um novo.',
|
|
120
|
+
'Teste sempre o scan antes de imprimir.',
|
|
121
|
+
],
|
|
122
|
+
},
|
|
123
|
+
],
|
|
124
|
+
ui: {
|
|
125
|
+
tabWifi: 'WiFi',
|
|
126
|
+
tabUrl: 'URL',
|
|
127
|
+
tabContact: 'Contacto',
|
|
128
|
+
labelSsid: 'Nome da Rede (SSID)',
|
|
129
|
+
labelPassword: 'Palavra-passe',
|
|
130
|
+
labelEncryption: 'Segurança',
|
|
131
|
+
labelHidden: 'Rede Oculta',
|
|
132
|
+
labelUrl: 'Endereço Web (URL)',
|
|
133
|
+
labelName: 'Nome',
|
|
134
|
+
labelSurname: 'Apelido',
|
|
135
|
+
labelPhone: 'Telefone',
|
|
136
|
+
labelEmail: 'Email',
|
|
137
|
+
labelOrg: 'Organização / Empresa',
|
|
138
|
+
encWpa: 'WPA/WPA2',
|
|
139
|
+
encWep: 'WEP',
|
|
140
|
+
encNone: 'Nenhuma',
|
|
141
|
+
downloadBtn: 'Descarregar PNG',
|
|
142
|
+
privacyMsg: 'Gerado 100% no seu navegador. Dados seguros.',
|
|
143
|
+
placeholderSsid: 'MinhaRede_5G',
|
|
144
|
+
placeholderUrl: 'https://exemplo.pt',
|
|
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
|
-
|
|
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 = 'oflayn-qr-kod-generator';
|
|
7
|
+
const title = 'Оффлайн Генератор QR кодов';
|
|
8
|
+
const description =
|
|
9
|
+
'Создавайте QR-коды для WiFi, URL и Контактов полностью безопасно в вашем браузере. Ваши данные никогда не покидают устройство.';
|
|
10
|
+
|
|
11
|
+
const faqData = [
|
|
12
|
+
{
|
|
13
|
+
question: 'Имеют ли эти QR-коды срок годности?',
|
|
14
|
+
answer:
|
|
15
|
+
'Нет. Сгенерированные здесь коды являются статическими. Информация закодирована прямо в изображении. Они будут работать вечно.',
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
question: 'Сохраняете ли вы мои данные?',
|
|
19
|
+
answer:
|
|
20
|
+
'Абсолютно нет. Весь процесс происходит в вашем браузере (Client-Side). Никакие данные не отправляются на сервер.',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
question: 'Работает ли это на iPhone и Android?',
|
|
24
|
+
answer:
|
|
25
|
+
'Да. Большинство современных камер смартфонов читают QR-коды нативно и предлагают действие (подключиться к WiFi, открыть ссылку и т.д.).',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
question: 'Могу ли я использовать это без интернета?',
|
|
29
|
+
answer:
|
|
30
|
+
'Да. После загрузки страницы вы можете отключить сеть, и генератор продолжит работать идеально.',
|
|
31
|
+
},
|
|
32
|
+
];
|
|
33
|
+
|
|
34
|
+
const howToData = [
|
|
35
|
+
{
|
|
36
|
+
name: 'Выберите тип QR',
|
|
37
|
+
text: 'Выберите, нужен ли вам код для WiFi, URL или контактов (vCard).',
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
name: 'Введите данные',
|
|
41
|
+
text: 'Заполните нужные поля: название сети и пароль или веб-адрес.',
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
name: 'Создайте и проверьте',
|
|
45
|
+
text: 'Код создается мгновенно. Проверьте его, отсканировав прямо с экрана.',
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
name: 'Скачайте',
|
|
49
|
+
text: 'Сохраните QR-код как изображение, чтобы распечатать или поделиться.',
|
|
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: 'RUB' },
|
|
83
|
+
inLanguage: 'ru',
|
|
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: 'Контакт',
|
|
132
|
-
labelSsid: 'Имя сети (SSID)',
|
|
133
|
-
labelPassword: 'Пароль',
|
|
134
|
-
labelEncryption: 'Защита',
|
|
135
|
-
labelHidden: 'Скрытая сеть',
|
|
136
|
-
labelUrl: 'Веб-адрес (URL)',
|
|
137
|
-
labelName: 'Имя',
|
|
138
|
-
labelSurname: 'Фамилия',
|
|
139
|
-
labelPhone: 'Телефон',
|
|
140
|
-
labelEmail: 'Email',
|
|
141
|
-
labelOrg: 'Организация',
|
|
142
|
-
encWpa: 'WPA/WPA2',
|
|
143
|
-
encWep: 'WEP',
|
|
144
|
-
encNone: 'Нет',
|
|
145
|
-
downloadBtn: 'Скачать PNG',
|
|
146
|
-
privacyMsg: 'Создано на 100% в браузере. Данные в безопасности.',
|
|
147
|
-
placeholderSsid: 'MoyaSet_5G',
|
|
148
|
-
placeholderUrl: 'https://primer.ru',
|
|
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: 'Приватность Превыше Всего: Локальная Генерация',
|
|
98
|
+
level: 2,
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
type: 'paragraph',
|
|
102
|
+
html: 'Этот инструмент создает QR прямо на вашем устройстве. Полная безопасность для ваших <strong>паролей WiFi</strong> или <strong>персональных данных</strong>.',
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
type: 'stats',
|
|
106
|
+
items: [
|
|
107
|
+
{ value: '100%', label: 'Приватно', icon: 'mdi:shield-lock' },
|
|
108
|
+
{ value: 'Offline', label: 'Без сервера', icon: 'mdi:wifi-off' },
|
|
109
|
+
{ value: 'PNG', label: 'Скачать', icon: 'mdi:download' },
|
|
110
|
+
],
|
|
111
|
+
columns: 3,
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
type: 'summary',
|
|
115
|
+
title: 'Советы по использованию',
|
|
116
|
+
items: [
|
|
117
|
+
'Данные обрабатываются только в браузере.',
|
|
118
|
+
'Соблюдайте регистр в названии WiFi сети.',
|
|
119
|
+
'Статичные QR: при смене пароля создайте новый код.',
|
|
120
|
+
'Проверьте сканирование перед печатью.',
|
|
121
|
+
],
|
|
122
|
+
},
|
|
123
|
+
],
|
|
124
|
+
ui: {
|
|
125
|
+
tabWifi: 'WiFi',
|
|
126
|
+
tabUrl: 'URL',
|
|
127
|
+
tabContact: 'Контакт',
|
|
128
|
+
labelSsid: 'Имя сети (SSID)',
|
|
129
|
+
labelPassword: 'Пароль',
|
|
130
|
+
labelEncryption: 'Защита',
|
|
131
|
+
labelHidden: 'Скрытая сеть',
|
|
132
|
+
labelUrl: 'Веб-адрес (URL)',
|
|
133
|
+
labelName: 'Имя',
|
|
134
|
+
labelSurname: 'Фамилия',
|
|
135
|
+
labelPhone: 'Телефон',
|
|
136
|
+
labelEmail: 'Email',
|
|
137
|
+
labelOrg: 'Организация',
|
|
138
|
+
encWpa: 'WPA/WPA2',
|
|
139
|
+
encWep: 'WEP',
|
|
140
|
+
encNone: 'Нет',
|
|
141
|
+
downloadBtn: 'Скачать PNG',
|
|
142
|
+
privacyMsg: 'Создано на 100% в браузере. Данные в безопасности.',
|
|
143
|
+
placeholderSsid: 'MoyaSet_5G',
|
|
144
|
+
placeholderUrl: 'https://primer.ru',
|
|
145
|
+
placeholderPassword: '••••••••',
|
|
146
|
+
},
|
|
147
|
+
};
|