store: categorías en inglés (términos oficiales sacados de los DB2)
Cierra el idioma de /en/store: los nombres de ítem ya salían en inglés
(2daf920), pero el árbol de categorías seguía en español y la tienda se veía a
medias.
Los términos DEL JUEGO no se traducen a mano, se sacan del cliente, para que
casen con lo que ve un jugador en inglés:
- ChrClasses -> clases (Brujo = Warlock, Pícaro = Rogue...)
- ItemSet -> sets (Vestiduras de la Némesis = Nemesis Raiment, Las diez
tormentas = The Ten Storms, Atavío viento abisal = Netherwind
Regalia). Casando sin distinguir mayúsculas: las categorías
capitalizan distinto que los ItemSet.
- ItemSubClass-> tipos de arma (Armas de asta = Polearms, Varitas = Wands)
- home_item_data -> lo que no es ItemSet. Los sets de PvP de WotLK no son
ItemSets reales, así que "Gladiador furioso" = "Furious
Gladiator" sale de los nombres bilingües de sus propios ítems.
Solo se traduce a mano lo que la tienda se inventó y no existe en el juego
(Items de leveo = Leveling Items, Moneda de transfiguración = Transmog
Currency), más las fórmulas (Nivel de objeto N = Item Level N, Set de banda
tier N = Tier N Raid Set). Los ~45 nombres que son solo un código ("11-1") y
los que ya estaban en inglés ("Tier 7.1 (PvE)") se dejan igual.
wdc_db2.py aprende a leer strings de tablas no sparse: el valor guardado no es
un índice a la string table sino un offset relativo a la posición del propio
campo. Verificado con ChrClasses (las 10 clases en ambos idiomas).
Revisadas las 218 a mano. Corregida una que me había inventado: "Equipo de
Batalla del Iluminado de la Fuente del Sol" no es "Sunwell Radiance"
(eso es un buff): "Iluminado" es Lightbringer en el ItemSet y "Fuente del Sol"
es Sunwell según sus ítems -> "Sunwell Lightbringer Battlegear".
OJO, bug de datos preexistente: "Sacedorte" (errata de "Sacerdote") en las
categorías 3-10, 4-10 y 19-9; el 20-9 sí está bien. Se ve así en español. El
name_en va a "Priest"; la errata en español NO se toca.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -59,18 +59,23 @@ interface ItemRow extends RowDataPacket {
|
||||
*
|
||||
* El nombre del ítem sale de `home_item_data` (extraído de los DB2 del cliente
|
||||
* 3.4.3, ver sql/db2/), que es el ÚNICO sitio con el nombre en inglés: el
|
||||
* `home_store_item.name` del catálogo original es solo español. Si falta el
|
||||
* nombre en ese idioma se cae al del catálogo, que siempre está.
|
||||
* `home_store_item.name` del catálogo original es solo español. El de la
|
||||
* categoría sale de `home_store_category.name_en` (ver sql/store_category_en.sql).
|
||||
* En ambos casos, si falta el nombre en ese idioma se cae al del catálogo, que
|
||||
* siempre está.
|
||||
*/
|
||||
export async function getStoreCatalog(locale: string): Promise<StoreCategory[]> {
|
||||
// Solo se interpola el nombre de la COLUMNA, y sale de una lista cerrada:
|
||||
// nunca del locale crudo (que viene de la URL).
|
||||
const nameCol = locale === 'en' ? 'name_en' : 'name_es'
|
||||
const en = locale === 'en'
|
||||
const nameCol = en ? 'name_en' : 'name_es'
|
||||
const catNameCol = en ? 'name_en' : 'name'
|
||||
let cats: CatRow[] = []
|
||||
let items: ItemRow[] = []
|
||||
try {
|
||||
;[cats] = await db(DB.default).query<CatRow[]>(
|
||||
'SELECT code, parent_code, name, depth, sort FROM home_store_category ORDER BY sort',
|
||||
`SELECT code, parent_code, COALESCE(NULLIF(${catNameCol}, ''), name) AS name, depth, sort
|
||||
FROM home_store_category ORDER BY sort`,
|
||||
)
|
||||
;[items] = await db(DB.default).query<ItemRow[]>(
|
||||
`SELECT i.id, i.category_code, i.item_id, COALESCE(NULLIF(d.${nameCol}, ''), i.name) AS name,
|
||||
|
||||
Reference in New Issue
Block a user