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:
2026-07-15 08:45:24 +00:00
parent 2daf920c01
commit bb0f4f21c1
4 changed files with 456 additions and 4 deletions
+9 -4
View File
@@ -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,
+202
View File
@@ -0,0 +1,202 @@
"""Traduce los nombres de home_store_category al inglés -> sql/store_category_en.sql.
USO: mysql ... -N -e 'SELECT DISTINCT name FROM home_store_category' \\
| /root/NovaWoW/.venv/bin/python sql/db2/translate_categories.py
Prioridad: términos OFICIALES sacados de los DB2 del cliente (ChrClasses,
ItemSet, ItemSubClass) y de los nombres bilingües de home_item_data. Solo se
traduce a mano lo que la tienda se inventó y no existe en el juego.
"""
import json
import os
import re
import sys
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
import wdc_db2
HERE = os.path.dirname(os.path.abspath(__file__))
OUT = os.path.join(HERE, '..', 'store_category_en.sql')
def _pairs(table, field):
"""Pares es->en de un campo string, casando por id entre los dos locales."""
out = {}
for loc in ('esES', 'enUS'):
t = wdc_db2.DB2(f'/root/{loc}/{table}.db2')
out[loc] = {rid: t.string_at(i, field, row[field]) for i, (rid, row) in enumerate(t.rows)}
return {out['esES'][k]: out['enUS'][k] for k in out['esES']
if k in out['enUS'] and out['esES'][k]}
# Términos OFICIALES del juego, sacados del cliente: nunca inventados.
oficial = {}
oficial.update(_pairs('ChrClasses', 0)) # Name_lang
oficial.update(_pairs('ItemSet', 0)) # Name_lang
oficial.update(_pairs('ItemSubClass', 0)) # DisplayName_lang
oficial.update(_pairs('ItemSubClass', 1)) # VerboseName_lang
# case-insensitive: las categorías capitalizan distinto que los ItemSet
# ("Las Diez Tormentas" vs "Las diez tormentas").
OF = {k.lower(): v for k, v in oficial.items()}
# Términos extraídos de los nombres bilingües de ítem (no están en ItemSet:
# los sets de PvP de WotLK no son ItemSets reales). Verificados con
# `SELECT name_es, name_en FROM home_item_data WHERE name_es LIKE ...`.
OF.update({
'gladiador furioso': 'Furious Gladiator',
'gladiador incansable': 'Relentless Gladiator',
'gladiador indómito': 'Savage Gladiator',
'gladiador mortal': 'Deadly Gladiator',
'gladiador odioso': 'Hateful Gladiator',
})
# Vocabulario de la tienda (no son términos del juego; traducción manual).
ROL = {
'DPS caster': 'Caster DPS', 'DPS melee': 'Melee DPS', 'DPS Sanador': 'Healer DPS',
'DPS': 'DPS', 'Sanador': 'Healer', 'Tanque': 'Tank',
'Cuero': 'Leather', 'Malla': 'Mail', 'Placas': 'Plate', 'Tela': 'Cloth',
'Indómito': 'Savage', 'Mortal': 'Deadly', 'Odioso': 'Hateful',
}
MATERIAL = {'cuero': 'Leather', 'malla': 'Mail', 'placa': 'Plate', 'placas': 'Plate',
'tela': 'Cloth'}
PIEZA = {'Botas': 'Boots', 'Brazales': 'Bracers', 'Cinturones': 'Belts'}
MANUAL = {
'Abalorios': 'Trinkets', 'Anillos': 'Rings', 'Collares': 'Necks', 'Capas': 'Cloaks',
'Hombreras': 'Shoulders', 'Pecheras': 'Chests', 'Tabardos': 'Tabards',
'Escudos': 'Shields', 'Sostener': 'Held In Off-hand', 'Una mano': 'One-Hand',
'Dos manos': 'Two-Hand', 'Joyería': 'Jewelry', 'Armas': 'Weapons',
'Bolsas': 'Bags', 'Bolsa de almas': 'Soul Bag', 'Bolsas de profesiones': 'Profession Bags',
'Contenedores': 'Containers', 'Consumibles': 'Consumables', 'Pociones': 'Potions',
'Elíxires': 'Elixirs', 'Frascos': 'Flasks', 'Pergaminos': 'Scrolls',
'Comidas y bebidas': 'Food & Drinks', 'Esencias y polvos': 'Essences & Powders',
'Hierbas': 'Herbs', 'Minerales': 'Ores', 'Telas': 'Cloth', 'Cueros': 'Leather',
'Mascotas': 'Pets', 'Elementales': 'Elementals', 'Monedas': 'Currencies',
'Monturas terrestres': 'Ground Mounts', 'Monturas voladoras': 'Flying Mounts',
'Piedra hogar': 'Hearthstone', 'Miscelánea': 'Miscellaneous', 'Varios': 'Miscellaneous',
'Mejoras de objetos': 'Item Enhancements', 'Objetos de misión': 'Quest Items',
'Objetos comerciables': 'Trade Goods', 'Misiones repetibles': 'Repeatable Quests',
'Items de leveo': 'Leveling Items', 'Moneda de transfiguración': 'Transmog Currency',
'Tokens de Armadura': 'Armor Tokens',
# "Exalted" verificado con sus propios ítems: "Casco exaltado" = "Exalted Helmet".
'Placa Exaltada': 'Exalted Plate',
'Carcajs | Munición': 'Quivers | Ammo',
# Los DB2 solo traen "Espadas de una mano"/"de dos manos"; la tienda las
# agrupa, así que va el plural genérico del término oficial.
'Espadas': 'Swords', 'Hachas': 'Axes', 'Mazas': 'Maces', 'Arrojadizas': 'Thrown',
# OJO: "Sacedorte" es una errata de "Sacerdote" en home_store_category
# (códigos 3-10, 4-10 y 19-9; el 20-9 sí está bien escrito). Se traduce a
# Priest igualmente; la errata en español sigue ahí.
'Sacedorte': 'Priest',
"Templo de Ahn'Qiraj": "Temple of Ahn'Qiraj",
# El ItemSet oficial se llama "Equipo de batalla DE runaoscura"; la categoría
# se come el "de", así que no casa ni ignorando mayúsculas. El inglés sale
# igualmente del ItemSet.
'Equipo de Batalla Runaoscura': 'Darkruned Battlegear',
# Compuesto de dos términos oficiales: el ItemSet "Equipo de batalla de
# Iluminado" = "Lightbringer Battlegear", y "Fuente del Sol" = "Sunwell"
# (ítem "Hoja de La Fuente del Sol" = "Sunwell Blade"). Son las piezas T6.5
# de paladín. NO es "Sunwell Radiance", que es un buff, no un set.
'Equipo de Batalla del Iluminado de la Fuente del Sol': 'Sunwell Lightbringer Battlegear',
}
def tr(name):
n = name.strip()
# Nombres que son solo un código ("11-1", "23-10"): no son español.
if re.fullmatch(r'[\d.\-]+', n):
return n
# Nombres que ya están en inglés: "Tier 7.1 (PvE)", "Tier 4 (PvE) | Tier 1 (PvP)".
if re.fullmatch(r'Tier [\d.]+ \(Pv[EP]\)( \| Tier [\d.]+ \(Pv[EP]\))?', n):
return n
if n in MANUAL:
return MANUAL[n]
if n.lower() in OF:
return OF[n.lower()]
# "X (sufijo)": traducir cada parte por separado. Si el sufijo no se sabe
# traducir se deja igual ("(T2 Recolor)" ya está en inglés); si no se sabe
# traducir la base, se abandona la regla -> nunca se interpola None.
m = re.fullmatch(r'(.+?) \((.+)\)', n)
if m:
base, suf = m.groups()
b = tr(base)
if b:
return f'{b} ({ROL.get(suf) or tr(suf) or suf})'
rules = [
(r'^Nivel de objeto (.+)$', lambda m: f'Item Level {m.group(1)}'),
(r'^Set de banda tier (.+)$', lambda m: f'Tier {m.group(1)} Raid Set'),
(r'^Set de mazmorra (.+)$', lambda m: f'Dungeon Set {m.group(1)}'),
(r'^Set inicial (.+)$', lambda m: f'Starter Set {m.group(1)}'),
(r'^Set de Temporada de Arenas (.+)$', lambda m: f'Arena Season {m.group(1)} Set'),
(r'^Temporada de Arenas (.+)$', lambda m: f'Arena Season {m.group(1)}'),
(r'^Set del (.+)$', lambda m: f'{tr(m.group(1))} Set' if tr(m.group(1)) else None),
(r'^Reliquia (PvE|PvP)$', lambda m: f'{m.group(1)} Relic'),
(r'^Sets de armadura (PvE|PvP) \[Nivel (.+) a (.+)\]$',
lambda m: f'{m.group(1)} Armor Sets [Level {m.group(2)} to {m.group(3)}]'),
(r'^Sets de armadura (PvE|PvP) \[Nivel (.+)\]$',
lambda m: f'{m.group(1)} Armor Sets [Level {m.group(2)}]'),
(r'^Sets de transfiguración (PvE|PvP) \[Hasta nivel (.+)\]$',
lambda m: f'{m.group(1)} Transmog Sets [Up to level {m.group(2)}]'),
(r'^Armas de transfiguración (PvE|PvP) \[Hasta nivel (.+)\]$',
lambda m: f'{m.group(1)} Transmog Weapons [Up to level {m.group(2)}]'),
(r'^Accesorios de Transfiguración (PvE|PvP) \[Hasta nivel (.+)\]$',
lambda m: f'{m.group(1)} Transmog Accessories [Up to level {m.group(2)}]'),
(r'^Armas (PvE|PvP) \[Nivel (.+) a (.+)\]$',
lambda m: f'{m.group(1)} Weapons [Level {m.group(2)} to {m.group(3)}]'),
(r'^Accesorios (PvE|PvP) \[Nivel (.+) a (.+)\]$',
lambda m: f'{m.group(1)} Accessories [Level {m.group(2)} to {m.group(3)}]'),
# Piezas de armadura: "<Pieza> de <material>" (los datos traen "placa" y
# "placas" indistintamente para lo mismo)
(r'^(Botas|Brazales|Cinturones) de (cuero|malla|placa|placas|tela)$',
lambda m: f'{MATERIAL[m.group(2)]} {PIEZA[m.group(1)]}'),
# "(T2 Recolor)" ya está en inglés: se conserva y se traduce solo la base
(r'^(.+) \(T(\d) Recolor\)$',
lambda m: f'{tr(m.group(1))} (T{m.group(2)} Recolor)' if tr(m.group(1)) else None),
]
for pat, fn in rules:
m = re.fullmatch(pat, n)
if m:
return fn(m)
return None # sin traducir
def esc(s):
return s.replace('\\', '\\\\').replace("'", "''")
if __name__ == '__main__':
names = [l.rstrip('\n') for l in sys.stdin if l.strip()]
if not names:
sys.exit('Pásame los nombres por stdin:\n'
" mysql ... -N -e 'SELECT DISTINCT name FROM home_store_category' | "
'python translate_categories.py')
out, missing = {}, []
for n in names:
t = tr(n)
(missing.append(n) if t is None else out.__setitem__(n, t))
if missing:
print('SIN TRADUCIR (%d):' % len(missing), file=sys.stderr)
for m in missing:
print(' ', m, file=sys.stderr)
bad = {k: v for k, v in out.items() if not v or 'None' in str(v)}
if bad:
sys.exit(f'ERROR: traducciones corruptas: {bad}')
with open(OUT, 'w', encoding='utf-8') as f:
f.write("""-- Nombres en inglés de las categorías de la tienda. NO editar a mano:
-- regenerar con sql/db2/translate_categories.py (ver cabecera del script).
-- Los términos del JUEGO salen de los DB2 del cliente (ChrClasses, ItemSet,
-- ItemSubClass): así casan con lo que ve un jugador en inglés. Solo se traduce
-- a mano lo que la tienda se inventó y no existe en el juego.
ALTER TABLE `home_store_category`
ADD COLUMN `name_en` varchar(191) DEFAULT NULL COMMENT 'nombre en inglés; NULL = usar name' AFTER `name`;
""")
for k, v in sorted(out.items()):
f.write("UPDATE `home_store_category` SET `name_en` = '%s' WHERE `name` = '%s';\n"
% (esc(v), esc(k)))
print(f'escritas {len(out)} categorías en {OUT}', file=sys.stderr)
+18
View File
@@ -91,6 +91,7 @@ class DB2:
self.common[fi] = m
self.rows = []
self.row_pos = [] # posición en fichero de cada fila (para string_at)
for s in self.sections:
self._read_section(s)
@@ -99,6 +100,7 @@ class DB2:
o = s['file_offset']
if self.flags & 0x1: # sparse: offset map en vez de registros fijos
raise NotImplementedError('tabla sparse (offset map) no soportada')
rec_start = o
rec_data = d[o:o + s['record_count'] * self.record_size]
o += s['record_count'] * self.record_size
o += s['string_table_size']
@@ -110,6 +112,9 @@ class DB2:
for i in range(s['record_count']):
rec = rec_data[i * self.record_size:(i + 1) * self.record_size]
# Posición del registro en el fichero: la necesita string_at, porque
# los offsets de los strings son relativos al propio campo.
self.row_pos.append(rec_start + i * self.record_size)
row = [self._field(rec, fi, i) for fi in range(self.field_count)]
rid = ids[i] if ids is not None else row[self.id_index]
# common data: valor por id, o el default (c1) si no está listado
@@ -141,3 +146,16 @@ class DB2:
return struct.unpack_from('<I', self.pallet, off)[0]
return 0
raise NotImplementedError(f'storage type {t}')
def string_at(self, row_index, fi, value):
"""Resuelve un campo string de una tabla NO sparse.
El valor guardado no es un offset absoluto ni un índice a la string
table: es un offset RELATIVO a la posición del propio campo dentro del
fichero. 0 = cadena vacía.
"""
if not value:
return ''
pos = self.row_pos[row_index] + self.storage[fi]['offset_bits'] // 8 + value
end = self.d.find(b'\x00', pos)
return self.d[pos:end].decode('utf-8', 'replace')
+227
View File
@@ -0,0 +1,227 @@
-- Nombres en inglés de las categorías de la tienda. NO editar a mano:
-- regenerar con sql/db2/translate_categories.py (ver cabecera del script).
-- Los términos del JUEGO salen de los DB2 del cliente (ChrClasses, ItemSet,
-- ItemSubClass): así casan con lo que ve un jugador en inglés. Solo se traduce
-- a mano lo que la tienda se inventó y no existe en el juego.
ALTER TABLE `home_store_category`
ADD COLUMN `name_en` varchar(191) DEFAULT NULL COMMENT 'nombre en inglés; NULL = usar name' AFTER `name`;
UPDATE `home_store_category` SET `name_en` = '11-1' WHERE `name` = '11-1';
UPDATE `home_store_category` SET `name_en` = '11-2' WHERE `name` = '11-2';
UPDATE `home_store_category` SET `name_en` = '11-3' WHERE `name` = '11-3';
UPDATE `home_store_category` SET `name_en` = '11-4' WHERE `name` = '11-4';
UPDATE `home_store_category` SET `name_en` = '11-5' WHERE `name` = '11-5';
UPDATE `home_store_category` SET `name_en` = '11-6' WHERE `name` = '11-6';
UPDATE `home_store_category` SET `name_en` = '11-7' WHERE `name` = '11-7';
UPDATE `home_store_category` SET `name_en` = '11-8' WHERE `name` = '11-8';
UPDATE `home_store_category` SET `name_en` = '14-1' WHERE `name` = '14-1';
UPDATE `home_store_category` SET `name_en` = '14-2' WHERE `name` = '14-2';
UPDATE `home_store_category` SET `name_en` = '14-3' WHERE `name` = '14-3';
UPDATE `home_store_category` SET `name_en` = '14-4' WHERE `name` = '14-4';
UPDATE `home_store_category` SET `name_en` = '14-5' WHERE `name` = '14-5';
UPDATE `home_store_category` SET `name_en` = '14-6' WHERE `name` = '14-6';
UPDATE `home_store_category` SET `name_en` = '16-1' WHERE `name` = '16-1';
UPDATE `home_store_category` SET `name_en` = '18-1' WHERE `name` = '18-1';
UPDATE `home_store_category` SET `name_en` = '23-10' WHERE `name` = '23-10';
UPDATE `home_store_category` SET `name_en` = '23-14' WHERE `name` = '23-14';
UPDATE `home_store_category` SET `name_en` = '24-1' WHERE `name` = '24-1';
UPDATE `home_store_category` SET `name_en` = '24-10' WHERE `name` = '24-10';
UPDATE `home_store_category` SET `name_en` = '24-12' WHERE `name` = '24-12';
UPDATE `home_store_category` SET `name_en` = '24-13' WHERE `name` = '24-13';
UPDATE `home_store_category` SET `name_en` = '24-14' WHERE `name` = '24-14';
UPDATE `home_store_category` SET `name_en` = '24-4' WHERE `name` = '24-4';
UPDATE `home_store_category` SET `name_en` = '24-6' WHERE `name` = '24-6';
UPDATE `home_store_category` SET `name_en` = '24-8' WHERE `name` = '24-8';
UPDATE `home_store_category` SET `name_en` = '24-9' WHERE `name` = '24-9';
UPDATE `home_store_category` SET `name_en` = '25-1' WHERE `name` = '25-1';
UPDATE `home_store_category` SET `name_en` = '25-2' WHERE `name` = '25-2';
UPDATE `home_store_category` SET `name_en` = '25-3' WHERE `name` = '25-3';
UPDATE `home_store_category` SET `name_en` = '25-4' WHERE `name` = '25-4';
UPDATE `home_store_category` SET `name_en` = '25-5' WHERE `name` = '25-5';
UPDATE `home_store_category` SET `name_en` = '25-6' WHERE `name` = '25-6';
UPDATE `home_store_category` SET `name_en` = '25-7' WHERE `name` = '25-7';
UPDATE `home_store_category` SET `name_en` = '25-8' WHERE `name` = '25-8';
UPDATE `home_store_category` SET `name_en` = '8-1' WHERE `name` = '8-1';
UPDATE `home_store_category` SET `name_en` = '8-2' WHERE `name` = '8-2';
UPDATE `home_store_category` SET `name_en` = '8-3' WHERE `name` = '8-3';
UPDATE `home_store_category` SET `name_en` = '8-4' WHERE `name` = '8-4';
UPDATE `home_store_category` SET `name_en` = '9-1' WHERE `name` = '9-1';
UPDATE `home_store_category` SET `name_en` = '9-2' WHERE `name` = '9-2';
UPDATE `home_store_category` SET `name_en` = '9-3' WHERE `name` = '9-3';
UPDATE `home_store_category` SET `name_en` = '9-4' WHERE `name` = '9-4';
UPDATE `home_store_category` SET `name_en` = '9-5' WHERE `name` = '9-5';
UPDATE `home_store_category` SET `name_en` = '9-6' WHERE `name` = '9-6';
UPDATE `home_store_category` SET `name_en` = 'Trinkets' WHERE `name` = 'Abalorios';
UPDATE `home_store_category` SET `name_en` = 'PvE Accessories [Level 226 to 245]' WHERE `name` = 'Accesorios PvE [Nivel 226 a 245]';
UPDATE `home_store_category` SET `name_en` = 'PvP Accessories [Level 226 to 245]' WHERE `name` = 'Accesorios PvP [Nivel 226 a 245]';
UPDATE `home_store_category` SET `name_en` = 'PvE Transmog Accessories [Up to level 213]' WHERE `name` = 'Accesorios de Transfiguración PvE [Hasta nivel 213]';
UPDATE `home_store_category` SET `name_en` = 'PvP Transmog Accessories [Up to level 213]' WHERE `name` = 'Accesorios de Transfiguración PvP [Hasta nivel 213]';
UPDATE `home_store_category` SET `name_en` = 'Rings' WHERE `name` = 'Anillos';
UPDATE `home_store_category` SET `name_en` = 'Bows' WHERE `name` = 'Arcos';
UPDATE `home_store_category` SET `name_en` = 'Bloodfang Armor (T2 Recolor)' WHERE `name` = 'Armadura Colmillo de Sangre (T2 Recolor)';
UPDATE `home_store_category` SET `name_en` = 'Dragonstalker Armor (T2 Recolor)' WHERE `name` = 'Armadura de Acechadragón (T2 Recolor)';
UPDATE `home_store_category` SET `name_en` = 'Judgement Armor (T2 Recolor)' WHERE `name` = 'Armadura de la Sentencia (T2 Recolor)';
UPDATE `home_store_category` SET `name_en` = 'Weapons' WHERE `name` = 'Armas';
UPDATE `home_store_category` SET `name_en` = 'PvE Weapons [Level 232 to 245]' WHERE `name` = 'Armas PvE [Nivel 232 a 245]';
UPDATE `home_store_category` SET `name_en` = 'PvP Weapons [Level 232 to 245]' WHERE `name` = 'Armas PvP [Nivel 232 a 245]';
UPDATE `home_store_category` SET `name_en` = 'Polearms' WHERE `name` = 'Armas de asta';
UPDATE `home_store_category` SET `name_en` = 'Guns' WHERE `name` = 'Armas de fuego';
UPDATE `home_store_category` SET `name_en` = 'Fist Weapons' WHERE `name` = 'Armas de puño';
UPDATE `home_store_category` SET `name_en` = 'PvE Transmog Weapons [Up to level 226]' WHERE `name` = 'Armas de transfiguración PvE [Hasta nivel 226]';
UPDATE `home_store_category` SET `name_en` = 'PvP Transmog Weapons [Up to level 213]' WHERE `name` = 'Armas de transfiguración PvP [Hasta nivel 213]';
UPDATE `home_store_category` SET `name_en` = 'Thrown' WHERE `name` = 'Arrojadizas';
UPDATE `home_store_category` SET `name_en` = 'Netherwind Regalia (T2 Recolor)' WHERE `name` = 'Atavío Viento Abisal (T2 Recolor)';
UPDATE `home_store_category` SET `name_en` = 'Crossbows' WHERE `name` = 'Ballestas';
UPDATE `home_store_category` SET `name_en` = 'Staves' WHERE `name` = 'Bastones';
UPDATE `home_store_category` SET `name_en` = 'Soul Bag' WHERE `name` = 'Bolsa de almas';
UPDATE `home_store_category` SET `name_en` = 'Bags' WHERE `name` = 'Bolsas';
UPDATE `home_store_category` SET `name_en` = 'Profession Bags' WHERE `name` = 'Bolsas de profesiones';
UPDATE `home_store_category` SET `name_en` = 'Leather Boots' WHERE `name` = 'Botas de cuero';
UPDATE `home_store_category` SET `name_en` = 'Mail Boots' WHERE `name` = 'Botas de malla';
UPDATE `home_store_category` SET `name_en` = 'Plate Boots' WHERE `name` = 'Botas de placa';
UPDATE `home_store_category` SET `name_en` = 'Plate Boots' WHERE `name` = 'Botas de placas';
UPDATE `home_store_category` SET `name_en` = 'Cloth Boots' WHERE `name` = 'Botas de tela';
UPDATE `home_store_category` SET `name_en` = 'Leather Bracers' WHERE `name` = 'Brazales de cuero';
UPDATE `home_store_category` SET `name_en` = 'Mail Bracers' WHERE `name` = 'Brazales de malla';
UPDATE `home_store_category` SET `name_en` = 'Plate Bracers' WHERE `name` = 'Brazales de placa';
UPDATE `home_store_category` SET `name_en` = 'Plate Bracers' WHERE `name` = 'Brazales de placas';
UPDATE `home_store_category` SET `name_en` = 'Cloth Bracers' WHERE `name` = 'Brazales de tela';
UPDATE `home_store_category` SET `name_en` = 'Warlock' WHERE `name` = 'Brujo';
UPDATE `home_store_category` SET `name_en` = 'Death Knight' WHERE `name` = 'Caballero de la Muerte';
UPDATE `home_store_category` SET `name_en` = 'Cloaks' WHERE `name` = 'Capas';
UPDATE `home_store_category` SET `name_en` = 'Quivers | Ammo' WHERE `name` = 'Carcajs | Munición';
UPDATE `home_store_category` SET `name_en` = 'Hunter' WHERE `name` = 'Cazador';
UPDATE `home_store_category` SET `name_en` = 'Shaman' WHERE `name` = 'Chamán';
UPDATE `home_store_category` SET `name_en` = 'Leather Belts' WHERE `name` = 'Cinturones de cuero';
UPDATE `home_store_category` SET `name_en` = 'Mail Belts' WHERE `name` = 'Cinturones de malla';
UPDATE `home_store_category` SET `name_en` = 'Plate Belts' WHERE `name` = 'Cinturones de placa';
UPDATE `home_store_category` SET `name_en` = 'Plate Belts' WHERE `name` = 'Cinturones de placas';
UPDATE `home_store_category` SET `name_en` = 'Cloth Belts' WHERE `name` = 'Cinturones de tela';
UPDATE `home_store_category` SET `name_en` = 'Necks' WHERE `name` = 'Collares';
UPDATE `home_store_category` SET `name_en` = 'Food & Drinks' WHERE `name` = 'Comidas y bebidas';
UPDATE `home_store_category` SET `name_en` = 'Consumables' WHERE `name` = 'Consumibles';
UPDATE `home_store_category` SET `name_en` = 'Containers' WHERE `name` = 'Contenedores';
UPDATE `home_store_category` SET `name_en` = 'Leather' WHERE `name` = 'Cueros';
UPDATE `home_store_category` SET `name_en` = 'Daggers' WHERE `name` = 'Dagas';
UPDATE `home_store_category` SET `name_en` = 'Two-Hand' WHERE `name` = 'Dos manos';
UPDATE `home_store_category` SET `name_en` = 'Druid' WHERE `name` = 'Druida';
UPDATE `home_store_category` SET `name_en` = 'Elementals' WHERE `name` = 'Elementales';
UPDATE `home_store_category` SET `name_en` = 'Elixirs' WHERE `name` = 'Elíxires';
UPDATE `home_store_category` SET `name_en` = 'Darkruned Battlegear (T8 Recolor)' WHERE `name` = 'Equipo de Batalla Runaoscura (T8 Recolor)';
UPDATE `home_store_category` SET `name_en` = 'Destroyer Battlegear (T5 Recolor)' WHERE `name` = 'Equipo de Batalla de Destructor (T5 Recolor)';
UPDATE `home_store_category` SET `name_en` = 'Siegebreaker Battlegear (T8 Recolor)' WHERE `name` = 'Equipo de Batalla de Rompedor del Asedio (T8 Recolor)';
UPDATE `home_store_category` SET `name_en` = 'Battlegear of Wrath (T2 Recolor)' WHERE `name` = 'Equipo de Batalla de la Cólera (T2 Recolor)';
UPDATE `home_store_category` SET `name_en` = 'Sunwell Lightbringer Battlegear' WHERE `name` = 'Equipo de Batalla del Iluminado de la Fuente del Sol';
UPDATE `home_store_category` SET `name_en` = 'Shields' WHERE `name` = 'Escudos';
UPDATE `home_store_category` SET `name_en` = 'Essences & Powders' WHERE `name` = 'Esencias y polvos';
UPDATE `home_store_category` SET `name_en` = 'Swords' WHERE `name` = 'Espadas';
UPDATE `home_store_category` SET `name_en` = 'Flasks' WHERE `name` = 'Frascos';
UPDATE `home_store_category` SET `name_en` = 'Furious Gladiator' WHERE `name` = 'Gladiador Furioso';
UPDATE `home_store_category` SET `name_en` = 'Furious Gladiator (Healer DPS)' WHERE `name` = 'Gladiador Furioso (DPS Sanador)';
UPDATE `home_store_category` SET `name_en` = 'Furious Gladiator (Caster DPS)' WHERE `name` = 'Gladiador Furioso (DPS caster)';
UPDATE `home_store_category` SET `name_en` = 'Furious Gladiator (Melee DPS)' WHERE `name` = 'Gladiador Furioso (DPS melee)';
UPDATE `home_store_category` SET `name_en` = 'Furious Gladiator (DPS)' WHERE `name` = 'Gladiador Furioso (DPS)';
UPDATE `home_store_category` SET `name_en` = 'Furious Gladiator (Healer)' WHERE `name` = 'Gladiador Furioso (Sanador)';
UPDATE `home_store_category` SET `name_en` = 'Relentless Gladiator' WHERE `name` = 'Gladiador Incansable';
UPDATE `home_store_category` SET `name_en` = 'Warrior' WHERE `name` = 'Guerrero';
UPDATE `home_store_category` SET `name_en` = 'Axes' WHERE `name` = 'Hachas';
UPDATE `home_store_category` SET `name_en` = 'Herbs' WHERE `name` = 'Hierbas';
UPDATE `home_store_category` SET `name_en` = 'Shoulders' WHERE `name` = 'Hombreras';
UPDATE `home_store_category` SET `name_en` = 'Leveling Items' WHERE `name` = 'Items de leveo';
UPDATE `home_store_category` SET `name_en` = 'Jewelry' WHERE `name` = 'Joyería';
UPDATE `home_store_category` SET `name_en` = 'The Ten Storms (T2 Recolor)' WHERE `name` = 'Las Diez Tormentas (T2 Recolor)';
UPDATE `home_store_category` SET `name_en` = 'Mage' WHERE `name` = 'Mago';
UPDATE `home_store_category` SET `name_en` = 'Pets' WHERE `name` = 'Mascotas';
UPDATE `home_store_category` SET `name_en` = 'Maces' WHERE `name` = 'Mazas';
UPDATE `home_store_category` SET `name_en` = 'Item Enhancements' WHERE `name` = 'Mejoras de objetos';
UPDATE `home_store_category` SET `name_en` = 'Ores' WHERE `name` = 'Minerales';
UPDATE `home_store_category` SET `name_en` = 'Miscellaneous' WHERE `name` = 'Miscelánea';
UPDATE `home_store_category` SET `name_en` = 'Repeatable Quests' WHERE `name` = 'Misiones repetibles';
UPDATE `home_store_category` SET `name_en` = 'Transmog Currency' WHERE `name` = 'Moneda de transfiguración';
UPDATE `home_store_category` SET `name_en` = 'Currencies' WHERE `name` = 'Monedas';
UPDATE `home_store_category` SET `name_en` = 'Ground Mounts' WHERE `name` = 'Monturas terrestres';
UPDATE `home_store_category` SET `name_en` = 'Flying Mounts' WHERE `name` = 'Monturas voladoras';
UPDATE `home_store_category` SET `name_en` = 'Item Level 200' WHERE `name` = 'Nivel de objeto 200';
UPDATE `home_store_category` SET `name_en` = 'Item Level 213' WHERE `name` = 'Nivel de objeto 213';
UPDATE `home_store_category` SET `name_en` = 'Item Level 219' WHERE `name` = 'Nivel de objeto 219';
UPDATE `home_store_category` SET `name_en` = 'Item Level 226' WHERE `name` = 'Nivel de objeto 226';
UPDATE `home_store_category` SET `name_en` = 'Item Level 232' WHERE `name` = 'Nivel de objeto 232';
UPDATE `home_store_category` SET `name_en` = 'Item Level 232 (Caster DPS)' WHERE `name` = 'Nivel de objeto 232 (DPS caster)';
UPDATE `home_store_category` SET `name_en` = 'Item Level 232 (Melee DPS)' WHERE `name` = 'Nivel de objeto 232 (DPS melee)';
UPDATE `home_store_category` SET `name_en` = 'Item Level 232 (DPS)' WHERE `name` = 'Nivel de objeto 232 (DPS)';
UPDATE `home_store_category` SET `name_en` = 'Item Level 232 (Healer)' WHERE `name` = 'Nivel de objeto 232 (Sanador)';
UPDATE `home_store_category` SET `name_en` = 'Item Level 232 (Tank)' WHERE `name` = 'Nivel de objeto 232 (Tanque)';
UPDATE `home_store_category` SET `name_en` = 'Item Level 239' WHERE `name` = 'Nivel de objeto 239';
UPDATE `home_store_category` SET `name_en` = 'Item Level 245' WHERE `name` = 'Nivel de objeto 245';
UPDATE `home_store_category` SET `name_en` = 'Item Level 245 (Caster DPS)' WHERE `name` = 'Nivel de objeto 245 (DPS caster)';
UPDATE `home_store_category` SET `name_en` = 'Item Level 245 (Melee DPS)' WHERE `name` = 'Nivel de objeto 245 (DPS melee)';
UPDATE `home_store_category` SET `name_en` = 'Item Level 245 (DPS)' WHERE `name` = 'Nivel de objeto 245 (DPS)';
UPDATE `home_store_category` SET `name_en` = 'Item Level 245 (Healer)' WHERE `name` = 'Nivel de objeto 245 (Sanador)';
UPDATE `home_store_category` SET `name_en` = 'Item Level 245 (Tank)' WHERE `name` = 'Nivel de objeto 245 (Tanque)';
UPDATE `home_store_category` SET `name_en` = 'Item Level < 200' WHERE `name` = 'Nivel de objeto < 200';
UPDATE `home_store_category` SET `name_en` = 'Trade Goods' WHERE `name` = 'Objetos comerciables';
UPDATE `home_store_category` SET `name_en` = 'Quest Items' WHERE `name` = 'Objetos de misión';
UPDATE `home_store_category` SET `name_en` = 'Paladin' WHERE `name` = 'Paladín';
UPDATE `home_store_category` SET `name_en` = 'Chests' WHERE `name` = 'Pecheras';
UPDATE `home_store_category` SET `name_en` = 'Scrolls' WHERE `name` = 'Pergaminos';
UPDATE `home_store_category` SET `name_en` = 'Hearthstone' WHERE `name` = 'Piedra hogar';
UPDATE `home_store_category` SET `name_en` = 'Exalted Plate' WHERE `name` = 'Placa Exaltada';
UPDATE `home_store_category` SET `name_en` = 'Potions' WHERE `name` = 'Pociones';
UPDATE `home_store_category` SET `name_en` = 'Rogue' WHERE `name` = 'Pícaro';
UPDATE `home_store_category` SET `name_en` = 'PvE Relic' WHERE `name` = 'Reliquia PvE';
UPDATE `home_store_category` SET `name_en` = 'PvP Relic' WHERE `name` = 'Reliquia PvP';
UPDATE `home_store_category` SET `name_en` = 'Priest' WHERE `name` = 'Sacedorte';
UPDATE `home_store_category` SET `name_en` = 'Priest' WHERE `name` = 'Sacerdote';
UPDATE `home_store_category` SET `name_en` = 'Arena Season 1 Set' WHERE `name` = 'Set de Temporada de Arenas 1';
UPDATE `home_store_category` SET `name_en` = 'Arena Season 2 Set' WHERE `name` = 'Set de Temporada de Arenas 2';
UPDATE `home_store_category` SET `name_en` = 'Arena Season 3 Set' WHERE `name` = 'Set de Temporada de Arenas 3';
UPDATE `home_store_category` SET `name_en` = 'Arena Season 4 Set' WHERE `name` = 'Set de Temporada de Arenas 4';
UPDATE `home_store_category` SET `name_en` = 'Arena Season 5 Set (Savage)' WHERE `name` = 'Set de Temporada de Arenas 5 (Indómito)';
UPDATE `home_store_category` SET `name_en` = 'Arena Season 5 Set (Deadly)' WHERE `name` = 'Set de Temporada de Arenas 5 (Mortal)';
UPDATE `home_store_category` SET `name_en` = 'Arena Season 5 Set (Hateful)' WHERE `name` = 'Set de Temporada de Arenas 5 (Odioso)';
UPDATE `home_store_category` SET `name_en` = 'Tier 1 Raid Set' WHERE `name` = 'Set de banda tier 1';
UPDATE `home_store_category` SET `name_en` = 'Tier 2 Raid Set' WHERE `name` = 'Set de banda tier 2';
UPDATE `home_store_category` SET `name_en` = 'Tier 3 Raid Set' WHERE `name` = 'Set de banda tier 3';
UPDATE `home_store_category` SET `name_en` = 'Tier 4 Raid Set' WHERE `name` = 'Set de banda tier 4';
UPDATE `home_store_category` SET `name_en` = 'Tier 5 Raid Set' WHERE `name` = 'Set de banda tier 5';
UPDATE `home_store_category` SET `name_en` = 'Tier 6 Raid Set' WHERE `name` = 'Set de banda tier 6';
UPDATE `home_store_category` SET `name_en` = 'Tier 7 Raid Set' WHERE `name` = 'Set de banda tier 7';
UPDATE `home_store_category` SET `name_en` = 'Tier 7.2 Raid Set' WHERE `name` = 'Set de banda tier 7.2';
UPDATE `home_store_category` SET `name_en` = 'Tier 8 Raid Set' WHERE `name` = 'Set de banda tier 8';
UPDATE `home_store_category` SET `name_en` = 'Tier 8.2 Raid Set' WHERE `name` = 'Set de banda tier 8.2';
UPDATE `home_store_category` SET `name_en` = 'Dungeon Set 1' WHERE `name` = 'Set de mazmorra 1';
UPDATE `home_store_category` SET `name_en` = 'Dungeon Set 2' WHERE `name` = 'Set de mazmorra 2';
UPDATE `home_store_category` SET `name_en` = 'Temple of Ahn''Qiraj Set' WHERE `name` = 'Set del Templo de Ahn''Qiraj';
UPDATE `home_store_category` SET `name_en` = 'Starter Set 1' WHERE `name` = 'Set inicial 1';
UPDATE `home_store_category` SET `name_en` = 'Starter Set 2' WHERE `name` = 'Set inicial 2';
UPDATE `home_store_category` SET `name_en` = 'PvE Armor Sets [Level 232 to 245]' WHERE `name` = 'Sets de armadura PvE [Nivel 232 a 245]';
UPDATE `home_store_category` SET `name_en` = 'PvP Armor Sets [Level 232]' WHERE `name` = 'Sets de armadura PvP [Nivel 232]';
UPDATE `home_store_category` SET `name_en` = 'PvE Transmog Sets [Up to level 226]' WHERE `name` = 'Sets de transfiguración PvE [Hasta nivel 226]';
UPDATE `home_store_category` SET `name_en` = 'PvP Transmog Sets [Up to level 213]' WHERE `name` = 'Sets de transfiguración PvP [Hasta nivel 213]';
UPDATE `home_store_category` SET `name_en` = 'Held In Off-hand' WHERE `name` = 'Sostener';
UPDATE `home_store_category` SET `name_en` = 'Tabards' WHERE `name` = 'Tabardos';
UPDATE `home_store_category` SET `name_en` = 'Cloth' WHERE `name` = 'Telas';
UPDATE `home_store_category` SET `name_en` = 'Arena Season 2' WHERE `name` = 'Temporada de Arenas 2';
UPDATE `home_store_category` SET `name_en` = 'Arena Season 3' WHERE `name` = 'Temporada de Arenas 3';
UPDATE `home_store_category` SET `name_en` = 'Arena Season 4' WHERE `name` = 'Temporada de Arenas 4';
UPDATE `home_store_category` SET `name_en` = 'Arena Season 5 (Savage)' WHERE `name` = 'Temporada de Arenas 5 (Indómito)';
UPDATE `home_store_category` SET `name_en` = 'Arena Season 5 (Deadly)' WHERE `name` = 'Temporada de Arenas 5 (Mortal)';
UPDATE `home_store_category` SET `name_en` = 'Tier 4 (PvE) | Tier 1 (PvP)' WHERE `name` = 'Tier 4 (PvE) | Tier 1 (PvP)';
UPDATE `home_store_category` SET `name_en` = 'Tier 5 (PvE) | Tier 2 (PvP)' WHERE `name` = 'Tier 5 (PvE) | Tier 2 (PvP)';
UPDATE `home_store_category` SET `name_en` = 'Tier 6 (PvE) | Tier 2 (PvP)' WHERE `name` = 'Tier 6 (PvE) | Tier 2 (PvP)';
UPDATE `home_store_category` SET `name_en` = 'Tier 7.1 (PvE)' WHERE `name` = 'Tier 7.1 (PvE)';
UPDATE `home_store_category` SET `name_en` = 'Tier 7.2 (PvE)' WHERE `name` = 'Tier 7.2 (PvE)';
UPDATE `home_store_category` SET `name_en` = 'Tier 8.1 (PvE)' WHERE `name` = 'Tier 8.1 (PvE)';
UPDATE `home_store_category` SET `name_en` = 'Tier 8.2 (PvE)' WHERE `name` = 'Tier 8.2 (PvE)';
UPDATE `home_store_category` SET `name_en` = 'Armor Tokens' WHERE `name` = 'Tokens de Armadura';
UPDATE `home_store_category` SET `name_en` = 'One-Hand' WHERE `name` = 'Una mano';
UPDATE `home_store_category` SET `name_en` = 'Miscellaneous' WHERE `name` = 'Varios';
UPDATE `home_store_category` SET `name_en` = 'Miscellaneous (Leather)' WHERE `name` = 'Varios (Cuero)';
UPDATE `home_store_category` SET `name_en` = 'Miscellaneous (Mail)' WHERE `name` = 'Varios (Malla)';
UPDATE `home_store_category` SET `name_en` = 'Miscellaneous (Plate)' WHERE `name` = 'Varios (Placas)';
UPDATE `home_store_category` SET `name_en` = 'Miscellaneous (Cloth)' WHERE `name` = 'Varios (Tela)';
UPDATE `home_store_category` SET `name_en` = 'Wands' WHERE `name` = 'Varitas';
UPDATE `home_store_category` SET `name_en` = 'Stormrage Raiment (T2 Recolor)' WHERE `name` = 'Vestiduras de Tempestira (T2 Recolor)';
UPDATE `home_store_category` SET `name_en` = 'Nemesis Raiment (T2 Recolor)' WHERE `name` = 'Vestiduras de la Némesis (T2 Recolor)';
UPDATE `home_store_category` SET `name_en` = 'Vestments of Transcendence (T2 Recolor)' WHERE `name` = 'Vestimentas de Trascendencia (T2 Recolor)';