@jjlmoya/utils-cooking 1.10.0 → 1.12.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.
- package/package.json +58 -58
- package/src/tests/schemas_fulfillment.test.ts +23 -0
- package/src/tests/title_quality.test.ts +55 -0
- package/src/tool/american-kitchen-converter/i18n/fr.ts +1 -1
- package/src/tool/banana-ripeness/i18n/fr.ts +86 -86
- package/src/tool/brine/component.astro +20 -22
- package/src/tool/cookware-guide/component.astro +22 -6
- package/src/tool/cookware-guide/i18n/en.ts +2 -2
- package/src/tool/cookware-guide/i18n/es.ts +3 -3
- package/src/tool/cookware-guide/i18n/fr.ts +109 -110
- package/src/tool/ingredient-rescaler/component.astro +8 -3
- package/src/tool/ingredient-rescaler/i18n/en.ts +74 -97
- package/src/tool/ingredient-rescaler/i18n/es.ts +77 -100
- package/src/tool/kitchen-timer/component.astro +27 -9
- package/src/tool/kitchen-timer/i18n/en.ts +6 -7
- package/src/tool/kitchen-timer/i18n/es.ts +7 -8
- package/src/tool/kitchen-timer/i18n/fr.ts +76 -77
- package/src/tool/kitchen-timer/init.ts +23 -6
- package/src/tool/kitchen-timer/lib/KitchenTimer.ts +20 -8
- package/src/tool/meringue-peak/component.astro +4 -4
- package/src/tool/meringue-peak/i18n/fr.ts +1 -1
- package/src/tool/mold-scaler/component.astro +17 -11
- package/src/tool/mold-scaler/i18n/en.ts +87 -60
- package/src/tool/mold-scaler/i18n/es.ts +87 -61
- package/src/tool/mold-scaler/i18n/fr.ts +97 -69
- package/src/tool/pizza/i18n/en.ts +2 -2
- package/src/tool/pizza/i18n/es.ts +2 -2
- package/src/tool/pizza/i18n/fr.ts +2 -2
- package/src/tool/roux-guide/i18n/en.ts +18 -1
- package/src/tool/roux-guide/i18n/es.ts +21 -4
- package/src/tool/roux-guide/i18n/fr.ts +18 -1
- package/src/tool/roux-guide/init.ts +55 -52
- package/src/tool/sourdough-calculator/i18n/es.ts +133 -133
|
@@ -72,7 +72,7 @@ const appSchema = {
|
|
|
72
72
|
};
|
|
73
73
|
|
|
74
74
|
export const content: ToolLocaleContent = {
|
|
75
|
-
slug: 'guia-
|
|
75
|
+
slug: 'guia-roux',
|
|
76
76
|
title: 'Guía Maestra de Roux y Salsas Madre',
|
|
77
77
|
description: 'Calculadora interactiva de Roux. Aprende a crear Bechamel, Velouté y Espagnole con proporciones exactas. La base de la alta cocina francesa.',
|
|
78
78
|
faqTitle: 'Preguntas Frecuentes',
|
|
@@ -227,7 +227,7 @@ export const content: ToolLocaleContent = {
|
|
|
227
227
|
type: 'diagnostic',
|
|
228
228
|
variant: 'warning',
|
|
229
229
|
title: '¿Salsa con Grumaje o Sabor a Harina?',
|
|
230
|
-
html: 'Si la salsa tiene grumos, probablemente añadiste líquido caliente a un roux caliente. Aplica el choque térmico (
|
|
230
|
+
html: 'Si la salsa tiene grumos, probablemente añadiste líquido caliente a un roux caliente. Aplica el choque térmico (liquide frío sobre roux caliente). Si sabe a harina, aumenta el tiempo de cocción inicial antes de añadir el líquido para gelatinizar el almidón correctamente.',
|
|
231
231
|
},
|
|
232
232
|
{
|
|
233
233
|
type: 'title',
|
|
@@ -284,13 +284,30 @@ export const content: ToolLocaleContent = {
|
|
|
284
284
|
butter: 'Mantequilla',
|
|
285
285
|
flour: 'Harina',
|
|
286
286
|
instructions: 'Instrucciones',
|
|
287
|
-
sauceName: 'Tipo de
|
|
287
|
+
sauceName: 'Tipo de Sauce',
|
|
288
288
|
ratio: 'Ratio',
|
|
289
289
|
chefTip: 'Tip del Chef',
|
|
290
290
|
white: 'Blanco',
|
|
291
291
|
blond: 'Rubio',
|
|
292
292
|
brown: 'Oscuro',
|
|
293
293
|
beurreManied: 'Beurre Manié (Si necesitas ajustar al final)',
|
|
294
|
+
recipeBechamel: "Bechamel",
|
|
295
|
+
recipeVeloute: "Velouté",
|
|
296
|
+
recipeEspagnole: "Española",
|
|
297
|
+
recipeTomato: "Salsa de Tomate",
|
|
298
|
+
tipBechamel: "Usa leche fría. Añádela gradualmente al principio o de golpe si bates fuerte.",
|
|
299
|
+
tipVeloute: "Usa fondo de ave o pescado. Deja que el roux huela a galleta antes de ligar.",
|
|
300
|
+
tipEspagnole: "Para salsas oscuras potentes. El roux debe estar color chocolate, pero sin quemarse.",
|
|
301
|
+
tipTomato: "El roux ayudará a dar cuerpo y suavidad a la textura final del tomate.",
|
|
302
|
+
rouxWhiteLabel: "Roux Blanco",
|
|
303
|
+
rouxBlondLabel: "Roux Rubio",
|
|
304
|
+
rouxBrownLabel: "Roux Oscuro",
|
|
305
|
+
descWhite: "Cocina solo hasta perder el olor a harina cruda. Sin color.",
|
|
306
|
+
descBlond: "Busca un color de mantequilla tostada y un aroma a nueces.",
|
|
307
|
+
descBrown: "Fuego muy suave. Color chocolate. Nota: requiere un 10% más de peso.",
|
|
308
|
+
timeWhite: "2-3 min",
|
|
309
|
+
timeBlond: "5-8 min",
|
|
310
|
+
timeBrown: "15-20 min",
|
|
294
311
|
},
|
|
295
|
-
schemas: [faqSchema, howToSchema, appSchema],
|
|
312
|
+
schemas: [faqSchema as any, howToSchema as any, appSchema as any],
|
|
296
313
|
};
|
|
@@ -101,6 +101,23 @@ export const content: ToolLocaleContent = {
|
|
|
101
101
|
blond: "Blond",
|
|
102
102
|
brown: "Brun",
|
|
103
103
|
beurreManied: "Beurre Manié (Pour ajuster à la fin)",
|
|
104
|
+
recipeBechamel: "Béchamel",
|
|
105
|
+
recipeVeloute: "Velouté",
|
|
106
|
+
recipeEspagnole: "Espagnole",
|
|
107
|
+
recipeTomato: "Sauce Tomate",
|
|
108
|
+
tipBechamel: "Utilisez du lait froid. Ajoutez-le progressivement au début ou d'un coup si vous fouettez vigoureusement.",
|
|
109
|
+
tipVeloute: "Utilisez un fond blanc. Le roux doit sentir le biscuit avant de lier au liquide.",
|
|
110
|
+
tipEspagnole: "Idéal pour les sauces brunes puissantes. Le roux doit être couleur chocolat, sans brûler.",
|
|
111
|
+
tipTomato: "Le roux aidera à donner du corps et de l'onctuosité à la texture finale de la tomate.",
|
|
112
|
+
rouxWhiteLabel: "Roux Blanc",
|
|
113
|
+
rouxBlondLabel: "Roux Blond",
|
|
114
|
+
rouxBrownLabel: "Roux Brun",
|
|
115
|
+
descWhite: "Cuire juste assez pour faire perdre l'odeur de farine crue. Sans coloration.",
|
|
116
|
+
descBlond: "Recherchez une couleur beurre noisette et un léger arôme de noix.",
|
|
117
|
+
descBrown: "Feu très doux. Couleur chocolate. Note : nécessite +10% de poids.",
|
|
118
|
+
timeWhite: "2-3 min",
|
|
119
|
+
timeBlond: "5-8 min",
|
|
120
|
+
timeBrown: "15-20 min",
|
|
104
121
|
},
|
|
105
122
|
faqTitle: "Questions Fréquentes sur le Roux",
|
|
106
123
|
faq: [
|
|
@@ -292,5 +309,5 @@ export const content: ToolLocaleContent = {
|
|
|
292
309
|
html: "Notre calculateur de roux garantit une consistance technique parfaite pour toutes vos créations culinaires.",
|
|
293
310
|
},
|
|
294
311
|
],
|
|
295
|
-
schemas: [faqSchema, howToSchema, appSchema],
|
|
312
|
+
schemas: [faqSchema as any, howToSchema as any, appSchema as any],
|
|
296
313
|
};
|
|
@@ -26,47 +26,6 @@ const VISCOSITY_RATIOS: Record<TextureLevel, number> = {
|
|
|
26
26
|
4: 185,
|
|
27
27
|
};
|
|
28
28
|
|
|
29
|
-
const LIQUID_CONFIG: Record<LiquidType, LiquidConfig> = {
|
|
30
|
-
milk: {
|
|
31
|
-
name: 'Béchamel',
|
|
32
|
-
rouxType: 'white',
|
|
33
|
-
tip: 'Usa leche fría. Añádela gradualmente al principio o de golpe si bates fuerte.',
|
|
34
|
-
},
|
|
35
|
-
lightStock: {
|
|
36
|
-
name: 'Velouté',
|
|
37
|
-
rouxType: 'blond',
|
|
38
|
-
tip: 'Usa fondo de ave o pescado. Deja que el roux huela a galleta antes de ligar.',
|
|
39
|
-
},
|
|
40
|
-
darkStock: {
|
|
41
|
-
name: 'Espagnole',
|
|
42
|
-
rouxType: 'brown',
|
|
43
|
-
tip: 'Para salsas oscuras potentes. El roux debe estar color chocolate, pero sin quemarse.',
|
|
44
|
-
},
|
|
45
|
-
tomato: {
|
|
46
|
-
name: 'Salsa de Tomate',
|
|
47
|
-
rouxType: 'blond',
|
|
48
|
-
tip: 'El roux ayudará a dar cuerpo y suavidad a la textura final del tomate.',
|
|
49
|
-
},
|
|
50
|
-
};
|
|
51
|
-
|
|
52
|
-
const ROUX_INFO: Record<'white' | 'blond' | 'brown', RouxInfo> = {
|
|
53
|
-
white: {
|
|
54
|
-
label: 'Blanco',
|
|
55
|
-
time: '2-3 min',
|
|
56
|
-
description: 'Cocina solo hasta perder el olor a harina cruda. Sin color.',
|
|
57
|
-
},
|
|
58
|
-
blond: {
|
|
59
|
-
label: 'Rubio',
|
|
60
|
-
time: '5-8 min',
|
|
61
|
-
description: 'Busca un color de mantequilla tostada y un aroma a nueces.',
|
|
62
|
-
},
|
|
63
|
-
brown: {
|
|
64
|
-
label: 'Oscuro',
|
|
65
|
-
time: '15-20 min',
|
|
66
|
-
description: 'Fuego muy suave. Color chocolate. Nota: requiere un 10% más de peso.',
|
|
67
|
-
},
|
|
68
|
-
};
|
|
69
|
-
|
|
70
29
|
interface RouxElements {
|
|
71
30
|
volumeInput: HTMLInputElement;
|
|
72
31
|
liquidBtns: NodeListOf<Element>;
|
|
@@ -124,9 +83,9 @@ function setupLiquidButtons(els: RouxElements, state: State, updateCalculations:
|
|
|
124
83
|
els.liquidBtns.forEach((btn) => {
|
|
125
84
|
btn.addEventListener('click', () => {
|
|
126
85
|
els.liquidBtns.forEach((b) => {
|
|
127
|
-
b.classList.remove('active'
|
|
86
|
+
b.classList.remove('active');
|
|
128
87
|
});
|
|
129
|
-
btn.classList.add('active'
|
|
88
|
+
btn.classList.add('active');
|
|
130
89
|
state.liquid = (btn as HTMLElement).dataset.type as LiquidType || 'milk';
|
|
131
90
|
updateCalculations();
|
|
132
91
|
});
|
|
@@ -137,19 +96,16 @@ function setupTextureButtons(els: RouxElements, state: State, updateCalculations
|
|
|
137
96
|
els.textureBtns.forEach((btn) => {
|
|
138
97
|
btn.addEventListener('click', () => {
|
|
139
98
|
els.textureBtns.forEach((b) => {
|
|
140
|
-
b.classList.remove('active'
|
|
141
|
-
b.classList.add('border-slate-100', 'dark:border-slate-800', 'bg-white', 'dark:bg-slate-900');
|
|
99
|
+
b.classList.remove('active');
|
|
142
100
|
});
|
|
143
|
-
|
|
144
|
-
btn.classList.remove('border-slate-100', 'dark:border-slate-800', 'bg-white', 'dark:bg-slate-900');
|
|
145
|
-
btn.classList.add('active', 'border-amber-500/50', 'bg-amber-50', 'dark:bg-amber-900/10');
|
|
101
|
+
btn.classList.add('active');
|
|
146
102
|
state.level = parseInt((btn as HTMLElement).dataset.level || '2') as TextureLevel;
|
|
147
103
|
updateCalculations();
|
|
148
104
|
});
|
|
149
105
|
});
|
|
150
106
|
}
|
|
151
107
|
|
|
152
|
-
function updateDisplay(els: RouxElements, state: State): void {
|
|
108
|
+
function updateDisplay(els: RouxElements, state: State, LIQUID_CONFIG: Record<LiquidType, LiquidConfig>, ROUX_INFO: Record<'white' | 'blond' | 'brown', RouxInfo>): void {
|
|
153
109
|
const config = LIQUID_CONFIG[state.liquid];
|
|
154
110
|
const baseRatio = VISCOSITY_RATIOS[state.level];
|
|
155
111
|
const liters = state.volume / 1000;
|
|
@@ -169,14 +125,61 @@ function updateDisplay(els: RouxElements, state: State): void {
|
|
|
169
125
|
els.progressBar.style.width = `${(state.level / 4) * 100}%`;
|
|
170
126
|
}
|
|
171
127
|
|
|
172
|
-
|
|
128
|
+
function getLiquidConfig(ui: Record<string, string>): Record<LiquidType, LiquidConfig> {
|
|
129
|
+
return {
|
|
130
|
+
milk: {
|
|
131
|
+
name: ui.recipeBechamel as string,
|
|
132
|
+
rouxType: 'white',
|
|
133
|
+
tip: ui.tipBechamel as string,
|
|
134
|
+
},
|
|
135
|
+
lightStock: {
|
|
136
|
+
name: ui.recipeVeloute as string,
|
|
137
|
+
rouxType: 'blond',
|
|
138
|
+
tip: ui.tipVeloute as string,
|
|
139
|
+
},
|
|
140
|
+
darkStock: {
|
|
141
|
+
name: ui.recipeEspagnole as string,
|
|
142
|
+
rouxType: 'brown',
|
|
143
|
+
tip: ui.tipEspagnole as string,
|
|
144
|
+
},
|
|
145
|
+
tomato: {
|
|
146
|
+
name: ui.recipeTomato as string,
|
|
147
|
+
rouxType: 'blond',
|
|
148
|
+
tip: ui.tipTomato as string,
|
|
149
|
+
},
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
function getRouxInfo(ui: Record<string, string>): Record<'white' | 'blond' | 'brown', RouxInfo> {
|
|
154
|
+
return {
|
|
155
|
+
white: {
|
|
156
|
+
label: ui.rouxWhiteLabel as string,
|
|
157
|
+
time: ui.timeWhite as string,
|
|
158
|
+
description: ui.descWhite as string,
|
|
159
|
+
},
|
|
160
|
+
blond: {
|
|
161
|
+
label: ui.rouxBlondLabel as string,
|
|
162
|
+
time: ui.timeBlond as string,
|
|
163
|
+
description: ui.descBlond as string,
|
|
164
|
+
},
|
|
165
|
+
brown: {
|
|
166
|
+
label: ui.rouxBrownLabel as string,
|
|
167
|
+
time: ui.timeBrown as string,
|
|
168
|
+
description: ui.descBrown as string,
|
|
169
|
+
},
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
export function initRouxGuide(ui: Record<string, string>): void {
|
|
173
174
|
const els = setupElements();
|
|
174
175
|
if (!els) return;
|
|
175
176
|
|
|
177
|
+
const LIQUID_CONFIG = getLiquidConfig(ui);
|
|
178
|
+
const ROUX_INFO = getRouxInfo(ui);
|
|
176
179
|
const state: State = { volume: 1000, liquid: 'milk', level: 2 };
|
|
177
|
-
const updateCalculations = () => updateDisplay(els, state);
|
|
180
|
+
const updateCalculations = () => updateDisplay(els, state, LIQUID_CONFIG, ROUX_INFO);
|
|
178
181
|
|
|
179
|
-
els.volumeInput.addEventListener('input', (e) => {
|
|
182
|
+
els.volumeInput.addEventListener('input', (e: Event) => {
|
|
180
183
|
state.volume = parseInt((e.target as HTMLInputElement).value) || 0;
|
|
181
184
|
updateCalculations();
|
|
182
185
|
});
|
|
@@ -3,130 +3,130 @@ import type { ToolLocaleContent } from '../../../types';
|
|
|
3
3
|
const title = "Calculadora de Masa Madre Ratios de Fermentación";
|
|
4
4
|
const description = "Calcula automáticamente las proporciones de masa madre, harina y agua para mantener tu cultivo. Ratios predefinidos o personalizados.";
|
|
5
5
|
const faq = [
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
6
|
+
{
|
|
7
|
+
question: '¿Qué es el ratio 1:1:1?',
|
|
8
|
+
answer: 'Es el ratio más común para mantener la masa madre a temperatura ambiente. Significa 1 parte de masa madre, 1 parte de harina y 1 parte de agua. Útil cuando refrescas diariamente.',
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
question: '¿Cuándo uso 1:2:2?',
|
|
12
|
+
answer: 'El ratio 1:2:2 es para activar la masa madre. Genera una fermentación más lenta pero predecible. Ideal si guardarás el cultivo en frío y quieres revigorarlo.',
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
question: '¿Cuál es el "sweet spot" 1:5:5?',
|
|
16
|
+
answer: 'El ratio 1:5:5 es el "sweet spot" para muchos panaderos. Permite 8-12 horas de fermentación a temperatura ambiente antes de que la masa madre esté lista. Equilibra comodidad con control de tiempo.',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
question: '¿Puedo usar ratios personalizados?',
|
|
20
|
+
answer: 'Absolutamente. Si tienes un protocolo específico, puedes ingresar tus propios ratios. Algunos panaderos usan 1:10:10 para fermentación lentísima, otros 1:1:0.8 para menos agua.',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
question: '¿La calculadora redondea los gramos?',
|
|
24
|
+
answer: 'Sí. Redondea al número entero más cercano para practicidad. Si necesitas máxima precisión, usa una báscula digital. Los pequeños redondeos no afectan significativamente la fermentación.',
|
|
25
|
+
},
|
|
26
|
+
];
|
|
27
27
|
const howTo = [
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
28
|
+
{
|
|
29
|
+
name: 'Ingresa la cantidad total que necesitas',
|
|
30
|
+
text: 'Define el peso total de masa madre que requieres para tu receta (ej: 300g para un pan típico).',
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
name: 'Selecciona el ratio de refresco',
|
|
34
|
+
text: 'Elige entre los ratios predefinidos (Mantener, Activar, Retardar, Fuerte, Sweet Spot) o crea uno personalizado.',
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
name: 'Obtén las cantidades exactas',
|
|
38
|
+
text: 'La calculadora te muestra cuánto de masa madre, harina y agua necesitas. Mezcla estos ingredientes y deja fermentar según tu protocolo.',
|
|
39
|
+
},
|
|
40
|
+
];
|
|
41
41
|
|
|
42
42
|
const faqSchema = {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
43
|
+
'@context': 'https://schema.org',
|
|
44
|
+
'@type': 'FAQPage',
|
|
45
|
+
mainEntity: faq.map((item) => ({
|
|
46
|
+
'@type': 'Question',
|
|
47
|
+
name: item.question,
|
|
48
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
49
|
+
})),
|
|
50
50
|
};
|
|
51
51
|
|
|
52
52
|
const howToSchema = {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
53
|
+
'@context': 'https://schema.org',
|
|
54
|
+
'@type': 'HowTo',
|
|
55
|
+
name: title,
|
|
56
|
+
description,
|
|
57
|
+
step: howTo.map((step) => ({
|
|
58
|
+
'@type': 'HowToStep',
|
|
59
|
+
name: step.name,
|
|
60
|
+
text: step.text,
|
|
61
|
+
})),
|
|
62
62
|
};
|
|
63
63
|
|
|
64
64
|
const appSchema = {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
65
|
+
'@context': 'https://schema.org',
|
|
66
|
+
'@type': 'SoftwareApplication',
|
|
67
|
+
name: title,
|
|
68
|
+
description,
|
|
69
|
+
applicationCategory: 'UtilitiesApplication',
|
|
70
|
+
operatingSystem: 'Web',
|
|
71
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
72
72
|
};
|
|
73
73
|
|
|
74
74
|
export const content: ToolLocaleContent = {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
75
|
+
slug: 'masa-madre',
|
|
76
|
+
title: 'Calculadora de Masa Madre Ratios de Fermentación',
|
|
77
|
+
description: 'Calcula automáticamente las proporciones de masa madre, harina y agua para mantener tu cultivo. Ratios predefinidos o personalizados.',
|
|
78
|
+
faqTitle: 'Preguntas Frecuentes',
|
|
79
|
+
faq: [
|
|
80
|
+
{
|
|
81
|
+
question: '¿Qué es el ratio 1:1:1?',
|
|
82
|
+
answer: 'Es el ratio más común para mantener la masa madre a temperatura ambiente. Significa 1 parte de masa madre, 1 parte de harina y 1 parte de agua. Útil cuando refrescas diariamente.',
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
question: '¿Cuándo uso 1:2:2?',
|
|
86
|
+
answer: 'El ratio 1:2:2 es para activar la masa madre. Genera una fermentación más lenta pero predecible. Ideal si guardarás el cultivo en frío y quieres revigorarlo.',
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
question: '¿Cuál es el "sweet spot" 1:5:5?',
|
|
90
|
+
answer: 'El ratio 1:5:5 es el "sweet spot" para muchos panaderos. Permite 8-12 horas de fermentación a temperatura ambiente antes de que la masa madre esté lista. Equilibra comodidad con control de tiempo.',
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
question: '¿Puedo usar ratios personalizados?',
|
|
94
|
+
answer: 'Absolutamente. Si tienes un protocolo específico, puedes ingresar tus propios ratios. Algunos panaderos usan 1:10:10 para fermentación lentísima, otros 1:1:0.8 para menos agua.',
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
question: '¿La calculadora redondea los gramos?',
|
|
98
|
+
answer: 'Sí. Redondea al número entero más cercano para practicidad. Si necesitas máxima precisión, usa una báscula digital. Los pequeños redondeos no afectan significativamente la fermentación.',
|
|
99
|
+
},
|
|
100
|
+
],
|
|
101
|
+
bibliographyTitle: 'Bibliografía',
|
|
102
|
+
bibliography: [
|
|
103
|
+
{
|
|
104
|
+
name: 'Tartine Bread - Chad Robertson',
|
|
105
|
+
url: 'https://www.penguinrandomhouse.com/books/310016/tartine-bread-by-chad-robertson/',
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
name: 'The Flavor Bible - Scaling and Ratios',
|
|
109
|
+
url: 'https://www.flavorprints.com/',
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
name: 'Full Proof Baking - Guides on Sourdough',
|
|
113
|
+
url: 'https://www.fullproofbaking.com/',
|
|
114
|
+
},
|
|
115
|
+
],
|
|
116
|
+
howTo: [
|
|
117
|
+
{
|
|
118
|
+
name: 'Ingresa la cantidad total que necesitas',
|
|
119
|
+
text: 'Define el peso total de masa madre que requieres para tu receta (ej: 300g para un pan típico).',
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
name: 'Selecciona el ratio de refresco',
|
|
123
|
+
text: 'Elige entre los ratios predefinidos (Mantener, Activar, Retardar, Fuerte, Sweet Spot) o crea uno personalizado.',
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
name: 'Obtén las cantidades exactas',
|
|
127
|
+
text: 'La calculadora te muestra cuánto de masa madre, harina y agua necesitas. Mezcla estos ingredientes y deja fermentar según tu protocolo.',
|
|
128
|
+
},
|
|
129
|
+
],
|
|
130
130
|
seo: [
|
|
131
131
|
{
|
|
132
132
|
type: 'title',
|
|
@@ -290,25 +290,25 @@ export const content: ToolLocaleContent = {
|
|
|
290
290
|
},
|
|
291
291
|
],
|
|
292
292
|
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
293
|
+
ui: {
|
|
294
|
+
totalAmount: 'Cantidad Final',
|
|
295
|
+
refreshRatio: 'Ratio de Refresco',
|
|
296
|
+
maintain: 'Mantener',
|
|
297
|
+
activate: 'Activar',
|
|
298
|
+
retard: 'Retardar',
|
|
299
|
+
strong: 'Fuerte',
|
|
300
|
+
sweetSpot: 'Sweet Spot',
|
|
301
|
+
custom: 'Custom',
|
|
302
|
+
sourdough: 'Masa Madre',
|
|
303
|
+
activeCulture: 'Cultivo activo',
|
|
304
|
+
flour: 'Harina',
|
|
305
|
+
flourType: 'Fuerza o Integral',
|
|
306
|
+
water: 'Agua',
|
|
307
|
+
chlorineFree: 'Sin cloro',
|
|
308
|
+
todayFormula: 'Formula de Hoy',
|
|
309
|
+
hydration: 'Hidratación 100 %',
|
|
310
|
+
totalDough: 'Total Masa',
|
|
311
|
+
mm: 'MM',
|
|
312
|
+
},
|
|
313
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
314
314
|
};
|