@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 = 'resfriador-cerveja';
5
+ const title = 'Calculadora de Resfriamento de Cerveja com a Lei de Newton';
6
+ const description = 'Calcule com termodinâmica real — Lei do Resfriamento de Newton — exatamente quanto tempo sua cerveja leva para atingir a temperatura de serviço perfeita na geladeira ou freezer.';
7
+
8
+ const ui: BeerCoolerUI = {
9
+ step1Title: 'O que você está resfriando?',
10
+ canLabel: 'Lata',
11
+ aluminumLabel: 'Alumínio',
12
+ bottleLabel: 'Garrafa',
13
+ glassLabel: 'Vidro',
14
+ step2Title: 'Onde você coloca?',
15
+ fridgeLabel: 'Geladeira',
16
+ freezerLabel: 'Freezer',
17
+ step3Title: 'Ajuste Fino de Temperaturas',
18
+ initialTempLabel: 'Temp. Inicial',
19
+ targetTempLabel: 'Objetivo Frio',
20
+ glacialLabel: 'Glacial',
21
+ perfectLabel: 'Perfeito',
22
+ bodegaLabel: 'Bodega',
23
+ readyTitle: 'Pronto',
24
+ readyDescription: 'Selecione o recipiente e a localização para calcular.',
25
+ estimatedTimeLabel: 'Tempo estimado',
26
+ methodLabel: 'Método',
27
+ containerLabel: 'Recipiente',
28
+ alreadyColdLabel: 'Já frio!',
29
+ neverColdLabel: 'Nunca fica frio'
30
+ };
31
+
32
+ const faqTitle = 'Perguntas Frequentes';
33
+ const bibliographyTitle = 'Referências & Fontes';
34
+
35
+ const faq: BeerCoolerLocaleContent['faq'] = [
36
+ {
37
+ question: 'Como esta ferramenta calcula o tempo de resfriamento?',
38
+ answer: 'Ela aplica a Lei de Resfriamento de Newton: T(t) = T_env + (T₀ - T_env) × e^(-kt). A constante k varia dependendo do material do recipiente e do meio de resfriamento. Uma lata de alumínio em uma geladeira tem um k muito diferente de uma garrafa de vidro em um freezer. Os valores usados aqui são calibrados contra experimentos do mundo real para cada combinação.',
39
+ },
40
+ {
41
+ question: 'O truque da toalha de papel molhada com sal realmente funciona?',
42
+ answer: 'Sim, e notavelmente. Envolver o recipiente em uma toalha de papel molhada com sal acelera o resfriamento por duas razões: a evaporação da água remove calor adicional (resfriamento evaporativo), e o sal reduz o ponto de congelamento da água, mantendo o contato úmido ativo por mais tempo. Você pode ganhar uma queda adicional de 2–4°C nos primeiros minutos em comparação com colocar uma lata seca no freezer.',
43
+ },
44
+ {
45
+ question: 'Qual é a temperatura de serviço ideal para diferentes estilos de cerveja?',
46
+ answer: 'Depende do estilo. Lagers e Pilsners são melhor servidas entre 3°C e 7°C. IPAs e Pale Ales brilham entre 7°C e 10°C. Stouts, Porters e ales complexas devem ser servidas mais quentes, entre 12°C e 14°C, para que seus compostos aromáticos — café, chocolate, nozes — possam se expressar completamente.',
47
+ },
48
+ {
49
+ question: 'Minha cerveja pode explodir se deixá-la no freezer?',
50
+ answer: 'Sim. O álcool e os açúcares dissolvidos reduzem o ponto de congelamento da cerveja abaixo da água pura: uma lager padrão de 5% congela em torno de -3°C. Quando a água cristaliza, o volume aumenta e o CO2 dissolvido aumenta a pressão interna até o recipiente ceder. Mais de 60 minutos no freezer — especialmente garrafas de vidro — é realmente uma zona de perigo. Use esta calculadora para evitar isso.',
51
+ },
52
+ {
53
+ question: 'A cerveja "queima" se esfriada muito rapidamente?',
54
+ answer: 'Não. O mito do "choque térmico" que estraga a cerveja é falso. O que pode genuinamente afetá-la é o congelamento e descongelamento repetidos — que quebram proteínas e turnam o líquido — ou exposição direta à luz UV. Um resfriamento rápido no freezer ou em água com gelo não prejudica o sabor.',
55
+ },
56
+ ];
57
+
58
+ const howTo: BeerCoolerLocaleContent['howTo'] = [
59
+ {
60
+ name: 'Selecione o recipiente',
61
+ text: 'Escolha entre uma lata de alumínio ou uma garrafa de vidro. O material afeta drasticamente a velocidade de transferência de calor.',
62
+ },
63
+ {
64
+ name: 'Escolha o método de resfriamento',
65
+ text: 'Indique se você está usando uma geladeira convencional (4°C) ou um freezer (-18°C) para um processo ultra-rápido.',
66
+ },
67
+ {
68
+ name: 'Ajuste as temperaturas',
69
+ text: 'Defina a temperatura atual da bebida (temperatura ambiente) e sua temperatura de resfriamento desejada.',
70
+ },
71
+ ];
72
+
73
+ const bibliography: BeerCoolerLocaleContent['bibliography'] = [
74
+ {
75
+ name: 'Lei de Resfriamento de Newton - Wikipedia',
76
+ url: 'https://en.wikipedia.org/wiki/Newton%27s_law_of_cooling',
77
+ },
78
+ {
79
+ name: 'Química Avançada de Cerveja e Cervejaria - 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: 'A Ciência do Frio e da Termodinâmica',
88
+ level: 2
89
+ },
90
+ {
91
+ type: 'paragraph',
92
+ html: 'Por que a lata esfria antes da garrafa? É magia? Não, é a <strong>Lei de Resfriamento de Newton</strong> em ação. Esta ferramenta calcula matematicamente o momento exato em que sua bebida atinge a perfeição termodinâmica. Cada material, cada ambiente, cada temperatura inicial se alimenta da mesma equação diferencial que físicos e engenheiros usam para modelar transferência de calor em sistemas industriais.'
93
+ },
94
+ {
95
+ type: 'diagnostic',
96
+ title: 'A Fórmula Mestre',
97
+ icon: 'mdi:function-variant',
98
+ variant: 'info',
99
+ badge: 'Física',
100
+ html: 'T(t) = T_env + (T_0 - T_env) * e^(-kt). Esta equação diferencial descreve como a temperatura de um objeto muda proporcionalmente à diferença entre sua temperatura e a do ambiente. A constante k depende do material e da geometria do recipiente, é por isso que uma lata esfria mais rápido que uma garrafa do mesmo volume.'
101
+ },
102
+ {
103
+ type: 'title',
104
+ text: 'Guerra dos Materiais: Alumínio vs. Vidro',
105
+ level: 2
106
+ },
107
+ {
108
+ type: 'paragraph',
109
+ html: '<strong>Alumínio</strong> tem condutividade térmica de ~205 W/(m·K), enquanto <strong>vidro</strong> mal atinge 0,8 W/(m·K). O metal transfere frio com violência rápida, tornando-o o recipiente ideal para emergências. No entanto, o vidro fornece melhor isolamento uma vez frio, mantendo a temperatura ideal por mais tempo durante o consumo. Este compromisso é por isso que diferentes culturas de cerveja desenvolveram preferências diferentes para cada material.'
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: 'Stout & Porter', value: '12°C - 14°C', icon: 'mdi:beer' }
117
+ ],
118
+ columns: 3
119
+ },
120
+ {
121
+ type: 'card',
122
+ title: 'A Zona de Perigo do Freezer',
123
+ icon: 'mdi:snowflake-alert',
124
+ html: 'Devido ao álcool e açúcares dissolvidos, a cerveja congela abaixo de 0°C — uma lager padrão de 5% congela em torno de -3°C. Conforme a água cristaliza, o volume aumenta, enquanto a pressão de CO2 sobe simultaneamente. O resultado é um recipiente que pode romper violentamente. Nunca deixe cerveja no freezer por mais de 45 minutos sem definir um temporizador.'
125
+ },
126
+ {
127
+ type: 'proscons',
128
+ title: 'Truques de Resfriamento de Emergência',
129
+ items: [
130
+ { pro: 'Truque da Toalha Molhada: Envolva a lata em toalha de papel molhada, depois congele — a evaporação acelera o resfriamento.', con: '' },
131
+ { pro: 'Salmoura Ártica: Encha um balde com água, gelo e 2 colheres de sopa de sal para atingir salmoura de -5°C.', con: '' },
132
+ { pro: 'Método de Rotação: Gire a garrafa em água com gelo para forçar convecção e encurtar o tempo de resfriamento.', con: '' },
133
+ { pro: '', con: 'Não coloque uma lata diretamente na prateleira do freezer sem um temporizador — latas explodidas são bagunçadas e perigosas.' }
134
+ ]
135
+ },
136
+ {
137
+ type: 'tip',
138
+ title: 'Dica Pro: Presfrie o Copo',
139
+ html: 'O copo em que você despeja cerveja tem massa térmica significativa. Um copo quente pode aumentar a temperatura de uma cerveja perfeitamente fria em 2-3°C instantaneamente no contato. Coloque seu copo de serviço no freezer por 5 minutos antes de despejar, ou enxágue com água fria. Este passo simples estende a janela onde sua cerveja tem exatamente o gosto pretendido.'
140
+ },
141
+ {
142
+ type: 'title',
143
+ text: 'Entendendo a Constante de Resfriamento',
144
+ level: 2
145
+ },
146
+ {
147
+ type: 'paragraph',
148
+ html: 'A constante de resfriamento k na equação de Newton não é um valor universal fixo — é uma propriedade empírica de cada recipiente e meio específico. Uma lata de alumínio fina em água com gelo tem um k dramaticamente diferente de uma garrafa de vidro espessa em ar parado de geladeira. Nossa calculadora usa valores medidos calibrados contra experimentos do mundo real para cada tipo de recipiente, fornecendo previsões precisas dentro de alguns minutos para cenários típicos de resfriamento doméstico.'
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 = 'ohlazhdenie-piva';
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 и Pale Ale блистают при 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: 'Война материалов: алюминий против стекла',
105
+ level: 2
106
+ },
107
+ {
108
+ type: 'paragraph',
109
+ html: '<strong>Алюминий</strong> имеет теплопроводность ~205 Вт/(м·К), в то время как <strong>стекло</strong> едва достигает 0,8 Вт/(м·К). Металл передаёт холод с невероятной скоростью, что делает его идеальным контейнером для чрезвычайных ситуаций. Однако стекло обеспечивает лучшую изоляцию после охлаждения, сохраняя идеальную температуру дольше во время потребления. Этот компромисс объясняет, почему разные пивные культуры развили разные предпочтения для каждого материала.'
110
+ },
111
+ {
112
+ type: 'stats',
113
+ items: [
114
+ { label: 'Пилзнер & Лагер', value: '3°C - 7°C', icon: 'mdi:snowflake' },
115
+ { label: 'IPA & Pale Ale', 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, чем толстая стеклянная бутылка в неподвижном воздухе холодильника. Наш калькулятор использует измеренные значения, откалиброванные на основе реальных экспериментов для каждого типа контейнера, давая вам прогнозы, точные в пределах нескольких минут для типичных домашних сценариев охлаждения.'
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 = 'ol-kylare';
5
+ const title = 'Ölkylningsräknare med Newtons kylningslag';
6
+ const description = 'Beräkna med verklig termodynamik — Newtons kylningslag — exakt hur lång tid din öl behöver för att nå den perfekta serveringstemperaturen i kylskåp eller frys.';
7
+
8
+ const ui: BeerCoolerUI = {
9
+ step1Title: 'Vad kyler du?',
10
+ canLabel: 'Burk',
11
+ aluminumLabel: 'Aluminium',
12
+ bottleLabel: 'Flaska',
13
+ glassLabel: 'Glas',
14
+ step2Title: 'Var sätter du det?',
15
+ fridgeLabel: 'Kylskåp',
16
+ freezerLabel: 'Frys',
17
+ step3Title: 'Finjustera temperaturer',
18
+ initialTempLabel: 'Starttemperatur',
19
+ targetTempLabel: 'Måltemperatur',
20
+ glacialLabel: 'Glaciär',
21
+ perfectLabel: 'Perfekt',
22
+ bodegaLabel: 'Bodega',
23
+ readyTitle: 'Redo',
24
+ readyDescription: 'Välj behållare och plats för att beräkna.',
25
+ estimatedTimeLabel: 'Beräknad tid',
26
+ methodLabel: 'Metod',
27
+ containerLabel: 'Behållare',
28
+ alreadyColdLabel: 'Redan kallt!',
29
+ neverColdLabel: 'Aldrig kallt'
30
+ };
31
+
32
+ const faqTitle = 'Vanliga frågor';
33
+ const bibliographyTitle = 'Bibliografi & Källor';
34
+
35
+ const faq: BeerCoolerLocaleContent['faq'] = [
36
+ {
37
+ question: 'Hur beräknar verktyget kylningstiden?',
38
+ answer: 'Det tillämpar Newtons kylningslag: T(t) = T_env + (T₀ - T_env) × e^(-kt). Konstanten k varierar beroende på behållarens material och kylmedium. En aluminiumburk i kylskåp har ett helt annat k än en glaskflaska i frys. De värden som används här är kalibrerade mot verkliga experiment för varje kombination.',
39
+ },
40
+ {
41
+ question: 'Fungerar knepet med våt pappershandduk och salt verkligen?',
42
+ answer: 'Ja, och ganska märkbart. Att lindra behållaren i en fuktig pappershandduk med salt snabbar på kylningen av två skäl: vattnets förångning bortför ytterligare värme (förångningskylning), och salt sänker vattnets smältpunkt, vilket håller den fuktiga kontakten aktiv längre. Du kan få en extra nedgång på 2–4°C under de första minuterna jämfört med att placera en torr burk i frysen.',
43
+ },
44
+ {
45
+ question: 'Vilken är den ideala serveringstemperaturen för olika ölstilar?',
46
+ answer: 'Det beror på stilen. Lager och Pilsner serveras bäst mellan 3°C och 7°C. IPA och Pale Ale glänser vid 7°C till 10°C. Stout, Porter och komplexa aler bör serveras varmare, mellan 12°C och 14°C, så att deras aromatiska föreningar — kaffe, choklad, nötter — kan uttrycka sig fullt ut.',
47
+ },
48
+ {
49
+ question: 'Kan min öl explodera om jag lämnar den i frysen?',
50
+ answer: 'Ja. Alkohol och lösta socker sänkerölens smältpunkt under rent vatten: en standard 5% lager fryser omkring -3°C. När vattnet kristalliserar ökar volymen och löst CO2 höjer det inre trycket tills behållaren ger vika. Mer än 60 minuter i frysen — särskilt glaskflaskor — är en verklig fara. Använd denna räknare för att undvika det.',
51
+ },
52
+ {
53
+ question: 'Bränner öl om den kyls för snabbt?',
54
+ answer: 'Nej. Myten om "värmechock" som förstör öl är falsk. Det som verkligen kan påverka den är upprepad frysning och eltöning — vilket bryter proteiner och grumlar vätskan — eller direkt UV-ljusexponering. Snabb kylning i frys eller isvatten skadar inte smaken.',
55
+ },
56
+ ];
57
+
58
+ const howTo: BeerCoolerLocaleContent['howTo'] = [
59
+ {
60
+ name: 'Välj behållare',
61
+ text: 'Välj mellan en aluminiumburk eller glaskflaska. Materialet påverkar värmöverföringshastigheten drastiskt.',
62
+ },
63
+ {
64
+ name: 'Välj kylningsmetod',
65
+ text: 'Ange om du använder ett konventionellt kylskåp (4°C) eller frys (-18°C) för en ultrasnel process.',
66
+ },
67
+ {
68
+ name: 'Justera temperaturer',
69
+ text: 'Definiera dryckens aktuella temperatur (rumstemperatur) och den målkyltemperatur du vill ha.',
70
+ },
71
+ ];
72
+
73
+ const bibliography: BeerCoolerLocaleContent['bibliography'] = [
74
+ {
75
+ name: 'Newtons kylningslag - Wikipedia',
76
+ url: 'https://en.wikipedia.org/wiki/Newton%27s_law_of_cooling',
77
+ },
78
+ {
79
+ name: 'Avancerad kemi för öl och ölbryggning - 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: 'Vetenskapen om kyla och termodynamik',
88
+ level: 2
89
+ },
90
+ {
91
+ type: 'paragraph',
92
+ html: 'Varför kyls burken före flaskan? Är det magi? Nej, det är <strong>Newtons kylningslag</strong> i handling. Detta verktyg beräknar matematiskt det exakta ögonblick då din dryck når termodynamisk perfektion. Varje material, varje miljö, varje starttemperatur matas in i samma differentialekvation som fysiker och ingenjörer använder för att modellera värmöverföring i industriella system.'
93
+ },
94
+ {
95
+ type: 'diagnostic',
96
+ title: 'Huvudformeln',
97
+ icon: 'mdi:function-variant',
98
+ variant: 'info',
99
+ badge: 'Fysik',
100
+ html: 'T(t) = T_env + (T_0 - T_env) * e^(-kt). Denna differentialekvation beskriver hur ett objekts temperatur ändras i proportion till skillnaden mellan dess temperatur och omgivningens. Konstanten k beror på behållarens material och geometri, vilket är varför en burk kyls snabbare än en flaska med samma volym.'
101
+ },
102
+ {
103
+ type: 'title',
104
+ text: 'Materiallekriget: Aluminium vs. Glas',
105
+ level: 2
106
+ },
107
+ {
108
+ type: 'paragraph',
109
+ html: '<strong>Aluminium</strong> har värmeledningsförmåga på ~205 W/(m·K), medan <strong>glas</strong> knappast uppnår 0,8 W/(m·K). Metall överför köld mycket snabbt, vilket gör det till den ideala behållaren för nödsituationer. Glas ger dock bättre isolering när det väl är kallt, vilket bibehåller den ideala temperaturen längre under konsumtionen. Denna kompromiss förklarar varför olika ölkulturer har utvecklat olika preferenser för varje material.'
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: 'Stout & Porter', value: '12°C - 14°C', icon: 'mdi:beer' }
117
+ ],
118
+ columns: 3
119
+ },
120
+ {
121
+ type: 'card',
122
+ title: 'Fryszonens farozon',
123
+ icon: 'mdi:snowflake-alert',
124
+ html: 'På grund av alkohol och lösta socker fryser öl under 0°C — en standard 5% lager fryser omkring -3°C. När vattnet kristalliserar ökar volymen, och CO2-trycket stiger samtidigt. Resultatet är en behållare som kan sprängas med våld. Lämna aldrig öl i frysen i mer än 45 minuter utan att ställa in en timer.'
125
+ },
126
+ {
127
+ type: 'proscons',
128
+ title: 'Nödkylningsknep',
129
+ items: [
130
+ { pro: 'Knep med våt handduk: Slå in burken i våt pappershandduk, frys sedan in — förångning snabbar på kylningen.', con: '' },
131
+ { pro: 'Arktisk saltlake: Fyll en hink med vatten, is och 2 matskedar salt för att nå -5°C saltlake.', con: '' },
132
+ { pro: 'Rotationsmetod: Snurra flaskan i isvatten för att tvinga fram konvektion och förkorta kylningstiden.', con: '' },
133
+ { pro: '', con: 'Placera inte en burk direkt på frysbordet utan timer — sprucken burkar är röriga och farliga.' }
134
+ ]
135
+ },
136
+ {
137
+ type: 'tip',
138
+ title: 'Pro tips: Förkyla glaset',
139
+ html: 'Glaset som du häller öl i har betydande värmemassa. Ett varmt glas kan höja temperaturen på en perfekt kall öl med 2–3°C omedelbar vid kontakt. Sätt serveringsglaset i frysen i 5 minuter innan du häller, eller skölj med kallt vatten. Det här enkla steget förlänger fönstret när din öl smaksätter exakt som avsett.'
140
+ },
141
+ {
142
+ type: 'title',
143
+ text: 'Förstå kylningskonstanten',
144
+ level: 2
145
+ },
146
+ {
147
+ type: 'paragraph',
148
+ html: 'Kylningskonstanten k i Newtons ekvation är inte ett fast universellt värde — det är en empirisk egenskap hos varje specifik behållare och medium. En tunn aluminiumburk i isvatten har ett dramatiskt annat k än en tjock glasflaska i stilla kylskåpsluft. Vår miniräknare använder uppmätta värden kalibrerade mot verkliga experiment för varje behållartyp, vilket ger dig förutsägelser exakta inom några minuter för typiska hemkylningsscenarioer.'
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
+ };