@jjlmoya/utils-alcohol 1.14.0 → 1.16.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 (78) hide show
  1. package/package.json +2 -1
  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/seo_length.test.ts +3 -34
  10. package/src/tests/slug_uniqueness.test.ts +81 -0
  11. package/src/tests/tool_validation.test.ts +4 -4
  12. package/src/tool/alcoholClearance/i18n/de.ts +205 -0
  13. package/src/tool/alcoholClearance/i18n/id.ts +205 -0
  14. package/src/tool/alcoholClearance/i18n/it.ts +180 -0
  15. package/src/tool/alcoholClearance/i18n/ja.ts +205 -0
  16. package/src/tool/alcoholClearance/i18n/ko.ts +205 -0
  17. package/src/tool/alcoholClearance/i18n/nl.ts +205 -0
  18. package/src/tool/alcoholClearance/i18n/pl.ts +205 -0
  19. package/src/tool/alcoholClearance/i18n/pt.ts +205 -0
  20. package/src/tool/alcoholClearance/i18n/ru.ts +205 -0
  21. package/src/tool/alcoholClearance/i18n/sv.ts +205 -0
  22. package/src/tool/alcoholClearance/i18n/tr.ts +180 -0
  23. package/src/tool/alcoholClearance/i18n/zh.ts +205 -0
  24. package/src/tool/alcoholClearance/index.ts +13 -1
  25. package/src/tool/beerCooler/i18n/de.ts +197 -0
  26. package/src/tool/beerCooler/i18n/id.ts +197 -0
  27. package/src/tool/beerCooler/i18n/it.ts +197 -0
  28. package/src/tool/beerCooler/i18n/ja.ts +197 -0
  29. package/src/tool/beerCooler/i18n/ko.ts +197 -0
  30. package/src/tool/beerCooler/i18n/nl.ts +197 -0
  31. package/src/tool/beerCooler/i18n/pl.ts +197 -0
  32. package/src/tool/beerCooler/i18n/pt.ts +197 -0
  33. package/src/tool/beerCooler/i18n/ru.ts +197 -0
  34. package/src/tool/beerCooler/i18n/sv.ts +197 -0
  35. package/src/tool/beerCooler/i18n/tr.ts +197 -0
  36. package/src/tool/beerCooler/i18n/zh.ts +197 -0
  37. package/src/tool/beerCooler/index.ts +13 -1
  38. package/src/tool/carbonationCalculator/i18n/de.ts +200 -0
  39. package/src/tool/carbonationCalculator/i18n/id.ts +200 -0
  40. package/src/tool/carbonationCalculator/i18n/it.ts +200 -0
  41. package/src/tool/carbonationCalculator/i18n/ja.ts +200 -0
  42. package/src/tool/carbonationCalculator/i18n/ko.ts +200 -0
  43. package/src/tool/carbonationCalculator/i18n/nl.ts +200 -0
  44. package/src/tool/carbonationCalculator/i18n/pl.ts +200 -0
  45. package/src/tool/carbonationCalculator/i18n/pt.ts +200 -0
  46. package/src/tool/carbonationCalculator/i18n/ru.ts +200 -0
  47. package/src/tool/carbonationCalculator/i18n/sv.ts +200 -0
  48. package/src/tool/carbonationCalculator/i18n/tr.ts +200 -0
  49. package/src/tool/carbonationCalculator/i18n/zh.ts +200 -0
  50. package/src/tool/carbonationCalculator/index.ts +13 -1
  51. package/src/tool/cocktailBalancer/i18n/de.ts +222 -0
  52. package/src/tool/cocktailBalancer/i18n/id.ts +222 -0
  53. package/src/tool/cocktailBalancer/i18n/it.ts +222 -0
  54. package/src/tool/cocktailBalancer/i18n/ja.ts +222 -0
  55. package/src/tool/cocktailBalancer/i18n/ko.ts +222 -0
  56. package/src/tool/cocktailBalancer/i18n/nl.ts +222 -0
  57. package/src/tool/cocktailBalancer/i18n/pl.ts +222 -0
  58. package/src/tool/cocktailBalancer/i18n/pt.ts +222 -0
  59. package/src/tool/cocktailBalancer/i18n/ru.ts +222 -0
  60. package/src/tool/cocktailBalancer/i18n/sv.ts +222 -0
  61. package/src/tool/cocktailBalancer/i18n/tr.ts +222 -0
  62. package/src/tool/cocktailBalancer/i18n/zh.ts +222 -0
  63. package/src/tool/cocktailBalancer/index.ts +13 -1
  64. package/src/tool/partyKeg/i18n/de.ts +187 -0
  65. package/src/tool/partyKeg/i18n/id.ts +187 -0
  66. package/src/tool/partyKeg/i18n/it.ts +187 -0
  67. package/src/tool/partyKeg/i18n/ja.ts +187 -0
  68. package/src/tool/partyKeg/i18n/ko.ts +187 -0
  69. package/src/tool/partyKeg/i18n/nl.ts +187 -0
  70. package/src/tool/partyKeg/i18n/pl.ts +187 -0
  71. package/src/tool/partyKeg/i18n/pt.ts +187 -0
  72. package/src/tool/partyKeg/i18n/ru.ts +187 -0
  73. package/src/tool/partyKeg/i18n/sv.ts +187 -0
  74. package/src/tool/partyKeg/i18n/tr.ts +187 -0
  75. package/src/tool/partyKeg/i18n/zh.ts +187 -0
  76. package/src/tool/partyKeg/index.ts +13 -1
  77. package/src/types.ts +1 -1
  78. package/src/tests/content_mandatory.test.ts +0 -32
@@ -0,0 +1,197 @@
1
+ import type { WithContext, SoftwareApplication, FAQPage, HowTo } from 'schema-dts';
2
+ import type { BeerCoolerUI, BeerCoolerLocaleContent } from '../index';
3
+
4
+ const slug = 'bira-sogutucusu';
5
+ const title = 'Newton\'un Soğuma Yasası ile Bira Soğutma Hesaplayıcısı';
6
+ const description = 'Gerçek termodinamik ile hesaplayın — Newton\'un Soğuma Yasası — bira\'nızın buzdolabında veya dondurucuda mükemmel servis sıcaklığına ulaşması için gereken zamanı tam olarak bilin.';
7
+
8
+ const ui: BeerCoolerUI = {
9
+ step1Title: 'Ne soğutuyorsunuz?',
10
+ canLabel: 'Kutu',
11
+ aluminumLabel: 'Alüminyum',
12
+ bottleLabel: 'Şişe',
13
+ glassLabel: 'Cam',
14
+ step2Title: 'Nereye koyuyorsunuz?',
15
+ fridgeLabel: 'Buzdolabı',
16
+ freezerLabel: 'Dondurucu',
17
+ step3Title: 'Sıcaklıkları Hassas Ayarla',
18
+ initialTempLabel: 'Başlangıç Sıcaklığı',
19
+ targetTempLabel: 'Hedef Soğukluk',
20
+ glacialLabel: 'Buzlu',
21
+ perfectLabel: 'Mükemmel',
22
+ bodegaLabel: 'Bodega',
23
+ readyTitle: 'Hazır',
24
+ readyDescription: 'Hesaplamak için konteyner ve konumu seçin.',
25
+ estimatedTimeLabel: 'Tahmini zaman',
26
+ methodLabel: 'Yöntem',
27
+ containerLabel: 'Konteyner',
28
+ alreadyColdLabel: 'Zaten soğuk!',
29
+ neverColdLabel: 'Asla soğuk olmaz'
30
+ };
31
+
32
+ const faqTitle = 'Sıkça Sorulan Sorular';
33
+ const bibliographyTitle = 'Bibliyografi & Kaynaklar';
34
+
35
+ const faq: BeerCoolerLocaleContent['faq'] = [
36
+ {
37
+ question: 'Bu araç soğutma süresini nasıl hesaplar?',
38
+ answer: 'Newton\'un Soğuma Yasasını uygular: T(t) = T_env + (T₀ - T_env) × e^(-kt). Sabit k, konteynerin malzemesine ve soğutma ortamına bağlı olarak değişir. Buzdolabındaki alüminyum kutu, dondurucudaki cam şişeden tamamen farklı bir k değerine sahiptir. Burada kullanılan değerler, her kombinasyon için gerçek deneylerle kalibre edilmiştir.',
39
+ },
40
+ {
41
+ question: 'Islak kağıt havlu ve tuz numarası gerçekten işe yarar mı?',
42
+ answer: 'Evet, oldukça belirgin şekilde. Konteyneri tuzlu ıslak kağıt havluya sarıp soğutmak iki nedenden dolayı soğutmayı hızlandırır: su buharlaşması ek ısıyı uzaklaştırır (buharlaştırma ile soğutma), ve tuz suyun donma noktasını düşürerek ıslak teması daha uzun süre aktif tutar. Dondurucuya kuru bir kutu koymakla karşılaştırıldığında, ilk birkaç dakika içinde ek 2–4°C düşüş elde edebilirsiniz.',
43
+ },
44
+ {
45
+ question: 'Farklı bira stilleri için ideal servis sıcaklığı nedir?',
46
+ answer: 'Bu stile bağlıdır. Lagerler ve Pilsnerler en iyi 3°C ile 7°C arasında servis edilir. IPA\'lar ve Pale Aleler 7°C ila 10°C\'de parlak görünür. Stautlar, Portterler ve karmaşık aleler daha sıcak, 12°C ila 14°C arasında servis edilmelidir, böylece kahve, çikolata ve ceviz gibi aromat bileşikleri kendilerini tam olarak ifade edebilir.',
47
+ },
48
+ {
49
+ question: 'Bira\'mı dondurucuda bırakırsam patlayabilir mi?',
50
+ answer: 'Evet. Alkol ve çözülmüş şekerler, bira\'nın donma noktasını saf suyun altına düşürür: standart % 5 lager yaklaşık -3°C\'de donar. Su kristalleşirken hacim artar ve çözülmüş CO2 konteyneri alıp gittiği noktaya kadar iç basıncı artırır. Dondurucuda 60 dakikadan fazla — özellikle cam şişeler — gerçek bir tehlike bölgesidir. Bunu önlemek için bu hesaplayıcıyı kullanın.',
51
+ },
52
+ {
53
+ question: 'Bira çok hızlı soğutulursa "yanabilir" mi?',
54
+ answer: 'Hayır. Bira\'yı mahveden "ısı şokuğu" mitolojisi yanlıştır. Gerçekten etkileyen şey, tekrarlanan dondurma ve çözünmedir — bu proteinleri parçalar ve sıvıyı bulanıklaştırır — veya doğrudan UV ışığına maruz kalır. Dondurucuda veya buzlu suda hızlı soğutma lezzeti zarar vermez.',
55
+ },
56
+ ];
57
+
58
+ const howTo: BeerCoolerLocaleContent['howTo'] = [
59
+ {
60
+ name: 'Konteyneri seçin',
61
+ text: 'Alüminyum kutu ya da cam şişe arasında seçim yapın. Malzeme, ısı transfer hızını çarpıcı şekilde etkiler.',
62
+ },
63
+ {
64
+ name: 'Soğutma yöntemini seçin',
65
+ text: 'Ultra hızlı bir işlem için geleneksel bir buzdolabı (4°C) mi yoksa dondurucu (-18°C) mu kullandığınızı belirtin.',
66
+ },
67
+ {
68
+ name: 'Sıcaklıkları ayarlayın',
69
+ text: 'İçeceğin mevcut sıcaklığını (oda sıcaklığı) ve istediğiniz hedef soğukluk sıcaklığını tanımlayın.',
70
+ },
71
+ ];
72
+
73
+ const bibliography: BeerCoolerLocaleContent['bibliography'] = [
74
+ {
75
+ name: 'Newton\'un Soğuma Yasası - Wikipedia',
76
+ url: 'https://en.wikipedia.org/wiki/Newton%27s_law_of_cooling',
77
+ },
78
+ {
79
+ name: 'Bira ve Bira Yapımının Gelişmiş Kimyası - American Chemical Society',
80
+ url: 'https://www.acs.org/acs-webinars/library/advanced-chemistry-of-beer-and-brewing.html',
81
+ },
82
+ ];
83
+
84
+ const seo: BeerCoolerLocaleContent['seo'] = [
85
+ {
86
+ type: 'title',
87
+ text: 'Soğuğun ve Termodinamiğin Bilimi',
88
+ level: 2
89
+ },
90
+ {
91
+ type: 'paragraph',
92
+ html: 'Neden kutu şişeden önce soğur? Bu sihir mi? Hayır, bu <strong>Newton\'un Soğuma Yasası</strong> harekete geçmiş demektir. Bu araç, içeceğinizin termodinamik mükemmelliğe ulaştığı tam anı matematiksel olarak hesaplar. Her malzeme, her ortam, her başlangıç sıcaklığı, fizyikçilerin ve mühendislerin endüstriyel sistemlerde ısı transferini modellemek için kullandığı aynı diferansiyel denklemi besler.'
93
+ },
94
+ {
95
+ type: 'diagnostic',
96
+ title: 'Ana Formül',
97
+ icon: 'mdi:function-variant',
98
+ variant: 'info',
99
+ badge: 'Fizik',
100
+ html: 'T(t) = T_env + (T_0 - T_env) * e^(-kt). Bu diferansiyel denklem, bir nesnenin sıcaklığının, sıcaklığı ile çevre sıcaklığı arasındaki farka nasıl orantılı olarak değiştiğini açıklar. Sabit k, konteynerin malzemesine ve geometrisine bağlıdır, bu nedenle bir kutu, aynı hacme sahip bir şişeden daha hızlı soğur.'
101
+ },
102
+ {
103
+ type: 'title',
104
+ text: 'Malzeme Savaşı: Alüminyum vs. Cam',
105
+ level: 2
106
+ },
107
+ {
108
+ type: 'paragraph',
109
+ html: '<strong>Alüminyum</strong> ~205 W/(m·K) ısı iletkenliğine sahipken, <strong>cam</strong> neredeyse 0,8 W/(m·K)\'ye ulaşır. Metal soğuğu şiddetle hızlı transfer ederek, acil durumlar için ideal konteyner haline gelir. Ancak, cam, soğuduktan sonra daha iyi yalıtım sağlayarak, tüketim sırasında ideal sıcaklığı daha uzun süre korur. Bu uzlaşma, farklı bira kültürlerinin her malzeme için farklı tercihleri geliştirmesinin nedenini açıklar.'
110
+ },
111
+ {
112
+ type: 'stats',
113
+ items: [
114
+ { label: 'Pilsner & Lager', value: '3°C - 7°C', icon: 'mdi:snowflake' },
115
+ { label: 'IPA & Pale Ale', value: '7°C - 10°C', icon: 'mdi:hops' },
116
+ { label: 'Staut & Porter', value: '12°C - 14°C', icon: 'mdi:beer' }
117
+ ],
118
+ columns: 3
119
+ },
120
+ {
121
+ type: 'card',
122
+ title: 'Dondurucu Tehlike Bölgesi',
123
+ icon: 'mdi:snowflake-alert',
124
+ html: 'Alkol ve çözülmüş şekerler nedeniyle bira 0°C altında donar — standart % 5 lager yaklaşık -3°C\'de donar. Su kristalleşirken hacim artar ve CO2 basıncı aynı anda yükselir. Sonuç, şiddetle patlamış olabilecek bir konteynedir. Bira\'yı dondurucuda 45 dakikadan fazla bırakmayın, kütüphaneden haber ver.'
125
+ },
126
+ {
127
+ type: 'proscons',
128
+ title: 'Acil Soğutma İpuçları',
129
+ items: [
130
+ { pro: 'Islak Havlu Numarası: Kutuyu ıslak kağıt havluya sarıp dondurma — buharlaşma soğutmayı hızlandırır.', con: '' },
131
+ { pro: 'Arktik Tuzlu Su: -5°C tuzlu su elde etmek için bir kovaya su, buz ve 2 yemek kaşığı tuz doldurun.', con: '' },
132
+ { pro: 'Döndürme Yöntemi: Şişeyi buzlu suda döndürerek konveksiyonu zorla ve soğutma süresini kısa tutun.', con: '' },
133
+ { pro: '', con: 'Zamanlayıcı olmadan bir kutuyu dondurucu rafına doğrudan koymayın — patlamış kutular dağınık ve tehlikeli.' }
134
+ ]
135
+ },
136
+ {
137
+ type: 'tip',
138
+ title: 'Pro İpucu: Camı Önceden Soğutun',
139
+ html: 'Bira döktüğünüz cam, kayda değer bir ısıl kütleye sahiptir. Sıcak bir cam, mükemmel soğuk bira\'nın sıcaklığını temas sırasında 2-3°C artırabilir. Dökülmeden 5 dakika önce servis bardağını dondurucu\'ya koyun veya soğuk su ile durulayın. Bu basit adım, bira\'nızın tam olarak tasarlanan şekilde tadına varış penceresini uzatır.'
140
+ },
141
+ {
142
+ type: 'title',
143
+ text: 'Soğutma Sabitini Anlamak',
144
+ level: 2
145
+ },
146
+ {
147
+ type: 'paragraph',
148
+ html: 'Newton denklemindeki soğutma sabiti k, sabit bir evrensel değer değildir — her özel konteynerin ve ortamın ampirik bir özelliğidir. Buzlu suda ince alüminyum kutu, sakin buzdolabı havasında kalın cam şişeden tamamen farklı bir k\'ye sahiptir. Hesap makinemiz, her konteyner türü için gerçek deneylerle kalibre edilen ölçülen değerleri kullanarak, tipik ev soğutma senaryoları için birkaç dakika içinde doğru tahminler sunmaktadır.'
149
+ }
150
+ ];
151
+
152
+ const schemas: BeerCoolerLocaleContent['schemas'] = [
153
+ {
154
+ '@context': 'https://schema.org',
155
+ '@type': 'FAQPage',
156
+ mainEntity: faq.map((item) => ({
157
+ '@type': 'Question',
158
+ name: item.question,
159
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
160
+ })),
161
+ } as WithContext<FAQPage>,
162
+ {
163
+ '@context': 'https://schema.org',
164
+ '@type': 'HowTo',
165
+ name: title,
166
+ description: description,
167
+ step: howTo.map((step, i) => ({
168
+ '@type': 'HowToStep',
169
+ position: i + 1,
170
+ name: step.name,
171
+ text: step.text,
172
+ })),
173
+ } as WithContext<HowTo>,
174
+ {
175
+ '@context': 'https://schema.org',
176
+ '@type': 'SoftwareApplication',
177
+ name: title,
178
+ description: description,
179
+ applicationCategory: 'UtilityApplication',
180
+ operatingSystem: 'Web',
181
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
182
+ } as WithContext<SoftwareApplication>,
183
+ ];
184
+
185
+ export const content: BeerCoolerLocaleContent = {
186
+ slug,
187
+ title,
188
+ description,
189
+ ui,
190
+ seo,
191
+ faqTitle,
192
+ faq,
193
+ bibliographyTitle,
194
+ bibliography,
195
+ howTo,
196
+ schemas,
197
+ };
@@ -0,0 +1,197 @@
1
+ import type { WithContext, SoftwareApplication, FAQPage, HowTo } from 'schema-dts';
2
+ import type { BeerCoolerUI, BeerCoolerLocaleContent } from '../index';
3
+
4
+ const slug = 'beer-cooler';
5
+ const title = '牛顿冷却定律啤酒冷却计算器';
6
+ const description = '用真实热力学计算——牛顿冷却定律——精确计算你的啤酒在冰箱或冷冻室中达到完美温度需要多长时间。';
7
+
8
+ const ui: BeerCoolerUI = {
9
+ step1Title: '你在冷却什么?',
10
+ canLabel: '罐子',
11
+ aluminumLabel: '铝',
12
+ bottleLabel: '瓶子',
13
+ glassLabel: '玻璃',
14
+ step2Title: '你把它放在哪里?',
15
+ fridgeLabel: '冰箱',
16
+ freezerLabel: '冷冻室',
17
+ step3Title: '微调温度',
18
+ initialTempLabel: '初始温度',
19
+ targetTempLabel: '目标温度',
20
+ glacialLabel: '冰川般冷',
21
+ perfectLabel: '完美',
22
+ bodegaLabel: '小酒馆',
23
+ readyTitle: '准备好了',
24
+ readyDescription: '选择容器和位置以计算。',
25
+ estimatedTimeLabel: '估计时间',
26
+ methodLabel: '方法',
27
+ containerLabel: '容器',
28
+ alreadyColdLabel: '已经很冷了!',
29
+ neverColdLabel: '永远不会冷'
30
+ };
31
+
32
+ const faqTitle = '常见问题';
33
+ const bibliographyTitle = '参考文献和来源';
34
+
35
+ const faq: BeerCoolerLocaleContent['faq'] = [
36
+ {
37
+ question: '该工具如何计算冷却时间?',
38
+ answer: '它应用牛顿冷却定律:T(t) = T_env + (T₀ - T_env) × e^(-kt)。常数k随容器材料和冷却介质而变化。冰箱中的铝罐与冷冻室中的玻璃瓶有完全不同的k值。这里使用的值是根据每种组合的实验进行校准的。',
39
+ },
40
+ {
41
+ question: '用盐浸湿纸巾的技巧真的有效吗?',
42
+ answer: '是的,效果非常显著。用含盐的湿纸巾包裹容器会加快冷却速度,原因有两个:水的蒸发会散失额外的热量(蒸发冷却),盐会降低水的冰点,使湿润接触保持更长时间。与将干罐放在冰箱中相比,你可以在最初几分钟内获得额外的2–4°C下降。',
43
+ },
44
+ {
45
+ question: '不同啤酒类型的理想上菜温度是多少?',
46
+ answer: '这取决于风格。拉格和皮尔森最好在3°C至7°C之间端上。IPA和淡色艾尔在7°C至10°C时闪闪发光。世涛、搬运工和复杂的艾尔应在12°C至14°C之间提供,以便其咖啡、巧克力和坚果等香料化合物可以充分表达。',
47
+ },
48
+ {
49
+ question: '如果我把啤酒放在冷冻室里,它会爆炸吗?',
50
+ answer: '是的。酒精和溶解的糖会降低啤酒的冰点以下纯水:标准的5%拉格在约-3°C处冻结。当水结晶时,体积增加,溶解的CO2升高内部压力直到容器失败。在冷冻室中超过60分钟——尤其是玻璃瓶——是一个真正的危险区域。使用此计算器来避免这种情况。',
51
+ },
52
+ {
53
+ question: '如果啤酒冷却太快会"燃烧"吗?',
54
+ answer: '不。毁坏啤酒的"热冲击"神话是虚假的。真正可能影响它的是重复冷冻和解冻——这会破坏蛋白质并使液体变浑浊——或直接紫外线照射。在冷冻室或冰水中快速冷却不会损害风味。',
55
+ },
56
+ ];
57
+
58
+ const howTo: BeerCoolerLocaleContent['howTo'] = [
59
+ {
60
+ name: '选择容器',
61
+ text: '在铝罐或玻璃瓶之间选择。材料会极大地影响热传递速度。',
62
+ },
63
+ {
64
+ name: '选择冷却方法',
65
+ text: '指示你是在使用传统冰箱(4°C)还是冷冻室(-18°C)进行超快速过程。',
66
+ },
67
+ {
68
+ name: '调整温度',
69
+ text: '定义饮料的当前温度(室温)和所需的目标冷却温度。',
70
+ },
71
+ ];
72
+
73
+ const bibliography: BeerCoolerLocaleContent['bibliography'] = [
74
+ {
75
+ name: '牛顿冷却定律 - Wikipedia',
76
+ url: 'https://en.wikipedia.org/wiki/Newton%27s_law_of_cooling',
77
+ },
78
+ {
79
+ name: '啤酒和啤酒酿造的高级化学 - American Chemical Society',
80
+ url: 'https://www.acs.org/acs-webinars/library/advanced-chemistry-of-beer-and-brewing.html',
81
+ },
82
+ ];
83
+
84
+ const seo: BeerCoolerLocaleContent['seo'] = [
85
+ {
86
+ type: 'title',
87
+ text: '冷却和热力学的科学',
88
+ level: 2
89
+ },
90
+ {
91
+ type: 'paragraph',
92
+ html: '为什么罐子比瓶子冷却得快?这是魔法吗?不,这是实际的<strong>牛顿冷却定律</strong>在起作用。该工具以数学方式计算你的饮料达到热力学完美度的确切时刻。每种材料、每种环境、每种初始温度都代入物理学家和工程师用于模拟工业系统中热传递的相同微分方程中。'
93
+ },
94
+ {
95
+ type: 'diagnostic',
96
+ title: '主要公式',
97
+ icon: 'mdi:function-variant',
98
+ variant: 'info',
99
+ badge: '物理',
100
+ html: 'T(t) = T_env + (T_0 - T_env) * e^(-kt)。此微分方程描述了物体的温度如何与其温度与环境之间的差异成比例地变化。常数k取决于容器的材料和几何形状,这就是为什么罐子比相同体积的瓶子冷却得更快。'
101
+ },
102
+ {
103
+ type: 'title',
104
+ text: '材料战争:铝 vs. 玻璃',
105
+ level: 2
106
+ },
107
+ {
108
+ type: 'paragraph',
109
+ html: '<strong>铝</strong>的热导率约为205 W/(m·K),而<strong>玻璃</strong>仅勉强达到0.8 W/(m·K)。金属可非常迅速地传递冷却,使其成为紧急情况的理想容器。然而,玻璃一旦冷却就能提供更好的隔热,在消费过程中保持理想温度的时间更长。这种权衡解释了为什么不同的啤酒文化对每种材料都发展了不同的偏好。'
110
+ },
111
+ {
112
+ type: 'stats',
113
+ items: [
114
+ { label: '皮尔森和拉格', value: '3°C - 7°C', icon: 'mdi:snowflake' },
115
+ { label: 'IPA和淡色艾尔', value: '7°C - 10°C', icon: 'mdi:hops' },
116
+ { label: '世涛和搬运工', value: '12°C - 14°C', icon: 'mdi:beer' }
117
+ ],
118
+ columns: 3
119
+ },
120
+ {
121
+ type: 'card',
122
+ title: '冷冻室危险区域',
123
+ icon: 'mdi:snowflake-alert',
124
+ html: '由于酒精和溶解的糖,啤酒在0°C以下结冻——标准的5%拉格在约-3°C处冻结。当水结晶时,体积增加,而CO2压力同时上升。结果是一个可能猛烈爆裂的容器。不要将啤酒在冷冻室中放置超过45分钟而不设置计时器。'
125
+ },
126
+ {
127
+ type: 'proscons',
128
+ title: '紧急冷却技巧',
129
+ items: [
130
+ { pro: '湿纸巾技巧:用湿纸巾包裹罐子,然后冷冻——蒸发加快冷却。', con: '' },
131
+ { pro: '北极盐水:将水、冰和2汤匙盐填充到桶中以达到-5°C盐水。', con: '' },
132
+ { pro: '旋转方法:在冰水中旋转瓶子以强制对流并缩短冷却时间。', con: '' },
133
+ { pro: '', con: '不要在没有计时器的情况下将罐子直接放在冷冻室架子上——破裂的罐子很凌乱且危险。' }
134
+ ]
135
+ },
136
+ {
137
+ type: 'tip',
138
+ title: '专业提示:预冷玻璃杯',
139
+ html: '你倒啤酒的玻璃杯具有相当的热质量。温暖的玻璃杯可在接触时立即将完美冷的啤酒的温度提高2-3°C。在倒之前将你的酒杯放在冷冻室中5分钟,或用冷水冲洗。这个简单的步骤延长了你的啤酒恰好符合预期风味的时间。'
140
+ },
141
+ {
142
+ type: 'title',
143
+ text: '了解冷却常数',
144
+ level: 2
145
+ },
146
+ {
147
+ type: 'paragraph',
148
+ html: '牛顿方程中的冷却常数k不是固定的通用值——它是每个特定容器和介质的经验属性。薄铝罐在冰水中的k值与厚玻璃瓶在静止冰箱空气中的k值完全不同。我们的计算器使用根据每种容器类型的实验校准的测量值,对于典型的家庭冷却场景,精度在几分钟内。'
149
+ }
150
+ ];
151
+
152
+ const schemas: BeerCoolerLocaleContent['schemas'] = [
153
+ {
154
+ '@context': 'https://schema.org',
155
+ '@type': 'FAQPage',
156
+ mainEntity: faq.map((item) => ({
157
+ '@type': 'Question',
158
+ name: item.question,
159
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
160
+ })),
161
+ } as WithContext<FAQPage>,
162
+ {
163
+ '@context': 'https://schema.org',
164
+ '@type': 'HowTo',
165
+ name: title,
166
+ description: description,
167
+ step: howTo.map((step, i) => ({
168
+ '@type': 'HowToStep',
169
+ position: i + 1,
170
+ name: step.name,
171
+ text: step.text,
172
+ })),
173
+ } as WithContext<HowTo>,
174
+ {
175
+ '@context': 'https://schema.org',
176
+ '@type': 'SoftwareApplication',
177
+ name: title,
178
+ description: description,
179
+ applicationCategory: 'UtilityApplication',
180
+ operatingSystem: 'Web',
181
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
182
+ } as WithContext<SoftwareApplication>,
183
+ ];
184
+
185
+ export const content: BeerCoolerLocaleContent = {
186
+ slug,
187
+ title,
188
+ description,
189
+ ui,
190
+ seo,
191
+ faqTitle,
192
+ faq,
193
+ bibliographyTitle,
194
+ bibliography,
195
+ howTo,
196
+ schemas,
197
+ };
@@ -37,9 +37,21 @@ export const beerCooler: AlcoholToolEntry<BeerCoolerUI> = {
37
37
  fg: 'mdi:beer',
38
38
  },
39
39
  i18n: {
40
- es: () => import('./i18n/es').then((m) => m.content),
40
+ de: () => import('./i18n/de').then((m) => m.content),
41
41
  en: () => import('./i18n/en').then((m) => m.content),
42
+ es: () => import('./i18n/es').then((m) => m.content),
42
43
  fr: () => import('./i18n/fr').then((m) => m.content),
44
+ id: () => import('./i18n/id').then((m) => m.content),
45
+ it: () => import('./i18n/it').then((m) => m.content),
46
+ ja: () => import('./i18n/ja').then((m) => m.content),
47
+ ko: () => import('./i18n/ko').then((m) => m.content),
48
+ nl: () => import('./i18n/nl').then((m) => m.content),
49
+ pl: () => import('./i18n/pl').then((m) => m.content),
50
+ pt: () => import('./i18n/pt').then((m) => m.content),
51
+ ru: () => import('./i18n/ru').then((m) => m.content),
52
+ sv: () => import('./i18n/sv').then((m) => m.content),
53
+ tr: () => import('./i18n/tr').then((m) => m.content),
54
+ zh: () => import('./i18n/zh').then((m) => m.content),
43
55
  },
44
56
  };
45
57
 
@@ -0,0 +1,200 @@
1
+ import type { WithContext, SoftwareApplication, FAQPage, HowTo } from 'schema-dts';
2
+ import type { CarbonationUI, CarbonationLocaleContent } from '../index';
3
+
4
+ const slug = 'bier-karbonatisierungs-rechner';
5
+ const title = 'Bier Karbonisierungs und Primersüße Rechner';
6
+ const description = 'Berechne die exakte Grammmenge von Dextrose, Haushaltszucker oder Malzextrakt (DME) zum Abfüllen deines Haushaltbieres. Gib dein Volumen, Gärungstemperatur und Stil ein und perfektioniere deine Grundierung.';
7
+
8
+ const ui: CarbonationUI = {
9
+ parametersTitle: 'Parameter',
10
+ metricBtn: 'Metrisch',
11
+ imperialBtn: 'Imperial',
12
+ volumeLabel: 'Biervolumen',
13
+ maxTempLabel: 'Höchsttemperatur',
14
+ litersUnit: 'Liter',
15
+ celsiusUnit: '°C',
16
+ gallonsUnit: 'Gallonen',
17
+ fahrenheitUnit: '°F',
18
+ desiredCo2Label: 'Gewünschte Karbonisierung',
19
+ volUnit: 'CO2 Vol',
20
+ resultsTitle: 'Primierungsergebnisse',
21
+ tableSugarLabel: 'Haushaltszucker',
22
+ cornSugarLabel: 'Kristallzucker (Dextrose)',
23
+ dmeLabel: 'Trockenes Malzextrakt (DME)',
24
+ safetyTitle: 'EXPLOSIONSGEFAHR!',
25
+ lowCarbonation: 'NIEDRIGE KARBONISIERUNG',
26
+ optimalCarbonation: 'OPTIMALE KARBONISIERUNG',
27
+ highEffervescence: 'HOHE SPRUDELIGKEIT',
28
+ bubblingVisualizationLabel: 'Ungefähre Blasenvisualisierung'
29
+ };
30
+
31
+ const faqTitle = 'Häufig gestellte Fragen';
32
+ const bibliographyTitle = 'Bibliografie & Quellen';
33
+
34
+ const faq: CarbonationLocaleContent['faq'] = [
35
+ {
36
+ question: 'Warum ist Temperatur für Karbonisierung wichtig?',
37
+ answer: 'Das Restgas CO2 in deinem Bier hängt von der höchsten Temperatur ab, die nach der Gärung erreicht wurde: Kalte Flüssigkeit hält mehr gelöstes Gas als warme Flüssigkeit. Wenn du eine niedrigere Temperatur eingibst als die tatsächliche, geht der Rechner von mehr Restgas aus, als wirklich vorhanden ist, und gibt dir weniger Zucker als nötig. Gib es zu hoch ein und das Gegenteil passiert — du fügst mehr Zucker hinzu als notwendig und drückst deinen Charge in Flaschenboben-Gebiet, wo Überdruck zu Flaschen-Ruptur oder Kappenflucht führt.',
38
+ },
39
+ {
40
+ question: 'Welcher Zucker ist am besten zum Ansäen?',
41
+ answer: 'Dextrose (Kristallzucker) wird bevorzugt, weil es neutral ist und schnell auflöst. Haushaltszucker funktioniert gut, erfordert aber etwa 10% weniger Gewicht.',
42
+ },
43
+ {
44
+ question: 'Was passiert, wenn ich zu viel Primerungszucker hinzufüge?',
45
+ answer: 'Überprimerier erzeugt übermäßigen CO2-Druck in der Flasche. Standardglasflaschen versagen bei ungefähr 3,5-4,0 CO2-Volumen. Darüber hinaus kann die Flasche platzen oder die Kappe heftig abblasen. Deshalb ist Präzision wichtig — selbst 5 Extra-Gramm pro Liter können eine Charge in die Gefahrenzone drücken.',
46
+ },
47
+ {
48
+ question: 'Wie lange dauert es, bis Bier nach dem Abfüllen karbonisiert?',
49
+ answer: 'Zwischen 2 und 3 Wochen bei Raumtemperatur (18-22°C) ist der typische Bereich, damit die Hefe den hinzugefügten Zucker vollständig gären und das CO2 sich in die Flüssigkeit integriert. Eine Flasche vor Abschluss des Prozesses zu öffnen gibt immer ein irreführendes Ergebnis: Das Bier scheint unterkarbonisiert zu sein, obwohl die Karbonisierung immer noch entwickelt wird. Bei DME kann der Prozess leicht langsamer sein, da seine Gärungszucker komplex sind.',
50
+ },
51
+ ];
52
+
53
+ const howTo: CarbonationLocaleContent['howTo'] = [
54
+ {
55
+ name: 'Messung echtes Volumen',
56
+ text: 'Gib an, wie viele Liter (oder Gallonen) Bier du nach Abschluss der Gärung zur Abfüllung bereit hast.',
57
+ },
58
+ {
59
+ name: 'Definiiere Gärungstemperatur',
60
+ text: 'Gib die höchste Temperatur ein, die das Bier während oder nach aktiver Gärung erreicht hat.',
61
+ },
62
+ {
63
+ name: 'Wähle Stil oder CO2-Volumen',
64
+ text: 'Wähle das gewünschte Karbonisierungsniveau. Die Stile variieren von 1,5 (Stouts) bis 4,5 (Weizenbiere).',
65
+ },
66
+ ];
67
+
68
+ const bibliography: CarbonationLocaleContent['bibliography'] = [
69
+ {
70
+ name: 'How to Brew: Karbonisierungstabellen - John Palmer',
71
+ url: 'https://howtobrew.com/section-1/chapter-11/',
72
+ },
73
+ {
74
+ name: 'BJCP Stilrichtlinien: Karbonisierungsniveaus',
75
+ url: 'https://www.bjcp.org/style/2021/beer/',
76
+ },
77
+ ];
78
+
79
+ const seo: CarbonationLocaleContent['seo'] = [
80
+ {
81
+ type: 'title',
82
+ text: 'Ultimativer Leitfaden zu Karbonisierung und Primerung',
83
+ level: 2
84
+ },
85
+ {
86
+ type: 'paragraph',
87
+ html: 'Meistere die Kunst der Primerung und verwandle dein Haushaltsbier aus einem flachen Experiment in eine professionelle sprudelnde Erfahrung. Primerung beinhaltet das Hinzufügen einer genauen Zuckermenge, damit die Resthefen in der Flasche während einer sekundären Gärung natürliches CO2 erzeugen. Zu wenig Zucker ergibt flaches Bier; zu viel erzeugt einen gefährlichen Druck, der Flaschen zerbrechen kann. Der Unterschied zwischen den beiden beträgt ein paar Gramm — deshalb existiert dieser Rechner.'
88
+ },
89
+ {
90
+ type: 'proscons',
91
+ title: 'Kritische Erfolgsfaktoren',
92
+ items: [
93
+ { pro: 'Temperatur: Das Restgas CO2 hängt vom Höchsttemperatur nach Gärung ab.', con: '' },
94
+ { pro: 'Genauigkeit: 5 Extramme pro Liter können der Unterschied zwischen perfekter Karbonisierung und einer Geyser sein.', con: '' },
95
+ { pro: '', con: 'Oxidation: Vermeide beim Transferieren zum Mischen des Primerungszuckers Spritzen.' }
96
+ ]
97
+ },
98
+ {
99
+ type: 'title',
100
+ text: 'CO2-Volumen nach Bierstil',
101
+ level: 2
102
+ },
103
+ {
104
+ type: 'stats',
105
+ items: [
106
+ { label: 'Britische Stouts', value: '1,5 - 2,0 Vol', icon: 'mdi:beer' },
107
+ { label: 'IPAs & Ales', value: '2,2 - 2,6 Vol', icon: 'mdi:hops' },
108
+ { label: 'Deutsche Hefeweizen', value: '3,3 - 4,5 Vol', icon: 'mdi:barley' }
109
+ ],
110
+ columns: 3
111
+ },
112
+ {
113
+ type: 'card',
114
+ title: 'Welchen Zucker solltest du wählen?',
115
+ icon: 'mdi:corn',
116
+ html: '<strong>Dextrose</strong> ist neutral und professionell — der Industriestandard. <strong>Haushaltszucker</strong> ist wirtschaftlich und effektiv (verwende 10% weniger Gewicht als Dextrose). <strong>DME (Trockenes Malzextrakt)</strong> ist die Wahl des Puristen, aber schwieriger genau zu prognostizieren, weil seine Gärbarkeit je nach Marke und Malzzusammensetzung variiert.'
117
+ },
118
+ {
119
+ type: 'diagnostic',
120
+ title: 'Sicherheitswarnung',
121
+ icon: 'mdi:alert-decagram',
122
+ variant: 'error',
123
+ badge: 'Gefahr',
124
+ html: 'Standardglasflaschen versagen bei 3,5-4,0 CO2-Volumen. Versuche nicht, belgische oder Weizenbiere in dünnes Glas zu karbonisieren. Verwende immer Flaschen, die für kohlensäurehaltige Getränke geeignet sind, und nutze nie recycelte kommerzielle Flaschen, die möglicherweise mikroskopische Strukturschäden durch frühere Verwendung haben.'
125
+ },
126
+ {
127
+ type: 'tip',
128
+ title: 'Profi Tipp: Löse den Zucker richtig auf',
129
+ html: 'Koche deine Primerungszuckerlösung (Zucker, gelöst in ungefähr 250ml Wasser pro 20L Charge) immer 10 Minuten lang, bevor du sie zum Bier gibst. Das Kochen sterilisiert die Lösung und stellt sicher, dass der Zucker vollständig gelöst und gleichmäßig in der ganzen Charge verteilt ist, was Hotspots verhindert, die zu ungleicher Karbonisierung zwischen Flaschen führen.'
130
+ },
131
+ {
132
+ type: 'summary',
133
+ title: 'Für wen ist dieses Werkzeug?',
134
+ items: [
135
+ 'Hausbrauer: Erhalte die genaue Primerungsberechnung für jede Chargengröße, Stil und Gärungstemperatur.',
136
+ 'Handwerksbier-Enthusiasten: Verstehe die Wissenschaft dahinter, warum kommerzielle Biere unterschiedliche Karbonisierungsniveaus haben.',
137
+ 'Professionelle Brauer: Überprüfe Handberechnungen vor dem Abfüllen großer kommerzieller Chargen.'
138
+ ]
139
+ },
140
+ {
141
+ type: 'title',
142
+ text: 'Karbonisierungswissenschaft: Henrys Gesetz',
143
+ level: 2
144
+ },
145
+ {
146
+ type: 'paragraph',
147
+ html: 'Im Kern wird Karbonisierung durch <strong>Henrys Gesetz</strong> gesteuert: Die Menge des in einer Flüssigkeit gelösten Gases ist proportional zum Partialdruck dieses Gases über der Flüssigkeit. Wenn du eine Flasche grundierst und versiegelst, verbraucht die Hefe den Zucker und erzeugt CO2 in einer versiegelten Umgebung. Wenn der Druck ansteigt, wird das Gas zurück in Lösung gezwungen. Die Temperatur, bei der dieses Gleichgewicht erreicht wird, bestimmt das endgültige Karbonisierungsniveau — deshalb ist die Gärungstemperatur die kritischste Variable in diesem Rechner.'
148
+ },
149
+ {
150
+ type: 'paragraph',
151
+ html: 'Das Restgas CO2 in deinem Bier vor Primerung ist nicht null. Jedes Bier enthält gelöstes CO2 aus dem Gärungsprozess, und die Menge, die beibehalten wird, hängt von der höchsten Temperatur ab, die das Bier erreichte. Ein Bier, das bei 22°C gär, enthält deutlich weniger Restgas CO2 als eines, das bei 16°C gärte, obwohl beide jetzt gekühlt sind. Die Nichtberücksichtigung dieser Restwerte führt zu systematischer Übergärung — einem der häufigsten Fehler unter anfänglichen Hausbauern.'
152
+ }
153
+ ];
154
+
155
+ const schemas: CarbonationLocaleContent['schemas'] = [
156
+ {
157
+ '@context': 'https://schema.org',
158
+ '@type': 'FAQPage',
159
+ mainEntity: faq.map((item) => ({
160
+ '@type': 'Question',
161
+ name: item.question,
162
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
163
+ })),
164
+ } as WithContext<FAQPage>,
165
+ {
166
+ '@context': 'https://schema.org',
167
+ '@type': 'HowTo',
168
+ name: title,
169
+ description: description,
170
+ step: howTo.map((step, i) => ({
171
+ '@type': 'HowToStep',
172
+ position: i + 1,
173
+ name: step.name,
174
+ text: step.text,
175
+ })),
176
+ } as WithContext<HowTo>,
177
+ {
178
+ '@context': 'https://schema.org',
179
+ '@type': 'SoftwareApplication',
180
+ name: title,
181
+ description: description,
182
+ applicationCategory: 'UtilityApplication',
183
+ operatingSystem: 'Web',
184
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
185
+ } as WithContext<SoftwareApplication>,
186
+ ];
187
+
188
+ export const content: CarbonationLocaleContent = {
189
+ slug,
190
+ title,
191
+ description,
192
+ ui,
193
+ seo,
194
+ faqTitle,
195
+ faq,
196
+ bibliographyTitle,
197
+ bibliography,
198
+ howTo,
199
+ schemas,
200
+ };