Nombrar alimentos en seis idiomas: lo que aprendimos
Traducir nombres de alimentos no es un problema de diccionario, sino cultural. Lo que aprendimos localizando 845+ alimentos a 6 idiomas para el catálogo de Vnutri.

Cada nombre de alimento en Vnutri está traducido a 6 idiomas: en, es, ca, fr, de, ru. Son ~5 000 cadenas únicas (845 alimentos × 6 idiomas). Cuando empezamos, parecía un problema de diccionario — encontrar un glosario y pasar el catálogo por un traductor. Tres meses después, otra conclusión: traducir nombres de alimentos no es un problema de diccionario.
Por qué la traducción directa falla
Tres motivos.
1. Un nombre no es una descripción. "Pollock" en inglés es un pez. En ruso, "минтай". Google Translate da "поллок" (transliteración fonética), porque no sabe que el término nombra un pez. Saber de qué pez se trata exige conocimiento de categoría, no traducción literal.
2. Las variedades son regionales. La manzana Honeycrisp es de uso diario en EE.UU. En Europa es rara. Granny Smith — al revés. Cuando digo "apple" en inglés pienso implícitamente en una variedad media estadounidense; "manzana" en español, una variedad media española. Frutos físicos distintos con nutriciones cercanas pero no idénticas.
3. Vocabulario regional. "Eggplant" (US) = "aubergine" (UK) = "berenjena" (ES) = "albergínia" (CA) = "aubergine" (FR) = "Aubergine" (DE) = "баклажан" (RU). Ya dos convenciones dentro del inglés. Lo mismo con "zucchini" / "courgette".
Y el peor caso — los nombres científicos. "Salmo salar" es salmón atlántico. La mayoría de traductores mantiene el latín ("Anguilliformes" en lugar de "anguila") porque no sabe a qué se refiere.
Tres capas de localización
Montamos un pipeline de tres capas, cada una más barata que la anterior, pero menos precisa en casos raros.
Capa 1: taxonomía OFF de ingredientes
La taxonomía de ingredientes de Open Food Facts es un diccionario multilingüe curado de alimentos. 4 212 entradas en 100+ idiomas cada una. Licencia ODbL.
Tasa de match: ~70 % del catálogo. Primera y más barata pasada.
Match por niveles:
- Directo (apple → apple) → traducción.
- Singularizado (apples → apple) → traducción.
- Subclave de 2 tokens ordenados (black beans → beans + black) → traducción.
- Subclave invertida (beans black → black beans) → traducción.
- Sustantivo principal (chocolate dark → chocolate) → traducción (con cautela).
Con un match — sacamos los nombres listos de OFF en las 6 idiomas. Calidad excelente: OFF está curado, los falsos positivos son casi imposibles.
Capa 2: Wikidata
Para el ~30 % restante — Wikidata vía API wbsearchentities. Selector por niveles con filtros P31 (instancia de alimento).
- Match exacto de label/alias + señal de alimento en descripción/P31.
- Solapamiento por substring + palabra clave de alimento (
vegetable,fish,meat). P31en lista blanca de alimentos (Q2095 food,Q3314483 cultivar,Q502163 fruit).- Descripción que matchea regex amplia de alimento.
Dentro de cada nivel ordenamos por realTranslationCount — filtra binomios científicos copiados sin cambio a cada idioma.
Tasa de match: ~25 % adicional. Cacheado. Se quedó alrededor de 476 alimentos — los límites de rate sin autenticación de Wikidata cortan el crawling.
Capa 3: Google Cloud Translation v3 (Translation LLM)
Pasada final. Modelo general/translation-llm en us-central1. No es NMT (traducción automática neuronal) — el Translation LLM va mejor para nombres de alimentos con estado.
Por qué el LLM gana al NMT:
- Concordancia de género. "cooked adzuki beans" → español: "judías adzuki cocidas" ✓ femenino plural. NMT pone "cocido" por defecto, mal. El LLM ve el sustantivo en la misma cadena y aplica el género correcto.
- Vocabulario idiomático. "pollock" → ruso: NMT da "поллок"; LLM da "минтай". "cloudberry" → francés: NMT devuelve "cloudberry"; LLM da "mûre des marais".
Coste — $80/M chars (vs $20 NMT). Para 5 000 × 30 caracteres × 5 idiomas no-EN ≈ $60 por pasada completa. Cacheado por (frase, idioma).
Tras la pasada del LLM — tabla fija de fixes para 13 alucinaciones detectadas con revisión manual.
Trampas concretas
Lo que aprendimos por el camino.
Marcas. "Blackberry" en inglés es una baya. El LLM a veces lo traduce a "BlackBerry" (el móvil) en español. Fix: lista de bloqueo de marcas hardcoded.
Abreviaturas. "fig" (higo) — el LLM en alemán dio "Abb." y en ruso "рис." (pensando que era "figure" en una tabla). La palabra estaba fuera de contexto y el LLM eligió el significado estadísticamente común "fig." (abreviatura de figure).
Binomios pasivo-agresivos. Wikidata guarda a menudo nombres latinos como label principal ("Anguilliformes" para "anguila"). Si esos binomios se copian como "traducciones", 100+ idiomas terminan con la misma cadena latina — parece "muchas traducciones" pero es una sola. Un filtro por realTranslationCount (cadenas distintas entre idiomas) elimina esos casos.
Cambios verbo/sustantivo. "skate" en inglés es un pez (raya). El LLM en ruso dio "кататься на коньках" (patinar). El contexto "100 g skate" no ayudó.
Efecto sushi. Palabras japonesas tomadas por la mayoría de idiomas europeos. "Tofu", "miso", "sushi", "edamame" — se quedan tal cual en las 6 locales. No las traducimos.
Sufijo de estado
Un problema aparte — el estado. "apple cooked" → en español: "manzana cocida" (concordancia de género femenino). El LLM lo resuelve, pero solo si la coma se transforma en prefijo adjetivo antes de mandar: "apple, cooked" → "cooked apple" → "manzana cocida".
Si no, el LLM traduce la forma con coma literalmente como "manzana, cocida", calco del inglés y gramaticalmente raro.
Es un transform hardcoded antes de la llamada al LLM. Forma con coma → frase nominal natural → LLM → frase nominal natural en el idioma destino.
Orden de palabras por idioma
El inglés pone el adjetivo antes del sustantivo: "red apple". El francés después: "pomme rouge". El español — normalmente después ("manzana roja"), a veces antes ("buena manzana"). El catalán — casi siempre después.
La traducción directa mantiene el orden del idioma fuente. Eso da resultados raros con nombres compuestos largos: "raw black beans" → "judías negras crudas" (correcto) vs "crudas judías negras" (incorrecto).
Una pasada final de reorder (Claude Sonnet, cacheada) recorre cada idioma y reescribe los nombres en forma noun-first. Es una etapa propia del pipeline.
No escribimos halal/kosher
Son sobre certificación de proceso, no sobre el alimento en sí. "Queso kosher" no es el mismo queso que el normal (requisitos de producción distintos). Vnutri no etiqueta productos como halal/kosher — no es propiedad del alimento, sino del proceso de producción. Ver 9 dietas explicadas.
Cobertura
Tras las tres capas del pipeline:
- en — 100 % (canónica)
- es — 95 %
- ca — 90 %
- fr — 94 %
- de — 92 %
- ru — 89 %
El resto — donde el nombre simplemente no está en OFF/Wikidata y el LLM dio algo incorrecto. Se arreglan a mano en name-overrides.json.
Lo que NO hacemos
- No traducimos marcas. Si el nombre lleva marca, se queda tal cual.
- No damos libertad al LLM. Cada traducción se verifica contra OFF/Wikidata donde hay data point.
- No usamos NMT. Solo Translation LLM o taxonomía curada.
Problemas abiertos
Variedades regionales. "Apple" — en el catálogo es una manzana promedio. El usuario ruso piensa en antonovka o gala; el estadounidense en Honeycrisp o Red Delicious. Frutos físicos distintos con nutrición cercana pero no idéntica.
Platos locales. Pelmeni, borscht, kasha — palabras que existen en cada idioma pero referencian platos físicos ligeramente distintos. Vnutri suele usar el nombre de origen con transliteración inglesa como ancla.
Transliterar vs traducir. "Sushi" en alemán es "Sushi". "Sushi" en ruso es "суши". "Pizza" en alemán es "Pizza". "Pizza" en ruso es "пицца". Cuándo transliterar vs traducir — sin regla dura, vamos por convención.
Más
Arquitectura del catálogo — de dónde salen nuestros datos. Detalles de implementación — en el directorio apps/scripts/ del repo.
Referencias
- Open Food Facts. Ingredients Taxonomy. https://github.com/openfoodfacts/openfoodfacts-server/tree/main/taxonomies/food
- Wikidata Foundation. Wikidata Query Service. https://query.wikidata.org/
- Google Cloud. Cloud Translation API v3 documentation. 2024.
- Wood AJ, Lengyel P, et al. Multilingual neural machine translation: research and product. Trans Assoc Comput Linguist. 2020.