@gram-lang/i18n
Normalisation partagée des unités/du temps et dictionnaires de chaînes UI, utilisés en interne à travers le pipeline (le parser ne normalise pas les unités — cela se passe dans le moteur de mise à l'échelle de @gram-lang/kitchen et dans la standardisation de masse de @gram-lang/analyzer), afin que "càs", "tbsp", et "cuillère à soupe" soient tous reconnus comme la même unité, quelle que soit la locale dans laquelle une recette ou une entrée de base de données a été écrite.
Unités canoniques & alias
normalizeUnit fait correspondre tout alias reconnu (anglais ou français, insensible à la casse) à sa forme canonique courte :
| Canonique | Alias |
|---|---|
tsp | càc, cac, c.à.c, cuillère à café, cuillères à café, cuillere a cafe, cuilleres a cafe |
tbsp | càs, cas, c.à.s, cuillère à soupe, cuillères à soupe, cuillere a soupe, cuilleres a soupe |
tad | soupçon, soupcons |
dash | trait |
pinch | pincée, pincee, pincées, pincees |
smidgen | poussière, poussiere, poussières, poussieres |
drop | goutte, gouttes |
fl oz | once liquide, onces liquides |
ml | millilitre, millilitres |
cl | centilitre, centilitres |
dl | décilitre, décilitres, decilitre, decilitres |
l | litre, litres |
tasse | tasse, tasses |
mg | milligramme, milligrammes |
g | gramme, grammes |
kg | kilo, kilos, kilogramme, kilogrammes |
livre | livre, livres |
oz | once, onces |
function normalizeUnit(rawUnit: string | undefined | null, lang?: string): stringimport { normalizeUnit } from '@gram-lang/i18n';
normalizeUnit('càs'); // "tbsp"
normalizeUnit('Tablespoons'); // "tbsp"
normalizeUnit('kilo', 'fr'); // "kg" (recherche scopée par langue, avec repli sur le global)Une entrée non reconnue est retournée en minuscules et sans espaces superflus, inchangée.
Unités de temps
Le même schéma de normalisation par alias, appliqué aux durées :
| Canonique | Alias |
|---|---|
d | j, jour, jours |
h | heure, heures |
m | min, mins, minute, minutes |
s | sec, secs, seconde, secondes |
function resolveTimeUnit(unit?: string | null, lang?: string): stringimport { resolveTimeUnit } from '@gram-lang/i18n';
resolveTimeUnit('minutes'); // "m"
resolveTimeUnit('heures', 'fr'); // "h"Catégories d'ingrédients par défaut
Utilisées par gram shop et d'autres consommateurs pour grouper une liste de courses par famille culinaire quand l'entrée de base de données d'un ingrédient n'a pas de category explicite :
| Catégories par défaut |
|---|
| Légumes |
| Fruits |
| Viandes |
| Poissons & Fruits de mer |
| Crémerie |
| Céréales |
| Légumineuses |
| Noix & Graines |
| Huiles |
| Herbes |
| Épices |
| Condiments |
| Sucres |
| Boissons |
| Autres |
CATEGORY_KEYS exporte les clés stables et invariantes par langue (produce, dairy, meat, pantry, ...), et getCategoryLabels(lang) résout ces clés en libellés traduits :
function getDefaultCategories(lang?: string): string[] // par défaut 'en'
function getCategoryLabels(lang?: string): Record<CategoryKey, string>import { getDefaultCategories, getCategoryLabels, CATEGORY_KEYS } from '@gram-lang/i18n';
getDefaultCategories('fr'); // ["Légumes", "Fruits", "Viandes", ...]
getCategoryLabels('fr').produce; // "Légumes"Tables de conversion d'unités
@gram-lang/i18n sert de source de vérité unique pour les facteurs de conversion intra-famille (UNIT_CONVERSIONS) et les multiplicateurs de durée en minutes (TIME_TO_MINUTES) :
import { UNIT_CONVERSIONS, TIME_TO_MINUTES } from '@gram-lang/i18n';
UNIT_CONVERSIONS.mass.map.kg; // 1000 (grammes)
UNIT_CONVERSIONS.volume.map.tbsp; // 14.7868 (mL)
TIME_TO_MINUTES.h; // 60 (minutes)