@jjlmoya/utils-creative 1.20.0 → 1.22.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 (148) hide show
  1. package/package.json +4 -2
  2. package/src/category/i18n/de.ts +1 -1
  3. package/src/category/i18n/ru.ts +1 -1
  4. package/src/data.ts +2 -1
  5. package/src/entries.ts +3 -1
  6. package/src/index.ts +3 -0
  7. package/src/layouts/PreviewLayout.astro +7 -2
  8. package/src/tests/diacritics_density.test.ts +118 -0
  9. package/src/tests/inverted_punctuation.test.ts +84 -0
  10. package/src/tests/locale_completeness.test.ts +2 -14
  11. package/src/tests/no_en_dash.test.ts +70 -0
  12. package/src/tests/pagespeed_best_practices.test.ts +198 -0
  13. package/src/tests/script_density.test.ts +94 -0
  14. package/src/tests/tool_validation.test.ts +2 -2
  15. package/src/tool/bead-pattern-generator/bibliography.astro +2 -12
  16. package/src/tool/bead-pattern-generator/bibliography.ts +5 -0
  17. package/src/tool/bead-pattern-generator/component.astro +2 -2
  18. package/src/tool/bead-pattern-generator/entry.ts +0 -1
  19. package/src/tool/bead-pattern-generator/i18n/de.ts +4 -8
  20. package/src/tool/bead-pattern-generator/i18n/en.ts +4 -8
  21. package/src/tool/bead-pattern-generator/i18n/es.ts +4 -8
  22. package/src/tool/bead-pattern-generator/i18n/fr.ts +5 -9
  23. package/src/tool/bead-pattern-generator/i18n/id.ts +4 -8
  24. package/src/tool/bead-pattern-generator/i18n/it.ts +4 -8
  25. package/src/tool/bead-pattern-generator/i18n/ja.ts +4 -8
  26. package/src/tool/bead-pattern-generator/i18n/ko.ts +4 -8
  27. package/src/tool/bead-pattern-generator/i18n/nl.ts +4 -8
  28. package/src/tool/bead-pattern-generator/i18n/pl.ts +4 -8
  29. package/src/tool/bead-pattern-generator/i18n/pt.ts +4 -8
  30. package/src/tool/bead-pattern-generator/i18n/ru.ts +8 -12
  31. package/src/tool/bead-pattern-generator/i18n/sv.ts +4 -8
  32. package/src/tool/bead-pattern-generator/i18n/tr.ts +4 -8
  33. package/src/tool/bead-pattern-generator/i18n/zh.ts +7 -11
  34. package/src/tool/dice-roller/bibliography.astro +3 -12
  35. package/src/tool/dice-roller/bibliography.ts +5 -0
  36. package/src/tool/dice-roller/entry.ts +0 -1
  37. package/src/tool/dice-roller/i18n/de.ts +12 -16
  38. package/src/tool/dice-roller/i18n/en.ts +12 -16
  39. package/src/tool/dice-roller/i18n/es.ts +11 -15
  40. package/src/tool/dice-roller/i18n/fr.ts +18 -22
  41. package/src/tool/dice-roller/i18n/id.ts +12 -16
  42. package/src/tool/dice-roller/i18n/it.ts +11 -15
  43. package/src/tool/dice-roller/i18n/ja.ts +9 -13
  44. package/src/tool/dice-roller/i18n/ko.ts +10 -14
  45. package/src/tool/dice-roller/i18n/nl.ts +12 -16
  46. package/src/tool/dice-roller/i18n/pl.ts +11 -15
  47. package/src/tool/dice-roller/i18n/pt.ts +12 -16
  48. package/src/tool/dice-roller/i18n/ru.ts +18 -22
  49. package/src/tool/dice-roller/i18n/sv.ts +12 -16
  50. package/src/tool/dice-roller/i18n/tr.ts +10 -14
  51. package/src/tool/dice-roller/i18n/zh.ts +16 -20
  52. package/src/tool/excuse-generator/bibliography.astro +2 -12
  53. package/src/tool/excuse-generator/bibliography.ts +3 -0
  54. package/src/tool/excuse-generator/entry.ts +0 -1
  55. package/src/tool/excuse-generator/i18n/de.ts +7 -9
  56. package/src/tool/excuse-generator/i18n/en.ts +2 -4
  57. package/src/tool/excuse-generator/i18n/es.ts +2 -4
  58. package/src/tool/excuse-generator/i18n/fr.ts +4 -6
  59. package/src/tool/excuse-generator/i18n/id.ts +2 -4
  60. package/src/tool/excuse-generator/i18n/it.ts +2 -4
  61. package/src/tool/excuse-generator/i18n/ja.ts +2 -4
  62. package/src/tool/excuse-generator/i18n/ko.ts +2 -4
  63. package/src/tool/excuse-generator/i18n/nl.ts +2 -4
  64. package/src/tool/excuse-generator/i18n/pl.ts +7 -9
  65. package/src/tool/excuse-generator/i18n/pt.ts +2 -4
  66. package/src/tool/excuse-generator/i18n/ru.ts +7 -9
  67. package/src/tool/excuse-generator/i18n/sv.ts +2 -4
  68. package/src/tool/excuse-generator/i18n/tr.ts +2 -4
  69. package/src/tool/excuse-generator/i18n/zh.ts +9 -11
  70. package/src/tool/fortune-cookie/bibliography.astro +2 -12
  71. package/src/tool/fortune-cookie/bibliography.ts +3 -0
  72. package/src/tool/fortune-cookie/component.astro +7 -10
  73. package/src/tool/fortune-cookie/entry.ts +0 -1
  74. package/src/tool/fortune-cookie/i18n/de.ts +6 -9
  75. package/src/tool/fortune-cookie/i18n/en.ts +6 -9
  76. package/src/tool/fortune-cookie/i18n/es.ts +2 -4
  77. package/src/tool/fortune-cookie/i18n/fr.ts +7 -10
  78. package/src/tool/fortune-cookie/i18n/id.ts +6 -9
  79. package/src/tool/fortune-cookie/i18n/it.ts +3 -6
  80. package/src/tool/fortune-cookie/i18n/ja.ts +2 -5
  81. package/src/tool/fortune-cookie/i18n/ko.ts +2 -5
  82. package/src/tool/fortune-cookie/i18n/nl.ts +6 -9
  83. package/src/tool/fortune-cookie/i18n/pl.ts +6 -9
  84. package/src/tool/fortune-cookie/i18n/pt.ts +6 -9
  85. package/src/tool/fortune-cookie/i18n/ru.ts +17 -20
  86. package/src/tool/fortune-cookie/i18n/sv.ts +6 -9
  87. package/src/tool/fortune-cookie/i18n/tr.ts +5 -8
  88. package/src/tool/fortune-cookie/i18n/zh.ts +7 -10
  89. package/src/tool/glitch-image-distorter/bibliography.astro +8 -0
  90. package/src/tool/glitch-image-distorter/bibliography.ts +4 -0
  91. package/src/tool/glitch-image-distorter/component.astro +393 -0
  92. package/src/tool/glitch-image-distorter/entry.ts +48 -0
  93. package/src/tool/glitch-image-distorter/glitch-image-distorter.css +233 -0
  94. package/src/tool/glitch-image-distorter/i18n/de.ts +131 -0
  95. package/src/tool/glitch-image-distorter/i18n/en.ts +131 -0
  96. package/src/tool/glitch-image-distorter/i18n/es.ts +131 -0
  97. package/src/tool/glitch-image-distorter/i18n/fr.ts +131 -0
  98. package/src/tool/glitch-image-distorter/i18n/id.ts +131 -0
  99. package/src/tool/glitch-image-distorter/i18n/it.ts +131 -0
  100. package/src/tool/glitch-image-distorter/i18n/ja.ts +131 -0
  101. package/src/tool/glitch-image-distorter/i18n/ko.ts +131 -0
  102. package/src/tool/glitch-image-distorter/i18n/nl.ts +131 -0
  103. package/src/tool/glitch-image-distorter/i18n/pl.ts +131 -0
  104. package/src/tool/glitch-image-distorter/i18n/pt.ts +131 -0
  105. package/src/tool/glitch-image-distorter/i18n/ru.ts +131 -0
  106. package/src/tool/glitch-image-distorter/i18n/sv.ts +131 -0
  107. package/src/tool/glitch-image-distorter/i18n/tr.ts +131 -0
  108. package/src/tool/glitch-image-distorter/i18n/zh.ts +131 -0
  109. package/src/tool/glitch-image-distorter/index.ts +9 -0
  110. package/src/tool/glitch-image-distorter/seo.astro +15 -0
  111. package/src/tool/synesthesia-painter/bibliography.astro +3 -12
  112. package/src/tool/synesthesia-painter/bibliography.ts +5 -0
  113. package/src/tool/synesthesia-painter/entry.ts +0 -1
  114. package/src/tool/synesthesia-painter/i18n/de.ts +14 -18
  115. package/src/tool/synesthesia-painter/i18n/en.ts +5 -9
  116. package/src/tool/synesthesia-painter/i18n/es.ts +4 -8
  117. package/src/tool/synesthesia-painter/i18n/fr.ts +10 -14
  118. package/src/tool/synesthesia-painter/i18n/id.ts +5 -9
  119. package/src/tool/synesthesia-painter/i18n/it.ts +2 -6
  120. package/src/tool/synesthesia-painter/i18n/ja.ts +4 -8
  121. package/src/tool/synesthesia-painter/i18n/ko.ts +4 -8
  122. package/src/tool/synesthesia-painter/i18n/nl.ts +4 -8
  123. package/src/tool/synesthesia-painter/i18n/pl.ts +14 -18
  124. package/src/tool/synesthesia-painter/i18n/pt.ts +5 -9
  125. package/src/tool/synesthesia-painter/i18n/ru.ts +17 -21
  126. package/src/tool/synesthesia-painter/i18n/sv.ts +5 -9
  127. package/src/tool/synesthesia-painter/i18n/tr.ts +4 -8
  128. package/src/tool/synesthesia-painter/i18n/zh.ts +15 -19
  129. package/src/tool/zalgo-generator/bibliography.astro +2 -12
  130. package/src/tool/zalgo-generator/bibliography.ts +5 -0
  131. package/src/tool/zalgo-generator/component.astro +1 -1
  132. package/src/tool/zalgo-generator/entry.ts +0 -1
  133. package/src/tool/zalgo-generator/i18n/de.ts +9 -13
  134. package/src/tool/zalgo-generator/i18n/en.ts +5 -9
  135. package/src/tool/zalgo-generator/i18n/es.ts +4 -8
  136. package/src/tool/zalgo-generator/i18n/fr.ts +9 -13
  137. package/src/tool/zalgo-generator/i18n/id.ts +5 -9
  138. package/src/tool/zalgo-generator/i18n/it.ts +4 -8
  139. package/src/tool/zalgo-generator/i18n/ja.ts +4 -8
  140. package/src/tool/zalgo-generator/i18n/ko.ts +4 -8
  141. package/src/tool/zalgo-generator/i18n/nl.ts +5 -9
  142. package/src/tool/zalgo-generator/i18n/pl.ts +9 -13
  143. package/src/tool/zalgo-generator/i18n/pt.ts +5 -9
  144. package/src/tool/zalgo-generator/i18n/ru.ts +9 -13
  145. package/src/tool/zalgo-generator/i18n/sv.ts +5 -9
  146. package/src/tool/zalgo-generator/i18n/tr.ts +5 -9
  147. package/src/tool/zalgo-generator/i18n/zh.ts +9 -13
  148. package/src/tools.ts +2 -0
@@ -1,4 +1,5 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
2
3
  import type { DiceRollerLocaleContent } from '../index';
3
4
 
4
5
  const slug = 'zar-atma';
@@ -73,7 +74,6 @@ export const content: DiceRollerLocaleContent = {
73
74
  title,
74
75
  description,
75
76
  faqTitle: 'Sıkça Sorulan Sorular',
76
- bibliographyTitle: 'Şans Kaynakçası',
77
77
  ui: {
78
78
  title: 'Zar Atma',
79
79
  description: 'Şansınız bol olsun.',
@@ -99,13 +99,13 @@ export const content: DiceRollerLocaleContent = {
99
99
  { type: 'title', text: 'Standart Zar Ailesi', level: 3 },
100
100
  { type: 'paragraph', html: '1974\'te <strong>Dungeons &amp; Dragons</strong> tarafından popüler hale getirilen, rol yapma oyunlarındaki en geniş zar seti, beş Platonik cisim ve iki ek şekilden oluşur: d4 (tetrahedron), d6 (küp), d8 (oktahedron), d10 (beşgen trapezohedron), d12 (dodekahedron), d20 (ikosahedron) ve d100 (yüzdelik zar). Her bir çokyüzlü tekdüze dağılımı garanti eder: tüm yüzlerin gelme olasılığı tam olarak aynıdır.' },
101
101
  { type: 'list', items: [
102
- '<strong>d4 Tetrahedron:</strong> Çıplak ayakla basıldığında en tehlikelisi. Dört üçgen yüzey, yüzey başına %25 olasılık. Genellikle hançer hasarı veya düşük seviyeli büyüler için kullanılır.',
103
- '<strong>d6 Küp:</strong> En evrensel zar. Mısır oyunu Senet\'ten beri tüm masa oyunlarında mevcuttur. Kübik geometrisi mükemmel eşit dağılımı garanti eder.',
104
- '<strong>d8 Oktahedron:</strong> Mızrak veya savaş baltası zarı. Sekiz eşkenar üçgen yüzey. Yüzey başına %12,5 olasılık.',
105
- '<strong>d10 Beşgen Trapezohedron:</strong> Standart set içindeki tek Platonik cisim olmayan şekil. "Tepe" başına iki zıt yüz. d100 (iki d10 birleşimi) için temeldir.',
106
- '<strong>d12 Dodekahedron:</strong> Barbarın zarı. On iki beşgen yüz. Birçok sistemde değeri hafife alınır, D&D 5e Barbar sınıfının yıldızıdır.',
107
- '<strong>d20 Ikosahedron:</strong> RPG\'nin kralı. Yirmi üçgen yüzey. d20 sisteminin ana kahramanıdır: neredeyse tüm eylemlerin başarısını veya başarısızlığını belirler.',
108
- '<strong>d100 Yüzdelik:</strong> İki d10 birleşimi (onluklar + birlikler). Call of Cthulhu veya Warhammer Fantasy gibi sistemlerde hassas olasılıkları tanımlar.',
102
+ '<strong>d4 - Tetrahedron:</strong> Çıplak ayakla basıldığında en tehlikelisi. Dört üçgen yüzey, yüzey başına %25 olasılık. Genellikle hançer hasarı veya düşük seviyeli büyüler için kullanılır.',
103
+ '<strong>d6 - Küp:</strong> En evrensel zar. Mısır oyunu Senet\'ten beri tüm masa oyunlarında mevcuttur. Kübik geometrisi mükemmel eşit dağılımı garanti eder.',
104
+ '<strong>d8 - Oktahedron:</strong> Mızrak veya savaş baltası zarı. Sekiz eşkenar üçgen yüzey. Yüzey başına %12,5 olasılık.',
105
+ '<strong>d10 - Beşgen Trapezohedron:</strong> Standart set içindeki tek Platonik cisim olmayan şekil. "Tepe" başına iki zıt yüz. d100 (iki d10 birleşimi) için temeldir.',
106
+ '<strong>d12 - Dodekahedron:</strong> Barbarın zarı. On iki beşgen yüz. Birçok sistemde değeri hafife alınır, D&D 5e Barbar sınıfının yıldızıdır.',
107
+ '<strong>d20 - Ikosahedron:</strong> RPG\'nin kralı. Yirmi üçgen yüzey. d20 sisteminin ana kahramanıdır: neredeyse tüm eylemlerin başarısını veya başarısızlığını belirler.',
108
+ '<strong>d100 - Yüzdelik:</strong> İki d10 birleşimi (onluklar + birlikler). Call of Cthulhu veya Warhammer Fantasy gibi sistemlerde hassas olasılıkları tanımlar.',
109
109
  ]},
110
110
  { type: 'stats', items: [
111
111
  { value: 'M.Ö. 5000', label: 'İlk zarlar (astragali)', icon: 'mdi:history' },
@@ -124,15 +124,11 @@ export const content: DiceRollerLocaleContent = {
124
124
  { term: 'Fumble / Doğal 1', definition: 'Bir zarda minimum değerin (1) atılması. Genellikle dramatik bir başarısızlık veya olumsuz sonuçla sonuçlanır.' },
125
125
  { term: 'Dice Pool (Zar Havuzu)', definition: 'Aynı anda atılan zarlar koleksiyonu. Aracımızdaki havuz, her zar tipini sayıya göre gruplandırılmış olarak gösterir (örneğin 3d6 + 2d8).' },
126
126
  { term: 'Modifier (Değiştirici)', definition: 'Bir karakterin becerisini, nitelik bonusunu veya durumsal cezasını temsil eden, bir zar sonucuna eklenen veya sonucundan çıkarılan sabit bir sayı.' },
127
- { term: 'Yüzdelik Atış', definition: 'Yeteneklerin yüzde olarak ölçüldüğü beceri tabanlı sistemlerde kullanılan, 1100 arası bir sonuç üretmek için iki d10 kullanan bir atış.' },
127
+ { term: 'Yüzdelik Atış', definition: 'Yeteneklerin yüzde olarak ölçüldüğü beceri tabanlı sistemlerde kullanılan, 1-100 arası bir sonuç üretmek için iki d10 kullanan bir atış.' },
128
128
  ]},
129
129
  ],
130
130
  faq,
131
- bibliography: [
132
- { name: 'D&D Beyond – Zar mekaniği kuralları', url: 'https://www.dndbeyond.com/sources/basic-rules/using-ability-scores' },
133
- { name: 'Roll20 – Sanal masaüstü ve zar sistemleri', url: 'https://roll20.net/' },
134
- { name: 'Pathfinder – d20 Sistem Referansı', url: 'https://paizo.com/pathfinder' },
135
- ],
131
+ bibliography,
136
132
  howTo,
137
133
  schemas: [faqSchema as any, howToSchema as any, appSchema],
138
134
  };
@@ -1,4 +1,5 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
2
3
  import type { DiceRollerLocaleContent } from '../index';
3
4
 
4
5
  const slug = 'dice-roller';
@@ -8,15 +9,15 @@ const description = '一个为您的 RPG 和桌面游戏而设计的全功能骰
8
9
  const faq: DiceRollerLocaleContent['faq'] = [
9
10
  {
10
11
  question: '我该如何模拟优势掷骰(Advantage, D&D)?',
11
- answer: '点击两次 d20 按钮,将两个 d20 骰子放入袋中。掷骰后,观察两个独立的结果并取较高值。显示的“总计”将是两者的和,但您可以在结果明细中查看每个骰子的具体点数。',
12
+ answer: '点击两次 d20 按钮,将两个 d20 骰子放入袋中。掷骰后,观察两个独立的结果并取较高值。显示的\"总计\"将是两者的和,但您可以在结果明细中查看每个骰子的具体点数。',
12
13
  },
13
14
  {
14
15
  question: '结果中的绿色或红色代表什么?',
15
- answer: '绿色的结果表示该骰子掷出了可能的最大值(“大成功”或“暴击”)。红色的结果代表最小值(“1”,最糟糕的结果)。这让您能一眼发现关键成功或大失败。',
16
+ answer: '绿色的结果表示该骰子掷出了可能的最大值(\"大成功\"或\"暴击\")。红色的结果代表最小值(\"1\",最糟糕的结果)。这让您能一眼发现关键成功或大失败。',
16
17
  },
17
18
  {
18
19
  question: '我可以添加多个同类型的骰子吗?',
19
- answer: '可以。每次点击一个骰子都会将其添加到投掷池中。如果您点击 d6 三次,投掷池将显示“3d6”。如需减少数量,点击投掷池中每个骰子组旁边的“−”按钮即可。',
20
+ answer: '可以。每次点击一个骰子都会将其添加到投掷池中。如果您点击 d6 三次,投掷池将显示\"3d6\"。如需减少数量,点击投掷池中每个骰子组旁边的\"−\"按钮即可。',
20
21
  },
21
22
  {
22
23
  question: '数字骰子和物理骰子一样随机吗?',
@@ -24,14 +25,14 @@ const faq: DiceRollerLocaleContent['faq'] = [
24
25
  },
25
26
  {
26
27
  question: '什么是 d100,它该如何使用?',
27
- answer: 'd100(或 d%)会生成 1 到 100 之间的数字,常用于基于百分比的游戏系统,如《克苏鲁的呼唤》或《战锤奇幻角色扮演》。它代表“直接概率”:如果您的潜行技能是 65%,那么您需要掷出 65 或更小的数字才能成功。',
28
+ answer: 'd100(或 d%)会生成 1 到 100 之间的数字,常用于基于百分比的游戏系统,如《克苏鲁的呼唤》或《战锤奇幻角色扮演》。它代表\"直接概率\":如果您的潜行技能是 65%,那么您需要掷出 65 或更小的数字才能成功。',
28
29
  },
29
30
  ];
30
31
 
31
32
  const howTo: DiceRollerLocaleContent['howTo'] = [
32
33
  { name: '构建骰子池', text: '点击骰子按钮(d4、d6、d8...)将它们添加到池中。每次点击都会添加一个所选类型的骰子。您可以在同一次投掷中混合不同类型的骰子。' },
33
- { name: '调整修正值', text: '使用修正值旁边的“+”和“−”按钮来应用奖励或惩罚(如 D&D 中的属性修正值)。修正值会自动累加到总计中。' },
34
- { name: '掷骰子', text: '点击“掷骰子”按钮。右侧面板显示最终总计以及每个骰子的具体点数,大成功(最大值)以绿色标记,大失败(最小值)以红色标记。' },
34
+ { name: '调整修正值', text: '使用修正值旁边的\"+\"和\"−\"按钮来应用奖励或惩罚(如 D&D 中的属性修正值)。修正值会自动累加到总计中。' },
35
+ { name: '掷骰子', text: '点击\"掷骰子\"按钮。右侧面板显示最终总计以及每个骰子的具体点数,大成功(最大值)以绿色标记,大失败(最小值)以红色标记。' },
35
36
  { name: '查看历史记录', text: '每次投掷都会连同使用的骰子表达式、总计结果和精确时间一起记录在历史中。您可以使用相应按钮清除历史记录。' },
36
37
  ];
37
38
 
@@ -73,7 +74,6 @@ export const content: DiceRollerLocaleContent = {
73
74
  title,
74
75
  description,
75
76
  faqTitle: '常见问题解答',
76
- bibliographyTitle: '概率文献',
77
77
  ui: {
78
78
  title: '在线掷骰子',
79
79
  description: '愿运气与你同在。',
@@ -99,13 +99,13 @@ export const content: DiceRollerLocaleContent = {
99
99
  { type: 'title', text: '标准骰子系列', level: 3 },
100
100
  { type: 'paragraph', html: '自 1974 年由 <strong>《龙与地下城》</strong> 推而广之以来,角色扮演游戏中最广泛使用的骰子组合由五个柏拉图多面体加上两个额外形状组成:d4(正四面体)、d6(正六面体/立方体)、d8(正八面体)、d10(五角偏方三八面体)、d12(正十二面体)、d20(正二十面体)以及 d100(百分比骰)。每种多面体都保证了均匀分布:所有面出现的概率完全相同。' },
101
101
  { type: 'list', items: [
102
- '<strong>d4 正四面体:</strong> 如果赤脚踩到它是最危险的。四个三角形面,每面概率 25%。通常用于匕首伤害或低级法术。',
103
- '<strong>d6 立方体:</strong> 最通用的骰子。自埃及塞尼特棋以来就存在于所有棋盘游戏中。其立方几何形状保证了完美的等概率分布。',
104
- '<strong>d8 正八面体:</strong> 长矛或战斧的骰子。八个等边三角形面,每面概率 12.5%。',
105
- '<strong>d10 五角偏方三八面体:</strong> 标准组合中唯一的非柏拉图多面体。每个“顶点”有两个相对的面。是 d100(两个 d10 组合)的基础。',
106
- '<strong>d12 正十二面体:</strong> 野蛮人之骰。十二个正五边形面。在很多系统中被低估,但在 D&D 5e 的野蛮人职业中是主角。',
107
- '<strong>d20 正二十面体:</strong> RPG 之王。二十个三角形面。d20 系统的核心:决定了几乎所有动作的成败。',
108
- '<strong>d100 百分比骰:</strong> 两个 d10 组合(十位+个位)。在《克苏鲁的呼唤》或《战锤》等系统中定义精细概率。',
102
+ '<strong>d4 - 正四面体:</strong> 如果赤脚踩到它是最危险的。四个三角形面,每面概率 25%。通常用于匕首伤害或低级法术。',
103
+ '<strong>d6 - 立方体:</strong> 最通用的骰子。自埃及塞尼特棋以来就存在于所有棋盘游戏中。其立方几何形状保证了完美的等概率分布。',
104
+ '<strong>d8 - 正八面体:</strong> 长矛或战斧的骰子。八个等边三角形面,每面概率 12.5%。',
105
+ '<strong>d10 - 五角偏方三八面体:</strong> 标准组合中唯一的非柏拉图多面体。每个\"顶点\"有两个相对的面。是 d100(两个 d10 组合)的基础。',
106
+ '<strong>d12 - 正十二面体:</strong> 野蛮人之骰。十二个正五边形面。在很多系统中被低估,但在 D&D 5e 的野蛮人职业中是主角。',
107
+ '<strong>d20 - 正二十面体:</strong> RPG 之王。二十个三角形面。d20 系统的核心:决定了几乎所有动作的成败。',
108
+ '<strong>d100 - 百分比骰:</strong> 两个 d10 组合(十位+个位)。在《克苏鲁的呼唤》或《战锤》等系统中定义精细概率。',
109
109
  ]},
110
110
  { type: 'stats', items: [
111
111
  { value: '5000 BC', label: '首个骰子(距骨)', icon: 'mdi:history' },
@@ -118,7 +118,7 @@ export const content: DiceRollerLocaleContent = {
118
118
  { type: 'tip', title: '优势与劣势 (D&D 5e)', html: '<strong>优势</strong>机制是指掷 2d20 并取较高值。从数学上讲,这会将平均值从 10.5 提高到约 13.8。<strong>劣势</strong>反之:取较低值,平均值降至约 7.2。我们的模拟器允许您通过向袋中添加两个 d20 并比较结果来模拟这一点。' },
119
119
  { type: 'title', text: '修正值:骰子与角色之间的桥梁', level: 3 },
120
120
  { type: 'paragraph', html: '在大多数 RPG 系统中,骰子并非独立工作:会加减代表角色能力的<strong>修正值</strong>。在 D&D 5e 中,力量修正值为 +5 意味着您掷 1d20 后加 5,并根据敌人的护甲等级 (AC) 检查结果。我们的模拟器包含修正值控制功能,以如实反映这些机制。' },
121
- { type: 'tip', title: '骰子记法标准', html: '<strong>XdY+Z</strong> 记法是角色扮演游戏中的事实标准:X 个 Y 面的骰子,带有修正值 Z。“3d6+2”意味着掷三个六面骰子并将结果加 2。我们的工具在历史记录中使用此记法,方便您轻松共享或记录您的掷骰结果。' },
121
+ { type: 'tip', title: '骰子记法标准', html: '<strong>XdY+Z</strong> 记法是角色扮演游戏中的事实标准:X 个 Y 面的骰子,带有修正值 Z。\"3d6+2\"意味着掷三个六面骰子并将结果加 2。我们的工具在历史记录中使用此记法,方便您轻松共享或记录您的掷骰结果。' },
122
122
  { type: 'glossary', items: [
123
123
  { term: '暴击 (Critical Hit)', definition: '掷出骰子的最大值(例如 d20 掷出 20)。在大多数 RPG 系统中通常会触发特殊的奖励效果。' },
124
124
  { term: '大失败 / 自发 1 (Nat 1)', definition: '掷出骰子的最小值 (1)。通产导致戏剧性的失败或负面后果。' },
@@ -128,11 +128,7 @@ export const content: DiceRollerLocaleContent = {
128
128
  ]},
129
129
  ],
130
130
  faq,
131
- bibliography: [
132
- { name: 'D&D Beyond – 掷骰机制规则', url: 'https://www.dndbeyond.com/sources/basic-rules/using-ability-scores' },
133
- { name: 'Roll20 – 虚拟桌面与骰子系统', url: 'https://roll20.net/' },
134
- { name: 'Pathfinder – d20 系统参考', url: 'https://paizo.com/pathfinder' },
135
- ],
131
+ bibliography,
136
132
  howTo,
137
133
  schemas: [faqSchema as any, howToSchema as any, appSchema],
138
134
  };
@@ -1,18 +1,8 @@
1
1
  ---
2
2
  import { Bibliography as SharedBibliography } from '@jjlmoya/utils-shared';
3
- import { excuseGenerator, type ExcuseGeneratorLocaleContent } from './index';
4
- import type { KnownLocale } from '../../types';
3
+ import { bibliography } from './bibliography';
5
4
 
6
- interface Props {
7
- locale?: KnownLocale;
8
- }
9
-
10
- const { locale = 'es' } = Astro.props;
11
- const localeContentLoader = (excuseGenerator.i18n as Record<string, () => Promise<ExcuseGeneratorLocaleContent>>)[locale];
12
- const content = localeContentLoader ? await localeContentLoader() : null;
13
- if (!content) return null;
14
-
15
- const { bibliography } = content;
5
+ if (!bibliography || bibliography.length === 0) return null;
16
6
  ---
17
7
 
18
8
  <SharedBibliography links={bibliography} />
@@ -0,0 +1,3 @@
1
+ export const bibliography = [
2
+ { name: 'Procrastinator\'s Manifesto', url: 'https://example.com/manifesto' }
3
+ ];
@@ -14,7 +14,6 @@ export interface ExcuseGeneratorUI {
14
14
  middles: string;
15
15
  ends: string;
16
16
  faqTitle: string;
17
- bibliographyTitle: string;
18
17
  }
19
18
 
20
19
  export type ExcuseGeneratorLocaleContent = ToolLocaleContent<ExcuseGeneratorUI>;
@@ -1,4 +1,5 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
2
3
  import type { ExcuseGeneratorLocaleContent } from '../index';
3
4
 
4
5
  const slug = 'ausredengenerator';
@@ -59,7 +60,6 @@ export const content: ExcuseGeneratorLocaleContent = {
59
60
  title,
60
61
  description,
61
62
  faqTitle: 'Häufig gestellte Fragen',
62
- bibliographyTitle: 'Freizeit-Bibliographie',
63
63
  ui: {
64
64
  title: 'Surrealer Ausredengenerator',
65
65
  description: 'Alibi-Rechner der nächsten Generation.',
@@ -97,15 +97,15 @@ export const content: ExcuseGeneratorLocaleContent = {
97
97
  },
98
98
  seo: [
99
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.' },
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
101
  { type: 'title', text: 'Die Renaissance von JOMO (Joy of Missing Out)', level: 3 },
102
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.' },
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
104
  { type: 'title', text: 'Eine kurze Geschichte der Ausrede', level: 3 },
105
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“.',
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
109
  ]},
110
110
  { type: 'proscons', items: [
111
111
  { pro: 'Befreit sofort von sozialem Druck', con: 'Übermäßiger Gebrauch untergräbt das Vertrauen' },
@@ -114,9 +114,7 @@ export const content: ExcuseGeneratorLocaleContent = {
114
114
  ]},
115
115
  ],
116
116
  faq,
117
- bibliography: [
118
- { name: 'Manifest des Prokrastinierers', url: 'https://example.com/manifesto' }
119
- ],
117
+ bibliography,
120
118
  howTo,
121
119
  schemas: [faqSchema as any, howToSchema as any, appSchema],
122
120
  };
@@ -1,4 +1,5 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
2
3
  import type { ExcuseGeneratorLocaleContent } from '../index';
3
4
 
4
5
  const slug = 'excuse-generator';
@@ -59,7 +60,6 @@ export const content: ExcuseGeneratorLocaleContent = {
59
60
  title,
60
61
  description,
61
62
  faqTitle: 'Frequently Asked Questions',
62
- bibliographyTitle: 'Leisure Bibliography',
63
63
  ui: {
64
64
  title: 'Surreal Excuse Generator',
65
65
  description: 'Next-generation alibi calculator.',
@@ -114,9 +114,7 @@ export const content: ExcuseGeneratorLocaleContent = {
114
114
  ]},
115
115
  ],
116
116
  faq,
117
- bibliography: [
118
- { name: 'Procrastinator\'s Manifesto', url: 'https://example.com/manifesto' }
119
- ],
117
+ bibliography,
120
118
  howTo,
121
119
  schemas: [faqSchema as any, howToSchema as any, appSchema],
122
120
  };
@@ -1,4 +1,5 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
2
3
  import type { ExcuseGeneratorLocaleContent } from '../index';
3
4
 
4
5
  const slug = 'generador-excusas';
@@ -59,7 +60,6 @@ export const content: ExcuseGeneratorLocaleContent = {
59
60
  title,
60
61
  description,
61
62
  faqTitle: 'Preguntas Frecuentes',
62
- bibliographyTitle: 'Bibliografía del Ocio',
63
63
  ui: {
64
64
  title: 'Generador de Excusas Surrealistas',
65
65
  description: 'Calculadora de coartadas de última generación.',
@@ -118,9 +118,7 @@ export const content: ExcuseGeneratorLocaleContent = {
118
118
  ]},
119
119
  ],
120
120
  faq,
121
- bibliography: [
122
- { name: 'Manifesto del Procrastinador', url: 'https://example.com/manifesto' }
123
- ],
121
+ bibliography,
124
122
  howTo,
125
123
  schemas: [faqSchema as any, howToSchema as any, appSchema],
126
124
  };
@@ -1,4 +1,5 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
2
3
  import type { ExcuseGeneratorLocaleContent } from '../index';
3
4
 
4
5
  const slug = 'generateur-d-excuses';
@@ -59,7 +60,6 @@ export const content: ExcuseGeneratorLocaleContent = {
59
60
  title,
60
61
  description,
61
62
  faqTitle: 'Questions Fréquemment Posées',
62
- bibliographyTitle: 'Bibliographie du Temps Libre',
63
63
  ui: {
64
64
  title: 'Générateur d\'Excuses Surréalistes',
65
65
  description: 'Calculateur d\'alibis de nouvelle génération.',
@@ -99,8 +99,8 @@ export const content: ExcuseGeneratorLocaleContent = {
99
99
  { type: 'title', text: 'L\'Art Scientifique de l\'Excuse Parfaite', level: 2 },
100
100
  { type: 'paragraph', html: 'Nous vivons à l\'ère de l\'hyper-connectivité. Votre téléphone vibre, votre montre vous notifie, et votre agenda ressemble à une partie de Tetris sur le point de s\'effondrer. La pression de dire "oui" à tout a créé une épidémie d\'épuisement social.' },
101
101
  { type: 'title', text: 'La Renaissance du JOMO (Joy of Missing Out)', level: 3 },
102
- { type: 'paragraph', html: 'Alors que le FOMO (Fear of Missing Out) a dominé la dernière décennie, les experts du bien-être numérique prônent désormais le <strong>JOMO : La Joie de Passer à Côté</strong>. Il ne s\'agit pas d\'isolement, mais d\'intentionnalité.' },
103
- { type: 'tip', title: 'La Formule de l\'Alibi Irréfutable', html: '<strong>Le Sujet Dissocié :</strong> Vous n\'êtes jamais le coupable. C\'est "le Wi-Fi", "mon chat", "l\'univers". Déplacez la responsabilité vers une entité externe.<br><strong>L\'Action Hyperbolique :</strong> La situation doit être assez absurde ou technique pour que personne ne demande de détails.<br><strong>Le Blocage Physique :</strong> Le résultat final doit être binaire : soit j\'y vais, soit je reste chez moi.' },
102
+ { type: 'paragraph', html: 'Alors que le FOMO (Fear of Missing Out) a dominé la dernière décennie, les experts du bien-être numérique prônent désormais le <strong>JOMO: La Joie de Passer à Côté</strong>. Il ne s\'agit pas d\'isolement, mais d\'intentionnalité.' },
103
+ { type: 'tip', title: 'La Formule de l\'Alibi Irréfutable', html: '<strong>Le Sujet Dissocié :</strong> Vous n\'êtes jamais le coupable. C\'est "le Wi-Fi", "mon chat", "l\'univers". Déplacez la responsabilité vers une entité externe.<br><strong>L\'Action Hyperbolique :</strong> La situation doit être assez absurde ou technique pour que personne ne demande de détails.<br><strong>Le Blocage Physique :</strong> Le résultat final doit être binaire: soit j\'y vais, soit je reste chez moi.' },
104
104
  { type: 'title', text: 'Une Brève Histoire de l\'Excuse', level: 3 },
105
105
  { type: 'list', items: [
106
106
  '<strong>Moyen Âge :</strong> "Mon cheval a perdu un fer" (Un classique indémodable).',
@@ -114,9 +114,7 @@ export const content: ExcuseGeneratorLocaleContent = {
114
114
  ]},
115
115
  ],
116
116
  faq,
117
- bibliography: [
118
- { name: 'Manifeste du Procrastinateur', url: 'https://example.com/manifesto' }
119
- ],
117
+ bibliography,
120
118
  howTo,
121
119
  schemas: [faqSchema as any, howToSchema as any, appSchema],
122
120
  };
@@ -1,4 +1,5 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
2
3
  import type { ExcuseGeneratorLocaleContent } from '../index';
3
4
 
4
5
  const slug = 'pembuat-alasan';
@@ -59,7 +60,6 @@ export const content: ExcuseGeneratorLocaleContent = {
59
60
  title,
60
61
  description,
61
62
  faqTitle: 'Pertanyaan yang Sering Diajukan',
62
- bibliographyTitle: 'Bibliografi Hiburan',
63
63
  ui: {
64
64
  title: 'Pembuat Alasan Surealis',
65
65
  description: 'Kalkulator alibi generasi berikutnya.',
@@ -114,9 +114,7 @@ export const content: ExcuseGeneratorLocaleContent = {
114
114
  ]},
115
115
  ],
116
116
  faq,
117
- bibliography: [
118
- { name: 'Manifesto Penunda', url: 'https://example.com/manifesto' }
119
- ],
117
+ bibliography,
120
118
  howTo,
121
119
  schemas: [faqSchema as any, howToSchema as any, appSchema],
122
120
  };
@@ -1,4 +1,5 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
2
3
  import type { ExcuseGeneratorLocaleContent } from '../index';
3
4
 
4
5
  const slug = 'generatore-di-scuse';
@@ -59,7 +60,6 @@ export const content: ExcuseGeneratorLocaleContent = {
59
60
  title,
60
61
  description,
61
62
  faqTitle: 'Domande Frequenti',
62
- bibliographyTitle: 'Bibliografia del Tempo Libero',
63
63
  ui: {
64
64
  title: 'Generatore di Scuse Surreali',
65
65
  description: 'Calcolatore di alibi di nuova generazione.',
@@ -114,9 +114,7 @@ export const content: ExcuseGeneratorLocaleContent = {
114
114
  ]},
115
115
  ],
116
116
  faq,
117
- bibliography: [
118
- { name: 'Manifesto del Procrastinatore', url: 'https://example.com/manifesto' }
119
- ],
117
+ bibliography,
120
118
  howTo,
121
119
  schemas: [faqSchema as any, howToSchema as any, appSchema],
122
120
  };
@@ -1,4 +1,5 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
2
3
  import type { ExcuseGeneratorLocaleContent } from '../index';
3
4
 
4
5
  const slug = 'excuse-generator';
@@ -59,7 +60,6 @@ export const content: ExcuseGeneratorLocaleContent = {
59
60
  title,
60
61
  description,
61
62
  faqTitle: 'よくある質問',
62
- bibliographyTitle: 'レジャーの参考文献',
63
63
  ui: {
64
64
  title: 'シュールな言い訳ジェネレーター',
65
65
  description: '次世代型アリバイ算出機。',
@@ -114,9 +114,7 @@ export const content: ExcuseGeneratorLocaleContent = {
114
114
  ]},
115
115
  ],
116
116
  faq,
117
- bibliography: [
118
- { name: '先延ばし屋の宣言', url: 'https://example.com/manifesto' }
119
- ],
117
+ bibliography,
120
118
  howTo,
121
119
  schemas: [faqSchema as any, howToSchema as any, appSchema],
122
120
  };
@@ -1,4 +1,5 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
2
3
  import type { ExcuseGeneratorLocaleContent } from '../index';
3
4
 
4
5
  const slug = 'excuse-generator';
@@ -59,7 +60,6 @@ export const content: ExcuseGeneratorLocaleContent = {
59
60
  title,
60
61
  description,
61
62
  faqTitle: '자주 묻는 질문',
62
- bibliographyTitle: '여가 참고 문헌',
63
63
  ui: {
64
64
  title: '초현실적 핑계 생성기',
65
65
  description: '차세대 알리바이 계산기.',
@@ -114,9 +114,7 @@ export const content: ExcuseGeneratorLocaleContent = {
114
114
  ]},
115
115
  ],
116
116
  faq,
117
- bibliography: [
118
- { name: '미루는 사람의 선언문', url: 'https://example.com/manifesto' }
119
- ],
117
+ bibliography,
120
118
  howTo,
121
119
  schemas: [faqSchema as any, howToSchema as any, appSchema],
122
120
  };
@@ -1,4 +1,5 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
2
3
  import type { ExcuseGeneratorLocaleContent } from '../index';
3
4
 
4
5
  const slug = 'smoezen-generator';
@@ -59,7 +60,6 @@ export const content: ExcuseGeneratorLocaleContent = {
59
60
  title,
60
61
  description,
61
62
  faqTitle: 'Veelgestelde Vragen',
62
- bibliographyTitle: 'Vrijetijdsbibliografie',
63
63
  ui: {
64
64
  title: 'Surreële Smoezen Generator',
65
65
  description: 'De alibi-calculator van de volgende generatie.',
@@ -114,9 +114,7 @@ export const content: ExcuseGeneratorLocaleContent = {
114
114
  ]},
115
115
  ],
116
116
  faq,
117
- bibliography: [
118
- { name: 'Manifest van de Uitsteller', url: 'https://example.com/manifesto' }
119
- ],
117
+ bibliography,
120
118
  howTo,
121
119
  schemas: [faqSchema as any, howToSchema as any, appSchema],
122
120
  };
@@ -1,4 +1,5 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
2
3
  import type { ExcuseGeneratorLocaleContent } from '../index';
3
4
 
4
5
  const slug = 'generator-wymowek';
@@ -59,7 +60,6 @@ export const content: ExcuseGeneratorLocaleContent = {
59
60
  title,
60
61
  description,
61
62
  faqTitle: 'Najczęściej Zadawane Pytania',
62
- bibliographyTitle: 'Bibliografia Czasu Wolnego',
63
63
  ui: {
64
64
  title: 'Surrealistyczny Generator Wymówek',
65
65
  description: 'Kalkulator alibi nowej generacji.',
@@ -97,15 +97,15 @@ export const content: ExcuseGeneratorLocaleContent = {
97
97
  },
98
98
  seo: [
99
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.' },
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
101
  { type: 'title', text: 'Renesans JOMO (Joy of Missing Out)', level: 3 },
102
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.' },
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
104
  { type: 'title', text: 'Krótka historia wymówki', level: 3 },
105
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”.',
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
109
  ]},
110
110
  { type: 'proscons', items: [
111
111
  { pro: 'Błyskawicznie łagodzi presję społeczną', con: 'Nadużywanie niszczy zaufanie' },
@@ -114,9 +114,7 @@ export const content: ExcuseGeneratorLocaleContent = {
114
114
  ]},
115
115
  ],
116
116
  faq,
117
- bibliography: [
118
- { name: 'Manifest Prokrastynatora', url: 'https://example.com/manifesto' }
119
- ],
117
+ bibliography,
120
118
  howTo,
121
119
  schemas: [faqSchema as any, howToSchema as any, appSchema],
122
120
  };
@@ -1,4 +1,5 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
2
3
  import type { ExcuseGeneratorLocaleContent } from '../index';
3
4
 
4
5
  const slug = 'gerador-de-desculpas';
@@ -59,7 +60,6 @@ export const content: ExcuseGeneratorLocaleContent = {
59
60
  title,
60
61
  description,
61
62
  faqTitle: 'Perguntas Frequentes',
62
- bibliographyTitle: 'Bibliografia de Lazer',
63
63
  ui: {
64
64
  title: 'Gerador de Desculpas Surreais',
65
65
  description: 'Calculadora de álibis de próxima geração.',
@@ -114,9 +114,7 @@ export const content: ExcuseGeneratorLocaleContent = {
114
114
  ]},
115
115
  ],
116
116
  faq,
117
- bibliography: [
118
- { name: 'Manifesto do Procrastinador', url: 'https://example.com/manifesto' }
119
- ],
117
+ bibliography,
120
118
  howTo,
121
119
  schemas: [faqSchema as any, howToSchema as any, appSchema],
122
120
  };
@@ -1,4 +1,5 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
2
3
  import type { ExcuseGeneratorLocaleContent } from '../index';
3
4
 
4
5
  const slug = 'generator-otgovorki';
@@ -59,7 +60,6 @@ export const content: ExcuseGeneratorLocaleContent = {
59
60
  title,
60
61
  description,
61
62
  faqTitle: 'Часто задаваемые вопросы',
62
- bibliographyTitle: 'Библиография досуга',
63
63
  ui: {
64
64
  title: 'Сюрреалистичный генератор отговорок',
65
65
  description: 'Калькулятор алиби нового поколения.',
@@ -97,15 +97,15 @@ export const content: ExcuseGeneratorLocaleContent = {
97
97
  },
98
98
  seo: [
99
99
  { type: 'title', text: 'Научное искусство идеальной отговорки', level: 2 },
100
- { type: 'paragraph', html: 'Мы живем в эпоху гиперподключенности. Телефон вибрирует, часы присылают уведомления, а ваш социальный календарь напоминает игру в Тетрис за шаг до проигрыша. Давление говорить «да» всему вокруг создало эпидемию социального истощения.' },
100
+ { type: 'paragraph', html: 'Мы живем в эпоху гиперподключенности. Телефон вибрирует, часы присылают уведомления, а ваш социальный календарь напоминает игру в Тетрис за шаг до проигрыша. Давление говорить \"да\" всему вокруг создало эпидемию социального истощения.' },
101
101
  { type: 'title', text: 'Ренессанс JOMO (Радость от упущенного)', level: 3 },
102
102
  { type: 'paragraph', html: 'В то время как FOMO (страх что-то упустить) доминировал в прошлом десятилетии, эксперты по цифровому благополучию теперь выступают за <strong>JOMO: радость от того, что вы что-то пропустили</strong>. Это не про изоляцию, а про осознанность.' },
103
- { type: 'tip', title: 'Формула неопровержимого алиби', html: '<strong>Отстраненный субъект:</strong> вы никогда не виноваты. Это «wi-fi», «мой кот» или «вселенная». Переложите вину на внешние силы.<br><strong>Гиперболизированное действие:</strong> ситуация должна быть достаточно абсурдной или технически сложной, чтобы никто не захотел уточнять детали.<br><strong>Физическая преграда:</strong> итоговый результат должен быть бинарным: либо я иду, либо остаюсь дома.' },
103
+ { type: 'tip', title: 'Формула неопровержимого алиби', html: '<strong>Отстраненный субъект:</strong> вы никогда не виноваты. Это \"wi-fi\", \"мой кот\" или \"вселенная\". Переложите вину на внешние силы.<br><strong>Гиперболизированное действие:</strong> ситуация должна быть достаточно абсурдной или технически сложной, чтобы никто не захотел уточнять детали.<br><strong>Физическая преграда:</strong> итоговый результат должен быть бинарным: либо я иду, либо остаюсь дома.' },
104
104
  { type: 'title', text: 'Краткая история отговорки', level: 3 },
105
105
  { type: 'list', items: [
106
- '<strong>Средние века:</strong> «Моя лошадь потеряла подкову» (нестареющая классика).',
107
- '<strong>Промышленная революция:</strong> «Паровой двигатель перегрелся».',
108
- '<strong>Цифровая эра:</strong> «Интернет пропал прямо посреди обновления».'
106
+ '<strong>Средние века:</strong> \"Моя лошадь потеряла подкову\" (нестареющая классика).',
107
+ '<strong>Промышленная революция:</strong> \"Паровой двигатель перегрелся\".',
108
+ '<strong>Цифровая эра:</strong> \"Интернет пропал прямо посреди обновления\".'
109
109
  ]},
110
110
  { type: 'proscons', items: [
111
111
  { pro: 'Мгновенно снимает социальное давление', con: 'Чрезмерное использование разрушает доверие' },
@@ -114,9 +114,7 @@ export const content: ExcuseGeneratorLocaleContent = {
114
114
  ]},
115
115
  ],
116
116
  faq,
117
- bibliography: [
118
- { name: 'Манифест прокрастинатора', url: 'https://example.com/manifesto' }
119
- ],
117
+ bibliography,
120
118
  howTo,
121
119
  schemas: [faqSchema as any, howToSchema as any, appSchema],
122
120
  };
@@ -1,4 +1,5 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
2
3
  import type { ExcuseGeneratorLocaleContent } from '../index';
3
4
 
4
5
  const slug = 'ursaktsgenerator';
@@ -59,7 +60,6 @@ export const content: ExcuseGeneratorLocaleContent = {
59
60
  title,
60
61
  description,
61
62
  faqTitle: 'Vanliga frågor',
62
- bibliographyTitle: 'Fritidsbibliografi',
63
63
  ui: {
64
64
  title: 'Surrealistisk Ursaktsgenerator',
65
65
  description: 'Nästa generations alibi-kalkylator.',
@@ -114,9 +114,7 @@ export const content: ExcuseGeneratorLocaleContent = {
114
114
  ]},
115
115
  ],
116
116
  faq,
117
- bibliography: [
118
- { name: 'Prokrastinerarens manifest', url: 'https://example.com/manifesto' }
119
- ],
117
+ bibliography,
120
118
  howTo,
121
119
  schemas: [faqSchema as any, howToSchema as any, appSchema],
122
120
  };
@@ -1,4 +1,5 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
2
3
  import type { ExcuseGeneratorLocaleContent } from '../index';
3
4
 
4
5
  const slug = 'bahane-ureteci';
@@ -59,7 +60,6 @@ export const content: ExcuseGeneratorLocaleContent = {
59
60
  title,
60
61
  description,
61
62
  faqTitle: 'Sıkça Sorulan Sorular',
62
- bibliographyTitle: 'Boş Zaman Kaynakçası',
63
63
  ui: {
64
64
  title: 'Gerçeküstü Bahane Üreteci',
65
65
  description: 'Yeni nesil alibi hesaplayıcı.',
@@ -114,9 +114,7 @@ export const content: ExcuseGeneratorLocaleContent = {
114
114
  ]},
115
115
  ],
116
116
  faq,
117
- bibliography: [
118
- { name: 'Erteleyicinin Manifestosu', url: 'https://example.com/manifesto' }
119
- ],
117
+ bibliography,
120
118
  howTo,
121
119
  schemas: [faqSchema as any, howToSchema as any, appSchema],
122
120
  };