@jjlmoya/utils-creative 1.7.0 โ†’ 1.9.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.
Files changed (101) hide show
  1. package/package.json +2 -1
  2. package/src/category/i18n/de.ts +9 -0
  3. package/src/category/i18n/id.ts +9 -0
  4. package/src/category/i18n/it.ts +9 -0
  5. package/src/category/i18n/ja.ts +9 -0
  6. package/src/category/i18n/ko.ts +9 -0
  7. package/src/category/i18n/nl.ts +9 -0
  8. package/src/category/i18n/pl.ts +9 -0
  9. package/src/category/i18n/pt.ts +9 -0
  10. package/src/category/i18n/ru.ts +9 -0
  11. package/src/category/i18n/sv.ts +9 -0
  12. package/src/category/i18n/tr.ts +9 -0
  13. package/src/category/i18n/zh.ts +9 -0
  14. package/src/category/index.ts +12 -0
  15. package/src/tests/faq_count.test.ts +1 -1
  16. package/src/tests/i18n_coverage.test.ts +36 -0
  17. package/src/tests/locale_completeness.test.ts +2 -2
  18. package/src/tests/slug_uniqueness.test.ts +81 -0
  19. package/src/tests/title_quality.test.ts +3 -3
  20. package/src/tool/bead-pattern-generator/i18n/de.ts +115 -0
  21. package/src/tool/bead-pattern-generator/i18n/en.ts +1 -1
  22. package/src/tool/bead-pattern-generator/i18n/es.ts +1 -1
  23. package/src/tool/bead-pattern-generator/i18n/fr.ts +1 -1
  24. package/src/tool/bead-pattern-generator/i18n/id.ts +115 -0
  25. package/src/tool/bead-pattern-generator/i18n/it.ts +115 -0
  26. package/src/tool/bead-pattern-generator/i18n/ja.ts +115 -0
  27. package/src/tool/bead-pattern-generator/i18n/ko.ts +115 -0
  28. package/src/tool/bead-pattern-generator/i18n/nl.ts +115 -0
  29. package/src/tool/bead-pattern-generator/i18n/pl.ts +115 -0
  30. package/src/tool/bead-pattern-generator/i18n/pt.ts +115 -0
  31. package/src/tool/bead-pattern-generator/i18n/ru.ts +115 -0
  32. package/src/tool/bead-pattern-generator/i18n/sv.ts +115 -0
  33. package/src/tool/bead-pattern-generator/i18n/tr.ts +115 -0
  34. package/src/tool/bead-pattern-generator/i18n/zh.ts +115 -0
  35. package/src/tool/bead-pattern-generator/index.ts +12 -0
  36. package/src/tool/dice-roller/i18n/de.ts +138 -0
  37. package/src/tool/dice-roller/i18n/id.ts +138 -0
  38. package/src/tool/dice-roller/i18n/it.ts +138 -0
  39. package/src/tool/dice-roller/i18n/ja.ts +138 -0
  40. package/src/tool/dice-roller/i18n/ko.ts +138 -0
  41. package/src/tool/dice-roller/i18n/nl.ts +138 -0
  42. package/src/tool/dice-roller/i18n/pl.ts +138 -0
  43. package/src/tool/dice-roller/i18n/pt.ts +138 -0
  44. package/src/tool/dice-roller/i18n/ru.ts +138 -0
  45. package/src/tool/dice-roller/i18n/sv.ts +138 -0
  46. package/src/tool/dice-roller/i18n/tr.ts +138 -0
  47. package/src/tool/dice-roller/i18n/zh.ts +138 -0
  48. package/src/tool/dice-roller/index.ts +12 -0
  49. package/src/tool/excuse-generator/i18n/de.ts +122 -0
  50. package/src/tool/excuse-generator/i18n/id.ts +122 -0
  51. package/src/tool/excuse-generator/i18n/it.ts +122 -0
  52. package/src/tool/excuse-generator/i18n/ja.ts +122 -0
  53. package/src/tool/excuse-generator/i18n/ko.ts +122 -0
  54. package/src/tool/excuse-generator/i18n/nl.ts +122 -0
  55. package/src/tool/excuse-generator/i18n/pl.ts +122 -0
  56. package/src/tool/excuse-generator/i18n/pt.ts +122 -0
  57. package/src/tool/excuse-generator/i18n/ru.ts +122 -0
  58. package/src/tool/excuse-generator/i18n/sv.ts +122 -0
  59. package/src/tool/excuse-generator/i18n/tr.ts +122 -0
  60. package/src/tool/excuse-generator/i18n/zh.ts +122 -0
  61. package/src/tool/excuse-generator/index.ts +12 -0
  62. package/src/tool/fortune-cookie/i18n/de.ts +127 -0
  63. package/src/tool/fortune-cookie/i18n/id.ts +127 -0
  64. package/src/tool/fortune-cookie/i18n/it.ts +127 -0
  65. package/src/tool/fortune-cookie/i18n/ja.ts +127 -0
  66. package/src/tool/fortune-cookie/i18n/ko.ts +127 -0
  67. package/src/tool/fortune-cookie/i18n/nl.ts +127 -0
  68. package/src/tool/fortune-cookie/i18n/pl.ts +127 -0
  69. package/src/tool/fortune-cookie/i18n/pt.ts +127 -0
  70. package/src/tool/fortune-cookie/i18n/ru.ts +127 -0
  71. package/src/tool/fortune-cookie/i18n/sv.ts +127 -0
  72. package/src/tool/fortune-cookie/i18n/tr.ts +127 -0
  73. package/src/tool/fortune-cookie/i18n/zh.ts +127 -0
  74. package/src/tool/fortune-cookie/index.ts +12 -0
  75. package/src/tool/synesthesia-painter/i18n/de.ts +122 -0
  76. package/src/tool/synesthesia-painter/i18n/fr.ts +2 -2
  77. package/src/tool/synesthesia-painter/i18n/id.ts +122 -0
  78. package/src/tool/synesthesia-painter/i18n/it.ts +122 -0
  79. package/src/tool/synesthesia-painter/i18n/ja.ts +122 -0
  80. package/src/tool/synesthesia-painter/i18n/ko.ts +122 -0
  81. package/src/tool/synesthesia-painter/i18n/nl.ts +122 -0
  82. package/src/tool/synesthesia-painter/i18n/pl.ts +122 -0
  83. package/src/tool/synesthesia-painter/i18n/pt.ts +122 -0
  84. package/src/tool/synesthesia-painter/i18n/ru.ts +122 -0
  85. package/src/tool/synesthesia-painter/i18n/sv.ts +122 -0
  86. package/src/tool/synesthesia-painter/i18n/tr.ts +122 -0
  87. package/src/tool/synesthesia-painter/i18n/zh.ts +122 -0
  88. package/src/tool/synesthesia-painter/index.ts +12 -0
  89. package/src/tool/zalgo-generator/i18n/de.ts +113 -0
  90. package/src/tool/zalgo-generator/i18n/id.ts +113 -0
  91. package/src/tool/zalgo-generator/i18n/it.ts +113 -0
  92. package/src/tool/zalgo-generator/i18n/ja.ts +113 -0
  93. package/src/tool/zalgo-generator/i18n/ko.ts +113 -0
  94. package/src/tool/zalgo-generator/i18n/nl.ts +113 -0
  95. package/src/tool/zalgo-generator/i18n/pl.ts +113 -0
  96. package/src/tool/zalgo-generator/i18n/pt.ts +113 -0
  97. package/src/tool/zalgo-generator/i18n/ru.ts +113 -0
  98. package/src/tool/zalgo-generator/i18n/sv.ts +113 -0
  99. package/src/tool/zalgo-generator/i18n/tr.ts +113 -0
  100. package/src/tool/zalgo-generator/i18n/zh.ts +113 -0
  101. package/src/tool/zalgo-generator/index.ts +12 -0
@@ -0,0 +1,122 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ExcuseGeneratorLocaleContent } from '../index';
3
+
4
+ const slug = 'ausredengenerator';
5
+ const title = 'Ausredengenerator';
6
+ const description = 'Semantische Glรผcksmaschine, um Verpflichtungen mit Stil loszuwerden. Generieren Sie sofort surreale und unwiderlegbare Ausreden.';
7
+
8
+ const faq: ExcuseGeneratorLocaleContent['faq'] = [
9
+ {
10
+ question: 'Kann dieser Generator meine Ehe retten?',
11
+ answer: 'Wir sind zwar keine Therapeuten, aber das Vermeiden dieses Abendessens mit den Schwiegereltern durch einen plausiblen technischen Notfall kann die Spannungen erheblich reduzieren. Mit Verantwortung verwenden.'
12
+ },
13
+ {
14
+ question: 'Warum solch surreale Phrasen?',
15
+ answer: 'Die Strategie basiert auf kognitiver Dissonanz. Wenn man etwas Langweiliges sagt, ist es รผberprรผfbar. Wenn man etwas Absurdes sagt, blockiert die รœberraschung die Fรคhigkeit zur Wut.'
16
+ }
17
+ ];
18
+
19
+ const howTo: ExcuseGeneratorLocaleContent['howTo'] = [
20
+ { name: 'Generieren', text: 'Klicken Sie auf die Schaltflรคche "Generieren", um eine neue Ausrede zu erstellen.' },
21
+ { name: 'Kopieren', text: 'Klicken Sie auf die Schaltflรคche "Kopieren", um die Ausrede in Ihre Zwischenablage zu kopieren.' }
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: 'de',
55
+ };
56
+
57
+ export const content: ExcuseGeneratorLocaleContent = {
58
+ slug,
59
+ title,
60
+ description,
61
+ faqTitle: 'Hรคufig gestellte Fragen',
62
+ bibliographyTitle: 'Freizeit-Bibliographie',
63
+ ui: {
64
+ title: 'Surrealer Ausredengenerator',
65
+ description: 'Alibi-Rechner der nรคchsten Generation.',
66
+ subjectLabel: 'Subjekt',
67
+ actionLabel: 'Aktion',
68
+ victimLabel: 'Opfer',
69
+ generateBtn: 'AUSREDE GENERIEREN',
70
+ copyBtn: 'Diesen Wahnsinn kopieren',
71
+ copied: 'Kopiert!',
72
+ starts: JSON.stringify([
73
+ "Meine Katze", "Meine GroรŸmutter", "Der Prรคsident", "Ein Alien", "Mein Nachbar aus der 5. Etage",
74
+ "Das WLAN", "Mein Horoskop", "Ein Zeitreisender", "Die Waschmaschine", "Mein Kรผhlschrank",
75
+ "Der Geist der Weihnacht", "Mein Schatten", "Ein Ninja", "Die vegane Polizei", "Siri",
76
+ "Meine fleischfressende Pflanze", "Der Amazon-Lieferant", "Mein bรถser Klon", "Ein Zauberer", "Godzilla"
77
+ ]),
78
+ middles: JSON.stringify([
79
+ "hat den Krieg erklรคrt gegen", "hat gefressen", "hat entfรผhrt", "hat angezรผndet",
80
+ "organisiert eine Party in", "hat sich erbrochen auf", "weigert sich zu verlassen",
81
+ "hat gehackt", "hat gestohlen", "hat sich verliebt in", "meditiert รผber",
82
+ "hat einen Zauberspruch gewirkt auf", "protestiert gegen", "hat einen Kult gegrรผndet in",
83
+ "tanzt Samba in", "hat einen Dรคmon beschworen in", "hat den Zugang blockiert zu",
84
+ "hat sich in Gold verwandelt", "versucht zu verkaufen", "hat ein Buch geschrieben รผber"
85
+ ]),
86
+ ends: JSON.stringify([
87
+ "meine Hausschlรผssel.", "meinen Lebenswillen.", "das Garagentor.",
88
+ "meine Lieblingshose.", "den Wohnzimmer-Router.", "mein einziges Paar Schuhe.",
89
+ "die Gesetze der Physik.", "meine Wรผrde.", "den Aufzug des Gebรคudes.",
90
+ "meinen Netflix-Account.", "meine Zahnbรผrste.", "meine Hausurkunden.",
91
+ "meine Pogs-Sammlung.", "die Handbremse des Autos.", "meinen Wunsch nach Sozialkontakt.",
92
+ "meinen Kaffeevorrat.", "den Toilettendeckel.", "die TV-Fernbedienung.",
93
+ "meine Glรผckssocken.", "die westliche Zivilisation."
94
+ ]),
95
+ faqTitle: 'FAQ',
96
+ bibliographyTitle: 'Referenzen'
97
+ },
98
+ seo: [
99
+ { type: 'title', text: 'Die wissenschaftliche Kunst der perfekten Ausrede', level: 2 },
100
+ { type: 'paragraph', html: 'Wir leben im Zeitalter der Hyperkonnektivitรคt. Ihr Telefon vibriert, Ihre Uhr benachrichtigt Sie und Ihr Terminkalender sieht aus wie ein Tetris-Spiel, das kurz vor dem Verlieren steht. Der Druck, zu allem โ€žJaโ€œ zu sagen, hat eine Epidemie der sozialen Erschรถpfung ausgelรถst.' },
101
+ { type: 'title', text: 'Die Renaissance von JOMO (Joy of Missing Out)', level: 3 },
102
+ { type: 'paragraph', html: 'Wรคhrend FOMO (Fear of Missing Out) das letzte Jahrzehnt dominierte, plรคdieren Experten fรผr digitales Wohlbefinden nun fรผr <strong>JOMO: Die Freude am Verpassen</strong>. Es geht nicht um Isolation, sondern um Intentionalitรคt.' },
103
+ { type: 'tip', title: 'Die Formel fรผr das unwiderlegbare Alibi', html: '<strong>Das dissoziierte Subjekt:</strong> Sie sind niemals der Schuldige. Es ist โ€ždas WLANโ€œ, โ€žmeine Katzeโ€œ, โ€ždas Universumโ€œ. Schieben Sie die Schuld auf eine externe Instanz.<br><strong>Die hyperbolische Aktion:</strong> Die Situation muss so absurd oder technisch sein, dass niemand nach Details fragt.<br><strong>Die physische Blockade:</strong> Das Endergebnis muss binรคr sein: Entweder ich gehe oder ich bleibe zu Hause.' },
104
+ { type: 'title', text: 'Eine kurze Geschichte der Ausrede', level: 3 },
105
+ { type: 'list', items: [
106
+ '<strong>Mittelalter:</strong> โ€žMein Pferd hat ein Hufeisen verlorenโ€œ (Ein zeitloser Klassiker).',
107
+ '<strong>Industrielle Revolution:</strong> โ€žDie Dampfmaschine ist รผberhitztโ€œ.',
108
+ '<strong>Digitales Zeitalter:</strong> โ€žMein Internet ist mitten im Update ausgefallenโ€œ.',
109
+ ]},
110
+ { type: 'proscons', items: [
111
+ { pro: 'Befreit sofort von sozialem Druck', con: 'รœbermรครŸiger Gebrauch untergrรคbt das Vertrauen' },
112
+ { pro: 'Schรผtzt Ihre Energie und Grenzen', con: 'Kann Schuldgefรผhle erzeugen, wenn es unvorsichtig benutzt wird' },
113
+ { pro: 'Kreativer und humorvoller Ton entschรคrft Spannungen', con: 'Nicht fรผr formelle oder professionelle Kontexte geeignet' },
114
+ ]},
115
+ ],
116
+ faq,
117
+ bibliography: [
118
+ { name: 'Manifest des Prokrastinierers', 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 = 'pembuat-alasan';
5
+ const title = 'Pembuat Alasan';
6
+ const description = 'Mesin perjudian semantik untuk melepaskan diri dari komitmen dengan gaya. Hasilkan alasan yang surealis dan tak terbantahkan secara instan.';
7
+
8
+ const faq: ExcuseGeneratorLocaleContent['faq'] = [
9
+ {
10
+ question: 'Bisakah generator ini menyelamatkan pernikahan saya?',
11
+ 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.'
12
+ },
13
+ {
14
+ question: 'Mengapa kalimatnya begitu surealis?',
15
+ 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.'
16
+ }
17
+ ];
18
+
19
+ const howTo: ExcuseGeneratorLocaleContent['howTo'] = [
20
+ { name: 'Hasilkan', text: 'Klik tombol buat untuk membuat alasan baru.' },
21
+ { name: 'Salin', text: 'Klik tombol salin untuk memindahkan alasan tersebut ke papan klip Anda.' }
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: 'id',
55
+ };
56
+
57
+ export const content: ExcuseGeneratorLocaleContent = {
58
+ slug,
59
+ title,
60
+ description,
61
+ faqTitle: 'Pertanyaan yang Sering Diajukan',
62
+ bibliographyTitle: 'Bibliografi Hiburan',
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
+ { name: 'Manifesto Penunda', 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 = 'generatore-di-scuse';
5
+ const title = 'Generatore di Scuse';
6
+ const description = 'Macchina d\'azzardo semantica per liberarsi dagli impegni con stile. Genera istantaneamente scuse surreali e inconfutabili.';
7
+
8
+ const faq: ExcuseGeneratorLocaleContent['faq'] = [
9
+ {
10
+ question: 'Questo generatore puรฒ salvare il mio matrimonio?',
11
+ answer: 'Pur non essendo terapeuti, evitare quella cena con i suoceri usando un\'emergenza tecnica plausibile puรฒ ridurre significativamente la tensione. Usare responsabilmente.'
12
+ },
13
+ {
14
+ question: 'Perchรฉ frasi cosรฌ surreali?',
15
+ 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.'
16
+ }
17
+ ];
18
+
19
+ const howTo: ExcuseGeneratorLocaleContent['howTo'] = [
20
+ { name: 'Genera', text: 'Clicca sul pulsante genera per creare una nuova scusa.' },
21
+ { name: 'Copia', text: 'Clicca sul pulsante copia per portare la scusa negli appunti.' }
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: 'it',
55
+ };
56
+
57
+ export const content: ExcuseGeneratorLocaleContent = {
58
+ slug,
59
+ title,
60
+ description,
61
+ faqTitle: 'Domande Frequenti',
62
+ bibliographyTitle: 'Bibliografia del Tempo Libero',
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
+ { name: 'Manifesto del Procrastinatore', 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 = 'excuse-generator';
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: 'ja',
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
+ "WifiใŒ", "ๆ˜Ÿๅ ใ„ใŒ", "ใ‚ฟใ‚คใƒ ใƒˆใƒฉใƒ™ใƒฉใƒผใŒ", "ๆด—ๆฟฏๆฉŸใŒ", "ๅ†ท่”ตๅบซใŒ",
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๏ผˆJoy of Missing Out๏ผ‰ใฎใƒซใƒใ‚ตใƒณใ‚น', level: 3 },
102
+ { type: 'paragraph', html: '้ŽๅŽป10ๅนด้–“ใฏFOMO๏ผˆๅ–ใ‚Šๆฎ‹ใ•ใ‚Œใ‚‹ๆๆ€–๏ผ‰ใŒๆ”ฏ้…ใ—ใฆใ„ใพใ—ใŸใŒใ€็พๅœจใƒ‡ใ‚ธใ‚ฟใƒซใ‚ฆใ‚งใƒซใƒใ‚นใฎๅฐ‚้–€ๅฎถใฏ<strong>JOMO๏ผšๅ–ใ‚Šๆฎ‹ใ•ใ‚Œใ‚‹ๅ–œใณ</strong>ใ‚’ๆๅ”ฑใ—ใฆใ„ใพใ™ใ€‚ใ“ใ‚Œใฏๅญค็ซ‹ใงใฏใชใใ€ๆ„ๅ›ณ็š„ใช้ธๆŠžใฎใ“ใจใงใ™ใ€‚' },
103
+ { type: 'tip', title: 'ๅ่ซ–ใฎไฝ™ๅœฐใฎใชใ„ใ‚ขใƒชใƒใ‚คใฎๅ…ฌๅผ', html: '<strong>ไธป่ชžใ‚’ๅˆ†้›ขใ™ใ‚‹๏ผš</strong> ใ‚ใชใŸ่‡ช่บซใฏๆฑบใ—ใฆๅŠ ๅฎณ่€…ใงใฏใ‚ใ‚Šใพใ›ใ‚“ใ€‚ใ€ŒWifiใ€ใ€Œ็Œซใ€ใ€Œๅฎ‡ๅฎ™ใ€ใชใฉใ€่ฒฌไปปใ‚’ๅค–้ƒจใซ่ปขๅซใ—ใพใ—ใ‚‡ใ†ใ€‚<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 = 'excuse-generator';
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
+ };