@jjlmoya/utils-creative 1.26.0 → 1.28.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 +2 -2
- package/src/category/i18n/de.ts +2 -2
- package/src/category/i18n/en.ts +2 -2
- package/src/category/i18n/es.ts +2 -2
- package/src/category/i18n/fr.ts +2 -2
- package/src/category/i18n/id.ts +2 -2
- package/src/category/i18n/it.ts +2 -2
- package/src/category/i18n/ja.ts +2 -2
- package/src/category/i18n/ko.ts +2 -2
- package/src/category/i18n/nl.ts +2 -2
- package/src/category/i18n/pl.ts +2 -2
- package/src/category/i18n/pt.ts +2 -2
- package/src/category/i18n/ru.ts +2 -2
- package/src/category/i18n/sv.ts +2 -2
- package/src/category/i18n/tr.ts +2 -2
- package/src/category/i18n/zh.ts +2 -2
- package/src/category/seo.astro +1 -1
- package/src/components/PreviewNavSidebar.astro +1 -1
- package/src/components/PreviewToolbar.astro +1 -1
- package/src/env.d.ts +1 -1
- package/src/pages/index.astro +1 -1
- package/src/tests/bibliography_wellformed_export.test.ts +46 -0
- package/src/tests/category_seo_quality.test.ts +74 -0
- package/src/tests/faq_count.test.ts +1 -1
- package/src/tests/mocks/astro_mock.js +1 -1
- package/src/tests/no_h1_in_components.test.ts +1 -1
- package/src/tests/seo_parity.test.ts +2 -2
- package/src/tests/seo_translation_completeness.test.ts +75 -0
- package/src/tests/seo_wellformed_export.test.ts +65 -0
- package/src/tests/tool_validation.test.ts +17 -17
- package/src/tool/bead-pattern-generator/bibliography.astro +8 -8
- package/src/tool/bead-pattern-generator/i18n/de.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/en.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/es.ts +104 -104
- package/src/tool/bead-pattern-generator/i18n/fr.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/id.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/it.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/ja.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/ko.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/nl.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/pl.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/pt.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/ru.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/sv.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/tr.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/zh.ts +111 -111
- package/src/tool/bead-pattern-generator/seo.astro +19 -19
- package/src/tool/dice-roller/bibliography.astro +8 -8
- package/src/tool/dice-roller/i18n/de.ts +134 -134
- package/src/tool/dice-roller/i18n/en.ts +134 -134
- package/src/tool/dice-roller/i18n/es.ts +125 -125
- package/src/tool/dice-roller/i18n/fr.ts +134 -134
- package/src/tool/dice-roller/i18n/id.ts +134 -134
- package/src/tool/dice-roller/i18n/it.ts +134 -134
- package/src/tool/dice-roller/i18n/ja.ts +134 -134
- package/src/tool/dice-roller/i18n/ko.ts +134 -134
- package/src/tool/dice-roller/i18n/nl.ts +134 -134
- package/src/tool/dice-roller/i18n/pl.ts +134 -134
- package/src/tool/dice-roller/i18n/pt.ts +134 -134
- package/src/tool/dice-roller/i18n/ru.ts +134 -134
- package/src/tool/dice-roller/i18n/sv.ts +134 -134
- package/src/tool/dice-roller/i18n/tr.ts +134 -134
- package/src/tool/dice-roller/i18n/zh.ts +134 -134
- package/src/tool/dice-roller/seo.astro +15 -15
- package/src/tool/excuse-generator/bibliography.astro +8 -8
- package/src/tool/excuse-generator/i18n/de.ts +120 -120
- package/src/tool/excuse-generator/i18n/en.ts +120 -120
- package/src/tool/excuse-generator/i18n/es.ts +118 -118
- package/src/tool/excuse-generator/i18n/fr.ts +120 -120
- package/src/tool/excuse-generator/i18n/id.ts +120 -120
- package/src/tool/excuse-generator/i18n/it.ts +120 -120
- package/src/tool/excuse-generator/i18n/ja.ts +120 -120
- package/src/tool/excuse-generator/i18n/ko.ts +120 -120
- package/src/tool/excuse-generator/i18n/nl.ts +120 -120
- package/src/tool/excuse-generator/i18n/pl.ts +120 -120
- package/src/tool/excuse-generator/i18n/pt.ts +120 -120
- package/src/tool/excuse-generator/i18n/ru.ts +120 -120
- package/src/tool/excuse-generator/i18n/sv.ts +120 -120
- package/src/tool/excuse-generator/i18n/tr.ts +120 -120
- package/src/tool/excuse-generator/i18n/zh.ts +120 -120
- package/src/tool/excuse-generator/seo.astro +15 -15
- package/src/tool/fortune-cookie/bibliography.astro +8 -8
- package/src/tool/fortune-cookie/i18n/de.ts +124 -124
- package/src/tool/fortune-cookie/i18n/en.ts +124 -124
- package/src/tool/fortune-cookie/i18n/es.ts +125 -125
- package/src/tool/fortune-cookie/i18n/fr.ts +124 -124
- package/src/tool/fortune-cookie/i18n/id.ts +124 -124
- package/src/tool/fortune-cookie/i18n/it.ts +124 -124
- package/src/tool/fortune-cookie/i18n/ja.ts +124 -124
- package/src/tool/fortune-cookie/i18n/ko.ts +124 -124
- package/src/tool/fortune-cookie/i18n/nl.ts +124 -124
- package/src/tool/fortune-cookie/i18n/pl.ts +124 -124
- package/src/tool/fortune-cookie/i18n/pt.ts +124 -124
- package/src/tool/fortune-cookie/i18n/ru.ts +124 -124
- package/src/tool/fortune-cookie/i18n/sv.ts +124 -124
- package/src/tool/fortune-cookie/i18n/tr.ts +124 -124
- package/src/tool/fortune-cookie/i18n/zh.ts +124 -124
- package/src/tool/fortune-cookie/seo.astro +15 -15
- package/src/tool/synesthesia-painter/bibliography.astro +8 -8
- package/src/tool/synesthesia-painter/i18n/de.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/en.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/es.ts +110 -110
- package/src/tool/synesthesia-painter/i18n/fr.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/id.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/it.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/ja.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/ko.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/nl.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/pl.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/pt.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/ru.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/sv.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/tr.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/zh.ts +118 -118
- package/src/tool/synesthesia-painter/seo.astro +15 -15
- package/src/tool/zalgo-generator/bibliography.astro +8 -8
- package/src/tool/zalgo-generator/i18n/de.ts +109 -109
- package/src/tool/zalgo-generator/i18n/en.ts +109 -109
- package/src/tool/zalgo-generator/i18n/es.ts +109 -109
- package/src/tool/zalgo-generator/i18n/fr.ts +109 -109
- package/src/tool/zalgo-generator/i18n/id.ts +109 -109
- package/src/tool/zalgo-generator/i18n/it.ts +109 -109
- package/src/tool/zalgo-generator/i18n/ja.ts +109 -109
- package/src/tool/zalgo-generator/i18n/ko.ts +109 -109
- package/src/tool/zalgo-generator/i18n/nl.ts +109 -109
- package/src/tool/zalgo-generator/i18n/pl.ts +109 -109
- package/src/tool/zalgo-generator/i18n/pt.ts +109 -109
- package/src/tool/zalgo-generator/i18n/ru.ts +109 -109
- package/src/tool/zalgo-generator/i18n/sv.ts +109 -109
- package/src/tool/zalgo-generator/i18n/tr.ts +109 -109
- package/src/tool/zalgo-generator/i18n/zh.ts +109 -109
- package/src/tool/zalgo-generator/seo.astro +15 -15
- package/src/types.ts +1 -1
|
@@ -1,120 +1,120 @@
|
|
|
1
|
-
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
-
import { bibliography } from '../bibliography';
|
|
3
|
-
import type { ExcuseGeneratorLocaleContent } from '../index';
|
|
4
|
-
|
|
5
|
-
const slug = 'pembuat-alasan';
|
|
6
|
-
const title = 'Pembuat Alasan';
|
|
7
|
-
const description = 'Mesin perjudian semantik untuk melepaskan diri dari komitmen dengan gaya. Hasilkan alasan yang surealis dan tak terbantahkan secara instan.';
|
|
8
|
-
|
|
9
|
-
const faq: ExcuseGeneratorLocaleContent['faq'] = [
|
|
10
|
-
{
|
|
11
|
-
question: 'Bisakah generator ini menyelamatkan pernikahan saya?',
|
|
12
|
-
answer: 'Meskipun kami bukan terapis, menghindari makan malam dengan mertua menggunakan keadaan darurat teknis yang masuk akal dapat secara signifikan mengurangi ketegangan. Gunakanlah dengan bijak.'
|
|
13
|
-
},
|
|
14
|
-
{
|
|
15
|
-
question: 'Mengapa kalimatnya begitu surealis?',
|
|
16
|
-
answer: 'Strategi ini didasarkan pada Disonansi Kognitif. Jika Anda mengatakan sesuatu yang membosankan, itu dapat diverifikasi. Jika Anda mengatakan sesuatu yang tidak masuk akal, kejutan tersebut akan menghalangi rasa marah seseorang.'
|
|
17
|
-
}
|
|
18
|
-
];
|
|
19
|
-
|
|
20
|
-
const howTo: ExcuseGeneratorLocaleContent['howTo'] = [
|
|
21
|
-
{ name: 'Hasilkan', text: 'Klik tombol buat untuk membuat alasan baru.' },
|
|
22
|
-
{ name: 'Salin', text: 'Klik tombol salin untuk memindahkan alasan tersebut ke papan klip Anda.' }
|
|
23
|
-
];
|
|
24
|
-
|
|
25
|
-
const faqSchema: WithContext<FAQPage> = {
|
|
26
|
-
'@context': 'https://schema.org',
|
|
27
|
-
'@type': 'FAQPage',
|
|
28
|
-
mainEntity: faq.map((item) => ({
|
|
29
|
-
'@type': 'Question',
|
|
30
|
-
name: item.question,
|
|
31
|
-
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
32
|
-
})),
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
const howToSchema: WithContext<HowTo> = {
|
|
36
|
-
'@context': 'https://schema.org',
|
|
37
|
-
'@type': 'HowTo',
|
|
38
|
-
name: title,
|
|
39
|
-
description,
|
|
40
|
-
step: howTo.map((step) => ({
|
|
41
|
-
'@type': 'HowToStep',
|
|
42
|
-
name: step.name,
|
|
43
|
-
text: step.text,
|
|
44
|
-
})),
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
const appSchema: WithContext<SoftwareApplication> = {
|
|
48
|
-
'@context': 'https://schema.org',
|
|
49
|
-
'@type': 'SoftwareApplication',
|
|
50
|
-
name: title,
|
|
51
|
-
description,
|
|
52
|
-
applicationCategory: 'UtilitiesApplication',
|
|
53
|
-
operatingSystem: 'Web',
|
|
54
|
-
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
55
|
-
inLanguage: 'id',
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
export const content: ExcuseGeneratorLocaleContent = {
|
|
59
|
-
slug,
|
|
60
|
-
title,
|
|
61
|
-
description,
|
|
62
|
-
faqTitle: 'Pertanyaan yang Sering Diajukan',
|
|
63
|
-
ui: {
|
|
64
|
-
title: 'Pembuat Alasan Surealis',
|
|
65
|
-
description: 'Kalkulator alibi generasi berikutnya.',
|
|
66
|
-
subjectLabel: 'Subjek',
|
|
67
|
-
actionLabel: 'Tindakan',
|
|
68
|
-
victimLabel: 'Korban',
|
|
69
|
-
generateBtn: 'HASILKAN ALASAN',
|
|
70
|
-
copyBtn: 'Salin kegilaan ini',
|
|
71
|
-
copied: 'Tersalin!',
|
|
72
|
-
starts: JSON.stringify([
|
|
73
|
-
"Kucing saya", "Nenek saya", "Presiden", "Alien", "Tetangga saya dari lantai 5",
|
|
74
|
-
"Wifi", "Horoskop saya", "Penjelajah waktu", "Mesin cuci", "Kulkas saya",
|
|
75
|
-
"Semangat Natal", "Bayangan saya", "Seorang ninja", "Polisi vegan", "Siri",
|
|
76
|
-
"Tanaman karnivora saya", "Kurir Amazon", "Klon jahat saya", "Seorang penyihir", "Godzilla"
|
|
77
|
-
]),
|
|
78
|
-
middles: JSON.stringify([
|
|
79
|
-
"telah menyatakan perang terhadap", "telah memakan", "telah menculik", "telah membakar",
|
|
80
|
-
"sedang mengadakan pesta di", "telah muntah di", "menolak untuk meninggalkan",
|
|
81
|
-
"telah meretas", "telah mencuri", "telah jatuh cinta dengan", "sedang merenungkan",
|
|
82
|
-
"telah memberikan mantra pada", "sedang memprotes terhadap", "telah mendirikan aliran sesat di",
|
|
83
|
-
"sedang menari samba di", "telah memanggil iblis di", "telah memblokir akses ke",
|
|
84
|
-
"telah berubah menjadi emas", "sedang mencoba menjual", "telah menulis buku tentang"
|
|
85
|
-
]),
|
|
86
|
-
ends: JSON.stringify([
|
|
87
|
-
"kunci rumah saya.", "keinginan saya untuk hidup.", "pintu garasi.",
|
|
88
|
-
"celana favorit saya.", "router ruang tamu.", "satu-satunya pasang sepatu saya.",
|
|
89
|
-
"hukum fisika.", "martabat saya.", "lift gedung.",
|
|
90
|
-
"akun Netflix saya.", "sikat gigi saya.", "akta rumah saya.",
|
|
91
|
-
"koleksi pogs saya.", "rem tangan mobil.", "keinginan saya untuk bersosialisasi.",
|
|
92
|
-
"persediaan kopi saya.", "tutup toilet.", "remot TV.",
|
|
93
|
-
"kaus kaki keberuntungan saya.", "peradaban Barat."
|
|
94
|
-
]),
|
|
95
|
-
faqTitle: 'FAQ',
|
|
96
|
-
bibliographyTitle: 'Referensi'
|
|
97
|
-
},
|
|
98
|
-
seo: [
|
|
99
|
-
{ type: 'title', text: 'Seni Ilmiah dalam Membuat Alasan Sempurna', level: 2 },
|
|
100
|
-
{ type: 'paragraph', html: 'Kita hidup di era hiperkoneksi. Ponsel Anda bergetar, jam tangan memberi notifikasi, dan agenda sosial Anda terlihat seperti permainan Tetris yang hampir kalah. Tekanan untuk menyetujui segalanya telah menciptakan epidemi kelelahan sosial.' },
|
|
101
|
-
{ type: 'title', text: 'Kebangkitan JOMO (Joy of Missing Out)', level: 3 },
|
|
102
|
-
{ type: 'paragraph', html: 'Meskipun FOMO (Fear of Missing Out) mendominasi dekade terakhir, para pakar kesehatan digital kini menganjurkan <strong>JOMO: Kegembiraan dalam Melewatkan Sesuatu</strong>. Ini bukan tentang isolasi, tetapi tentang intensionalitas.' },
|
|
103
|
-
{ type: 'tip', title: 'Formula Alibi yang Tak Terbantahkan', html: '<strong>Subjek yang Terdisosiasi:</strong> Anda tidak pernah menjadi pelakunya. Itu adalah "wifi", "kucing saya", "alam semesta". Alihkan kesalahan ke entitas eksternal.<br><strong>Tindakan Hiperbolik:</strong> Situasinya harus cukup tidak masuk akal atau cukup teknis sehingga tidak ada yang menanyakan detailnya.<br><strong>Blok Fisik:</strong> Hasil akhirnya harus biner: saya pergi atau saya tetap di rumah.' },
|
|
104
|
-
{ type: 'title', text: 'Sejarah Singkat Alasan', level: 3 },
|
|
105
|
-
{ type: 'list', items: [
|
|
106
|
-
'<strong>Abad Pertengahan:</strong> "Kuda saya kehilangan tapalnya" (Klasik sepanjang masa).',
|
|
107
|
-
'<strong>Revolusi Industri:</strong> "Mesin uapnya terlalu panas".',
|
|
108
|
-
'<strong>Era Digital:</strong> "Internet saya terputus tepat di tengah pembaruan".',
|
|
109
|
-
]},
|
|
110
|
-
{ type: 'proscons', items: [
|
|
111
|
-
{ pro: 'Meringankan tekanan sosial secara instan', con: 'Penggunaan berlebihan merusak kepercayaan' },
|
|
112
|
-
{ pro: 'Melindungi energi dan batasan Anda', con: 'Dapat menimbulkan rasa bersalah jika digunakan sembarangan' },
|
|
113
|
-
{ pro: 'Nada kreatif dan humoris meredakan ketegangan', con: 'Tidak cocok untuk konteks formal atau profesional' },
|
|
114
|
-
]},
|
|
115
|
-
],
|
|
116
|
-
faq,
|
|
117
|
-
bibliography,
|
|
118
|
-
howTo,
|
|
119
|
-
schemas: [faqSchema as any, howToSchema as any, appSchema],
|
|
120
|
-
};
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import { bibliography } from '../bibliography';
|
|
3
|
+
import type { ExcuseGeneratorLocaleContent } from '../index';
|
|
4
|
+
|
|
5
|
+
const slug = 'pembuat-alasan';
|
|
6
|
+
const title = 'Pembuat Alasan';
|
|
7
|
+
const description = 'Mesin perjudian semantik untuk melepaskan diri dari komitmen dengan gaya. Hasilkan alasan yang surealis dan tak terbantahkan secara instan.';
|
|
8
|
+
|
|
9
|
+
const faq: ExcuseGeneratorLocaleContent['faq'] = [
|
|
10
|
+
{
|
|
11
|
+
question: 'Bisakah generator ini menyelamatkan pernikahan saya?',
|
|
12
|
+
answer: 'Meskipun kami bukan terapis, menghindari makan malam dengan mertua menggunakan keadaan darurat teknis yang masuk akal dapat secara signifikan mengurangi ketegangan. Gunakanlah dengan bijak.'
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
question: 'Mengapa kalimatnya begitu surealis?',
|
|
16
|
+
answer: 'Strategi ini didasarkan pada Disonansi Kognitif. Jika Anda mengatakan sesuatu yang membosankan, itu dapat diverifikasi. Jika Anda mengatakan sesuatu yang tidak masuk akal, kejutan tersebut akan menghalangi rasa marah seseorang.'
|
|
17
|
+
}
|
|
18
|
+
];
|
|
19
|
+
|
|
20
|
+
const howTo: ExcuseGeneratorLocaleContent['howTo'] = [
|
|
21
|
+
{ name: 'Hasilkan', text: 'Klik tombol buat untuk membuat alasan baru.' },
|
|
22
|
+
{ name: 'Salin', text: 'Klik tombol salin untuk memindahkan alasan tersebut ke papan klip Anda.' }
|
|
23
|
+
];
|
|
24
|
+
|
|
25
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
26
|
+
'@context': 'https://schema.org',
|
|
27
|
+
'@type': 'FAQPage',
|
|
28
|
+
mainEntity: faq.map((item) => ({
|
|
29
|
+
'@type': 'Question',
|
|
30
|
+
name: item.question,
|
|
31
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
32
|
+
})),
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
const howToSchema: WithContext<HowTo> = {
|
|
36
|
+
'@context': 'https://schema.org',
|
|
37
|
+
'@type': 'HowTo',
|
|
38
|
+
name: title,
|
|
39
|
+
description,
|
|
40
|
+
step: howTo.map((step) => ({
|
|
41
|
+
'@type': 'HowToStep',
|
|
42
|
+
name: step.name,
|
|
43
|
+
text: step.text,
|
|
44
|
+
})),
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
48
|
+
'@context': 'https://schema.org',
|
|
49
|
+
'@type': 'SoftwareApplication',
|
|
50
|
+
name: title,
|
|
51
|
+
description,
|
|
52
|
+
applicationCategory: 'UtilitiesApplication',
|
|
53
|
+
operatingSystem: 'Web',
|
|
54
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
55
|
+
inLanguage: 'id',
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
export const content: ExcuseGeneratorLocaleContent = {
|
|
59
|
+
slug,
|
|
60
|
+
title,
|
|
61
|
+
description,
|
|
62
|
+
faqTitle: 'Pertanyaan yang Sering Diajukan',
|
|
63
|
+
ui: {
|
|
64
|
+
title: 'Pembuat Alasan Surealis',
|
|
65
|
+
description: 'Kalkulator alibi generasi berikutnya.',
|
|
66
|
+
subjectLabel: 'Subjek',
|
|
67
|
+
actionLabel: 'Tindakan',
|
|
68
|
+
victimLabel: 'Korban',
|
|
69
|
+
generateBtn: 'HASILKAN ALASAN',
|
|
70
|
+
copyBtn: 'Salin kegilaan ini',
|
|
71
|
+
copied: 'Tersalin!',
|
|
72
|
+
starts: JSON.stringify([
|
|
73
|
+
"Kucing saya", "Nenek saya", "Presiden", "Alien", "Tetangga saya dari lantai 5",
|
|
74
|
+
"Wifi", "Horoskop saya", "Penjelajah waktu", "Mesin cuci", "Kulkas saya",
|
|
75
|
+
"Semangat Natal", "Bayangan saya", "Seorang ninja", "Polisi vegan", "Siri",
|
|
76
|
+
"Tanaman karnivora saya", "Kurir Amazon", "Klon jahat saya", "Seorang penyihir", "Godzilla"
|
|
77
|
+
]),
|
|
78
|
+
middles: JSON.stringify([
|
|
79
|
+
"telah menyatakan perang terhadap", "telah memakan", "telah menculik", "telah membakar",
|
|
80
|
+
"sedang mengadakan pesta di", "telah muntah di", "menolak untuk meninggalkan",
|
|
81
|
+
"telah meretas", "telah mencuri", "telah jatuh cinta dengan", "sedang merenungkan",
|
|
82
|
+
"telah memberikan mantra pada", "sedang memprotes terhadap", "telah mendirikan aliran sesat di",
|
|
83
|
+
"sedang menari samba di", "telah memanggil iblis di", "telah memblokir akses ke",
|
|
84
|
+
"telah berubah menjadi emas", "sedang mencoba menjual", "telah menulis buku tentang"
|
|
85
|
+
]),
|
|
86
|
+
ends: JSON.stringify([
|
|
87
|
+
"kunci rumah saya.", "keinginan saya untuk hidup.", "pintu garasi.",
|
|
88
|
+
"celana favorit saya.", "router ruang tamu.", "satu-satunya pasang sepatu saya.",
|
|
89
|
+
"hukum fisika.", "martabat saya.", "lift gedung.",
|
|
90
|
+
"akun Netflix saya.", "sikat gigi saya.", "akta rumah saya.",
|
|
91
|
+
"koleksi pogs saya.", "rem tangan mobil.", "keinginan saya untuk bersosialisasi.",
|
|
92
|
+
"persediaan kopi saya.", "tutup toilet.", "remot TV.",
|
|
93
|
+
"kaus kaki keberuntungan saya.", "peradaban Barat."
|
|
94
|
+
]),
|
|
95
|
+
faqTitle: 'FAQ',
|
|
96
|
+
bibliographyTitle: 'Referensi'
|
|
97
|
+
},
|
|
98
|
+
seo: [
|
|
99
|
+
{ type: 'title', text: 'Seni Ilmiah dalam Membuat Alasan Sempurna', level: 2 },
|
|
100
|
+
{ type: 'paragraph', html: 'Kita hidup di era hiperkoneksi. Ponsel Anda bergetar, jam tangan memberi notifikasi, dan agenda sosial Anda terlihat seperti permainan Tetris yang hampir kalah. Tekanan untuk menyetujui segalanya telah menciptakan epidemi kelelahan sosial.' },
|
|
101
|
+
{ type: 'title', text: 'Kebangkitan JOMO (Joy of Missing Out)', level: 3 },
|
|
102
|
+
{ type: 'paragraph', html: 'Meskipun FOMO (Fear of Missing Out) mendominasi dekade terakhir, para pakar kesehatan digital kini menganjurkan <strong>JOMO: Kegembiraan dalam Melewatkan Sesuatu</strong>. Ini bukan tentang isolasi, tetapi tentang intensionalitas.' },
|
|
103
|
+
{ type: 'tip', title: 'Formula Alibi yang Tak Terbantahkan', html: '<strong>Subjek yang Terdisosiasi:</strong> Anda tidak pernah menjadi pelakunya. Itu adalah "wifi", "kucing saya", "alam semesta". Alihkan kesalahan ke entitas eksternal.<br><strong>Tindakan Hiperbolik:</strong> Situasinya harus cukup tidak masuk akal atau cukup teknis sehingga tidak ada yang menanyakan detailnya.<br><strong>Blok Fisik:</strong> Hasil akhirnya harus biner: saya pergi atau saya tetap di rumah.' },
|
|
104
|
+
{ type: 'title', text: 'Sejarah Singkat Alasan', level: 3 },
|
|
105
|
+
{ type: 'list', items: [
|
|
106
|
+
'<strong>Abad Pertengahan:</strong> "Kuda saya kehilangan tapalnya" (Klasik sepanjang masa).',
|
|
107
|
+
'<strong>Revolusi Industri:</strong> "Mesin uapnya terlalu panas".',
|
|
108
|
+
'<strong>Era Digital:</strong> "Internet saya terputus tepat di tengah pembaruan".',
|
|
109
|
+
]},
|
|
110
|
+
{ type: 'proscons', items: [
|
|
111
|
+
{ pro: 'Meringankan tekanan sosial secara instan', con: 'Penggunaan berlebihan merusak kepercayaan' },
|
|
112
|
+
{ pro: 'Melindungi energi dan batasan Anda', con: 'Dapat menimbulkan rasa bersalah jika digunakan sembarangan' },
|
|
113
|
+
{ pro: 'Nada kreatif dan humoris meredakan ketegangan', con: 'Tidak cocok untuk konteks formal atau profesional' },
|
|
114
|
+
]},
|
|
115
|
+
],
|
|
116
|
+
faq,
|
|
117
|
+
bibliography,
|
|
118
|
+
howTo,
|
|
119
|
+
schemas: [faqSchema as any, howToSchema as any, appSchema],
|
|
120
|
+
};
|
|
@@ -1,120 +1,120 @@
|
|
|
1
|
-
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
-
import { bibliography } from '../bibliography';
|
|
3
|
-
import type { ExcuseGeneratorLocaleContent } from '../index';
|
|
4
|
-
|
|
5
|
-
const slug = 'generatore-di-scuse';
|
|
6
|
-
const title = 'Generatore di Scuse';
|
|
7
|
-
const description = 'Macchina d\'azzardo semantica per liberarsi dagli impegni con stile. Genera istantaneamente scuse surreali e inconfutabili.';
|
|
8
|
-
|
|
9
|
-
const faq: ExcuseGeneratorLocaleContent['faq'] = [
|
|
10
|
-
{
|
|
11
|
-
question: 'Questo generatore può salvare il mio matrimonio?',
|
|
12
|
-
answer: 'Pur non essendo terapeuti, evitare quella cena con i suoceri usando un\'emergenza tecnica plausibile può ridurre significativamente la tensione. Usare responsabilmente.'
|
|
13
|
-
},
|
|
14
|
-
{
|
|
15
|
-
question: 'Perché frasi così surreali?',
|
|
16
|
-
answer: 'La strategia si basa sulla dissonanza cognitiva. Se dici qualcosa di noioso, è verificabile. Se dici qualcosa di assurdo, la sorpresa blocca la capacità di arrabbiarsi.'
|
|
17
|
-
}
|
|
18
|
-
];
|
|
19
|
-
|
|
20
|
-
const howTo: ExcuseGeneratorLocaleContent['howTo'] = [
|
|
21
|
-
{ name: 'Genera', text: 'Clicca sul pulsante genera per creare una nuova scusa.' },
|
|
22
|
-
{ name: 'Copia', text: 'Clicca sul pulsante copia per portare la scusa negli appunti.' }
|
|
23
|
-
];
|
|
24
|
-
|
|
25
|
-
const faqSchema: WithContext<FAQPage> = {
|
|
26
|
-
'@context': 'https://schema.org',
|
|
27
|
-
'@type': 'FAQPage',
|
|
28
|
-
mainEntity: faq.map((item) => ({
|
|
29
|
-
'@type': 'Question',
|
|
30
|
-
name: item.question,
|
|
31
|
-
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
32
|
-
})),
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
const howToSchema: WithContext<HowTo> = {
|
|
36
|
-
'@context': 'https://schema.org',
|
|
37
|
-
'@type': 'HowTo',
|
|
38
|
-
name: title,
|
|
39
|
-
description,
|
|
40
|
-
step: howTo.map((step) => ({
|
|
41
|
-
'@type': 'HowToStep',
|
|
42
|
-
name: step.name,
|
|
43
|
-
text: step.text,
|
|
44
|
-
})),
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
const appSchema: WithContext<SoftwareApplication> = {
|
|
48
|
-
'@context': 'https://schema.org',
|
|
49
|
-
'@type': 'SoftwareApplication',
|
|
50
|
-
name: title,
|
|
51
|
-
description,
|
|
52
|
-
applicationCategory: 'UtilitiesApplication',
|
|
53
|
-
operatingSystem: 'Web',
|
|
54
|
-
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
55
|
-
inLanguage: 'it',
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
export const content: ExcuseGeneratorLocaleContent = {
|
|
59
|
-
slug,
|
|
60
|
-
title,
|
|
61
|
-
description,
|
|
62
|
-
faqTitle: 'Domande Frequenti',
|
|
63
|
-
ui: {
|
|
64
|
-
title: 'Generatore di Scuse Surreali',
|
|
65
|
-
description: 'Calcolatore di alibi di nuova generazione.',
|
|
66
|
-
subjectLabel: 'Soggetto',
|
|
67
|
-
actionLabel: 'Azione',
|
|
68
|
-
victimLabel: 'Vittima',
|
|
69
|
-
generateBtn: 'GENERA SCUSA',
|
|
70
|
-
copyBtn: 'Copia questa follia',
|
|
71
|
-
copied: 'Copiato!',
|
|
72
|
-
starts: JSON.stringify([
|
|
73
|
-
"Il mio gatto", "Mia nonna", "Il presidente", "Un alieno", "Il mio vicino del 5° piano",
|
|
74
|
-
"Il wifi", "Il mio oroscopo", "Un viaggiatore nel tempo", "La lavatrice", "Il mio frigorifero",
|
|
75
|
-
"Lo spirito del Natale", "La mia ombra", "Un ninja", "La polizia vegana", "Siri",
|
|
76
|
-
"La mia pianta carnivora", "Il fattorino di Amazon", "Il mio clone cattivo", "Un mago", "Godzilla"
|
|
77
|
-
]),
|
|
78
|
-
middles: JSON.stringify([
|
|
79
|
-
"ha dichiarato guerra a", "ha mangiato", "ha rapito", "ha dato fuoco a",
|
|
80
|
-
"sta organizzando una festa a", "ha vomitato su", "si rifiuta di lasciare",
|
|
81
|
-
"ha hackerato", "ha rubato", "si è innamorato di", "sta meditando su",
|
|
82
|
-
"ha lanciato un incantesimo su", "sta protestando contro", "ha fondato una setta a",
|
|
83
|
-
"sta ballando il samba a", "ha evocato un demone a", "ha bloccato l'accesso a",
|
|
84
|
-
"si è trasformato in oro", "sta cercando di vendere", "ha scritto un libro su"
|
|
85
|
-
]),
|
|
86
|
-
ends: JSON.stringify([
|
|
87
|
-
"le chiavi di casa mia.", "la mia voglia di vivere.", "la porta del garage.",
|
|
88
|
-
"i miei pantaloni preferiti.", "il router del soggiorno.", "il mio unico paio di scarpe.",
|
|
89
|
-
"le leggi della fisica.", "la mia dignità.", "l'ascensore del palazzo.",
|
|
90
|
-
"il mio account Netflix.", "il mio spazzolino da denti.", "l'atto di proprietà della casa.",
|
|
91
|
-
"la mia collezione di pogs.", "il freno a mano dell'auto.", "il mio desiderio di socializzare.",
|
|
92
|
-
"la mia scorta di caffè.", "il coperchio della toilette.", "il telecomando della TV.",
|
|
93
|
-
"i miei calzini fortunati.", "la civiltà occidentale."
|
|
94
|
-
]),
|
|
95
|
-
faqTitle: 'FAQ',
|
|
96
|
-
bibliographyTitle: 'Riferimenti'
|
|
97
|
-
},
|
|
98
|
-
seo: [
|
|
99
|
-
{ type: 'title', text: 'L\'arte scientifica della scusa perfetta', level: 2 },
|
|
100
|
-
{ type: 'paragraph', html: 'Viviamo nell\'era dell\'iperattività. Il telefono vibra, l\'orologio invia notifiche e l\'agenda sociale sembra una partita a Tetris che sta per essere persa. La pressione a dire "sì" a tutto ha creato un\'epidemia di esaurimento sociale.' },
|
|
101
|
-
{ type: 'title', text: 'La rinascita di JOMO (Joy of Missing Out)', level: 3 },
|
|
102
|
-
{ type: 'paragraph', html: 'Mentre il FOMO (Fear of Missing Out) ha dominato l\'ultimo decennio, gli esperti di benessere digitale ora promuovono la <strong>JOMO: la gioia di perdersi qualcosa</strong>. Non si tratta di isolamento, ma di intenzionalità.' },
|
|
103
|
-
{ type: 'tip', title: 'La formula per l\'alibi inconfutabile', html: '<strong>Il soggetto dissociato:</strong> non sei mai tu il colpevole. È "il wifi", "il mio gatto", "l\'universo". Sposta la colpa su un\'entità esterna.<br><strong>L\'azione iperbolica:</strong> la situazione deve essere abbastanza assurda o tecnica affinché nessuno chieda i dettagli.<br><strong>Il blocco fisico:</strong> l\'esito finale deve essere binario: o vado o resto a casa.' },
|
|
104
|
-
{ type: 'title', text: 'Breve storia della scusa', level: 3 },
|
|
105
|
-
{ type: 'list', items: [
|
|
106
|
-
'<strong>Medioevo:</strong> "Il mio cavallo ha perso un ferro" (un classico intramontabile).',
|
|
107
|
-
'<strong>Rivoluzione industriale:</strong> "La macchina a vapore si è surriscaldata".',
|
|
108
|
-
'<strong>Era digitale:</strong> "La connessione è caduta proprio durante l\'aggiornamento".',
|
|
109
|
-
]},
|
|
110
|
-
{ type: 'proscons', items: [
|
|
111
|
-
{ pro: 'Allevia istantaneamente la pressione sociale', con: 'L\'uso eccessivo erode la fiducia' },
|
|
112
|
-
{ pro: 'Protegge la tua energia e i tuoi confini', con: 'Può generare sensi di colpa se usato con noncuranza' },
|
|
113
|
-
{ pro: 'Il tono creativo e umoristico smorza la tensione', con: 'Non adatto a contesti formali o professionali' },
|
|
114
|
-
]},
|
|
115
|
-
],
|
|
116
|
-
faq,
|
|
117
|
-
bibliography,
|
|
118
|
-
howTo,
|
|
119
|
-
schemas: [faqSchema as any, howToSchema as any, appSchema],
|
|
120
|
-
};
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import { bibliography } from '../bibliography';
|
|
3
|
+
import type { ExcuseGeneratorLocaleContent } from '../index';
|
|
4
|
+
|
|
5
|
+
const slug = 'generatore-di-scuse';
|
|
6
|
+
const title = 'Generatore di Scuse';
|
|
7
|
+
const description = 'Macchina d\'azzardo semantica per liberarsi dagli impegni con stile. Genera istantaneamente scuse surreali e inconfutabili.';
|
|
8
|
+
|
|
9
|
+
const faq: ExcuseGeneratorLocaleContent['faq'] = [
|
|
10
|
+
{
|
|
11
|
+
question: 'Questo generatore può salvare il mio matrimonio?',
|
|
12
|
+
answer: 'Pur non essendo terapeuti, evitare quella cena con i suoceri usando un\'emergenza tecnica plausibile può ridurre significativamente la tensione. Usare responsabilmente.'
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
question: 'Perché frasi così surreali?',
|
|
16
|
+
answer: 'La strategia si basa sulla dissonanza cognitiva. Se dici qualcosa di noioso, è verificabile. Se dici qualcosa di assurdo, la sorpresa blocca la capacità di arrabbiarsi.'
|
|
17
|
+
}
|
|
18
|
+
];
|
|
19
|
+
|
|
20
|
+
const howTo: ExcuseGeneratorLocaleContent['howTo'] = [
|
|
21
|
+
{ name: 'Genera', text: 'Clicca sul pulsante genera per creare una nuova scusa.' },
|
|
22
|
+
{ name: 'Copia', text: 'Clicca sul pulsante copia per portare la scusa negli appunti.' }
|
|
23
|
+
];
|
|
24
|
+
|
|
25
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
26
|
+
'@context': 'https://schema.org',
|
|
27
|
+
'@type': 'FAQPage',
|
|
28
|
+
mainEntity: faq.map((item) => ({
|
|
29
|
+
'@type': 'Question',
|
|
30
|
+
name: item.question,
|
|
31
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
32
|
+
})),
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
const howToSchema: WithContext<HowTo> = {
|
|
36
|
+
'@context': 'https://schema.org',
|
|
37
|
+
'@type': 'HowTo',
|
|
38
|
+
name: title,
|
|
39
|
+
description,
|
|
40
|
+
step: howTo.map((step) => ({
|
|
41
|
+
'@type': 'HowToStep',
|
|
42
|
+
name: step.name,
|
|
43
|
+
text: step.text,
|
|
44
|
+
})),
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
48
|
+
'@context': 'https://schema.org',
|
|
49
|
+
'@type': 'SoftwareApplication',
|
|
50
|
+
name: title,
|
|
51
|
+
description,
|
|
52
|
+
applicationCategory: 'UtilitiesApplication',
|
|
53
|
+
operatingSystem: 'Web',
|
|
54
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
55
|
+
inLanguage: 'it',
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
export const content: ExcuseGeneratorLocaleContent = {
|
|
59
|
+
slug,
|
|
60
|
+
title,
|
|
61
|
+
description,
|
|
62
|
+
faqTitle: 'Domande Frequenti',
|
|
63
|
+
ui: {
|
|
64
|
+
title: 'Generatore di Scuse Surreali',
|
|
65
|
+
description: 'Calcolatore di alibi di nuova generazione.',
|
|
66
|
+
subjectLabel: 'Soggetto',
|
|
67
|
+
actionLabel: 'Azione',
|
|
68
|
+
victimLabel: 'Vittima',
|
|
69
|
+
generateBtn: 'GENERA SCUSA',
|
|
70
|
+
copyBtn: 'Copia questa follia',
|
|
71
|
+
copied: 'Copiato!',
|
|
72
|
+
starts: JSON.stringify([
|
|
73
|
+
"Il mio gatto", "Mia nonna", "Il presidente", "Un alieno", "Il mio vicino del 5° piano",
|
|
74
|
+
"Il wifi", "Il mio oroscopo", "Un viaggiatore nel tempo", "La lavatrice", "Il mio frigorifero",
|
|
75
|
+
"Lo spirito del Natale", "La mia ombra", "Un ninja", "La polizia vegana", "Siri",
|
|
76
|
+
"La mia pianta carnivora", "Il fattorino di Amazon", "Il mio clone cattivo", "Un mago", "Godzilla"
|
|
77
|
+
]),
|
|
78
|
+
middles: JSON.stringify([
|
|
79
|
+
"ha dichiarato guerra a", "ha mangiato", "ha rapito", "ha dato fuoco a",
|
|
80
|
+
"sta organizzando una festa a", "ha vomitato su", "si rifiuta di lasciare",
|
|
81
|
+
"ha hackerato", "ha rubato", "si è innamorato di", "sta meditando su",
|
|
82
|
+
"ha lanciato un incantesimo su", "sta protestando contro", "ha fondato una setta a",
|
|
83
|
+
"sta ballando il samba a", "ha evocato un demone a", "ha bloccato l'accesso a",
|
|
84
|
+
"si è trasformato in oro", "sta cercando di vendere", "ha scritto un libro su"
|
|
85
|
+
]),
|
|
86
|
+
ends: JSON.stringify([
|
|
87
|
+
"le chiavi di casa mia.", "la mia voglia di vivere.", "la porta del garage.",
|
|
88
|
+
"i miei pantaloni preferiti.", "il router del soggiorno.", "il mio unico paio di scarpe.",
|
|
89
|
+
"le leggi della fisica.", "la mia dignità.", "l'ascensore del palazzo.",
|
|
90
|
+
"il mio account Netflix.", "il mio spazzolino da denti.", "l'atto di proprietà della casa.",
|
|
91
|
+
"la mia collezione di pogs.", "il freno a mano dell'auto.", "il mio desiderio di socializzare.",
|
|
92
|
+
"la mia scorta di caffè.", "il coperchio della toilette.", "il telecomando della TV.",
|
|
93
|
+
"i miei calzini fortunati.", "la civiltà occidentale."
|
|
94
|
+
]),
|
|
95
|
+
faqTitle: 'FAQ',
|
|
96
|
+
bibliographyTitle: 'Riferimenti'
|
|
97
|
+
},
|
|
98
|
+
seo: [
|
|
99
|
+
{ type: 'title', text: 'L\'arte scientifica della scusa perfetta', level: 2 },
|
|
100
|
+
{ type: 'paragraph', html: 'Viviamo nell\'era dell\'iperattività. Il telefono vibra, l\'orologio invia notifiche e l\'agenda sociale sembra una partita a Tetris che sta per essere persa. La pressione a dire "sì" a tutto ha creato un\'epidemia di esaurimento sociale.' },
|
|
101
|
+
{ type: 'title', text: 'La rinascita di JOMO (Joy of Missing Out)', level: 3 },
|
|
102
|
+
{ type: 'paragraph', html: 'Mentre il FOMO (Fear of Missing Out) ha dominato l\'ultimo decennio, gli esperti di benessere digitale ora promuovono la <strong>JOMO: la gioia di perdersi qualcosa</strong>. Non si tratta di isolamento, ma di intenzionalità.' },
|
|
103
|
+
{ type: 'tip', title: 'La formula per l\'alibi inconfutabile', html: '<strong>Il soggetto dissociato:</strong> non sei mai tu il colpevole. È "il wifi", "il mio gatto", "l\'universo". Sposta la colpa su un\'entità esterna.<br><strong>L\'azione iperbolica:</strong> la situazione deve essere abbastanza assurda o tecnica affinché nessuno chieda i dettagli.<br><strong>Il blocco fisico:</strong> l\'esito finale deve essere binario: o vado o resto a casa.' },
|
|
104
|
+
{ type: 'title', text: 'Breve storia della scusa', level: 3 },
|
|
105
|
+
{ type: 'list', items: [
|
|
106
|
+
'<strong>Medioevo:</strong> "Il mio cavallo ha perso un ferro" (un classico intramontabile).',
|
|
107
|
+
'<strong>Rivoluzione industriale:</strong> "La macchina a vapore si è surriscaldata".',
|
|
108
|
+
'<strong>Era digitale:</strong> "La connessione è caduta proprio durante l\'aggiornamento".',
|
|
109
|
+
]},
|
|
110
|
+
{ type: 'proscons', items: [
|
|
111
|
+
{ pro: 'Allevia istantaneamente la pressione sociale', con: 'L\'uso eccessivo erode la fiducia' },
|
|
112
|
+
{ pro: 'Protegge la tua energia e i tuoi confini', con: 'Può generare sensi di colpa se usato con noncuranza' },
|
|
113
|
+
{ pro: 'Il tono creativo e umoristico smorza la tensione', con: 'Non adatto a contesti formali o professionali' },
|
|
114
|
+
]},
|
|
115
|
+
],
|
|
116
|
+
faq,
|
|
117
|
+
bibliography,
|
|
118
|
+
howTo,
|
|
119
|
+
schemas: [faqSchema as any, howToSchema as any, appSchema],
|
|
120
|
+
};
|