Ficha de personaje: zona/raza/clase multiidioma (ES/EN)

Añade mapa de zonas en inglés (lib/data/zone-names-en.json, 9675 zonas de
FusionCMS wow_zones.php; cobertura 100% de los ids del mapa ES) y nombres de
raza/clase EN (wow_constants.php). getZoneName/getRaceName/getClassName aceptan
locale (EN cae a ES si falta). getAccountDashboard(session, locale) lo propaga y
my-account pasa el idioma. El dinero (oro/plata/cobre) usa iconos, universal.
Verificado: Innadin -> Human/Paladin/Stormwind City en /en.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-14 20:11:30 +00:00
parent 794021f9a3
commit 2e9106f0bf
4 changed files with 42 additions and 12 deletions
+1 -1
View File
@@ -43,7 +43,7 @@ export default async function AccountPage({ params }: { params: Promise<{ locale
// webhooks) antes de leer el saldo de PD, para que se muestre actualizado.
if (session.accountId) await reconcileSumUpCheckouts({ accountId: session.accountId }).catch(() => {})
const data = await getAccountDashboard(session)
const data = await getAccountDashboard(session, locale)
const admin = await isAdmin(session)
const rank = getAccountRank(data.dp)
// Cuentas de juego de la Battle.net (para el selector si hay más de una).
+4 -4
View File
@@ -53,7 +53,7 @@ export interface AccountDashboard {
}
/** Datos del panel de cuenta. Resiliente si las BD de AzerothCore no están pobladas. */
export async function getAccountDashboard(session: SessionData): Promise<AccountDashboard> {
export async function getAccountDashboard(session: SessionData, locale = 'es'): Promise<AccountDashboard> {
const accountId = session.accountId ?? 0
let dp = 0
@@ -159,10 +159,10 @@ export async function getAccountDashboard(session: SessionData): Promise<Account
copper: r.money % 100,
race: r.race,
classId: r.class,
className: getClassName(r.class),
raceName: getRaceName(r.race),
className: getClassName(r.class, locale),
raceName: getRaceName(r.race, locale),
classCss: getClassCss(r.class),
zone: getZoneName(r.zone),
zone: getZoneName(r.zone, locale),
imageUrl: getCharacterImage(r.class, r.race, r.gender),
}))
} catch {
+36 -7
View File
@@ -1,11 +1,15 @@
// Metadatos de personaje portados de home/views/account.py + home/zone_definitions.py.
import zoneNames from './data/zone-names.json'
import zoneNamesEn from './data/zone-names-en.json'
const ZONE_NAMES = zoneNames as Record<string, string>
const ZONE_NAMES_EN = zoneNamesEn as Record<string, string>
/** Nombre de la zona a partir de su ZoneID (o "Zona desconocida"). */
export function getZoneName(zoneId: number): string {
return ZONE_NAMES[String(zoneId)] ?? 'Zona desconocida'
/** Nombre de la zona a partir de su ZoneID, según idioma (EN cae a ES si falta). */
export function getZoneName(zoneId: number, locale = 'es'): string {
const id = String(zoneId)
if (locale === 'en') return ZONE_NAMES_EN[id] ?? ZONE_NAMES[id] ?? 'Unknown zone'
return ZONE_NAMES[id] ?? 'Zona desconocida'
}
const CLASS_MAP: Record<number, string> = {
@@ -77,6 +81,19 @@ const RACE_NAME: Record<number, string> = {
10: 'Elfo de Sangre',
11: 'Draenei',
}
// Nombres en inglés (FusionCMS wow_constants.php).
const RACE_NAME_EN: Record<number, string> = {
1: 'Human',
2: 'Orc',
3: 'Dwarf',
4: 'Night Elf',
5: 'Undead',
6: 'Tauren',
7: 'Gnome',
8: 'Troll',
10: 'Blood Elf',
11: 'Draenei',
}
const CLASS_NAME: Record<number, string> = {
1: 'Guerrero',
@@ -90,10 +107,22 @@ const CLASS_NAME: Record<number, string> = {
9: 'Brujo',
11: 'Druida',
}
const CLASS_NAME_EN: Record<number, string> = {
1: 'Warrior',
2: 'Paladin',
3: 'Hunter',
4: 'Rogue',
5: 'Priest',
6: 'Death Knight',
7: 'Shaman',
8: 'Mage',
9: 'Warlock',
11: 'Druid',
}
export function getRaceName(race: number): string {
return RACE_NAME[race] ?? '—'
export function getRaceName(race: number, locale = 'es'): string {
return (locale === 'en' ? RACE_NAME_EN : RACE_NAME)[race] ?? '—'
}
export function getClassName(classId: number): string {
return CLASS_NAME[classId] ?? '—'
export function getClassName(classId: number, locale = 'es'): string {
return (locale === 'en' ? CLASS_NAME_EN : CLASS_NAME)[classId] ?? '—'
}
File diff suppressed because one or more lines are too long