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:
@@ -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).
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user