store: nombres de ítem en el idioma de la web (desde home_item_data)

El catálogo original solo tiene el nombre en español, así que /en/store venía
mostrando los ítems en español. Ahora salen de `home_item_data` (extraída de
los DB2 del cliente, commit 4ba9c42), que es el único sitio con el nombre en
inglés.

- getStoreCatalog(locale) hace LEFT JOIN con home_item_data y elige name_es o
  name_en. Si falta el nombre en ese idioma se cae al del catálogo, que siempre
  está, así que ningún ítem puede quedarse sin nombre.
- La columna se elige de una lista cerrada ('en' -> name_en, resto -> name_es):
  nunca se interpola el locale crudo, que viene de la URL.
- /api/store/catalog recibe el locale por query: la ruta no cuelga de [locale].

Verificado en los dos idiomas: 45327 sale "Grito de la sirena" en /es y
"Siren's Cry" en /en. El árbol sigue devolviendo las 3068 filas y ninguna sin
nombre (el JOIN no duplica: `entry` es clave primaria).

Pendiente: los nombres de las CATEGORÍAS siguen solo en español
(home_store_category.name), así que /en/store se ve a medias. No son datos del
juego, así que los DB2 no ayudan: hay que traducir 218 nombres distintos.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-15 08:31:57 +00:00
parent 4ba9c42829
commit 2daf920c01
3 changed files with 24 additions and 6 deletions
+1 -1
View File
@@ -140,7 +140,7 @@ export function StoreBrowser({
if (!name || catalog) return
setLoading(true)
try {
const res = await fetch('/api/store/catalog', { credentials: 'same-origin' })
const res = await fetch(`/api/store/catalog?locale=${encodeURIComponent(locale)}`, { credentials: 'same-origin' })
const data: { success?: boolean; catalog?: StoreCategory[] } = await res.json()
setCatalog(data.success ? data.catalog ?? [] : [])
} catch {