@jjlmoya/utils-creative 1.6.0 → 1.8.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 +63 -62
- package/src/category/i18n/de.ts +9 -0
- package/src/category/i18n/id.ts +9 -0
- package/src/category/i18n/it.ts +9 -0
- package/src/category/i18n/ja.ts +9 -0
- package/src/category/i18n/ko.ts +9 -0
- package/src/category/i18n/nl.ts +9 -0
- package/src/category/i18n/pl.ts +9 -0
- package/src/category/i18n/pt.ts +9 -0
- package/src/category/i18n/ru.ts +9 -0
- package/src/category/i18n/sv.ts +9 -0
- package/src/category/i18n/tr.ts +9 -0
- package/src/category/i18n/zh.ts +9 -0
- package/src/category/index.ts +12 -0
- package/src/tests/faq_count.test.ts +1 -1
- package/src/tests/i18n_coverage.test.ts +36 -0
- package/src/tests/locale_completeness.test.ts +2 -2
- package/src/tests/schemas_fulfillment.test.ts +23 -0
- package/src/tests/title_quality.test.ts +55 -0
- package/src/tests/tool_validation.test.ts +2 -2
- package/src/tool/bead-pattern-generator/i18n/de.ts +115 -0
- package/src/tool/bead-pattern-generator/i18n/en.ts +59 -17
- package/src/tool/bead-pattern-generator/i18n/es.ts +59 -17
- package/src/tool/bead-pattern-generator/i18n/fr.ts +59 -17
- package/src/tool/bead-pattern-generator/i18n/id.ts +115 -0
- package/src/tool/bead-pattern-generator/i18n/it.ts +115 -0
- package/src/tool/bead-pattern-generator/i18n/ja.ts +115 -0
- package/src/tool/bead-pattern-generator/i18n/ko.ts +115 -0
- package/src/tool/bead-pattern-generator/i18n/nl.ts +115 -0
- package/src/tool/bead-pattern-generator/i18n/pl.ts +115 -0
- package/src/tool/bead-pattern-generator/i18n/pt.ts +115 -0
- package/src/tool/bead-pattern-generator/i18n/ru.ts +115 -0
- package/src/tool/bead-pattern-generator/i18n/sv.ts +115 -0
- package/src/tool/bead-pattern-generator/i18n/tr.ts +115 -0
- package/src/tool/bead-pattern-generator/i18n/zh.ts +115 -0
- package/src/tool/bead-pattern-generator/index.ts +12 -0
- package/src/tool/dice-roller/i18n/de.ts +138 -0
- package/src/tool/dice-roller/i18n/en.ts +74 -32
- package/src/tool/dice-roller/i18n/es.ts +74 -32
- package/src/tool/dice-roller/i18n/fr.ts +74 -32
- package/src/tool/dice-roller/i18n/id.ts +138 -0
- package/src/tool/dice-roller/i18n/it.ts +138 -0
- package/src/tool/dice-roller/i18n/ja.ts +138 -0
- package/src/tool/dice-roller/i18n/ko.ts +138 -0
- package/src/tool/dice-roller/i18n/nl.ts +138 -0
- package/src/tool/dice-roller/i18n/pl.ts +138 -0
- package/src/tool/dice-roller/i18n/pt.ts +138 -0
- package/src/tool/dice-roller/i18n/ru.ts +138 -0
- package/src/tool/dice-roller/i18n/sv.ts +138 -0
- package/src/tool/dice-roller/i18n/tr.ts +138 -0
- package/src/tool/dice-roller/i18n/zh.ts +138 -0
- package/src/tool/dice-roller/index.ts +12 -0
- package/src/tool/excuse-generator/i18n/de.ts +122 -0
- package/src/tool/excuse-generator/i18n/en.ts +60 -18
- package/src/tool/excuse-generator/i18n/es.ts +60 -18
- package/src/tool/excuse-generator/i18n/fr.ts +60 -18
- package/src/tool/excuse-generator/i18n/id.ts +122 -0
- package/src/tool/excuse-generator/i18n/it.ts +122 -0
- package/src/tool/excuse-generator/i18n/ja.ts +122 -0
- package/src/tool/excuse-generator/i18n/ko.ts +122 -0
- package/src/tool/excuse-generator/i18n/nl.ts +122 -0
- package/src/tool/excuse-generator/i18n/pl.ts +122 -0
- package/src/tool/excuse-generator/i18n/pt.ts +122 -0
- package/src/tool/excuse-generator/i18n/ru.ts +122 -0
- package/src/tool/excuse-generator/i18n/sv.ts +122 -0
- package/src/tool/excuse-generator/i18n/tr.ts +122 -0
- package/src/tool/excuse-generator/i18n/zh.ts +122 -0
- package/src/tool/excuse-generator/index.ts +12 -0
- package/src/tool/fortune-cookie/i18n/de.ts +127 -0
- package/src/tool/fortune-cookie/i18n/en.ts +60 -18
- package/src/tool/fortune-cookie/i18n/es.ts +60 -18
- package/src/tool/fortune-cookie/i18n/fr.ts +60 -18
- package/src/tool/fortune-cookie/i18n/id.ts +127 -0
- package/src/tool/fortune-cookie/i18n/it.ts +127 -0
- package/src/tool/fortune-cookie/i18n/ja.ts +127 -0
- package/src/tool/fortune-cookie/i18n/ko.ts +127 -0
- package/src/tool/fortune-cookie/i18n/nl.ts +127 -0
- package/src/tool/fortune-cookie/i18n/pl.ts +127 -0
- package/src/tool/fortune-cookie/i18n/pt.ts +127 -0
- package/src/tool/fortune-cookie/i18n/ru.ts +127 -0
- package/src/tool/fortune-cookie/i18n/sv.ts +127 -0
- package/src/tool/fortune-cookie/i18n/tr.ts +127 -0
- package/src/tool/fortune-cookie/i18n/zh.ts +127 -0
- package/src/tool/fortune-cookie/index.ts +12 -0
- package/src/tool/synesthesia-painter/i18n/de.ts +122 -0
- package/src/tool/synesthesia-painter/i18n/en.ts +74 -32
- package/src/tool/synesthesia-painter/i18n/es.ts +74 -32
- package/src/tool/synesthesia-painter/i18n/fr.ts +75 -33
- package/src/tool/synesthesia-painter/i18n/id.ts +122 -0
- package/src/tool/synesthesia-painter/i18n/it.ts +122 -0
- package/src/tool/synesthesia-painter/i18n/ja.ts +122 -0
- package/src/tool/synesthesia-painter/i18n/ko.ts +122 -0
- package/src/tool/synesthesia-painter/i18n/nl.ts +122 -0
- package/src/tool/synesthesia-painter/i18n/pl.ts +122 -0
- package/src/tool/synesthesia-painter/i18n/pt.ts +122 -0
- package/src/tool/synesthesia-painter/i18n/ru.ts +122 -0
- package/src/tool/synesthesia-painter/i18n/sv.ts +122 -0
- package/src/tool/synesthesia-painter/i18n/tr.ts +122 -0
- package/src/tool/synesthesia-painter/i18n/zh.ts +122 -0
- package/src/tool/synesthesia-painter/index.ts +12 -0
- package/src/tool/zalgo-generator/i18n/de.ts +113 -0
- package/src/tool/zalgo-generator/i18n/en.ts +58 -16
- package/src/tool/zalgo-generator/i18n/es.ts +58 -16
- package/src/tool/zalgo-generator/i18n/fr.ts +58 -16
- package/src/tool/zalgo-generator/i18n/id.ts +113 -0
- package/src/tool/zalgo-generator/i18n/it.ts +113 -0
- package/src/tool/zalgo-generator/i18n/ja.ts +113 -0
- package/src/tool/zalgo-generator/i18n/ko.ts +113 -0
- package/src/tool/zalgo-generator/i18n/nl.ts +113 -0
- package/src/tool/zalgo-generator/i18n/pl.ts +113 -0
- package/src/tool/zalgo-generator/i18n/pt.ts +113 -0
- package/src/tool/zalgo-generator/i18n/ru.ts +113 -0
- package/src/tool/zalgo-generator/i18n/sv.ts +113 -0
- package/src/tool/zalgo-generator/i18n/tr.ts +113 -0
- package/src/tool/zalgo-generator/i18n/zh.ts +113 -0
- package/src/tool/zalgo-generator/index.ts +12 -0
- package/src/tools.ts +14 -1
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ExcuseGeneratorLocaleContent } from '../index';
|
|
3
|
+
|
|
4
|
+
const slug = 'excuse-generator-ko';
|
|
5
|
+
const title = '핑계 생성기';
|
|
6
|
+
const description = '의무감에서 멋지게 벗어나기 위한 시맨틱 도박기입니다. 초현실적이고 반박할 수 없는 핑계를 즉시 생성하세요.';
|
|
7
|
+
|
|
8
|
+
const faq: ExcuseGeneratorLocaleContent['faq'] = [
|
|
9
|
+
{
|
|
10
|
+
question: '이 생성기가 제 결혼 생활을 구할 수 있을까요?',
|
|
11
|
+
answer: '저희가 전문 상담가는 아니지만, 그럴듯한 기술적 비상사태를 핑계로 처가/시댁 식구들과의 식사 자리를 피하는 것은 긴장을 완화하는 데 큰 도움이 될 수 있습니다. 책임감 있게 사용하세요.'
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
question: '왜 이렇게 초현실적인 문구들인가요?',
|
|
15
|
+
answer: '이 전략은 인지 부조화에 기초합니다. 지루한 핑계는 검증 가능하지만, 황당한 핑계는 상대방을 당황하게 만들어 화를 낼 타이밍을 놓치게 만듭니다.'
|
|
16
|
+
}
|
|
17
|
+
];
|
|
18
|
+
|
|
19
|
+
const howTo: ExcuseGeneratorLocaleContent['howTo'] = [
|
|
20
|
+
{ name: '생성', text: '생성 버튼을 클릭하여 새로운 핑계를 만드세요.' },
|
|
21
|
+
{ name: '복사', text: '복사 버튼을 클릭하여 생성된 핑계를 클립보드에 저장하세요.' }
|
|
22
|
+
];
|
|
23
|
+
|
|
24
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
25
|
+
'@context': 'https://schema.org',
|
|
26
|
+
'@type': 'FAQPage',
|
|
27
|
+
mainEntity: faq.map((item) => ({
|
|
28
|
+
'@type': 'Question',
|
|
29
|
+
name: item.question,
|
|
30
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
31
|
+
})),
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const howToSchema: WithContext<HowTo> = {
|
|
35
|
+
'@context': 'https://schema.org',
|
|
36
|
+
'@type': 'HowTo',
|
|
37
|
+
name: title,
|
|
38
|
+
description,
|
|
39
|
+
step: howTo.map((step) => ({
|
|
40
|
+
'@type': 'HowToStep',
|
|
41
|
+
name: step.name,
|
|
42
|
+
text: step.text,
|
|
43
|
+
})),
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
47
|
+
'@context': 'https://schema.org',
|
|
48
|
+
'@type': 'SoftwareApplication',
|
|
49
|
+
name: title,
|
|
50
|
+
description,
|
|
51
|
+
applicationCategory: 'UtilitiesApplication',
|
|
52
|
+
operatingSystem: 'Web',
|
|
53
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
54
|
+
inLanguage: 'ko',
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
export const content: ExcuseGeneratorLocaleContent = {
|
|
58
|
+
slug,
|
|
59
|
+
title,
|
|
60
|
+
description,
|
|
61
|
+
faqTitle: '자주 묻는 질문',
|
|
62
|
+
bibliographyTitle: '여가 참고 문헌',
|
|
63
|
+
ui: {
|
|
64
|
+
title: '초현실적 핑계 생성기',
|
|
65
|
+
description: '차세대 알리바이 계산기.',
|
|
66
|
+
subjectLabel: '주어',
|
|
67
|
+
actionLabel: '행동',
|
|
68
|
+
victimLabel: '대상',
|
|
69
|
+
generateBtn: '핑계 생성하기',
|
|
70
|
+
copyBtn: '이 광기를 복사하기',
|
|
71
|
+
copied: '복사 완료!',
|
|
72
|
+
starts: JSON.stringify([
|
|
73
|
+
"우리 집 고양이가", "할머니께서", "대통령이", "외계인이", "5층 옆집 이웃이",
|
|
74
|
+
"와이파이가", "내 별자리가", "시간 여행자가", "세탁기가", "우리 집 냉장고가",
|
|
75
|
+
"크리스마스의 유령이", "내 그림자가", "닌자가", "채식 경찰이", "시리가",
|
|
76
|
+
"내 식충식물이", "아마존 배달원이", "나의 사악한 클론이", "마법사가", "고질라가"
|
|
77
|
+
]),
|
|
78
|
+
middles: JSON.stringify([
|
|
79
|
+
"에게 선전포고를 해서", "를 먹어 치워서", "를 납치해서", "에 불을 질러서",
|
|
80
|
+
"에서 파티를 열고 있어서", "에 구토를 해서", "에서 나가기를 거부해서",
|
|
81
|
+
"를 해킹해서", "를 훔쳐 가서", "와 사랑에 빠져서", "에 대해 명상 중이라서",
|
|
82
|
+
"에게 주문을 걸어서", "에 반대하는 시위를 해서", "에 사이비 종교를 세워서",
|
|
83
|
+
"에서 삼바 춤을 추고 있어서", "에서 악마를 소환해서", "의 접속을 차단해서",
|
|
84
|
+
"가 황금으로 변해버려서", "를 팔려고 시도 중이라서", "에 대한 책을 쓰고 있어서"
|
|
85
|
+
]),
|
|
86
|
+
ends: JSON.stringify([
|
|
87
|
+
"집 열쇠를 찾을 수 없습니다.", "삶의 의욕을 잃었습니다.", "차고 문이 고장 났습니다.",
|
|
88
|
+
"가장 아끼는 바지가 찢어졌습니다.", "거실 공유기가 폭발했습니다.", "신발 한 짝이 사라졌습니다.",
|
|
89
|
+
"물리학의 법칙을 거스르고 있습니다.", "존엄성을 잃었습니다.", "건물 엘리베이터가 멈췄습니다.",
|
|
90
|
+
"넷플릭스 계정이 도용당했습니다.", "칫솔이 가출했습니다.", "집 문서가 타버렸습니다.",
|
|
91
|
+
"딱지 컬렉션이 엉망이 되었습니다.", "자동차 핸드브레이크가 풀렸습니다.", "사회적 욕구가 소진되었습니다.",
|
|
92
|
+
"커피 원두가 떨어졌습니다.", "변기 뚜껑이 열리지 않습니다.", "TV 리모컨이 사라졌습니다.",
|
|
93
|
+
"행운의 양말을 잃어버렸습니다.", "서구 문명이 붕괴 직전입니다."
|
|
94
|
+
]),
|
|
95
|
+
faqTitle: 'FAQ',
|
|
96
|
+
bibliographyTitle: '참고 문헌'
|
|
97
|
+
},
|
|
98
|
+
seo: [
|
|
99
|
+
{ type: 'title', text: '완벽한 핑계를 위한 과학적 예술', level: 2 },
|
|
100
|
+
{ type: 'paragraph', html: '우리는 초연결 시대에 살고 있습니다. 휴대폰은 진동하고, 시계는 알림을 보내며, 사교 일정은 마치 지기 직전의 테트리스 게임처럼 보입니다. 모든 것에 "예"라고 답해야 한다는 압박감은 사회적 소진이라는 유행병을 만들어냈습니다.' },
|
|
101
|
+
{ type: 'title', text: 'JOMO(Joy of Missing Out)의 르네상스', level: 3 },
|
|
102
|
+
{ type: 'paragraph', html: '지난 10년 동안 FOMO(소외되는 것에 대한 두려움)가 지배적이었다면, 이제 디지털 웰빙 전문가들은 <strong>JOMO: 놓치는 것에 대한 즐거움</strong>을 옹호합니다. 이것은 고립이 아니라 의도적인 선택에 관한 것입니다.' },
|
|
103
|
+
{ type: 'tip', title: '반박할 수 없는 알리바이를 위한 공식', html: '<strong>주어 분리하기:</strong> 당신은 결코 가해자가 아닙니다. "와이파이", "우리 집 고양이", "우주" 등 외부 존재에게 책임을 전가하세요.<br><strong>과장된 행동:</strong> 상황은 아무도 세부 사항을 묻고 싶지 않을 만큼 황당하거나 기술적이어야 합니다.<br><strong>물리적 차단:</strong> 최종 결과는 이분법적이어야 합니다. 가거나, 아니면 집에 남거나.' },
|
|
104
|
+
{ type: 'title', text: '핑계의 짧은 역사', level: 3 },
|
|
105
|
+
{ type: 'list', items: [
|
|
106
|
+
'<strong>중세 시대:</strong> "내 말의 편자가 빠졌다" (시대를 초월한 고전).',
|
|
107
|
+
'<strong>산업 혁명:</strong> "증기 기관이 과열되었다".',
|
|
108
|
+
'<strong>디지털 시대:</strong> "업데이트 도중에 인터넷이 끊겼다".'
|
|
109
|
+
]},
|
|
110
|
+
{ type: 'proscons', items: [
|
|
111
|
+
{ pro: '사회적 압박으로부터 즉각적인 해방', con: '과도한 사용은 신뢰를 떨어뜨림' },
|
|
112
|
+
{ pro: '자신의 에너지와 경계 보호', con: '부주의하게 사용하면 죄책감이 생길 수 있음' },
|
|
113
|
+
{ pro: '창의적이고 유머러스한 어조로 긴장 완화', con: '공식적이거나 전문적인 상황에는 부적합함' }
|
|
114
|
+
]},
|
|
115
|
+
],
|
|
116
|
+
faq,
|
|
117
|
+
bibliography: [
|
|
118
|
+
{ name: '미루는 사람의 선언문', url: 'https://example.com/manifesto' }
|
|
119
|
+
],
|
|
120
|
+
howTo,
|
|
121
|
+
schemas: [faqSchema as any, howToSchema as any, appSchema],
|
|
122
|
+
};
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ExcuseGeneratorLocaleContent } from '../index';
|
|
3
|
+
|
|
4
|
+
const slug = 'smoezen-generator';
|
|
5
|
+
const title = 'Smoezen Generator';
|
|
6
|
+
const description = 'Semantische gokmachine om stijlvol van je verplichtingen af te komen. Genereer direct surreële en onweerlegbare smoezen.';
|
|
7
|
+
|
|
8
|
+
const faq: ExcuseGeneratorLocaleContent['faq'] = [
|
|
9
|
+
{
|
|
10
|
+
question: 'Kan deze generator mijn huwelijk redden?',
|
|
11
|
+
answer: 'Hoewel we geen therapeuten zijn, kan het vermijden van dat etentje met je schoonfamilie door een plausibele technische noodsituatie de spanning aanzienlijk verminderen. Gebruik met mate.'
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
question: 'Waarom zulke surreële zinnen?',
|
|
15
|
+
answer: 'De strategie is gebaseerd op cognitieve dissonantie. Als je iets saais zegt, is het controleerbaar. Als je iets absurds zegt, blokkeert de verrassing het vermogen om boos te worden.'
|
|
16
|
+
}
|
|
17
|
+
];
|
|
18
|
+
|
|
19
|
+
const howTo: ExcuseGeneratorLocaleContent['howTo'] = [
|
|
20
|
+
{ name: 'Genereer', text: 'Klik op de genereerknop om een nieuwe smoes te maken.' },
|
|
21
|
+
{ name: 'Kopieer', text: 'Klik op de kopieerknop om de smoes naar je klembord te kopiëren.' }
|
|
22
|
+
];
|
|
23
|
+
|
|
24
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
25
|
+
'@context': 'https://schema.org',
|
|
26
|
+
'@type': 'FAQPage',
|
|
27
|
+
mainEntity: faq.map((item) => ({
|
|
28
|
+
'@type': 'Question',
|
|
29
|
+
name: item.question,
|
|
30
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
31
|
+
})),
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const howToSchema: WithContext<HowTo> = {
|
|
35
|
+
'@context': 'https://schema.org',
|
|
36
|
+
'@type': 'HowTo',
|
|
37
|
+
name: title,
|
|
38
|
+
description,
|
|
39
|
+
step: howTo.map((step) => ({
|
|
40
|
+
'@type': 'HowToStep',
|
|
41
|
+
name: step.name,
|
|
42
|
+
text: step.text,
|
|
43
|
+
})),
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
47
|
+
'@context': 'https://schema.org',
|
|
48
|
+
'@type': 'SoftwareApplication',
|
|
49
|
+
name: title,
|
|
50
|
+
description,
|
|
51
|
+
applicationCategory: 'UtilitiesApplication',
|
|
52
|
+
operatingSystem: 'Web',
|
|
53
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
54
|
+
inLanguage: 'nl',
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
export const content: ExcuseGeneratorLocaleContent = {
|
|
58
|
+
slug,
|
|
59
|
+
title,
|
|
60
|
+
description,
|
|
61
|
+
faqTitle: 'Veelgestelde Vragen',
|
|
62
|
+
bibliographyTitle: 'Vrijetijdsbibliografie',
|
|
63
|
+
ui: {
|
|
64
|
+
title: 'Surreële Smoezen Generator',
|
|
65
|
+
description: 'De alibi-calculator van de volgende generatie.',
|
|
66
|
+
subjectLabel: 'Onderwerp',
|
|
67
|
+
actionLabel: 'Actie',
|
|
68
|
+
victimLabel: 'Slachtoffer',
|
|
69
|
+
generateBtn: 'GENEREER SMOES',
|
|
70
|
+
copyBtn: 'Kopieer deze waanzin',
|
|
71
|
+
copied: 'Gekopieerd!',
|
|
72
|
+
starts: JSON.stringify([
|
|
73
|
+
"Mijn kat", "Mijn grootmoeder", "De president", "Een alien", "Mijn buurman van de 5e verdieping",
|
|
74
|
+
"De wifi", "Mijn horoscoop", "Een tijdreiziger", "De wasmachine", "Mijn koelkast",
|
|
75
|
+
"De geest van Kerstmis", "Mijn schaduw", "Een ninja", "De veganistische politie", "Siri",
|
|
76
|
+
"Mijn vleesetende plant", "De Amazon-bezorger", "Mijn boosaardige kloon", "Een tovenaar", "Godzilla"
|
|
77
|
+
]),
|
|
78
|
+
middles: JSON.stringify([
|
|
79
|
+
"heeft de oorlog verklaard aan", "heeft gegeten", "heeft ontvoerd", "heeft in brand gestoken",
|
|
80
|
+
"organiseert een feest in", "heeft overgegeven op", "weigert te vertrekken uit",
|
|
81
|
+
"heeft gehackt", "heeft gestolen", "is verliefd geworden op", "mediteert over",
|
|
82
|
+
"heeft een spreuk uitgesproken over", "protesteert tegen", "heeft een sekte opgericht in",
|
|
83
|
+
"danst samba in", "heeft een demon opgeroepen in", "heeft de toegang geblokkeerd tot",
|
|
84
|
+
"is in goud veranderd", "probeert te verkopen", "heeft een boek geschreven over"
|
|
85
|
+
]),
|
|
86
|
+
ends: JSON.stringify([
|
|
87
|
+
"mijn huissleutels.", "mijn wil om te leven.", "de garagedeur.",
|
|
88
|
+
"mijn lievelingsbroek.", "de router in de woonkamer.", "mijn enige paar schoenen.",
|
|
89
|
+
"de wetten van de fysica.", "mijn waardigheid.", "de lift van het gebouw.",
|
|
90
|
+
"mijn Netflix-account.", "mijn tandenborstel.", "mijn eigendomsbewijzen.",
|
|
91
|
+
"mijn verzameling pogs.", "de handrem van de auto.", "mijn verlangen om te socialiseren.",
|
|
92
|
+
"mijn koffievoorraad.", "de toiletbril.", "de afstandsbediening van de tv.",
|
|
93
|
+
"mijn gelukssokken.", "de westerse beschaving."
|
|
94
|
+
]),
|
|
95
|
+
faqTitle: 'FAQ',
|
|
96
|
+
bibliographyTitle: 'Referenties'
|
|
97
|
+
},
|
|
98
|
+
seo: [
|
|
99
|
+
{ type: 'title', text: 'De wetenschappelijke kunst van de perfecte smoes', level: 2 },
|
|
100
|
+
{ type: 'paragraph', html: 'We leven in de tijd van hyperconnectiviteit. Je telefoon trilt, je horloge geeft meldingen en je sociale agenda ziet eruit als een spelletje Tetris dat op het punt staat te verliezen. De druk om op alles "ja" te zeggen heeft een epidemie van sociale uitputting veroorzaakt.' },
|
|
101
|
+
{ type: 'title', text: 'De Renaissance van JOMO (Joy of Missing Out)', level: 3 },
|
|
102
|
+
{ type: 'paragraph', html: 'Waar FOMO (Fear of Missing Out) het afgelopen decennium domineerde, pleiten digitale welzijnsexperts nu voor <strong>JOMO: de vreugde van het missen</strong>. Het gaat niet om isolatie, maar om intentionaliteit.' },
|
|
103
|
+
{ type: 'tip', title: 'De formule voor het onweerlegbare alibi', html: '<strong>Het gedissocieerde onderwerp:</strong> jij bent nooit de dader. Het is "de wifi", "mijn kat", "het universum". Verplaats de schuld naar een externe entiteit.<br><strong>De hyperbolische actie:</strong> de situatie moet absurd of technisch genoeg zijn zodat niemand naar details vraagt.<br><strong>De fysieke blokkade:</strong> de uiteindelijke uitkomst moet binair zijn: of ik ga, of ik blijf thuis.' },
|
|
104
|
+
{ type: 'title', text: 'Een korte geschiedenis van de smoes', level: 3 },
|
|
105
|
+
{ type: 'list', items: [
|
|
106
|
+
'<strong>Middeleeuwen:</strong> "Mijn paard is een hoefijzer verloren" (een tijdloze klassieker).',
|
|
107
|
+
'<strong>Industriële Revolutie:</strong> "De stoommachine is oververhit".',
|
|
108
|
+
'<strong>Digitale Tijdperk:</strong> "Mijn internet viel uit midden in een update".',
|
|
109
|
+
]},
|
|
110
|
+
{ type: 'proscons', items: [
|
|
111
|
+
{ pro: 'Verlicht direct de sociale druk', con: 'Overmatig gebruik schaadt het vertrouwen' },
|
|
112
|
+
{ pro: 'Beschermt je energie en grenzen', con: 'Kan schuldgevoel opwekken bij onzorgvuldig gebruik' },
|
|
113
|
+
{ pro: 'Creatieve en humoristische toon neemt de spanning weg', con: 'Niet geschikt voor formele of professionele contexten' },
|
|
114
|
+
]},
|
|
115
|
+
],
|
|
116
|
+
faq,
|
|
117
|
+
bibliography: [
|
|
118
|
+
{ name: 'Manifest van de Uitsteller', url: 'https://example.com/manifesto' }
|
|
119
|
+
],
|
|
120
|
+
howTo,
|
|
121
|
+
schemas: [faqSchema as any, howToSchema as any, appSchema],
|
|
122
|
+
};
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ExcuseGeneratorLocaleContent } from '../index';
|
|
3
|
+
|
|
4
|
+
const slug = 'generator-wymowek';
|
|
5
|
+
const title = 'Generator Wymówek';
|
|
6
|
+
const description = 'Semantyczna maszyna losująca, która pozwoli Ci stylowo wymigać się od zobowiązań. Błyskawicznie generuj surrealistyczne i niepodważalne wymówki.';
|
|
7
|
+
|
|
8
|
+
const faq: ExcuseGeneratorLocaleContent['faq'] = [
|
|
9
|
+
{
|
|
10
|
+
question: 'Czy ten generator może uratować moje małżeństwo?',
|
|
11
|
+
answer: 'Choć nie jesteśmy terapeutami, uniknięcie obiadu z teściami dzięki wiarygodnej awarii technicznej może znacząco obniżyć napięcie. Używaj odpowiedzialnie.'
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
question: 'Dlaczego zdania są tak surrealistyczne?',
|
|
15
|
+
answer: 'Strategia opiera się na dysonansie poznawczym. Jeśli powiesz coś nudnego, można to zweryfikować. Jeśli powiesz coś absurdalnego, zdziwienie blokuje zdolność do gniewu.'
|
|
16
|
+
}
|
|
17
|
+
];
|
|
18
|
+
|
|
19
|
+
const howTo: ExcuseGeneratorLocaleContent['howTo'] = [
|
|
20
|
+
{ name: 'Generuj', text: 'Kliknij przycisk generowania, aby stworzyć nową wymówkę.' },
|
|
21
|
+
{ name: 'Kopiuj', text: 'Kliknij przycisk kopiowania, aby przenieść wymówkę do schowka.' }
|
|
22
|
+
];
|
|
23
|
+
|
|
24
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
25
|
+
'@context': 'https://schema.org',
|
|
26
|
+
'@type': 'FAQPage',
|
|
27
|
+
mainEntity: faq.map((item) => ({
|
|
28
|
+
'@type': 'Question',
|
|
29
|
+
name: item.question,
|
|
30
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
31
|
+
})),
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const howToSchema: WithContext<HowTo> = {
|
|
35
|
+
'@context': 'https://schema.org',
|
|
36
|
+
'@type': 'HowTo',
|
|
37
|
+
name: title,
|
|
38
|
+
description,
|
|
39
|
+
step: howTo.map((step) => ({
|
|
40
|
+
'@type': 'HowToStep',
|
|
41
|
+
name: step.name,
|
|
42
|
+
text: step.text,
|
|
43
|
+
})),
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
47
|
+
'@context': 'https://schema.org',
|
|
48
|
+
'@type': 'SoftwareApplication',
|
|
49
|
+
name: title,
|
|
50
|
+
description,
|
|
51
|
+
applicationCategory: 'UtilitiesApplication',
|
|
52
|
+
operatingSystem: 'Web',
|
|
53
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
54
|
+
inLanguage: 'pl',
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
export const content: ExcuseGeneratorLocaleContent = {
|
|
58
|
+
slug,
|
|
59
|
+
title,
|
|
60
|
+
description,
|
|
61
|
+
faqTitle: 'Najczęściej Zadawane Pytania',
|
|
62
|
+
bibliographyTitle: 'Bibliografia Czasu Wolnego',
|
|
63
|
+
ui: {
|
|
64
|
+
title: 'Surrealistyczny Generator Wymówek',
|
|
65
|
+
description: 'Kalkulator alibi nowej generacji.',
|
|
66
|
+
subjectLabel: 'Podmiot',
|
|
67
|
+
actionLabel: 'Akcja',
|
|
68
|
+
victimLabel: 'Ofiara',
|
|
69
|
+
generateBtn: 'GENERUJ WYMÓWKĘ',
|
|
70
|
+
copyBtn: 'Skopiuj to szaleństwo',
|
|
71
|
+
copied: 'Skopiowano!',
|
|
72
|
+
starts: JSON.stringify([
|
|
73
|
+
"Mój kot", "Moja babcia", "Prezydent", "Obcy", "Mój sąsiad z 5. piętra",
|
|
74
|
+
"Wifi", "Mój horoskop", "Podróżnik w czasie", "Pralka", "Moja lodówka",
|
|
75
|
+
"Duch Świąt", "Mój cień", "Ninja", "Policja wegańska", "Siri",
|
|
76
|
+
"Moja roślina mięsożerna", "Kurier Amazona", "Mój zły klon", "Czarodziej", "Godzilla"
|
|
77
|
+
]),
|
|
78
|
+
middles: JSON.stringify([
|
|
79
|
+
"wypowiedział wojnę", "zjadł", "porwał", "podpalił",
|
|
80
|
+
"organizuje imprezę w", "zwymiotował na", "odmawia opuszczenia",
|
|
81
|
+
"zhakował", "ukradł", "zakochał się w", "medytuje nad",
|
|
82
|
+
"rzucił zaklęcie na", "protestuje przeciwko", "założył kult w",
|
|
83
|
+
"tańczy sambę w", "przywołał demona w", "zablokował dostęp do",
|
|
84
|
+
"zamienił się w złoto", "próbuje sprzedać", "napisał książkę o"
|
|
85
|
+
]),
|
|
86
|
+
ends: JSON.stringify([
|
|
87
|
+
"moich kluczach do domu.", "mojej woli życia.", "bramie garażowej.",
|
|
88
|
+
"moich ulubionych spodniach.", "ruterze w salonie.", "mojej jedynej parze butów.",
|
|
89
|
+
"prawach fizyki.", "mojej godności.", "windzie w budynku.",
|
|
90
|
+
"moim koncie Netflix.", "mojej szczoteczce do zębów.", "akcie własności domu.",
|
|
91
|
+
"mojej kolekcji kapsli.", "hamulcu ręcznym w aucie.", "mojej chęci socjalizacji.",
|
|
92
|
+
"zapasach kawy.", "desce sedesowej.", "pilocie do TV.",
|
|
93
|
+
"moich szczęśliwych skarpetkach.", "cywilizacji zachodniej."
|
|
94
|
+
]),
|
|
95
|
+
faqTitle: 'FAQ',
|
|
96
|
+
bibliographyTitle: 'Źródła'
|
|
97
|
+
},
|
|
98
|
+
seo: [
|
|
99
|
+
{ type: 'title', text: 'Naukowa sztuka wymówki doskonałej', level: 2 },
|
|
100
|
+
{ type: 'paragraph', html: 'Żyjemy w erze hiperłączności. Twój telefon wibruje, zegarek wysyła powiadomienia, a Twój kalendarz towarzyski wygląda jak partia Tetrisa tuż przed przegraną. Presja, by na wszystko mówić „tak”, stworzyła epidemię wyczerpania społecznego.' },
|
|
101
|
+
{ type: 'title', text: 'Renesans JOMO (Joy of Missing Out)', level: 3 },
|
|
102
|
+
{ type: 'paragraph', html: 'Podczas gdy FOMO (Fear of Missing Out) dominowało w ostatniej dekadzie, eksperci od cyfrowego dobrostanu promują teraz <strong>JOMO: Radość z tego, że coś nas omija</strong>. Nie chodzi o izolację, ale o intencjonalność.' },
|
|
103
|
+
{ type: 'tip', title: 'Formuła alibi nie do podważenia', html: '<strong>Podmiot zdystansowany:</strong> Nigdy nie Ty jesteś winny. To „wifi”, „mój kot”, „wszechświat”. Przerzuć winę na byt zewnętrzny.<br><strong>Hiperboliczna akcja:</strong> Sytuacja musi być wystarczająco absurdalna lub techniczna, by nikt nie dopytywał o szczegóły.<br><strong>Blokada fizyczna:</strong> Wynik końcowy musi być binarny: albo idę, albo zostaję w domu.' },
|
|
104
|
+
{ type: 'title', text: 'Krótka historia wymówki', level: 3 },
|
|
105
|
+
{ type: 'list', items: [
|
|
106
|
+
'<strong>Średniowiecze:</strong> „Mój koń zgubił podkowę” (ponadczasowa klasyka).',
|
|
107
|
+
'<strong>Rewolucja przemysłowa:</strong> „Maszyna parowa się przegrzała”.',
|
|
108
|
+
'<strong>Era cyfrowa:</strong> „Internet padł mi w samym środku aktualizacji”.',
|
|
109
|
+
]},
|
|
110
|
+
{ type: 'proscons', items: [
|
|
111
|
+
{ pro: 'Błyskawicznie łagodzi presję społeczną', con: 'Nadużywanie niszczy zaufanie' },
|
|
112
|
+
{ pro: 'Chroni Twoją energię i granice', con: 'Może budzić poczucie winy, jeśli jest używane bezmyślnie' },
|
|
113
|
+
{ pro: 'Kreatywny i humorystyczny ton rozładowuje napięcie', con: 'Nie nadaje się do kontekstów formalnych lub zawodowych' },
|
|
114
|
+
]},
|
|
115
|
+
],
|
|
116
|
+
faq,
|
|
117
|
+
bibliography: [
|
|
118
|
+
{ name: 'Manifest Prokrastynatora', url: 'https://example.com/manifesto' }
|
|
119
|
+
],
|
|
120
|
+
howTo,
|
|
121
|
+
schemas: [faqSchema as any, howToSchema as any, appSchema],
|
|
122
|
+
};
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ExcuseGeneratorLocaleContent } from '../index';
|
|
3
|
+
|
|
4
|
+
const slug = 'gerador-de-desculpas';
|
|
5
|
+
const title = 'Gerador de Desculpas';
|
|
6
|
+
const description = 'Máquina de jogo semântica para se livrar de compromissos com estilo. Gere desculpas surreais e irrefutáveis instantaneamente.';
|
|
7
|
+
|
|
8
|
+
const faq: ExcuseGeneratorLocaleContent['faq'] = [
|
|
9
|
+
{
|
|
10
|
+
question: 'Este gerador pode salvar o meu casamento?',
|
|
11
|
+
answer: 'Embora não sejamos terapeutas, evitar aquele jantar com os sogros usando uma emergência técnica plausível pode reduzir significativamente a tensão. Use com responsabilidade.'
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
question: 'Por que frases tão surreais?',
|
|
15
|
+
answer: 'A estratégia baseia-se na Dissonância Cognitiva. Se disser algo aborrecido, é verificável. Se disser algo absurdo, a surpresa bloqueia a capacidade de sentir raiva.'
|
|
16
|
+
}
|
|
17
|
+
];
|
|
18
|
+
|
|
19
|
+
const howTo: ExcuseGeneratorLocaleContent['howTo'] = [
|
|
20
|
+
{ name: 'Gerar', text: 'Clique no botão gerar para criar uma nova desculpa.' },
|
|
21
|
+
{ name: 'Copiar', text: 'Clique no botão copiar para levar a desculpa para a área de transferência.' }
|
|
22
|
+
];
|
|
23
|
+
|
|
24
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
25
|
+
'@context': 'https://schema.org',
|
|
26
|
+
'@type': 'FAQPage',
|
|
27
|
+
mainEntity: faq.map((item) => ({
|
|
28
|
+
'@type': 'Question',
|
|
29
|
+
name: item.question,
|
|
30
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
31
|
+
})),
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const howToSchema: WithContext<HowTo> = {
|
|
35
|
+
'@context': 'https://schema.org',
|
|
36
|
+
'@type': 'HowTo',
|
|
37
|
+
name: title,
|
|
38
|
+
description,
|
|
39
|
+
step: howTo.map((step) => ({
|
|
40
|
+
'@type': 'HowToStep',
|
|
41
|
+
name: step.name,
|
|
42
|
+
text: step.text,
|
|
43
|
+
})),
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
47
|
+
'@context': 'https://schema.org',
|
|
48
|
+
'@type': 'SoftwareApplication',
|
|
49
|
+
name: title,
|
|
50
|
+
description,
|
|
51
|
+
applicationCategory: 'UtilitiesApplication',
|
|
52
|
+
operatingSystem: 'Web',
|
|
53
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
54
|
+
inLanguage: 'pt',
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
export const content: ExcuseGeneratorLocaleContent = {
|
|
58
|
+
slug,
|
|
59
|
+
title,
|
|
60
|
+
description,
|
|
61
|
+
faqTitle: 'Perguntas Frequentes',
|
|
62
|
+
bibliographyTitle: 'Bibliografia de Lazer',
|
|
63
|
+
ui: {
|
|
64
|
+
title: 'Gerador de Desculpas Surreais',
|
|
65
|
+
description: 'Calculadora de álibis de próxima geração.',
|
|
66
|
+
subjectLabel: 'Sujeito',
|
|
67
|
+
actionLabel: 'Ação',
|
|
68
|
+
victimLabel: 'Vítima',
|
|
69
|
+
generateBtn: 'GERAR DESCULPA',
|
|
70
|
+
copyBtn: 'Copiar esta loucura',
|
|
71
|
+
copied: 'Copiado!',
|
|
72
|
+
starts: JSON.stringify([
|
|
73
|
+
"O meu gato", "A minha avó", "O presidente", "Um alienígena", "O meu vizinho do 5º andar",
|
|
74
|
+
"O wifi", "O meu horóscopo", "Um viajante do tempo", "A máquina de lavar", "O meu frigorífico",
|
|
75
|
+
"O espírito do Natal", "A minha sombra", "Um ninja", "A polícia vegan", "Siri",
|
|
76
|
+
"A minha planta carnívora", "O estafeta da Amazon", "O meu clone maligno", "Um feiticeiro", "Godzilla"
|
|
77
|
+
]),
|
|
78
|
+
middles: JSON.stringify([
|
|
79
|
+
"declarou guerra a", "comeu", "sequestrou", "incendiou",
|
|
80
|
+
"está a organizar uma festa em", "vomitou em", "recusa-se a sair de",
|
|
81
|
+
"hackeou", "roubou", "apaixonou-se por", "está a meditar sobre",
|
|
82
|
+
"lançou um feitiço em", "está a protestar contra", "fundou um culto em",
|
|
83
|
+
"está a dançar samba em", "invocou um demónio em", "bloqueou o acesso a",
|
|
84
|
+
"transformou-se em ouro", "está a tentar vender", "escreveu um livro sobre"
|
|
85
|
+
]),
|
|
86
|
+
ends: JSON.stringify([
|
|
87
|
+
"as chaves da minha casa.", "a minha vontade de viver.", "o portão da garagem.",
|
|
88
|
+
"as minhas calças favoritas.", "o router da sala.", "o meu único par de sapatos.",
|
|
89
|
+
"as leis da física.", "a minha dignidade.", "o elevador do prédio.",
|
|
90
|
+
"a minha conta da Netflix.", "a minha escova de dentes.", "as escrituras da casa.",
|
|
91
|
+
"a minha coleção de pogs.", "o travão de mão do carro.", "o meu desejo de socializar.",
|
|
92
|
+
"o meu stock de café.", "a tampa da sanita.", "o comando da TV.",
|
|
93
|
+
"as minhas meias da sorte.", "a civilização ocidental."
|
|
94
|
+
]),
|
|
95
|
+
faqTitle: 'FAQ',
|
|
96
|
+
bibliographyTitle: 'Referências'
|
|
97
|
+
},
|
|
98
|
+
seo: [
|
|
99
|
+
{ type: 'title', text: 'A arte científica da desculpa perfeita', level: 2 },
|
|
100
|
+
{ type: 'paragraph', html: 'Vivemos na era da hiperconectividade. O seu telemóvel vibra, o seu relógio notifica-o e a sua agenda social parece um jogo de Tetris prestes a perder. A pressão para dizer "sim" a tudo criou uma epidemia de exaustão social.' },
|
|
101
|
+
{ type: 'title', text: 'O Renascimento do JOMO (Joy of Missing Out)', level: 3 },
|
|
102
|
+
{ type: 'paragraph', html: 'Enquanto o FOMO (Fear of Missing Out) dominou a última década, especialistas em bem-estar digital defendem agora o <strong>JOMO: a alegria de ficar de fora</strong>. Não se trata de isolamento, mas de intencionalidade.' },
|
|
103
|
+
{ type: 'tip', title: 'A fórmula para o álibi irrefutável', html: '<strong>O sujeito dissociado:</strong> você nunca é o culpado. É "o wifi", "o meu gato", "o universo". Transfira a culpa para uma entidade externa.<br><strong>A ação hiperbólica:</strong> a situação deve ser suficientemente absurda ou técnica para que ninguém peça detalhes.<br><strong>O bloqueio físico:</strong> o resultado final deve ser binário: ou eu vou ou fico em casa.' },
|
|
104
|
+
{ type: 'title', text: 'Breve história da desculpa', level: 3 },
|
|
105
|
+
{ type: 'list', items: [
|
|
106
|
+
'<strong>Idade Média:</strong> "O meu cavalo perdeu uma herradura" (um clássico intemporal).',
|
|
107
|
+
'<strong>Revolução Industrial:</strong> "A máquina a vapor sobreaqueceu".',
|
|
108
|
+
'<strong>Era Digital:</strong> "A minha internet caiu bem no meio de uma atualização".',
|
|
109
|
+
]},
|
|
110
|
+
{ type: 'proscons', items: [
|
|
111
|
+
{ pro: 'Alivia instantaneamente a pressão social', con: 'O uso excessivo corrói a confiança' },
|
|
112
|
+
{ pro: 'Protege a sua energia e os seus limites', con: 'Pode gerar culpa se usado sem cuidado' },
|
|
113
|
+
{ pro: 'O tom criativo e humorístico dissipa a tensão', con: 'Não é adequado para contextos formais ou profissionais' },
|
|
114
|
+
]},
|
|
115
|
+
],
|
|
116
|
+
faq,
|
|
117
|
+
bibliography: [
|
|
118
|
+
{ name: 'Manifesto do Procrastinador', url: 'https://example.com/manifesto' }
|
|
119
|
+
],
|
|
120
|
+
howTo,
|
|
121
|
+
schemas: [faqSchema as any, howToSchema as any, appSchema],
|
|
122
|
+
};
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ExcuseGeneratorLocaleContent } from '../index';
|
|
3
|
+
|
|
4
|
+
const slug = 'генератор-отговорок';
|
|
5
|
+
const title = 'Генератор отговорок';
|
|
6
|
+
const description = 'Семантическая машина для стильного избавления от обязательств. Мгновенно создавайте сюрреалистичные и неопровержимые отговорки.';
|
|
7
|
+
|
|
8
|
+
const faq: ExcuseGeneratorLocaleContent['faq'] = [
|
|
9
|
+
{
|
|
10
|
+
question: 'Может ли этот генератор спасти мой брак?',
|
|
11
|
+
answer: 'Хотя мы не терапевты, возможность избежать того самого ужина с родственниками с помощью правдоподобной технической заминки может значительно снизить напряжение. Используйте ответственно.'
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
question: 'Почему фразы такие странные?',
|
|
15
|
+
answer: 'Стратегия основана на когнитивном диссонансе. Если вы скажете что-то скучное, это легко проверить. Если вы скажете что-то абсурдное, эффект неожиданности блокирует способность к гневу.'
|
|
16
|
+
}
|
|
17
|
+
];
|
|
18
|
+
|
|
19
|
+
const howTo: ExcuseGeneratorLocaleContent['howTo'] = [
|
|
20
|
+
{ name: 'Создать', text: 'Нажмите кнопку генерации, чтобы создать новую отговорку.' },
|
|
21
|
+
{ name: 'Копировать', text: 'Нажмите кнопку копирования, чтобы сохранить отговорку в буфер обмена.' }
|
|
22
|
+
];
|
|
23
|
+
|
|
24
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
25
|
+
'@context': 'https://schema.org',
|
|
26
|
+
'@type': 'FAQPage',
|
|
27
|
+
mainEntity: faq.map((item) => ({
|
|
28
|
+
'@type': 'Question',
|
|
29
|
+
name: item.question,
|
|
30
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
31
|
+
})),
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const howToSchema: WithContext<HowTo> = {
|
|
35
|
+
'@context': 'https://schema.org',
|
|
36
|
+
'@type': 'HowTo',
|
|
37
|
+
name: title,
|
|
38
|
+
description,
|
|
39
|
+
step: howTo.map((step) => ({
|
|
40
|
+
'@type': 'HowToStep',
|
|
41
|
+
name: step.name,
|
|
42
|
+
text: step.text,
|
|
43
|
+
})),
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
47
|
+
'@context': 'https://schema.org',
|
|
48
|
+
'@type': 'SoftwareApplication',
|
|
49
|
+
name: title,
|
|
50
|
+
description,
|
|
51
|
+
applicationCategory: 'UtilitiesApplication',
|
|
52
|
+
operatingSystem: 'Web',
|
|
53
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
54
|
+
inLanguage: 'ru',
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
export const content: ExcuseGeneratorLocaleContent = {
|
|
58
|
+
slug,
|
|
59
|
+
title,
|
|
60
|
+
description,
|
|
61
|
+
faqTitle: 'Часто задаваемые вопросы',
|
|
62
|
+
bibliographyTitle: 'Библиография досуга',
|
|
63
|
+
ui: {
|
|
64
|
+
title: 'Сюрреалистичный генератор отговорок',
|
|
65
|
+
description: 'Калькулятор алиби нового поколения.',
|
|
66
|
+
subjectLabel: 'Субъект',
|
|
67
|
+
actionLabel: 'Действие',
|
|
68
|
+
victimLabel: 'Объект',
|
|
69
|
+
generateBtn: 'СОЗДАТЬ ОТГОВОРКУ',
|
|
70
|
+
copyBtn: 'Скопировать это безумие',
|
|
71
|
+
copied: 'Скопировано!',
|
|
72
|
+
starts: JSON.stringify([
|
|
73
|
+
"Мой кот", "Моя бабушка", "Президент", "Пришелец", "Сосед с 5-го этажа",
|
|
74
|
+
"Wi-fi", "Мой гороскоп", "Путешественник во времени", "Стиральная машина", "Мой холодильник",
|
|
75
|
+
"Дух Рождества", "Моя тень", "Ниндзя", "Веганская полиция", "Siri",
|
|
76
|
+
"Мое плотоядное растение", "Курьер Amazon", "Мой злой клон", "Волшебник", "Годзилла"
|
|
77
|
+
]),
|
|
78
|
+
middles: JSON.stringify([
|
|
79
|
+
"объявил войну", "съел", "похитил", "поджег",
|
|
80
|
+
"устраивает вечеринку в", "вырвал на", "отказывается покидать",
|
|
81
|
+
"взломал", "украл", "влюбился в", "медитирует над",
|
|
82
|
+
"наложил заклинание на", "протестует против", "основал секту в",
|
|
83
|
+
"танцует самбу в", "вызвал демона в", "заблокировал доступ к",
|
|
84
|
+
"превратился в золото", "пытается продать", "написал книгу о"
|
|
85
|
+
]),
|
|
86
|
+
ends: JSON.stringify([
|
|
87
|
+
"моих ключах от дома.", "моей воле к жизни.", "гаражных воротах.",
|
|
88
|
+
"моих любимых штанах.", "роутере в гостиной.", "моей единственной паре обуви.",
|
|
89
|
+
"законах физики.", "моем достоинстве.", "лифте в здании.",
|
|
90
|
+
"моем аккаунте Netflix.", "моей зубной щетке.", "документах на дом.",
|
|
91
|
+
"моей коллекции фишек.", "ручном тормозе машины.", "моем желании общаться.",
|
|
92
|
+
"запасах кофе.", "крышке унитаза.", "пульте от телевизора.",
|
|
93
|
+
"моих счастливых носках.", "западной цивилизации."
|
|
94
|
+
]),
|
|
95
|
+
faqTitle: 'FAQ',
|
|
96
|
+
bibliographyTitle: 'Ссылки'
|
|
97
|
+
},
|
|
98
|
+
seo: [
|
|
99
|
+
{ type: 'title', text: 'Научное искусство идеальной отговорки', level: 2 },
|
|
100
|
+
{ type: 'paragraph', html: 'Мы живем в эпоху гиперподключенности. Телефон вибрирует, часы присылают уведомления, а ваш социальный календарь напоминает игру в Тетрис за шаг до проигрыша. Давление говорить «да» всему вокруг создало эпидемию социального истощения.' },
|
|
101
|
+
{ type: 'title', text: 'Ренессанс JOMO (Радость от упущенного)', level: 3 },
|
|
102
|
+
{ type: 'paragraph', html: 'В то время как FOMO (страх что-то упустить) доминировал в прошлом десятилетии, эксперты по цифровому благополучию теперь выступают за <strong>JOMO: радость от того, что вы что-то пропустили</strong>. Это не про изоляцию, а про осознанность.' },
|
|
103
|
+
{ type: 'tip', title: 'Формула неопровержимого алиби', html: '<strong>Отстраненный субъект:</strong> вы никогда не виноваты. Это «wi-fi», «мой кот» или «вселенная». Переложите вину на внешние силы.<br><strong>Гиперболизированное действие:</strong> ситуация должна быть достаточно абсурдной или технически сложной, чтобы никто не захотел уточнять детали.<br><strong>Физическая преграда:</strong> итоговый результат должен быть бинарным: либо я иду, либо остаюсь дома.' },
|
|
104
|
+
{ type: 'title', text: 'Краткая история отговорки', level: 3 },
|
|
105
|
+
{ type: 'list', items: [
|
|
106
|
+
'<strong>Средние века:</strong> «Моя лошадь потеряла подкову» (нестареющая классика).',
|
|
107
|
+
'<strong>Промышленная революция:</strong> «Паровой двигатель перегрелся».',
|
|
108
|
+
'<strong>Цифровая эра:</strong> «Интернет пропал прямо посреди обновления».'
|
|
109
|
+
]},
|
|
110
|
+
{ type: 'proscons', items: [
|
|
111
|
+
{ pro: 'Мгновенно снимает социальное давление', con: 'Чрезмерное использование разрушает доверие' },
|
|
112
|
+
{ pro: 'Защищает вашу энергию и границы', con: 'Может вызвать чувство вины при бездумном использовании' },
|
|
113
|
+
{ pro: 'Креативный и юмористический тон разряжает обстановку', con: 'Не подходит для официальных или рабочих ситуаций' }
|
|
114
|
+
]},
|
|
115
|
+
],
|
|
116
|
+
faq,
|
|
117
|
+
bibliography: [
|
|
118
|
+
{ name: 'Манифест прокрастинатора', url: 'https://example.com/manifesto' }
|
|
119
|
+
],
|
|
120
|
+
howTo,
|
|
121
|
+
schemas: [faqSchema as any, howToSchema as any, appSchema],
|
|
122
|
+
};
|