@jjlmoya/utils-creative 1.26.0 → 1.27.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 +69 -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 = 'ursaktsgenerator';
|
|
6
|
-
const title = 'Ursaktsgenerator';
|
|
7
|
-
const description = 'Semantisk slumpmaskin för att slippa åtaganden med stil. Generera surrealistiska och oemotsägliga ursäkter omedelbart.';
|
|
8
|
-
|
|
9
|
-
const faq: ExcuseGeneratorLocaleContent['faq'] = [
|
|
10
|
-
{
|
|
11
|
-
question: 'Kan den här generatorn rädda mitt äktenskap?',
|
|
12
|
-
answer: 'Även om vi inte är terapeuter, kan undvikandet av den där middagen med svärföräldrarna genom en rimlig teknisk nödsituation minska spänningen avsevärt. Använd med ansvar.'
|
|
13
|
-
},
|
|
14
|
-
{
|
|
15
|
-
question: 'Varför sådana surrealistiska fraser?',
|
|
16
|
-
answer: 'Strategin bygger på kognitiv dissonans. Om du säger något tråkigt är det verifierbart. Om du säger något absurt, blockerar överraskningen förmågan till vrede.'
|
|
17
|
-
}
|
|
18
|
-
];
|
|
19
|
-
|
|
20
|
-
const howTo: ExcuseGeneratorLocaleContent['howTo'] = [
|
|
21
|
-
{ name: 'Generera', text: 'Klicka på generera-knappen för att skapa en ny ursäkt.' },
|
|
22
|
-
{ name: 'Kopiera', text: 'Klicka på kopiera-knappen för att föra över ursäkten till ditt urklipp.' }
|
|
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: 'sv',
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
export const content: ExcuseGeneratorLocaleContent = {
|
|
59
|
-
slug,
|
|
60
|
-
title,
|
|
61
|
-
description,
|
|
62
|
-
faqTitle: 'Vanliga frågor',
|
|
63
|
-
ui: {
|
|
64
|
-
title: 'Surrealistisk Ursaktsgenerator',
|
|
65
|
-
description: 'Nästa generations alibi-kalkylator.',
|
|
66
|
-
subjectLabel: 'Subjekt',
|
|
67
|
-
actionLabel: 'Handling',
|
|
68
|
-
victimLabel: 'Offer',
|
|
69
|
-
generateBtn: 'GENERERA URSAKT',
|
|
70
|
-
copyBtn: 'Kopiera denna galenskap',
|
|
71
|
-
copied: 'Kopierad!',
|
|
72
|
-
starts: JSON.stringify([
|
|
73
|
-
"Min katt", "Min mormor", "Presidenten", "En utomjording", "Min granne från 5:e våningen",
|
|
74
|
-
"Wifi", "Mitt horoskop", "En tidsresenär", "Tvättmaskinen", "Mitt kylskåp",
|
|
75
|
-
"Jultomten", "Min skugga", "En ninja", "Veganpolisen", "Siri",
|
|
76
|
-
"Min köttätande växt", "Amazon-budet", "Min onda klon", "En trollkarl", "Godzilla"
|
|
77
|
-
]),
|
|
78
|
-
middles: JSON.stringify([
|
|
79
|
-
"har förklarat krig mot", "har ätit upp", "har kidnappat", "har satt eld på",
|
|
80
|
-
"anordnar en fest i", "har kräkts på", "vägrar lämna",
|
|
81
|
-
"har hackat", "har stulit", "har blivit kär i", "mediterar över",
|
|
82
|
-
"har förtrollat", "protesterar mot", "har grundat en kult i",
|
|
83
|
-
"dansar samba i", "har frammanat en demon i", "har blockerat åtkomst till",
|
|
84
|
-
"har förvandlats till guld", "försöker sälja", "har skrivit en bok om"
|
|
85
|
-
]),
|
|
86
|
-
ends: JSON.stringify([
|
|
87
|
-
"mina hemnycklar.", "min livslust.", "garageporten.",
|
|
88
|
-
"mina favoritbyxor.", "routern i vardagsrummet.", "mina enda skor.",
|
|
89
|
-
"fysikens lagar.", "min värdighet.", "byggnadens hiss.",
|
|
90
|
-
"mitt Netflix-konto.", "min tandborste.", "mina lagfarter.",
|
|
91
|
-
"min samling av pogs.", "bilens handbroms.", "min lust att socialisera.",
|
|
92
|
-
"mitt kaffeförråd.", "toalettlocket.", "TV-fjärrkontrollen.",
|
|
93
|
-
"mina lyckostrumpor.", "den västerländska civilisationen."
|
|
94
|
-
]),
|
|
95
|
-
faqTitle: 'FAQ',
|
|
96
|
-
bibliographyTitle: 'Referenser'
|
|
97
|
-
},
|
|
98
|
-
seo: [
|
|
99
|
-
{ type: 'title', text: 'Den vetenskapliga konsten att skapa den perfekta ursäkten', level: 2 },
|
|
100
|
-
{ type: 'paragraph', html: 'Vi lever i en era av hyperuppkoppling. Din telefon vibrerar, din klocka ger dig notiser, och din sociala agenda ser ut som ett spel Tetris som håller på att förloras. Pressen att säga "ja" till allt har skapat en epidemi av social utmattning.' },
|
|
101
|
-
{ type: 'title', text: 'Renässansen för JOMO (Joy of Missing Out)', level: 3 },
|
|
102
|
-
{ type: 'paragraph', html: 'Medan FOMO (Fear of Missing Out) dominerade det senaste decenniet, förespråkar digitala hälsoexperter nu <strong>JOMO: Glädjen i att missa saker</strong>. Det handlar inte om isolering, utan om avsiktlighet.' },
|
|
103
|
-
{ type: 'tip', title: 'Formeln för det oemotsägliga alibit', html: '<strong>Det dissocierade subjektet:</strong> Du är aldrig den skyldige. Det är "wifi", "min katt", "universum". Flytta skulden till en extern enhet.<br><strong>Den hyperboliska handlingen:</strong> Situationen måste vara tillräckligt absurd eller teknisk för att ingen ska fråga efter detaljer.<br><strong>Den fysiska blockaden:</strong> Slutresultatet måste vara binärt: antingen går jag eller så stannar jag hemma.' },
|
|
104
|
-
{ type: 'title', text: 'En kort historia om ursäkten', level: 3 },
|
|
105
|
-
{ type: 'list', items: [
|
|
106
|
-
'<strong>Medeltiden:</strong> "Min häst har tappat en sko" (En tidlös klassiker).',
|
|
107
|
-
'<strong>Industriella revolutionen:</strong> "Ångmaskinen blev överhettad".',
|
|
108
|
-
'<strong>Digitala eran:</strong> "Mitt internet lade av mitt i en uppdatering".',
|
|
109
|
-
]},
|
|
110
|
-
{ type: 'proscons', items: [
|
|
111
|
-
{ pro: 'Lindrar omedelbart social press', con: 'Överanvändning urholkar förtroendet' },
|
|
112
|
-
{ pro: 'Skyddar din energi och dina gränser', con: 'Kan skapa skuldkänslor om den används vårdslöst' },
|
|
113
|
-
{ pro: 'Kreativ och humoristisk ton dämpar spänningen', con: 'Inte lämplig för formella eller professionella sammanhang' },
|
|
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 = 'ursaktsgenerator';
|
|
6
|
+
const title = 'Ursaktsgenerator';
|
|
7
|
+
const description = 'Semantisk slumpmaskin för att slippa åtaganden med stil. Generera surrealistiska och oemotsägliga ursäkter omedelbart.';
|
|
8
|
+
|
|
9
|
+
const faq: ExcuseGeneratorLocaleContent['faq'] = [
|
|
10
|
+
{
|
|
11
|
+
question: 'Kan den här generatorn rädda mitt äktenskap?',
|
|
12
|
+
answer: 'Även om vi inte är terapeuter, kan undvikandet av den där middagen med svärföräldrarna genom en rimlig teknisk nödsituation minska spänningen avsevärt. Använd med ansvar.'
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
question: 'Varför sådana surrealistiska fraser?',
|
|
16
|
+
answer: 'Strategin bygger på kognitiv dissonans. Om du säger något tråkigt är det verifierbart. Om du säger något absurt, blockerar överraskningen förmågan till vrede.'
|
|
17
|
+
}
|
|
18
|
+
];
|
|
19
|
+
|
|
20
|
+
const howTo: ExcuseGeneratorLocaleContent['howTo'] = [
|
|
21
|
+
{ name: 'Generera', text: 'Klicka på generera-knappen för att skapa en ny ursäkt.' },
|
|
22
|
+
{ name: 'Kopiera', text: 'Klicka på kopiera-knappen för att föra över ursäkten till ditt urklipp.' }
|
|
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: 'sv',
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
export const content: ExcuseGeneratorLocaleContent = {
|
|
59
|
+
slug,
|
|
60
|
+
title,
|
|
61
|
+
description,
|
|
62
|
+
faqTitle: 'Vanliga frågor',
|
|
63
|
+
ui: {
|
|
64
|
+
title: 'Surrealistisk Ursaktsgenerator',
|
|
65
|
+
description: 'Nästa generations alibi-kalkylator.',
|
|
66
|
+
subjectLabel: 'Subjekt',
|
|
67
|
+
actionLabel: 'Handling',
|
|
68
|
+
victimLabel: 'Offer',
|
|
69
|
+
generateBtn: 'GENERERA URSAKT',
|
|
70
|
+
copyBtn: 'Kopiera denna galenskap',
|
|
71
|
+
copied: 'Kopierad!',
|
|
72
|
+
starts: JSON.stringify([
|
|
73
|
+
"Min katt", "Min mormor", "Presidenten", "En utomjording", "Min granne från 5:e våningen",
|
|
74
|
+
"Wifi", "Mitt horoskop", "En tidsresenär", "Tvättmaskinen", "Mitt kylskåp",
|
|
75
|
+
"Jultomten", "Min skugga", "En ninja", "Veganpolisen", "Siri",
|
|
76
|
+
"Min köttätande växt", "Amazon-budet", "Min onda klon", "En trollkarl", "Godzilla"
|
|
77
|
+
]),
|
|
78
|
+
middles: JSON.stringify([
|
|
79
|
+
"har förklarat krig mot", "har ätit upp", "har kidnappat", "har satt eld på",
|
|
80
|
+
"anordnar en fest i", "har kräkts på", "vägrar lämna",
|
|
81
|
+
"har hackat", "har stulit", "har blivit kär i", "mediterar över",
|
|
82
|
+
"har förtrollat", "protesterar mot", "har grundat en kult i",
|
|
83
|
+
"dansar samba i", "har frammanat en demon i", "har blockerat åtkomst till",
|
|
84
|
+
"har förvandlats till guld", "försöker sälja", "har skrivit en bok om"
|
|
85
|
+
]),
|
|
86
|
+
ends: JSON.stringify([
|
|
87
|
+
"mina hemnycklar.", "min livslust.", "garageporten.",
|
|
88
|
+
"mina favoritbyxor.", "routern i vardagsrummet.", "mina enda skor.",
|
|
89
|
+
"fysikens lagar.", "min värdighet.", "byggnadens hiss.",
|
|
90
|
+
"mitt Netflix-konto.", "min tandborste.", "mina lagfarter.",
|
|
91
|
+
"min samling av pogs.", "bilens handbroms.", "min lust att socialisera.",
|
|
92
|
+
"mitt kaffeförråd.", "toalettlocket.", "TV-fjärrkontrollen.",
|
|
93
|
+
"mina lyckostrumpor.", "den västerländska civilisationen."
|
|
94
|
+
]),
|
|
95
|
+
faqTitle: 'FAQ',
|
|
96
|
+
bibliographyTitle: 'Referenser'
|
|
97
|
+
},
|
|
98
|
+
seo: [
|
|
99
|
+
{ type: 'title', text: 'Den vetenskapliga konsten att skapa den perfekta ursäkten', level: 2 },
|
|
100
|
+
{ type: 'paragraph', html: 'Vi lever i en era av hyperuppkoppling. Din telefon vibrerar, din klocka ger dig notiser, och din sociala agenda ser ut som ett spel Tetris som håller på att förloras. Pressen att säga "ja" till allt har skapat en epidemi av social utmattning.' },
|
|
101
|
+
{ type: 'title', text: 'Renässansen för JOMO (Joy of Missing Out)', level: 3 },
|
|
102
|
+
{ type: 'paragraph', html: 'Medan FOMO (Fear of Missing Out) dominerade det senaste decenniet, förespråkar digitala hälsoexperter nu <strong>JOMO: Glädjen i att missa saker</strong>. Det handlar inte om isolering, utan om avsiktlighet.' },
|
|
103
|
+
{ type: 'tip', title: 'Formeln för det oemotsägliga alibit', html: '<strong>Det dissocierade subjektet:</strong> Du är aldrig den skyldige. Det är "wifi", "min katt", "universum". Flytta skulden till en extern enhet.<br><strong>Den hyperboliska handlingen:</strong> Situationen måste vara tillräckligt absurd eller teknisk för att ingen ska fråga efter detaljer.<br><strong>Den fysiska blockaden:</strong> Slutresultatet måste vara binärt: antingen går jag eller så stannar jag hemma.' },
|
|
104
|
+
{ type: 'title', text: 'En kort historia om ursäkten', level: 3 },
|
|
105
|
+
{ type: 'list', items: [
|
|
106
|
+
'<strong>Medeltiden:</strong> "Min häst har tappat en sko" (En tidlös klassiker).',
|
|
107
|
+
'<strong>Industriella revolutionen:</strong> "Ångmaskinen blev överhettad".',
|
|
108
|
+
'<strong>Digitala eran:</strong> "Mitt internet lade av mitt i en uppdatering".',
|
|
109
|
+
]},
|
|
110
|
+
{ type: 'proscons', items: [
|
|
111
|
+
{ pro: 'Lindrar omedelbart social press', con: 'Överanvändning urholkar förtroendet' },
|
|
112
|
+
{ pro: 'Skyddar din energi och dina gränser', con: 'Kan skapa skuldkänslor om den används vårdslöst' },
|
|
113
|
+
{ pro: 'Kreativ och humoristisk ton dämpar spänningen', con: 'Inte lämplig för formella eller professionella sammanhang' },
|
|
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 = 'bahane-ureteci';
|
|
6
|
-
const title = 'Bahane Üreteci';
|
|
7
|
-
const description = 'Sorumluluklardan şık bir şekilde kurtulmak için anlamsal bir kumar makinesi. Anında gerçeküstü ve reddedilemez bahaneler üretin.';
|
|
8
|
-
|
|
9
|
-
const faq: ExcuseGeneratorLocaleContent['faq'] = [
|
|
10
|
-
{
|
|
11
|
-
question: 'Bu üreteç evliliğimi kurtarabilir mi?',
|
|
12
|
-
answer: 'Terapist olmasak da, kayınvalidenizle o akşam yemeğinden makul bir teknik acil durum bahanesiyle kaçınmak gerginliği önemli ölçüde azaltabilir. Sorumlu bir şekilde kullanın.'
|
|
13
|
-
},
|
|
14
|
-
{
|
|
15
|
-
question: 'Neden bu kadar gerçeküstü cümleler?',
|
|
16
|
-
answer: 'Strateji Bilişsel Çelişki\'ye dayanmaktadır. Sıkıcı bir şey söylerseniz doğrulanabilir. Saçma bir şey söylerseniz, şaşkınlık öfkelenme yetisini engeller.'
|
|
17
|
-
}
|
|
18
|
-
];
|
|
19
|
-
|
|
20
|
-
const howTo: ExcuseGeneratorLocaleContent['howTo'] = [
|
|
21
|
-
{ name: 'Üret', text: 'Yeni bir bahane oluşturmak için üret düğmesine tıklayın.' },
|
|
22
|
-
{ name: 'Kopyala', text: 'Bahane panonuza kopyalamak için kopyala düğmesine tıklayın.' }
|
|
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: 'tr',
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
export const content: ExcuseGeneratorLocaleContent = {
|
|
59
|
-
slug,
|
|
60
|
-
title,
|
|
61
|
-
description,
|
|
62
|
-
faqTitle: 'Sıkça Sorulan Sorular',
|
|
63
|
-
ui: {
|
|
64
|
-
title: 'Gerçeküstü Bahane Üreteci',
|
|
65
|
-
description: 'Yeni nesil alibi hesaplayıcı.',
|
|
66
|
-
subjectLabel: 'Özne',
|
|
67
|
-
actionLabel: 'Eylem',
|
|
68
|
-
victimLabel: 'Kurban',
|
|
69
|
-
generateBtn: 'BAHANE ÜRET',
|
|
70
|
-
copyBtn: 'Bu çılgınlığı kopyala',
|
|
71
|
-
copied: 'Kopyalandı!',
|
|
72
|
-
starts: JSON.stringify([
|
|
73
|
-
"Kedim", "Büyükannem", "Başkan", "Bir uzaylı", "5. kattaki komşum",
|
|
74
|
-
"Wifi", "Burcum", "Bir zaman yolcusu", "Çamaşır makinesi", "Buzdolabım",
|
|
75
|
-
"Noel ruhu", "Gölgem", "Bir ninja", "Vegan polisi", "Siri",
|
|
76
|
-
"Etobur bitkim", "Amazon kuryesi", "Kötü klonum", "Bir büyücü", "Godzilla"
|
|
77
|
-
]),
|
|
78
|
-
middles: JSON.stringify([
|
|
79
|
-
"savaş ilan etti", "yedi", "kaçırdı", "ateşe verdi",
|
|
80
|
-
"şurada bir parti düzenliyor:", "üzerine kustu", "çıkmayı reddediyor:",
|
|
81
|
-
"hackledi", "çaldı", "şuna aşık oldu:", "üzerine meditasyon yapıyor:",
|
|
82
|
-
"üzerine büyü yaptı", "şunu protesto ediyor:", "şurada bir tarikat kurdu:",
|
|
83
|
-
"samba yapıyor:", "bir iblis çağırdı:", "erişimi engelledi:",
|
|
84
|
-
"altına dönüştü", "satmaya çalışıyor", "hakkında bir kitap yazdı:"
|
|
85
|
-
]),
|
|
86
|
-
ends: JSON.stringify([
|
|
87
|
-
"evimin anahtarlarını.", "yaşama sevincimi.", "garaj kapısını.",
|
|
88
|
-
"en sevdiğim pantolonumu.", "oturma odasındaki yönlendiriciyi.", "tek ayakkabımı.",
|
|
89
|
-
"fizik yasalarını.", "onurumu.", "binanın asansörünü.",
|
|
90
|
-
"Netflix hesabımı.", "diş fırçamı.", "evimin tapularını.",
|
|
91
|
-
"taso koleksiyonumu.", "arabanın el frenini.", "sosyalleşme isteğimi.",
|
|
92
|
-
"kahve stoklarımı.", "klozet kapağını.", "TV kumandasını.",
|
|
93
|
-
"şanslı çoraplarımı.", "Batı medeniyetini."
|
|
94
|
-
]),
|
|
95
|
-
faqTitle: 'FAQ',
|
|
96
|
-
bibliographyTitle: 'Referanslar'
|
|
97
|
-
},
|
|
98
|
-
seo: [
|
|
99
|
-
{ type: 'title', text: 'Mükemmel Bahanenin Bilimsel Sanatı', level: 2 },
|
|
100
|
-
{ type: 'paragraph', html: 'Hiper-bağlantılılık çağında yaşıyoruz. Telefonunuz titriyor, saatiniz bildirim gönderiyor ve sosyal ajandanız kaybedilmek üzere olan bir Tetris oyunu gibi görünüyor. Her şeye "evet" deme baskısı bir sosyal tükenmişlik salgını yarattı.' },
|
|
101
|
-
{ type: 'title', text: 'JOMO\'nun (Joy of Missing Out) Rönesansı', level: 3 },
|
|
102
|
-
{ type: 'paragraph', html: 'Geçtiğimiz on yıla FOMO (Kaçırma Korkusu) hakim olsa da, dijital sağlık uzmanları artık <strong>JOMO: Kaçırmanın Keyfi</strong>\'ni savunuyor. Bu izolasyonla ilgili değil, niyetlilikle ilgili.' },
|
|
103
|
-
{ type: 'tip', title: 'Reddedilemez Alibi Formülü', html: '<strong>Ayrışmış Özne:</strong> Suçlu asla siz değilsiniz. Bu "wifi", "kedim", "evren". Suçu dış bir varlığa kaydırın.<br><strong>Hiperbolik Eylem:</strong> Durum, kimsenin ayrıntı sormayacağı kadar saçma veya teknik olmalıdır.<br><strong>Fiziksel Blok:</strong> Nihai sonuç ikili olmalıdır: ya giderim ya da evde kalırım.' },
|
|
104
|
-
{ type: 'title', text: 'Bahanenin Kısa Tarihi', level: 3 },
|
|
105
|
-
{ type: 'list', items: [
|
|
106
|
-
'<strong>Orta Çağ:</strong> "Atım nalını kaybetti" (Zamansız bir klasik).',
|
|
107
|
-
'<strong>Sanayi Devrimi:</strong> "Buhar makinesi aşırı ısındı".',
|
|
108
|
-
'<strong>Dijital Çağ:</strong> "İnternetim tam bir güncellemenin ortasında koptu".',
|
|
109
|
-
]},
|
|
110
|
-
{ type: 'proscons', items: [
|
|
111
|
-
{ pro: 'Sosyal baskıyı anında hafifletir', con: 'Aşırı kullanım güveni sarsar' },
|
|
112
|
-
{ pro: 'Enerjinizi ve sınırlarınızı korur', con: 'Dikkatsizce kullanılırsa suçluluk duygusu yaratabilir' },
|
|
113
|
-
{ pro: 'Yaratıcı ve esprili ton gerginliği dağıtır', con: 'Resmi veya profesyonel bağlamlar için uygun değildir' },
|
|
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 = 'bahane-ureteci';
|
|
6
|
+
const title = 'Bahane Üreteci';
|
|
7
|
+
const description = 'Sorumluluklardan şık bir şekilde kurtulmak için anlamsal bir kumar makinesi. Anında gerçeküstü ve reddedilemez bahaneler üretin.';
|
|
8
|
+
|
|
9
|
+
const faq: ExcuseGeneratorLocaleContent['faq'] = [
|
|
10
|
+
{
|
|
11
|
+
question: 'Bu üreteç evliliğimi kurtarabilir mi?',
|
|
12
|
+
answer: 'Terapist olmasak da, kayınvalidenizle o akşam yemeğinden makul bir teknik acil durum bahanesiyle kaçınmak gerginliği önemli ölçüde azaltabilir. Sorumlu bir şekilde kullanın.'
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
question: 'Neden bu kadar gerçeküstü cümleler?',
|
|
16
|
+
answer: 'Strateji Bilişsel Çelişki\'ye dayanmaktadır. Sıkıcı bir şey söylerseniz doğrulanabilir. Saçma bir şey söylerseniz, şaşkınlık öfkelenme yetisini engeller.'
|
|
17
|
+
}
|
|
18
|
+
];
|
|
19
|
+
|
|
20
|
+
const howTo: ExcuseGeneratorLocaleContent['howTo'] = [
|
|
21
|
+
{ name: 'Üret', text: 'Yeni bir bahane oluşturmak için üret düğmesine tıklayın.' },
|
|
22
|
+
{ name: 'Kopyala', text: 'Bahane panonuza kopyalamak için kopyala düğmesine tıklayın.' }
|
|
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: 'tr',
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
export const content: ExcuseGeneratorLocaleContent = {
|
|
59
|
+
slug,
|
|
60
|
+
title,
|
|
61
|
+
description,
|
|
62
|
+
faqTitle: 'Sıkça Sorulan Sorular',
|
|
63
|
+
ui: {
|
|
64
|
+
title: 'Gerçeküstü Bahane Üreteci',
|
|
65
|
+
description: 'Yeni nesil alibi hesaplayıcı.',
|
|
66
|
+
subjectLabel: 'Özne',
|
|
67
|
+
actionLabel: 'Eylem',
|
|
68
|
+
victimLabel: 'Kurban',
|
|
69
|
+
generateBtn: 'BAHANE ÜRET',
|
|
70
|
+
copyBtn: 'Bu çılgınlığı kopyala',
|
|
71
|
+
copied: 'Kopyalandı!',
|
|
72
|
+
starts: JSON.stringify([
|
|
73
|
+
"Kedim", "Büyükannem", "Başkan", "Bir uzaylı", "5. kattaki komşum",
|
|
74
|
+
"Wifi", "Burcum", "Bir zaman yolcusu", "Çamaşır makinesi", "Buzdolabım",
|
|
75
|
+
"Noel ruhu", "Gölgem", "Bir ninja", "Vegan polisi", "Siri",
|
|
76
|
+
"Etobur bitkim", "Amazon kuryesi", "Kötü klonum", "Bir büyücü", "Godzilla"
|
|
77
|
+
]),
|
|
78
|
+
middles: JSON.stringify([
|
|
79
|
+
"savaş ilan etti", "yedi", "kaçırdı", "ateşe verdi",
|
|
80
|
+
"şurada bir parti düzenliyor:", "üzerine kustu", "çıkmayı reddediyor:",
|
|
81
|
+
"hackledi", "çaldı", "şuna aşık oldu:", "üzerine meditasyon yapıyor:",
|
|
82
|
+
"üzerine büyü yaptı", "şunu protesto ediyor:", "şurada bir tarikat kurdu:",
|
|
83
|
+
"samba yapıyor:", "bir iblis çağırdı:", "erişimi engelledi:",
|
|
84
|
+
"altına dönüştü", "satmaya çalışıyor", "hakkında bir kitap yazdı:"
|
|
85
|
+
]),
|
|
86
|
+
ends: JSON.stringify([
|
|
87
|
+
"evimin anahtarlarını.", "yaşama sevincimi.", "garaj kapısını.",
|
|
88
|
+
"en sevdiğim pantolonumu.", "oturma odasındaki yönlendiriciyi.", "tek ayakkabımı.",
|
|
89
|
+
"fizik yasalarını.", "onurumu.", "binanın asansörünü.",
|
|
90
|
+
"Netflix hesabımı.", "diş fırçamı.", "evimin tapularını.",
|
|
91
|
+
"taso koleksiyonumu.", "arabanın el frenini.", "sosyalleşme isteğimi.",
|
|
92
|
+
"kahve stoklarımı.", "klozet kapağını.", "TV kumandasını.",
|
|
93
|
+
"şanslı çoraplarımı.", "Batı medeniyetini."
|
|
94
|
+
]),
|
|
95
|
+
faqTitle: 'FAQ',
|
|
96
|
+
bibliographyTitle: 'Referanslar'
|
|
97
|
+
},
|
|
98
|
+
seo: [
|
|
99
|
+
{ type: 'title', text: 'Mükemmel Bahanenin Bilimsel Sanatı', level: 2 },
|
|
100
|
+
{ type: 'paragraph', html: 'Hiper-bağlantılılık çağında yaşıyoruz. Telefonunuz titriyor, saatiniz bildirim gönderiyor ve sosyal ajandanız kaybedilmek üzere olan bir Tetris oyunu gibi görünüyor. Her şeye "evet" deme baskısı bir sosyal tükenmişlik salgını yarattı.' },
|
|
101
|
+
{ type: 'title', text: 'JOMO\'nun (Joy of Missing Out) Rönesansı', level: 3 },
|
|
102
|
+
{ type: 'paragraph', html: 'Geçtiğimiz on yıla FOMO (Kaçırma Korkusu) hakim olsa da, dijital sağlık uzmanları artık <strong>JOMO: Kaçırmanın Keyfi</strong>\'ni savunuyor. Bu izolasyonla ilgili değil, niyetlilikle ilgili.' },
|
|
103
|
+
{ type: 'tip', title: 'Reddedilemez Alibi Formülü', html: '<strong>Ayrışmış Özne:</strong> Suçlu asla siz değilsiniz. Bu "wifi", "kedim", "evren". Suçu dış bir varlığa kaydırın.<br><strong>Hiperbolik Eylem:</strong> Durum, kimsenin ayrıntı sormayacağı kadar saçma veya teknik olmalıdır.<br><strong>Fiziksel Blok:</strong> Nihai sonuç ikili olmalıdır: ya giderim ya da evde kalırım.' },
|
|
104
|
+
{ type: 'title', text: 'Bahanenin Kısa Tarihi', level: 3 },
|
|
105
|
+
{ type: 'list', items: [
|
|
106
|
+
'<strong>Orta Çağ:</strong> "Atım nalını kaybetti" (Zamansız bir klasik).',
|
|
107
|
+
'<strong>Sanayi Devrimi:</strong> "Buhar makinesi aşırı ısındı".',
|
|
108
|
+
'<strong>Dijital Çağ:</strong> "İnternetim tam bir güncellemenin ortasında koptu".',
|
|
109
|
+
]},
|
|
110
|
+
{ type: 'proscons', items: [
|
|
111
|
+
{ pro: 'Sosyal baskıyı anında hafifletir', con: 'Aşırı kullanım güveni sarsar' },
|
|
112
|
+
{ pro: 'Enerjinizi ve sınırlarınızı korur', con: 'Dikkatsizce kullanılırsa suçluluk duygusu yaratabilir' },
|
|
113
|
+
{ pro: 'Yaratıcı ve esprili ton gerginliği dağıtır', con: 'Resmi veya profesyonel bağlamlar için uygun değildir' },
|
|
114
|
+
]},
|
|
115
|
+
],
|
|
116
|
+
faq,
|
|
117
|
+
bibliography,
|
|
118
|
+
howTo,
|
|
119
|
+
schemas: [faqSchema as any, howToSchema as any, appSchema],
|
|
120
|
+
};
|