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.
|
// webhooks) antes de leer el saldo de PD, para que se muestre actualizado.
|
||||||
if (session.accountId) await reconcileSumUpCheckouts({ accountId: session.accountId }).catch(() => {})
|
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 admin = await isAdmin(session)
|
||||||
const rank = getAccountRank(data.dp)
|
const rank = getAccountRank(data.dp)
|
||||||
// Cuentas de juego de la Battle.net (para el selector si hay más de una).
|
// 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. */
|
/** 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
|
const accountId = session.accountId ?? 0
|
||||||
|
|
||||||
let dp = 0
|
let dp = 0
|
||||||
@@ -159,10 +159,10 @@ export async function getAccountDashboard(session: SessionData): Promise<Account
|
|||||||
copper: r.money % 100,
|
copper: r.money % 100,
|
||||||
race: r.race,
|
race: r.race,
|
||||||
classId: r.class,
|
classId: r.class,
|
||||||
className: getClassName(r.class),
|
className: getClassName(r.class, locale),
|
||||||
raceName: getRaceName(r.race),
|
raceName: getRaceName(r.race, locale),
|
||||||
classCss: getClassCss(r.class),
|
classCss: getClassCss(r.class),
|
||||||
zone: getZoneName(r.zone),
|
zone: getZoneName(r.zone, locale),
|
||||||
imageUrl: getCharacterImage(r.class, r.race, r.gender),
|
imageUrl: getCharacterImage(r.class, r.race, r.gender),
|
||||||
}))
|
}))
|
||||||
} catch {
|
} catch {
|
||||||
|
|||||||
@@ -1,11 +1,15 @@
|
|||||||
// Metadatos de personaje portados de home/views/account.py + home/zone_definitions.py.
|
// Metadatos de personaje portados de home/views/account.py + home/zone_definitions.py.
|
||||||
import zoneNames from './data/zone-names.json'
|
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 = 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"). */
|
/** Nombre de la zona a partir de su ZoneID, según idioma (EN cae a ES si falta). */
|
||||||
export function getZoneName(zoneId: number): string {
|
export function getZoneName(zoneId: number, locale = 'es'): string {
|
||||||
return ZONE_NAMES[String(zoneId)] ?? 'Zona desconocida'
|
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> = {
|
const CLASS_MAP: Record<number, string> = {
|
||||||
@@ -77,6 +81,19 @@ const RACE_NAME: Record<number, string> = {
|
|||||||
10: 'Elfo de Sangre',
|
10: 'Elfo de Sangre',
|
||||||
11: 'Draenei',
|
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> = {
|
const CLASS_NAME: Record<number, string> = {
|
||||||
1: 'Guerrero',
|
1: 'Guerrero',
|
||||||
@@ -90,10 +107,22 @@ const CLASS_NAME: Record<number, string> = {
|
|||||||
9: 'Brujo',
|
9: 'Brujo',
|
||||||
11: 'Druida',
|
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 {
|
export function getRaceName(race: number, locale = 'es'): string {
|
||||||
return RACE_NAME[race] ?? '—'
|
return (locale === 'en' ? RACE_NAME_EN : RACE_NAME)[race] ?? '—'
|
||||||
}
|
}
|
||||||
export function getClassName(classId: number): string {
|
export function getClassName(classId: number, locale = 'es'): string {
|
||||||
return CLASS_NAME[classId] ?? '—'
|
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