@jjlmoya/utils-alcohol 1.13.0 → 1.15.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 (94) hide show
  1. package/package.json +59 -58
  2. package/src/category/i18n/id.ts +28 -0
  3. package/src/category/i18n/sv.ts +19 -0
  4. package/src/category/index.ts +2 -0
  5. package/src/tests/faq_count.test.ts +12 -10
  6. package/src/tests/i18n_coverage.test.ts +36 -0
  7. package/src/tests/locale_completeness.test.ts +42 -0
  8. package/src/tests/no_h1_in_components.test.ts +48 -0
  9. package/src/tests/schemas_fulfillment.test.ts +23 -0
  10. package/src/tests/seo_length.test.ts +3 -34
  11. package/src/tests/title_quality.test.ts +55 -0
  12. package/src/tests/tool_validation.test.ts +4 -4
  13. package/src/tool/alcoholClearance/i18n/de.ts +205 -0
  14. package/src/tool/alcoholClearance/i18n/en.ts +22 -1
  15. package/src/tool/alcoholClearance/i18n/es.ts +22 -1
  16. package/src/tool/alcoholClearance/i18n/fr.ts +22 -1
  17. package/src/tool/alcoholClearance/i18n/id.ts +205 -0
  18. package/src/tool/alcoholClearance/i18n/it.ts +180 -0
  19. package/src/tool/alcoholClearance/i18n/ja.ts +205 -0
  20. package/src/tool/alcoholClearance/i18n/ko.ts +205 -0
  21. package/src/tool/alcoholClearance/i18n/nl.ts +205 -0
  22. package/src/tool/alcoholClearance/i18n/pl.ts +205 -0
  23. package/src/tool/alcoholClearance/i18n/pt.ts +205 -0
  24. package/src/tool/alcoholClearance/i18n/ru.ts +205 -0
  25. package/src/tool/alcoholClearance/i18n/sv.ts +205 -0
  26. package/src/tool/alcoholClearance/i18n/tr.ts +180 -0
  27. package/src/tool/alcoholClearance/i18n/zh.ts +205 -0
  28. package/src/tool/alcoholClearance/index.ts +13 -1
  29. package/src/tool/beerCooler/i18n/de.ts +197 -0
  30. package/src/tool/beerCooler/i18n/en.ts +25 -4
  31. package/src/tool/beerCooler/i18n/es.ts +25 -4
  32. package/src/tool/beerCooler/i18n/fr.ts +25 -4
  33. package/src/tool/beerCooler/i18n/id.ts +197 -0
  34. package/src/tool/beerCooler/i18n/it.ts +197 -0
  35. package/src/tool/beerCooler/i18n/ja.ts +197 -0
  36. package/src/tool/beerCooler/i18n/ko.ts +197 -0
  37. package/src/tool/beerCooler/i18n/nl.ts +197 -0
  38. package/src/tool/beerCooler/i18n/pl.ts +197 -0
  39. package/src/tool/beerCooler/i18n/pt.ts +197 -0
  40. package/src/tool/beerCooler/i18n/ru.ts +197 -0
  41. package/src/tool/beerCooler/i18n/sv.ts +197 -0
  42. package/src/tool/beerCooler/i18n/tr.ts +197 -0
  43. package/src/tool/beerCooler/i18n/zh.ts +197 -0
  44. package/src/tool/beerCooler/index.ts +13 -1
  45. package/src/tool/carbonationCalculator/i18n/de.ts +200 -0
  46. package/src/tool/carbonationCalculator/i18n/en.ts +22 -1
  47. package/src/tool/carbonationCalculator/i18n/es.ts +22 -1
  48. package/src/tool/carbonationCalculator/i18n/fr.ts +22 -1
  49. package/src/tool/carbonationCalculator/i18n/id.ts +200 -0
  50. package/src/tool/carbonationCalculator/i18n/it.ts +200 -0
  51. package/src/tool/carbonationCalculator/i18n/ja.ts +200 -0
  52. package/src/tool/carbonationCalculator/i18n/ko.ts +200 -0
  53. package/src/tool/carbonationCalculator/i18n/nl.ts +200 -0
  54. package/src/tool/carbonationCalculator/i18n/pl.ts +200 -0
  55. package/src/tool/carbonationCalculator/i18n/pt.ts +200 -0
  56. package/src/tool/carbonationCalculator/i18n/ru.ts +200 -0
  57. package/src/tool/carbonationCalculator/i18n/sv.ts +200 -0
  58. package/src/tool/carbonationCalculator/i18n/tr.ts +200 -0
  59. package/src/tool/carbonationCalculator/i18n/zh.ts +200 -0
  60. package/src/tool/carbonationCalculator/index.ts +13 -1
  61. package/src/tool/cocktailBalancer/i18n/de.ts +222 -0
  62. package/src/tool/cocktailBalancer/i18n/en.ts +23 -2
  63. package/src/tool/cocktailBalancer/i18n/es.ts +23 -2
  64. package/src/tool/cocktailBalancer/i18n/fr.ts +23 -2
  65. package/src/tool/cocktailBalancer/i18n/id.ts +222 -0
  66. package/src/tool/cocktailBalancer/i18n/it.ts +222 -0
  67. package/src/tool/cocktailBalancer/i18n/ja.ts +222 -0
  68. package/src/tool/cocktailBalancer/i18n/ko.ts +222 -0
  69. package/src/tool/cocktailBalancer/i18n/nl.ts +222 -0
  70. package/src/tool/cocktailBalancer/i18n/pl.ts +222 -0
  71. package/src/tool/cocktailBalancer/i18n/pt.ts +222 -0
  72. package/src/tool/cocktailBalancer/i18n/ru.ts +222 -0
  73. package/src/tool/cocktailBalancer/i18n/sv.ts +222 -0
  74. package/src/tool/cocktailBalancer/i18n/tr.ts +222 -0
  75. package/src/tool/cocktailBalancer/i18n/zh.ts +222 -0
  76. package/src/tool/cocktailBalancer/index.ts +13 -1
  77. package/src/tool/partyKeg/i18n/de.ts +187 -0
  78. package/src/tool/partyKeg/i18n/en.ts +22 -1
  79. package/src/tool/partyKeg/i18n/es.ts +22 -1
  80. package/src/tool/partyKeg/i18n/fr.ts +23 -2
  81. package/src/tool/partyKeg/i18n/id.ts +187 -0
  82. package/src/tool/partyKeg/i18n/it.ts +187 -0
  83. package/src/tool/partyKeg/i18n/ja.ts +187 -0
  84. package/src/tool/partyKeg/i18n/ko.ts +187 -0
  85. package/src/tool/partyKeg/i18n/nl.ts +187 -0
  86. package/src/tool/partyKeg/i18n/pl.ts +187 -0
  87. package/src/tool/partyKeg/i18n/pt.ts +187 -0
  88. package/src/tool/partyKeg/i18n/ru.ts +187 -0
  89. package/src/tool/partyKeg/i18n/sv.ts +187 -0
  90. package/src/tool/partyKeg/i18n/tr.ts +187 -0
  91. package/src/tool/partyKeg/i18n/zh.ts +187 -0
  92. package/src/tool/partyKeg/index.ts +13 -1
  93. package/src/types.ts +1 -1
  94. package/src/tests/content_mandatory.test.ts +0 -32
@@ -0,0 +1,222 @@
1
+ import type { WithContext, SoftwareApplication, FAQPage, HowTo } from 'schema-dts';
2
+ import type { CocktailBalancerUI, CocktailBalancerLocaleContent } from '../index';
3
+
4
+ const slug = 'cocktail-balancer';
5
+ const title = 'Cocktail Balancer: Asitlik Kanunu';
6
+ const description = 'Koktailleriniz için tatlı ve asit arasındaki mükemmel dengeyi hesaplayın. Miksoloji\'nin altın oranını keşfedin.';
7
+
8
+ const ui: CocktailBalancerUI = {
9
+ title: 'Cocktail Balancer',
10
+ presetsBtn: 'Tarifler',
11
+ saveBtn: 'Kaydet',
12
+ resetBtn: 'Sıfırla',
13
+ emptyStateTitle: 'Çalışma Tezgahınız Boş',
14
+ emptyStateDescription: 'Koktail dengenizi gerçek zamanlı olarak analiz etmek için malzeme ekleyin.',
15
+ addBtn: 'Malzeme Ekle',
16
+ addMoreBtn: 'Başka Malzeme Ekle',
17
+ flavorProfileTitle: 'Tat Profili',
18
+ volLabel: 'Hacim',
19
+ sugarLabel: 'Şeker',
20
+ colorLabel: 'Renk',
21
+ sourLawTitle: 'Asitlik Kanunu',
22
+ acidDryLabel: 'Asit (Kuru)',
23
+ balanceLabel: 'Denge',
24
+ sweetLabel: 'Tatlı',
25
+ aiSuggestionTitle: 'YZ Önerisi',
26
+ addIngredientTitle: 'Malzeme Ekle',
27
+ searchPlaceholder: 'Rom, limon, şurup ara...',
28
+ presetsTitle: 'Tarifler & Ön Ayarlar',
29
+ savedSectionTitle: 'Kaydedilen',
30
+ classicsSectionTitle: 'Klasikler',
31
+ confirmDeleteTitle: 'Hepsini sil?',
32
+ confirmDeleteText: 'Bu, tüm malzemeleri çalışma tezgahınızdan kaldıracaktır. Bu işlem geri alınamaz.',
33
+ cancelBtn: 'İptal',
34
+ deleteBtn: 'Sil',
35
+ verdictSpiritSeco: 'İçkili / Kuru',
36
+ verdictSoloDulce: 'Sadece Tatlı (Old Fashioned)',
37
+ verdictMuyAcido: 'Çok Asitli / Kemik Kuru',
38
+ verdictAcido: 'Asitli / Tatlı',
39
+ verdictEquilibrado: 'Dengeli (Asitli)',
40
+ verdictDulce: 'Tatlı / Ticari',
41
+ verdictEmpalagoso: 'Çok Tatlı',
42
+ fixAddBitters: 'Acı Eksik',
43
+ fixAddSugar: 'Çok Asitli',
44
+ fixAddAcid: 'Çok Tatlı'
45
+ };
46
+
47
+ const faqTitle = 'Sıkça Sorulan Sorular';
48
+ const bibliographyTitle = 'Kaynakça ve Kaynaklar';
49
+
50
+ const faq: CocktailBalancerLocaleContent['faq'] = [
51
+ {
52
+ question: "'Asitlik Kanunu' nedir?",
53
+ answer: "Üç öğeyi dengelemek için miksölojinin altın oranıdır: güçlü taban (spirt), asitlik (sitruslar) ve tatllık (şuruplar). Klasik bir tarif genellikle 2:1:1 oranını (Güçlü:Asitli:Tatlı) takip eder, ancak bu güç ve yoğunluğa bağlı olarak değişir.",
54
+ },
55
+ {
56
+ question: "Seyreltme koktail dengesini nasıl etkiler?",
57
+ answer: "Buz sadece soğutmakla kalmaz; spiritin aromatlarını açan ve asitlik ile tatllık doruklarını yumuşatan su (seyreltme) ekler. Shakerlerde dengeli bir koktail bardakta çok uzun süre buz kalırsa dengesiz hale gelebilir.",
58
+ },
59
+ {
60
+ question: "Evde yaptığım koktaillerim barda olanlar gibi neden tatmıyor?",
61
+ answer: "Genellikle şeker ve sitrusların pH değeri arasında denge eksikliğinden kaynaklanır. Limonlar mevsime bağlı olarak asitlikte değişir. Hesaplayıcımız, kullanılan suyun hacmine göre tamamen şurup miktarını ayarlamanıza yardımcı olur.",
62
+ },
63
+ {
64
+ question: "Brix dereceleri nedir ve koktaillerde neden önemlidir?",
65
+ answer: "Brix, bir sıvıdaki çözünmüş şeker miktarını ölçen bir ölçektir. Basit şurup (1:1) yaklaşık 50 °Brix'tedir; zengin şurup (2:1) 66 °Brix'i aşar. Brix ne kadar yüksekse, birim hacim başına o kadar çok gövde ve tatllık sağlar. Bunu bilmek, dengeyi bozmadan tariflerde şurupları değiştirmenizi sağlar.",
66
+ },
67
+ ];
68
+
69
+ const howTo: CocktailBalancerLocaleContent['howTo'] = [
70
+ {
71
+ name: "Alkollü tabanı seçin",
72
+ text: "Ana spiriti (Cin, Rom, Viski) veri tabanımızdan seçerek gövde ve alkol katkısını bilin.",
73
+ },
74
+ {
75
+ name: "Asitlik ajanını girin",
76
+ text: "Limon, limonata veya grapefruit suyu hacmini ekleyin. Hesaplayıcı, karışımdaki pH etkisini analiz edecektir.",
77
+ },
78
+ {
79
+ name: "Tatlı bileşeni ayarlayın",
80
+ text: "Şurup türünü (basit, 2:1, agave) girin ve denge göstergesi gerçek zamanlı olarak hareket ederken izleyin.",
81
+ },
82
+ {
83
+ name: "Mükemmel servis",
84
+ text: "Aracının nihai kararını gözden geçirin: asitlik oranı, seyreltme sonrası tahmini ABV ve düzeltme önerileri. Taze buz ile servis yapın ve sitruslar veya şurupu tadınıza göre ayarlayın.",
85
+ },
86
+ ];
87
+
88
+ const bibliography: CocktailBalancerLocaleContent['bibliography'] = [
89
+ {
90
+ name: "Liquid Intelligence: The Art and Science of the Perfect Cocktail",
91
+ url: "https://www.indigo.ca/en-ca/liquid-intelligence-the-art-and-science-of-the-perfect-cocktail/9780393089035.html",
92
+ },
93
+ {
94
+ name: "Cocktails: The Science of Shaking",
95
+ url: "https://cookingissues.com/2009/07/22/cocktails-the-science-of-shaking/",
96
+ },
97
+ {
98
+ name: "Cocktail Balance - Difford's Guide",
99
+ url: "https://www.diffordsguide.com/encyclopedia/1066/cocktails/cocktail-balance",
100
+ },
101
+ ];
102
+
103
+ const seo: CocktailBalancerLocaleContent['seo'] = [
104
+ {
105
+ type: 'title',
106
+ text: 'Moleküler Mühendislik ve Sıvı Dengesi',
107
+ level: 2
108
+ },
109
+ {
110
+ type: 'paragraph',
111
+ html: 'Sezgi matematiğin karşılaştığı dijital laboratuvara hoş geldiniz. Bu araç basit bir tarif kitabı değil; koktaillerinizin moleküler yapısını gerçek zamanlı olarak ayrıştırmak ve analiz etmek için tasarlanmış <strong>ileri düzey fiziko-kimyasal bir simülatördür</strong>. Sitrusların her damlası, spiritinin her ölçümü, şurupun her gramı, içeceğinizin bir başyapı mı yoksa hayal kırıklığı verici bir başarısızlık mı olacağını belirleyen değişmez kimya yasalarına göre etkileşime girer.'
112
+ },
113
+ {
114
+ type: 'stats',
115
+ items: [
116
+ { label: 'Limonata', value: '~6% Asit', icon: 'mdi:fruit-citrus' },
117
+ { label: 'Limon', value: '~6% Asit', icon: 'mdi:fruit-citrus' },
118
+ { label: 'Greyfurt', value: '~1-2% Asit', icon: 'mdi:fruit-citrus' }
119
+ ],
120
+ columns: 3
121
+ },
122
+ {
123
+ type: 'card',
124
+ title: 'Asitliğin Bilimi',
125
+ icon: 'mdi:fruit-citrus',
126
+ html: 'Asitlik sadece bir tat değil; dengeli bir koktailin yapısal omurgasıdır. Doğru asitlik olmadan, bir içecek düz, tek boyutlu ve unutulur hale gelir. Algoritmamız, tat alma yüzeyinde reçetelerinizi tüm bir denge noktası kadar kaydırabilen mevsimsel sitrus pH varyasyonlarını hesaba katarak, Pers limesi ile Eureka limonunun titre edilebilir asitliğini ayırt eder.'
127
+ },
128
+ {
129
+ type: 'card',
130
+ title: 'Brix Kontrolü (Tatllık)',
131
+ icon: 'mdi:spoon-sugar',
132
+ html: 'Koktailinizin gövdesi ve dokusu tamamen çözünmüş şekere bağlıdır. Basit şurup (1:1), zengin şurup (2:1), bal veya agave nektarından çok farklı davranır. Her tatlandırıcı, içeceğin dili nasıl kapladığını etkileyen farklı bir Brix derecesine ve viskoziteye sahiptir. Hesaplayıcımız, son ağız hissini ve tatllık algısını tahmin etmek için çözünen şekerin kesin gramlarını hesaplar.'
133
+ },
134
+ {
135
+ type: 'card',
136
+ title: 'Termodinamik ve Seyreltme',
137
+ icon: 'mdi:water-percent',
138
+ html: 'Çalkalanan bir koktail, buz sıcaklığı, çalkalama tekniği ve süresi bağlı olarak %25-40 seyreltilir. Bu su eklenmesi bir kusur değildir; aromatları açan ve alkolün kenarını yumuşatan temel bir bileşendir. Hesaplayıcımız, seyreltme sonrası son ABV\'yi tahmin eder, böylece tam olarak amaçlanan güç ve tat dengesine sahip içecekler tasarlayabilirsiniz.'
139
+ },
140
+ {
141
+ type: 'title',
142
+ text: 'Temel Oranın Ötesinde',
143
+ level: 2
144
+ },
145
+ {
146
+ type: 'paragraph',
147
+ html: 'Birçok barista klasik 2:1:1 kuralını (2 kısım spirt, 1 kısım asitli, 1 kısım tatlı) öğrenir ve bunu evrensel gerçek olarak ele alır. Ancak <strong>kimya çok daha nüanslıdır</strong>. Sicilya\'dan bir limon Meksika\'dan bir limondan farklı asitlik içerir. Cointreau gibi bir triple sec, mavi Curaçao\'dan köklü olarak farklı davranır. Aynı tarif bir hafta mükemmel dengeli ve sonraki hafta, sadece mevsimsel meyve değişimi nedeniyle insanlık dışı asitli olabilir.'
148
+ },
149
+ {
150
+ type: 'paragraph',
151
+ html: 'Bu dengeleyici bu naif engelleri kırıyor. Belirli malzemeleri girerek, asitlik ve tatllık vektörlerini dinamik olarak ayarlayarak kreasyonunuzun kesin bir duyusal haritasını sunacak yaşayan bir veri tabanına başvurursunuz. Tahminde bulunmayı bırakın ve koktaillerinizi dünya sınıfı mekanlarındaki barıştaların her serviste kullandıkları bilimsel titizlikle tasarlamaya başlayın.'
152
+ },
153
+ {
154
+ type: 'summary',
155
+ title: 'Bu araç kimin için?',
156
+ items: [
157
+ 'Profesyonel Barista: Tarifler standartlaştırın ve tekrarlanabilir tutarlılıkla imza menüleri oluşturun.',
158
+ 'Ev Meraklıları: Tahminde bulunmayı bırakın ve koktaillerinizin başarılı veya başarısız olmasının nedenini anlamaya başlayın.',
159
+ 'İçecek Geliştirici: Pahalı üretim çalışmalarından önce yeni tat kavramlarını hızlı bir şekilde prototipte çıkartın.'
160
+ ]
161
+ },
162
+ {
163
+ type: 'diagnostic',
164
+ title: 'Altın Bölge',
165
+ icon: 'mdi:star',
166
+ variant: 'success',
167
+ badge: 'Hedef',
168
+ html: 'Bu nihai hedef: şekerin asitliğin saldırganlığını nötrleştirdiği kontrollü bir pH, taban spiritinin temel yağlarını ve aromatik bileşikleri maskelemeden. Bu kesin denge - Daiquiri, Margarita, Sidecar - tat kimyasının temel yasalarına uyduğu için on yıllara dayanmış içecekler yaşadığı yerdir.'
169
+ },
170
+ {
171
+ type: 'tip',
172
+ title: 'Uzman İpucu: Her Zaman Taze Sitrus Kullanın',
173
+ html: 'Her zaman sitrusu son anda sıkın. Limon ve limonata suyu hızla oksidize olur, sıkıldıktan 20-30 dakika içinde canlı asitliği kaybeder. Gerçekten taze suyla yapılan bir koktail, her zaman tat alma yüzeyinde hiçbir şişeleştirilmiş ürünün çoğalttığı parlaklık ve canlılığa sahip olacaktır. Suyun verimini en üst düzeye çıkarmak için oda sıcaklığındaki meyveni kullanın.'
174
+ }
175
+ ];
176
+
177
+ const schemas: CocktailBalancerLocaleContent['schemas'] = [
178
+ {
179
+ '@context': 'https://schema.org',
180
+ '@type': 'FAQPage',
181
+ mainEntity: faq.map((item) => ({
182
+ '@type': 'Question',
183
+ name: item.question,
184
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
185
+ })),
186
+ } as WithContext<FAQPage>,
187
+ {
188
+ '@context': 'https://schema.org',
189
+ '@type': 'HowTo',
190
+ name: title,
191
+ description: description,
192
+ step: howTo.map((step, i) => ({
193
+ '@type': 'HowToStep',
194
+ position: i + 1,
195
+ name: step.name,
196
+ text: step.text,
197
+ })),
198
+ } as WithContext<HowTo>,
199
+ {
200
+ '@context': 'https://schema.org',
201
+ '@type': 'SoftwareApplication',
202
+ name: title,
203
+ description: description,
204
+ applicationCategory: 'UtilityApplication',
205
+ operatingSystem: 'Web',
206
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
207
+ } as WithContext<SoftwareApplication>,
208
+ ];
209
+
210
+ export const content: CocktailBalancerLocaleContent = {
211
+ slug,
212
+ title,
213
+ description,
214
+ ui,
215
+ seo,
216
+ faqTitle,
217
+ faq,
218
+ bibliographyTitle,
219
+ bibliography,
220
+ howTo,
221
+ schemas,
222
+ };
@@ -0,0 +1,222 @@
1
+ import type { WithContext, SoftwareApplication, FAQPage, HowTo } from 'schema-dts';
2
+ import type { CocktailBalancerUI, CocktailBalancerLocaleContent } from '../index';
3
+
4
+ const slug = 'cocktail-balancer';
5
+ const title = '鸡尾酒平衡器:酸法则';
6
+ const description = '计算你的鸡尾酒中甜与酸的完美平衡。掌握调酒术的黄金比例。';
7
+
8
+ const ui: CocktailBalancerUI = {
9
+ title: '鸡尾酒平衡器',
10
+ presetsBtn: '食谱',
11
+ saveBtn: '保存',
12
+ resetBtn: '重置',
13
+ emptyStateTitle: '你的工作台是空的',
14
+ emptyStateDescription: '添加材料以实时分析你的鸡尾酒平衡。',
15
+ addBtn: '添加材料',
16
+ addMoreBtn: '再添加一种材料',
17
+ flavorProfileTitle: '风味概况',
18
+ volLabel: '体积',
19
+ sugarLabel: '糖',
20
+ colorLabel: '颜色',
21
+ sourLawTitle: '酸法则',
22
+ acidDryLabel: '酸(干)',
23
+ balanceLabel: '平衡',
24
+ sweetLabel: '甜',
25
+ aiSuggestionTitle: 'AI建议',
26
+ addIngredientTitle: '添加材料',
27
+ searchPlaceholder: '搜索朗姆酒、酸橙、糖浆...',
28
+ presetsTitle: '食谱和预设',
29
+ savedSectionTitle: '我的已保存',
30
+ classicsSectionTitle: '经典',
31
+ confirmDeleteTitle: '删除所有内容?',
32
+ confirmDeleteText: '这将删除工作台上的所有材料。此操作无法撤销。',
33
+ cancelBtn: '取消',
34
+ deleteBtn: '删除',
35
+ verdictSpiritSeco: '烈酒 / 干',
36
+ verdictSoloDulce: '仅甜味(老酒)',
37
+ verdictMuyAcido: '过酸 / 极干',
38
+ verdictAcido: '酸 / 尖酸',
39
+ verdictEquilibrado: '平衡(酸)',
40
+ verdictDulce: '甜 / 商业',
41
+ verdictEmpalagoso: '过甜',
42
+ fixAddBitters: '缺少苦味',
43
+ fixAddSugar: '过酸',
44
+ fixAddAcid: '过甜'
45
+ };
46
+
47
+ const faqTitle = '常见问题';
48
+ const bibliographyTitle = '参考文献和来源';
49
+
50
+ const faq: CocktailBalancerLocaleContent['faq'] = [
51
+ {
52
+ question: "'酸法则'是什么?",
53
+ answer: "这是调酒术的黄金比例,它平衡三个要素:强劲的基础(烈酒)、酸性(柑橘类)和甜度(糖浆)。经典配方通常遵循2:1:1的比例(强:酸:甜),尽管这会根据强度和密度而变化。",
54
+ },
55
+ {
56
+ question: "稀释如何影响鸡尾酒的平衡?",
57
+ answer: "冰不仅仅冷却;它添加水(稀释),这打开烈酒的香气并柔和酸度和甜度的峰值。在摇杯器中平衡的鸡尾酒,如果在玻璃杯中放置太长时间的冰,可能会变得不平衡。",
58
+ },
59
+ {
60
+ question: "为什么我自制的鸡尾酒尝起来不像酒吧里的那样?",
61
+ answer: "通常是由于糖和柑橘pH之间缺乏平衡。柠檬根据季节而异。我们的计算器可帮助你根据使用的果汁体积调整确切的糖浆量。",
62
+ },
63
+ {
64
+ question: "什么是勃利克斯度,为什么它在鸡尾酒中很重要?",
65
+ answer: "勃利克斯是测量液体中溶解糖含量的量表。简单糖浆(1:1)约为50°Brix;丰富糖浆(2:1)超过66°Brix。勃利克斯越高,每单位体积贡献的身体和甜度就越多。了解这一点可以在不破坏平衡的情况下在配方中交换糖浆。",
66
+ },
67
+ ];
68
+
69
+ const howTo: CocktailBalancerLocaleContent['howTo'] = [
70
+ {
71
+ name: "选择酒精基础",
72
+ text: "从我们的数据库中选择主要烈酒(金酒、朗姆酒、威士忌),以了解其风格和酒精含量。",
73
+ },
74
+ {
75
+ name: "输入酸性代理",
76
+ text: "添加柠檬汁、酸橙汁或葡萄柚汁的体积。计算器将分析pH对混合物的影响。",
77
+ },
78
+ {
79
+ name: "调整甜味成分",
80
+ text: "输入糖浆类型(简单、2:1、龙舌兰),并观看平衡指示器实时移动。",
81
+ },
82
+ {
83
+ name: "完美服务",
84
+ text: "审查该工具的最终裁决:酸比率、稀释后的估计ABV和更正建议。配新鲜冰块一起上桌,根据口味调整柑橘或糖浆。",
85
+ },
86
+ ];
87
+
88
+ const bibliography: CocktailBalancerLocaleContent['bibliography'] = [
89
+ {
90
+ name: "Liquid Intelligence: The Art and Science of the Perfect Cocktail",
91
+ url: "https://www.indigo.ca/en-ca/liquid-intelligence-the-art-and-science-of-the-perfect-cocktail/9780393089035.html",
92
+ },
93
+ {
94
+ name: "Cocktails: The Science of Shaking",
95
+ url: "https://cookingissues.com/2009/07/22/cocktails-the-science-of-shaking/",
96
+ },
97
+ {
98
+ name: "Cocktail Balance - Difford's Guide",
99
+ url: "https://www.diffordsguide.com/encyclopedia/1066/cocktails/cocktail-balance",
100
+ },
101
+ ];
102
+
103
+ const seo: CocktailBalancerLocaleContent['seo'] = [
104
+ {
105
+ type: 'title',
106
+ text: '分子工程与液体平衡',
107
+ level: 2
108
+ },
109
+ {
110
+ type: 'paragraph',
111
+ html: '欢迎来到直觉与数学相遇的数字实验室。这个工具不是简单的食谱集;这是一个<strong>高级物理化学模拟器</strong>,旨在实时解构和分析你的鸡尾酒的分子结构。柑橘的每一滴、烈酒的每一克、糖浆的每一克都根据不变的化学定律相互作用,这决定了你的饮料是否会成为杰作或令人失望的失败。'
112
+ },
113
+ {
114
+ type: 'stats',
115
+ items: [
116
+ { label: '酸橙', value: '~6% 酸', icon: 'mdi:fruit-citrus' },
117
+ { label: '柠檬', value: '~6% 酸', icon: 'mdi:fruit-citrus' },
118
+ { label: '葡萄柚', value: '~1-2% 酸', icon: 'mdi:fruit-citrus' }
119
+ ],
120
+ columns: 3
121
+ },
122
+ {
123
+ type: 'card',
124
+ title: '酸度的科学',
125
+ icon: 'mdi:fruit-citrus',
126
+ html: '酸度不仅仅是一种味道;它是任何平衡的鸡尾酒的结构脊柱。没有适当的酸度,饮料就会变得平坦、单调且容易被遗忘。我们的算法区分波斯酸橙与尤里卡柠檬的可滴定酸度,同时考虑柑橘pH的季节变化,这可能会将你的食谱转移整个平衡点在味觉上。'
127
+ },
128
+ {
129
+ type: 'card',
130
+ title: '勃利克斯控制(甜度)',
131
+ icon: 'mdi:spoon-sugar',
132
+ html: '你的鸡尾酒的身体和质地完全取决于溶解的糖。简单糖浆(1:1)的行为与丰富糖浆(2:1)、蜂蜜或龙舌兰花蜜完全不同。每种甜味剂都有不同的勃利克斯度和粘度,影响饮料如何覆盖舌头。我们的计算器计算溶解糖的精确克数,以预测最终的口感和甜度感受。'
133
+ },
134
+ {
135
+ type: 'card',
136
+ title: '热力学与稀释',
137
+ icon: 'mdi:water-percent',
138
+ html: '摇晃的鸡尾酒根据冰温、摇晃技术和持续时间稀释25-40%。这种水的添加不是缺陷;这是打开香气并柔和酒精边缘的必需成分。我们的计算器估计稀释后的最终ABV,因此你可以设计具有精确预期强度和风味平衡的饮料。'
139
+ },
140
+ {
141
+ type: 'title',
142
+ text: '超越基本比例',
143
+ level: 2
144
+ },
145
+ {
146
+ type: 'paragraph',
147
+ html: '许多调酒师学习经典的2:1:1规则(2份烈酒、1份酸、1份甜)并将其视为普遍真理。然而,<strong>化学远更加细致</strong>。西西里岛的柠檬含有与墨西哥酸橙不同的酸度。像君度这样的三倍秒表现得与蓝色库拉索根本不同。同一个配方可能在一周内尝起来完美平衡,然后在下一周中令人难以忍受地酸,仅仅是由于季节水果变化。'
148
+ },
149
+ {
150
+ type: 'paragraph',
151
+ html: '这个平衡器突破了这些幼稚的障碍。通过输入你的具体材料,你查阅了一个生活数据库,该数据库动态调整酸度和甜度向量,以提供你的创意的精确感官地图。停止猜测,开始用世界级机构的调酒师在每次服务中使用的相同科学严谨性来设计你的鸡尾酒。'
152
+ },
153
+ {
154
+ type: 'summary',
155
+ title: '这个工具适合谁?',
156
+ items: [
157
+ '专业调酒师:标准化食谱并以可重复的一致性创建签名菜单。',
158
+ '家庭爱好者:停止猜测,开始理解为什么你的鸡尾酒成功或失败。',
159
+ '饮料开发者:在昂贵的生产运行之前快速原型新风味概念。'
160
+ ]
161
+ },
162
+ {
163
+ type: 'diagnostic',
164
+ title: '黄金区域',
165
+ icon: 'mdi:star',
166
+ variant: 'success',
167
+ badge: '目标',
168
+ html: '这是最终目标:糖中和酸的进攻而不掩盖基础烈酒的精油和芳香化合物的受控pH。这种精确的平衡是永恒的经典所在——代基里、玛格丽塔、边车——饮料因为服从味觉化学的基本定律而在几十年内幸存。'
169
+ },
170
+ {
171
+ type: 'tip',
172
+ title: '专家提示:始终使用新鲜柑橘',
173
+ html: '始终在最后一刻挤压柑橘。柠檬和酸橙汁迅速氧化,在挤压后20-30分钟内失去活跃的酸度。用真正新鲜果汁制成的鸡尾酒在味觉上将始终具有亮度和生命力,这是任何瓶装产品都无法复制的。在室温下使用水果以最大化果汁产量。'
174
+ }
175
+ ];
176
+
177
+ const schemas: CocktailBalancerLocaleContent['schemas'] = [
178
+ {
179
+ '@context': 'https://schema.org',
180
+ '@type': 'FAQPage',
181
+ mainEntity: faq.map((item) => ({
182
+ '@type': 'Question',
183
+ name: item.question,
184
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
185
+ })),
186
+ } as WithContext<FAQPage>,
187
+ {
188
+ '@context': 'https://schema.org',
189
+ '@type': 'HowTo',
190
+ name: title,
191
+ description: description,
192
+ step: howTo.map((step, i) => ({
193
+ '@type': 'HowToStep',
194
+ position: i + 1,
195
+ name: step.name,
196
+ text: step.text,
197
+ })),
198
+ } as WithContext<HowTo>,
199
+ {
200
+ '@context': 'https://schema.org',
201
+ '@type': 'SoftwareApplication',
202
+ name: title,
203
+ description: description,
204
+ applicationCategory: 'UtilityApplication',
205
+ operatingSystem: 'Web',
206
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
207
+ } as WithContext<SoftwareApplication>,
208
+ ];
209
+
210
+ export const content: CocktailBalancerLocaleContent = {
211
+ slug,
212
+ title,
213
+ description,
214
+ ui,
215
+ seo,
216
+ faqTitle,
217
+ faq,
218
+ bibliographyTitle,
219
+ bibliography,
220
+ howTo,
221
+ schemas,
222
+ };
@@ -52,9 +52,21 @@ export const cocktailBalancer: AlcoholToolEntry<CocktailBalancerUI> = {
52
52
  fg: 'mdi:fruit-citrus',
53
53
  },
54
54
  i18n: {
55
- es: () => import('./i18n/es').then((m) => m.content),
55
+ de: () => import('./i18n/de').then((m) => m.content),
56
56
  en: () => import('./i18n/en').then((m) => m.content),
57
+ es: () => import('./i18n/es').then((m) => m.content),
57
58
  fr: () => import('./i18n/fr').then((m) => m.content),
59
+ id: () => import('./i18n/id').then((m) => m.content),
60
+ it: () => import('./i18n/it').then((m) => m.content),
61
+ ja: () => import('./i18n/ja').then((m) => m.content),
62
+ ko: () => import('./i18n/ko').then((m) => m.content),
63
+ nl: () => import('./i18n/nl').then((m) => m.content),
64
+ pl: () => import('./i18n/pl').then((m) => m.content),
65
+ pt: () => import('./i18n/pt').then((m) => m.content),
66
+ ru: () => import('./i18n/ru').then((m) => m.content),
67
+ sv: () => import('./i18n/sv').then((m) => m.content),
68
+ tr: () => import('./i18n/tr').then((m) => m.content),
69
+ zh: () => import('./i18n/zh').then((m) => m.content),
58
70
  },
59
71
  };
60
72
 
@@ -0,0 +1,187 @@
1
+ import type { WithContext, SoftwareApplication, FAQPage, HowTo } from 'schema-dts';
2
+ import type { PartyKegUI, PartyKegLocaleContent } from '../index';
3
+
4
+ const slug = 'bier-eisrechner-party';
5
+ const title = 'Bier Eisrechner: Menge pro Person für Hochzeiten und Geburtstage';
6
+ const description = 'Kostenloses Tool zur Berechnung von Bier- und Eismengen basierend auf Gästen, Dauer und Temperatur. Perfekt für Hochzeiten, Geburtstage und Outdoorevents.';
7
+
8
+ const ui: PartyKegUI = {
9
+ calcStockTitle: 'Bestandsrechner',
10
+ beerIceSub: 'Bier & Eis für Events',
11
+ guestsLabel: 'Gäste',
12
+ durationLabel: 'Dauer',
13
+ hoursUnit: 'Stunden',
14
+ intensityLabel: 'Intensität',
15
+ chillLabel: 'Chill',
16
+ standardLabel: 'Standard',
17
+ partyLabel: 'Party',
18
+ tempLabel: 'Temperatur',
19
+ estimatedVolLabel: 'Geschätztes Volumen',
20
+ kegsLabel: 'Fässer',
21
+ iceRequiredLabel: 'Eis erforderlich',
22
+ bagsLabel: 'Beutel',
23
+ visualizationTitle: 'Bestandsvisualisierung',
24
+ optimalMsg: 'Optimale Bedingungen',
25
+ highMeltMsg: 'Hohe Schmelzrate erkannt',
26
+ highEfficiencyMsg: 'Kalt / Hohe Effizienz'
27
+ };
28
+
29
+ const faqTitle = 'Häufig gestellte Fragen';
30
+ const bibliographyTitle = 'Bibliographie und Quellen';
31
+
32
+ const faq: PartyKegLocaleContent['faq'] = [
33
+ {
34
+ question: "Wie viele Biere trinkt eine Person in 4 Stunden?",
35
+ answer: "Im Durchschnitt sollte man mit 5 Bieren pro Person für eine 4-Stunden-Veranstaltung rechnen. Dies geht von 2 Getränken in der ersten Stunde und je 1 in den verbleibenden Stunden aus.",
36
+ },
37
+ {
38
+ question: "Wie viel Eis brauche ich für 100 Biere?",
39
+ answer: "Du benötigst ungefähr 15–20 Kilogramm Eis (7–10 Beutel). Die praktische Regel lautet: 0,75 kg Eis pro Liter Getränk unter Normalbedingungen. Im Sommer oder im Freien über 25 °C solltest du mit 1 kg pro Liter rechnen: Die Umgebungswärme beschleunigt das Schmelzen erheblich, und dein Eis schmilzt viel schneller als erwartet.",
40
+ },
41
+ {
42
+ question: "Was ist der Unterschied zwischen einem Standard- und einem Party-Fass?",
43
+ answer: "Ein Standard-Fassfass fasst 50 Liter, was ungefähr 200 Portionen à 250 ml ergibt. Ein Party-Fass (Mini-Fass) fasst typischerweise 5 Liter — etwa 20 Portionen. Diese Größen zu kennen hilft dir, die Literangabe des Rechners in die Anzahl der zu kaufenden Behälter umzurechnen.",
44
+ },
45
+ {
46
+ question: "Warum brauche ich so viel Eis, wenn die Biere bereits kalt sind?",
47
+ answer: "Weil Abkühlung und Aufrechterhaltung zwei unterschiedliche Prozesse sind. Um eine Dose von 25 °C auf 4 °C abzukühlen, wird die Schmelzwärmemenge des Eises benötigt: etwa 334 kJ/kg. Einmal kalt, arbeitet das Eis weiterhin, um die Umgebungswärme auszugleichen. An einem Sommertag mit 35 °C kann Wärmeleitung in die Kühlbox etwa 1 kg Eis pro Liter Getränk alle 2–3 Stunden schmelzen. Deshalb reduziert Vorkühlen deiner Getränke vor der Party deinen Gesamteisverbrauch um die Hälfte.",
48
+ },
49
+ ];
50
+
51
+ const howTo: PartyKegLocaleContent['howTo'] = [
52
+ {
53
+ name: "Schätze die Anzahl der Gäste",
54
+ text: "Definiere, wie viele Personen teilnehmen werden. Unser Rechner passt die Mengen auf Basis statistischer Verbrauchsdurchschnitte an.",
55
+ },
56
+ {
57
+ name: "Definiere Dauer und Intensität",
58
+ text: "Gib an, wie viele Stunden das Event dauert und welches Tempo die Party hat (chill, standard oder intensiv).",
59
+ },
60
+ {
61
+ name: "Passe dich an die Umgebungstemperatur an",
62
+ text: "Die Außentemperatur ist entscheidend für die Eisberechnung. Je wärmer, desto höher muss die Schmelzrate sein, die wir ausgleichen müssen.",
63
+ },
64
+ ];
65
+
66
+ const bibliography: PartyKegLocaleContent['bibliography'] = [
67
+ {
68
+ name: "Event Planning: Alcohol & Bar Calculations - Spruce Eats",
69
+ url: "https://www.thespruceeats.com/stock-your-bar-for-a-party-760394",
70
+ },
71
+ {
72
+ name: "Thermodynamics of Ice Melting - Engineering Toolbox",
73
+ url: "https://www.engineeringtoolbox.com/saturated-ice-steam-d_970.html",
74
+ },
75
+ ];
76
+
77
+ const seo: PartyKegLocaleContent['seo'] = [
78
+ {
79
+ type: 'title',
80
+ text: 'Wie viel Bier und Eis brauche ich für meine Party?',
81
+ level: 2
82
+ },
83
+ {
84
+ type: 'paragraph',
85
+ html: 'Die Millionen-Dollar-Frage bei jeder Veranstaltung: <strong>Wie viele Liter Bier sollte ich kaufen?</strong> Zu wenig ist ein Desaster, aber zu viel ist unnötige Ausgabe. Dieses Tool hilft dir, die genaue Menge Alkohol und noch wichtiger <strong>wie viele Eisbeutel</strong> du kaufen musst, um alles kalt zu halten. Professionelle Caterer und Eventmanager nutzen statistische Verbrauchsmodelle — jetzt kannst du das auch kostenlos.'
86
+ },
87
+ {
88
+ type: 'title',
89
+ text: 'Die Verbrauchsformel pro Person',
90
+ level: 2
91
+ },
92
+ {
93
+ type: 'paragraph',
94
+ html: 'Um den benötigten Alkohol zu schätzen, nutzen professionelle Caterer eine Formel basierend auf der "Stündlichen Verbrauchsrate". Es ist keine exakte Wissenschaft, aber Statistiken zeigen, dass auf einer Standard-Party ungefähr 1,5 Einheiten pro Stunde pro Person konsumiert werden. Faktoren wie Umgebungstemperatur, Essensangebot und die soziale Energie der Veranstaltung verändern diese Baseline.'
95
+ },
96
+ {
97
+ type: 'stats',
98
+ items: [
99
+ { label: 'Chill-Verbrauch', value: '1 Getränk/Stunde', icon: 'mdi:tea-outline' },
100
+ { label: 'Standard-Party', value: '1,5 Getränke/Stunde', icon: 'mdi:glass-mug-variant' },
101
+ { label: 'Hochzeit / Festival', value: '2,5+ Getränke/Stunde', icon: 'mdi:fire' }
102
+ ],
103
+ columns: 3
104
+ },
105
+ {
106
+ type: 'diagnostic',
107
+ title: 'Die Physik des Eises',
108
+ icon: 'mdi:snowflake-thermometer',
109
+ variant: 'warning',
110
+ badge: 'Thermodynamik',
111
+ html: 'Eisberechnung ist da, wo die meisten Gastgeber scheitern. Eis hat zwei Funktionen: Abkühlung (von 25 °C auf 4 °C) und Aufrechterhaltung (gegen die Umgebungswärme). Bei Temperaturen über 30 °C verdoppelt sich die Schmelzrate. Ein voller Eisbeutel in direkter Sonne kann in unter 20 Minuten weg sein, wodurch deine Getränke warm werden, bevor die Party ihren Höhepunkt erreicht.'
112
+ },
113
+ {
114
+ type: 'tip',
115
+ title: 'Professioneller Tipp zum Eisparen',
116
+ html: 'Lagere Fässer und Dosen im Schatten, bevor du Eis hinzufügst. Wenn Getränke in der Sonne warm sind, vergeudet dein erstes Eisbeutel die ersten 50 % einfach durch Wärmeverlust in 10 Minuten. Beginne mit vorgekhlten Getränken, um die Eismenge, die du kaufen musst, dramatisch zu reduzieren.'
117
+ },
118
+ {
119
+ type: 'title',
120
+ text: 'Referenzdaten für Logistik',
121
+ level: 2
122
+ },
123
+ {
124
+ type: 'paragraph',
125
+ html: 'Ein Standard-50-Liter-Fass ergibt etwa 200 Portionen. Ein typischer Eisbeutel wiegt 2 kg. Mit diesen Zahlen kannst du Transport und Lagerung für dein Event ohne letzte Minute Überraschungen planen. Rechne mit Eisschmelz während des Transports — eine 30-minütige Fahrt im Sommer kann dir einen ganzen Beutel kosten, bevor die Party überhaupt anfängt.'
126
+ },
127
+ {
128
+ type: 'summary',
129
+ title: 'Für wen ist dieses Tool?',
130
+ items: [
131
+ 'Privatparty-Gastgeber: Höre auf zu raten und kaufe selbstbewusst genau das, was du für dein nächstes Fest brauchst.',
132
+ 'Event-Manager: Nutze genaue Verbrauchsmodelle, um Kunden zu beraten und Barlogistik professionell zu planen.',
133
+ 'Veranstaltungsstättenmanager: Standardisiere Bestandsberechnungen für wiederkehrende Events mit unterschiedlichen Gästezahlen.'
134
+ ]
135
+ },
136
+ {
137
+ type: 'paragraph',
138
+ html: 'Eine oft übersehene Variable ist die <strong>Ausfallquote der Gäste</strong>. Bei den meisten Partys verlassen 10–15 % der Gäste früh und 10 % trinken vielleicht gar nicht. Der Rechner wendet einen konservativen Puffer an, damit du nie zu kurz kommst, aber auch nicht mit enormem Überschuss sitzt. Diese Anpassungen zu verstehen hilft dir, die Schätzung für deine spezifische Gruppe zu verfeinern. Runde beim Kaufen immer auf, da zurückgegebene offene Fässer normalerweise nicht möglich sind. Ein kleiner Überschuss ist immer besser als am Höhepunkt der Party trocken zu laufen.'
139
+ }
140
+ ];
141
+
142
+ const schemas: PartyKegLocaleContent['schemas'] = [
143
+ {
144
+ '@context': 'https://schema.org',
145
+ '@type': 'FAQPage',
146
+ mainEntity: faq.map((item) => ({
147
+ '@type': 'Question',
148
+ name: item.question,
149
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
150
+ })),
151
+ } as WithContext<FAQPage>,
152
+ {
153
+ '@context': 'https://schema.org',
154
+ '@type': 'HowTo',
155
+ name: title,
156
+ description: description,
157
+ step: howTo.map((step, i) => ({
158
+ '@type': 'HowToStep',
159
+ position: i + 1,
160
+ name: step.name,
161
+ text: step.text,
162
+ })),
163
+ } as WithContext<HowTo>,
164
+ {
165
+ '@context': 'https://schema.org',
166
+ '@type': 'SoftwareApplication',
167
+ name: title,
168
+ description: description,
169
+ applicationCategory: 'UtilityApplication',
170
+ operatingSystem: 'Web',
171
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
172
+ } as WithContext<SoftwareApplication>,
173
+ ];
174
+
175
+ export const content: PartyKegLocaleContent = {
176
+ slug,
177
+ title,
178
+ description,
179
+ ui,
180
+ seo,
181
+ faqTitle,
182
+ faq,
183
+ bibliographyTitle,
184
+ bibliography,
185
+ howTo,
186
+ schemas,
187
+ };