@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 = 'カクテルバランサー:サワーの法則';
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: "これはミクソロジーの黄金比で、強いベース(スピリッツ)、酸(シトラス)、甘さ(シロップ)の3つの要素を調和させます。古典的なレシピは通常、2:1:1の比率(強い:酸:甘い)に従いますが、これは強度と密度によって異なります。",
54
+ },
55
+ {
56
+ question: "希釈がカクテルのバランスにどのように影響しますか?",
57
+ answer: "氷は冷やすだけでなく、水を加える(希釈)ことでスピリッツの香りを開き、酸味と甘さのピークを柔らかくします。シェイカーで調和したカクテルは、グラスに長く氷が入ったままになると不調和になることがあります。",
58
+ },
59
+ {
60
+ question: "ホームカクテルがバーのようなじゃない理由は何ですか?",
61
+ answer: "通常は砂糖とシトラスのpHのバランスが不足しているからです。レモンは季節によって酸性度が異なります。当社の計算機は、使用されたジュースの量に基づいてシロップの正確な量を調整するのに役立ちます。",
62
+ },
63
+ {
64
+ question: "Brix度とは何ですか?なぜカクテルに重要なのですか?",
65
+ answer: "Brixは液体に溶解した砂糖の量を測定するスケールです。シンプルシロップ(1:1)は約50°Brixですが、リッチシロップ(2:1)は66°Brixを超えます。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: 'intuitionが数学と出会うデジタルラボへようこそ。このツールは単なるレシピ本ではありません。それはあなたのカクテルの分子構造をリアルタイムで解体し、分析するために設計された<strong>高度な物理化学シミュレーター</strong>です。シトラスの1滴、スピリッツの1メジャー、シロップの1グラムは、すべて変わらない化学法則に従って相互作用し、あなたの飲み物が傑作か失望の失敗かを決定します。'
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: '酸性度は単なる風味ではなく、バランスの取れたカクテルの構造的支柱です。適切な酸性度がなければ、飲み物は平らで、1次元的で、忘れられてしまいます。当社のアルゴリズムはペルシャンライムの滴定酸性度とユーレカレモンを区別し、あなたのレシピを口腔内のバランスポイント全体だけシフトできる季節的なシトラスpH変動を考慮しています。'
127
+ },
128
+ {
129
+ type: 'card',
130
+ title: 'Brix制御(甘さ)',
131
+ icon: 'mdi:spoon-sugar',
132
+ html: 'カクテルのボディとテクスチャーは、完全に溶解した砂糖に依存します。シンプルシロップ(1:1)はリッチシロップ(2:1)、蜂蜜、またはアガベネクターとは大きく異なります。各甘味料は異なるBrix度と粘度を持ち、飲み物が舌にどのようにコートするかに影響を与えます。当社の計算機は、溶解した砂糖の正確なグラム数を計算して、最終的なマウスフィールと甘さの知覚を予測します。'
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>。シチリアのレモンはメキシコのライムとは異なる酸性度を含んでいます。Cointreau のようなトリプルセックはブルーキュラソー とはまったく異なる動作をします。同じレシピは1週間完璧にバランスして見え、次に激しく酸性に見え、単に季節的な果物変動のためだけです。'
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
+ };
@@ -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: "Brix 도수란 무엇이며 칵테일에서 왜 중요한가요?",
65
+ answer: "Brix는 액체에 용해된 설탕의 양을 측정하는 척도입니다. 심플 시럽 (1:1)은 약 50°Brix입니다. 리치 시럽 (2:1)은 66°Brix를 초과합니다. 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: 'Brix 제어 (단맛)',
131
+ icon: 'mdi:spoon-sugar',
132
+ html: '칵테일의 바디와 텍스처는 전적으로 용해된 설탕에 따라 달라집니다. 심플 시럽 (1:1)은 리치 시럽 (2:1), 꿀 또는 용설란 넥타와는 매우 다르게 작동합니다. 각 감미료는 음료가 혀를 코팅하는 방식에 영향을 미치는 다른 Brix 도수와 점도를 가지고 있습니다. 우리의 계산기는 용해된 설탕의 정확한 그램을 계산하여 최종 입안감과 단맛 인식을 예측합니다.'
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
+ };
@@ -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: De Zuurwet';
6
+ const description = 'Bereken het perfecte evenwicht tussen zoet en zuur voor je cocktails. Beheers de gulden snede van mixologie.';
7
+
8
+ const ui: CocktailBalancerUI = {
9
+ title: 'Cocktail Balancer',
10
+ presetsBtn: 'Recepten',
11
+ saveBtn: 'Opslaan',
12
+ resetBtn: 'Resetten',
13
+ emptyStateTitle: 'Je werkbank is leeg',
14
+ emptyStateDescription: 'Voeg ingrediënten toe om je cocktailbalans in real-time te analyseren.',
15
+ addBtn: 'Ingrediënt toevoegen',
16
+ addMoreBtn: 'Nog een ingrediënt toevoegen',
17
+ flavorProfileTitle: 'Smaakprofiel',
18
+ volLabel: 'Volume',
19
+ sugarLabel: 'Suiker',
20
+ colorLabel: 'Kleur',
21
+ sourLawTitle: 'Zuurwet',
22
+ acidDryLabel: 'Zuur (Droog)',
23
+ balanceLabel: 'Evenwicht',
24
+ sweetLabel: 'Zoet',
25
+ aiSuggestionTitle: 'AI-voorstel',
26
+ addIngredientTitle: 'Ingrediënt toevoegen',
27
+ searchPlaceholder: 'Zoeken op rum, limoen, siroop...',
28
+ presetsTitle: 'Recepten & voorinstellingen',
29
+ savedSectionTitle: 'Mijn opgeslagen',
30
+ classicsSectionTitle: 'Klassieken',
31
+ confirmDeleteTitle: 'Alles verwijderen?',
32
+ confirmDeleteText: 'Dit verwijdert alle ingrediënten van je werkbank. Deze actie kan niet ongedaan gemaakt worden.',
33
+ cancelBtn: 'Annuleren',
34
+ deleteBtn: 'Verwijderen',
35
+ verdictSpiritSeco: 'Gedistilleerd / Droog',
36
+ verdictSoloDulce: 'Alleen Zoet (Old Fashioned)',
37
+ verdictMuyAcido: 'Te zuur / Botten droog',
38
+ verdictAcido: 'Zuur / Hartigs',
39
+ verdictEquilibrado: 'Gebalanceerd (Zuur)',
40
+ verdictDulce: 'Zoet / Commercieel',
41
+ verdictEmpalagoso: 'Te zoet',
42
+ fixAddBitters: 'Bitterheid ontbreekt',
43
+ fixAddSugar: 'Te zuur',
44
+ fixAddAcid: 'Te zoet'
45
+ };
46
+
47
+ const faqTitle = 'Veelgestelde vragen';
48
+ const bibliographyTitle = 'Bibliografie & Bronnen';
49
+
50
+ const faq: CocktailBalancerLocaleContent['faq'] = [
51
+ {
52
+ question: "Wat is de 'Zuurwet'?",
53
+ answer: "Het is de gulden snede van mixologie die drie elementen in evenwicht brengt: de sterke basis (sterkedrank), het zuur (citrusvruchten) en het zoet (siropen). Een klassiek recept volgt meestal de verhouding 2:1:1 (Sterk:Zuur:Zoet), hoewel dit varieert afhankelijk van sterkte en dichtheid.",
54
+ },
55
+ {
56
+ question: "Hoe beïnvloedt verdunning het cocktail-evenwicht?",
57
+ answer: "Ijs koelt niet alleen; het voegt water toe (verdunning) die de aromas van de sterkedrank opent en de pieken van zuurheid en zoetheid verzacht. Een gebalanceerde cocktail in de shaker kan uit balans raken als hij te lang met ijs in het glas blijft.",
58
+ },
59
+ {
60
+ question: "Waarom smaken mijn huisgemaakte cocktails niet zoals die in een bar?",
61
+ answer: "Dit is meestal te wijten aan het gebrek aan evenwicht tussen suiker en de pH van de citrusvruchten. Citroenen variëren in zuurgraad afhankelijk van het seizoen. Onze rekenmachine helpt je de exacte hoeveelheid siroop aan te passen op basis van het volume sap dat je gebruikt.",
62
+ },
63
+ {
64
+ question: "Wat zijn Brix-graden en waarom zijn ze belangrijk in cocktails?",
65
+ answer: "Brix is een schaal die de hoeveelheid opgelost suiker in een vloeistof meet. Een eenvoudige siroop (1:1) ligt rond de 50 °Brix; een rijke siroop (2:1) overschrijdt 66 °Brix. Hoe hoger de Brix, hoe meer lichaam en zoetheid het per volume-eenheid bijdraagt. Dit weten stelt je in staat siropen in een recept uit te wisselen zonder het evenwicht te verstoren.",
66
+ },
67
+ ];
68
+
69
+ const howTo: CocktailBalancerLocaleContent['howTo'] = [
70
+ {
71
+ name: "Selecteer de alcoholische basis",
72
+ text: "Kies de hoofdsterkedrank (Jenever, Rum, Whiskey) uit onze database om het lichaam en alcoholbijdrage ervan te kennen.",
73
+ },
74
+ {
75
+ name: "Voer de zure stof in",
76
+ text: "Voeg het volume citroensap, limoensap of grapefruitrsap toe. De rekenmachine analyseert de pH-impact op het mengsel.",
77
+ },
78
+ {
79
+ name: "Pas de zoete component aan",
80
+ text: "Voer het type siroop in (eenvoudig, 2:1, agave) en kijk hoe de balans-indicator in real-time beweegt.",
81
+ },
82
+ {
83
+ name: "Perfect serveren",
84
+ text: "Controleer het eindoordeel van het gereedschap: de zuurbegrafenis, de geschatte ABV na verdunning en correctievoorslagen. Serveer met vers ijs en verfijn citrusvruchten of siroop naar smaak.",
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: 'Moleculaire technologie en vloeistofbalans',
107
+ level: 2
108
+ },
109
+ {
110
+ type: 'paragraph',
111
+ html: 'Welkom in het digitale laboratorium waar intuïtie wiskunde ontmoet. Dit gereedschap is geen eenvoudig receptenboek; het is een <strong>geavanceerde fysisch-chemische simulator</strong> ontworpen om de moleculaire structuur van je cocktails in real-time te deconstrueren en analyseren. Elke druppel citrusvruchten, elke maat sterkedrank, elke gram siroop werkt volgens onveranderlijke chemische wetten die bepalen of je drank een meesterwerk of een teleurstellend fiasco zal zijn.'
112
+ },
113
+ {
114
+ type: 'stats',
115
+ items: [
116
+ { label: 'Limoen', value: '~6% Zuur', icon: 'mdi:fruit-citrus' },
117
+ { label: 'Citroen', value: '~6% Zuur', icon: 'mdi:fruit-citrus' },
118
+ { label: 'Grapefruit', value: '~1-2% Zuur', icon: 'mdi:fruit-citrus' }
119
+ ],
120
+ columns: 3
121
+ },
122
+ {
123
+ type: 'card',
124
+ title: 'De wetenschap van zuurheid',
125
+ icon: 'mdi:fruit-citrus',
126
+ html: 'Zuurheid is niet alleen een smaak; het is de structurele ruggengraat van elke gebalanceerde cocktail. Zonder de juiste zuurheid wordt een drankje plat, eendimensionaal en onvergetelijk. Ons algoritme onderscheidt de titreerbare zuurheid van een Perzische limoen versus een Eureka-citroen en houdt rekening met seizoensgebonden variaties in pH van citrusvruchten die je recept met een volledig balancepunt kunnen verschuiven aan het verhemelte.'
127
+ },
128
+ {
129
+ type: 'card',
130
+ title: 'Brix controle (Zoetheid)',
131
+ icon: 'mdi:spoon-sugar',
132
+ html: 'Het lichaam en de textuur van je cocktail hangen volledig af van opgelost suiker. Een eenvoudige siroop (1:1) gedraagt zich heel anders dan een rijke siroop (2:1), honing of agavenectar. Elke zoetmaker heeft een ander Brix-getal en een ander soortelijk gewicht die bepalen hoe de drank je tong bekleedt. Onze rekenmachine berekent de exacte grammen opgelost suiker om het uiteindelijke mondgevoel en de zoetewaarneming te voorspellen.'
133
+ },
134
+ {
135
+ type: 'card',
136
+ title: 'Thermodynamica en verdunning',
137
+ icon: 'mdi:water-percent',
138
+ html: 'Een geschudde cocktail verdunt 25-40% afhankelijk van ijstemperatuur, schuddingstechniek en duur. Deze waterbijdrage is geen fout; het is een essentieel ingrediënt dat aromas opent en de rand van alcohol verzacht. Onze rekenmachine schat de uiteindelijke ABV na verdunning, dus je kunt dranken ontwerpen met precies de beoogde sterkte en smaakevenwicht.'
139
+ },
140
+ {
141
+ type: 'title',
142
+ text: 'Buiten de basisratio',
143
+ level: 2
144
+ },
145
+ {
146
+ type: 'paragraph',
147
+ html: 'Veel barkeepers leren de klassieke 2:1:1-regel (2 delen sterkedrank, 1 deel zuur, 1 deel zoet) en behandelen deze als universale waarheid. Echter, <strong>chemie is veel genuanceerder</strong>. Een citroen uit Sicilië bevat een ander zuurgehalte dan een limoen uit Mexico. Een triple sec zoals Cointreau gedraagt zich radicaal anders dan een blauwe Curaçao. Hetzelfde recept kan één week perfect gebalanceerd smaken en volgende week genadeloos zuur, simpelweg vanwege seizoensgebonden fruitvariatie.'
148
+ },
149
+ {
150
+ type: 'paragraph',
151
+ html: 'Deze balancer doorbreekt deze simplistische barrières. Door je specifieke ingrediënten in te voeren, raadpleeg je een levende database die zuurgraad- en zoetheids-vectoren dynamisch aanpast om een precieze sensorische kaart van je creatie aan te bieden. Hou op met gissen en begin je cocktails met dezelfde wetenschappelijke nauwkeurigheid te ontwerpen die barkeepers in toonaangevende gelegenheden elke service gebruiken.'
152
+ },
153
+ {
154
+ type: 'summary',
155
+ title: 'Voor wie is dit gereedschap bestemd?',
156
+ items: [
157
+ 'Professionele barkeepers: Standaardiseer recepten en creëer signature menu\'s met reproduceerbare consistentie.',
158
+ 'Huisenthousiasten: Hou op met gissen en begin te begrijpen waarom je cocktails slagen of mislukken.',
159
+ 'Drankenitwikkelaars: Prototype snel nieuwe smaakconcepten voordat dure productiereeksen volgen.'
160
+ ]
161
+ },
162
+ {
163
+ type: 'diagnostic',
164
+ title: 'De gouden zone',
165
+ icon: 'mdi:star',
166
+ variant: 'success',
167
+ badge: 'Doel',
168
+ html: 'Dit is het ultieme doel: een gecontroleerde pH waarbij suiker de agressie van zuur neutraliseert zonder de essentiële oliën en aromatische stoffen van de basissterkedrank te maskeren. Dit precieze evenwicht is waar onsterfelijke klassiekers leven — de Daiquiri, de Margarita, de Sidecar — dranken die decennia hebben overleefd omdat ze de fundamentele wetten van smaakchemie gehoorzamen.'
169
+ },
170
+ {
171
+ type: 'tip',
172
+ title: 'Deskundig advies: gebruik altijd verse citrusvruchten',
173
+ html: 'Pers citrusvruchten altijd op het laatste moment. Citroenen en limoensap oxideren snel en verliezen binnen 20-30 minuten na het persen hun levende zuurheid. Een cocktail gemaakt met echt vers sap heeft altijd een helderheid en vitaliteit aan het verhemelte die geen afgeperst product kan repliceren. Gebruik fruit op kamertemperatuur om de sapopbrengst te maximaliseren.'
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
+ };